#вопросы_с_собеседований
Что произойдёт, если в блоке инициализации возникнет исключительная ситуация?
Что произойдёт, если в блоке инициализации возникнет исключительная ситуация?
Библиотека джависта | Java, Spring, Maven, Hibernate
#вопросы_с_собеседований Что произойдёт, если в блоке инициализации возникнет исключительная ситуация?
Для нестатических блоков инициализации, если выбрасывание исключения прописано явным образом требуется, чтобы объявления этих исключений были перечислены в throws всех конструкторов класса. Иначе будет ошибка компиляции. Для статического блока выбрасывание исключения в явном виде, приводит к ошибке компиляции.
В остальных случаях, взаимодействие с исключениями будет проходить так же, как и в любом другом месте. Класс не будет инициализирован, если ошибка происходит в статическом блоке и объект класса не будет создан, если ошибка возникает в нестатическом блоке.
В остальных случаях, взаимодействие с исключениями будет проходить так же, как и в любом другом месте. Класс не будет инициализирован, если ошибка происходит в статическом блоке и объект класса не будет создан, если ошибка возникает в нестатическом блоке.
#вопросы_с_собеседований
Что такое «индексы»? Для чего их используют? В чём заключаются их преимущества и недостатки?
Что такое «индексы»? Для чего их используют? В чём заключаются их преимущества и недостатки?
Индекс (index) — объект базы данных, создаваемый с целью повышения производительности выборки данных.
Наборы данных могут иметь большое количество записей, которые хранятся в произвольном порядке, и их поиск по заданному критерию путём последовательного просмотра набора данных запись за записью может занимать много времени. Индекс формируется из значений одного или нескольких полей и указателей на соответствующие записи набора данных, - таким образом, достигается значительный прирост скорости выборки из этих данных.
Наборы данных могут иметь большое количество записей, которые хранятся в произвольном порядке, и их поиск по заданному критерию путём последовательного просмотра набора данных запись за записью может занимать много времени. Индекс формируется из значений одного или нескольких полей и указателей на соответствующие записи набора данных, - таким образом, достигается значительный прирост скорости выборки из этих данных.
#вопросы_с_собеседований
Какие разновидности сборщиков мусора реализованы в виртуальной машине HotSpot?
Какие разновидности сборщиков мусора реализованы в виртуальной машине HotSpot?
Java HotSpot VM предоставляет разработчикам на выбор четыре различных сборщика мусора:
☕️ Serial (последовательный) — самый простой вариант для приложений с небольшим объемом данных и не требовательных к задержкам. На данный момент используется сравнительно редко, но на слабых компьютерах может быть выбран виртуальной машиной в качестве сборщика по умолчанию. Использование Serial GC включается опцией -XX:+UseSerialGC.
☕️ Parallel (параллельный) — наследует подходы к сборке от последовательного сборщика, но добавляет параллелизм в некоторые операции, а также возможности по автоматической подстройке под требуемые параметры производительности. Параллельный сборщик включается опцией -XX:+UseParallelGC.
☕️ Concurrent Mark Sweep (CMS) — нацелен на снижение максимальных задержек путем выполнения части работ по сборке мусора параллельно с основными потоками приложения. Подходит для работы с относительно большими объемами данных в памяти. Использование CMS GC включается опцией -XX:+UseConcMarkSweepGC.
☕️ Garbage-First (G1) — создан для замены CMS, особенно в серверных приложениях, работающих на многопроцессорных серверах и оперирующих большими объемами данных. G1 включается опцией Java -XX:+UseG1GC.
☕️ Serial (последовательный) — самый простой вариант для приложений с небольшим объемом данных и не требовательных к задержкам. На данный момент используется сравнительно редко, но на слабых компьютерах может быть выбран виртуальной машиной в качестве сборщика по умолчанию. Использование Serial GC включается опцией -XX:+UseSerialGC.
☕️ Parallel (параллельный) — наследует подходы к сборке от последовательного сборщика, но добавляет параллелизм в некоторые операции, а также возможности по автоматической подстройке под требуемые параметры производительности. Параллельный сборщик включается опцией -XX:+UseParallelGC.
☕️ Concurrent Mark Sweep (CMS) — нацелен на снижение максимальных задержек путем выполнения части работ по сборке мусора параллельно с основными потоками приложения. Подходит для работы с относительно большими объемами данных в памяти. Использование CMS GC включается опцией -XX:+UseConcMarkSweepGC.
☕️ Garbage-First (G1) — создан для замены CMS, особенно в серверных приложениях, работающих на многопроцессорных серверах и оперирующих большими объемами данных. G1 включается опцией Java -XX:+UseG1GC.
Beginning Programming with Java For Dummies (2021)
Автор: Barry Burd
Количество страниц: 560
Если вы хотите программировать на Java, книга научит вас созданию программ, способам решения стандартных задач и многому другому. Независимо от того, работаете ли вы уже или только начинаете карьеру, эта книга может стать ресурсом, к которому вы будете обращаться снова и снова, совершенствуя свое понимание нюансов этого популярного языка программирования.
Скачать книгу
Автор: Barry Burd
Количество страниц: 560
Если вы хотите программировать на Java, книга научит вас созданию программ, способам решения стандартных задач и многому другому. Независимо от того, работаете ли вы уже или только начинаете карьеру, эта книга может стать ресурсом, к которому вы будете обращаться снова и снова, совершенствуя свое понимание нюансов этого популярного языка программирования.
Скачать книгу
Telegram
Книги для программистов (reserved)
Beginning Programming with Java For Dummies (2021)
Автор: Barry Burd
Автор: Barry Burd
⛓ Справочник по блокчейну и криптовалютам. Часть 1: основные понятия и технологии
Изучить терминологию в любой сфере – задача не из легких. Поиск в интернете проблему не решает, если тема слишком сложная и запутанная. Эта шпаргалка поможет вам разобраться с основными понятиями в криптовалютном мире.
https://proglib.io/sh/3jxWVpJwaD
Изучить терминологию в любой сфере – задача не из легких. Поиск в интернете проблему не решает, если тема слишком сложная и запутанная. Эта шпаргалка поможет вам разобраться с основными понятиями в криптовалютном мире.
https://proglib.io/sh/3jxWVpJwaD
Sams Teach Yourself Java in 21 Days (2020)
Автор: Rogers Cadenhead
Количество страниц: 672
С помощью этого руководства вы быстро освоите основы, а затем перейдете к продвинутым особенностям и концепциям современной Java. Книга была полностью обновлена для Java 11 и 12. К тому времени, когда вы прочтете книгу, вы будете хорошо разбираться в Java и библиотеках. Предыдущий опыт программирования не требуется. Следуя 21 тщательно организованному уроку из этой книги, каждый может изучить основы программирования на Java.
Скачать книгу
Автор: Rogers Cadenhead
Количество страниц: 672
С помощью этого руководства вы быстро освоите основы, а затем перейдете к продвинутым особенностям и концепциям современной Java. Книга была полностью обновлена для Java 11 и 12. К тому времени, когда вы прочтете книгу, вы будете хорошо разбираться в Java и библиотеках. Предыдущий опыт программирования не требуется. Следуя 21 тщательно организованному уроку из этой книги, каждый может изучить основы программирования на Java.
Скачать книгу
Telegram
Книги для программистов (reserved)
Sams Teach Yourself Java in 21 Days (2020)
Автор: Rogers Cadenhead
Автор: Rogers Cadenhead
#вопросы_с_собеседований
Что такое «зелёные потоки» и есть ли они в Java?
Что такое «зелёные потоки» и есть ли они в Java?
Зелёные (легковесные) потоки (green threads) — потоки, эмулируемые виртуальной машиной или средой исполнения. Создание зелёного потока не подразумевает под собой создание реального потока ОС.
Виртуальная машина Java берёт на себя заботу о переключении между разными green threads, а сама машина работает как один поток ОС. Это даёт несколько преимуществ. Потоки ОС относительно дороги в большинстве POSIX-систем. Кроме того, переключение между native threads гораздо медленнее, чем между green threads.
Это всё означает, что в некоторых ситуациях green threads гораздо выгоднее, чем native threads. Система может поддерживать гораздо большее количество green threads, чем потоков OС. Например, гораздо практичнее запускать новый green thread для нового HTTP-соединения к веб-серверу, вместо создания нового native thread.
Однако есть и недостатки. Самый большой заключается в том, что вы не можете исполнять два потока одновременно. Поскольку существует только один native thread, только он и вызывается планировщиком ОС. Даже если у вас несколько процессоров и несколько green threads, только один процессор может вызывать green thread. И всё потому, что с точки зрения планировщика заданий ОС всё это выглядит одним потоком.
Начиная с версии 1.2 Java поддерживает native threads, и с тех пор они используются по умолчанию.
Виртуальная машина Java берёт на себя заботу о переключении между разными green threads, а сама машина работает как один поток ОС. Это даёт несколько преимуществ. Потоки ОС относительно дороги в большинстве POSIX-систем. Кроме того, переключение между native threads гораздо медленнее, чем между green threads.
Это всё означает, что в некоторых ситуациях green threads гораздо выгоднее, чем native threads. Система может поддерживать гораздо большее количество green threads, чем потоков OС. Например, гораздо практичнее запускать новый green thread для нового HTTP-соединения к веб-серверу, вместо создания нового native thread.
Однако есть и недостатки. Самый большой заключается в том, что вы не можете исполнять два потока одновременно. Поскольку существует только один native thread, только он и вызывается планировщиком ОС. Даже если у вас несколько процессоров и несколько green threads, только один процессор может вызывать green thread. И всё потому, что с точки зрения планировщика заданий ОС всё это выглядит одним потоком.
Начиная с версии 1.2 Java поддерживает native threads, и с тех пор они используются по умолчанию.
#вопросы_с_собеседований
Какая разница между JSPWriter и сервлетным PrintWriter?
Какая разница между JSPWriter и сервлетным PrintWriter?
PrintWriter является объектом, отвечающим за запись содержания ответа на запрос. JspWriter использует объект PrintWriter для буферизации. Когда буфер заполняется или сбрасывается, JspWriter использует объект PrintWriter для записи содержания в ответ.
Агрегатные функции - функции, которые берут группы значений и сводят их к одиночному значению.
SQL предоставляет несколько агрегатных функций:
COUNT - производит подсчет записей, удовлетворяющих условию запроса; SUM - вычисляет арифметическую сумму всех значений колонки; AVG - вычисляет среднее арифметическое всех значений; MAX - определяет наибольшее из всех выбранных значений; MIN - определяет наименьшее из всех выбранных значений.
SQL предоставляет несколько агрегатных функций:
COUNT - производит подсчет записей, удовлетворяющих условию запроса; SUM - вычисляет арифметическую сумму всех значений колонки; AVG - вычисляет среднее арифметическое всех значений; MAX - определяет наибольшее из всех выбранных значений; MIN - определяет наименьшее из всех выбранных значений.
Наиболее используемые методы класса File:
☕️ boolean createNewFile(): делает попытку создать новый файл;
☕️ boolean delete(): делает попытку удалить каталог или файл;
☕️ boolean mkdir(): делает попытку создать новый каталог;
☕️ boolean renameTo(File dest): делает попытку переименовать файл или каталог;
☕️ boolean exists(): проверяет, существует ли файл или каталог;
☕️ String getAbsolutePath(): возвращает абсолютный путь для пути, переданного в конструктор объекта;
☕️ String getName(): возвращает краткое имя файла или каталога;
☕️ String getParent(): возвращает имя родительского каталога;
☕️ boolean isDirectory(): возвращает значение true, если по указанному пути располагается каталог;
☕️ boolean isFile(): возвращает значение true, если по указанному пути находится файл;
☕️ boolean isHidden(): возвращает значение true, если каталог или файл являются скрытыми;
☕️ long length(): возвращает размер файла в байтах;
☕️ long lastModified(): возвращает время последнего изменения файла или каталога;
☕️ String[] list(): возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге;
☕️ File[] listFiles(): возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге.
☕️ boolean createNewFile(): делает попытку создать новый файл;
☕️ boolean delete(): делает попытку удалить каталог или файл;
☕️ boolean mkdir(): делает попытку создать новый каталог;
☕️ boolean renameTo(File dest): делает попытку переименовать файл или каталог;
☕️ boolean exists(): проверяет, существует ли файл или каталог;
☕️ String getAbsolutePath(): возвращает абсолютный путь для пути, переданного в конструктор объекта;
☕️ String getName(): возвращает краткое имя файла или каталога;
☕️ String getParent(): возвращает имя родительского каталога;
☕️ boolean isDirectory(): возвращает значение true, если по указанному пути располагается каталог;
☕️ boolean isFile(): возвращает значение true, если по указанному пути находится файл;
☕️ boolean isHidden(): возвращает значение true, если каталог или файл являются скрытыми;
☕️ long length(): возвращает размер файла в байтах;
☕️ long lastModified(): возвращает время последнего изменения файла или каталога;
☕️ String[] list(): возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге;
☕️ File[] listFiles(): возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге.
Как контейнер сервлетов управляет жизненным циклом сервлета, когда и какие методы вызываются?
Контейнер сервлетов управляет четырьмя фазами жизненного цикла сервлета:
• Загрузка класса сервлета — когда контейнер получает запрос для сервлета, то происходит загрузка класса сервлета в память и вызов его конструктора без параметров.
• Инициализация класса сервлета — после того как класс загружен контейнер инициализирует объект ServletConfig для этого сервлета и внедряет его через
• Обработка запросов — после инициализации сервлет готов к обработке запросов. Для каждого запроса клиента сервлет контейнер порождает новый поток и вызывает метод service() путем передачи ссылки на объекты ответа и запроса.
• Удаление - когда контейнер останавливается или останавливается приложение, то контейнер сервлетов уничтожает классы сервлетов путем вызова
Таким образом, сервлет создаётся при первом обращении к нему и живёт на протяжении всего времени работы приложения (в отличии от объектов классов, которые уничтожаются сборщиком мусора после того, как они уже не используются) и весь жизненный цикл сервлета можно описать как последовательность вызова методов:
•
•
•
Контейнер сервлетов управляет четырьмя фазами жизненного цикла сервлета:
• Загрузка класса сервлета — когда контейнер получает запрос для сервлета, то происходит загрузка класса сервлета в память и вызов его конструктора без параметров.
• Инициализация класса сервлета — после того как класс загружен контейнер инициализирует объект ServletConfig для этого сервлета и внедряет его через
init()
метод. Это и есть место где сервлет класс преобразуется из обычного класса в сервлет.• Обработка запросов — после инициализации сервлет готов к обработке запросов. Для каждого запроса клиента сервлет контейнер порождает новый поток и вызывает метод service() путем передачи ссылки на объекты ответа и запроса.
• Удаление - когда контейнер останавливается или останавливается приложение, то контейнер сервлетов уничтожает классы сервлетов путем вызова
destroy()
метода.Таким образом, сервлет создаётся при первом обращении к нему и живёт на протяжении всего времени работы приложения (в отличии от объектов классов, которые уничтожаются сборщиком мусора после того, как они уже не используются) и весь жизненный цикл сервлета можно описать как последовательность вызова методов:
•
public void init(ServletConfig config)
– используется контейнером для инициализации сервлета. Вызывается один раз за время жизни сервлета.•
public void service(ServletRequest request, ServletResponse response)
– вызывается для каждого запроса. Метод не может быть вызван раньше выполнения init()
метода.•
public void destroy()
– вызывается для уничтожения сервлета (один раз за время жизни сервлета).Surviving the Whiteboard Interview (2019)
Автор: William Gant
Количество страниц: 136
Whiteboard-этап интервью может показаться большой проблемой для начинающих разработчиков. Опытные разработчики могут взять себя в руки и справиться с возрастающим напряжением, но как быть тем, кто собеседуется на позицию Junior'а? Автор книги использует свои реальные знания и опыт, чтобы помочь вам преодолеть психологические препятствия, связанные с интервью, а также предлагает образцы задач. При наличии достаточной подготовки и уверенности в себе вы сможете пройти whiteboard-собеседование в любой организации. Автор также дает общие советы по прохождению собеседования, например, рассказывает, как произвести наилучшее впечатление на интервьюера.
Скачать книгу
Автор: William Gant
Количество страниц: 136
Whiteboard-этап интервью может показаться большой проблемой для начинающих разработчиков. Опытные разработчики могут взять себя в руки и справиться с возрастающим напряжением, но как быть тем, кто собеседуется на позицию Junior'а? Автор книги использует свои реальные знания и опыт, чтобы помочь вам преодолеть психологические препятствия, связанные с интервью, а также предлагает образцы задач. При наличии достаточной подготовки и уверенности в себе вы сможете пройти whiteboard-собеседование в любой организации. Автор также дает общие советы по прохождению собеседования, например, рассказывает, как произвести наилучшее впечатление на интервьюера.
Скачать книгу
Telegram
Книги для программистов (reserved)
Surviving the Whiteboard Interview (2019)
Автор: William Gant
Автор: William Gant
Forwarded from Java jobs — вакансии для java-разработчиков
Компания: Kotelov https://kotelov.com
Формат работы: Офис (в центре Петербурга) или удаленка
Занятость: Полная
Что мы ждем от тебя:
1. Опыт коммерческой разработки на Java от 3-х лет;
2. Понимание принципов ООП и SOLID;
3. Знание фреймворка spring boot;
4. Опыт в проектировании и написание Rest API;
5. Опыт работы с брокерами очередей (RabbitMQ, Kafka, etc);
Будет плюсом:
1. Знакомство с JAVA EE;
2. Опыт работы с Kafka, умение конфигурировать и оптимизировать;
3. Опыт работы с Kubernetes.
Контакты: @kristina_anfimiadi (Кристина)
Формат работы: Офис (в центре Петербурга) или удаленка
Занятость: Полная
Что мы ждем от тебя:
1. Опыт коммерческой разработки на Java от 3-х лет;
2. Понимание принципов ООП и SOLID;
3. Знание фреймворка spring boot;
4. Опыт в проектировании и написание Rest API;
5. Опыт работы с брокерами очередей (RabbitMQ, Kafka, etc);
Будет плюсом:
1. Знакомство с JAVA EE;
2. Опыт работы с Kafka, умение конфигурировать и оптимизировать;
3. Опыт работы с Kubernetes.
Контакты: @kristina_anfimiadi (Кристина)
Разрабатываем корпоративный софт для автоматизации бизнеса и производства. Создаем удобные мобильные приложения и web-сервисы для ваших клиентов
Разрабатываем цифровые продукты в KOTELOV
KOTELOV — компания Валерия Котелова, где мы разрабатываем цифровой софт с интеграциями и упором на безопасность данных.
Есть ли смысл определять для сервлета конструктор? Каким образом лучше инициализировать данные?
Большого смысла определять для сервлета конструктор нет, т.к. инициализировать данные лучше не в конструкторе, а переопределив метод
Большого смысла определять для сервлета конструктор нет, т.к. инициализировать данные лучше не в конструкторе, а переопределив метод
init()
, в котором имеется возможность доступа к параметрам инициализации сервлета через использование объекта ServletConfig
.