Как стать автором
Обновить
11
0
Алексей Родионов @rodial

Senior PHP

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

Хотели как в FAANG, а вышло как всегда или Опыт собеседования в Тинькофф в 3 актах

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

Предисловие Около года назад я задался целью получить оффер от FAANG. Как следствие, постоянной частью моей жизни стали тематические форумы, площадки и вся сопутствующая атрибутика. Спустя какое-то время я попробовал себя на собеседованиях в околоFAANGoвые компании: Lyft, Spotify, Booking и т. д, где-то успешно, где-то не очень. В это же время мне порекомендовали попробовать пройти собеседование в Тинькофф банк, который внедрил схожий процесс. После стандартного общения с HR менеджером была получена ссылка на описание процесса собеседования. “Хм, почти что FAANG + тех. интервью по Primary Skill”, - подумал я и сказал, что готов приступать. В тот же час было назначено 2 интервью: техническое и coding, а вот 3 этап, system design, нужно было заслужить успешным прохождением первых двух. Почему именно эти 2 части являлись основополагающими, осталось неясным.

Акт первый, технический

В назначенный час я встретился со своим интервьюером. Собеседование выглядело “добротным” и стандартным в заданной проф. области, оттого местами скучным. Было много задач на ревью кода и обсуждения специфики языка, в частности...

Читать далее
Всего голосов 150: ↑134 и ↓16+151
Комментарии226

Неожиданные причины торможения программ и систем

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

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

Я назвал пост Surprisingly Slow потому, что замедление было для меня неожиданным, или неоптимальные практики, ведущие к замедлению, настолько распространены, что многие программисты будут удивлены их существованию.

Разделы поста чаще всего никак не связаны друг с другом, поэтому можете выбирать самые интересные для вас.
Читать дальше →
Всего голосов 79: ↑78 и ↓1+110
Комментарии88

1 CPU 1 Гб – а я хочу мониторинг, как у больших дядей

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


Я обожаю читать на хабре статьи про то, как устроены системы больших интернет-компаний. Кластеры SQL-серверов, монг и редисов. Тут у нас кластер ELK собирает трейсинг, там – сборка логов, здесь балансер выдает входящим запросам traceID и можно отслеживать, как запрос ходит по всем нашим микросервисам. Класс. Но, допустим, у вас совсем маленький проект и вы можете себе позволить лишь VPS минимальной конфигурации. Реально ли на ней сделать мониторинг не хуже, чем у больших проектов? Я решил – надо попробовать.
Читать дальше →
Всего голосов 64: ↑62 и ↓2+78
Комментарии82

SOHO UPS в маленьком корпусе и своими руками. Менее чем за 1500 руб

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

Хотите обеспечить бесперебойное питание своим устройствам, но при этом не сильно потратиться? Именно такой своей разработкой я и хотел с вами поделиться.

Все мы переживаем, когда устройства внезапно отключаются «по питанию» и не зря. Большая часть нештатного отключения электроэнергии сопровождается скачками повышенного напряжения, что в свою очередь может привести к поломке оборудования или сбросу настроек. Да, на этот случай различные компании выпускают ИБП, но они достаточно велики и весят как правило не менее нескольких килограмм.

А что если сделать такой источник бесперебойного питания, который можно поставить прямо рядом с защищаемым устройством – лёгкое, компактное, недорогое?
Читать дальше →
Всего голосов 92: ↑90 и ↓2+117
Комментарии172

Анатомия каналов в Go

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

Привет, Хабр! Представляю вашему вниманию перевод статьи "Anatomy of Channels in Go" автора Uday Hiwarale.


Что такое каналы?


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


Создание канала


Go для создания канала предоставляет ключевое слово chan. Канал может передавать данные только одного типа, данные других типов через это канал передавать невозможно.

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

Коллеги, вы меня огорчаете

Время на прочтение12 мин
Количество просмотров182K
В июле и августе 2020 года я, с подачи Григория Петрова, проводил для компании Evrone технические интервью на позицию Senior Golang Backend developer. И, видимо, буду вынужден продолжать проводить, о чём ниже.

Задача формулировалась как «найти человека, который сможет задать и поддерживать высокий уровень профессионализма в применении языка Go». То есть, сформулирована она была по-человечески, перевод на канцелярит — мой. Под эту задачу я сформировал новый опросник вместо того, которым пользовался несколько лет — старый был с жестким закосом под DevOps. Методику, которой я пользуюсь для создания опросников и количественной оценки соответствия кандидатов, я излагал в своем докладе «Техническое интервью как инженерная задача» на конференции Saint TeamLead 2019.

И вот что я хочу сказать вам, коллеги: вы меня огорчаете.


Читать дальше →
Всего голосов 145: ↑101 и ↓44+93
Комментарии1153

Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS

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

Привет, меня зовут Иван, и я делаю Авито Доставку. Когда пользователь покупает товар с доставкой, мы показываем ему список отделений служб доставки с ценами. Цена доставки может меняться от отделения к отделению. Мы смотрим на область карты, где покупатель ищет товар и информацию по объявлению, например, координаты продавца, вес и размеры товара. И на выходе показываем человеку список отделений с адресами и ценой доставки в каждое из них.


В ходе разработки калькулятора цены доставки возникла такая задача: есть структура базы данных PostgreSQL и запрос к ней от сервиса на Go. Нужно заставить всё это работать достаточно быстро. В итоге нам удалось поднять пропускную способность сервиса с 50 до 5000 RPS и выявить пару нюансов при общении сервиса с базой. Об этом и пойдёт рассказ.


Читать дальше →
Всего голосов 44: ↑39 и ↓5+42
Комментарии44

Уехать нельзя остаться: ключевые вопросы о карьере за рубежом

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

На этой неделе наших соцсетях выступит Алина Вербенчук, основательница Verbetcetera.

Алина училась в НГУ, СПбГУ, а также в Hong Kong University of Science and Technology. Работала и жила в 7 странах. Занимается запусками новых продуктов для создателей контента в лондонском офисе YouTube, а также помогает с карьерными вопросами в tech разработчикам, менеджерам продукта, дизайнерам и другим специалистам.

Делимся с вами расшифровкой эфира и записью.
Всего голосов 32: ↑26 и ↓6+31
Комментарии43

Настройка сетевого стека Linux для высоконагруженных систем

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

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

О том как изменять параметры ядра, описываемые здесь, можно прочитать в статье Linux Kernel Tuning for High Performance Networking: Configuring Kernel Settings.

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

Домашний DPI, или как бороться с провайдером его же методами

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

Долгое время я терпел ограничения РосКомНадзора и соответствующие действия провайдеров по различным ограничениям доступа к сайтам - но с определённого момента устал, и начал думать как бы сделать так, чтобы было и удобно, и быстро, и при этом с минимумом заморочек после настройки... Хочу оговориться, что цель анонимизации не ставилась.

Вообще, эта проблема имеет несколько решений... Но я решил бороться с провайдером их же методом.

...При помощи NGINX!
Всего голосов 179: ↑178 и ↓1+244
Комментарии187

15 заповедей IT-фриланса и мелкой разработки

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

Самая сложная часть фрилансерской работы – это удержать заказчика, когда он сделал первый пробный шаг в сотрудничестве с вами, но ещё не привязан к вам сколько-нибудь серьезно. Я расскажу о наиболее частых ошибках и удачных моделях поведения в работе с клиентом. Это опыт наших разработчиков, вынесенный из множества мелких и средних проектов.

Рассмотрены, в основном, сугубо технические моменты, никакой техники продаж и прочего маркетинга.

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

Что и как по шагам
Всего голосов 17: ↑16 и ↓1+23
Комментарии19

ENTRYPOINT vs CMD: назад к основам

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

Construction


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

Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии17

Правильное использование Exception’ов в PHP

Время на прочтение16 мин
Количество просмотров123K
Я рад бы написать что “эта статья предназначена для новичков”, но это не так. Большинство php-разработчиков, имея опыт 3, 5 и даже 7 лет, абсолютно не понимают как правильно использовать эксепшены. Нет, они прекрасно знают о их существовании, о том что их можно создавать, обрабатывать, и т.п., но они не осознают их удобность, логичность, и не воспринимают их как абсолютно нормальный элемент разработки.

В этой статье не будет мануала по эксепшенам — это все отлично описано в документации php. Здесь я я расскажу о преимуществах использования эксепшенов, и о том, где их, собственно говоря, надо использовать. Все примеры будут для Yii, но это не особо важно.
Читать дальше →
Всего голосов 46: ↑42 и ↓4+38
Комментарии70

Golang-дайджест № 1  (14 – 31 января 2021)

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

Свежая подборка новостей и материалов со ссылками

Интересное в этом выпуске 

Поддержка ARM, Движок Diablo 2, Расшифровка паролей из браузеров, Сборщик js – аналог webpack

Приятного чтения!

Читать далее
Всего голосов 15: ↑14 и ↓1+16
Комментарии5

Наука и рациональность на YouTube (авторские плейлисты)

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

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

Делюсь тем, что из этого вышло.

Оценить подборку
Всего голосов 21: ↑19 и ↓2+23
Комментарии53

Тестирование From Zero to Hero. Часть 1

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

Всем привет! Меня зовут Сергей, я работаю в команде Тинькофф. Сегодня я хочу рассказать, как мы в Тинькофф приходили к классической пирамиде тестирования. 

Рассказ будет в трех частях:

- Трудности, с которыми нам пришлось столкнуться, и как мы их преодолевали.

- Конкретные решения по некоторым распространенным кейсам при написании интеграционных тестов.

- Подход к написанию E2E-тестов (тестов, покрывающих взаимодействие всех систем приложения, включая back-end и пользовательский интерфейс) с использованием паттерна PageObject, пришедшего к нам из мира веб-разработки.

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

Неужели нельзя обойтись без кафок и рэббитов, когда принимаешь 10 000 ивентов в секунду

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

Однажды я вел вебинар про то, как принимать 10 000 ивентов в секунду. Показал картинку, зрители увидели сиреневый слой, и началось: «Ребят, а зачем нам все эти кафки и рэббиты, неужели без них не обойтись»? Мы и ответили: «Зачем-зачем, чтобы пройти собес!»

Очень смешно, но давайте я все-таки объясню.

 

Читать далее
Всего голосов 37: ↑30 и ↓7+36
Комментарии44

Почему управлять государством должен продуктовый менеджер?

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

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

Читать далее
Всего голосов 56: ↑36 и ↓20+27
Комментарии209

Расширение технической команды в растущем стартапе: проблемы и решения

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

Один из интересных и не очень часто освещаемых вопросов ИТ-менеджмента – расширение команды инженеров и ошибки, которые можно совершить на этом пути. Я сам активно развиваю свои проекты и поэтому интересуюсь этой темой. Мне удалось поговорить с Алиной Зурабовой, Head of Engineering and Testing в компании Smartcat. Этот стартап с российскими корнями, который развивает платформу управления переводами и привлек более $14 млн. Соответственно, за последние пару лет серьезно выросла и его техническая команда. 

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

Читать далее
Всего голосов 9: ↑7 и ↓2+8
Комментарии10

Интеграция PHP проекта на GitHub и Scrutinizer

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

Есть такой продвинутый инструмент Scrutinizer CI.

Для OpenSource он абсолютно бесплатный и платный для приватных репозиториев.

Вы о нем слышали, наверное, а если нет, то лично я использую его для анализа кода на различного рода уязвимости, а также в качестве замены статическому анализатору типа Psalm, ну и для покрытия конечно же, т.к. при довольно простой сквозной интеграции с GitHub оно внедряется в ваши PR и можно ревьюить код, наблюдая покрытие по аналогии с Cubertura в GitLab.

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

Поэтому я решил поделиться с вами своим опытом интеграции со Scrutinizer CI, рассказать о нюансах и тд...

Поехали
Всего голосов 16: ↑16 и ↓0+16
Комментарии7

Информация

В рейтинге
Не участвует
Откуда
Ульяновская обл., Россия
Зарегистрирован
Активность