с полей боёв
Nov. 9th, 2010 12:02 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Сегодня меня четыре раза спрашивали, как работает сборка мусора в джаве. Как будто это имеет какое-то значение. И как будто уходит больше пяти минут ознакомиться с какой-нибудь статейкой, где написано, мол, mark and sweep. Один раз по телефону, и три раза в одной интересной конторе, где, вроде бы, люди умные, но какие-то слегка очумелые.
А ещё попросили написать функцию, которая берёт два целых массива и возвращает их пересечение. но называется merge. Потом переименовали в процессе. Потом попросили без
А ещё этот же человек долго добивался от меня, что такое reference в джаве. И как работает атомный плюс. Я предположил, что можно ж и через native. Нет, на самом деле, всё через CAS.
Зато первый интервьюёр понравился - ему я рисовал код, использующий ConcurrentHashMap<String, AtomicInteger>.
На самом деле, я не понимаю этого народного обсещена с синхронизацией. Что там не тривиально? И чем так уж особо интеллектуален ConcurrentHashMap, вы б поглядели сырцы. Иногда возникает ощущение, что если в коде больше одной нитки, то у программиста начинает кружиться голова, и внутри просыпаются и начинают бегать тараканы.
Лучше б задумались, почему из List<Set<T>> можно сделать Set<List<T>>, а обратно нельзя? Что-то с энтропией? Или это можно всё выразить в виде функториальных уравнений (с блэкджеком и шлюхами), и энтропия вытекает из этих уравнений? Забавно, правда? А если Option или Exception туда вбросить? Будет иерархия по энтропии?
А ещё попросили написать функцию, которая берёт два целых массива и возвращает их пересечение. но называется merge. Потом переименовали в процессе. Потом попросили без
Set
. Потом я сказал, ну хрен с ним, тогда будет O(m*n). Потом попросили распараллелить на multiple threads. А потом, внимание, спросили, почему я не использовал heapsort. И я потом долго допытывался, почему именно heapsort поможет профессионалу. А ещё этот же человек долго добивался от меня, что такое reference в джаве. И как работает атомный плюс. Я предположил, что можно ж и через native. Нет, на самом деле, всё через CAS.
Зато первый интервьюёр понравился - ему я рисовал код, использующий ConcurrentHashMap<String, AtomicInteger>.
На самом деле, я не понимаю этого народного обсещена с синхронизацией. Что там не тривиально? И чем так уж особо интеллектуален ConcurrentHashMap, вы б поглядели сырцы. Иногда возникает ощущение, что если в коде больше одной нитки, то у программиста начинает кружиться голова, и внутри просыпаются и начинают бегать тараканы.
Лучше б задумались, почему из List<Set<T>> можно сделать Set<List<T>>, а обратно нельзя? Что-то с энтропией? Или это можно всё выразить в виде функториальных уравнений (с блэкджеком и шлюхами), и энтропия вытекает из этих уравнений? Забавно, правда? А если Option или Exception туда вбросить? Будет иерархия по энтропии?
no subject
Date: 2010-11-09 08:37 am (UTC)no subject
Date: 2010-11-09 08:50 am (UTC)Надо фокусироваться на красоте и чистоте. Вот тут-то философия и поможет. Чтоб не торчать на работе по 70 часов в неделю.
no subject
Date: 2010-11-09 11:04 am (UTC)может быть хотят узнать имеете ли вы представление скажем о слабых, мягких, фантомных ссылках, финализаторах...
может они недавно наступили на какую-то неприятную багу со stop the world сборщиком --- нааллоцировали обьектов и получили паузу в лоб.
я вообще понимаю, что "elegance is not a dispensable luxury but a quality that decides between success and failure", но элегантность она возникает из баланса между практикой и теорией, а не из одной галимой теориии.
no subject
Date: 2010-11-09 12:45 pm (UTC)А в жаве так себя ведёт в принципе любой граф объектов.
no subject
Date: 2010-11-09 09:02 am (UTC)no subject
Date: 2010-11-09 09:17 am (UTC)no subject
Date: 2010-11-09 09:42 am (UTC)no subject
Date: 2010-11-09 04:07 pm (UTC)no subject
Date: 2010-11-09 09:07 pm (UTC)no subject
Date: 2010-11-10 03:50 am (UTC)no subject
Date: 2010-11-15 10:56 am (UTC)Причём это как бы обратная функция для декартова произведения, но оно не является обратной функцией для неё. Можно даже вывести в результате операцию замыкания -- типа, берём произвольное множество списков, превращаем в список множеств, потом обратно во множество списков. В ней наверное есть какой-нибудь глубокий смысл, типа строит своего рода выпуклую оболочку или ещё что-нибудь такое.
no subject
Date: 2010-11-09 09:56 am (UTC)no subject
Date: 2010-11-09 05:50 pm (UTC)Questions about GC/classloaders allow to check how experienced a developer is in the Java platform. They are not discussed much in typical Java books. And people who work on something serious (e.g. in telecom/finance where latency matters) usually are quite familiar with both.
In my experience, the world is full of Java developers who know next to nothing about j.u.c even though it's arguably the second most important part of the standard library (after the Collections framework) and there's a definitive book. Incidentally, those people tend to have a J2EE background :)
no subject
Date: 2010-11-09 07:52 pm (UTC)no subject
Date: 2010-11-10 07:10 am (UTC)They only person writing in Scala is... guess who?
Oh, whatever.
no subject
Date: 2010-11-09 06:02 pm (UTC)Ну не всё так просто.
no subject
Date: 2010-11-09 08:25 pm (UTC)там юнит тесты не помогают посредственным разработчикам сделать чтобы программа работала хоть както :)
ps я сам весьма посредственный разработчик если чо