Тестовые задания в Яндексе. Часть 2.

Как и планировал, опробовал второй способ сортировки, а именно сортировку подсчетом. Кода в разы меньше, сам код куда проще, но… Крайне плохо масштабируемое решение с сильной зависимостью от количества доступной памяти. Так при использовании максимального количества доступной памяти в 256 Мб, приходится делать 64 прохода по файлу. Если же попытаться разнести чтение и запись (как я писал раньше, асинхронная запись дает ускорение приблизительно в 10-15%) то количество проходов вырастает до 128 и итоговая скорость оказывается даже меньше чем при последовательной обработке. Так же, мое решение не будет корректно работать в том случае, если количество одинаковых элементов превысит максимальное значение помещающееся в size_t.
Тем не менее, сортирует довольно быстро: 1 Гб, в среднем, обрабатывается за 108 секунд.

P.S. а вообще, я выдохся с данной задачкой (как делать ясно, побочные эффекты алгоритмов тоже очевидны), так что вернусь ней… через еще пару лет?

Тестовые задания в Яндексе

Когда-то, давным-давно, в разгар активного поиска работы я написал в Яндекс. Не то что бы я думал туда пройти, все же алгоритмы не моя сильная сторона, но мне подумалось “а почему бы не попробовать, особенно с учетом того, что на РСДНе ходят легенды о полнейшей невменяемости собеседующих там товарищей”. Вобщем решил сходить и чисто позырить. Позырить мне так и не удалось, т.к. яндексовцы дали тестовое задание на дом, а на такое я принципиально не соглашаюсь. Но, надо признать, задание было интересное, и я его прикопал с целью когда-нибудь, когда будет соответствующее настроение, решить. Соответствующего настроения не было у меня два года, и вдруг оно появилось! Continue reading

Переход из C++ в Java.

Так как в последние пол года, или даже больше, я активно работаю с Java, у меня родился вопрос целесообразности полного перехода с одного языка программирования на другой. С одной стороны, при том что я как работал с сетевыми приложениями, так и работаю, мне совершенно фиолетово на каком языке эти самые сетевые приложения писать. С другой стороны, потенциальным работодателям, обычно, это не все равно, а их мнение приходится учитывать.

Так что, я решил подойти к вопросу просто. А что может быть проще и логичнее чем поинтересоваться у HR о текущем спросе на Core Java разработчиков? Что я и сделал.

Хотя каких-то дельных ответов в самой ветке обсуждения я не получил, довольно много кто отписался лично. Несколько человек спросило не интересна ли мне работа связанная с C++ на суммы от 150 до 180, что, живи я в МСк, могло бы быть интересным. А еще несколько человек поделились по секрету информацией о том, что Core Java разработчик, обычно, претендует на 100-150, само собой, в той же МСк.

Так что, никакого экономического смысла в таком переходе нет. Специалисты со знанием C++ как были нужны, так и будут нужны еще много лет. А мне только-только начала нравиться Java %)))

Зачем пишут OpenSource приложени и что же можно написать…

На днях на РСДН всплыли сразу две интересные темы Для чего создаются Open Source проекты Задачки для самообразования. Лично у меня давно сформировалось мнение относительно этих вопросов, которым мне и хочется поделиться.

Начну с того, зачем вообще нужно писать OpenSource приложения и что это может дать обычному разработчику. Да, именно обычному разработчику, а не некой компании.

Во-первых, наличие OpenSource проектов это – огромный бонус при приеме на работу. Несмотря на то, что среди разработчиков ходит довольно нелепый миф про работодателей, которым совершенно плевать на OpenSource проекты потенциальных кандидатов, дела обстоят совершенно иначе. OpenSource проект – это код, который всегда можно легко оценить, глянуть историю изменений и, как следствие, легко составить мнение о потенциальном кандидате. Сразу видно как человек пишет код, как он думает и как он делает рефакторинг, если, конечно, он его вообще делает. Так же видно, какие у человека интересы и взгляды на прекрасное.

Во-вторых, OpenSource проект это – экономия времени при поиске работы. Довольно часто потенциальный работодатель просит пример кода либо выполнить тестовое задания. Так как при отсутствии собственных проектов такой код взять неоткуда, разве что украсть у предыдущего работодателя, то приходится или делать тестовое задание, или отказываться от вакансии. В то же время, вместо выполнения тестового задания всегда можно прислать ссылку на собственный OpenSource проект.

Continue reading

Обзор от PRUFFI

PRUFFI последнее время стал делать какое-то подобие обзора ЗП на IT рынке. В целом обзор не шибко информативен и, как мне кажется, несколько оторван от жизни. Я, вобщем-то представляю, где можно найти работу тимлида с оплатой в 150-170 тыр, но вот где дают 200-250? Теряюсь в догадках.

Как перейти из C++ разработки в Java.

Работа – штука занятная. Бывает что пишешь в течении 10 лет на плюсах, знаешь их довольно хорошо, и, вдруг, херась, и ты стал ведущим Java-разработчиком. Причем, ты даже не хотел переквалифицироваться, т.к. работодатели разрывали на куски, да и вообще инструмент нравился. Но, раз уж ввязался, не разрывать же контракт из-за такой мелочи как новый язык программирования.

Тем не менее, после такой неожиданной «переквалификации», остро встает вопрос вхождения в тему. Да, языки похожи, но библиотеки имеют мало чего общего, да и вообще, надо бы понимать что ты делаешь. Конечная цель в моем случае, выглядит приблизительно так: сетевая низкоуровневая разработка + безопасность + немного WEB-морд (Spring + JSP).

Так как долгая разработка сетевых и распределённых приложений на плюсах дает довольно хороший бэкграунд, то, в качестве «Ведения в Java» пришлось прочесть/пролистать не так уж и много. Самое полезное, что я нашел:

  1. The Structure of the Java Virtual Machine. Глупо работать с инструментом, не имея представления о его внутреннем устройстве. Так что начать надо именно с этого.

  2. Memory Management in the Java HotSpotTM Virtual Machine. Терпеть не могу работать с каким-то языком, не зная как же язык обращается с памятью. На мой взгляд, это одно из основных знаний о любом языке программирования

  3. Java for C++ Programmers. Небольшое введение в язык. Все основные вопросы рассматриваются, писать код можно начинать сразу после прочтения.

  4. Effective Java , Second Edition . Joshua Bloch. Чем-то напоминает книги «Эффективное использование C++». По большому счету, чтобы понять Java после C++ этого полностью хватает.

  5. Java Network Programming . Elliotte Rusty Harold . Книга довольно бестолковая, тем не менее это лучшее что я нашел по сетям в Java. Читать не стоит, а пролистать — очень даже.

  6. Java Concurrency in Practice. Brian Goetz, … . Аналогично предыдущей. Читать много и муторно, но пролистать надо.

Собственно, это все, что на данный момент мне кажется нужным для нормального вхождения, т.е. выполнения первого пункта «сетевая низкоуровневая разработка». Как пройду ребус дальше — отпишусь.

Многообещающе

Открылся, как мне кажется, довольно многообещающий сервис по поиску работы Карьера 2.0 на небезызвестном StackOverflow. Регистрация соискателей либо по приглашению, либо за заслуги “перед отечеством”, в моем случае проекты на GitHub зачлись. С учетом бешенной популярности StackOverflow, думается, что данный сервис может очень пригодиться в поиске работы.

Трудоустройство в Samsung.

Привет тебе, читающий этот популярный пост. Перед тем как серьезно воспринимать написанное подумай! Со времени написания поста прошло не менее 7 лет и многое кардинально изменилось!

Несмотря на то, что Корея в целом и Самсунг в частности являются центрами мирового зла, возможно кому-то будет интересно как туда попасть или почему туда кто-то может хотеть попасть. Continue reading

Mac разработчики редки и ценны :)

На РСДН-е появилась вакансия Mac OS X разработчика в Каспер. Что странно, денег дают даже больше чем разработчикам вендовых драйверов. Честно сказать, меня это удивляет, с учетом того, что требования к разработчикам под MacOS довольно низкие. Ни у кого нет Маков? Ни кому под них не интересно писать?

Но в любом случае: добро пожаловать

Классическая задача для собеседования в реальной жизни

Случилось странное – я столкнулся с буквально классической задачей с собеседования в реальной жизни. Задача состоит в том, что необходимо найти первый не нулевой бит в массиве. Поиск должен происходить максимально быстро, скорость поиска желательно получить приближённую к линейной. Никаких правил по распределению единиц в массиве нет. Массив не велик и должен не вылезать за пределы одной кэш-линии.
Родились 3 варианта алгоритма, одна часть которого общая во всех случаях, вторая специфическая.
Общая часть сводится к поиску первого 32 разрядного слова с хотя бы одним не нулевым битом. Дальше, в найденном 32 разрядном слове ищем первый не нулевой бит. Я не знаю как можно оптимизировать первую часть алгоритма, так что ищу простым перебором. Continue reading