Pull to refresh
4
0
Danil @DD174

User

Send message

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

Reading time15 min
Views111K
Пользуетесь ли вы структурами данных и алгоритмами в повседневной работе? Я обратил внимание на то, что всё больше и больше людей считает алгоритмы чем-то таким, чем, без особой связи с реальностью, технические компании, лишь по собственной прихоти, интересуются на собеседованиях. Многие жалуются на то, что задачи на алгоритмы — это нечто из области теории, имеющей слабое отношение к настоящей работе. Такой взгляд на вещи, определённо, распространился после того, как Макс Хауэлл, автор Homebrew, опубликовал твит о том, что произошло с ним на собеседовании в Google:

Google: 90% наших инженеров пользуются программой, которую вы написали (Homebrew), но вы не можете инвертировать бинарное дерево на доске, поэтому — прощайте.

Хотя и у меня никогда не возникало нужды в инверсии бинарного дерева, я сталкивался с примерами реального использования структур данных и алгоритмов в повседневной работе, когда трудился в Skype/Microsoft, Skyscanner и Uber. Сюда входило написание кода и принятие решений, основанное на особенностях структур данных и алгоритмов. Но соответствующие знания я, по большей части, использовал для того чтобы понять то, как созданы некие системы, и то, почему они созданы именно так. Знание соответствующих концепций упрощает понимание архитектуры и реализации систем, в которых эти концепции используются.



В эту статью я включил рассказы о ситуациях, в которых структуры данных, вроде деревьев и графов, а так же различные алгоритмы, были использованы в реальных проектах. Здесь я надеюсь показать читателю то, что базовые знания структур данных и алгоритмов — это не бесполезная теория, нужная только для собеседований, а что-то такое, что, весьма вероятно, по-настоящему понадобится тому, кто работает в быстрорастущих инновационных технологических компаниях.
Читать дальше →
Total votes 54: ↑52 and ↓2+67
Comments53

Чек-лист разумной защиты своего ноутбука

Reading time6 min
Views49K

Важный компонент защиты от несанкционированного доступа

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

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

Я постараюсь пройтись по основным угрозам и методам защиты. Например, люди часто забывают, что вводить пароль под камерой — плохая идея. Буду крайне признателен вашим дополнениям.
Читать дальше →
Total votes 51: ↑40 and ↓11+44
Comments130

Трюки с SQL от DBA. Небанальные советы для разработчиков БД

Reading time22 min
Views32K

Когда я начинал свою карьеру разработчика, моей первой работой стала DBA (администратор базы данных, АБД). В те годы, ещё до AWS RDS, Azure, Google Cloud и других облачных сервисов, существовало два типа АБД:

  • АБД инфраструктуры отвечали за настройку базы данных, конфигурирование хранилища и заботу о резервных копиях и репликации. После настройки БД инфраструктурный администратор время от времени «настраивал экземпляры», например, уточнял размеры кэшей.
  • АБД приложения получал от АБД инфраструктуры чистую базу и отвечал за её архитектуру: создание таблиц, индексов, ограничений и настройку SQL. АБД приложения также реализовывал ETL-процессы и миграцию данных. Если команды использовали хранимые процедуры, то АБД приложения поддерживал и их.

АБД приложений обычно были частью команд разработки. Они обладали глубокими познаниями по конкретной теме, поэтому обычно работали только над одним-двумя проектами. Инфраструктурные администраторы баз данных обычно входили в ИТ-команду и могли одновременно работать над несколькими проектами.
Читать дальше →
Total votes 52: ↑48 and ↓4+68
Comments38

Если вы используете моки, то вы хоть что-то тестируете?

Reading time6 min
Views17K

Было ли у вас ощущение, что ради тестирования вы делаете код труднее для чтения? Допустим, у вас есть код, который ещё не тестировался. У него есть ряд побочных эффектов, и вас просят сначала прогнать тесты. Вы начинаете следовать советам вроде передачи глобальных переменных в виде параметров или извлечения проблемных побочных эффектов, чтобы сделать вместо них заглушки в тестах.

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

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

Вопрос на миллион: для устаревшего кода нужно писать модульные тесты или интеграционные?
Читать дальше →
Total votes 37: ↑35 and ↓2+51
Comments19

Прощай, Google! 15 Альтернативных поисковиков, которые не шпионят, а сажают деревья и раздают воду

Reading time5 min
Views244K


Аве Кодер!

В этой статье речь пойдет о крутых инди поисковиках, которые могут составить конкуренцию поисковым гигантам, а также удовлетворить вкусы как утонченного мусьё, так и идейного борца за личную жизнь.
Читать дальше →
Total votes 50: ↑42 and ↓8+46
Comments113

Чистая архитектура на PHP. Как её измерять и контролировать?

Reading time24 min
Views26K

Предисловие


Как ты уже понял из названия, говорить я тут собрался о самом, что ни на есть, “высоком” — Чистой архитектуре. А толчком к развитию всей этой истории послужила книга Роберта Мартина “Чистая архитектура”. Если еще не читал, осмелюсь порекомендовать! Автор раскрывает много важных тем, активно делится своим богатым жизненным опытом (из проф. области естественно) и сделанными на его основе выводами, эпизодически вплетает в главы истории о том, как виртуозно говнокодили (ну и не только, конечно же) наши отцы и деды в далёких 60-х, 70-х, 80-х и даже лихих 90-х, как по крупинкам собирали всеми любимые принципы SOLID и их аналоги в мире компонентов, и чему научились за прошедшие полвека. В процессе чтения книги хорошо прослеживается линия развития индустрии разработки ПО, типичные проблемы, с которыми пацанам приходилось сталкиваться, и способы их решения.

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

Мне кажется, статья будет полезна всем. Те, кто с книгой уже знаком, смогут освежить в своей памяти некоторые ее моменты, или просто пропустить первую часть и сразу приступить к знакомству с инструментом. Те, кто ранее книгу не читал, возможно, и в первой части найдут для себя что-то новое.
Читать дальше →
Total votes 24: ↑21 and ↓3+30
Comments23

PSR Стандарты

Reading time15 min
Views144K
PHP-FIG

PSR — Чуть больше, чем стиль оформления кода.

Как показала практика, многие PHP-разработчики знакомы с аббревиатурой PSR. Однако большинство все еще ограничены знанием, что PSR это стандарт оформления кода.

Ребята из PHP-FIG (PHP Framework Interop Group), группа концепций совместимости PHP, которые занимаются развитием PSR (PHP Standards Recommendations) шагнули далеко вперед. Поэтому давайте разберемся, что из себя представляет PSR…

Читать дальше →
Total votes 25: ↑24 and ↓1+31
Comments39

Автономизация Unit-тестов в PHPUnit

Reading time9 min
Views3K

Всем привет!


Меня зовут Антон и сейчас (не так долго, около года) я разрабатываю на PHP в одном большом и старом проекте. Для обеспечения качества проекта мы применяем автотесты на фреймворке PHPUnit. Но, к сожалению, так получилось, что большая часть наших автотестов функциональные. Недавно мы поняли, что если мы продолжим использовать автотесты прежним образом, то скоро время, потраченное на решение проблем с их не прохождением на CI станет больше, чем время, затраченное на написание полезного кода (на самом деле нет, но оно растёт и это не приятно).


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

  • я писал пару тест-кейсов несколько часов;
  • понял, что за это время написал очень, очень много повторяющегося кода;
  • фактически не сделал полезной работы;
  • в случае изменения DI придется потратить очень много времени на бесполезную адаптацию кода теста.


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


Читать дальше
Total votes 8: ↑7 and ↓1+12
Comments6

Подготовка к собеседованиям в IT-гиганты: как я преодолела проклятье алгоритмического собеседования

Reading time12 min
Views206K

Дисклеймер:


Я не программирую с трёх лет, не знаю наизусть Кнута, не являюсь призёром олимпиад по информатике и чемпионатов по спортивному программированию, не училась в MIT. У меня за плечами образование по информатике и 6 лет опыта в коммерческой разработке. И до недавнего времени я не могла пройти дальше первого технического скрининга в IT-гиганты из FAANG (Facebook, Amazon, Apple, Netflix, Google и подобные), хотя предпринимала несколько попыток. 

Но теперь всё изменилось, я получила несколько офферов и хочу поделиться опытом, как можно к этому прийти. Речь пойдёт о позиции Software Engineer в европейских офисах перечисленных компаний.
Читать дальше →
Total votes 155: ↑150 and ↓5+191
Comments342

Выбор размера монитора: теория угловых размеров, обоснование и сравнение

Reading time7 min
Views254K


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

Надеюсь, мои изыскания кому-то также пригодятся, а также позволят сохранить зрение и нервы.
Читать дальше →
Total votes 80: ↑75 and ↓5+70
Comments242

MySQL Query Cache

Reading time5 min
Views110K
В MySQL есть очень полезная функциональность — кеш запросов. Кеш запросов доступен в MySQL начиная с версии 4.0.
Многие СУБД имеют подобную функциональность, но в отличие от MySQL они кешируют планы выполнения запросов, тогда как MySQL кеширует результаты запросов.
Дальше о том, как работает кеш запросов, как его настраивать и оптимально использовать.
Читать дальше →
Total votes 70: ↑67 and ↓3+64
Comments60

Видеозаписи всех докладов с восьми конференций Онтико

Reading time5 min
Views31K

Ситуация с тем-самым-вирусом сильно бьёт по организаторам мероприятий. Людям, которые помогают сообществу разработчиков России, сейчас тяжело. Мы в AvitoTech хотим поддержать своих друзей из Онтико, и поэтому открываем доступ к видео с конференций, которые ещё не публиковались. Это доклады за 2019 год с Saint AppsConf, HighLoad++, DevOpsConf, FrontendConf, Product Fest и с последней TeamLead Conf.


Инженеры Авито, которые выступали или были участниками конференций, вспомнили самые интересные доклады. Под катом — ссылки на плейлисты со всеми-всеми видео и наша субъективная подборка.


UPD: добавили в статью плейлисты с UseData и GolangConf 2019.


Total votes 48: ↑48 and ↓0+48
Comments4

Ловушки для хакера. Обнаруживаем взлом на раннем этапе с помощью Canarytokens

Reading time7 min
Views34K
Honey Tokens (англ. — «медовые приметы/признаки/идентификаторы») одна из разновидностей идеи Honeypot, приманки для злоумышленников, позволяющей обнаружить факт взлома или опознать его источник. Когда атакующий уже проник в систему, он, скорее всего, выполнит действия, несвойственные обычному пользователю. Это можно использовать как способ обнаружения взлома. В статье мы рассмотрим, как легко сделать собственные триггеры для обнаружения взлома на раннем этапе. Такие ловушки полезно использовать системному администратору и даже обычному пользователю, переживающему о приватности своих данных.


До изобретения газоанализаторов шахтеры брали c собой в шахту канарейку. Из-за маленького организма и быстрого обмена веществ, птицы намного раньше реагировали на опасные газы в воздухе и предупреждали шахтеров.
Читать дальше →
Total votes 68: ↑68 and ↓0+68
Comments19

Strace в Linux: история, устройство и использование

Reading time17 min
Views60K


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


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

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

13 инструментов для обработки текста в командной оболочке

Reading time17 min
Views99K
Здесь представлен фрагмент будущей книги «Основные инструменты и практики для начинающего разработчика программного обеспечения» Бальтазара Рубероля и Этьена Броду. Книга должна помочь образованию подрастающего поколения разработчиков. Она охватит такие темы, как освоение консоли, настройка и эффективная работа в командной оболочке, управление версиями кода с помощью git, основы SQL, инструменты вроде Make, jq и регулярные выражения, основы сетевого взаимодействия, а также лучшие практики разработки программного обеспечения и совместной работы. В настоящее время авторы упорно работают над этим проектом и приглашают всех поучаствовать в списке рассылки.

Содержание


Читать дальше →
Total votes 46: ↑43 and ↓3+50
Comments65

10 отличных Github репозиториев, которые должен знать каждый веб-разработчик

Reading time3 min
Views98K

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


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


image


А я его перевел, т.к. показалось, что пост многим будет интересен. Перевод очень вольный: я опустил нерелевантные промо-ссылки и гипер эмоциональные похвалы автора оригинала, чтобы оставить только суть. Еще, обновил цифры, чтобы информация была более актуальной к моменту публикации этого перевода. Итак, перейдем к списку.
Читать дальше →
Total votes 63: ↑56 and ↓7+62
Comments8

Upgrade компа серверным SATA SSD на 1.92TB с ресурсом записи от 2PB и выше

Reading time3 min
Views36K


Есть люди, которые любят использовать качественные комплектующие из корпоративного сегмента в быту. Они хотят быть уверенными в том, что их SSD не накроется внезапно из-за сбоя по питанию или write amplification при ежедневном скачивании огромных 4K-торрентов на фрагментированный NTFS-раздел с размером кластера 4K или при очередной компиляции Gentoo из исходников.

Конечно, такие опасения редко сбываются на практике, однако очень приятно пользоваться SSD с Power Loss Protection (1, 2, 3), который имеет практически безграничный ресурс записи. И даже когда ёмкость его станет малой для текущих задач, он всё равно может быть использован как флэшка или как дополнительный диск, подарен или продан.

В этой статье приведён список корпоративных SSD ёмкостью 1.92ТБ, которые сейчас подешевели до уровня потребительских SSD (< $300), но обладают ресурсом записи от 2 Петабайт и выше.
Читать дальше →
Total votes 40: ↑38 and ↓2+36
Comments96

Взлом с продолжением

Reading time4 min
Views44K
Одно время я работал на free-lance.ru. С утра я обычно мониторил заказы, а после обеда непосредственно работал. Однажды я наткнулся на заказ, сумма за выполнение которого была очень аппетитной. Я сразу отписался по заказу, и буквально через минуту получил ТЗ на проект в личку. Поначалу меня удивила скорость ответа, и то что меня сразу выбрали исполнителем, но с другой стороны такое уже частенько бывало. Файл с ТЗ мне показался странным, в него была встроена ссылка на flash ролик. Проверив файл на вирусы и получив ответ, что угроз не обнаружено, я таки усыпил свою бдительность и щелкнул по ссылке на flash ролик. А щелкать не стоило.
Читать дальше →
Total votes 306: ↑290 and ↓16+274
Comments300
2

Information

Rating
Does not participate
Registered
Activity