Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
📚 ТОП-10 книг по Java в 2024 году
Разбираемся, какие книги по Java стоит читать на русском языке, а какие — только в оригинале. Для удобства книги отсортированы в порядке возрастания сложности.
Читать статью
#литература
Разбираемся, какие книги по Java стоит читать на русском языке, а какие — только в оригинале. Для удобства книги отсортированы в порядке возрастания сложности.
Читать статью
#литература
newCachedThreadPool
newCachedThreadPool — это метод класса Executors, который создает пул потоков, обладающий следующими характеристиками:
— Создание новых потоков по мере необходимости: пул создает новые потоки для выполнения задач, когда они поступают.
— Повторное использование существующих потоков: если в пуле есть неактивные потоки, они будут повторно использованы для выполнения новых задач.
— Бесконечное количество потоков: пул не имеет ограничений на количество потоков, которые он может создать.
— Удаление неактивных потоков: пул автоматически удаляет неактивные потоки через 60 секунд.
newCachedThreadPool — это метод класса Executors, который создает пул потоков, обладающий следующими характеристиками:
— Создание новых потоков по мере необходимости: пул создает новые потоки для выполнения задач, когда они поступают.
— Повторное использование существующих потоков: если в пуле есть неактивные потоки, они будут повторно использованы для выполнения новых задач.
— Бесконечное количество потоков: пул не имеет ограничений на количество потоков, которые он может создать.
— Удаление неактивных потоков: пул автоматически удаляет неактивные потоки через 60 секунд.
PreferencesFactory
Интерфейс PreferencesFactory используется для создания объектов Preferences.
Он предоставляет два метода:
systemRoot(): Возвращает корневой узел предпочтений системы.
userRoot(): Возвращает корневой узел предпочтений пользователя, вызвавшего метод.
Поставщики новых реализаций Preferences должны предоставлять соответствующие реализации PreferencesFactory, чтобы их можно было установить вместо реализации по умолчанию, зависящей от платформы.
Интерфейс PreferencesFactory используется для создания объектов Preferences.
Он предоставляет два метода:
systemRoot(): Возвращает корневой узел предпочтений системы.
userRoot(): Возвращает корневой узел предпочтений пользователя, вызвавшего метод.
Поставщики новых реализаций Preferences должны предоставлять соответствующие реализации PreferencesFactory, чтобы их можно было установить вместо реализации по умолчанию, зависящей от платформы.
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Класс Calendar
Класс Calendar представляет собой абстрактный класс, который предоставляет методы для преобразования между конкретным моментом времени и набором полей календаря, таких как год, месяц, день, часы, минуты, секунды и т. д., а также для манипулирования полями календаря, такими как получение даты следующей недели.
Момент времени можно представить в виде значения в миллисекундах, которое является смещением от эпохи, 1 января 1970 года 00:00:00.000 GMT (григорианский). Класс также предоставляет дополнительные поля и методы для реализации конкретной системы календаря за пределами пакета. Эти поля и методы определены как protected.
Класс Calendar представляет собой абстрактный класс, который предоставляет методы для преобразования между конкретным моментом времени и набором полей календаря, таких как год, месяц, день, часы, минуты, секунды и т. д., а также для манипулирования полями календаря, такими как получение даты следующей недели.
Момент времени можно представить в виде значения в миллисекундах, которое является смещением от эпохи, 1 января 1970 года 00:00:00.000 GMT (григорианский). Класс также предоставляет дополнительные поля и методы для реализации конкретной системы календаря за пределами пакета. Эти поля и методы определены как protected.
unmodifiableMap
UnmodifiableMap используется для создания неизменяемого представления отображения, это позволяет предоставить доступ к отображению, не давая возможности изменить его.
Как видно из примера, при попытке изменить неизменяемое отображение unmodifiableMap выбрасывается исключение UnsupportedOperationException. Это гарантирует, что исходное отображение не будет случайно изменено.
UnmodifiableMap используется для создания неизменяемого представления отображения, это позволяет предоставить доступ к отображению, не давая возможности изменить его.
Как видно из примера, при попытке изменить неизменяемое отображение unmodifiableMap выбрасывается исключение UnsupportedOperationException. Это гарантирует, что исходное отображение не будет случайно изменено.
FileChannel
FileChannel используется для работы с файлами на низкоуровневом вводе-выводе.
Основные возможности класса FileChannel:
— Чтение данных из файла и запись данных в файл.
— Работа с файлом по смещениям. Можно получить текущее смещение в файле, переместить указатель чтения/записи в нужное смещение.
— Маппинг файлов в память. Файл можно отобразить в память и работать с его содержимым как с массивом байтов.
— Блокировка частей файла. Позволяет защитить критические участки файла от одновременной записи.
— Асинхронная работа с файлами.
FileChannel эффективнее потокового ввода-вывода, т. к. избавляет от накладных расходов на создание объектов и буферизацию.
Используется в приложениях, где нужна высокая производительность работы с файлами.
FileChannel используется для работы с файлами на низкоуровневом вводе-выводе.
Основные возможности класса FileChannel:
— Чтение данных из файла и запись данных в файл.
— Работа с файлом по смещениям. Можно получить текущее смещение в файле, переместить указатель чтения/записи в нужное смещение.
— Маппинг файлов в память. Файл можно отобразить в память и работать с его содержимым как с массивом байтов.
— Блокировка частей файла. Позволяет защитить критические участки файла от одновременной записи.
— Асинхронная работа с файлами.
FileChannel эффективнее потокового ввода-вывода, т. к. избавляет от накладных расходов на создание объектов и буферизацию.
Используется в приложениях, где нужна высокая производительность работы с файлами.
DelayQueue
DelayQueue — это очередь, которая хранит элементы в порядке их задержки. Элементы в очереди извлекаются только после истечения их задержки.
DelayQueue реализует интерфейс BlockingQueue, поэтому элементы могут извлекаться из нее только блокирующими методами take() или poll(long timeout, TimeUnit unit).
Элементы DelayQueue должны реализовывать интерфейс Delayed. Интерфейс Delayed определяет два метода:
getDelay(): возвращает оставшуюся задержку элемента в миллисекундах.
isExpired(): возвращает true, если задержка элемента истекла.
DelayQueue — это очередь, которая хранит элементы в порядке их задержки. Элементы в очереди извлекаются только после истечения их задержки.
DelayQueue реализует интерфейс BlockingQueue, поэтому элементы могут извлекаться из нее только блокирующими методами take() или poll(long timeout, TimeUnit unit).
Элементы DelayQueue должны реализовывать интерфейс Delayed. Интерфейс Delayed определяет два метода:
getDelay(): возвращает оставшуюся задержку элемента в миллисекундах.
isExpired(): возвращает true, если задержка элемента истекла.
Что выведет эта программа?
Ответ:
Программа напечатает «num1 == num2». Если мы сравниваем две ссылки на объекты с помощью ==, значение всегда будет «false». Но в этом примере переменные num1 и num2 автоупаковываются (autoboxing) из-за Integer-кэширования. Вот почему num1 == num2 возвращает значение «true». Не забудьте, что Integer-кэширование актуально только для значений от -128 до 127.
Ответ:
Программа напечатает «num1 == num2». Если мы сравниваем две ссылки на объекты с помощью ==, значение всегда будет «false». Но в этом примере переменные num1 и num2 автоупаковываются (autoboxing) из-за Integer-кэширования. Вот почему num1 == num2 возвращает значение «true». Не забудьте, что Integer-кэширование актуально только для значений от -128 до 127.
Даны 3 потока Т1, Т2 и Т3. Как реализовать выполнение в последовательности Т1, Т2, Т3?
Такой последовательности выполнения можно достичь многими способами, например просто воспользоваться методом join(), чтобы запустить поток в момент, когда другой уже закончит своё выполнение. Для реализации заданной последовательности, нужно запустить последний поток первым, и затем вызывать метод join() в обратном порядке, то есть Т3 вызывает Т2.join, а Т2 вызывает Т1.join, таким образом Т1 закончит выполнение первым, а Т3 последним.
Такой последовательности выполнения можно достичь многими способами, например просто воспользоваться методом join(), чтобы запустить поток в момент, когда другой уже закончит своё выполнение. Для реализации заданной последовательности, нужно запустить последний поток первым, и затем вызывать метод join() в обратном порядке, то есть Т3 вызывает Т2.join, а Т2 вызывает Т1.join, таким образом Т1 закончит выполнение первым, а Т3 последним.
ForkJoinPool.ManagedBlocker
ForkJoinPool.ManagedBlocker является интерфейсом в Java, который предоставляет механизм для блокировки потока внутри фреймворка ForkJoinPool. ForkJoinPool — это фреймворк параллельного выполнения введенный в Java 7.
Интерфейс ManagedBlocker предоставляет метод boolean block() и используется для реализации пользовательских операций, которые могут вызвать блокировку потока. Этот интерфейс обычно используется в ситуациях, когда задача внутри ForkJoinPool ожидает результат выполнения другой задачи, но не хочет приводить к блокировке потока.
ForkJoinPool.ManagedBlocker является интерфейсом в Java, который предоставляет механизм для блокировки потока внутри фреймворка ForkJoinPool. ForkJoinPool — это фреймворк параллельного выполнения введенный в Java 7.
Интерфейс ManagedBlocker предоставляет метод boolean block() и используется для реализации пользовательских операций, которые могут вызвать блокировку потока. Этот интерфейс обычно используется в ситуациях, когда задача внутри ForkJoinPool ожидает результат выполнения другой задачи, но не хочет приводить к блокировке потока.
Checked exceptions
Checked exceptions — это исключения, которые должны быть обработаны или объявлены в сигнатуре метода при помощи throws ключевого слова. Они обычно представляют собой ситуации, которые программист может предвидеть и обработать. Примеры таких исключений включают: IOException, SQLException, FileNotFoundException.
Если вы вызываете метод, который объявляет checked exception, вы должны либо обработать это исключение с помощью конструкции try-catch, либо продолжить передачу исключения вверх по стеку вызовов.
Checked exceptions — это исключения, которые должны быть обработаны или объявлены в сигнатуре метода при помощи throws ключевого слова. Они обычно представляют собой ситуации, которые программист может предвидеть и обработать. Примеры таких исключений включают: IOException, SQLException, FileNotFoundException.
Если вы вызываете метод, который объявляет checked exception, вы должны либо обработать это исключение с помощью конструкции try-catch, либо продолжить передачу исключения вверх по стеку вызовов.
Библиотека Apache Commons BeanUtils
Apache Commons BeanUtils — это набор утилит для работы с Java-бинами в проектах на Java. Java-бин — это простой класс Java, который следует определенным соглашениям:
Он имеет поля (атрибуты) для хранения данных.
Он предоставляет методы доступа (геттеры и сеттеры) для чтения и записи значений этих полей.
Обычно он имеет пустой конструктор по умолчанию.
Библиотека BeanUtils упрощает работу с такими классами, избавляя вас от необходимости вручную вызывать методы доступа.
Apache Commons BeanUtils — это набор утилит для работы с Java-бинами в проектах на Java. Java-бин — это простой класс Java, который следует определенным соглашениям:
Он имеет поля (атрибуты) для хранения данных.
Он предоставляет методы доступа (геттеры и сеттеры) для чтения и записи значений этих полей.
Обычно он имеет пустой конструктор по умолчанию.
Библиотека BeanUtils упрощает работу с такими классами, избавляя вас от необходимости вручную вызывать методы доступа.
Алгоритм Кнута — Морриса — Пратта
Алгоритм КМП осуществляет поиск текста по заданному шаблону. В этом поиске сначала компилируется заданный шаблон. Компилируя шаблон, мы пытаемся найти префикс и суффикс строки шаблона. Это поможет в случае несоответствия — не придётся искать следующее совпадение с начального индекса.
Вместо этого мы пропускаем часть текстовой строки, которую уже сравнили, и начинаем сравнивать следующую. Необходимая часть определяется по префиксу и суффиксу, поэтому известно, какая часть уже прошла проверку и может быть безопасно пропущена.
Алгоритм КМП осуществляет поиск текста по заданному шаблону. В этом поиске сначала компилируется заданный шаблон. Компилируя шаблон, мы пытаемся найти префикс и суффикс строки шаблона. Это поможет в случае несоответствия — не придётся искать следующее совпадение с начального индекса.
Вместо этого мы пропускаем часть текстовой строки, которую уже сравнили, и начинаем сравнивать следующую. Необходимая часть определяется по префиксу и суффиксу, поэтому известно, какая часть уже прошла проверку и может быть безопасно пропущена.