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

    • Tutorial


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


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


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


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

    Читать дальше →
  • Улучшаем профиль в LinkedIn перед поиском работы

      На момент написания статьи, в социальной сети LinkedIn размещено порядка 30 миллионов вакансий от 20 миллионов компаний по всему миру. Не удивительно, что 90% рекрутеров используют LinkedIn как один из основных ресурсов поиска кандидатов.

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


      Читать дальше →
    • 22 сайта для программиста, которые помогут заговорить на английском

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

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

        Приступим!

        Учить лексику


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

        ЛеоПереводчик

        С этим плагином удобно переписываться с коллегами. Он автоматически переводит непонятные слова и выражения. Незаменимый инструмент, когда нет времени на доскональные переводы и нужен срочный ответ.
        Читать дальше →
      • UX Резюме: Перезагрузка

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



        Читать дальше →
      • Разработка шахматной программы

          Было ли вам когда-либо интересно написать свою шахматную программу? Настраивать и развивать её, проверять её на знакомых любителях шахмат и радоваться её победам. Но как написать такую программу? Об этом я и расскажу в этой статье.
          Читать дальше →
        • MVCC-1. Изоляция

            Привет, Хабр! Этой статьей я начинаю серию циклов (или цикл серий? в общем, задумка грандиозная) о внутреннем устройстве PostgreSQL.

            Материал будет основан на учебных курсах по администрированию, которые делаем мы с Павлом pluzanov. Смотреть видео не все любят (я точно не люблю), а читать слайды, пусть даже с комментариями, — совсем «не то».

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

            Ориентироваться я буду на тех, кто уже имеет определенный опыт использования PostgreSQL и хотя бы в общих чертах представляет себе, что к чему. Для совсем новичков текст будет тяжеловат. Например, я ни слова не скажу о том, как установить PostgreSQL и запустить psql.

            Вещи, о которых пойдет речь, не сильно меняются от версии к версии, но использовать я буду текущий, 11-й «ванильный» PostgreSQL.

            Первый цикл посвящен вопросам, связанным с изоляцией и многоверсионностью, и план его таков:

            1. Изоляция, как ее понимают стандарт и PostgreSQL (эта статья);
            2. Слои, файлы, страницы — что творится на физическом уровне;
            3. Версии строк, виртуальные и вложенные транзакции;
            4. Снимки данных и видимость версий строк, горизонт событий;
            5. Внутристраничная очистка и HOT-обновления;
            6. Обычная очистка (vacuum);
            7. Автоматическая очистка (autovacuum);
            8. Переполнение счетчика транзакций и заморозка.

            Ну, поехали.
            Читать дальше →
          • Тяжёлое бремя времени. Доклад Яндекса о типичных ошибках в работе со временем

              В коде самых разных проектов нередко приходится оперировать временем — например, чтобы завязать логику работы приложения на текущее время у пользователя. Старший разработчик интерфейсов Виктор Хомяков victor-homyakov описал типичные ошибки, которые встречались ему в проектах на языках Java, C# и JavaScript от разных авторов. Перед ними вставали одни и те же задачи: получить текущую дату и время, измерить интервалы или выполнить код асинхронно.



              — До Яндекса я работал в других продуктовых компаниях. Это не как фрилансер — написал, сдал и забыл. Приходится очень долго работать с одной кодовой базой. И я, собственно, смотрел, читал, писал много кода на разных языках и увидел много чего интересного. В итоге у меня родилась тема этого рассказа.

              Читать дальше →
            • Java Logging: история кошмара

                Вступление


                Тернист и извилист путь Java-платформы к правильному способу записи строчек в лог-файлы. История logging в Java довольно познавательна в плане изучения особенностей Open Source, в том числе его взаимодействия с корпорациями и единичными программистами. Я собираюсь рассказать столько, сколько возможно, об истории развития Java logging, а также о том, к чему все пришло и как жить дальше.
                Вперед и с песней!
              • Eclair — Java Spring библиотека декларативного логирования



                  Вопросов о работе сервисов на этапах разработки, тестирования и поддержки очень много и все они на первый взгляд непохожи: «Что произошло?», «Был ли запрос?», «Какой формат даты?», «Почему сервис не отвечает?» и т.д.

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

                  Об одеяле и особенностях решения — далее.
                  Читать дальше →
                • Аспектно-ориентированное программирование, Spring AOP

                    Аспектно-ориентированное программирование (АОП) — это парадигма программирования являющейся дальнейшим развитием процедурного и объектно-ориентированного программирования (ООП). Идея АОП заключается в выделении так называемой сквозной функциональности. И так все по порядку, здесь я покажу как это сделать в Java — Spring @AspectJ annotation стиле (есть еще schema-based xml стиль, функциональность аналогичная).

                    Выделении сквозной функциональности


                    До

                    image

                    и после

                    image

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

                    Join point


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