Pull to refresh
25
0

Программист

Send message

Новый интернет-банк: почему мы не стали переделывать старый, а решили делать всё с нуля

Reading time7 min
Views17K

Привет!

Кроме мобильного приложения, у нас есть еще и веб-версия банка под названием Альфа-Клик.

Несколько лет назад в Альфе был взят курс Mobile First.

Как нам однажды справедливо написали в комментариях, концепция стала смахивать на Mobile only, так как Альфа-Клик стал получать обновления все реже и реже, особенно всех печалила визуальная составляющая.

В этом посте мы расскажем, как сделали новый Альфа-Клик.

Читать далее
Total votes 27: ↑22 and ↓5+17
Comments53

Как написать (игрушечную) JVM

Reading time10 min
Views7.3K
Статья про KVM оказалась интересной для читателей, поэтому сегодня публикуем новый перевод статьи Serge Zaitsev: как работает Java Virtual Machine под капотом.

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

Я попытаюсь написать игрушечную (и неполную) JVM, чтобы показать основные принципы ее работы. Надеюсь, эта статья вызовет у вас интерес и вдохновит на дальнейшее изучение JVM.
Читать дальше →
Total votes 24: ↑24 and ↓0+24
Comments2

Как стать долларовым миллионером за 30 лет, лежа на диване

Reading time12 min
Views239K


На Хабре недавно вышел пост ״Новичкам фондового рынка: честные разговоры о трейдинге״. Этот пост, опубликованный в одном из самых читаемых блогов Хабра, вводит людей в заблуждение и создает у них ложное представление о том, что игра на бирже — хороший способ заработка. Это вынудило меня написать комментарий, постепенно переросший в целую статью, с детальным разбором того, почему трейдинг — это не способ разбогатеть, а способ потерять деньги, и о том, как на самом деле заработать на инвестициях.
Поехали!
Total votes 308: ↑291 and ↓17+274
Comments557

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

Reading time12 min
Views204K

Дисклеймер:


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

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

СТОП ПЕРЕКУП! Инструкция по самостоятельной сборке «медицинской маски»

Reading time8 min
Views156K
В авторском канале и примкнувшем к нему чате, постоянно всплывают пользователи, которые просят подсказать ссылку на инструкцию по самостоятельной сборке обычной трехслойной аптечной маски. Несмотря на то, что уже тысячу раз обсудили вроде везде где только можно, что «аптечная маска — ТОЛЬКО ДЛЯ ЗАБОЛЕВШИХ», все равно появляются люди, которые ведутся на странную пропаганду (в т.ч. из гос сми) и ищут эти несчастные кусочки спанбонда. Подогревает ситуацию и то, что в различных группах/домовых чатах такая простейшая маска (купленная еще пару недель назад даже не за цент, а за доли цента) сегодня в Беларуси стоит от доллара до двух (2-4 BYN). В государственных аптеках цены пока еще отстают, но не на много. Сколько же стоит такая маска на самом деле — можете прикинуть, дочитав статью до конца… Под катом — методика создания самодельной хирургической маски.

Спаять себе медицинскую маску!
Total votes 105: ↑80 and ↓25+55
Comments221

Идиоматичный Kotlin, набор хороших практик

Reading time9 min
Views27K


Чтобы полностью раскрыть все преимущества Kotlin, пересмотрим некоторые подходы, которые мы используем в Java. Многие из них могут быть заменены на лучшие аналоги из Kotlin. Давайте посмотрим на то, как мы можем написать идиоматичный код на Kotlin.
Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments13

API, ради которых наконец-то стоит обновиться с Java 8. Часть 1

Reading time11 min
Views32K

На сегодняшний день Java 8 является самой популярной версией Java и ещё довольно долго будет ей оставаться. Однако с тех пор уже выпущено пять новых версий Java (9, 10, 11, 12, 13), и совсем скоро выйдет ещё одна, Java 14. В этих новых версиях появилось гигантское количество новых возможностей. Например, если считать в JEP'ах, то в сумме их было реализовано 141:



Однако в этом цикле статей не будет никакого сухого перечисления JEP'ов. Вместо этого я хочу просто рассказать об интересных API, которые появились в новых версиях. Каждая статья будет содержать по 10 API. В выборе и порядке этих API не будет какой-то определённой логики и закономерности. Это будет просто 10 случайных API, не ТОП 10 и без сортировки от наиболее важного API к наименее важному. Давайте начнём.

Читать дальше →
Total votes 55: ↑52 and ↓3+49
Comments41

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

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

DIY Корутины. Часть 1. Ленивые генераторы

Reading time18 min
Views11K

В мире JVM про корутины знают в большей степени благодаря языку Kotlin и Project Loom. Хорошего описания принципа работы котлиновских корутин я не видел, а код библиотеки kotlin-coroutines совершенно не понятен неподготовленному человеку. По моему опыту, большинство людей знает о корутинах только то, что это "облегченные потоки", и что в котлине они работают через умную генерацию байткода. Таким был и я до недавнего времени. И мне пришла в голову идея, что раз корутины могут быть реализованы в байткоде, то почему бы не реализовать их в java. Из этой идеи, впоследствии, появилась небольшая и достаточно простая библиотека, в устройстве которой, я надеюсь, может разобраться практически любой разработчик. Подробности под катом.


Читать дальше →
Total votes 22: ↑21 and ↓1+20
Comments22

Дж. Х. Рейнвотер «Как пасти котов»: не надо так, или негативные паттерны в руководстве

Reading time11 min
Views6.5K


Мы подходим к заключительным частям цикла статей по книге Рейнвотера для разработчиков, мутирующих в руководителей отдела. До сих пор речь шла о том, как все должно быть в идеальном мире; теперь пришло время обратить взгляд на то, как обстоят дела в прозаической реальности. Рейнвотер посвящает целую главу разбору порочных, разрушительных стратегий, которые лидеры-новички часто выбирают по наитию – почему они появляются, чем чреваты и, как собственно, действовать, если уже встал на кривую дорожку.
Читать дальше →
Total votes 16: ↑14 and ↓2+12
Comments0

Зачем учить Java и как делать это эффективно. Доклад Яндекса

Reading time11 min
Views56K
Чем Java отличается от других популярных языков? Почему именно Java может быть первым языком для изучения? Давайте составим план, который поможет выучить Java как с нуля, так и с применением навыков программирования на других языках. Перечислим отличия между созданием продакшен-кода на Java и разработкой на других языках. Михаил Затепякин прочитал этот доклад на встрече для будущих участников стажировки Яндекса и других начинающих разработчиков — Java Junior meetup.


— Всем привет, меня зовут Миша. Я разработчик из Яндекс.Маркета, и сегодня я расскажу вам, зачем учить Java и как делать это эффективно. Вы можете задать резонный вопрос: почему это буду рассказывать я, а не какой-нибудь сильный разработчик с кучей лет стажа? Дело в том, что я сам изучал Java недавно, года полтора назад, поэтому еще помню, как это примерно было и какие есть подводные камни.
Читать дальше →
Total votes 24: ↑21 and ↓3+18
Comments21

Пост про хорошие рюкзаки (спасите)

Reading time4 min
Views35K

— Да у тебя просто рюкзака нормального не было!



Мне катастрофически не везёт с рюкзаками.


Как обычно бывает: до покупки с ними как будто конфетно-букетный период. Всё выглядит здорово, удобно и эргономично, много места, и лямочка там, где надо, и крепления удобные. Смотришь в магазине и нарадоваться не можешь. А потом, когда документально оформили отношения, появляется беда. Лямка на самом деле не там, крепление цепляется за рукав, ноут болтается, спине неудобно, мало места, в транспорте он занимает всё свободное пространство и вызывает ненависть попутчиков, плюс зачем там вообще USB!?


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

Читать дальше →
Total votes 31: ↑21 and ↓10+11
Comments104

Анонимный Дед Мороз 2019-2020: пост хвастовства новогодними подарками

Reading time1 min
Views20K
АДМ 2019 на Хабре

Анонимный Дед Мороз 2019-2020 набирает обороты: каждый третий участник отметил подарок отправленным, а несколько человек даже нашли в себе силы встать из-за компьютера и забрать посылку на почте.

Что же дарят Хабравчане своим Хабравнукам, Хабравнучкам и тем, кто указал пол «другой» в Хабрапрофиле? Давайте зайдем в комментарии и все у них разузнаем!

С НАСТУПАЮЩИМ НОВЫМ 2020 ГОДОМ!

Ваши iCTPEJlOK и kafeman
Total votes 69: ↑67 and ↓2+65
Comments227

Как микросервисы Netflix справляются с Pub-Sub данными

Reading time13 min
Views6.3K
Перевод статьи подготовлен специально для студентов курса «Архитектор высоких нагрузок».





Введение


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

Один из примеров, отражающий необходимость распределенной рассылки набора данных выглядит так: в любой момент времени Netflix выполняет огромное количество A/B тестов. Эти тесты охватывают несколько сервисов и команд, а операторы тестов должны иметь возможность изменять конфигурацию на лету. Также необходима возможность обнаружения узлов, которые не смогли получить последнюю тестовую конфигурацию, и возможность отката к старым версиям в случае, если что-то пойдет не так.
Читать дальше →
Total votes 10: ↑8 and ↓2+6
Comments0

Reactor, WebFlux, Kotlin Coroutines, или Асинхронность на простом примере

Reading time12 min
Views20K


Многие сервисы в современном мире, по большей части, «ничего не делают». Их задачи сводятся к запросам к другим базам/сервисам/кешам и агрегации всех этих данных по различным правилам и разнообразной бизнес-логике. Поэтому неудивительно, что появляются такие языки, как Golang, с удобной встроенной конкурентной системой, позволяющей легко организовывать неблокирующий код.


В JVM-мире всё немного сложнее. Есть огромное количество фреймворков и библиотек, блокирующих потоки при использовании. Так и сама stdlib может делать то же самое порой. Да и в Java нет аналогичного механизма, похожего на горутины в Golang.


Тем не менее, JVM активно развивается и появляются новые интересные возможности. Есть Kotlin с корутинами, которые по своему использованию очень похожи на горутины из Golang (хоть и реализованы совершенно по-другому). Есть JEP Loom, который в будущем привнесёт fibers в JVM. Один из самых популярных веб-фреймворков — Spring — не так давно добавил возможность создавать полностью неблокирующие сервисы на Webflux. А с недавним релизом Spring boot 2.2 интеграция с Kotlin стала ещё лучше.


Предлагаю на примере небольшого сервиса по переводу денег с одной карты на другую самим написать приложение на Spring boot 2.2 и Kotlin для интеграции с несколькими внешними сервисами.

Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments15

Пишем на Go простой балансировщик

Reading time8 min
Views26K

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

Поигравшись с профессиональными балансировщиками наподобие NGINX, я попробовал ради веселья создать простенький балансировщик. Написал я его на Go, это современный язык, поддерживающий полноценный параллелизм. Стандартная библиотека в Go имеет широкие возможности и позволяет писать высокопроизводительные приложения с меньшим количеством кода. К тому же для простоты распространения она генерирует единственный статически скомпонованный бинарник.
Читать дальше →
Total votes 79: ↑73 and ↓6+67
Comments32

Оптимизация аптек: что мы сделали с помощью математики

Reading time8 min
Views16K


Оказалось, что аптечный бизнес достаточно прост в плане старта (аптека крупной франшизы открывается чуть ли не по механике «далее-далее-ок»), но достаточно сложный в управлении. При этом таким он не кажется. Сложная часть в управлении запасами, то есть в поставке лекарств, медсредств и прочего в конечную розничную точку. В реальности делают это люди руками и часто жёстко лажают.

Очень часты ситуации недозаказа товара (когда нужного ходового лекарства просто нет в аптеке), перезаказа (товар поставляется на пару ближайших лет) или неправильного распределения по сети аптек (в одной нет, а в другой — на шесть месяцев запаса). Таблетки компактные, выкладка в аптеках — хорошо, если 5 % от товарного запаса, поэтому восемь–десять миллионов рублей можно запросто спрятать даже на 15 квадратных метрах в ящиках. А потом у этих лекарств внезапно уже через год закончатся сроки годности.

Проблема — в ручном управлении запасами и в неправильном прогнозировании спроса: рынок таков, что часто в начале года подписываются обязательства на год вперёд, и производитель впихивает тонны неходового товара аптечным сетям.

Конечно же, в этой ситуации очень не хватает математической модели. Ну мы с ней и пришли. В процессе сделали ещё несколько чудесных открытий про рынок.
Читать дальше →
Total votes 54: ↑53 and ↓1+52
Comments25

Обработка ошибок в Kotlin/Java: как правильно это делать?

Reading time7 min
Views19K

Источник


Обработка ошибок в любой разработке играет важнейшую роль. В программе может пойти не так практически всё: пользователь введёт некорректные данные, или они могут прийти такими по http, или мы ошиблись при написании сериализации/десериализации и в процессе обработки программа падает с ошибкой. Да может банально закончится место на диске.


спойлер

¯_(ツ)_/¯, нет единого способа, и в каждой конкретной ситуации придётся подбирать наиболее подходящий вариант, но есть рекомендации, как это делать лучше.

Читать дальше →
Total votes 35: ↑31 and ↓4+27
Comments16

Подготовка к Spring Professional Certification. Контейнер, IoC, бины

Reading time10 min
Views104K

Доброго времени суток, Хабр.


Сегодня я решил представить вам перевод цикла статей для подготовки к Spring Professional Certification.


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


Зачем я это делаю, ведь уже есть куча профильных материалов?
  1. Часто в них информация не структурирована, не собрана, или не актуальна
  2. Молодые разработчики могут не знать английский. Этот цикл можно использовать не только для сертификации, но и для самообучения/повторения материалов.
  3. Этими материалами можно пользоваться при подготовке к собеседованию, т.к. они выстроены в виде вопросов и ответов.
  4. Важное, и самое главное преимущество — этот QA сделан из вопросов из  официального Study Guide от Pivotal. 

  • Некоторые вопросы, которые казались мне лишними или которых не было в гиде я осознанно упустил.

Оглавление
  1. Внедрение зависимостей, контейнер, IoC, бины
  2. AOP (аспектно-ориентированное программирование)
  3. JDBC, транзакции, JPA, Spring Data
  4. Spring Boot
  5. Spring MVC
  6. Spring Security
  7. REST
  8. Тестирование

Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments53

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

Reading time7 min
Views26K
Здравствуйте, коллеги. Сегодня мы публикуем перевод очередного обзора с сайта Бена Нейдела — этот сайт наверняка заинтересует вас и в оригинале. На сей раз мы поговорим о книге "Распределенные системы. Паттерны проектирования", которая дополняет вышедшую у нас в начале этого года книгу "Осваиваем Kubernetes" и, в сущности, является аналогом GoF для проектирования распределенных систем.



Приятного чтения.
Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments7

Information

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