Pull to refresh
31
0.6

backend developer, java, go

Send message

Ускоряем валидацию UTF-8 в 10 раз (>10 ГБ/с): реализация алгоритма Lemire-Keiser на Go с ARM NEON

Reading time8 min
Views847

UTF-8 валидация — одна из базовых операций при работе с текстом, которая выполняется миллионы раз в секунду в современных приложениях. Стандартная реализация в Go, хоть и корректная, далека от оптимальной по производительности. В этой статье расскажу, как мне удалось ускорить валидацию UTF-8 в 10 раз, используя SIMD‑инструкции ARM NEON и алгоритм из статьи «Validating UTF-8 In Less Than One Instruction Per Byte» Джона Кейзера и Дэниела Лемира.

Читать далее

Функции и методы в Go

Level of difficultyMedium
Reading time4 min
Views3.6K

Go — язык, который ценится за простоту и чёткость. Однако даже при минимальном синтаксисе здесь есть нюансы. Особенно это касается работы с функциями и методами. В этой статье хочу поделиться личными наблюдениями и выводами по нескольким ключевым темам: выбор типа получателя, использование именованных параметров результата, распространённые ошибки при возврате nil, проблемы с файлами в качестве входных данных и поведение defer.
ps. Обложку нейронка сгенерировала. Очень странно, но мне понравилось.

Читать далее

Почему java -jar игнорирует твой -cp и как это обойти

Level of difficultyEasy
Reading time5 min
Views2.5K

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

Когда java -jar цинично игнорирует ваш -cp, хочется грустить, но спокойствие, сегодня рассмотрим, почему так происходит и как это обойти.

Читать далее

Как использовать WebUI для Nginx

Level of difficultyEasy
Reading time7 min
Views9.7K

Всем привет! Меня зовут Александр, и я системный инженер в облачном провайдере mClouds.ru. В этой статье я расскажу как использовать веб-интерфейс в Nginx, на примере Nginx UI и Nginx Proxy Manager. Перечислим основные «кейсы» использования подобных веб-интерфейсов.

Подробности и особенности - под катом.

Читать далее

Секреты эффективного кодирования на Go для опытных и новичков: профайлинг, тесты, CI

Reading time11 min
Views5.1K

За последние два года Go-сообщество выросло на 55% — с 3 млн до 4,7 млн разработчиков. Многие пришли в Go из других языков или только начинают свой путь в программировании. Без понимания идиоматики и ключевых особенностей языка даже опытные специалисты нередко сталкиваются с медленным кодом, дедлоками и утечками памяти.

Так что сегодня разберём, как организовывать пакеты, обрабатывать ошибки, безопасно работать с горутинами и каналами, оптимизировать аллокации и профилировать «горячие» участки через pprof. Советы одинаково пригодятся и опытным Golang-разработчикам, и тем, кто только начинает свой путь в Go.

Читать далее

Выясняем, кто поселился в вашей сети

Level of difficultyMedium
Reading time6 min
Views22K

Привет Хабр! На связи Аеза и сегодня мы хотим поговорить на одну очень злободневную тему – выявление подозрительных активностей в трафике. Мы не будем говорить о каких-то специализированных решениях, типа IDS/IPS, а вместо этого рассмотрим основные принципы выявления подозрительных действий что называется вручную.

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

Читать далее

10 советов, как стать системным архитектором

Level of difficultyEasy
Reading time9 min
Views5.9K

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

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

Читать далее

От пет-проекта к книге про Spring

Reading time6 min
Views1.6K

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

Читать далее

Обработка паник в горутинах

Level of difficultyEasy
Reading time5 min
Views2.9K

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

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

Читать далее

Разбираем паттерны конкурентности

Level of difficultyEasy
Reading time4 min
Views7.4K

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

Читать далее

Fan-Out, Fan-In с динамической балансировкой горутин в Golang

Level of difficultyEasy
Reading time7 min
Views2.7K

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

Когда речь заходит о конкурентности в Go, паттерн Fan-Out, Fan-In — одна из важных концепций на мой взгляд. Он позволяет распределять задачи между несколькими горутинами и затем собирать результаты обратно в один поток.

Читать далее

Как управлять сборками в Go с помощью build tags

Level of difficultyEasy
Reading time4 min
Views2.3K

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

Вы когда-нибудь сталкивались с ситуацией, когда нужно собрать Go-приложение под несколько платформ? Или выключить часть кода в проде, оставив её активной в дев-среде? Возможно, вы просто хотите поддерживать разные версии сборки с кастомными фичами без тонны if runtime.GOOS == "windows" {}?

В этом вам помогут build tags.

Читать далее

Паттерн Наблюдатель в Golang на котиках

Level of difficultyEasy
Reading time4 min
Views2.7K

Привет, Хабр! Сегодня будем разбирать паттерн Наблюдатель на примере наших любимых пушистиков — котиков. Ведь кто, как не коты, могут быть идеальными субъектами и наблюдателями в нашем коде?

Читать далее

Ассемблеры, 5 штук — быстрое знакомство для тех кто не знаком

Level of difficultyEasy
Reading time15 min
Views20K

Статья для тех кто не знаком с ассемблерами - но хочет взглянуть "одним глазком". Мы не сделаем вас гуру разработки на ассемблере за 15 минут - но покажем ассемблеры для нескольких популярных архитектур микроконтроллеров (ARM32, AVR, MSP430, 8051) - и для настольных наших компьютеров (x86 под Linux и DOS) - чтобы увидеть их различия и сходства - и не бояться погрузиться глубже, если что-то из этого может быть вам полезно.

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

Бонусом - для любопытных - ассемблер для Intel-4004 - 4-разрядного процессора которому уже больше 50 лет. К нему будет также небольшой "интерактивчик".

Кто не боится - давайте посмотрим ближе!

Точки соприкосновения: Java & GC

Level of difficultyHard
Reading time24 min
Views8.6K

Можно писать на Java, вообще не задумываясь, как работает сборка мусора: «ну оно же там само собой происходит как-то». Однако разобраться как следует — не только интересно, но и полезно: например, какой из подходов к GC лучше соответствует конкретно вашему проекту?

На нашей конференции JPoint 2024 был доклад Дмитрия Силина об этом, участникам он понравился, и мы решили сделать для Хабра текстовую версию. Публикуем и текст, и видеозапись.

Читать далее

Паттерны применения многопоточности на коммерческом проекте (на примере Java)

Level of difficultyMedium
Reading time22 min
Views7.9K

После прочтения у вас сложится понимание того как работать с многопоточностью на реальном проекте

Список рассмотренных паттернов:

Запуск асинхронного процесса по сигнал
Параллельное выполнение задач без ожидания результата
Ограничение количества потоков для вызова внешнего сервиса
Выполнение Scheduled задач
Параллельное обращение к разным источникам, с последующим объединением результатов
Контекст
Ожидание асинхронного ответа

При этом в статье я намеренно не касался низкоуровневых механизмов, таких как synchronized, lock, volatile, барьеров (разве что semaphore), потому что они значительно реже применяются в работе

Читать далее

Ограничение скорости в Nginx для сложных конфигураций: HTTP/2, API и видеостриминг

Level of difficultyEasy
Reading time4 min
Views3K

В этой статье рассмотрим, как настроить полноценный traffic shaping в Nginx для сложных случаев, включая HTTP/2.

Читать далее

О хранении JWT токенов в браузерах

Reading time3 min
Views68K

Открытый стандарт JWT официально появился в 2015 (rfc7519) обещая интересные особенности и широкие перспективы. Правильное хранение Access токена является жизненно важным вопросов при построении системы авторизации и аутентификации в современном Web, где становятся все популярнее сайты, построенные по технологии SPA.

Неправильное хранение токенов ведет к их краже и переиспользованию злоумышленниками.
Читать дальше →

Функциональные опции в Go

Level of difficultyEasy
Reading time5 min
Views9.2K

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

Читать далее
1
23 ...

Information

Rating
2,882-nd
Location
Москва, Москва и Московская обл., Россия
Registered
Activity