Как стать автором
Обновить
22
-1.2

Пользователь

Отправить сообщение

Развеиваем мифы о собеседованиях в FAANG

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров15K

Наверное, уже все слышали про процесс собеседования в FAANG (и другой BigTech). Leetcode задачи, системный дизайн, поведенческие вопросы, culture fit, и прочие баззворды регулярно обсуждаются на Хабре. Коллективный разум Хабра более или менее пришел к общему консенсусу: это бессмысленная процедура, которую проектировали некомпетентные люди.

Волею судеб за десять лет опыта в FAANG+ мне повезло обсудить тему найма с множеством высокоуровневых инженеров, менеджеров, директоров, а также членов комитетов, принимающих решения о найме, из нескольких FAANG компаний. Этой статьей я хочу попробовать донести их позицию до широкой аудитории.

И в чем же смысл литкода?
Всего голосов 43: ↑36 и ↓7+36
Комментарии179

Перестаём бояться генерировать байт-код

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров15K

Многие, возможно, думают, что работа с байт-кодом Java (будь то чтение или, тем более, генерация) — это какая-то особенная магия, доступная только продвинутым разработчикам с особенно крутым опытом. На самом деле, я считаю такую точку зрения ошибочной. JVM устроена гораздо проще, чем CPU; она оперирует такими высокоуровневыми понятиями как классы, интерфейсы, методы, а не просто лопатит байты в памяти. В отличие от CPU, который легко уронить криво сгенерированным машинным кодом, JVM заботливо отверифицирует любой байт-код и в общем не даст выстрелить в ногу.

Но с чего начать погружение в байт-кодную магию? В сети есть некоторое количество туториалов по этому вопросу. Как мне кажется, они либо показывают слишком простые случаи, от которых непонятно, как перейти к чему-то более интересному, либо очень основательные и требуют вникать в теорию, собирать целиком картину в голове по кусочкам. Я хотел бы попробовать внести свой вклад в эту тему — надеюсь, у меня получится показать, как можно побороть первый страх и написать что-то похожее на реалистичный сценарий без особого вникания в теорию на первом этапе.

Весь приведённый код доступен в моём репозитории.

Читать далее
Всего голосов 26: ↑25 и ↓1+32
Комментарии18

Разница между загрузкой и инициализацией классов в Java на любопытном примере

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров13K

Привет, сегодняшняя статья будет о некоторых тонкостях загрузки и инициализации классов и немного о производительности (совсем чуть-чуть и в самом конце).


Поводом для написания статьи стал вопрос на StackOverflow. Откройте, но не торопитесь читать ответ ;)

Читать дальше →
Всего голосов 21: ↑20 и ↓1+23
Комментарии2

Вулканический поросенок, или SQL своими руками

Время на прочтение15 мин
Количество просмотров15K


Сбор, хранение, преобразование и презентация данных — основные задачи, стоящие перед инженерами данных (англ. data engineer). Отдел Business Intelligence Badoo в сутки принимает и обрабатывает больше 20 млрд событий, отправляемых с пользовательских устройств, или 2 Тб входящих данных.


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


Словом, любопытствующим и сильным духом разработчикам и адресована эта статья. В ней вы найдёте описание традиционной модели исполнения запросов в реляционных базах данных на примере демонстрационного языка PigletQL.

Читать дальше →
Всего голосов 47: ↑45 и ↓2+43
Комментарии10

C2x: будущий стандарт C

Время на прочтение7 мин
Количество просмотров39K


Я ловлю в далёком отголоске,
Что случится на моём веку.
(«Гамлет», Борис Пастернак)

Признаться, пишу на чистом C я не так уж и часто и за развитием языка уже давно не слежу. Но тут произошло два неожиданных события: С вернул себе звание популярнейшего языка программирования по версии TIOBE и случился анонс первой за долгие годы действительно интересной книги, посвящённой этому языку. Поэтому я провёл несколько вечеров за изучением материалов о C2x — следующей версии C.


Самыми, на мой взгляд, интересными нововведениями я и хочу поделиться с читателями Хабра.

Читать дальше →
Всего голосов 107: ↑107 и ↓0+107
Комментарии155

Полёт свиньи, или Оптимизация интерпретаторов байт-кода

Время на прочтение13 мин
Количество просмотров19K


"No matter how hard you try, you can't make a racehorse out of a pig. You can, however, make a faster pig" (комментарий в исходном коде Емакса)

Всем известен тот факт, что свиньи не летают. Не менее популярно мнение о том, что интерпретаторы байт-кодов как техника исполнения языков высокого уровня не поддаются ускорению без применения трудоёмкой динамической компиляции.


Во второй части серии статей об интерпретаторах байт-кодов я на примере небольшой стековой виртуальной машины ПВМ («Поросячья Виртуальная Машина») постараюсь показать, что не всё потеряно для трудолюбивых поросят с амбициями и что в рамках (в основном) стандартного C вполне возможно ускорить работу таких интерпретаторов по меньшей мере в полтора раза.

Читать дальше →
Всего голосов 79: ↑79 и ↓0+79
Комментарии77

Пайпы, the pythonic way

Время на прочтение3 мин
Количество просмотров18K
Одни питонисты любят код читаемый, другие предпочитают лаконичный. К сожалению, баланс между первым и вторым — решения по-настоящему изящные — редко случается встретить на практике. Чаще стречаются строки вроде
my_function(sum(filter(lambda x: x % 3 == 1, [x for x in range(100)])))
Или четверостишья а ля
xs = [x for x in range(100)]
xs_filtered = filter(lambda x: x % 3 == 1, xs)
xs_sum = sum(xs_filtered)
result = my_function(xs_sum)
Идеалистам же хотелось бы писать как-то так
result = [x for x in range(100)] \
    | where(lambda x: x % 3 == 1)) \
    | sum \
    | my_function

Не в Питоне?
Зря так думаете...
Всего голосов 83: ↑81 и ↓2+79
Комментарии81

Поговорим об оптимизирующих компиляторах. Сказ первый: SSA-форма

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров16K

Всем привет. Сегодня я хотел бы поговорить об устройстве современных оптимизирующих компиляторов. Я никогда не публиковался на Хабре ранее, но надеюсь, что мне удастся написать серию статей, которая просуммирует мой опыт в этой области.

Коротко обо мне. Меня зовут Макс, и так получилось, что я вот уже 10 лет, почти с самого начала своей карьеры, занимаюсь оптимизирующими компиляторами. Я начинал в Intel, потом перешёл в Azul Systems, год провёл в Cadence и вернулся обратно, всё это время занимаясь компиляторными оптимизациями для Java, C++ и нейросетевых моделей. На момент написания статьи у меня чуть за 900 патчей в LLVM, большинство из них посвящено цикловым оптимизациям.

За это время я провёл десятки собеседований на позиции как интернов, так и инженеров сеньорного уровня, и довольно часто люди, приходя на эти собеседования, многих вещей не знают или знают поверхностно. И я подумал: а мог бы я написать такой цикл статей, чтобы человек, прочитав их, узнал бы всю ту базу, которая, на мой собственный взгляд, необходимо начинающему компиляторному инженеру? Очень бы хотелось, чтобы новичку в этой области можно бы было дать один (относительно небольшой по объёму) набор текстов, чтобы он получил оттуда всё необходимое для старта. Это не перевод, текст оригинальный, поэтому в нём могут быть ошибки и неточности, которые я буду рад исправить, если вы мне их укажете.

Итак, поехали.

Погрузиться
Всего голосов 93: ↑91 и ↓2+117
Комментарии58

PostgreSQL под капотом. Часть 5. Простой SELECT запрос

Время на прочтение42 мин
Количество просмотров6.5K

Приветствую!

В этой статье рассмотрим какой путь проходит простой SELECT запрос. От стадии сырой строки до отправки ответа клиенту.

А еще:

Работу со статистикой приложения через API Linux.

Реализацию динамического списка.

«Наследование» в C.

Как ведется работа с диском в БД.

Немного легаси.

Читать далее
Всего голосов 13: ↑13 и ↓0+13
Комментарии3

Как написать (игрушечную) JVM

Время на прочтение10 мин
Количество просмотров7.4K
Статья про KVM оказалась интересной для читателей, поэтому сегодня публикуем новый перевод статьи Serge Zaitsev: как работает Java Virtual Machine под капотом.

Нравится нам это или нет, но Java — один из наиболее распространенных и широко используемых языков программирования. Однако не каждый Java-разработчик настолько любопытен, чтобы заглянуть под капот и посмотреть, как устроена JVM.

Я попытаюсь написать игрушечную (и неполную) JVM, чтобы показать основные принципы ее работы. Надеюсь, эта статья вызовет у вас интерес и вдохновит на дальнейшее изучение JVM.
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии2

It is Wednesday, my java dudes, или насколько сложно сделать свою JVM

Время на прочтение11 мин
Количество просмотров11K

Что делать, если накануне переезда повысилась тревожность, а привычные методы не приносят успокоения?

Конечно же вырабатывать дофамин через решение упоротых инженерных задач!

Мне стало интересно - насколько тяжко было бы сделать свой интерпретатор байт-кода Java? И насколько сложно было бы научить его “новым трюкам”?

Писать я буду на Rust, поэтому и проект, не мудрствуя лукаво, назвал Rjava.

Читать далее
Всего голосов 55: ↑54 и ↓1+65
Комментарии26

7 лет одиночества: как интроверту завести знакомства и найти друзей

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров45K

Тарелка жареной картошки, сочный стейк и бокал вина. Можно наслаждаться жизнью и до двух ночи смотреть любимый сериал. Жить одному — что может быть лучше? Съеден стейк. Выпито вино. Стелю постель, и на миг становится зябко и одиноко — снова это острое чувство, что жизнь проходит впустую. Неужели я всегда буду один?

Читать далее
Всего голосов 111: ↑72 и ↓39+51
Комментарии295

PostgreSQL под капотом. Часть 0. Старт программы

Время на прочтение17 мин
Количество просмотров15K

Postgres - один из крупнейших open source проектов. Он создавался многие года. Кодовая база накопилась огромная. Мне, как программисту, всегда было интересно как он работает под капотом. Но не про SQL пойдет речь, а про язык на котором он написан. Про C. 

С общей архитектурой можно ознакомиться здесь

Для начала поймем, что происходит до входа в главный цикл сервера.

Читать далее
Всего голосов 24: ↑24 и ↓0+24
Комментарии2

С++ exception handling под капотом или как же работают исключения в C++

Время на прочтение15 мин
Количество просмотров69K

От переводчика


В мире победили языки высокого уровня и в мирах руби-питон-js разработчиков остается только разглагольствовать, что в плюсах не стоит использовать то или иное. Например, исключения, потому что они медленные и генерируют много лишнего кода. Стоило спросить "и какой же код он генерирует", как в ответ получил мямленье и мычание. А и правда — как же они работают? Ну что ж, компилируем в g++ с флагом -S, смотрим что получилось. Поверхностно разобраться не сложно, однако то, что остались недопонимания — не давали мне спать. К счастью, готовая статья нашлась.

На хабре есть несколько статей, подробных и не очень (при этом все равно хороших), посвященных тому, как работают exceptions в C++. Однако нет ни одной по-настоящему глубокой, поэтому я решил восполнить этот пробел, благо есть подходящий материал. Кому интересно как работают исключения в C++ на примере gcc — запаситесь pocket-ом или evernote, свободным временем и добро пожаловать под кат.
Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии10

Антивирус Бабушкина

Время на прочтение1 мин
Количество просмотров461K


Молодой студент-третьекурсник из АлтГТУ разработал компьютерную антивирусную программу под названием “Иммунитет”. По словам АП, эту программу сейчас устанавливают в некоторых школах Барнаула. На данный момент продано уже более тысячи копий этого антивируса! В основном ее устанавливают на персональных компьютерах, но уже приобрели несколько школ и компаний краевого центра.
Читать дальше →
Всего голосов 552: ↑474 и ↓78+396
Комментарии1257

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность