Библиотека джависта | Java, Spring, Maven, Hibernate
24.9K subscribers
1.86K photos
38 videos
42 files
2.64K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
👔 Java Developer
⛳️ SimpleTextin
💼🥁 Удаленка
💵 3000 — 4000$
SimpleTexting расширяет команду разработки, мы ищем Java программиста cо знанием noSQL. Предстоит активная разработка новой функциональности и технические задачи по развитию архитектуры платформы, код ревью, участие в поддержке продакшн серверов (L3).

Мы предлагаем работу в международной продуктовой компании над успешным и постоянно развивающимся проектом, которому более 10 лет. Техническая часть команды состоит из 45 инженеров, работающих удаленно. У нас Kanban, ежедневный выпуск релизов, высокие требования к качеству кода и непрерывное улучшение процесса разработки. Мы развиваем собственный продукт, поэтому решения принимаются оперативно внутри команды. Мы ценим баланс рабочего и личного времени — в компании действует гибкая политика отпусков.

SimpleTexting — одна из ведущих веб-платформ для SMS-маркетинга. Тысячи организаций в Северной Америке используют SimpleTexting для связи со своей аудиторией. Нашими клиентами являются компании из списка Fortune 500, малые предприятия, университеты, медицинские центры и другие организации.

Мы ожидаем от кандидата:

Высшее техническое образование и 4+ лет опыт коммерческой разработки на Java
Java 8+ (у нас используется Java 15), Spring Boot
Git, Maven, Unix
Большим плюсом будет опыт работы с MongoDB

Условия:

Удаленная работа на полный рабочий день
Команда разработки работает по московскому времени, но необходима доступность в вечернее время. Звонки с коллегами из США обычно проходят в 16-18 Мск.
Техническая поддержка продакшн серверов (L3) выпадает на рабочий день раз в две недели и требует доступность с 17 по 23 Мск.
Гибкая политика оплачиваемых отпусков: нет ограничений по количеству отпускных дней в году, но требуется заблаговременное согласование в команде
Ежегодный пересмотр заработной платы в декабре
Бесплатное обучение английскому языку за счет компании


Пишите и присылайте свои резюме @SvetlanaKonovalovaST
Вокруг поиска первой работы в IT много вопросов и проблем: большой конкурс на позицию junior, провалы на собеседованиях, глобальная незаинтересованность рынка в джунах, особенно если им больше 30. Мы, издание «Библиотека программиста», решили провести опрос среди всех, кто когда-либо искал первую работу в IT-сфере, чтобы понять кто, каким образом и с какой эффективностью (не) справляется с этой задачей. Опрос займет около 3 минут, результаты опубликуем на сайте proglib.io ориентировочно 19 сентября.

https://forms.gle/kuFeTtoHhKQW2Ekc8
Интерфейс RequestDispatcher используется для передачи запроса другому ресурсу, при этом существует возможность добавления данных, полученных из этого ресурса к собственному ответу сервлета. Так же этот интерфейс используется для внутренней коммуникации между сервлетами в одном контексте.

В интерфейсе объявлено два метода:

☕️ void forward(ServletRequest var1, ServletResponse var2) — передает запрос из сервлета к другому ресурсу (сервлету, JSP или HTML файлу) на сервере.
☕️ void include(ServletRequest var1, ServletResponse var2) — включает контент ресурса (сервлет, JSP или HTML страница) в ответ.
Доступ к интерфейсу можно получить с помощью метода интерфейса ServletContext - RequestDispatcher getRequestDispatcher(String path), где путь, начинающийся с /, интерпретируется относительно текущего корневого пути контекста.
Взаимная блокировка (deadlock) - явление, при котором все потоки находятся в режиме ожидания. Происходит, когда достигаются состояния:

1. взаимного исключения: по крайней мере один ресурс занят в режиме неделимости и, следовательно, только один поток может использовать ресурс в любой данный момент времени.
2. удержания и ожидания: поток удерживает как минимум один ресурс и запрашивает дополнительные ресурсов, которые удерживаются другими потоками.
3. отсутствия предочистки: операционная система не переназначивает ресурсы: если они уже заняты, они должны отдаваться удерживающим потокам сразу же.
4. цикличного ожидания: поток ждёт освобождения ресурса, другим потоком, который в свою очередь ждёт освобождения ресурса заблокированного первым потоком.

Простейший способ избежать взаимной блокировки – не допускать цикличного ожидания. Этого можно достичь, получая мониторы разделяемых ресурсов в определённом порядке и освобождая их в обратном порядке.
Как проверить, удерживает ли поток монитор определённого ресурса?

Метод Thread.holdsLock(lock) возвращает true, когда текущий поток удерживает монитор у определённого объекта.
#вопросы_с_собеседований
Для чего используются ключевые слова volatile, synchronized, transient, native?
volatile - этот модификатор вынуждает потоки отключить оптимизацию доступа и использовать единственный экземпляр переменной. Если переменная примитивного типа – этого будет достаточно для обеспечения потокобезопасности. Если же переменная является ссылкой на объект – синхронизировано будет исключительно значение этой ссылки. Все же данные, содержащиеся в объекте, синхронизированы не будут!

synchronized - это зарезервированное слово позволяет добиваться синхронизации в помеченных им методах или блоках кода.

Ключевые слова transient и native к многопоточности никакого отношения не имеют, первое используется для указания полей класса, которые не нужно сериализовать, а второе - сигнализирует о том, что метод реализован в платформо-зависимом коде.
#вопросы_с_собеседований
В чём заключаются различия между java.util.concurrent.Atomic.compareAndSwap() и java.util.concurrent.Atomic.weakCompareAndSwap().
weakCompareAndSwap() не создает memory barrier и не дает гарантии happens-before;
weakCompareAndSwap() сильно зависит от кэша/CPU, и может возвращать false без видимых причин;
weakCompareAndSwap(), более легкая, но поддерживаемая далеко не всеми архитектурами и не всегда эффективная операция.
Потоки-демоны работают в фоновом режиме вместе с программой, но не являются неотъемлемой частью программы. Если какой-либо процесс может выполняться на фоне работы основных потоков выполнения и его деятельность заключается в обслуживании основных потоков приложения, то такой процесс может быть запущен как поток-демон с помощью метода setDaemon(boolean value), вызванного у потока до его запуска. Метод boolean isDaemon() позволяет определить, является ли указанный поток демоном или нет. Базовое свойство потоков-демонов заключается в возможности основного потока приложения завершить выполнение потока-демона (в отличие от обычных потоков) с окончанием кода метода main(), не обращая внимания на то, что поток-демон еще работает.
👎 6 признаков того, что вы плохой программист

В большинстве случаев мы знаем, что нам следует делать, но не делаем. Мы думаем, что сделаем это позже, но «позже» никогда не наступает. Это первый шаг к тому, чтобы стать плохим программистом.

https://proglib.io/sh/3QAMoJsY6h
☕️ Основы Java за 30 минут: самоучитель для начинающих

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

https://proglib.io/sh/69n5jeLJ8A
Java All-in-One For Dummies (2020)
Автор: Doug Lowe
Количество страниц: 960

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

Скачать книгу
В чём различия между volatile и Atomic переменными?

volatile принуждает использовать единственный экземпляр переменной, но не гарантирует атомарность. Например, операция count++ не станет атомарной просто потому, что count объявлена volatile. C другой стороны class AtomicInteger предоставляет атомарный метод для выполнения таких комплексных операций атомарно, например getAndIncrement() – атомарная замена оператора инкремента, его можно использовать, чтобы атомарно увеличить текущее значение на один. Похожим образом сконструированы атомарные версии и для других типов данных.
Начинай с PMI.
Программа развития в IT в международной компании!

За полтора года на программе IT Inkompass ты изучишь ключевые кейсы в анализе данных бизнес-процессов и настройке дашбордов . Под руководством ментора ты будешь заниматься сбором и обработкой данных, разработкой функций и упаковкой их в микросервисы. Успей подать заявку – https://vk.cc/c5O1Jy

Что мы предлагаем?
· заработная плата — 80 000 рублей, ДМС и компенсация питания;
· длительность программы развития – 18 месяцев;
· оформление в штат компании сразу на старте программы;
· возможность работать как в классном современном офисе, так и удаленно.

Спеши подать заявку: https://vk.cc/c5O1Jy
Что произойдет в результате компиляции кода?
Рассказываем, как пройти один курс и зарабатывать под 100 000 ₽!

Сейчас в мире много возможностей и интересных, высокооплачиваемых профессий, в некоторых даже новички удаленно зарабатывают от 95 000₽, а после двух лет работы — до 340 000 ₽.
Одна из таких профессий — Java-разработчик!

Стать таким специалистом можно, например, в Skypro. Там после обучения выдают диплом государственного образца и помогают с трудоустройством: подбирают вакансии, натаскивают на собеседования с HR, подсказывают с резюме. Бонусом каждый выпускник забирает с собой портфолио с двумя готовыми проектами.
Вы сможете создавать собственные финансовые приложения, социальные сети и сайты.
Переходи по ссылке с уникальным предложением в честь старта потока и освой востребованную профессию с дополнительной скидкой 10% по промокоду «УЧИСЬ» - https://go.skyeng.ru/javaproglib_skypro