Pull to refresh
42
-5
Константин Львов @klvov

программист, программист СУБД, веб-разработчик

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

Level of difficulty Medium
Reading time 7 min
Views 4.5K
Когда я только начинал изучать компиляторы, я не понимал одного важного момента: Разработка языка программирования и написание компилятора — это два почти совершенно разных навыка. Конечно, между ними есть некоторое пересечение, но меньшее, чем может показаться на первый взгляд!

Я думаю, что это важно знать, потому что обе эти задачи очень сложны! Легче овладеть этими навыками, если решать их по очереди. Ваше первое решение сложной задачи, скорее всего, будет… ну, не таким хорошим, как десятое! Однако довольно часто разработчики создают игрушечный язык, когда пишут свой первый компилятор, а это значит, что они совершают ошибки и учатся сразу на двух сложных проблемах. Хуже того, эти две проблемы взаимосвязаны: Ошибка в одной из них усложняет жизнь в другой. Кроме того, как мы увидим, хотя компиляторы и сложны на первых порах, они, по сути, являются решенной проблемой, в то время как разработка языка программирования — это, скажем так, область продолжающихся исследований.
Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Comments 4

Алгоритмические собеседования нужны

Level of difficulty Easy
Reading time 8 min
Views 13K

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

Сразу скажу, что моя статья относится лишь к условному ФААНГу. Многие аргументы из этой статьи теряют значимость в других случаях: если у вас маленькая фирма, мало кандидатов или у вас всего 10 пользователей.

Я утверждаю, что алгоритмические интервью - лучший вариант для ФААНГа из всех пока придуманных.

Читать далее
Total votes 62: ↑41 and ↓21 +20
Comments 140

Что такое гексагональная архитектура. Разделение бизнес-логики и инфраструктуры с помощью портов и адаптеров

Level of difficulty Medium
Reading time 13 min
Views 13K
image

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

Вот как сам Кокберн описывает эту архитектуру одним тезисом:

Добиться, чтобы приложение в равной степени могло управляться пользователями, программами, автоматизированными тестовыми или пакетными сценариями, а также разрабатываться и тестироваться в изоляции от устройств и баз данных, на которых оно впоследствии будет выполняться. — Алистер Кокберн, 2005 г.

В этой статье мы рассмотрим некоторые задачи, как правило, решаемые в типичных программных проектах. Затем мы поговорим о гексагональной архитектуре и о том, как она призвана решить эти задачи. Мы также рассмотрим некоторые детали реализации такой архитектуры и варианты тестирования.
Читать дальше →
Total votes 41: ↑39 and ↓2 +37
Comments 44

Психотравма как шаблон мышления

Level of difficulty Hard
Reading time 10 min
Views 14K

Мышление человека условно можно разделить на логическое и на эмоциональное. У этих двух типов мышления есть сходства и различия.

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

Мне интересно...
Total votes 22: ↑15 and ↓7 +8
Comments 23

Как я сделал абсолютно бесшумный компьютер

Reading time 6 min
Views 134K


Почти три десятилетия я пытаюсь делать мои компьютеры тише. Жидкостное охлаждение собственного изготовления, гидродинамические подшипники с магнитной стабилизацией, акустические демпферы, силиконовые амортизаторы – я использовал всё, что можно представить. И на прошлой неделе я, наконец, сумел построить совершенно бесшумный компьютер. Без лишних слов, знакомьтесь: Streacom DB4. Корпус размером 26 x 26 x 27 см без единого вентилятора. У него вообще нет никаких движущихся частей. Полная тишина, 0 дБ.

Если снять с него верхнюю и четыре боковых стенки (штампованный алюминий, толщина стенки 13 мм), вы увидите минимальную раму и центральную монтажную пластину для материнской платы формата mini-ITX (порты ввода/вывода смотрят вниз, сквозь дно корпуса).
Читать дальше →
Total votes 130: ↑119 and ↓11 +108
Comments 342

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

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

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

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


Читать дальше →
Total votes 181: ↑137 and ↓44 +93
Comments 1152

Нужна ли вам Kafka? Разбираемся в технологии и собираем простое приложение на базе managed-решения

Reading time 16 min
Views 15K

Kafka — стильная, модная, молодежная технология, которую разработала в 2011 году компания LinkedIn и значительно усовершенствовал Apache Software Foundation. Представляет собой надежный, масштабируемый и устойчивый инструмент для обработки и передачи данных в режиме реального времени — шину данных.

Но нужно ли внедрять технологию в угоду моде или амбициям вашего продуктового менеджера? Под катом расскажу про сильные стороны Kafka и задачи, в которых она раскрывается по максимуму. Также напишем быстрое приложение на базе Kafka-as-a-service, которую мы недавно релизнули в Selectel.
Читать дальше →
Total votes 67: ↑66 and ↓1 +65
Comments 7

Почему WebAssembly плохо годится для Java

Level of difficulty Hard
Reading time 15 min
Views 12K

Как разработчик TeaVM, компилятора байт-кода JVM в JavaScript и WebAssembly, я часто рекомендую пользователям, почему-то жаждущим сгенерировать WebAssembly, начать с JavaScript. Если честно, бэкэнд WebAssembly я очень давно не развиваю, не реализую в нём недостающих фич и не фикшу баги. Меня спрашивают: а почему так? Обычно, я просто игнорирую подобные вопросы, потому что в двух предложениях ответить на них невозможно, а для того, чтобы писать больше предложений, у меня нет времени. Обычно если я встречаю чьи‑то попытки объяснить, чем WebAssembly плох для реализации JVM (а так же, CLR, JavaScript и прочих динамических сред), то они сводятся к следующему: «Java (.NET, JavaScript, ваш вариант) — это управляемый язык со сборкой мусора и исключениями, так что приходится тащить с собой гигантский рантайм». Что же, на самом деле, ситуация несколько сложнее, а размер рантайма вовсе не такой страшный и не является основным источником бед.

Читать далее
Total votes 65: ↑65 and ↓0 +65
Comments 46

Разбираемся с GraalVM, AOT и JIT

Reading time 7 min
Views 5.2K

Если вы хотите разобраться, что такое GraalVM, как он работает, и в чем различия между Just-In-Time (JIT) компиляцией и Ahead-Of-Time (AOT) компиляцией, то это руководство — именно то, что вы искали.

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

Разница между загрузкой и инициализацией классов в Java на любопытном примере

Level of difficulty Medium
Reading time 9 min
Views 12K

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


Поводом для написания статьи стал вопрос на StackOverflow. Откройте, но не торопитесь читать ответ ;)

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

Как на самом деле работает Java ClassLoader system? (с картинками) — Часть 1/3, Загрузка

Level of difficulty Medium
Reading time 7 min
Views 9.9K

Так ли на самом деле работает процесс загрузки классов, как его описывает Wikipedia и Baeldung? ClassNotFoundException — это откуда и чье? Какие виды загрузчиков классов актуальны в Java 20?

Объясняем подпроцесс загрузки, из системы Java ClassLoader, на приятных Excalidraw диаграммах, со ссылками на оригинальные источники.

Читать далее
Total votes 21: ↑21 and ↓0 +21
Comments 11

Java-дайджест: начало июля

Level of difficulty Medium
Reading time 9 min
Views 6.3K

Привет, это Олег. Я вылез из криокамеры и пытаюсь заставить себя писать регулярные дайджесты.

В этом выпуске будет новый бесплатный (на самом деле нет) GraalVM Enterprise, отмена Java 8 в бигдате, совершенно новая система модулей (которую никто не просил, но мы её заслужили тем не менее), утилита для поиска и истребления легаси в проекте, библиотеки для работы с Large Language Models (иначе говоря, ChatGPT), всратый офис с графическим интерфейсом на Java, и многое другое. И конечно, обзор этой недели Java на Хабре.

Если есть время, оставьте комментарий, про какую часть Java-экосистемы вам хотелось бы читать дальше. Помогите Даше-путешественнице найти смысл существования. Новостей куча, поэтому пока я пишу про то, что интересно лично мне: GraalVM, Spring, Clouds, OpenJDK dev. Например, в Hibernate на каждый релиз чинят десятки каких-то багов, но я про них ничего не пишу, потому что не знаю ни одного живого человека, которому бы это было интересно.

Как всегда, статья подготовлена при поддержке "российской джавы" AxiomJDK и моего IT-бара Failover Bar, потому что я пишу её в рабочее время :)

Прекрасно. Читать далее.
Total votes 30: ↑28 and ↓2 +26
Comments 11

Собеседование по Java. Разбор 1606 вопросов и ответов. Часть 1 (с 1 по 169 вопрос)

Level of difficulty Medium
Reading time 127 min
Views 35K

Всем привет! Меня зовут Владимир Баганов. Я хочу начать серию статей с простым разбором вопросов на собеседованиях на Java разработчика. Под капотом 169 разобранных вопросов из 1606 вопросов.

Читать далее
Total votes 19: ↑11 and ↓8 +3
Comments 14

JVM internals

Level of difficulty Medium
Reading time 20 min
Views 13K

Статья объясняет внутреннюю архитектуру виртуальной машины Java (JVM). Диаграмма отображает ключевые внутренние компоненты типичной JVM, которая соответствует спецификации The Java Virtual Machine Specification Java SE 7 Edition

Читать далее
Total votes 20: ↑16 and ↓4 +12
Comments 8

Архитектура и реактивное программирование

Level of difficulty Medium
Reading time 9 min
Views 19K
reactivity as a pattern for low models coupling

Что такое реактивное программирование? Не Rx. И даже не Excel. Это архитектурный паттерн, позволяющий абсолютно иначе писать код. В статье мы устаканим фундаментальные знания, утвердимся в том, что React.js всё же является реактивным, и подумаем о том, как и когда нужно, а когда не нужно применять паттерны реактивного программирования.
Читать дальше →
Total votes 48: ↑47 and ↓1 +46
Comments 46

Big State Managers Benchmark

Reading time 9 min
Views 7.6K

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

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

Что ж, давайте возьмём их всех и столкнём лбами друг с другом и с суровой реальностью, чтобы узнать кто же на самом деле тут батя!

Мне больше 18 и я готов к последствиям
Total votes 20: ↑12 and ↓8 +4
Comments 79

Тебе не нужно классическое ООП в твоём бэкенд микросервисе

Reading time 24 min
Views 17K

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

Читать далее
Total votes 51: ↑46 and ↓5 +41
Comments 55

Один день из жизни JVM-инженера

Reading time 27 min
Views 19K


Можно разрабатывать на Java, а можно разрабатывать Java. Есть люди, чей код исполняет виртуальная машина — а есть люди, чей код и есть виртуальная машина.


Вроде бы те и другие существуют в одной Java-экосистеме, но задачи совершенно разные. Поэтому редкое место, где они пересекаются и могут что-то поведать друг другу — Java-конференции. Мы проводим их регулярно (уже в апреле будет JPoint). И на предыдущей нашей конференции Иван Углянский dbg_nsk поделился с Java-разработчиками тем, как всё выглядит с его стороны.


Чем он вообще занимается? Почему JVM-инженеры всё так медленно делают? На каком языке стоит писать рантайм, а на каком компилятор? Как «папка бога» в Windows привела к неожиданным последствиям? Может ли «обычный джавист» стать JVM-инженером?


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

Читать дальше →
Total votes 88: ↑88 and ↓0 +88
Comments 18

Безграничные возможности FFmpeg на примерах

Level of difficulty Easy
Reading time 12 min
Views 37K

FFmpeg — швейцарский нож для мультимедиа. Совершенно незаменимая программа, которую использует в повседневной жизни почти каждый, даже не зная об этом. Например, вы сняли видео и заливаете на видеохостинг — оно перекодируется и публикуется уже в другом разрешении/формате/размере. Как вы думаете, какая программа выполнила транскодирование? Вполне возможно, что под капотом на сервере работает FFmpeg.

FFmpeg объединяет более 300 видео/аудио/графических кодеков, декордеров, муксеров, демуксеров и фильтров. Благодаря ему вы можете написать собственный видеоплеер в тысячу строчек кода, не разбираясь с кишочками видеообработки.

Это «движок» почти всех современных инструментов для обработки/сжатия/редактирования видео. Они просто предлагают графический интерфейс с кнопками, а ffmpeg делает реальную работу.
Читать дальше →
Total votes 133: ↑130 and ↓3 +127
Comments 83

Как поместить весь мир в обычный ноутбук: PostgreSQL и OpenStreetMap

Reading time 29 min
Views 24K

Когда человек раньше говорил что он контролирует весь мир, то его обычно помещали в соседнюю палату с Бонапартом Наполеоном. Надеюсь, что эти времена остались в прошлом и каждый желающий может анализировать геоданные всей земли и получать ответы на свои глобальные вопросы за минуты и секунды. Я опубликовал Openstreetmap_h3 — свой проект, который позволяет производить геоаналитику над данными из OpenStreetMap в PostGIS или в движке запросов, способном работать с Apache Arrow/Parquet.

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

Первый пост не претендует на монографию, начну с краткого обзора...

Читать далее
Total votes 79: ↑79 and ↓0 +79
Comments 22

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity