Search
Write a publication
Pull to refresh
1
0
Send message

Каверзные вопросы на интервью аналитика: В каком порядке обрабатываются SQL-запросы?

Reading time5 min
Views40K

Поздравляем всех хабровцев с новым рабочим годом и продолжаем посты на тему технических интервью. Сегодня короткий пост для джунов и выпускников ИТ-курсов по специальности «системный аналитик». На техническом интервью вам могут попасться разные нестандартные вопросы. Вот один из них: «В каком порядке обрабатываются SQL-запросы?». На первый взгляд кажется, что SQL-запросы выполняются в том порядке, в котором мы их пишем: сначала SELECT, затем FROM, WHERE и так далее. Однако, на самом деле, SQL обрабатывает запросы в иной логической последовательности, которая отличается от порядка написания.

Читать далее

90% разработчиков не понимают принцип инверсии зависимостей из SOLID. DIP — это не про абстракции

Reading time4 min
Views62K

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

Почему такая трактовка неверна и в чем же суть принципа — об этом и пойдет речь далее.

Читать далее

Senior. Туда и обратно: что я сначала не понимал в своей карьере, а потом как понял

Reading time14 min
Views54K
За шесть лет в IT, и в команде Machine Learning Technologу Research «Лаборатории Касперского» в частности, я прошел путь от стажера до Data Science Team Lead. Шел честно :) И на каждой ступени проходил через разные нюансы, о которых и хочу рассказать в этой статье. Полагаю, мой опыт будет полезен как начинающим коллегам, чтобы увидеть для себя недостающие аспекты профессионального роста, так и более опытным специалистам, чтобы отрефлексировать свой опыт и задуматься о том, что помогло им в карьере. Кстати, было бы здорово послушать и о ваших аспектах роста в комментариях :)


Читать дальше →

ErrorHandling-патерн в golang

Level of difficultyMedium
Reading time3 min
Views2.4K

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

Будем отталкиваться от примера, где мы ожидаем результатов выполнения n-горутин. Результат читаем из канала resultChannel:

Читать далее

Оптимизация SQL запросов

Level of difficultyMedium
Reading time6 min
Views37K

Оптимизация SQL-запросов является одной из ключевых задач при работе с реляционными базами данных. Эффективные SQL-запросы позволяют значительно улучшить производительность приложений и обеспечить более быстрый доступ к данным. В данной статье мы рассмотрим как переписать запрос, чтобы выполнялся быстрее. В статье пойдет речь о PostgreSQL, хотя применять данные советы к любой базе данных SQL Ниже будут представлены термины и операторы, о которых пойдет в данной статье.

Читать про оптимизацию

Генерация PDF-файлов на Go

Level of difficultyEasy
Reading time6 min
Views3.8K

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

Начать генерацию...

Ory Kratos — конструктор для сборки цифрового продукта любой сложности

Level of difficultyMedium
Reading time16 min
Views7.5K

Привет! Я Андрей Баронский, бэкенд-тимлид в KTS.

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

Для тех, кто впервые сталкивается с этим названием, дам немного контекста. Ory Kratos — это система API-first Identity и User Management. Она управляет всеми аспектами работы с пользователями, включая регистрацию, вход, восстановление пароля, многофакторную аутентификацию, верификацию данных и управление профилем. 

Иными словами, Ory Kratos берёт на себя рутинные технические задачи, предлагая готовое, гибкое и удобное в интеграции решение.

Читать далее

Fullstack v2: учимся писать UI на Go

Reading time12 min
Views8.9K

Меня зовут Илья Глухов.  Последние 7 лет я пишу на Go. Я люблю этот язык, а ещё люблю задаваться странными, на первый взгляд, вопросами. Например, как разные интересные штуки, которые мы пишем на Go взаимодействуют с пользователем? В классическом бэкенде мы при помощи RPC (Remote Procedure Call), протокола HTTP или разных очередей модифицируем поведение нашей программы. А что насчёт graphic UI? Он же из фронтенда? Или нам так только кажется? Давайте  создадим пользовательский интерфейс (UI) на Go. Выбор решений разнообразен: Gopherjs, gomobile, обёртки для Qt, GTK и много чего ещё. Но если мы хотим добиться кросс-платформенной совместимости для браузеров, мобильных устройств и десктопов, нам нужен универсальный UI. Давайте на практическом примере разберём как создать его на Go.

Читать далее

Горутины и каналы в Go: эффективная конкурентность

Level of difficultyEasy
Reading time3 min
Views3.2K

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

Читать далее

Жизненный цикл потоков ОС в Golang

Level of difficultyMedium
Reading time12 min
Views9.5K

Всем привет! Меня зовут Паша, я занимаюсь коммерческой разработкой уже 10 лет, 8 из них — на Go. Мне довелось разрабатывать приложение, активно использующее как сеть, так и диск. 

Регулярно приходилось решать вопросы производительности. В ходе исследований я использовал все, что было было под рукой: логи, метрики, трейсы, профилировщики и runtime-трейсы. А еще изучал, как по доступным данным расследовать причины проблем производительности постфактум. Тогда мне стало интересно, почему метрика количества потоков сильно отличается от значения GOMAXPROCS и можно ли по этой метрике диагностировать какие-то конкретные проблемы.

Читать далее

Skip List в Golang

Level of difficultyEasy
Reading time4 min
Views2.4K

Привет, Хабр! Сегодня я решил поделиться с вами одной из тех структур данных, которая, возможно, не так популярна, как хеш-таблицы или деревья, но обладает своими уникальными фичами. Знакомьтесь — Skip List!

Итак, Skip List — это структура данных, которая позволяет быстро искать, вставлять и удалять элементы. Можно сказать, что это своего рода гибрид между списком и деревом, только без всяких заморочек.

Рассмотрим реализацию этой структуры в Golang, и для этого есть пакет huandu/skiplist.

Читать далее

Практика английского: «спорный» вопрос

Level of difficultyEasy
Reading time6 min
Views2.7K

У многих изучающих английский язык рано или поздно возникает вопрос: "Как научиться говорить на английском?"

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

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

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

Нырнуть чуть глубже ⤸

Из практики. Как я пришла к тому, что все делаю на английском языке и теперь это легко

Level of difficultyEasy
Reading time2 min
Views54K

Из практики. Я сейчас все делаю на английском языке: работаю, веду все свои заметки, смотрю фильмы, учусь, гуглю, разговариваю с ChatGPT и все остальное. Даже дома мы часто разговариваем на английском в течении дня.

К этому я пришла не сразу и на мой взгляд, есть 2 основных барьера, чтобы начать использовать язык:

Читать далее

Паттерны многопоточности в Go

Level of difficultyEasy
Reading time16 min
Views26K

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

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

Читать далее

Go отлаживать на проде, избавляться от хардкода и переходить на Ginkgo/Gomega: доклады для гоферов

Reading time2 min
Views2.6K

Что делать, если сервис на проде внезапно лег, а куда копать — непонятно. Знакомая ситуация? Запускать отладчик ой как страшно, но иногда это единственное решение. Как подготовиться и избежать фиаско? Несколько полезных советов дал ведущий инженер в платформе. А еще в нашей подборке — хардкор без хардкода на платформенном сервисе с CEL в конфиге и осознанный, но безболезненный переход на Ginko/Gomega для смелых Go-тестировщиков.

Читать далее

Go: нужно ли закрывать канал?

Level of difficultyEasy
Reading time14 min
Views5.1K

Эта статья посвящена каналам. Поднимается вопрос необходимости закрытия каналов. Приводится множество примеров, на escape-анализе и трассировке которых объясняются особенности сохранения каналов в памяти, взаимодействие с GC, горутинами. Также поднимается вопрос уместности закрытия каналов. Подсвечивается практическая польза использования однонаправленных каналов.

Читать далее

Дженерики в Go

Level of difficultyEasy
Reading time10 min
Views4.7K

Это первая часть статьи, посвященной дженерикам в Go, из четырех.

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

Читать далее

Способ организации gRPC контрактов и их автоматизация для микросервисов

Level of difficultyMedium
Reading time6 min
Views6K

Привет! Меня зовут Данил, я бэкенд разработчик.

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

Читать далее

5 паттернов проектирования в Go на примере котиков

Level of difficultyEasy
Reading time7 min
Views7.8K

Привет, Хабр! Сегодня мы рассмотрим реализацию паттернов проектирования на Go, и, чтобы было не скучно, возьмем главными героями котиков. Будем разбирать 5 популярных паттернов: Singleton, Factory Method, Strategy, Observer, Decorator.

Читать далее

Go: фокусы трассировки

Level of difficultyEasy
Reading time9 min
Views2.5K

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

Читать далее

Information

Rating
Does not participate
Registered
Activity