Pull to refresh
74
0
Дмитрий @darkdimius

Компиляторщик

Send message
Кстати: вопрос вдогонку на тему Generic+колекции:
у Map<K,V>
put(K key, V value)
но V get(Object key).
Почему в одном случае тип ключа V а в другом Object.
Рядом с вопросом о GC и cache задаю вопросы о отличиях WeakRefferece, PhantomRefference и SoftReference.
забыл: пару вопросов о GC, о загрузке классов, было просил написать свою реализацию gc: представим что GC у JVM нет, человек должен был сделать некий super-class для всех обьектов, и должен был быть «личным» gc для них.
Потом попросил его сделать анализ работы этого GC с профайлером и пояснить почему он так работает.
ЗЫ: это был очень сильный соискатель и было очень приятно с ним говорить, потому и писали такую интересную вещь.

Задаю вопросы о production-мониторинге. Что и как нужно отслеживать в продакшене. Разок когда дал кусок кода написанного в моей команде и попросил в течении 3 часов разобраться как он работает и там где считает нужным расставить мониторинговые вызовы(дал в руки библиотеку metrics)
Зы: вопросы которые я задаю Junior не сильно отличаются от тех что Senior. Просто ожидаю разный уровень ответов.

Теория — пару вопросов из этого списка, чуть под настроение(вычеты, сортировки, перестановки, графы, древья: чтото базовое что можно вывести на месте) и разные вопросы на многопоточность:
как устроен CopyOnWriteArrayList. Зачем он так устроен?
Когда имеет смысл паралелить алгортм(хорошо если знает закон Амдала)?
Прошу написать принципы реализации многопоточных списков и кольцевого буфера. а неблокирующие?
Прошу придумать как бы он реализовывал многопоточный HashMap в случае разных паттернов работы с ним.
Как бы он реализовал кеш для приложения? а персистентный?
Как можно остановить поток выполняющий код который не находится под нашим контролем?
Из чего состоит переключение контекста процессора между потоками и процессами? сколько оно стоит?

Когда не знает ответа на вопрос(или даже не понимает формулировки) поясняю ему вопрос, я хочу увидеть как он мыслит.
После прошу написать реалию минимального приложения, тоже под настроение и в зависимости от диалога: последние варианты были написать сервис быстро возвращающий среднее в массиве(то есть к нему по сети приходят запросы «добавить елемент a» и «верни среднее»). На задачку даю часа 3-4. Для этого даю ему некий костяк — интерфейс который он должен реализовать и интерфейсы которыми он может пользоваться. Сам быстренько реализую последние.
Тут смотрю как они пишет тесты и mock-реализации(и пишет ли), пишет ли комментарии, как структурирует код. Обычно я наблюдаю что это спрашивают устно, но ИМХО в таких вопросах устный ответ часто в корни разнится от реальности.
На самом деле Роберт Седжевик доказал совершенно другое:
при использовании SUHA — предположении о равновероятном и независимом от исходов уже проведенных эксперементов присвоении метки(это не просто «на одинаковые части», это намного больше) будет image.

Факт связанный с логарифмами доказанный недавно Седжвиком совершенно другой:
он в 2008 году придумал более простую конструкцию родственную красно-черным древьям, называется Left-leaning red–black tree. У них оценка операций вставки\удаления log(n). Но они удобнее в реализации и константа меньше

Другой вариант из «логарифмы и Седжевик» — он доказал что, при испрользовании Cockoo hashing(это опять не то что в HashMap) в предположении SUHA, оценка сверху для для loadFactor будет image
O — нотация это обозначение принадлежности к множеству.
Под записью O(g(x)) = f(x) имеется ввиду что f(x) принадлежит множеству функций асимптотически ограниченных сверху функцией g(x) умноженной на некую константу.

Никто не мешает на место f(x) засунуть более сложную функцию, например содержащую мат-ожидание.
И действительно для Хеш-таблицы с цепочковой индексацией матожидание(в пространстве таблиц с одинаковым размером и равновероятными ключами ) времени поиска будет O(1+loadFactor)
Сегодня поставил под гентой — работает. Ставил из оверлея gamerlay
Как раз подготавливать надо. Для реальных больших графов используются комбинации HubLabels\NaturalCuts\A*, что дает возможность искать пути за 10мсек на графе в миллион ребер и сотни тысяч вершин. Попробуйте такой скорости добиться просто Дейкстрой.

Другое дело что эти методы я тоже не узнал бы не учась в вузе
Сильно зависит от того, зачем этот диплом именно Вам. Если чтобы попасть работу — то действительно он не нужен.
Сейчас идет получать высшее образование много людей которые идут только ради диплома — на первые курсы набирают в десять-двадцать раз больше чем в середине прошлого века. Потому действительно уровень образования сильно упал.

Я на данный момент учусь в Москве, изучаю алгоритмы, в частности сегодня докладывался о такой интересной структуре данных как Y-Fast trie которая умеет искать ближайшее число к данному в множестве за log log U, где U — ограничение на размер элементов. Да, повторный логарифм. Это очень красивая структура данных и я получил эстетическое наслаждение от ее изучения. Потому я не ставлю вопрос «нужно ли мне образование». И считаю, что если же вы ставите этот вопрос — скорее всего оно вам не нужно.

Также меня всегда удивляло мнение большинства жителей СНГ что получать высшее нужно за один присест и сразу после школы. Это не так, большинство моих знакомых иностранцев получали своего магистра в возрасте более 25. Либо потому что они гуляли, либо потому что стажировались\работали в компаниях.
x220 более года. Ношу всегда с собой и такой проблемы не наблюдаю.
Мне устройство вроде такой переносной wifi точки размером с коробок спичек оказалось удобнее чем USB-to-Ethernet. Да не гигабит, но свобода от проводов.
-Как обстоят дела с работой/вакансиями для скалы и связанных тем?

Я бы не говорил что scala должна быть критерием отбора сотрудников\критерием поиска компании. Это очередной язык который имеет свою область применимости, пусть и очень обширную.
После появления курса от Мартина, стало намного лучше с сотрудниками, которые знают хотябы азы. Но все равно нужно учить большинство. Но такую же проблему я наблюдаю и с java+concurrency(знают в лучшем случае азы) потому не считаю это особенностью

-Проект свой делаете или заказные?

Внутренний проект для полу-государственной конторы.

-Используете чисто скалу или вместе с явой?

Мне тяжело представить ситуацию, когда scala не опираеться на фундамент java. Аналогов jetty\netty на скале нет.

Мы используем amazon sdk(java)+ своя прослойка к нему(абстракция чтоб в любой момент можно было уйти от aws)
jackson, многое из apache commons, netty.
Из scala библиотек выделяется akka+бесподобная библиотека коллекций scala.
Спасибо!

пожалуйста
У нас nosql(DynamoDb) потому orm в классическом смысле у нас не применим, и в качестве orm используем jackson-mapping с помощью аннотаций.
Достаточно удобно.
Знакомые хвалят slick но я с ним опыта не имел.
Team-lead группы разработки использующей
Play framework 2,
Scala,
Akka,
Amazon ec2,
Amazon DynamoDB.

Есть опыт оптимизации потребления денег на amazon-е. Те программные игры на рынке reserved+dedicated+spot instance-ов. Идеи позволяют реально экономить.(Когдато этоже решение позволяло использовать scalaxy, но по причине их ненадежности и проблем с безопасностью уже нет к ним доверия).

Хорошо знаю особенности работы noSql и Cassandra в частности, последняя — мой диплом.
Продолжаем использовать Jira только по причине существования Bonfire, который очень экономит время и упрощает работу с сотрудниками не-технарями.
Есть ли в планах реализация сравнимого функционала?
Ранее получение Associate не было предусловием для получения Professional(можно было сразу идти на Professional).
Сейчас стало?
Существует What You See Is What You Mean редактор теха — lyx. Очень советую.
break в середине позволяет в любой момент выйти из блока кода.
на самом деле уже сейчас есть некоторый задел того, что «паяльник не поможет». Смотрите понятия неотслеживаемость (untracebility) и протоколы типа «подбрасывание монеты по телефону'' и „игры в покер по телефону“. В итоге можно получить ситуацию, когда „не ясно к кому идти с паяльником“ после проведения сделки, хотя сделка проведена с полным доверием даже к источнику данных.

Отельным вопросом стоит то, что внедрение подобных систем существенно уменьшит возможности государственного контроля областей куда эти системы могут быть внедрены(по большей части речь идет о банковских системах). Эти проблемы могут оказаться даже больше чисто математических.
ps: с маленькими правками(что второй текст должен быть не не просто «текст» а истинно случайной последовательностью) это описание шифра Вернама. Это единственный шифр для которого без предположений доказана абсолютная криптографическая стойкость.

Information

Rating
Does not participate
Location
Россия
Registered
Activity