Pull to refresh
1
0
Александр Филатов @xystarcha

Разработчик

Send message

Принцип подстановки Лисков

Reading time6 min
Views49K

Всем привет, меня зовут Константин. Я занимаюсь разработкой на Java в Tinkoff.ru и люблю SOLID. В этой статье мы сформулируем принцип подстановки Лисков, покажем его связь с принципом Открытости-Закрытости, узнаем, как правильно формировать иерархию наследования и ответим на философский вопрос о том, является ли квадрат прямоугольником.


Читать дальше →
Total votes 50: ↑40 and ↓10+30
Comments74

Spring: в поисках контекста

Reading time9 min
Views38K

Пару месяцев назад в моем профиле был опубликован подробный пост по загрузке классов на JVM. После этого доклада мои коллеги задались хорошим вопросом: а какой механизм использует Spring для разбора конфигураций и как он загружает классы из контекста?


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

Знай сложности алгоритмов

Reading time2 min
Views987K
Эта статья рассказывает о времени выполнения и о расходе памяти большинства алгоритмов используемых в информатике. В прошлом, когда я готовился к прохождению собеседования я потратил много времени исследуя интернет для поиска информации о лучшем, среднем и худшем случае работы алгоритмов поиска и сортировки, чтобы заданный вопрос на собеседовании не поставил меня в тупик. За последние несколько лет я проходил интервью в нескольких стартапах из Силиконовой долины, а также в некоторых крупных компаниях таких как Yahoo, eBay, LinkedIn и Google и каждый раз, когда я готовился к интервью, я подумал: «Почему никто не создал хорошую шпаргалку по асимптотической сложности алгоритмов? ». Чтобы сохранить ваше время я создал такую шпаргалку. Наслаждайтесь!
Читать дальше →
Total votes 312: ↑296 and ↓16+280
Comments99

KeyDB как [потенциальная] замена Redis

Reading time6 min
Views34K
На хабре не нашлось обзоров «более быстрой альтернативы Redis» — KeyDB. Получив достаточно свежий опыт его использования, хочется восполнить этот пробел.



Предыстория достаточно банальна: однажды с большим наплывом трафика была зафиксирована значительная деградация производительности приложения (а именно — времени ответа). На тот момент, к сожалению, не удалось провести нормальную диагностику происходящего, поэтому впоследствии запланировали ряд нагрузочных тестирований. После их проведения удалось обнаружить узкое место, коим стал кэш базы данных в Redis. Как это часто бывает, проблему нельзя было решить сию секунду и правильным путём — силами разработчиков (изменением логики работы). Поэтому включилось любопытство и желание побороть ситуацию обходным путём. Так и появилась эта статья.
Читать дальше →
Total votes 80: ↑78 and ↓2+76
Comments41

Управление по защите данных Германии: телеметрия в Windows 10 1909 Enterprise может быть полностью отключена

Reading time8 min
Views35K

Телеметрия давно стала горячо обсуждаемой темой с момента, когда Microsoft выпустил первую версию Windows 10. Microsoft решил глубоко интегрировать сбор данных в операционную систему — да так глубоко, что у пользовательских выпусков Windows 10 Home и Windows 10 Pro не было опции по полному отключению телеметрии.

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

Визуальная теория информации (часть 1)

Reading time12 min
Views20K


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

Теория информации дает нам точный язык для описания многих вещей. Сколько во мне неопределенности? Как много знание ответа на вопрос А говорит мне об ответе на вопрос Б? Насколько похож один набор убеждений на другой? У меня были неформальные версии этих идей, когда я был маленьким ребенком, но теория информации кристаллизует их в точные, сильные идеи. Эти идеи имеют огромное разнообразие применений, от сжатия данных до квантовой физики, машинного обучения и обширных областей между ними.

К сожалению, теория информации может казаться пугающей. Я не думаю, что есть какая-то причина для этого. Фактически, многие ключевые идеи могут быть объяснены визуально!

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

Сортировка выбором минимумов (максимумов)

Reading time14 min
Views23K

imageМногие программисты думают, что Quick Sort — самый быстрый алгоритм из всех существующих. Отчасти это так. Но работает она действительно хорошо только если правильно выбран опорный элемент (тогда сложность составляет O (n log n)). В противном же случае асимптотика будет примерно такой же как и у пузырика (то-есть O (n2)).
При этом, если массив уже отсортирован, то алгоритм всё-равно будет работать не быстрее, чем O (n log n)


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

«Дело было вечером, делать было нечего», — Сергей Михалков.

Требования:


  1. Лучший случай O (n)
  2. Средний случай O (n log n)
  3. Худший случай O (n log n)
  4. В среднем быстрее быстрой сортировки


А теперь давайте обо всём по порядку


Чтобы наш алгоритм всегда работал быстро, нужно чтобы в среднем случае асимптотика была хотя бы O (n log n), а в лучшем — O (n). Все мы прекрасно знаем, что в лучшем случае сортировка вставками работает за один проход. Но в худшем ей придётся гонять по массиву столько раз, сколько в нём элементов.


Читать дальше →
Total votes 24: ↑15 and ↓9+6
Comments39

Книга «C++. Практика многопоточного программирования»

Reading time17 min
Views24K
image Привет, Хаброжители! Язык С++ выбирают, когда надо создать по-настоящему молниеносные приложения. А качественная конкурентная обработка сделает их еще быстрее. Новые возможности С++17 позволяют использовать всю мощь многопоточного программирования, чтобы с легкостью решать задачи графической обработки, машинного обучения и др. Энтони Уильямс, эксперт конкурентной обработки, рассматривает примеры и описывает практические задачи, а также делится секретами, которые пригодятся всем, в том числе и самым опытным разработчикам.

В книге • Полный обзор возможностей С++17. • Запуск и управление потоками. • Синхронизация конкурентных операций. • Разработка конкурентного кода. • Отладка многопоточных приложений. Книга подойдет для разработчиков среднего уровня, пользующихся C и C++. Опыт конкурентного программирования не требуется.
Читать дальше →
Total votes 9: ↑8 and ↓1+7
Comments16

Коты в коробочках, или Компактные структуры данных

Reading time12 min
Views28K

image


Как быть, если дерево поиска разрослось на всю оперативку и вот-вот подопрет корнями соседние стойки в серверной? Что делать с инвертированным индексом, жадным до ресурсов? Завязывать ли с разработкой под Android, если пользователю прилетает «Память телефона заполнена», а приложение едва на половине загрузки важного контейнера?


В целом, можно ли сжать структуру данных, чтобы она занимала заметно меньше места, но не теряла присущих ей достоинств? Чтобы доступ к хэш-таблице оставался быстрым, а сбалансированное дерево сохраняло свои свойства. Да, можно! Для этого и появилось направление информатики «Succinct data structures», исследующее компактное представление структур данных. Оно развивается с конца 80-х годов и прямо сейчас переживает расцвет в лучах славы big data и highload.


А тем временем на Хабре найдется ли герой, способный пересковоговорить три раза подряд
[səkˈsɪŋkt]?

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

Знакомимся с методом обратного распространения ошибки

Reading time6 min
Views64K
Всем привет! Новогодние праздники подошли к концу, а это значит, что мы вновь готовы делиться с вами полезным материалом. Перевод данной статьи подготовлен в преддверии запуска нового потока по курсу «Алгоритмы для разработчиков».

Поехали!






Метод обратного распространения ошибки – вероятно самая фундаментальная составляющая нейронной сети. Впервые он был описан в 1960-е и почти 30 лет спустя его популяризировали Румельхарт, Хинтон и Уильямс в статье под названием «Learning representations by back-propagating errors».
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments0

Java: вещи, которые могут показаться любопытными и разработчику со стажем

Reading time6 min
Views11K
Доброе время суток!

Статья написана по следам публикации «Вещи, которые вы [возможно] не знали о Java» другого автора, которую я бы отнёс к категории «для начинающих». Читая и комментируя её, я понял, что есть некоторое количество достаточно любопытных вещей, которые я узнал, уже программируя на java не один год. Возможно, эти вещи покажутся любопытными кому-то ещё.

Читать дальше →
Total votes 37: ↑32 and ↓5+27
Comments30

10 практических рекомендаций по безопасности образов Docker. Часть 2

Reading time6 min
Views7.1K
Перевод статьи подготовлен специально для студентов курса «Безопасность Linux».


Читать первую часть


5. Не оставляйте чувствительные данные в образах Docker


Иногда при создании приложения внутри образа Docker вам нужны такие секретные данные, как приватный SSH-ключ для извлечения кода из приватного репозитория или токены для установки закрытых пакетов. Если вы копируете их в промежуточный контейнер Docker, они кэшируются в том слое, к которому они были добавлены, даже если вы удалите их позже. Эти токены и ключи должны храниться вне Dockerfile.
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments4

Ловим утечки памяти в С/С++

Reading time8 min
Views60K


Приветствую вас, Хабровчане!


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


На Хабре уже существует две статьи, а именно: Боремся с утечками памяти (C++ CRT) и Утечки памяти в С++: Visual Leak Detector. Однако я считаю, что они недостаточно раскрыты, или данные способы могут не дать нужного вам результата, поэтому я хотел бы по возможности разобрать всем доступные способы, дабы облегчить вам жизнь.

Читать дальше →
Total votes 21: ↑19 and ↓2+17
Comments12

Ненормальное реактивное программирование

Reading time9 min
Views8.8K

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


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


Будет интересно.

Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments20

Как Kafka стала былью

Reading time5 min
Views31K


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


Я работаю в команде Tinkoff, которая занимается разработкой собственного центра нотификаций. По большей части я разрабатываю на Java с использованием Spring boot и решаю разные технические проблемы, возникающие в проекте.


Большинство наших микросервисов асинхронно взаимодействуют друг с другом через брокер сообщений. Ранее в качестве брокера мы использовали IBM MQ, который перестал справляться с нагрузкой, но при этом обладал высокими гарантиями доставки.


В качестве замены нам предложили Apache Kafka, которая обладает высоким потенциалом масштабирования, но, к сожалению, требует практически индивидуального подхода к конфигурированию для разных сценариев. Кроме того, механизм at least once delivery, работающий в Kafka по умолчанию, не позволял поддерживать необходимый уровень консистентности из коробки. Далее я поделюсь нашим опытом конфигурации Kafka, в частности расскажу, как настроить и жить с exactly once delivery.

Читать дальше →
Total votes 44: ↑42 and ↓2+40
Comments14

Руководство Google по стилю в C++. Часть 1

Reading time4 min
Views55K
Часть 1. Вступление
Часть 2. Заголовочные файлы
Часть 3. Область видимости
Часть 4. Классы
Часть 5. Функции
Часть 6. Специфика Google
Часть 7. Ещё возможности C++
Часть 8. Именование
Часть 9. Комментарии
Часть 10. Форматирование
Часть 11. Исключения из правил


Все мы при написании кода пользуемся правилами оформления кода. Иногда изобретаются свои правила, в других случаях используются готовые стайлгайды. Хотя все C++ программисты читают на английском легче, чем на родном, приятнее иметь руководство на последнем.
Эта статья является переводом части руководства Google по стилю в C++ на русский язык.
Исходная статья (fork на github), обновляемый перевод.
Это вступительная часть руководства, в которой рассматриваются общие вопросы «Зачем?»
Также после перевода будет несколько ответов на возможные вопросы.
Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments0

Worker Service в .NET Core 3: что такое и зачем нужно

Reading time2 min
Views24K
В .NET Core 3 появился новый шаблон проекта под названием Worker Service. Этот шаблон разработан, чтобы дать вам отправную точку для создания кроссплатформенных сервисов. В качестве альтернативного варианта использования: он дает очень хорошую среду для создания консольных приложений, которая идеально подходит для контейнеров и микросервисов.



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

Читать дальше →
Total votes 17: ↑15 and ↓2+13
Comments9

Изучение нейтрино привело к неожиданному открытию в математике

Reading time9 min
Views40K

Три физика хотели обсчитать процесс изменения нейтрино. В итоге они обнаружили неожиданное взаимоотношение между одними из самых распространённых объектов математики.




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

Формула «выглядела слишком хорошо, чтобы быть правдой», сказал Тао, профессор из Калифорнийского университета в Лос-Анджелесе, лауреат Филдсовской премии, один из ведущих математиков мира. «Нечто настолько короткое и простое уже давно должно было оказаться в учебниках, — сказал он. – Поэтому сначала я подумал – нет, этого не может быть».

А потом он подумал ещё немного.
Читать дальше →
Total votes 54: ↑52 and ↓2+50
Comments28

10 практических рекомендаций по безопасности образов Docker. Часть 1

Reading time5 min
Views11K
Перевод статьи подготовлен специально для студентов курса «Безопасность Linux».




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

Итак, начнем с нашего списка из 10 практических рекомендаций по безопасности образов Docker.
Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments14

Учебник по Spring Boot Admin

Reading time8 min
Views32K


Контролируйте и управляйте своими приложениями Spring Boot с помощью приятного пользовательского интерфейса поверх конечных точек Spring Boot Actuator.

Spring Boot Actuator


Actuator — это модуль Spring Boot, который добавляет конечные точки (endpoint) REST / JMX в ваше приложение, чтобы вы могли легко отслеживать и управлять им в производственной среде. Конечные точки предлагают проверку работоспособности, мониторинг метрик, доступ к журналам, дампам потоков, дампам кучи, информации об окружающей среде и многое другое. Автор подробно рассказал об Actuator в следующей статье:
Actuator: Spring Boot Production Monitoring and Management
Мониторинг и управление вашим работающим приложением с помощью Spring Boot Actuator 2.x. Соберите метрики или проверьте здоровье приложения.
Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity