Pull to refresh
-17
0
Антон Нехаев @nehaev

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

Send message

Что нужно знать, чтобы успешно пройти System Design Interview

Reading time16 min
Views21K

Для любого разработчика глубокое понимание основных принципов системного проектирования является необходимым условием для создания стабильных и масштабируемых программных систем, способных обеспечивать высокую производительность. Системное проектирование (System Design) включает разработку архитектуры и структуры программной системы, направленную на удовлетворение специфических требований и обеспечение требуемых показателей производительности.

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

Далее мы рассмотрим каждый из принципов более детально, чтобы понять их суть и способы применения в разработке приложений.

Читать далее
Total votes 38: ↑40.5 and ↓-2.5+43
Comments21

Без одной faangи или как я проходил собеседования

Reading time14 min
Views30K

Привет, Хабр! Меня зовут Рустам, работаю программистом 9 лет. 7 лет работал в Контуре и около 2 лет в Яндексе. В этой статье расскажу про свой опыт подготовки и прохождения собеседований в большие технологические компании, поделюсь рекомендациями.

Пробовался в Facebook, Apple, Amazon, Microsoft, Google. Пять попыток: четыре на бэкенд программиста, одна на инженера по инфраструктуре. Два предложения по работе, два отказа, одно потенциальное предложение.

Принял предложение в Amazon. Сейчас в Лондоне.

Читать далее
Total votes 82: ↑79 and ↓3+76
Comments27

ДА вздрогнет FAANG* или [практическое руководство] по поиску работы в США/Европе для айтишника

Reading time5 min
Views24K
*FAANG — акроним 5 крупнейших tech компаний (Facebook, Apple, Amazon, Netflix and Google), предоставляющих одни из самых хороших возможностей для разработчиков, которые мечтают/планируют/хотят приобщиться к волне IT-эмиграции.

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

К сожалению, на практике подобный процесс поиска работы часто заканчивается неудачами. Сайты со списком вакансий — один из самых низкоэффективных способов, по крайней мере в США.

Под катом я поделюсь практическими рекомендациями, которые помогут «твикнуть» систему и существенно увеличить шансы на получение предложения от топ-компаний в сжатые сроки.

image
Читать дальше →
Total votes 28: ↑21 and ↓7+14
Comments27

Почему ты не станешь программистом

Level of difficultyEasy
Reading time7 min
Views110K

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

Читать далее
Total votes 99: ↑85 and ↓14+71
Comments316

Глубокое погружение в Java Memory Model

Reading time53 min
Views130K


Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.


В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.

Читать дальше →
Total votes 109: ↑109 and ↓0+109
Comments60

Сравнение подходов к реализации распределенных транзакций для микросервисов

Reading time21 min
Views40K

Как архитектор-консультант в Red Hat, я имел возможность поработать над множеством проектов для наших клиентов. У каждого из них есть свои особенности, которые, однако, имеют некоторые общие черты. Большинство клиентов хотят знать, как скоординировать запись в несколько систем одновременно. Ответ на этот вопрос обычно включает подробное объяснение двойной записи, распределенных транзакций, современных альтернатив, а также возможных сценариев сбоев и недостатков каждого подхода. Как правило, именно в этот момент заказчик понимает, что разделение монолитного приложения на микросервисы - долгий и сложный путь, обычно требующий компромиссов.

Читать далее
Total votes 36: ↑36 and ↓0+36
Comments9

Основы Java Bytecode

Reading time29 min
Views29K

Внимание, статья содержит довольно много картинок и получилась довольно тяжелой и объемной

Как и многие базовые вещи на habr уже были статьи о bytecode, основные же отличия данной статьи - в попытке визуализировать, что происходит внутри, и краткий справочник инструкций (может кому пригодиться), многие с примерами использования.

В данной статье будут рассмотрены только основы Java Bytecode. Если вы уже знакомы с его основами, статья вряд ли будет вам интересна.

Вглубь
Total votes 14: ↑14 and ↓0+14
Comments5

Как нанять трех разработчиков Scala в штат за три месяца

Reading time5 min
Views4.8K
Безработица, замена человека роботами, сокращения, невозможность найти стабильную и регулярно и хорошо оплачиваемую работу – о чем это они? Что за фантастика? Или эта статья родом из советского прошлого – о том, как тяжело жить при капитализме?

Сегодня ИТ-компании страдают от нехватки ИТ-специалистов, HR-ы придумывают все новые «плюшки» и организуют максимально дружелюбную и комфортную среду для работы ИТ-специалистов, разработчиков, DevOps-ов, аналитиков, которые диктуют правила рынку труда. Во всех соцсетях слышны стенания рекрутеров и HR-ов – где искать ИТ-специалистов, как их заманить на вакансию, а потом удержать и не повышать зарплату каждый квартал? Каждый ищет свои пути выполнения плана по найму. Расскажу про наш опыт – как мы решили вопрос с наймом Scala-разработчиков в 2020 году.

Началось все, когда мы поняли, что нанять трех Scala-разработчиков с рынка быстрее, чем за полгода, а в реальности и за все три квартала, мы не сможем. Поэтому решили пойти по пути «сделай сам» и задумались о внутреннем бесплатном курсе для студентов, а также для желающих переквалифицироваться в Scаla-разработчиков. Вы ведь тоже мечтаете стать Scаla-разработчиком? Нет??? Странно…


Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments5

13 звуков и интервалов. Их восприятие и обозначение. Лады отклонения и модуляции

Reading time11 min
Views16K

Вторая статья цикла "Природа музыкальных ощущений". В ней продолжение вскрытия внутреннего содержания музыки - обоснование и объяснение эмпирических ощущений которые производят лады, звуки и музыкальные интервалы. Также подробно объясняю происхождение и логику названий звуков(нот) и интервалов.

Читать далее
Total votes 18: ↑14 and ↓4+10
Comments56

Сравнение библиотек логирования Log4j и Gflog. Управление памятью

Reading time8 min
Views3K

Сложные системы логируют большой объем информации. Хорошо продуманные и детализированные записи могут помочь в поиске и устранении серьёзных проблем. У большинства систем нет ограничений, какое логирование использовать ― синхронное или асинхронное. И всё же многие высокопроизводительные системы обычно предпочитают использовать асинхронное логирование без мусора (garbage-free), чтобы избежать задержек при сборке мусора (GC events) и операциях ввода-вывода (IO operations). В этой статье мы заглянем под капот библиотек логирования Java Log4j и Gflog и посмотрим, чем они отличаются с точки зрения управления памятью. Мы узнаем, как они реализованы, чтобы максимально сократить создание короткоживущих объектов.

Читать далее
Total votes 3: ↑2 and ↓1+1
Comments2

Как проходят архитектурные секции собеседования в Яндексе: практика дизайна распределённых систем

Reading time25 min
Views126K
Привет, меня зовут Костя Кардаманов, я работаю в отделе технологий разработки Яндекса. Обычно такой же фразой я приветствую и кандидатов на собеседовании. А сегодня я хотел бы рассказать вам, как и зачем мы проводим интервью по дизайну систем с бэкенд-разработчиками. Сразу скажу: для фронтендеров, мобильных разработчиков и ML-инженеров подобный тип собеседований применим слабо, так что эти специальности мы здесь обсуждать не будем.

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

Что такое дизайн информационных систем


Основная цель любой IT-компании — производить сервисы, которые решают задачи пользователей. Мы должны уметь собирать элементы системы в единый механизм, который будет эффективно выполнять поставленную цель, и если первый тип собеседований нацелен в первую очередь на проверку необходимого минимума, то интервью про дизайн систем проверяет достаточность навыков кандидата в достижении конечной цели. Далекому от IT пользователю принципы и устройство систем могут казаться бесконечно сложными, но мы, их разработчики, должны иметь (не обязательно детальное) представление о принципах функционирования и роли каждого компонента.

Опытный читатель может сказать — в мире полно платных и бесплатных решений, из которых я могу собрать систему как из деталей конструктора, зачем мне понимать устройство этих деталей?
Читать дальше →
Total votes 94: ↑92 and ↓2+90
Comments37

Миниатюрный датчик качества воздуха на батарейке с e-ink экраном

Reading time6 min
Views27K
Приветствую всех читателей Habr! В своей сегодняшней статье, хочу рассказать вам о своем новом DIY беспроводном устройстве – датчике качества воздуха. Помимо оценки качества воздуха, датчик может оценивать уровень освещенности в помещении, температуру, влажность и атмосферное давление, на основе данных атмосферного давления, устройство может предсказывать прогноз погоды. Это полностью открытый проект.

Узнать подробности
Total votes 115: ↑106 and ↓9+97
Comments56

Диаграммы по управлению памятью в Java процессе

Reading time2 min
Views4.2K

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

Читать далее
Total votes 13: ↑6 and ↓7-1
Comments8

Полезные консольные Linux утилиты

Reading time13 min
Views108K

В этой подборке представлены полезные малоизвестные консольные Linux утилиты. В списке не представлены Pentest утилиты, так как у них есть своя подборка.


Осторожно много скриншотов. Добавил до ката утилиту binenv.


binenv — cамая интересная утилита для установки новых популярных программ в linux, но которых нет в пакетном менеджере.

Читать дальше →
Total votes 118: ↑114 and ↓4+110
Comments110

Руководство по возможностям Java версий 8-16

Reading time15 min
Views41K

Последнее обновление: 05 апреля 2021 г.

Вы можете использовать это руководство, чтобы получить практическую информацию о том, как найти и установить последнюю версию Java, понять различия между дистрибутивами Java (AdoptOpenJdk, OpenJDK, OracleJDK и т. д.), А также получить обзор функций языка Java, включая версии Java версии. 8-16.

Читать далее
Total votes 26: ↑24 and ↓2+22
Comments23

Введение в неблокирующие алгоритмы

Reading time8 min
Views23K

Неблокирующие алгоритмы широко применяются в ядре Linux когда традиционные примитивы блокировки либо не могут быть использованы, либо недостаточно быстры. Эта тема многим интересна и время от времени всплывает на LWN. Из недавнего — вот эта июльская статья, которая собственно и сподвигла меня написать свою серию. Ещё чаще разговор заходит про механизм read-copy-update (RCU — руководство 2007 года всё ещё актуально), подсчёт ссылок, и способы сделать более понятные, высокоуровные API ко всему этому разнообразию. Ну а сейчас вас ждёт погружение в идеи, стоящие за неблокирующими алгоритмами, а также их использованием в ядре.


Знание низкоуровневой модели памяти в целом считается продвинутым уровнем понимания, которого страшатся даже опытные программисты-ядерщики. Словами нашего редактора (из его июльской статьи): «Понять модель памяти можно лишь правильно повёрнутым мозгом». Говорят, что моделью памяти Linux (и файлом memory-barriers.txt в частности) можно пугать детей. Порой для достижения эффекта достаточно всего лишь рявкнуть “acquire” или “release”.


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

Читать дальше →
Total votes 39: ↑36 and ↓3+33
Comments60

Повесть о том, как один инженер HTTP/2 Client разгонял

Reading time26 min
Views15K
На примере «JEP 110: HTTP/2 Client» (который в будущем появится в JDK) Сергей Куксенко из Oracle показывает, как команда его запускала, где смотрела и что крутила, чтобы сделать его быстрее.

Предлагаем вам расшифровку его доклада с JPoint 2017. В целом речь тут пойдет не про HTTP/2. Хотя, конечно, без ряда деталей по нему обойтись не удастся.


Total votes 45: ↑43 and ↓2+41
Comments5

Теория категорий для программистов: предисловие

Reading time5 min
Views108K
Вот уже некоторое время я обдумываю идею написать книгу о теории категорий для программистов. Не компьютерных теоретиков, программистов — скорее инженеров, чем ученых. Я знаю, что это звучит безумно, и я сам достаточно напуган. Я знаю, что есть огромная разница между наукой и техникой, потому, что я работал по обе стороны баррикад. Но у меня всегда был очень сильный порыв объяснить вещи. Я восхищаюсь Ричардрм Фейнманом, который был мастером простых объяснений. Я знаю, я не Фейнман, но я буду стараться изо всех сил. Я начинаю с публикации этого предисловия, которое должно мотивировать читателя изучить теорию категорий, и надеюсь на начало дискуссии и обратную связь.

Я постараюсь в нескольких параграфах убедить вас, что эта книга написана для вас, и развеять все ваши сомнения в необходимости изучения этой, одной из самых абстрактных областей математики, в свое драгоценное свободное время.
Читать дальше →
Total votes 55: ↑51 and ↓4+47
Comments25

Cortex и не только: распределённый Prometheus

Reading time17 min
Views8.1K

В последнее время Prometheus стал де-факто стандартом для сбора и хранения метрик. Он удобен для разработчиков ПО - экспорт метрик можно реализовать в несколько строк кода. Для DevOps/SRE, в свою очередь, есть простой язык PromQL для получения метрик из хранилища и их визуализации в той же Grafana.

Но Prometheus имеет ряд недостатков, способы устранения которых я хочу рассмотреть в этой статье. Также разберём деплой Cortex.

Ныряем
Total votes 6: ↑6 and ↓0+6
Comments8
1
23 ...

Information

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