10986
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
Finding CPU Load with JFR. JDK Flight Recorder, в быту JFR
Среда наблюдения и мониторинга, встроенная в JDK! Начиная с JDK 11, JFR стал open-source и переименован в JDK Flight Recorder. Это делает JFR отличным выбором для отслеживания скрытых проблем, связанных с тем, почему приложение потребляет ресурсы, такие как CPU. В статье — о том, как работать с JFR.
https://inside.java/2023/11/27/sip090/
👉@BookJava
Совет 💡
Установка @Column в updateable=false приводит к тому, что реализация JPA будет игнорировать этот столбец при выполнении оператора обновления. При этом не будет выброшено исключение. Это никак не влияет на базу данных. Вы по-прежнему можете обновлять столбец вне Hibernate.
👉@BookJava
#вакансия #удалённо #parttime #koltin #преподаватель
Время делиться знаниями!
OTUS – образовательная платформа. У нас авторские курсы разной степени сложности, вступительное тестирование для студентов и преподаватели-практики из крупнейших компаний. 6 лет мы учимся друг у друга, советуемся, помогаем, делимся опытом и обсуждаем новости как в преподавании, так и в IT.
Вакансия: преподаватель на кастомный онлайн курс - "Kotlin backend"
Можно без опыта преподавания, мы поможем вам освоить практики преподавания
Преподаватель раскрывает тему с помощью теории и примеров из практики.
Занятия в zoom в дневное время. Можно выбрать удобную нагрузку и темы занятий.
С нами вы сможете ✅
-получать за проведение 1 вебинара - 10.000 рублей + за проверку 1 дз - 500 рублей
- структурировать свой опыт и знания;
- прокачать софт-скиллы;
Бонусы 🎁
- наши курсы со скидкой/бесплатно;
- можно приглашать лучших выпускников к себе на работу;
- воркшопы и конференции для наших преподавателей.
Обсудить подробнее @HR_Nikita
@ TransactionalEventListener
Используйте @TransactionalEventListener для выполнения определенной логики после успешной фиксации транзакции.
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/event/TransactionalEventListener.html
👉@BookJava
Команда Поиска и рекламных технологий Яндекса приглашает на митап для senior бэкенд-разработчиков в Екатеринбурге.
Поговорим про разработку, поиграем в квиз, понетворкаемся и просто хорошо проведем время.
12 декабря, 18:00.
Регистрируйтесь, количество мест в офлайне ограничено!
Советы по Java 💡
Как инициализировать collections или map в Java? Конечно, вы можете использовать, например, статическую инициализацию фабрики (`List.of(...)` или `Map.of(...)`).
Но вы также можете воспользоваться функцией "инициализации двойной скобкой"
👉@BookJava
Шпаргалка по паттернам проектирования
👉@BookJava
👩💻 Какие компетенции отличают востребованных Java-разработчиков?
➡️ Узнайте и освойте его на бесплатном практическом уроке «Разрабатываем appender для Logback».
На вебинаре разберём, как можно сделать самодельный appender для Logback, который будет отправлять логи в TCP-сервер логирования.
Также эксперт подробно ответит на любые возникающие вопросы.
📢📢 Занятие пройдёт 12 декабря в 20:00 мск и будет приурочено к старту курса «Java Developer. Professional». После урока вы сможете продолжить обучение в рассрочку.
👉 Для бесплатного участия и получения записи зарегистрируйтесь прямо сейчас: https://vk.cc/csXyJjРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Модельно-Ориентированная Java, или Навстречу Дизайну ПО
Модельно-ориентированный метод (MDE) широко применяется во многих сферах современной инженерии; в программировании он позволяет разделить деятельность, направленную на создание универсального описания продукта, от деятельности по написанию кода, который бы эту модель воплощал в реальность. На практике, в мире Java эти деятельности по-сути совмещены воедино языком программирования, так как мы определяем интерфейсы на том же языке, на котором потом и пишем реализацию, поэтому грань между моделью и кодом может быть не так очевидна. Однако, она отчетливо проявляется, когда требуется интегрировать нашу программу в работу более сложных систем: например, я бы хотел запускать мою CLI утилиту как сервис, доступ к которому можно было бы получить через любой язык программирования по сокетам, сохранив при этом хороший Dev-X с автозаполнением полей и описанием опций. Сделаем это в 3 этапа под катом: во-первых, сконвертируем существующий Java-класс, который описывает флаги, в модельно-ориентированный XML, затем из него сгенерируем protobuf файлы для бинарного обмена данными и в завершение скомпилируем их для JavaScript и Java, обернув в приличный JSDoc. В конце обсудим все преимущества работы "на модель" и будущее роли дизайна при разработке ПО.
https://habr.com/ru/articles/761414/
👉@BookJava
Расскажите про приведение типов. Что такое понижение и повышение типа?
Java является строго типизированным языком программирования, а это означает, то что каждое выражение и каждая переменная имеет строго определенный тип уже на момент компиляции. Однако определен механизм приведения типов (casting) - способ преобразования значения переменной одного типа в значение другого типа.
В Java существуют несколько разновидностей приведения:
• Тождественное (identity). Преобразование выражения любого типа к точно такому же типу всегда допустимо и происходит автоматически.
• Расширение (повышение, upcasting) примитивного типа (widening primitive). Означает, что осуществляется переход от менее емкого типа к более ёмкому. Например, от типа byte (длина 1 байт) к типу int (длина 4 байта). Такие преобразование безопасны в том смысле, что новый тип всегда гарантировано вмещает в себя все данные, которые хранились в старом типе и таким образом не происходит потери данных. Этот тип приведения всегда допустим и происходит автоматически.
• Сужение (понижение, downcasting) примитивного типа (narrowing primitive). Означает, что переход осуществляется от более емкого типа к менее емкому. При таком преобразовании есть риск потерять данные. Например, если число типа int было больше 127, то при приведении его к byte значения битов старше восьмого будут потеряны. В Java такое преобразование должно совершаться явным образом, при этом все старшие биты, не умещающиеся в новом типе, просто отбрасываются - никакого округления или других действий для получения более корректного результата не производится.
• Расширение объектного типа (widening reference). Означает неявное восходящее приведение типов или переход от более конкретного типа к менее конкретному, т.е. переход от потомка к предку. Разрешено всегда и происходит автоматически.
• Сужение объектного типа (narrowing reference). Означает нисходящее приведение, то есть приведение от предка к потомку (подтипу). Возможно только если исходная переменная является подтипом приводимого типа. При несоответствии типов в момент выполнения выбрасывается исключение ClassCastException. Требует явного указания типа.
• Преобразование к строке (to String). Любой тип может быть приведен к строке, т.е. к экземпляру класса String.
• Запрещенные преобразования (forbidden). Не все приведения между произвольными типами допустимы. Например, к запрещенным преобразованиям относятся приведения от любого ссылочного типа к примитивному и наоборот (кроме преобразования к строке). Кроме того, невозможно привести друг к другу классы, находящиеся на разных ветвях дерева наследования и т.п.
При приведении ссылочных типов с самим объектом ничего не происходит - меняется лишь тип ссылки, через которую происходит обращение к объекту.
Для проверки возможности приведения нужно воспользоваться оператором instanceof:
Parent parent = new Child();
if (parent instanceof Child) {
Child child = (Child) parent;
}
👉@BookJava
Как написать на Java UDP-сервер?
Естественно, сначала необходимо разобраться, что такое UDP. Упрощая, User Datagram Protocol – это альтернатива TCP, когда информацию нужно слать быстро, много, и при этом допустимы потери и дублирование данных. Типичные примеры использования – потоковое видео и аудио, интернет-телефония, торренты.
В Java данные, которые планируется отправить клиентам по протоколу UDP, упаковываются в объект класса DatagramPacket. В виде массива байтов их передают в конструктор.
Для отправки и получения информации используется DatagramSocket. Он похож на ServerSocket, который применяют для создания TCP-сервера. Для приёма сообщений используется блокирующий метод receive, для отправки – send. Примечательно, что оба метода принимают DatagramPacket параметром. В случае receive его байтовый массив заполняется пришедшими данными.
Для реализации клиентской стороны используется тот же самый DatagramSocket. Просто он создается несвязанным (unbound) – в его конструкторе не указывается порт. Адрес и порт, на которые нужно отправить сообщение, устанавливаются через конструктор DatagramPacket.
В Java NIO доступна версия UDP-сокета в виде канала – DatagramChannel.
👉@BookJava
⚡️ Профессия Java-разработчик с нуля и до востребованного специалиста!
Уже 29 декабря стартует новая группа специализации «Java Developer» в OTUS.
👩💻 С нуля до Middle за 15 месяцев!
На онлайн-курсе вы получите:
➡️ Уникальные знания от преподавателей — Senior Java-разработчиков ведущих IT-компаний.
➡️ Практику создания реальных проектов — разработка своего серверного приложения на Java
➡️ Актуальные навыки, необходимые для трудоустройства Middle Java-разработчиком
➡️ Вы освоите инструменты: IntelliJ IDEA, Java Development Kit (JDK), Spring Framework, Hibernate, PostgreSQL, Apache Maven, Gradle, Docker, Kubernetes, Apache Kafka, RabbitMQ, JUnit, Postman, Jira.
👉 Получить специальные условия на курс можно оставив заявку по ссылке: https://vk.cc/csTCqaРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Совет
Если вы случайно уже используете генератор метамодели в своем проекте, вы можете использовать сгенерированные классы модели в атрибуте mappedBy ваших отношений, чтобы обеспечить немного большую типобезопасность.
👉@BookJava
Getting Started With Java Using Eclipse
Автор: Bernhard Steppan (2023)
В первой части книги вы получите базовые знания по Java и Eclipse. В этой части закладываются основы программирования, дается обзор технологии Java и показывается, что особенного в объектно-ориентированном программировании.
Во второй части все вращается вокруг тонкостей языка Java, и именно здесь создаются первые небольшие Java-приложения, которым помогает тонкое сочетание части знаний и практических упражнений.
Технология Java - это и название, и основное направление третьей части, которая также знакомит с правилами, которые необходимо соблюдать при программировании, с тем, что такое библиотеки классов и какими преимуществами они обладают.
Четвертая часть позволяет применить все предыдущие элементы в приложении с графическим интерфейсом пользователя.
Скачать
👉 @java_360
Совет
До Hibernate 6 для правильной настройки требовалось установить правильный dialect для используемой БД. Начиная с версии 6 это больше не требуется. Теперь Hibernate 6 определяет правильный Dialect на основе JDBC URL и JDBC Metadata.
https://docs.jboss.org/hibernate/orm/6.3/javadocs/org/hibernate/cfg/JdbcSettings.html#DIALECT
👉@BookJava
🌲Создайте интерактивную новогоднюю открытку на Java с нуля!
😳 Удивите близких, а заодно прокачайтесь в разработке на бесплатном практическом уроке от OTUS и Александра Фисунова – Senior Kotlin Developer в SSP Software на проекте ВТБ.
В результате урока вы:
✔️ Увидите, как пишется код и создаются программы на Java
✔️ Сможете повторить все шаги и делать подобные открытки на любую тематику
📢📢 Занятие пройдёт 20 декабря в 20:00 мск и будет приурочено к старту курса «Специализация Java-разработчик». На нем вы сможете освоить профессию с нуля до уверенного Middle.
👉 Для бесплатного участия и получения записи урока регистрируйтесь прямо сейчас: https://vk.cc/cta36kРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Из каких основных сущностей состоит Spring-приложение?
Bean – объект бизнес-логики в терминологии Spring Framework.
BeanDefinition – описание того, как создавать бин. Объект хранит его тип, метаинформацию, набор параметров для конструктора.
BeanFactory – главная точка входа в DI-контейнер. Хранит BeanDefinition-ы, умеет создавать по ним экземпляры бинов, или выдавать существующие, в зависимости от скоупа.
BeanPostProcessor – донастраивает только что созданные бины, перед тем как положить их в контейнер. Его методы уже упоминались в публикации про жизненный цикл. Типичное место, чтобы оборачивать бины в прокси. Также с помощью такого пост-процессора внедряются @Autowired-зависимости. Пост-процессоры бинов живут внутри экземпляра BeanFactory.
BeanFactoryPostProcessor – тоже пост-обработчик, но для определений бинов (BeanDefinition). Обычно используется для модификации параметров или класса, из которых будут строиться бины.
Для создания определений бинов в основном применяются классы и интерфейсы *BeanDefinitionReader. Некоторые из них вызываются прямо из контекста приложения, другие реализуют BeanFactoryPostProcessor. Один такой пост-процессор, например, отвечает за добавление определений бинов по аннотациям @Component и @Configuration.
Реализация интерфейса ApplicationContext – основное хранилище конфигурации Spring-приложения (или его части). Контекст неизменяем, но может быть целиком перезагружен. Xml-файл конфигурации на старте приложения превращается в объект *XmlApplicationContext. Для конфигурации на аннотациях создастся AnnotationConfigApplicationContext. Контекст выполняет четыре разных обязанности:
1. DI-контейнер. ApplicationContext функционирует как специальная реализация BeanFactory. Он также производит и хранит бины, но, в отличие от обычных фабрик, контексты в приложении составляют иерархию. Определения бинов из дочерних контекстов перекрывают родительские.
2. Загрузка ресурсов. Под интерфейсом ResourceLoader контекст занимается загрузкой в память приложения файлов, как из classpath, так и из остальной файловой системы.
3. Публикация событий приложения. Контекст распространяет в приложении «события» – наследники ApplicationEvent. Любой бин, которому нужно получать уведомления об этих событиях, просто реализует интерфейс ApplicationListener. Таким образом реализуется паттерн наблюдатель.
4. Интернационализация. По коду, набору аргументов и локали, через интерфейс контекста MessageSource можно получать локализованные текстовые сообщения для пользователей.
👉@BookJava
В каких случаях разумно использовать массив, а не ArrayList?
Использование обычных массивов вместо ArrayList имеет смысл в следующих ситуациях:
— Нужен предсказуемый и строгий контроль размера массива. Массивы имеют фиксированный размер, в отличие от ArrayList.
— Требуется максимальная производительность при работе с примитивными типами данных (int, double и т. д.). Доступ к элементам массива быстрее, чем в ArrayList.
— Нужно создать структуру данных, которая должна быть неизменяемой.
— Требуется тесная интеграция с существующим кодом на основе обычных массивов. Переход на ArrayList может потребовать значительный рефакторинг.
— Не нужны динамические функции ArrayList, такие как автоматическое изменение размера, методы вставки/удаления и т. д.
— Ограничения на использование дополнительной памяти. Массивы компактнее ArrayList за счет фиксированного размера.
👉@BookJava
Старт подготовительного курса по Java-разработке.
⏰ Когда: уже 12 декабря.
Даем: 62 урока с практикой в браузере, 3 онлайн вебинара и 1 сессию лайвкодинга с практикующим разработчиком.
Получаем: крепкие знания базы языка, умение понимать код и первую программу на Java, написанную вместе с наставником.
Всего 990 ₽ и ваше жгучее желание начать. Приходите с любым бэкграундом: нам не важны возраст, пол, образование и текущая профессия.
Запишитесь прямо сейчас!
Реклама. АНПОО "ХЕКСЛЕТ КОЛЛЕДЖ". ИНН 7839056670.
Немного о гигиене Java кода
Во время код-ревью или работы над новым проектом может раздражать многое: стиль, подходы, качество. Но больше всего расстраивает банальный недостаток гигиены кода. В связи с регулярностью проблемы хочется на неё обратить внимание и напомнить, как гигиену поддерживать.
Разумеется, все мы люди, живущие в несовершенном мире. Поэтому последнее, что мне хочется, это журить и так стеснённых обстоятельствами программистов. Тем более не хочется почём зря ругать разработчиков Open Source проектов. Но сейчас я предлагаю побыть перфекционистами и вспомнить все те случаи, когда с подобным кодом приходилось иметь дело вам.
https://habr.com/ru/companies/pvs-studio/articles/779300/
👉@BookJava
📣 Новосибирск, готовы проверить свои знания в сфере IT?
Будет интересно как новичкам, так и профессионалам в области информационных технологий.
Обещаем много нетворкинга и интересных заданий: 5 раундов по 10 вопросов от простого к сложному.
Приходите сами и приглашайте коллег! ☺️
Если вы участвуете командой, регистрацию нужно пройти всем участникам команды. Если команды у вас нет — не страшно, мы найдём её для вас!
Максимальное количество участников команды — 10 человек.
Формат: очный
📅 13 декабря
⏰ 18:30
📍 Новосибирск, ул. Коммунистическая 14, лофт «Food Factory»
Зарегистрироваться ⚡️
Распространенные ошибки начинающих Java-разработчиков при работе с Hibernate
Hibernate - это мощный фреймворк объектно-реляционного отображения (ORM) для Java, который упрощает взаимодействие с базами данных. Это универсальный инструмент, но, как и любая другая технология, он может быть сложным, особенно для начинающих Java-разработчиков. В этой статье мы рассмотрим некоторые распространенные ошибки, которые часто допускают начинающие разработчики при работе с Hibernate, и узнаем, как их избежать.
https://dev.to/jackynote/common-mistakes-of-junior-java-developers-when-working-with-hibernate-3dl8
👉@BookJava
Как прочитать InputStream в строку?
Обычно строковые данные извне попадают в программу именно в виде потока. Потоком читаются файлы, сетевые данные из сокета, пользовательский ввод. Если есть такая возможность, лучше избегать сохранения потоковых данных в память, и обрабатывать их также в потоке. Например, когда из большого xml-файла необходимо достать один определенный элемент, имеет смысл выбрать потоковый xml-парсер.
В общем виде все решения выглядят так. Заводится буфер – массив символов. Поток направляется в этот буфер. По заполнению данные из массива присоединяются в хвост строки-результата.
Простой способ – использовать трюк со сканером. Вообще класс Scanner читает из потока подстроки, разделенные указанным символом. Когда нужно прочитать всю строку сразу, в качестве разделителя устанавливается "\\A" – спецсимвол «начало строки». Это решение просто в реализации, но имеет проблемы. Размер внутреннего буфера фиксирован (1024 символа), а логика поиска разделителя плохо влияет на производительность.
Хорошее решение для продакшна – читать в собственный массив-буфер непосредственно методом InputStream.read, либо обернув поток в InputStreamReader. Данные из буфера затем переправляются в строку через StringBuilder или ByteArrayOutputStream. За готовой реализацией можно обратиться в библиотеки Apache Commons IO и Google Guava. Полный код реализации и сравнение производительности описаны на stackoverflow.
На интервью этот вопрос часто возникает как часть практической задачи, для консольного ввода-вывода. Поэтому, если вы идете на собеседование со своим компьютером, и неуверенно владеете классами работы с потоками, стоит заранее подготовить шпаргалку с кодом.
👉@BookJava
Не трогайте, это на Новый год!
Профессия «Java-разработчик»
🎁 🎊 Получите скидку до 30 000 р. и кэшбек на карту до 25 000 р. при успешном прохождении обучения!
Освойте язык крупного бизнеса и финансовых технологий и научитесь разрабатывать веб-приложения на фреймворке Spring.
Уже во время обучения вы вступите в программу «Карьерный трек», чтобы найти свою первую работу в IT.
Вы научитесь подбирать правильные структуры для хранения и обработки данных, познакомитесь с автоматизированным тестированием и напишите свои первые модульные тесты.
📌 Пройдите 5 бесплатных уроков и поймите, подходит ли вам профессия!
Реклама. АНПОО "ХЕКСЛЕТ КОЛЛЕДЖ". ИНН 7839056670.
Какие подходы применять в разработке микросервисов?
Узнайте на бесплатном практическом уроке «Основные паттерны использования GraphQL и gRPC» от OTUS. На вебинаре:
- рассмотрим основные паттерны и подходы к использованию GraphQL и gRPC;
- рассмотрим паттерн запрос-ответ;
- обсудим различия между GraphQL и gRPC и их преимущества и недостатки в различных сценариях;
- изучим паттерны запроса типа «одно на много» и «много на много», а также подходы к управлению версиями.
Занятие пройдёт 12 декабря в 17:00 мск и будет будет приурочено к старту курса «Microservice Architecture». После урока вы сможете продолжить обучение в рассрочку.
Для бесплатного участия и получения записи зарегистрируйтесь прямо сейчас: https://vk.cc/csVc8i
Совет
Если вы хотите узнать, когда произойдет совпадение заданного выражения cron, вы можете использовать класс Spring CronExpression.
Он принимает выражение cron expr и с помощью метода next() определяет следующее совпадение после заданного момента времени.
👉@BookJava
Как сгенерировать уникальный идентификатор?
UUID (universally unique identifier) – стандарт, описывающий способ создания правильных уникальных идентификаторов. Значения генерируются на основании таких источников информации, как системное время и MAC-адрес, за счет чего они остаются с достаточной вероятностью уникальными, даже будучи сгенерированными независимо. Можно с разных машин добавлять в базу данных записи с UUID-идентификаторами, и не бояться конфликта.
UUID бывает пяти разных версий, версия определяет способ создания. Формат остается одинаковым: это строковое шестнадцатеричное представление 128-битного целого числа (два long-а), разделенное дефисами на группы фиксированного размера:
25b32eaa-3017-4ad7-9224-383f6bfa5212
В Java уникальный идентификатор представляется иммутабельным классом UUID из пакета java.util. В нём нет сложной логики, только getter-ы для описанных в стандарте составных частей, конструктор и статические фабричные методы.
Единственный конструктор позволяет создать экземпляр по двум указанным половинам значения (старшие и младшие 64 бита в виде long параметров). nameUUIDFromBytes строит из заданного массива байтов UUID версии 3. randomUUID генерирует случайный уникальный идентификатор версии 4, с применением SecureRandom.
👉@BookJava
👩💻Что должен знать востребованный Scala-разработчик?
Расскажем на бесплатном практическом уроке «Type classes в Scala» от OTUS и Алексея Воронца – руководителя разработки в NAUMEN.
✅На вебинаре:
— разберем type class паттерн в Scala;
— познакомимся с мотивацией его возникновения и задачами, которые он должен решать;
— сформулируем и разберем основные компоненты;
— решим ряд задач с использованием type class паттерна для закрепления на практике.
Занятие пройдёт 14 декабря в 20:00 мск и будет приурочено к старту курса «Scala-разработчик». После урока вы сможете продолжить обучение на специальных условиях.
👉 Для бесплатного участия и получения записи регистрируйтесь прямо сейчас: регистрацияРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT.
/channel/phis_mat Обучающие видео, книги по Физике и Математике
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Чат программистов📌
/channel/developers_ru
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
Excel лайфхак📌
/channel/Excel_lifehack
⚡️ Путь сильнейших джавистов ждет тебя!
Пройди тест по Java - проверь, готов ли ты
👩💻 Сможешь сдать — пройдёшь на продвинутый курс "Java Developer. Professional" от OTUS по специальной цене.
За 6 месяцев обучения:
- Научишься создавать современные java-приложения
- Поймешь основы функционирования JVM (сборка мусора, byteCode)
- Освоишь приемы применения многопоточности
- Напишешь выпускной проект на любую тему под наставничеством преподавателя
🎫Курс можно приобрести в рассрочку
👉 Пройти тест: https://vk.cc/csMbebРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru