Чем вам нравится программирование?
Расскажите в комментариях ⬇️
Расскажите в комментариях ⬇️
Узнаем точную дату с помощью Java
Здесь мы сначала получаем текущую дату через метод LocalDate.now(), затем вычитаем из нее заданное количество дней методом minusDays(), получая дату в прошлом.
Затем создаем объект класса DateTimeFormatter, который позволяет задать формат выводимой даты (в данном случае "dd.MM.yyyy"). И наконец, форматируем дату методом format() и выводим результат на экран.
Здесь мы сначала получаем текущую дату через метод LocalDate.now(), затем вычитаем из нее заданное количество дней методом minusDays(), получая дату в прошлом.
Затем создаем объект класса DateTimeFormatter, который позволяет задать формат выводимой даты (в данном случае "dd.MM.yyyy"). И наконец, форматируем дату методом format() и выводим результат на экран.
Собрали 5 лучших вузов для программистов в 2023-2024 📚
1. Университет Иннополис
Есть возможность получения 100% гранта, 100% трудоустройство выпускников.
Средний проходной балл ЕГЭ (2022): 99,0 (бюджет)
Стоимость платного обучения: от 800 000 рублей в год
2. Московский физико–технический институт
Есть собственная система подготовки, совмещающая обучение студентов с их практикой в компаниях–партнерах университета.
Средний проходной балл ЕГЭ (2022): 97,1 (бюджет) и 93,8 (контракт)
Стоимость платного обучения: от 389 000 рублей в год
3. Национальный исследовательский университет «Высшая школа экономики»
Используют модель Major–Minor, что позволяет составить индивидуальный план обучения для каждого студента.
Средний проходной балл ЕГЭ (2022): 95,1 (бюджет) и 83,9 (контракт)
Стоимость платного обучения: от 320 000 рублей в год
4. Национальный исследовательский университет ИТМО
В ИТМО используются специализированные акселераторы, бизнес-инкубатор и Инжиниринговый центр «M2M телемеханика и приборостроение».
Средний проходной балл ЕГЭ (2022): 93,7 (бюджет) и 78,1 (контракт)
Стоимость платного обучения: от 289 000 рублей в год
5. Национальный исследовательский ядерный университет «МИФИ»
Сотрудничают с международными компаниями, устраивают стажировки за рубежом.
Средний проходной балл ЕГЭ (2022): 91,4 (бюджет) и 77,0 (контракт)
Стоимость платного обучения: от 80 400 рублей в год
➡️Полную подборку из 33 вузов можно почитать тут (зеркало).
1. Университет Иннополис
Есть возможность получения 100% гранта, 100% трудоустройство выпускников.
Средний проходной балл ЕГЭ (2022): 99,0 (бюджет)
Стоимость платного обучения: от 800 000 рублей в год
2. Московский физико–технический институт
Есть собственная система подготовки, совмещающая обучение студентов с их практикой в компаниях–партнерах университета.
Средний проходной балл ЕГЭ (2022): 97,1 (бюджет) и 93,8 (контракт)
Стоимость платного обучения: от 389 000 рублей в год
3. Национальный исследовательский университет «Высшая школа экономики»
Используют модель Major–Minor, что позволяет составить индивидуальный план обучения для каждого студента.
Средний проходной балл ЕГЭ (2022): 95,1 (бюджет) и 83,9 (контракт)
Стоимость платного обучения: от 320 000 рублей в год
4. Национальный исследовательский университет ИТМО
В ИТМО используются специализированные акселераторы, бизнес-инкубатор и Инжиниринговый центр «M2M телемеханика и приборостроение».
Средний проходной балл ЕГЭ (2022): 93,7 (бюджет) и 78,1 (контракт)
Стоимость платного обучения: от 289 000 рублей в год
5. Национальный исследовательский ядерный университет «МИФИ»
Сотрудничают с международными компаниями, устраивают стажировки за рубежом.
Средний проходной балл ЕГЭ (2022): 91,4 (бюджет) и 77,0 (контракт)
Стоимость платного обучения: от 80 400 рублей в год
➡️Полную подборку из 33 вузов можно почитать тут (зеркало).
👩💻 Устаревшие DSL в Spring Security 6.1
Spring Security в Spring Boot 3.1 был обновлён до версии 6.1, в которой началась подготовка к релизу следующей мажорной версии - 7.0, в которой, как оказалось, разработчики хотят окончательно отказаться от старых DSL на основе цепочек методов. В этом коротком видео автор демонстрирует, как можно легко заменить устаревшие DSL на современные на основе лямбда-выражений.
Смотреть видео
Spring Security в Spring Boot 3.1 был обновлён до версии 6.1, в которой началась подготовка к релизу следующей мажорной версии - 7.0, в которой, как оказалось, разработчики хотят окончательно отказаться от старых DSL на основе цепочек методов. В этом коротком видео автор демонстрирует, как можно легко заменить устаревшие DSL на современные на основе лямбда-выражений.
Смотреть видео
Разработка системы аутентификации на Java+Tarantool
Системы аутентификации есть везде. Пока вы скучаете в лифте по пути с седьмого этажа на первый, можно успеть проверить баланс в приложении банка, поставить пару лайков в Instagram, а потом проверить почту. Это минимум три системы аутентификации.
Статья будет полезна тем, кто хочет разобраться в устройстве систем аутентификации. На доступном примере я покажу все основные части архитектуры, как они связаны между собой и как работают в целом.
Читать статью
Системы аутентификации есть везде. Пока вы скучаете в лифте по пути с седьмого этажа на первый, можно успеть проверить баланс в приложении банка, поставить пару лайков в Instagram, а потом проверить почту. Это минимум три системы аутентификации.
Статья будет полезна тем, кто хочет разобраться в устройстве систем аутентификации. На доступном примере я покажу все основные части архитектуры, как они связаны между собой и как работают в целом.
Читать статью
Хабр
Разработка системы аутентификации на Java+Tarantool
Системы аутентификации есть везде. Пока вы скучаете в лифте по пути с седьмого этажа на первый, можно успеть проверить баланс в приложении банка, поставить пару лайков в Instagram, а потом проверить...
#вопросы_с_собеседований
Чем LinkedHashSet отличается от HashSet?
LinkedHashSet отличается от HashSet только тем, что в его основе лежит LinkedHashMap вместо HashMap. Благодаря этому порядок элементов при обходе коллекции является идентичным порядку добавления элементов (insertion-order). При добавлении элемента, который уже присутствует в LinkedHashSet (т.е. с одинаковым ключом), порядок обхода элементов не изменяется.
Чем LinkedHashSet отличается от HashSet?
LinkedHashSet отличается от HashSet только тем, что в его основе лежит LinkedHashMap вместо HashMap. Благодаря этому порядок элементов при обходе коллекции является идентичным порядку добавления элементов (insertion-order). При добавлении элемента, который уже присутствует в LinkedHashSet (т.е. с одинаковым ключом), порядок обхода элементов не изменяется.
Что такое механизм try-with-resources?
Данная конструкция, которая появилась в Java 7, позволяет использовать блок try-catch не заботясь о закрытии ресурсов, используемых в данном сегменте кода. Ресурсы объявляются в скобках сразу после try, а компилятор уже сам неявно создаёт секцию finally, в которой и происходит освобождение занятых в блоке ресурсов. Под ресурсами подразумеваются сущности, реализующие интерфейс java.lang.Autocloseable.
Стоит заметить, что блоки catch и явный finally выполняются уже после того, как закрываются ресурсы в неявном finally.
Данная конструкция, которая появилась в Java 7, позволяет использовать блок try-catch не заботясь о закрытии ресурсов, используемых в данном сегменте кода. Ресурсы объявляются в скобках сразу после try, а компилятор уже сам неявно создаёт секцию finally, в которой и происходит освобождение занятых в блоке ресурсов. Под ресурсами подразумеваются сущности, реализующие интерфейс java.lang.Autocloseable.
Стоит заметить, что блоки catch и явный finally выполняются уже после того, как закрываются ресурсы в неявном finally.
#вопросы_с_собеседований
Что такое «fail-fast поведение»?
fail-fast поведение означает, что при возникновении ошибки или состояния, которое может привести к ошибке, система немедленно прекращает дальнейшую работу и уведомляет об этом. Использование fail-fast подхода позволяет избежать недетерминированного поведения программы в течение времени.
В Java Collections API некоторые итераторы ведут себя как fail-fast и выбрасывают ConcurrentModificationException, если после его создания была произведена модификация коллекции, т.е. добавлен или удален элемент напрямую из коллекции, а не используя методы итератора.
Реализация такого поведения осуществляется за счет подсчета количества модификаций коллекции (modification count):
• при изменении коллекции счетчик модификаций так же изменяется;
• при создании итератора ему передается текущее значение счетчика;
• при каждом обращении к итератору сохраненное значение счетчика сравнивается с текущим, и, если они не совпадают, возникает исключение.
Что такое «fail-fast поведение»?
fail-fast поведение означает, что при возникновении ошибки или состояния, которое может привести к ошибке, система немедленно прекращает дальнейшую работу и уведомляет об этом. Использование fail-fast подхода позволяет избежать недетерминированного поведения программы в течение времени.
В Java Collections API некоторые итераторы ведут себя как fail-fast и выбрасывают ConcurrentModificationException, если после его создания была произведена модификация коллекции, т.е. добавлен или удален элемент напрямую из коллекции, а не используя методы итератора.
Реализация такого поведения осуществляется за счет подсчета количества модификаций коллекции (modification count):
• при изменении коллекции счетчик модификаций так же изменяется;
• при создании итератора ему передается текущее значение счетчика;
• при каждом обращении к итератору сохраненное значение счетчика сравнивается с текущим, и, если они не совпадают, возникает исключение.
Java исполняется 28 лет, платформа Payara, Micronaut 4.0-M5, весенние обновления, JHipster Lite
Дайджест важных обновлений за последнюю неделю:
JDK 21 — багфикс
Spring Cloud 2022.0.3 обеспечивает совместимость с Spring Boot 3.1
Spring Shell 3.1.0, 3.0.4 и 2.1.10
Spring Security Kerberos 2.0-RC2 — обновление зависимостей к Spring Security 6.1.0
Payara Platform — исправление уязвимостей
Quarkus 3.0. 4 и 2.13.8 — исправление багов и документации
WildFly 28.0.1 — обновление зависимостей и исправление багов
Apache Camel 3.20.5 — исправления в модуле camel-jbang
JDKMon 17.0.61 добавляет свойство в файл jdkmon.properties для отключения уведомлений; и предоставляет исправления проблем, связанных с обнаруженными архитектурами ЦП и несколькими сборками одной и той же версии JDK.
JHipster Lite 0.33.0 — много фиксов и добавлений, например совместное использование свойств модуля между ландшафтным и патч-экранами; исправление нативных подсказок для интеграции JGit; и добавление провайдера DestroyRef.
На прошлой неделе Java исполнилось 28 лет, так как язык был представлен на конференции SunWorld 1995 23 мая 1995 года.
#дайджест
Дайджест важных обновлений за последнюю неделю:
JDK 21 — багфикс
Spring Cloud 2022.0.3 обеспечивает совместимость с Spring Boot 3.1
Spring Shell 3.1.0, 3.0.4 и 2.1.10
Spring Security Kerberos 2.0-RC2 — обновление зависимостей к Spring Security 6.1.0
Payara Platform — исправление уязвимостей
Quarkus 3.0. 4 и 2.13.8 — исправление багов и документации
WildFly 28.0.1 — обновление зависимостей и исправление багов
Apache Camel 3.20.5 — исправления в модуле camel-jbang
JDKMon 17.0.61 добавляет свойство в файл jdkmon.properties для отключения уведомлений; и предоставляет исправления проблем, связанных с обнаруженными архитектурами ЦП и несколькими сборками одной и той же версии JDK.
JHipster Lite 0.33.0 — много фиксов и добавлений, например совместное использование свойств модуля между ландшафтным и патч-экранами; исправление нативных подсказок для интеграции JGit; и добавление провайдера DestroyRef.
На прошлой неделе Java исполнилось 28 лет, так как язык был представлен на конференции SunWorld 1995 23 мая 1995 года.
#дайджест
Какой CVS пользуетесь?
Anonymous Poll
34%
Gitlab
46%
Github
0%
SourceForge
0%
GNU Savannah
0%
Launchpad
17%
Bitbucket
2%
Другое (напишу в комментариях)
👩💻 Отладка контекста безопасности - Spring Security в деталях
При работе с контекстом безопасности Spring Security иногда возникают ситуации, когда разрабатываемое приложение начинает себя вести не очевидно, отвечать ошибками с HTTP-статусом 403, но без каких-либо подробностей, в том числе и в логах. И в этом случае приходится браться за отладку, о простых способах которой автор расскажет в этом ролике.
При работе с контекстом безопасности Spring Security иногда возникают ситуации, когда разрабатываемое приложение начинает себя вести не очевидно, отвечать ошибками с HTTP-статусом 403, но без каких-либо подробностей, в том числе и в логах. И в этом случае приходится браться за отладку, о простых способах которой автор расскажет в этом ролике.
#вопросы_с_собеседований
Для Enum есть специальный класс java.util.EnumSet. Зачем? Чем авторов не устраивал HashSet или TreeSet?
EnumSet - это реализация интерфейса Set для использования с перечислениями (Enum). В структуре данных хранятся объекты только одного типа Enum, указываемого при создании. Для хранения значений EnumSet использует массив битов (bit vector), - это позволяет получить высокую компактность и эффективность. Проход по EnumSet осуществляется согласно порядку объявления элементов перечисления.
Все основные операции выполняются за O(1) и обычно (но не гарантированно) быстрее аналогов из HashSet, а пакетные операции (bulk operations), такие как containsAll() и retainAll() выполняются даже гораздо быстрей.
Помимо всего EnumSet предоставляет множество статических методов инициализации для упрощенного и удобного создания экземпляров.
Для Enum есть специальный класс java.util.EnumSet. Зачем? Чем авторов не устраивал HashSet или TreeSet?
EnumSet - это реализация интерфейса Set для использования с перечислениями (Enum). В структуре данных хранятся объекты только одного типа Enum, указываемого при создании. Для хранения значений EnumSet использует массив битов (bit vector), - это позволяет получить высокую компактность и эффективность. Проход по EnumSet осуществляется согласно порядку объявления элементов перечисления.
Все основные операции выполняются за O(1) и обычно (но не гарантированно) быстрее аналогов из HashSet, а пакетные операции (bulk operations), такие как containsAll() и retainAll() выполняются даже гораздо быстрей.
Помимо всего EnumSet предоставляет множество статических методов инициализации для упрощенного и удобного создания экземпляров.
IEEEXtreme — 24-ех часовое соревнование по программированию, в котором участникам предлагается решать разнообразные задачки. Недавно был проведен эксперимент, в котором нейросеть ChatGPT принимала участие в соревновании, причем тестировали три языка: Java, C++ и Python. Результат печальный: в среднем человек оказывается в 3-5 раз более успешным, а на advanced уровне эффективность ChatGPT падает в 23 раза. При этом разница между 4 и 3.5 версией нейросети практически отсутствует.
Восстание машин отменяется?
Восстание машин отменяется?
Зубчатый массив в Java
Зубчатый массив — это массив массивов, в котором массивы элементов могут быть разных размеров, т. е. мы можем создать двумерный массив, но с переменным числом столбцов в каждой строке. Эти типы массивов также известны как зубчатые массивы.
Подробнее о зубчатых массивах можно почитать здесь.
Зубчатый массив — это массив массивов, в котором массивы элементов могут быть разных размеров, т. е. мы можем создать двумерный массив, но с переменным числом столбцов в каждой строке. Эти типы массивов также известны как зубчатые массивы.
Подробнее о зубчатых массивах можно почитать здесь.
NullPointer Exception
Исключение нулевого указателя возникает в Java довольно часто при попытке вызова метода несуществующего объекта.
Рассмотрим строчку кода из примера 1 на картинке. Если объект school окажется равен null или его метод listStudents вернет null, вы получите исключение NullPointerException.
Хорошей практикой разработки на Java является предварительная проверка на null в методах (как в примере 2).
Исключение нулевого указателя возникает в Java довольно часто при попытке вызова метода несуществующего объекта.
Рассмотрим строчку кода из примера 1 на картинке. Если объект school окажется равен null или его метод listStudents вернет null, вы получите исключение NullPointerException.
Хорошей практикой разработки на Java является предварительная проверка на null в методах (как в примере 2).
Подборка полезных статей по Java на самые разные темы. Сохраняйте себе:
☕️ Может ли Java-приложение использовать больше памяти, чем размер кучи?
☕️ Выходя за рамки JUnit. Создаем сложные расширения
☕️ Запросы к MongoDB из Java с помощью билдера фильтров
☕️ JDBC vs JPA
☕️ Java библиотека для работы с внешним сервисом по протоколу RESTful API
☕️ Как сгенерировать UUID в качестве первичных ключей при помощи Hibernate
☕️ Парсинг JSON с помощью Jackson
☕️ FAQ по var в Java
☕️ JUnit: тестирование методов, вызывающих System.exit()
☕️ Абстрактные классы и интерфейсы в Java
☕️ Может ли Java-приложение использовать больше памяти, чем размер кучи?
☕️ Выходя за рамки JUnit. Создаем сложные расширения
☕️ Запросы к MongoDB из Java с помощью билдера фильтров
☕️ JDBC vs JPA
☕️ Java библиотека для работы с внешним сервисом по протоколу RESTful API
☕️ Как сгенерировать UUID в качестве первичных ключей при помощи Hibernate
☕️ Парсинг JSON с помощью Jackson
☕️ FAQ по var в Java
☕️ JUnit: тестирование методов, вызывающих System.exit()
☕️ Абстрактные классы и интерфейсы в Java
📝 Как правильно составить сопроводительное письмо программисту
Давайте разберемся, зачем нужно сопроводительное письмо и как его написать так, чтобы вас захотели взять на работу.
🔗 Основной сайт
🔗 Зеркало
Давайте разберемся, зачем нужно сопроводительное письмо и как его написать так, чтобы вас захотели взять на работу.
🔗 Основной сайт
🔗 Зеркало