Must have структурированный список ресурсов для Java программистов. 300 полезных репозиториев и ссылок.
Структурированный список ресурсов для изучения Java, который поможет систематизировать занятия. Основан на личном опыте и самостоятельном изучении данной области.
Содержание
- JAVA CORE
- ALGORYTHMS & DATA STRUCTURES
- SQL & JDBC
- HTTP & SERVLETS
- MAVEN & GRADLE
- SPRING
- JPA & HIBERNATE
- TESTING
- Идем на работу / проходим собеседование Java
- Дополнительный материал
JAVA CORE
Это целый ряд тем. Оновные: ООП в Java, Ветвление, Циклы, Массивы, Исключения, Коллекции, Внутренние классы, Ввод-вывод, Многопоточность, Stream API, и еще разный ряд базовых принципов для использование всего, например основные классы Java (Object) и тд.
- Java Core с нуля Link 1
- Java Core продвинутый Link 1
- Книги: Java Полное руководство Г.Шилдт | Java Эффективное программирование Д.Блох | Философия Java Б.Эк
- Практика: Codewars | CodingBat | Практические задачи по Java | 1000 задач на Java
Дополнительный материал
ALGORYTHMS & DATA STRUCTURES
Нужно уметь применять наиболее эффективные способы решения некоторых задач, а для этого стоит быть в курсе базовых алгоритмов и структур данных: Algorythms(Различные сортировки, поиск значений, поиск кратчайшего пути и тд.), Data Structures(Списки, Очереди, Мапы, Деревья, Графы и прочее).
- Книги. Алгоритмы на Java Р.Седжвик | Грокаем алгоритмы Б.Адитья | Алгоритмы Построение и анализ Т.Кормен.
- Практика:
- Вариант 1. Заходим на сайт LeetCode в разделе Explore заходим в лист Top Interview Questions (Easy / Medium / Hard) -> берем задание -> смотрим теги задачи(Related Topics) -> берем книгу и читаем нужную тему.
- вариант 2: читаем книгу -> узнаем новый алгоритм или структуру данных -> пытаемся написать код который делает тоже самое(сортировки, списки, очереди, поиск в ширину).
- вариант 3: решаем задачки по теме на Codewars или HackerRank.
Дополнительный материал
🖥 Java
@javatg – разбор реальных задач с Java собеседований
@javachats – чат для взаимопомощи java разработчиков
@java_library – лучшие бесплатные книги Java
@android_its – android разработка
@java_quizes – тесты и квизы java для повышения практических навыков
@Java_workit – вакансии Java разработчиков
SQL & JDBC
HTTP & SERVLETS
MAVEN & GRADLE
SPRING
Содержит множество компонентов для работы с разнообразными задачами. Spring MVC(для разработки веб-приложений), Spring Data(для работы с бд), Spring Security(для обеспечения безопасности приложений) и тд. Нужно разобраться с базовыми принципами работы с спринг, на чем все строится. Spring Basics(IoC Container, Spring Beans, Bean Configuration, Bean Wiring и тд).
- Детальный курс по Spring от dmdev
- ru Руководство по Spring
- Статья на хабре о механике Spring Framework и MVC
- Короткий курс, база Spring Framework
- Практика: REST API
- Практика: Spring Boot project
- Практика: Spring Boot + Vue.js project
Так же на данном этапе будет хорошо понимать некоторые принципы/пааттерны разработки ПО, такие как SOLID, Паттерные проектирования.
- Теория: Паттерны проектирования
- Практика: Паттерны проектирования
- Принципы Чистой Архитектуры от Дяди Боба
- SOLID принципы, простым языком
JPA & HIBERNATE
Спецификация, описывающая, как удобно представлять данные из бд в виде Java объектов. Спецификация не является фреймворком. Она только показывает, что должен уметь реальный фреймворк. А вот фреймворк уже реализует спецификацию. т.е. реальная работа происходит как раз в нем. Hibernate(фреймворк, реализующий спецификацию jpf), ORM(общее понятие для представления данных из бд в виде java объектов, тогда каждая строка таблицы становится java объектом).
TESTING
Позволяет убедиться, что вы не допустили ошибку при написании программы. Это как бы набор маленьких программ на Java, которые проверяют правильность вашей основной программы. Также гарантируют, что будущие изменения кода программы не затронут старую логику. Таким образом вы всегда будете уверены, что ничего не сломали. Это серьезно ускоряет разработку, т.к. вам не приходится каждый раз проверять потенциальные баги. Junit(Java фреймворк для написания тестов самых разных видов), Integration(прекрасно работает в паре с другими фреймворками, например Spring). Стоит просто разобратся какие бывают виды тестов на джава, как их писать на Junit, что такое моки и тд.
Лекции которые покрывают пробелы в SQL & JDBC | HTTP & SERVLETS | MAVEN & GRADLE | SPRING | JPA & HIBERNATE | TESTING
Идем на работу
Закрываем дыры для собеса. Как устроится на работу Java разработчиком ? Здесь представлены все популярные вопросы и ответы с Java собеседований.
Вопросы для собеседования на Java Developer
- ООП
- JVM
- Java Core
- Java Collections Framework
- Java 8
- Потоки ввода-вывода в Java
- Сериализация
- Многопоточность
- Servlets, JSP, JSTL
- Базы данных
- SQL
- JDBC
- Тестирование
- Журналирование
- UML
- XML
- Шаблоны проектирования
- Основы HTML
- Основы CSS
- Основы Web
- Дополнительные материалы
ООП
- Что такое ООП?
- Назовите основные принципы ООП.
- Что такое «инкапсуляция»?
- Что такое «наследование»?
- Что такое «полиморфизм»?
- Что такое «абстракция»?
- Что представляет собой «обмен сообщениями»?
- Расскажите про основные понятия ООП: «класс», «объект», «интерфейс».
- В чем заключаются преимущества и недостатки объектно-ориентированного подхода в программировании?
- Что подразумевают в плане принципов ООП выражения «является» и «имеет»?
- В чем разница между композицией и агрегацией?
- Что такое статическое и динамическое связывание?
JVM
- За что отвечает JVM
- Classloader
- Области данных времени выполнения
- Frames
- Execution Engine
- Полезные ссылки
Java Core
- Чем различаются JRE, JVM и JDK?
- Какие существуют модификаторы доступа?
- О чем говорит ключевое слово
final
? - Какими значениями инициализируются переменные по умолчанию?
- Что вы знаете о функции
main()
? - Какие логические операции и операторы вы знаете?
- Что такое тернарный оператор выбора?
- Какие побитовые операции вы знаете?
- Где и для чего используется модификатор
abstract
? - Дайте определение понятию «интерфейс». Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
- Чем абстрактный класс отличается от интерфейса? В каких случаях следует использовать абстрактный класс, а в каких интерфейс?
- Почему в некоторых интерфейсах вообще не определяют методов?
- Почему нельзя объявить метод интерфейса с модификатором
final
? - Что имеет более высокий уровень абстракции – класс, абстрактный класс или интерфейс?
- Может ли объект получить доступ к
private
-переменной класса? Если, да, то каким образом? - Каков порядок вызова конструкторов и блоков инициализации с учётом иерархии классов?
- Зачем нужны и какие бывают блоки инициализации?
- К каким конструкциям Java применим модификатор
static
? - Для чего в Java используются статические блоки инициализации?
- Что произойдёт, если в блоке инициализации возникнет исключительная ситуация?
- Какое исключение выбрасывается при возникновении ошибки в блоке инициализации класса?
- Может ли статический метод быть переопределён или перегружен?
- Могут ли нестатические методы перегрузить статические?
- Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?
- Возможно ли при переопределении метода изменить: модификатор доступа; возвращаемый тип; тип аргумента или их количество; имена аргументов или их порядок, убирать, добавлять, изменять порядок следования элементов секции
throws
? - Как получить доступ к переопределенным методам родительского класса?
- Можно ли объявить метод абстрактным и статическим одновременно?
- В чем разница между членом экземпляра класса и статическим членом класса?
- Где разрешена инициализация статических/нестатических полей?
- Какие типы классов бывают в java?
- Расскажите про вложенные классы. В каких случаях они применяются?
- Что такое «статический класс»?
- Какие существуют особенности использования вложенных классов: статических и внутренних? В чем заключается разница между ними?
- Что такое «локальный класс»? Каковы его особенности?
- Что такое «анонимные классы»? Где они применяются?
- Каким образом из вложенного класса получить доступ к полю внешнего класса?
- Для чего используется оператор
assert
? - Для чего нужен сборщик мусора?
- Как работает сборщик мусора?
- Какие разновидности сборщиков мусора реализованы в виртуальной машине HotSpot?
- Опишите алгоритм работы какого-нибудь сборщика мусора реализованного в виртуальной машине HotSpot.
- Что такое
finalize()
? Зачем он нужен? - Что произойдет со сборщиком мусора, если выполнение метода
finalize()
требует ощутимо много времени, или в процессе выполнения будет выброшено исключение? - Чем отличаются
final
,finally
иfinalize()
? - Что такое Heap и Stack память в Java? Какая разница между ними?
- Верно ли утверждение, что примитивные типы данных всегда хранятся в стеке, а экземпляры ссылочных типов данных в куче?
- Каким образом передаются переменные в методы, по значению или по ссылке?
- Расскажите про приведение типов. Что такое понижение и повышение типа?
- Когда в приложении может быть выброшено исключение
ClassCastException
? - Что такое литералы?
- Что такое autoboxing («автоупаковка») в Java и каковы правила упаковки примитивных типов в классы-обертки?
- Какие есть особенности класса
String
? - Что такое «пул строк»?
- Почему
String
неизменяемый и финализированный класс? - Почему
char[]
предпочтительнееString
для хранения пароля? - Почему строка является популярным ключом в
HashMap
в Java? - Что делает метод
intern()
в классеString
?. - Можно ли использовать строки в конструкции
switch
? - Какая основная разница между
String
,StringBuffer
,StringBuilder
? - Что такое класс
Object
? Какие в нем есть методы? - Расскажите про клонирование объектов.
- В чем отличие между поверхностным и глубоким клонированием?
- Какой способ клонирования предпочтительней?
- Почему метод
clone()
объявлен в классеObject
, а не в интерфейсеCloneable
? - Дайте определение понятию «конструктор».
- Что такое «конструктор по умолчанию»?
- Чем отличаются конструкторы по-умолчанию, копирования и конструктор с параметрами?
- Где и как вы можете использовать закрытый конструктор?
- Расскажите про классы-загрузчики и про динамическую загрузку классов.
- Что такое Reflection?
- Зачем нужен
equals()
. Чем он отличается от операции==
? equals()
порождает отношение эквивалентности. Какими свойствами обладает такое отношение?- Если вы хотите переопределить
equals()
, какие условия должны удовлетворяться для переопределенного метода? - Правила переопределения метода
Object.equals()
. - Какая связь между
hashCode()
иequals()
? - Если
equals()
переопределен, есть ли какие-либо другие методы, которые следует переопределить? - Что будет, если переопределить
equals()
не переопределяяhashCode()
? Какие могут возникнуть проблемы? - Каким образом реализованы методы
hashCode()
иequals()
в классеObject
? - Для чего нужен метод
hashCode()
? - Правила переопределения метода
Object.hashCode()
. - Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете
hashCode()
? - Могут ли у разных объектов быть одинаковые
hashCode()
? - Если у класса
Point{int x, y;}
реализовать методequals(Object that) {(return this.x == that.x && this.y == that.y)}
, но сделать хэш-код в видеint hashCode() {return x;}
, то будут ли корректно такие точки помещаться и извлекаться изHashSet
? - Могут ли у разных объектов
(ref0 != ref1)
бытьref0.equals(ref1) == true
? - Могут ли у разных ссылок на один объект
(ref0 == ref1)
бытьref0.equals(ref1) == false
? - Можно ли так реализовать метод
equals(Object that) {return this.hashCode() == that.hashCode()}
? - В
equals()
требуется проверять, что аргументequals(Object that)
такого же типа что и сам объект. В чем разница междуthis.getClass() == that.getClass()
иthat instanceof MyClass
? - Можно ли реализовать метод
equals()
классаMyClass
вот так:class MyClass {public boolean equals(MyClass that) {return this == that;}}
? - Есть класс
Point{int x, y;}
. Почему хэш-код в виде31 * x + y
предпочтительнее чемx + y
? - Опишите иерархию исключений.
- Какие виды исключений в Java вы знаете, чем они отличаются?
- Что такое checked и unchecked exception?
- Какой оператор позволяет принудительно выбросить исключение?
- О чем говорит ключевое слово
throws
? - Как написать собственное («пользовательское») исключение?
- Какие существуют unchecked exception?
- Что такое
Error
? - Что вы знаете о
OutOfMemoryError
? - Опишите работу блока try-catch-finally.
- Что такое механизм try-with-resources?
- Возможно ли использование блока try-finally (без
catch
)? - Может ли один блок
catch
отлавливать сразу несколько исключений? - Всегда ли исполняется блок
finally
? - Существуют ли ситуации, когда блок
finally
не будет выполнен? - Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
- Предположим, есть метод, который может выбросить
IOException
иFileNotFoundException
в какой последовательности должны идти блокиcatch
? Сколько блоковcatch
будет выполнено? - Что такое generics?
- Что такое «интернационализация», «локализация»?
Java Collections
- Что такое «коллекция»?
- Назовите основные интерфейсы JCF и их реализации.
- Расположите в виде иерархии следующие интерфейсы:
List
,Set
,Map
,SortedSet
,SortedMap
,Collection
,Iterable
,Iterator
,NavigableSet
,NavigableMap
. - Почему
Map
— это неCollection
, в то время какList
иSet
являютсяCollection
? - В чем разница между классами
java.util.Collection
иjava.util.Collections
? - Что такое «fail-fast поведение»?
- Какая разница между fail-fast и fail-safe?
- Приведите примеры итераторов реализующих поведение fail-safe
- Чем различаются
Enumeration
иIterator
. - Как между собой связаны
Iterable
иIterator
? - Как между собой связаны
Iterable
,Iterator
и «for-each»? - Сравните
Iterator
иListIterator
. - Что произойдет при вызове
Iterator.next()
без предварительного вызоваIterator.hasNext()
? - Сколько элементов будет пропущено, если
Iterator.next()
будет вызван после 10-ти вызововIterator.hasNext()
? - Как поведёт себя коллекция, если вызвать
iterator.remove()
? - Как поведёт себя уже инстанциированный итератор для
collection
, если вызватьcollection.remove()
? - Как избежать
ConcurrentModificationException
во время перебора коллекции? - Какая коллекция реализует дисциплину обслуживания FIFO?
- Какая коллекция реализует дисциплину обслуживания FILO?
- Чем отличается
ArrayList
отVector
? - Зачем добавили
ArrayList
, если уже былVector
? - Чем отличается
ArrayList
отLinkedList
? В каких случаях лучше использовать первый, а в каких второй? - Что работает быстрее
ArrayList
илиLinkedList
? - Какое худшее время работы метода
contains()
для элемента, который есть вLinkedList
? - Какое худшее время работы метода
contains()
для элемента, который есть вArrayList
? - Какое худшее время работы метода
add()
дляLinkedList
? - Какое худшее время работы метода
add()
дляArrayList
? - Необходимо добавить 1 млн. элементов, какую структуру вы используете?
- Как происходит удаление элементов из
ArrayList
? Как меняется в этом случае размерArrayList
? - Предложите эффективный алгоритм удаления нескольких рядом стоящих элементов из середины списка, реализуемого
ArrayList
. - Сколько необходимо дополнительной памяти при вызове
ArrayList.add()
? - Сколько выделяется дополнительно памяти при вызове
LinkedList.add()
? - Оцените количество памяти на хранение одного примитива типа
byte
вLinkedList
? - Оцените количество памяти на хранение одного примитива типа
byte
вArrayList
? - Для
ArrayList
или дляLinkedList
операция добавления элемента в середину (list.add(list.size()/2, newElement)
) медленнее? - В реализации класса
ArrayList
есть следующие поля:Object[] elementData
,int size
. Объясните, зачем хранить отдельноsize
, если всегда можно взятьelementData.length
? - Сравните интерфейсы
Queue
иDeque
. - Кто кого расширяет:
Queue
расширяетDeque
, илиDeque
расширяетQueue
? - Почему
LinkedList
реализует иList
, иDeque
? LinkedList
— это односвязный, двусвязный или четырехсвязный список?- Как перебрать элементы
LinkedList
в обратном порядке, не используя медленныйget(index)
? - Что позволяет сделать
PriorityQueue
? Stack
считается «устаревшим». Чем его рекомендуют заменять? Почему?- Зачем нужен
HashMap
, если естьHashtable
? - В чем разница между
HashMap
иIdentityHashMap
? Для чего нужнаIdentityHashMap
? - В чем разница между
HashMap
иWeakHashMap
? Для чего используетсяWeakHashMap
? - В
WeakHashMap
используются WeakReferences. А почему бы не создатьSoftHashMap
на SoftReferences? - В
WeakHashMap
используются WeakReferences. А почему бы не создатьPhantomHashMap
на PhantomReferences? LinkedHashMap
– что в нем отLinkedList
, а что отHashMap
?- В чем проявляется «сортированность»
SortedMap
, кроме того, чтоtoString()
выводит все элементы по порядку? - Как устроен
HashMap
? - Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресации и на основе метода цепочек. Как реализована
HashMap
? Почему, по вашему мнению, была выбрана именно эта реализация? В чем плюсы и минусы каждого подхода? - Как работает
HashMap
при попытке сохранить в него два элемента по ключам с одинаковымhashCode()
, но для которыхequals() == false
? - Какое начальное количество корзин в
HashMap
? - Какова оценка временной сложности операций над элементами из
HashMap
? Гарантирует лиHashMap
указанную сложность выборки элемента? - Возможна ли ситуация, когда
HashMap
выродится в список даже с ключами имеющими разныеhashCode()
? - В каком случае может быть потерян элемент в
HashMap
? - Почему нельзя использовать
byte[]
в качестве ключа вHashMap
? - Какова роль
equals()
иhashCode()
вHashMap
? - Каково максимальное число значений
hashCode()
? - Какое худшее время работы метода get(key) для ключа, которого нет в
HashMap
? - Какое худшее время работы метода get(key) для ключа, который есть в
HashMap
? - Сколько переходов происходит в момент вызова
HashMap.get(key)
по ключу, который есть в таблице? - Сколько создается новых объектов, когда вы добавляете новый элемент в
HashMap
? - Как и когда происходит увеличение количества корзин в
HashMap
? - Объясните смысл параметров в конструкторе
HashMap(int initialCapacity, float loadFactor)
. - Будет ли работать
HashMap
, если все добавляемые ключи будут иметь одинаковыйhashCode()
? - Как перебрать все ключи
Map
? - Как перебрать все значения
Map
? - Как перебрать все пары «ключ-значение» в
Map
? - В чем отличия
TreeSet
иHashSet
? - Что будет, если добавлять элементы в
TreeSet
по возрастанию? - Чем
LinkedHashSet
отличается отHashSet
? - Для
Enum
есть специальный классjava.util.EnumSet
. Зачем? Чем авторов не устраивалHashSet
илиTreeSet
? - Какие существуют способы перебирать элементы списка?
- Каким образом можно получить синхронизированные объекты стандартных коллекций?
- Как получить коллекцию только для чтения?
- Напишите однопоточную программу, которая заставляет коллекцию выбросить
ConcurrentModificationException
. - Приведите пример, когда какая-либо коллекция выбрасывает
UnsupportedOperationException
. - Реализуйте симметрическую разность двух коллекций используя методы
Collection
(addAll(...)
,removeAll(...)
,retainAll(...)
). - Как, используя LinkedHashMap, сделать кэш c «invalidation policy»?
- Как одной строчкой скопировать элементы любой
collection
в массив? - Как одним вызовом из
List
получитьList
со всеми элементами, кроме первых и последних 3-х? - Как одной строчкой преобразовать
HashSet
вArrayList
? - Как одной строчкой преобразовать
ArrayList
вHashSet
? - Сделайте
HashSet
из ключейHashMap
. - Сделайте
HashMap
изHashSet<Map.Entry<K, V>>
.
Java 8
- Какие нововведения, появились в Java 8 и JDK 8?
- Что такое «лямбда»? Какова структура и особенности использования лямбда-выражения?
- К каким переменным есть доступ у лямбда-выражений?
- Как отсортировать список строк с помощью лямбда-выражения?
- Что такое «ссылка на метод»?
- Какие виды ссылок на методы вы знаете?
- Объясните выражение
System.out::println
. - Что такое «функциональные интерфейсы»?
- Для чего нужны функциональные интерфейсы
Function<T,R>
,DoubleFunction<R>
,IntFunction<R>
иLongFunction<R>
? - Для чего нужны функциональные интерфейсы
UnaryOperator<T>
,DoubleUnaryOperator
,IntUnaryOperator
иLongUnaryOperator
? - Для чего нужны функциональные интерфейсы
BinaryOperator<T>
,DoubleBinaryOperator
,IntBinaryOperator
иLongBinaryOperator
? - Для чего нужны функциональные интерфейсы
Predicate<T>
,DoublePredicate
,IntPredicate
иLongPredicate
? - Для чего нужны функциональные интерфейсы
Consumer<T>
,DoubleConsumer
,IntConsumer
иLongConsumer
? - Для чего нужны функциональные интерфейсы
Supplier<T>
,BooleanSupplier
,DoubleSupplier
,IntSupplier
иLongSupplier
? - Для чего нужен функциональный интерфейс
BiConsumer<T,U>
? - Для чего нужен функциональный интерфейс
BiFunction<T,U,R>
? - Для чего нужен функциональный интерфейс
BiPredicate<T,U>
? - Для чего нужны функциональные интерфейсы вида
_To_Function
? - Для чего нужны функциональные интерфейсы
ToDoubleBiFunction<T,U>
,ToIntBiFunction<T,U>
иToLongBiFunction<T,U>
? - Для чего нужны функциональные интерфейсы
ToDoubleFunction<T>
,ToIntFunction<T>
иToLongFunction<T>
? - Для чего нужны функциональные интерфейсы
ObjDoubleConsumer<T>
,ObjIntConsumer<T>
иObjLongConsumer<T>
? - Что такое
StringJoiner
? - Что такое
default
методы интрефейса? - Как вызывать
default
метод интерфейса в реализующем этот интерфейс классе? - Что такое
static
метод интерфейса? - Как вызывать
static
метод интерфейса? - Что такое
Optional
? - Что такое
Stream
? - Какие существуют способы создания стрима?
- В чем разница между
Collection
иStream
? - Для чего нужен метод
collect()
в стримах? - Для чего в стримах применяются методы
forEach()
иforEachOrdered()
? - Для чего в стримах предназначены методы
map()
иmapToInt()
,mapToDouble()
,mapToLong()
? - Какова цель метода
filter()
в стримах? - Для чего в стримах предназначен метод
limit()
? - Для чего в стримах предназначен метод
sorted()
? - Для чего в стримах предназначены методы
flatMap()
,flatMapToInt()
,flatMapToDouble()
,flatMapToLong()
? - Расскажите о параллельной обработке в Java 8.
- Какие конечные методы работы со стримами вы знаете?
- Какие промежуточные методы работы со стримами вы знаете?
- Как вывести на экран 10 случайных чисел, используя
forEach()
? - Как можно вывести на экран уникальные квадраты чисел используя метод
map()
? - Как вывести на экран количество пустых строк с помощью метода
filter()
? - Как вывести на экран 10 случайных чисел в порядке возрастания?
- Как найти максимальное число в наборе?
- Как найти минимальное число в наборе?
- Как получить сумму всех чисел в наборе?
- Как получить среднее значение всех чисел?
- Какие дополнительные методы для работы с ассоциативными массивами (maps) появились в Java 8?
- Что такое
LocalDateTime
? - Что такое
ZonedDateTime
? - Как получить текущую дату с использованием Date Time API из Java 8?
- Как добавить 1 неделю, 1 месяц, 1 год, 10 лет к текущей дате с использованием Date Time API?
- Как получить следующий вторник используя Date Time API?
- Как получить вторую субботу текущего месяца используя Date Time API?
- Как получить текущее время с точностью до миллисекунд используя Date Time API?
- Как получить текущее время по местному времени с точностью до миллисекунд используя Date Time API?
- Как определить повторяемую аннотацию?
- Что такое
Nashorn
? - Что такое
jjs
? - Какой класс появился в Java 8 для кодирования/декодирования данных?
- Как создать Base64 кодировщик и декодировщик?
Потоки ввода/вывода в Java
- В чём заключается разница между IO и NIO?
- Какие особенности NIO вы знаете?
- Что такое «каналы»?
- Какие существуют виды потоков ввода/вывода?
- Назовите основные классы потоков ввода/вывода.
- В каких пакетах расположены классы потоков ввода/вывода?
- Какие подклассы класса
InputStream
вы знаете, для чего они предназначены? - Для чего используется
PushbackInputStream
? - Для чего используется
SequenceInputStream
? - Какой класс позволяет читать данные из входного байтового потока в формате примитивных типов данных?
- Какие подклассы класса
OutputStream
вы знаете, для чего они предназначены? - Какие подклассы класса
Reader
вы знаете, для чего они предназначены? - Какие подклассы класса
Writer
вы знаете, для чего они предназначены? - В чем отличие класса
PrintWriter
отPrintStream
? - Чем отличаются и что общего у
InputStream
,OutputStream
,Reader
,Writer
? - Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
- Какие классы позволяют ускорить чтение/запись за счет использования буфера?
- Какой класс предназначен для работы с элементами файловой системы?
- Какие методы класса
File
вы знаете? - Что вы знаете об интерфейсе
FileFilter
? - Как выбрать все элементы определенного каталога по критерию (например, с определенным расширением)?
- Что вы знаете о
RandomAccessFile
? - Какие режимы доступа к файлу есть у
RandomAccessFile
? - Какие классы поддерживают чтение и запись потоков в компрессированном формате?
- Существует ли возможность перенаправить потоки стандартного ввода/вывода?
- Какой символ является разделителем при указании пути в файловой системе?
- Что такое «абсолютный путь» и «относительный путь»?
- Что такое «символьная ссылка»?
Сериализация
- Что такое «сериализация»?
- Опишите процесс сериализации/десериализации с использованием
Serializable
. - Как изменить стандартное поведение сериализации/десериализации?
- Как исключить поля из сериализации?
- Что обозначает ключевое слово
transient
? - Какое влияние оказывают на сериализуемость модификаторы полей
static
иfinal
- Как не допустить сериализацию?
- Как создать собственный протокол сериализации?
- Какая роль поля
serialVersionUID
в сериализации? - Когда стоит изменять значение поля
serialVersionUID
? - В чем проблема сериализации Singleton?
- Какие существуют способы контроля за значениями десериализованного объекта
Многопоточность
- Расскажите о модели памяти Java?
- Что такое «потокобезопасность»?
- В чём разница между «конкуренцией» и «параллелизмом»?
- Что такое «кооперативная многозадачность»? Какой тип многозадачности использует Java? Чем обусловлен этот выбор?
- Что такое ordering, as-if-serial semantics, sequential consistency, visibility, atomicity, happens-before, mutual exclusion, safe publication?
- Чем отличается процесс от потока?
- Что такое «зелёные потоки» и есть ли они в Java?
- Каким образом можно создать поток?
- Чем различаются
Thread
иRunnable
? - В чём заключается разница между методами
start()
иrun()
? - Как принудительно запустить поток?
- Что такое «монитор» в Java?
- Дайте определение понятию «синхронизация».
- Какие существуют способы синхронизации в Java?
- В каких состояниях может находиться поток?
- Можно ли создавать новые экземпляры класса, пока выполняется
static synchronized
метод? - Зачем может быть нужен
private
мьютекс? - Как работают методы
wait()
иnotify()
/notifyAll()
? - В чем разница между
notify()
иnotifyAll()
? - Почему методы
wait()
иnotify()
вызываются только в синхронизированном блоке? - Чем отличается работа метода
wait()
с параметром и без параметра? - Чем отличаются методы
Thread.sleep()
иThread.yield()
? - Как работает метод
Thread.join()
? - Что такое deadlock?
- Что такое livelock?
- Как проверить, удерживает ли поток монитор определённого ресурса?
- На каком объекте происходит синхронизация при вызове
static synchronized
метода? - Для чего используется ключевое слово
volatile
,synchronized
,transient
,native
? - В чём различия между
volatile
и Atomic переменными? - В чём заключаются различия между
java.util.concurrent.Atomic*.compareAndSwap()
иjava.util.concurrent.Atomic*.weakCompareAndSwap()
. - Что значит «приоритет потока»?
- Что такое «потоки-демоны»?
- Можно ли сделать основной поток программы демоном?
- Что значит «усыпить» поток?
- Чем отличаются два интерфейса
Runnable
иCallable
? - Что такое
FutureTask
? - В чем заключаются различия между
CyclicBarrier
иCountDownLatch
? - Что такое race condition?
- Существует ли способ решения проблемы race condition?
- Как остановить поток?
- Почему не рекомендуется использовать метод
Thread.stop()
? - Что происходит, когда в потоке выбрасывается исключение?
- В чем разница между
interrupted()
иisInterrupted()
? - Что такое «пул потоков»?
- Какого размера должен быть пул потоков?
- Что будет, если очередь пула потоков уже заполнена, но подаётся новая задача?
- В чём заключается различие между методами
submit()
иexecute()
у пула потоков? - В чем заключаются различия между cтеком (stack) и кучей (heap) с точки зрения многопоточности?
- Как поделиться данными между двумя потоками?
- Какой параметр запуска JVM используется для контроля размера стека потока?
- Как получить дамп потока?
- Что такое ThreadLocal-переменная?
- Назовите различия между
synchronized
иReentrantLock
? - Что такое
ReadWriteLock
? - Что такое «блокирующий метод»?
- Что такое «фреймворк Fork/Join»?
- Что такое
Semaphore
? - Что такое double checked locking Singleton?
- Как создать потокобезопасный Singleton?
- Чем полезны неизменяемые объекты?
- Что такое busy spin?
- Перечислите принципы, которым вы следуете в многопоточном программировании?
- Какое из следующих утверждений о потоках неверно?
- Даны 3 потока Т1, Т2 и Т3? Как реализовать выполнение в последовательности Т1, Т2, Т3?
- Напишите минимальный неблокирующий стек (всего два метода —
push()
иpop()
). - Напишите минимальный неблокирующий стек (всего два метода —
push()
иpop()
) с использованиемSemaphore
. - Напишите минимальный неблокирующий ArrayList (всего четыре метода —
add()
,get()
,remove()
,size()
). - Напишите потокобезопасную реализацию класса с неблокирующим методом
BigInteger next()
, который возвращает элементы последовательности:[1, 2, 4, 8, 16, ...]
. - Напишите простейший многопоточный ограниченный буфер с использованием
synchronized
. - Напишите простейший многопоточный ограниченный буфер с использованием
ReentrantLock
.
Servlets, JSP, JSTL
- Что такое «сервлет»?
- В чем заключаются преимущества технологии сервлетов над CGI (Common Gateway Interface)?
- Какова структура веб-проекта?
- Что такое «контейнер сервлетов»?
- Зачем нужны сервера приложений, если есть контейнеры сервлетов?
- Как контейнер сервлетов управляет жизненным циклом сервлета, когда и какие методы вызываются?
- Что такое «дескриптор развертывания»?
- Какие действия необходимо проделать при создании сервлетов?
- В каком случае требуется переопределять метод
service()
? - Есть ли смысл определять для сервлета конструктор? Каким образом лучше инициализировать данные?
- Почему необходимо переопределить только
init()
метод без аргументов? - Какие наиболее распространенные задачи выполняются в контейнере сервлетов?
- Что вы знаете о сервлетных фильтрах?
- Зачем в сервлетах используются различные listener?
- Когда стоит использовать фильтры сервлетов, а когда слушателей?
- Как реализовать запуск сервлета одновременно с запуском приложения?
- Как обработать в приложении исключения, выброшенные другим сервлетом?
- Что представляет собой
ServletConfig
? - Что представляет собой
ServletContext
? - В чем отличия
ServletContext
иServletConfig
? - Для чего нужен интерфейс
ServletResponse
? - Для чего нужен интерфейс
ServletRequest
? - Что такое
Request Dispatcher
? - Как из одного сервлета вызвать другой сервлет?
- Чем отличается
sendRedirect()
отforward()
? - Для чего используются атрибуты сервлетов и как происходит работа с ними?
- Каким образом можно допустить в сервлете deadlock?
- Как получить реальное расположение сервлета на сервере?
- Как получить информацию о сервере из сервлета?
- Как получить IP адрес клиента на сервере?
- Какие классы-обертки для сервлетов вы знаете?
- В чем отличия
GenericServlet
иHttpServlet
? - Почему
HttpServlet
класс объявлен как абстрактный? - Какие основные методы присутствуют в классе
HttpServlet
? - Стоит ли волноваться о многопоточной безопасности работая с сервлетами?
- Какой метод HTTP не является неизменяемым?
- Какие есть методы отправки данных с клиента на сервер?
- В чем разница между методами
GET
иPOST
? - В чем разница между
PrintWriter
иServletOutputStream
? - Можно ли одновременно использовать в сервлете
PrintWriter
иServletOutputStream
? - Расскажите об интерфейсе
SingleThreadModel
. - Что означает URL encoding? Как это осуществить в Java?
- Какие различные методы управления сессией в сервлетах вы знаете?
- Что такое cookies?
- Какие методы для работы с cookies предусмотрены в сервлетах?
- Что такое URL Rewriting?
- Зачем нужны и чем отличаются методы
encodeURL()
иencodeRedirectURL()
? - Что такое «сессия»?
- Как уведомить объект в сессии, что сессия недействительна или закончилась?
- Какой существует эффективный способ удостоверится, что все сервлеты доступны только для пользователя с верной сессией?
- Как мы можем обеспечить transport layer security для нашего веб приложения?
- Как организовать подключение к базе данных, обеспечить журналирование в сервлете?
- Какие основные особенности появились в спецификации Servlet 3?
- Какие способы аутентификации доступны сервлету?
- Что такое Java Server Pages (JSP)?
- Зачем нужен JSP?
- Опишите, как обрабатываются JSP страницы, начиная от запроса к серверу, заканчивая ответом пользователю.
- Расскажите об этапах (фазах) жизненного цикла JSP.
- Расскажите о методах жизненного цикла JSP.
- Какие методы жизненного цикла JSP могут быть переопределены?
- Как можно предотвратить прямой доступ к JSP странице из браузера?
- Какая разница между динамическим и статическим содержимым JSP?
- Как закомментировать код в JSP?
- Какие существуют основные типы тегов JSP?
- Что вы знаете о действиях JSP (Action tag и JSP Action Elements).
- Взаимодействие JSP – сервлет – JSP.
- Какие области видимости переменных существуют в JSP?
- Какие неявные, внутренние объекты и методы есть на JSP странице?
- Какие неявные объекты не доступны в обычной JSP странице?
- Что вы знаете о
PageContext
и какие преимущества его использования? - Как сконфигурировать параметры инициализации для JSP?
- Почему не рекомендуется использовать скриплеты (скриптовые элементы) в JSP?
- Можно ли определить класс внутри JSP страницы?
- Что вы знаете о Языке выражений JSP (JSP Expression Language – EL)?
- Какие типы EL операторов вы знаете?
- Назовите неявные, внутренние объекты JSP EL и их отличия от объектов JSP.
- Как отключить возможность использования EL в JSP?
- Как узнать тип HTTP метода используя JSP EL?
- Что такое JSTL (JSP Standard tag library)?
- Из каких групп тегов состоит библиотека JSTL?
- Какая разница между
<c:set>
и<jsp:useBean>
? - Чем отличается
<c:import>
от<jsp:include>
и директивы<%@include %>
? - Как можно расширить функциональность JSP?
- Что вы знаете о написании пользовательских JSP тегов?
- Приведите пример использования собственных тегов.
- Как сделать перенос строки в HTML средствами JSP?
- Почему не нужно конфигурировать стандартные JSP теги в
web.xml
? - Как можно обработать ошибки JSP страниц?
- Как происходит обработка ошибок с помощью JSTL?
- Как конфигурируется JSP в дескрипторе развертывания.
- Можно ли использовать Javascript на JSP странице?
- Всегда ли создается объект сессии на JSP странице, можно ли отключить его создание?
- Какая разница между
JSPWriter
и сервлетнымPrintWriter
? - Опишите общие практические принципы работы с JSP.
Базы данных
- Что такое «база данных»?
- Что такое «система управления базами данных»?
- Что такое «реляционная модель данных»?
- Дайте определение терминам «простой», «составной» (composite), «потенциальный» (candidate) и «альтернативный» (alternate) ключ.
- Что такое «первичный ключ» (primary key)? Каковы критерии его выбора?
- Что такое «внешний ключ» (foreign key)?
- Что такое «нормализация»?
- Какие существуют нормальные формы?
- Что такое «денормализация»? Для чего она применяется?
- Какие существуют типы связей в базе данных? Приведите примеры.
- Что такое «индексы»? Для чего их используют? В чём заключаются их преимущества и недостатки?
- Какие типы индексов существуют?
- В чем отличие между кластерными и некластерными индексами?
- Имеет ли смысл индексировать данные, имеющие небольшое количество возможных значений?
- Когда полное сканирование набора данных выгоднее доступа по индексу?
- Что такое «транзакция»?
- Назовите основные свойства транзакции.
- Какие существуют уровни изолированности транзакций?
- Какие проблемы могут возникать при параллельном доступе с использованием транзакций?
SQL
- Что такое «SQL»?
- Какие существуют операторы SQL?
- Что означает
NULL
в SQL? - Что такое «временная таблица»? Для чего она используется?
- Что такое «представление» (view) и для чего оно применяется?
- Каков общий синтаксис оператора
SELECT
? - Что такое
JOIN
? - Какие существуют типы
JOIN
? - Что лучше использовать
JOIN
или подзапросы? - Для чего используется оператор
HAVING
? - В чем различие между операторами
HAVING
иWHERE
? - Для чего используется оператор
ORDER BY
? - Для чего используется оператор
GROUP BY
? - Как
GROUP BY
обрабатывает значениеNULL
? - В чем разница между операторами
GROUP BY
иDISTINCT
? - Перечислите основные агрегатные функции.
- В чем разница между
COUNT(*)
иCOUNT({column})
? - Что делает оператор
EXISTS
? - Для чего используются операторы
IN
,BETWEEN
,LIKE
? - Для чего применяется ключевое слово
UNION
? - Какие ограничения на целостность данных существуют в SQL?
- Какие отличия между ограничениями
PRIMARY
иUNIQUE
? - Может ли значение в столбце, на который наложено ограничение
FOREIGN KEY
, равнятьсяNULL
? - Как создать индекс?
- Что делает оператор
MERGE
? - В чем отличие между операторами
DELETE
иTRUNCATE
? - Что такое «хранимая процедура»?
- Что такое «триггер»?
- Что такое «курсор»?
- Опишите разницу типов данных
DATETIME
иTIMESTAMP
. - Для каких числовых типов недопустимо использовать операции сложения/вычитания?
- Какое назначение у операторов
PIVOT
иUNPIVOT
в Transact-SQL? - Расскажите об основных функциях ранжирования в Transact-SQL.
- Для чего используются операторы
INTERSECT
,EXCEPT
в Transact-SQL? - Напишите запрос…
JDBC
- Что такое JDBC?
- В чем заключаются преимущества использования JDBC?
- Что из себя представляет JDBC URL?
- Из каких частей стоит JDBC?
- Перечислите основные типы данных используемые в JDBC. Как они связаны с типами Java?
- Опишите основные этапы работы с базой данных с использованием JDBC.
- Как зарегистрировать драйвер JDBC?
- Как установить соединение с базой данных?
- Какие уровни изоляции транзакций поддерживаются в JDBC?
- При помощи чего формируются запросы к базе данных?
- Чем отличается Statement от PreparedStatement?
- Как осуществляется запрос к базе данных и обработка результатов?
- Как вызвать хранимую процедуру?
- Как закрыть соединение с базой данных?
Тестирование
- Что такое «модульное тестирование»?
- Что такое «интеграционное тестирование»?
- Чем интеграционное тестирование отличается от модульного?
- Какие существуют виды тестовых объектов?
- Чем stub отличается от mock?
- Что такое «фикстуры»?
- Какие аннотации фикстур существуют в JUnit?
- Для чего в JUnit используется аннотация
@Ignore
?
Журналирование
- Какие существуют типы логов?
- Из каких частей состоит система журналирования log4j?
- Что такое Logger в log4j?
- Что такое Appender в log4j?
- Что такое Layout в log4j?
- Перечислите уровни журналирования в log4j? Назовите порядок их приоритетности.
- Какие существуют способы конфигурирования log4j?
UML
- Что такое UML?
- Что такое «диаграмма», «нотация» и «метамодель» в UML?
- Какие существуют типы диаграмм?
- Какие виды отношений существуют в структурной диаграмме классов?
XML
- Что такое XML?
- Что такое DTD?
- Чем well-formed XML отличается от valid XML?
- Что такое «пространство имен» в XML?
- Что такое XSD? В чём его преимущества перед XML DTD?
- Какие типы существуют в XSD?
- Какие вы знаете методы чтения XML? Опишите сильные и слабые стороны каждого метода.
- Когда следует использовать DOM, а когда SAX, StAX анализаторы??
- Какие вы знаете способы записи XML?
- Что такое JAXP?
- Что такое XSLT?
Шаблоны проектирования
- Что такое «шаблон проектирования»?
- Назовите основные характеристики шаблонов.
- Типы шаблонов проектирования.
- Приведите примеры основных шаблонов проектирования.
- Приведите примеры порождающих шаблонов проектирования.
- Приведите примеры структурных шаблонов проектирования.
- Приведите примеры поведенческих шаблонов проектирования.
- Что такое «антипаттерн»? Какие антипаттерны вы знаете?
- Что такое Dependency Injection?
Основы HTML
- Что такое «HTML»?
- Что такое «XHTML»?
- Что такое
DOCTYPE
и зачем он нужен? - Для чего предназначен тег
<head>
? - Чем отличается
<div>
от<span>
? - Как обозначаются комментарии в HTML?
- Каким образом задаётся адрес документа, на который следует перейти?
- Как сделать ссылку на адрес электронной почты?
- Для чего предназначен тег
<em>
? - Для чего предназначены теги
<ol>
,<ul>
,<li>
? - Для чего предназначены теги
<dl>
,<dt>
,<dd>
? - Для чего предназначены теги
<tr>
,<th>
,<td>
? - Обязательно ли писать атрибут
alt
в теге<img>
? - В каком регистре лучше писать HTML-код?
- Что такое «мнемоника (entity)»?
Основы CSS
- Что такое «CSS»?
- Как в CSS обозначаются комментарии?
- Что такое «селектор»?
- Перечислите основные виды селекторов.
- Что такое псевдокласс?
- Какие существуют селекторы аттрибутов?
- В чем разница между
#my
и.my
? - В чем разница между
margin
иpadding
? - В чем заключается разница между значениями
0
иauto
в свойствеmargin
? - Какое свойство задает цвет фона?
- Как убрать подчеркивание для всех ссылок на странице?
- Для чего используется свойство
clear
? - Как сделать жирным текст во всех элементах
<p>
? - Как задать красный цвет для всех элементов, имеющих класс
red
?
Основы WEB
- Что такое WWW?
- Что такое W3C?
- Какие существуют уровни модели OSI?
- Что такое TCP/IP?
- Что такое UDP?
- Чем отличаются TCP и UDP?
- Что такое протокол передачи данных? Какие протоколы вы знаете?
- Что такое HTTP и HTTPS? Чем они отличаются?
- Что такое FTP?
- Чем отличаются методы GET и POST?
- Что такое MIME тип?
- Что такое Web server?
- Что такое Web application?
- Что такое Application server?
- Чем отличаются Web server и Application server?
- Что такое AJAX? Как принципиально устроена эта технология?
- Что такое WebSocket?
- Что такое JSON?
- Что такое JSON схема?
- Что такое cookies?
- Что такое «сессия»?
- Что такое «авторизация» и «аутентификация»? Чем они отличаются?
Дополнительные материалы
- 4 толковых канала на Youtube про технические собеседования
- A list of fancy questions I’ve been asked during the interviews I had
- Job interview in English: как готовиться и что отвечать
- Senior Engineer в поисках работы. О задачах на технических собеседованиях и теоретических вопросах
- What to ask an interviewer during a tech interview
- Spring Boot Interview Questions
- Top Spring Framework Interview Questions
- Spring Interview Questions
Источники
Дополнительный материал
- Разное:
- Годные Youtube каналы: