Pull to refresh
17
0
Артур Вартанян @rogue06

Разработчик

Send message

Spring AOP: как работает проксирование

Reading time6 min
Views49K

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

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

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

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

Руководство Google по форматированию кода на Java

Reading time21 min
Views29K
image

1. Введение


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

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

Читать дальше →
Total votes 16: ↑7 and ↓9+3
Comments5

PostgreSQL Antipatterns: «Должен остаться только один!»

Reading time3 min
Views15K
На SQL вы описываете «что» хотите получить, а не «как» это должно исполняться. Поэтому проблема разработки SQL-запросов в стиле «как слышится, так и пишется» занимает свое почетное место, наряду с особенностями вычисления условий в SQL.

Сегодня на предельно простых примерах посмотрим, к чему это может приводить в контексте использования GROUP/DISTINCT и LIMIT вместе с ними.

Вот если вы написали в запросе «сначала соедини эти таблички, а потом выкинь все дубли, должен остаться только один экземпляр по каждому ключу» — именно так и будет работать, даже если соединение вовсе не было нужно.

И иногда везет и это «просто работает», иногда — неприятно сказывается на производительности, а иногда дает абсолютно неожидаемые с точки зрения разработчика эффекты.


Ну, может, не настолько зрелищные, но…

«Сладкая парочка»: JOIN + DISTINCT


SELECT DISTINCT
  X.*
FROM
  X
JOIN
  Y
    ON Y.fk = X.pk
WHERE
  Y.bool_condition;

Как бы понятно, что хотели отобрать такие записи X, для которых в Y есть связанные с выполняющимся условием. Написали запрос через JOIN — получили какие-то значения pk по несколько раз (ровно сколько подходящих записей в Y оказалось). Как убрать? Конечно DISTINCT!
Читать дальше →
Total votes 24: ↑24 and ↓0+24
Comments19

Вооруженным глазом: наглядно о проблемах PostgreSQL-запроса

Reading time2 min
Views8K
Продолжаем открывать для публичного доступа новый функционал нашего сервиса анализа планов выполнения запросов в PostgreSQL explain.tensor.ru. Сегодня мы научимся определять больные места навскидку в больших и сложных планах, лишь мельком взглянув на них вооруженным глазом…


В этом нам помогут различные варианты визуализации:


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

Как думают программисты-сеньоры?

Reading time7 min
Views48K
Автор материала, перевод которого мы публикуем сегодня, поддерживает идею Ральфа Уолдо Эмерсона о том, что мы становимся тем, о чём думаем. Здесь пойдёт речь об образе мыслей программистов-сеньоров.


Читать дальше →
Total votes 56: ↑32 and ↓24+28
Comments82

SonarQube: делаем код лучше

Level of difficultyMedium
Reading time8 min
Views22K

Привет! Меня зовут Сергей, я один из разработчиков продукта «Сервис персонализации» в компании Sportmaster Lab, и в этом посте я расскажу про SonarQube – платформу для непрерывного анализа и измерения качества программного кода, разработанную компанией SonarSource.

Сейчас SonarQube является чем-то вроде отраслевого стандарта. В частности, это стандарт центра компетенций Sportmaster Lab. В своей работе SonarQube использует статический анализ кода: реальное его выполнение не требуется, так как анализируются именно «исходники». Предмет анализа этого инструмента — потенциальные ошибки и уязвимости, стандарты оформления кода, наличие тестов и уровень покрытия ими, а также дублирование кода и его поддерживаемость. SonarQube поддерживает большое количество языков программирования, его можно встраивать в конвейер CI/CD и в вашу среду разработки. А еще — файлы отчетов сторонних инструментов (Eslint, Stylelint, OWASP Dependency Check и многие другие).

В этой статье вы узнаете:

как работать с SonarQube;

как он может помочь вам в работе и сделать ваш код лучше.

Эта статья — мой сугубо личный опыт работы с SonarQube в качестве пользователя, поэтому я не буду останавливаться на таких «административных» моментах, как развертывание SonarQube, создание в нем нового проекта и настройка его интеграции с GitLab.

Читать далее
Total votes 23: ↑21 and ↓2+24
Comments9

Шпаргалка по SQL (postgres), которая выручает меня на собесах

Level of difficultyEasy
Reading time8 min
Views196K

Привет, Хабр!

Я решил посвятить свою первую статью SQL. Вопросы, рассмотренные ниже мне задавали на собеседованиях на позицию python-разработчика. Естественно отвечать правильно получалось не всегда, а если точнее то чаще не правильно, однако проведя N часов в рефлексии я составил перечень ответов, которыми пользуюсь до сих пор.

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

Читать далее
Total votes 156: ↑149 and ↓7+177
Comments178

Вероятностные структуры данных и где они обитают

Level of difficultyMedium
Reading time3 min
Views11K

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

В этой статье я сделаю обзор таких структур данных и расскажу, какую пользу они могут принести на практике. К базовым вероятностным структурам данных можно отнести фильтр Блума, HyperLogLog и Count-Min Sketch.

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

«Чистый» код, ужасная производительность

Reading time16 min
Views66K
Один из самых часто повторяемых советов программистам, особенно начинающим — это рекомендация писать «чистый» код. Она сопровождается длинным списком правил, сообщающих, что нужно делать, чтобы код был «чистым».

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

Если посмотреть на список правил «чистого» кода и вытащить из него правила, которые действительно влияют на структуру кода, то мы получим следующее:

  • Отдавайте предпочтение полиморфизму, а не «if/else» и «switch»
  • Код не должен знать о внутреннем устройстве объектов, с которыми он работает
  • Функции должны быть маленькими
  • Каждая функция должна выполнять одну задачу
  • Принцип «DRY» — Don’t Repeat Yourself («не повторяйся»)

Эти правила достаточно чётко формулируют то, как должен создаваться конкретный фрагмент кода, чтобы быть «чистым». Но я задам такой вопрос: если мы создадим фрагмент кода, соответствующий этим правилам, какова будет его производительность?
Читать дальше →
Total votes 192: ↑156 and ↓36+149
Comments368

Плохие практики разработки, которые до сих пор встречаю в стартапах

Level of difficultyMedium
Reading time5 min
Views53K

Привет, я Виктор. Двенадцать лет назад я пришел в веб-студию в Самаре. Так начался мой путь в разработке. У нас не было гита, CI/CD, тестовых стендов и много чего еще. Я видел, как это мешало развитию команды и бизнеса. Приходилось на ощупь собирать грабли, открывать для себя хорошие практики и внедрять их. С тех пор я поработал старшим разработчиком в российском финансовом холдинге и немецком b2b-стартапе. Был тимлидом в фудтех-проекте, СTO в образовательных стартапах для российского и латиноамериканского рынка — и почти везде поначалу натыкался на похожие проблемы. Недавно переехал в Израиль, стал консультировать стартап. И что бы вы думали…

Читать далее 👉
Total votes 92: ↑88 and ↓4+102
Comments126

[Карьера в IT] Наконец-то оффер: разбираем на практике, как договориться на выгодные условия

Reading time6 min
Views40K

В прошлых статьях нашей серии «Карьера в IT» мы обсуждали собеседования. И вот вы успешно их прошли, и наступил желаемый момент — оффер от работодателя. Но получение оффера — еще не конец пути. Это только начало переговоров, в результате которых вы можете выиграть гораздо больше. Разберем на практических примерах, откуда брать цифры для «торгов», как именно торговаться и что сделать, чтобы на старте получить самые выгодные условия.

Читать далее
Total votes 28: ↑23 and ↓5+25
Comments29

Как правильно отвечать на вопрос “Какие у вас зарплатные ожидания?” на рынке США

Reading time6 min
Views67K

На первом интервью чаще всего рекрутер может задать вопрос о зарплатных ожиданиях кандидата — “What Are Your Salary Expectations?”. Я принимаю участие в найме продукт-менеджеров, дизайнеров и инженеров и хочу поделиться с вами своим опытом как правильно отвечать на этот вопрос применительно к рынку США.

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

Читать далее
Total votes 76: ↑65 and ↓11+74
Comments161

Почему я ушел из Netflix с позиции разработчика с окладом 450000$

Reading time7 min
Views94K

Я думал, что буду работать в Netflix вечно. Самые высокие зарплаты по рынку. Свобода и уважение. Нелимитированные оплачиваемые нерабочие часы. Чего еще можно хотеть?

Поэтому, когда я ушел из Netflix в мае 21 года, все подумали, что я чокнулся. Родители первыми подняли бучу. Приехав из Китая, где им едва хватало еды, они думали, что я бросаю любую работу при возникновении каких-то сложностей, через которые им приходилось проходить, чтобы приехать в Америку.

“Просто не высовывайся и делай свою работу!” - говорили они.

“Будь благодарен за то, что у тебя есть!” - продолжали они возмущаться.

Никто из моих друзей также не мог в это поверить.

“А как же бесплатная еда?!”

”Ты работаешь в компании, которая входит в пятерку крупнейших IT-гигантов!" 

“Просто отдыхай и инвестируй, братан!”

Читать далее
Total votes 84: ↑60 and ↓24+53
Comments253

Техническая разведка

Reading time11 min
Views39K
Привет, Хабр. Я знаю, что вы любите статьи «Чему я научился…». Обычно в них рассматривается либо личный опыт работы, либо различные книги с полезными советами. Сегодня я предлагаю вам посмотреть какой полезный опыт можно извлечь из методичек ЦРУ на примере материала Robert M. Clark «Scientific And Technical Intelligence Analysis», написанного в 1976 году. Казалось бы, ну чего там может быть полезного в повседневной жизни, да ещё сейчас, в XXI веке? Всем, кому это интересно – добро пожаловать под кат.


Читать дальше →
Total votes 98: ↑81 and ↓17+77
Comments14

Мягкое удаление в Hibernate: неочевидные факты

Reading time7 min
Views17K

Мягкое удаление (soft deletion) — это популярная в энтерпрайз разработке стратегия удаления, когда вместо физического стирания та или иная запись помечается как удаленная, а потом фильтруется во всех запросах на чтение. Применение мягкого удаления может быть оправдано целым набором требований: аудит, возможность восстановления удаленных записей, а иногда необходимо уметь удалять данные, при этом сохраняя на них ссылки из других записей… 

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

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

Как я готовился к собеседованию в Google

Reading time9 min
Views49K
Каждый инженер-программист стремится впечатлить людей своим техническим мастерством. Технологические гиганты этого мира — прекрасное место для работы технарей, которые могут предоставить услуги миллиардам пользователей. На моём недавнем собеседовании было несколько раундов, я получил предложения от Google и Amazon. В последние несколько лет онлайн-сообщество очень помогло мне в подготовке к собеседованиям. В этом посте я поделюсь всем о моём пути к собеседованию и верну вклад общества в моё обучение.


Приятного чтения!
Total votes 40: ↑35 and ↓5+45
Comments77

Лучшие практики при написании безопасного Dockerfile

Reading time9 min
Views31K

В данной статье мы рассмотрим небезопасные варианты написания собственного Dockerfile, а также лучшие практики, включая работу с секретами и встраивание инструментов статического анализа. Тем не менее для написания безопасного Dockerfile наличия документа с лучшими практиками мало. В первую очередь требуется организовать культуру написания кода. К ней, например, относятся формализация и контроль процесса использования сторонних компонентов, организация собственных Software Bill-of-Materials (SBOM), выстраивание принципов при написании собственных базовых образов, согласованное использование безопасных функций, и так далее. В данном случае отправной точкой для организации процессов может служить модель оценки зрелости BSIMM. Однако в этой статьей пойдет речь именно о технических аспектах.

Читать далее
Total votes 64: ↑62 and ↓2+73
Comments20

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

Reading time12 min
Views205K

Дисклеймер:


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

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

RabbitMQ tutorial 1 — Hello World

Reading time6 min
Views543K


RabbitMQ позволяет взаимодействовать различным программам при помощи протокола AMQP. RabbitMQ является отличным решением для построения SOA (сервис-ориентированной архитектуры) и распределением отложенных ресурсоемких задач.

Под катом перевод первого из шести уроков официального сайта. Примеры на python, но его знание вовсе не обязательно. Аналогичные примеру программы можно воспроизвести практически на любом популярном ЯП. [так выглядят комментарии переводчика, т.е. меня]
Читать дальше →
Total votes 57: ↑51 and ↓6+45
Comments58

PostgreSQL под капотом. Часть 6. Сложный SELECT запрос

Level of difficultyMedium
Reading time57 min
Views6.4K

Продолжим погружение в код PostgreSQL. Сейчас посмотрим, что происходит, когда вы хотите выполнить запрос сложнее, чем в прошлый раз: добавим WHERE, GROUP BY, HAVING, ORDER BY, LIMIT.

Плюс:

Системный кэш

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

Предсказание количества возвращаемых кортежей

Работа с простыми типами

Маркировка столбцов при использовании FOR UPDATE

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

Information

Rating
Does not participate
Location
Воронеж, Воронежская обл., Россия
Works in
Date of birth
Registered
Activity

Specialization

Backend Developer
Middle
Java
OOP
PostgreSQL
Database
Git
Linux
Docker
Java Spring Framework
Hibernate
REST