· 6 years ago · Feb 07, 2020, 02:16 PM
11. Может ли Null быть ключом в Map?
22. Может ли Optional вернуть Null // Тут вопросы был про это Optional.of(Optional.ofNullable(null))
33. Рассказать про звгрузчики классов, базовый звгрузчик, расширенный загрузчик.
44. Был пример class B extends A, у каждого есть конструктор и статические блоки, или переменные, рассказать что в каком порядке загружается если мы вызываем new B();
55. Что хранится в куче, что в стэке, и несколько доп вопросов по этому?
6
7БД.
81. Можно ли удалить одним запросом удалить несколько записей в БД? (Тут речь о том, что в некоторых БД можно в запрос типа delete from table_name where di in ? и вместо впроса подставить коллекцию)
92. Callable statment. Про хранимые процедуры и JDBC
10
11Гит
121. Что делают комманды fetch и cherry-pick
13
14Спринг
151. Рассказать как работает, когда загружается какой класс в спринге Бут. Там есть видос, где спринг потрошитель рассказывает про это, я довольно плохо сказал, как он работает.
162. Раасказть про Spring security filter
17
18Хабернэйт
191. Уровни Хэша
20
21Вообще спрашивали все в течение двух часов, но довольно поверхностно, даже немного было про теорию графов, что такое О-нотация, и конечно же про пулы. Про пулы спрашивают все, про пулы спирнгов, интов, все акронимы тоже спрашивали ACID, MVC, про рест архитектуры и методы HTTP, про протоколы тоже очень много было
22
23
24Компания, дочка Деловых линий. Стек Spring + GWT.
25
26Предварительное собеседование по скайпу:
27По теории спросил как работает HashMap (мёдом намазан вопрос).
28
29Как написать универсальный метод equals (типа сравнивать побайтово).
30
31
32На самом собеседовании дал 3 задачи, решать сразу на ноутбуке:
331. Есть класс User c 3 мя полями - фамилия, имя, возраст, есть дубликаты, они не отсортированы, в общем нужно написать метод в который приходит Collection<User>, нужно фильтрануть пользователей.
34Нужно написать компаратор по 3-м полям.
35
362. Задача по SQL.
37
38есть таблица девелоперов, там id и name
39есть таблица языков программирования, там id и lang
40есть таблица experience many-to-many, там id_dev и id_lang
41
42как например выбрать всех девелоперов, которые знают 2 языка с Java(id = 1) и Delphi(id = 3)
43
443. Задача по многопоточности, уже есть куча кода и методов, нужно написать метод которые будет перекидывать деньги с одного счёта на другой.
45
46
47Вопросы:
48
491. Как понимаешь принципы ООП
50
512. Про хэш таблицы и equals hashcode.
52
533. Алгоритмы (сортировка слиянием, поиск в ширину)
54
554. Довольно подробно спрашивали про работу с памятью в Java: young generation, survival, old gen. Почему могут происходить ситуации когда 2 объекта в памяти остались висеть, но у нас нет ссылок на них. Я сказал что скорее всего есть перекрёстные ссылки, но по идее JVM должна прибирать их. Ответили верно, с Android приложениями JVM не всегда может определить такие объекты.
56
575. Про хибернейт пару вопросов - что это такое, как происходит работа с БД.
58
596. Про аннотации немного.
60
617. Чем отличается Get запрос от Post запроса.
62
638. Работал ли с Docker, WebSphere.
64
65Ну и 70% времени я просто рассказывал чем занимался, какой опыт и т.д.
66
67Задачи:
68
691. Про 2 падающих яйца с этажей, нужно просто знать эту задачу. Сказал, что знаю, дальше не спрашивали.
70
712. Геометрическая - как определить что отрезок и луч пересекаются. Не решил, но порассуждал как можно решить.
72
73
74Архитектура
751. Чем монолит отличается от микросервисов? Рассказать плюсы и минусы каждого подхода.
762. Для чего нужен сервисный слой?(в контексте обсуждения Spring MVC)
77
78Java 8
791. Какие основные нововведения.
802. Что такое stream? Как работает?
813. Как работают лямбда выражения?
824. Для чего нужны default методы в интерфейсах?
835. Какие существуют два вида методов для работы со стримами?
846. Что такое LAZY в стримах?
857. Что такое фукциональные интерфейсы? Какие знаешь, как работают?
86
87Spring
881. В какой версии Spring появились бины?
892. Основная идея Spring?
903. Чем отличается DI от IoC?
914. Что такое бин?
925. Где раньше появились бины в Spring или в Java EE?
936. Каков жизненный цикл бина?
947. Какие области видимости бинов ты знаешь?
958. Метод destroy() можно вызвать на singleton или на prototype бин? На какой из них сколько раз можно вызвать?
969. Что такое Spring boot, как работает? Чем отличается от Spring?
9710. Что такое Spring starter?
9811. Что использует Spring MVC для сериализации/десериализации JSON?
9912. На клиента нужно передать сущность, но не всю. Нельзя передавать несколько полей. Что будете делать, какой оптимальный вариант?
100
101Многопоточность
1021. Что такое поток?
1032. Потоки живут в стеке или в heap?
1043. Что делать если потоки работают с общим ресурсом?
1054. Что такое volatile?
1065. Где хранятся значения переменных в стеке или в heap?
1076. А volatile где хранится?
1087. Как работает блок synchronized?
109
110Linux (на эти вопросы сказал, что посмотрю в гугле, видимо по этому дальше не спрашивали)
1111. Как из командной строки подключиться к работающему приложению и посмотреть логи? Какой командой?
1122. Как из командной строки понять сколько java приложений запущено? Какой командой?
113
114БД
1151. Чем отличаются реляционные БД от нереляционных?
1162. Какие ключи бывают в БД?
1173. Как удалить сущнось которая среди колонок БД содержит foreign key на другую сущность?
1184. Что такое агрегатные функции?
1195. LEFT, RIGHT, INNER JOIN чем отличаются? Рассказать про каждый.
1206. Что такое GROUP BY? Озвучить пример запроса.
1217. Чем отличаются HAVING от WHERE?
1228. Агрегатная функция будет работать с WHERE? А с HAVING? А если HAVING без GROUP BY?
1239. Что такое transient?
124
125На собеседовании спрашивали про ХэшМап и простой запрос по SQL: Есть таблица User - там id и name. Некоторые пользователи дублируются, выбрать всех неповторяющихся пользователей и их id, id должен быть минимальный.
126
127
128
1291. Как устроена хэш-мапа. Много по коллекциям, хэшкоду и эквалсу
1302. Если надо вставлять в середину списка, то лучше будет аррей лист или линкед лист
1313. Много по многопоточности. Что такое хеппенс бефо, примеры. Как организовать дедлок, как от него избавиться.
1324. Как работает ГК, его виды.
1335. Развернуть связный список на бумажке ^_^
1346. Какой-нибудь хитрый запрос по SQL, вместе с джонами, группировкой и сортировкой. Как избавиться от дубликатов в таблице.
1357. Как прибить процесс в линуксе, как узнать, сколько свободного места, как узнать число строк по шаблону в файле.
1368. Чем ConcurrentHashMap отличается от декорированной Collections.synchronized(HashMap)
1379. Жизненный цикл сервлета
13810. Скоупы бинов в спринге
13911. Кэши хибернейта. Проблема n+1
14012. Дженерики с вайлкардами. Что это такое, ограничения. Ковариантность и прочее.
14113. Стрим апи 8 джавы. Лямбды и анонимные классы.
14214. Опции ВМ для тюнинга ГК. OutOfMemoryError. Виды, как бороться.
14315. Внутри Collections.sort какой вид сортировки. Чем быстрая отличается от слиянием. Где больше затраты памяти.
144
145
146бд:
147Что такое первичный ключ
148Что такое вторичный ключ
149может ли столбец unique быть null?
150транзакции
151уровни изоляции
152нужна ли транзакция для select?
153Виды join
154Вывести значения, у которых нет соответствия в другой таблице
155
156java:
157рассказать про сравнение объектов
158что такое хеш, зачем нужен
159рассказать про коллекции
160сложность алгоритмов поиска в hashmap
161
162hibernate:
163какие аннотации hibernate знаю + что такое аннотация в общем
164как реализуются отношения между таблицами
165
166spring:
167что такое Spring IoC, в чём его преимущества
168если несколько реализаций интерфейса, то как указать, какой бин использовать
169что такое Spring MVC
170рассказать, как проходила авторизация в моём спринг-приложении
171
172рассказать solid (если бы не указал, то вряд ли спросили бы)
173какие паттерны знаю, какие использовал
174какие клиентские технологии использовал
175отличия статический типизации от динамической
176
177развернуть массив
178и кстати, в этом проекте они используют postgresql, а не оракл
179
180
181
182
183
184
185Java core:
186
1871. Чем "внутри" отличается
188String str1 = "hello";
189String str2 = new String("hello");
190?
191
1922. Какой общий термин для полиморфизма, связанного с наследованием? (позднее связывание)
1933. А вот если хочется дать кому-то пользоваться какой-то коллекцией, но дать возможность только проводить операции чтение без мутирующих операций, как можно реализовать?
1944. Что будет, если в TreeSet() засунуть объект кастомного класса?
1955. А вот если есть кастомный класс, которые не реализует Comparable, можно все-таки как-то исхитриться и успешно засунуть объекты этого класса в TreeSet?
1966. Что возвращает метод compare и почему именно это?
1977. Что будет напечатано?
198System.out.println(f());
199
200public int f() {
201try {
202return 1;
203} finally {
204return 2;
205}
206}
207
2088. Нарисуйте всю иерархию коллекции и расскажите обо всем.
2099. Нарисуйте иерархию исключений и расскажите про них.
210
211
212SQL
2131. Чем отличается UNION от JOIN?
2142. Нарисовать диаграмму Венна и показать где какие JOIN
2153. Что такое триггер и какие их виды?
2164. Что такое индекс и какие индексы бывают?
2175. Расскажите про первые 3 нормальные формы.
2186. Что такое CONSTRAIN? Какие виды?
2197. Расскажите про транзакции и уровни изоляции транзакций в привязке проблема - уровень изоляции, который данную проблему решает.
2208. Какие бывают отношения? Как реализуется отношение many-to-many?
221
222JPA/SQL
2231. Расскажите про оптимистичную блокировку, как ее можно реализовать?
224
225
226
227
228Spring (/Servlet API)
2291. Какие есть scope у спринга? Чем они отличаются? Когда может потребоваться использовать scope prototype?
2302. Как в целом строится архитектура приложения от момента попадания запроса в контроллер до выдачи на view?
2313. Если есть бин синглтон, и хочется хранить в нем состояние, как быть? Ну, не совсем в нем состояние хранить, а передавать в пределах request какие-то объекты по цепочке методов, как лучше это сделать?
2324. Как происходит выполнение запроса от момента попадания его в контроллер? (намек на ThreadLocal). Все это дело происходит в одном потоке?
2335. Откуда можно вытащить cookie пользователя?
234
235Java core
2361. Какие есть внутренние классы и чем они отличаются?
2372. Чем объект отличается от класса? Можно ли использовать класс без объекта?
2383. Расскажите о вариантах реализации синглтона. Можно ли от него унаследоваться, если нет - почему?
2394. А вот есть конструкция try-with-resourses, расскажите про нее, зачем она нужна.
240
241БД
2421. Какие бывают constraint?
2432. Расскажите о транзакциях.
2443. Какие особенности у PK?
2454. Для чего можно было бы создать индекс?
246
247ORM
2481. Какие еще ORM-системы кроме Hibernate существуют?
249
250Математика
251
252Ниже список задач
253
254 Есть N шаров, пронумерованных в порядке 1..N. Шара перемешали и вынули 1 шар. Имя на русках оставшиеся шара, нужно определить какой шар вынули. Решение: сорировать и переьбрать, эффективней просссумировать оставшиеся шары и вычесть из константы.
255 Перечислите известные вам алгоритмы сортировки (пузырьком, выбором, вставками, Шелла, быстрая сортировка и т.д) Ответ: сортировка выбором; сортировка пузырьком; шейкер сортировка; сортировка вставками; сортировка Шелла; быстрая сортировка; пирамидальная сортировка. Алгоритмов сортировки очень много, но сортировку пузырьком и быструю сортировку знают все (это классика).
256 Какие из перечисленных вами алгоритмов имеют квадратичную сложность, а какие логарифмическую; Ответ: Квадратичная сложность (O(n2)): сортировка выбором; сортировка пузырьком; шейкер сортировка; сортировка вставками; сортировка Шелла; Логарифмическая сложность (O(logn)):быстрая сортировка; пирамидальная сортировка.
257 Какими еще параметрами можно охарактеризовать алгоритм сортировки (время сортировки, память, устойчивость, естественное поведение); Ответ: Время сортировки - основной параметр, характеризующий быстродействие алгоритма; Память - ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных; Устойчивость - устойчивая сортировка не меняет взаимного расположения равных элементов; Естественность поведения - эффективность метода при обработке уже отсортированных, или частично отсортированных данных. Алгоритм ведет себя естественно, если учитывает эту характеристику входной последовательности и работает лучше
258 В чем заключается основное различие между алгоритмами внешней и внутренней сортировки; Ответ: Внешняя сортировка оперирует с запоминающими устройствами большого объема, но с доступом не произвольным (данные не вмещаются в оперативную память), а последовательным, т.е в данный момент мы 'видим' только один элемент (часть данных/порцию), а затраты на перемотку по сравнению с памятью неоправданно велики . Это приводит к специальным методам сортировки, обычно использующим дополнительное дисковое пространство. Идея большинства методов заключается в расчленении данных на ряд последовательностей помещающихся в оперативную память. Далее применяется один из методов внутренней сортировки, после чего последовательности сливаются. Чем больше объём оперативной памяти, тем длиннее будут последовательности и, следовательно, тем меньшим окажется их количество, что увеличит скорость сортировки. Если же объём оперативной памяти мал, то можно разделить исходные данные на несколько последовательностей, после чего непосредственно использовать процедуру слияния. Основные методы сортировок:Естественная сортировка (метод естественного слияния);Сортировка методом двухпутевого сбалансированного слияния; Многофазная сортировка (Фибоначчиевая).
259 Расскажите более подробно об одном из перечисленном вами алгоритме
260
261Архитектура
262
263Ниже список задач
264
265 Какие виды паралелизации известны. Ответ: векторизация для циклов, паралелизация по данным.
266
267OS(Unix-like)
268
269Ниже список задач
270
271 Что такое top и когда top может показать 500% использования CPU
272 Что такое pstack
273
274Многопоточное програмирование
275
276Ниже список задач
277
278 Что такое deadlock, просьба нарисовать его.
279 Что такое race condition, просьба нарисовать их.
280 Что такое win32 event & posix condition. Каковы их отличия.
281 Что такое spin lock? Это posix элемент, для чего он нужен?
282 Что такое win32 critical section & mutex. Каковы их отличия в плане рекусивности. Можно ли из одного потока захватить и из другого освободить.
283 Что такое recursive mutex & rw mutex. Когда они реально нужы, привести пример.
284 Что такое семафор? Можно ли из одного потока захватить и из другого освободить.
285
286
287
288Протоколы
289
290Ниже список задач
291
292 Чем отличается протокол TCP от UDP. Как на базе UDP сделать TCP. Ответ: гарантированнаяа доставк и порядок. Неоходимо добавить потверждение на принимиающей стороне и таймер с перепосылкой на отправляющей стороне. Порядок нужно гарантировать порядковым номером и сборкой в правильно порядке.
293 Чем отличается TCP от SCTP
294 Что такое pipelined в HTTP протоколе. Ответ: промежуточнее решение между синхронных и асинхронным протоколом. Ответы идут в полученном порядке.
295 Что такое chunk в HTTP протоколе и когда они нунжы. Ответ: передача по частям, используется в случае стриминга.
296
297Шаблоны проектирвания
298
299Ниже список задач
300
301 Что такое Singleton. Потокобезопасная ли его классическая реализацитя? Как сделать потокобезопасную без захвата мутекса на каждом получение. Ответ: не потокобезопасная. Нужно применить Double-check pattern.
302 Что такое Factory
303
304SQL
305
306Ниже список задач
307
308 Есть таблица T1 с M записями, T2 с N записями. Сколько записей вернет select * from T1, T2
309
310
311
312
313
314 Как получить потокобезопасную коллекцию? (методы Collection.synchronizedList()/Set, или использовать CopyOnWriteList/Set и ConcurentMap из пакета concurrent.util)
315 Почему важно переопределять hashCode(), как хранятся элементы в HashMap, что хранится в бакетах HashMap, что происходит при возникновении коллизии(и что это такое)?
316 Если нам нужно получить копию объекта, какой методы мы должны использовать? (метод clone() класса Object) и есть ли особенности у этого метода?
317
318
319
320Технологии JavaEE
321
322 Что такое транзакция?
323 Расшифруйте аббревиатуру ACID?
324 Что такое консистентность базы данных?
325 Что такое Rest’ы?
326 Чем отличаются get, post, put?
327 По технологии EJB чем отличаются Stateless и Statefull бины, когда лучше использовать первые и вторые?
328 Что такое Dependency Injection?
329 Какой выигрыш при использовании?
330 Паттерны проектирования Фабрика, Синглтон, Декоратор.
331
332
333
334№
335Вопрос
336Ответ
3371
338В чем разница между типами Double и BigDecimal? Какой тип в каких случаях применять? Обоснуйте свой ответ.
339
3402
341Есть список односвязный. Нужно узнать k-ный элемент с конца. Есть ссылка на первый элемент. Ваше решение, сложность, ресурсы необходимые
342
3433
344Есть N элементов (пусть Integer). Несортированные. Нужно найти М минимальных элементов (M < N). Ваше решение, сложность, необходимые ресурсы. Можно ли ускорить на практике решение задачи?
345
3464
347Deadlocks. Что это такое? Какие пути борьбы с ними можете предложить?
348
3495
350Конфигурационный учет. *расписать о чем вопрос
351
3526
353Тестирование кода. Unit, модульное, интеграционное, ручное, автоматизированное, тестирование UI
354
3557
356map-reduce, лямбда-архитектура
357
3588
359REST vs SOAP
360
3619
362Методы класса Object
363clone(); equals(Object obj); finalize(); getClass(); hashCode(); notify(); notifyAll(); toString(); wait(); wait(long timeout); wait(long timeout, int nanos);
36410
365Назначение методов Object#hashCode() и Object#equals(Object obj). Ограничения и соглашения которым должны соответствовать эти методы.
366Object#hashCode() возвращает-хэш код этого объекта. Данное значение может быть использовано для организации хэш структур данных (например java.util.HashMap).
367
368Метод hashCode обязан удовлетоворять следующим соглашениям:
369
370· Метод должен возвращать одно и то же значение будучи вызванным несколько раз на одном и том же экземпляре объекта
371
372· Для экземпляров o1 и o2 метод hashCode должен возвращать одно и то же значение, если o1.equals(o2)
373
374· Для экземпляров o1 и o2 метод hashCode может возвращать одно и то же значение даже если not o1.equals(o2)
375
376Object#equals(Object) - проверка логического равенства двух объектов
377
378Метод Object#equals(Object) должен соответствовать следующим требованиям для двух объектов x и y не равным null:
379
380· Рефлексивность - x.equals(x) == true
381
382· Симметричность - x.equals(y) == y.equals(x)
383
384· Транзитивность - x.equals(y) && y.equals(z) => x.equals(z)
385
386· Консистентность - множественные вызовы x.equals(y) должны возвращать только true либо только false. В случае если логическое равенство объектов не изменялось.
387
388· Всегда x.equals(null) == false
389
390
39111
392Иерархия коллекций JDK
393
39412
395Конструктор java.util.HashMap#HashMap(int initialCapacity, float loadFactor). Назначение параметра initialCapacity и loadFactor.
396· initalCapacity - начальное количество строк в хэш таблице
397
398· loadFactor - Заполненность строк в хэш таблице. При превышении этого значения произойдет увеличение хэш таблицы и перераспределение (рехеширование)
399
400
40113
402Как работает цикл for (Object o : collection) в Java 1.5+
403На месте объекта collection может быть любой объект, который реализует интерфейс Iterable.
404
405в этом случае данная конструкция эквивалентна обыкновенному циклу for:
406
407for (Iterator it = collection.iterator(); it.hasNext(); ) {
408
409Object o = it.next();
410
411}
41214
413Какие проблемы в видите в этом коде:
414
415Iterator it = map.entrySet().iterator();
416
417while (it.hasNext())
418
419{
420
421 Entry item = it.next();
422
423 map.remove(item.getKey());
424
425}
426
427При следующем вызове метода hasNext() будет выброшено исключение ConcurrentModificationException. Правильный подход удалять элементы используя итератор:
428
429 Iterator it = map.entrySet().iterator();
430
431 while (it.hasNext())
432
433 {
434
435 Entry item = it.next();
436
437 it.remove();
438
439 }
440
44115
442Что будет выведено на консоли при выполнении следующей программы. Объяснить ответ.
443
444import java.io.IOException;
445
446public class Main {
447
448 public static String aMethod(int flag) throws IOException {
449 try {
450 if (3 == flag) {
451 throw new IOException("One");
452 }
453 }
454 finally {
455 return "Zero";
456 }
457 }
458
459 public static void main(String[] args) {
460 try {
461 System.out.println(aMethod(3));
462 }
463 catch (IOException e) {
464 System.out.println(e.getMessage());
465 }
466 }
467}
468Будет выведено "Zero"
46916
470В чем разница между методами Object#notify и Object#notifyAll.
471Метод notify оповещает об освобождении монитора произвольный поток среди всех потоков ждущих этот монитор.
472
473Метод notifyAll оповещает об освобождении монитора все потоки среди ждущих.
47417
475Какие проблемы Вы видите в этом коде:
476
477public class WaitAndNotify {
478 private final static Object lock = new Object();
479 public static void main(String[] args) {
480 new Thread() {
481 public void run() {
482 synchronized (lock) {
483 try {
484 System.out.print("I am Sleeping");
485 Thread.sleep(4000);
486 wait();
487 } catch (InterruptedException e) {
488 e.printStackTrace();
489 }
490 }
491 }
492 }.start();
493 }
494}
495
496Будет выброшено исключение java.lang.IllegalMonitorStateException
49718
498Какие две модели обмена сообщениями поддерживает JMS?
499Point-to-point
500
501Publisher-Subcscriber
50215
503Что необходимо изменить в класс User что бы тест выполнился корректно ?
504
505public class User {
506 public final String firstName;
507 public final String lastName;
508 public User(String firstName, String lastName) {
509 this.firstName = firstName;
510 this.lastName = lastName;
511 }
512}
513@Test public void hashSetContains() {
514 Set<User> set = new HashSet<>();
515 set.add(new User("john", "smith"));
516 assertTrue(set.contains(new User("john", "smith")));
517}
518
519Перекрыть методы equals и hashCode
52016
521Что необходимо изменить в класс User что бы тест выполнился корректно ?
522
523public class User {
524 public final String firstName;
525 public final String lastName;
526 public User(String firstName, String lastName) {
527 this.firstName = firstName;
528 this.lastName = lastName;
529 }
530}
531@Test public void treeSetContains() {
532 Set<User> set = new TreeSet<>();
533 set.add(new User("john", "smith"));
534 assertTrue(set.contains(new User("john", "smith")));
535}
536
537Реализовать интерфейс Comparable<User>
53817
539Проведите ревью кода, выполниться ли тест ?
540
541Видите ли вы какие-то проблемы в дизайне классов, как бы вы их решали ?
542
543class Grade {
544 private int minSalary, maxSalary;
545 public Grade(int minSalary, int maxSalary) {
546 this.minSalary = minSalary;
547 this.maxSalary = maxSalary;
548 }
549 public void setMinSalary(int minSalary) { this.minSalary = Math.min(minSalary, maxSalary); }
550 public void setMaxSalary(int maxSalary) { this.maxSalary = Math.max(minSalary, maxSalary); }
551 public int getMaxSalary() { return maxSalary; }
552 public int getMinSalary() { return minSalary; }
553}
554
555class Employee {
556 private Grade grade;
557 private int salary;
558 public Employee(Grade grade, int salary) {
559 setGrade(grade);
560 setSalary(salary);
561 }
562 public void setGrade(Grade grade) {
563 this.grade = grade;
564 if(salary < grade.getMinSalary()) {
565 salary = grade.getMinSalary();
566 }
567 }
568 public void setSalary(int newSalary) {
569 this.salary = newSalary;
570 if(newSalary > grade.getMaxSalary()) {
571 salary = grade.getMaxSalary();
572 }
573 }
574 public Grade getGrade() { return grade; }
575 public int getSalary() { return salary; }
576}
577
578@Test
579public void minSalary() {
580 Grade junior = new Grade(40000, 80000);
581 Employee emp = new Employee(junior, 30000);
582 assertEquals(junior.getMinSalary(), emp.getSalary());
583}
584
585
586
587Тест провалится так как setSalary в конструкторе Employee перезапишет значение salary.
588
589Проблема дизайна в том что на Mutable сущностях тяжело поддерживать консистентность внутреннего состояния.
590
591Например сам Grade является изменяемым, и в случае модификации его изменения не будут учтены в Employee.
592
593Решением может быть использование Immutable сущностей, в этом случае вся валидация будет собрана в одном месте (конструкторе), выполнятся валидация будет один раз в строго определенной последовательности.
594
595
59618
597Перед разработчиком стояла задача поддержать несколько разных видео кодеков.
598
599Время от времени могут будет необходимость добавлять поддержку новых форматов.
600
601Есть ли у вас какие-то замечания к коду ?
602
603class VideoStream { ... }
604
605interface VideoConverter {
606 VideoStream convert(InputStream rawStream);
607}
608class WmvVideoConverter implements VideoConverter {
609 public VideoStream convert(InputStream rawStream) { ... }
610}
611class MpegVideoConverter implements VideoConverter {
612 public VideoStream convert(InputStream rawStream) { ... }
613}
614class H264VideoConverter implements VideoConverter {
615 public VideoStream convert(InputStream rawStream) { ... }
616}
617enum Format { WMV, MPEG, H264, ... }
618
619class VideoStreamer {
620 public void processVideo(String fmt, InputStream inputStream, OutputStream outputStream) {
621 final VideoStream decodedStream;
622 switch (Format.valueOf(fmt)) {
623 case WMV:
624 decodedStream = new WmvVideoConverter().convert(inputStream); break;
625 case MPEG:
626 decodedStream = new MpegVideoConverter().convert(inputStream); break;
627 case H264:
628 decodedStream = new H264VideoConverter().convert(inputStream); break;
629 case ... :
630 ...
631 default:
632 throw new IllegalArgumentException("Unsupported video format: "+fmt);
633 }
634 ...
635 }
636}
637
638
639
640Имеет смысл выделить фабрику VideoConverter'ов где расположить всю логику связанную в выбором конкретного экземпляра.
641
642В тривиальном случае роль такой фабрики может выполнять сам Enum
643
644enum Format {
645 WMV(new WmvVideoConverter()),
646 MPEG(new MpegVideoConverter()),
647 H264(new H264VideoConverter());
648 public final VideoConverter converter;
649 Format(VideoConverter converter) {
650 this.converter = converter;
651 }
652}
653public void processVideo(String fmt, InputStream inputStream, OutputStream outputStream) {
654 final VideoStream decodedStream = Format.valueOf(fmt).converter.convert(inputStream);
655 ...
656}
657
65819
659Является ли реализация Counter потокобезопасной, почему ?
660
661public class Counter {
662 private volatile long count = 0;
663
664 public long increment() {
665 return count++;
666 }
667
668 public long count() {
669 return count;
670 }
671}
672
673Не является, инкермент не атомарная операция
674
675 public long increment() {
676 int temp = count; // чтение
677 temp += 1;
678 count = temp; // запись
679 return temp;
680 }
681
68220
683Является ли State threadsafe ?
684
685public class State {
686 volatile int a;
687 int b;
688 void update(int a, int b) {
689 this.b=b;
690 this.a=a;
691 }
692
693 public String toString() {
694 return "{" + a +", " + b +'}';
695 }
696}
697
698
699
700
701Есть два потока T1, T2, и разделяемый между ними экземпляр State state = new State().
702
703Потоки одновременно вызывают каждый свой метод.
704
705T1
706T2
707state.update(1,1)
708Systemout.println(state)
709Какие варианты вывода может напечатать поток T2
710
711· {0,0} / {0,1} / {1,0} / {1,1}
712
713· {0,0} / {1,0} / {1,1}
714
715· {0,0} / {0,1} / {1,1}
716
717· {0,0} / {0,1} / {1,0}
718
719· {0,0} / {1,1}
720
721· Произвольные значения, так как поля _a_ и _b_ не были проинициализированы.
722
723
724T2 может напечатать следующие значения
725
726· {0,0} - если T2 успел прочитать до вызова update
727
728· {1,1} - если T2 прочитал после вызова upate
729
730· {0,1} - если T2 прочитал после this.b = 1 но перед фиксацией this.a = 1
731
732Значения {1,0}, Т2 увидеть не может, потому что в этом случае уже прошла фиксация this.a = 1
73321
734Что выведет данный метод?
735
736public static void main(String[] args) {
737 String x = "hello";
738 String y = "he" + "llo";
739 String z = new String(new char[]{'h', 'e', 'l', 'l', 'o'});
740
741 System.out.println(x == z);
742 System.out.println(x.equals(z));
743 System.out.println(x == y);
744}
745
746false
747true
748true
74922
750
751
752
753Задача: Есть большой текстовый файл, в котором хранятся различные слова, некоторые из которых – по многу раз.
754
755Нужно сделать класс WordIndex (можно создавать и другие сопутствующие классы, если это необходимо), который по сути будет являться индексом. Он должен позволять по заданному слову находить все вхождения (позиции) его в файле.
756
757 Данный класс должен компилироваться (исполняться) и иметь следующие методы:
758
759 public void loadFile(String filename); Загрузка данных из файла и построение индекса.
760 public Set<Integer> getIndexes4Word(String searchWord); Возвращает список позиций слова в файле. Если данного слова в файле нет, то возвращается null.
761
762 Для хранения данных в памяти предлагается использовать Trie (префиксное дерево).
763
764
765
766На выходе должен получиться Java проект, в котором будет возможность запустить Unit-тест и проверить его работоспособность.
767
768Проверьте работу этого приложения с String.indexOf
769
770
771Давали вопросы из видео https://youtu.be/AR9dtVaEUSM
772+ вопросы по теории:
773Чем отличается JDK от JRE
774Где хранятся примитивы и объекты, как они уничтожаются
775Какие типы ссылок кроме Strong знаешь (weak, soft), чем они отличаются
776Рассказать структуру интерфейсов коллекций (Map, Collection, Iterable, Set, List, Queue и т.д.)
777Чем отличается ArrayList от LinkedLista, как происходит удаление
778Как работает HashMap
779Чем отличается интерфейс от абстрактного класса
780Чем отличается поток от процесса
781Чем такое демоны
782Как определяется с каким http запросом мы имеем дело
783Чем отличается POST запрос от GET запроса
784Что такое Spring. IoC, DI
785Жизненный цикл теста в jUnit
786Работал ли с git rebase
787Писал ли свои модули на Maven
788Что делает команда top в Linux
789Работал ли с Angular JS
790
791Задача на подумать:
792вот например у нас есть какой сервис - приложение, оно отправляет с помощью jms какой то большой набор данных, у принимающей стороны это дело должно пилиться на какието куски, распределяться по горизонтально масштабируемой группе серверов или приложений. Необходимо в схему добавить какие то элементы и объяснить их, чтобы определить когда все куски кода выполнятся и соберутся обратно воедино для отправки ответа.
793
794
795Ещё задачи по JS:
796
797var a = b = 5
798чему будет равна a
799
800отличие между == и ===
801
802что будет если создать объект var a = {1: 'a', '1': 'b'}
803
804Работал ли с промисами, прототипами.
805
806
807Спросил сначала знаю ли разницу мнежду TCP/IP и UDP. не ответил.
808
809Потом ближе к java. Начали с инкапсуляции и полиморфизма. Инкапсуляцию хорошо ответил, а в полиморфизме не очень пример привет.
810
811Потом спросил могу ли написать в 16-ом виде числе -1. Не смог.
812Потом что такое volatile, ответил.
813
814Потом он написал псевдокод:
815
816volatile int a = 0;
817int b = 0;
818
819Поток1 {
820 b = 50;
821 a = 100;
822}
823
824Поток2 {
825 int a1 = a;
826 int b1 = b;
827}
828
829Написать чему будут равны a1 и b1 если мы ничего не знаем про поток1, стартовал он или нет, выполнился он или нет.
830Написать какие могут быть варианты. В общем на этом я запутался.
831
832Спросил про дедлок, знаю ли что такое. Ответил.
833Попросил написать пример. Написал взаимную блокировку когда Поток1 Блокирует А и обращается к Б. А поток2 блокирует Б и обращается к А.
834Но попросил написать чтобы гарантированно всегда была блокировку. Тут я тоже завис и не смог нормального варианта придумать. Что-то начал там с ифами придумывать, но он мои варианты разбивал что один поток вытеснял во время работы другой и не гарантировалась всегда блокировка. А вечный цикл писать нельзя было. В общем я не смог придумать.
835
836Потом спросил про хешмеп, какая временная сложность получения объекта в лучшем и худшем случае. Ответил про О(1) в лучшем, а в худшем смотря какая версия джввы, т.к. до 8 там корзина содержала список. А начиная с 8 джавы если значений > 8 на один ключ, то список преобразуется в дерево и будет сложность О(LogN), при старой версии в худщем случае О(N).
837
838Потом попросил написать метод который считает факториал, с ограничения, что отбрасываем значение меньше 0 и больше 1 000 000. Написал. Потом спрашивал как оптимизировать если у нас 16 ядерный процессор. Как разбить на потоки. Сначала предложил поровну на всех, сказал что последний будет дольше всего считать. Как сделать чтобы все примерно одинаково были. Сначала предложил в последнем еще разбивать на потоки если первые освободились и туда перекидывать работу. Потом предложил делить работу по сумме значенией, чтобы вычитали примерно одинаково. На этом и подошел час общения.
839
840
8411.1. Какие методы есть у object?
8421.2. Как должны работать equals и hashCode?
8431.3. Как считается hashCode у простого object?
8441.4. Что такое mutable объект?
8451.5. Сколько занимает в памяти простой object?
8461.6. Какие классы называются анонимными? Есть ли у анонимного класса конструктор, как передать параметры в анонимный класс?
8471.7. О чем говорит ключевое слово final?
8482. Многопоточность
8492.1. Принцип happens before
8502.2. Что делает метод interrupt?
8512.3. Какие средства синхронизации потоков вы знаете?
8522.4. Что такое deadlock, как избежать deadlock?
8532.5. Какие в java есть средства создания потоков?
8542.6. Для чего используются Atomic в java, как они устроены?
8553. Коллекции
8563.1. Какие коллекции вы знаете?
8573.2. Map
8583.2.1. Как устроен HashMap?
8593.2.2. Как рассчитывается bucket из hashCode?
8603.2.3. Как расширяется HashMap при добавлении элементов?
8613.2.4. Можно ли использовать в качестве ключа массив байт (byte[])?
8623.2.5. Какую Map вы будете использовать, если нужна последовательность элементов, если нужен многопоточный доступ к элементам?
8633.3. List
8643.3.1. Какие списки вы знаете?
8653.3.2. В каких случаях вы будете использовать LinkedList?
8663.4. Concurrency collections
8673.4.1. Какие коллекции поддерживают доступ множествам потоков?
8683.4.2. Какой список лучше использовать при многопоточном доступе?
8693.4.3. Какие подходы используются в коллекциях для многопоточного доступа/редактирования?
8703.5. Что делать, чтобы не возникло исключение ConcurrentModificationException?
8714. Исключения (exceptions)
8724.1. Назовите иерархию исключений в java, в чем разница между Error и Exception?
8734.2. В чем особенность RuntimeException?
8744.3. Как написать собственное (“пользовательское”) исключение? Какими мотивами вы будете руководствоваться при выборе типа исключения: checked/unchecked?
8754.4. Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?
8765. Шаблоны проектирования
8775.1. Какие шаблоны проектирования вы знаете?
8785.2. Назовите порождающие (создающие) шаблоны и кратко их опишите?
8796. Для чего нужен Spring, основные принципы.
8806.1. Какие компоненты Spring вы использовали?
8816.2. Приведите пример часто используемых аннотаций Spring?
8826.3. Что вы понимаете под Dependency Injection (DI)?
8836.4. Что такое связывание в Spring и расскажите об аннотации @Autowired?
8846.5. Какая разница между аннотациями @Component, @Repository и @Service в Spring?
8856.6. Расскажите о Spring Security.
8867. Hibernate
8877.1. Для чего нужен Hibernate?
8887.2. Для чего нужна аннотация fetchType, как работает LAZY инициализация объекта?
8897.3. Как работает генератор ключа для Entity?
8907.4. Почему мы не должны делать Entity class как final?
8917.5. Что вы знаете о кэширование в Hibernate. Объясните понятие кэш первого уровня в Hibernate?
8927.6. Как управлять транзакциями с помощью Hibernate?
8937.7. Что такое каскадные связи (обновления) и какие каскадные типы есть в Hibernate?
8947.8. Что такое Criteria API и для чего он используется?
8957.9. Как замапить классы Животное, Кошка, Собака. Какую стратегию нужно выбрать в зависимости от данных и задачи. Что такое Mapped Superclass?
8967.10. Как можно отслеживать изменения объектов в БД с помощью Hibernate?
897
898
8991. Из чего состоит Java?
9002. Типы данных в Java
9013. Если примитивы в Java такие офигенные, зачем нам ссылочные типы и объекты?
9024. Как работают примитивные и ссылочные типы в памяти. Как работают в методах. Передача по значению и по ссылке
9035. Что такое конструктор? Можно ли создать несколько конструкторов? Что такое конструктор по умолчанию?
9046. Перегрузка методов
9057. Что такое ООП? Подробнее про полиморфизм, инкапсуляцию, наследование. Примеры из реальной жизни
9068. Что такое классы - обертки? Зачем они нужны? Для чего используются (Integer = int и тд)
9079. Автоупаковка и автораспаковка
90810. Массивы. Особенности массивов
90911. Переопределение методов.
91012. Может ли потомок, переопределив метод, расширить его область видимости? Например родитель protected, потомок public? Можно ли наоборот?
91113. Исключения. Описать иерархию исключений
91214. Проверяемые и непроверяемые (checked и unchecked), подробное объяснение
91315. Рассказать про Error
91416. Можно ли создать свой собственный класс исключения? Как это все организовать? От каких классов можно в этом случае наследоваться?
91517. Рассказать как обрабатывать исключение. Может ли catch словить любое исключение? Хорошо это или плохо? Может ли быть несколько блоков catch?
91618. Рассказать про finally
91719. Что будет, если в блоке try, catch и finally выбрасывается исключение? какое последнее будет обработано? как это будет все происходить и идти. Например:
918try {
919 trow исключение;
920} catch (.....) {
921 trow исключение;
922} finally {
923 trow исключение;
924}
925
92620. Строки. Какие классы строк есть, в чем их особенность
92721. System.out.println ("A" + "B"); Сколько строк будет создано в памяти? Почему?
92822. Когда лучше использовать StringBuilder и StringBuffer
92923. Рассказать про Object. Какие методы в нем есть. Рассказать про каждый метод. Можно ли создать экземпляр класса Object
93024. Абстрактные классы и интерфейсы. Особенности, различия. Можно ли имплементить несколько интерфейсов? Можно ли наследоваться от нескольких классов
93125. Абстрактные методы. Обязательно ли потомку переопределять абстрактные методы? Когда этого можно не делать?
93226. Особенности интерфейсов в Java 8
93327. Коллекции. Описать иерархию. Что на самой вершине, почему Map отдельно? В чем разница между коллекциями и массивами?
93428. Рассказать про Map. Как он работает? Как определяет уникальный ключ? Какой метод вызывает?
93529. Рассказать про List. Как реализован внутри. Какие самые используемые классы у List?
93630. В чем разница между LinkedList и ArrayList? Как внутри реализован LinkedList? Как внутри реализован ArrayList? Когда лучше подходит каждый из них?
93731. Рассказать про Set. Особенности, отличия от List
93832. Как сделать коллекцию синхронизированной? Какие есть устаревшие коллекции?
93933. Рассказать про рефлексию
94034. Многопоточность. Рассказать про семафор и deadlock. Как приостановить и остановить поток.
94135. В чем разница между final, finally(), finalize()?
94236. SQL. Узнают сперва на каком уровне знаешь. Просили рассказать про Join, как он работает и про DML, DDL.
943
944
945
946
9470. Как называется класс Child? Как создать экземпляр этого класса в статическом методе main.
948
949public class Parent {
950 class Child {}
951 public static void main() {
952 Child child = ...; // как тут создать экземпляр Child?
953 }
954}
955
956
957
9581. Что будет выведено на печать?
959
960
9612. Виды Exceptions. Что такое checled и unchecked?
9623. Виды коллекций.
9634. Как работают Set, List, Map?
9645. Отличия между LinkedList и ArrayList.
9656. Отличия между Set и LinkedList.
9667. Что будет, если в Set и List добавить по два одинаковых элемента?
9678. Отличия между HashMap и и TreeMap.
9689. Что нужно сделать, чтобы созданный самим объект использовать в качестве ключа HashMap?
96910. Для чего нужно переопределять методы hash и equals?
97011. Как работает try with resources?
97112. Что вернёт функция и почему?
972
973
97413. Что такое String, StringBuffer, StringBuilder?
97514. Какими способами можно создать и запустить поток?
97615. Суть интерфейса Callable.
97716. Как остановить поток?
97817. Проблемы многопоточности.
97918. Какие приходилось решать задачи с многопоточностью?
98019. Для чего служит модификатор volatile?
98120. Написать реализацию синглтона с синхронизированной инициализацией.
98221. Как создать servlet?
98322. С какими модулями спринга работал?
98423. Как в спринге создать свой контроллер?
98524. Суть MVC.
98625. Есть две таблицы. Написать для Hibernate класс, на который будут мапиться данные из
987таблицы book:
988
989
99026. С какой версией спринга работал?
99127. Что такое Bean? Чем отличается от других объектов?
99228. Какими способами можно объявить Bean в спринге?
99329. В чём суть IoC?
99430. В чём суть DI?
99531. Как реализуется внедрение зависимостей?
99632. Есть два бина от одного интерфейса. Как конкретизировать, какой бин нужно инжектить?
99733. Что такое DispatcherServlet в спринге?
99834. Что такое servlet?
99935. С какими технологиями хотелось бы работать, что-то новое изучить?
1000
1001
1002
1003
1004Список материалов которыми надо уверенно владеть для успешного владения интервью:
1005
10061. Принципы ООП, как реализована инкапсуляция в Java
10072. Модификаторы доступа
10083. Принципы SOLID
10094. Опигите примитивные типы java
10105. Классы внутренние, вложенные
10116. Замыкания
10127. Методы класса Object
10138. Иерархия коллекций
10149. Отличие Set от List, приведите примеры реализаций
101510. Когда имеет смысл использовать LinkedList вместо ArrayList?
101611. Устройство HashMap
101712. Особенности Java 8
101813. Зачем нужны лямбды?
101914. Зачем нужны исключения?
102015. Назовите паттерны проектирования, которые вы использовали
102116. Scope'ы бинов в Spring'e
102217. Какие книги читали по Java?
102318. Как работает сборщик мусора в Java? Можно ли вызвать сборку мусора.
102419. Как устроена память в Java?
102520. Что такое happens-before? Приведите примеры.
102621. Что такое deadlock? Как его избежать?
102722. ЧТо такое состояние гонок?
102823. Что такое Executor'ы? Зачем они нужны?
102924. В чем отличия между equals и ==? Контракты по equals и hashcode.
103025. Что такое дерево? Можно ли сделать так, чтобы обычное двоичное дерево выродилось в связный список?
103126. Какие есть способны конфигурирования ApplicationContext Spring'a.
103227. Принципы организации многопоточности в java
103328. SQL
1034
1035Вопросы по JS:
10361. В чем отличие между == и ===
10372. Что происходит при, например, 1 == "1"
10383. Как добавить метод к объекту?
10394. Как реализовано наследование?
10405. Что такое promise?
10416. С какими фреймворками JS работали?
1042
1043
1044Примитивные типы Java
1045____________________________
1046byte - 1 байт (8 бит). Мин -2^7 макс 2^7-1
1047short - 2 байта (16 бит). Мин -2^15 Макс 2^15-1
1048char - 2 байта (16 бит). 2^16-1
1049int - 4 байта (32 бит). Мин -2^31-1 Макс 2^31
1050long - 8 байт (64 бит). Мин -2^63-1 Макс 2^63
1051float - 4 байта (32 бит). Мин -2^31-1 Макс 2^31
1052double - 8 байт (64 бит). Мин -2^63-1 Макс 2^63
1053boolean - по спецификации не определен в среднем 1 байт
1054
1055XML
1056________
10571. DOM - обход XML документа в оба направления, грузит весь документ в память подходит для небольших файлов
10582. Stax - Событийный, грузит документ частями, подходит для мелких документов. Работает по пул модели. Позволяет обрабатывать только те события которые нам необходимы. Позволяет писать в XML файл.
10593. Sax - Событийный, грузит документ частями, позволяет работать с большими документам, работает по пуш модели необходимо обрабатывать все события.
1060
1061
1062SOLID
1063_______
10641. S - Принцип единственной ответственности. Каждый класс должен отвечать за одну определенную роль в программе.
10652. O - Принцип открытости закрытости. Класс должен быть открыт для расширения и закрыт для изменения.
10663. L - Принцип подстановки Барбары Лисков. Объекты должны быть заменяемые на экземпляры их подтипов.
10674. I - Принцип разделения интерфейса. Много интерфейсов специального назначения лучше, чем один интерфейс общего назначения.
10685. D - Принцип подстановки зависимостей. Зависимость на абстракцию. Нету зависимости на конкретную реализацию.
1069
1070EQUALS/HASHCODE
1071____________________
1072Метод equals() обозначает отношение эквивалентности объектов. Эквивалентным называется отношение, которое является симметричным, транзитивным, рефлексивным и постоянным.
10731. Рефлексивность: для любого ненулевого x, x.equals(x) вернет true;
10742. Транзитивность: для любого ненулевого x, y и z, если x.equals(y) и y.eqals(z) вернет true, тогда и x.equals(z) вернет true;
10753. Постоянство: для любых объектов x и y x.equals(y) возвращает одно и тоже, если информация, используемая в сравнениях, не меняется;
10764. Симметричность: для любого ненулевого x и y, x.equals(y) должно вернуть true, тогда и только тогда, когда y.equals(x) вернет true.
1077
1078Метод хешкод
1079Если хешкод двух объектов равен - это не значит что 2 объекта равны по equals
1080Если хешкод двух объектов не равен - значит объекты не равны по equals
1081
1082
1083Serializable/Externalizable
1084_____________________________
1085Интерфейс маркер Serializable. Для записи обьекта используется ObjectOutputStream с private методом writeObject() для чтения ObjectInputStream с методом private readObject()
1086Thread, OutputStream и его подклассы, и Socket - не сериализуемые
1087Transient - помечает объект который сериализовать не нужно.
1088Если мы не хотим сериализовать наследника чей супер класс помечен Serializable то в этом наследнике переопределив методы writeObject() и readObject() кидаем throw new NotSerializableException();
1089
1090Интерфейс Externalizable содержит 2 метода
1091public void writeExternal(ObjectOutput out) throws IOException;
1092public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
1093serialVersionUID - версионность сериализованного объекта (например избавляет от проблемы когда добавил новое поле, пытаемся десериализовать данный объект из сохраненного ранее состояния и получаем InvalidClassException)
1094http://www.skipy.ru/technics/serialization.html - почитать
1095
1096Транзакции
1097___________________
1098ACID принципы
10991. Атомарность - Все операции либо будут выполнены вместе либо не выполнены вообще.
11002. Консистентность - После коммита в БД сохраняются все изменения.
11013. Изолированность - Изоляция от внешних воздействий / паралельных транзакций.
11024. Надежность - Даже после выключения света все данные останутся в БД
1103
1104Феномены чтения
1105Unrepeatable read(Неповторяемость чтения) - Ситуация когда транзакция которая уже получила данные видит уже измененные данные другой транзакции при повторном запросе
1106Фантомное чтение - Ситуация, когда при повторном чтении в рамках одной транзакции одна и та же выборка дает разные множества строк.
1107Грязное чтение - Чтение/Добавление/Изменение данных транзакции которая откатиться
1108
1109Уровни изоляций
1110Read-uncommited - Чтение незафиксированных данных
1111Read-commited - Чтение зафиксированных данных
1112Repetable-read - Повторяемость чтения
1113Serializable - Упорядочиваемость. Самый медленный спасает от всех проблем
1114https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D1%8F_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0) - читать
1115
1116
1117Servlet API - спецификация java расширяющая возможности сервлет контейнера позволяющая обрабатывать HTTP запросы клиента
1118_______________
1119жизненный цикл сервлета состоит из следующих шагов:
1120
1121В случае отсутствия сервлета в контейнере.
1122Класс сервлета загружается контейнером.
1123Контейнер создает экземпляр класса сервлета.
1124Контейнер вызывает метод init().
1125Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы.
1126За весь жизненный цикл метод init() вызывается только один раз.
1127Обслуживание клиентского запроса. Каждый запрос обрабатывается в своем отдельном потоке.
1128Контейнер вызывает метод service() для каждого запроса.
1129Этот метод определяет тип пришедшего запроса и распределяет его в соответствующий этому типу метод для обработки запроса.
1130Разработчик сервлета должен предоставить реализацию для этих методов.
1131Если поступил запрос, метод для которого не реализован, вызывается метод родительского класса и обычно завершается возвращением ошибки инициатору запроса.
1132В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy(), который снимает сервлет из эксплуатации. Подобно методу init(), этот метод тоже вызывается единожды за весь цикл сервлета.
1133
1134loadOnStartUp в web.xml
1135также Сервлет АПИ поддерживает фильтры(метод doFilter) и слушатели событий
1136
1137
1138Java Server Pages - спецификация
1139______________________
1140Технология позволяющая веб-разработчикам создавать содержимое, которое имеет как статические так и динамические компоненты
1141Код JSP в рантайме компилируется в обычный Servlet а потом джава машина его компилирует в байт код
1142Внутри JSP можно использовать EL/Скриплеты/taglibs для написание кода
1143
1144
1145Spring Framework
1146__________________________
1147CORE
1148Фреймворк для упрощения разработки энтерпрайз приложений. Построен на принцип IOC (Инверсии управления) Использует для этого контейнер джава бинов. Джава бин класс жизненным циклом которого управляет спринг.
1149Также спринг использует подход DI Внедрение зависимости используются аннотации @Authowired внедрять можно на поля сеттеры конструкторы / аннотации наследники @Component (@Service / @Repository / @Controller)
1150Также используются и другие аннотации например @Qualifier для уточнения реализации которую необходимо внедрить
1151У спринг бинов существуют следующие скоупы:
11521. Singleton - Возвращает один и тот же экземляр бина на каждый запрос контейнера Spring IoC (по умолчанию).
11532. Prototype - Создает и возвращает новый экземляр бина на каждый запрос.
11543. Request - Создает и возвращает экземляр бина на каждый HTTP запрос*.
11554. Session - Создает и возвращает экземляр бина для каждой HTTP сессии*.
11565. Global-session - Создает и возвращает экземляр бина для глобальной HTTP сессии*.
1157гуглим документацию и погружаемся
1158
1159
1160Spring MVC
1161_____________
1162DispatcherServlet - основной контроллер фреймворка отвечающий за мапинг запросов на методы контроллеров
1163Основные используемые аннотации @RestController / @Controller
1164@RequestMapping
1165@RequestBody
1166@ResponceBody
1167@PathVariable
1168@RequestParam
1169Погуглить что это за аннотации и понимать для чего используются
1170гуглим документацию и погружаемся
1171
1172
1173SQL
1174_______________
1175Почитать про основные команды, оптимизацию запросов и джойны таблиц
1176https://ru.wikipedia.org/wiki/Join_(SQL) - читать
1177
1178
1179JPA
1180_______________
1181Основные аннотации @Entity @Column @Table @Embedable @MappedSupperClass @Id @ManyToMany @ManyToOne @OneToMany
1182EntityManager - интерфейс содержащий основные операции над сущностями (persist / refresh / detach/ remove / merge)
1183
1184http://www.spring-source.ru/docs_simple.php?type=manual&theme=docs_simple&docs_simple=chap03_p01 - почитать основные понятия
1185http://www.spring-source.ru/docs_simple.php?type=manual&theme=docs_simple&docs_simple=chap04_p08 - почитать про наследование таблиц
1186гуглим документацию и погружаемся
1187
1188Многопоточность
1189_________________
1190Понимать многопоточность. Блоки синхронизации, мониторы, проблемы многопоточности(дедлоки, рейс кондишен, свич контекст как их избежать), а также понимать как устроен пакет канкаренси
1191https://habrahabr.ru/post/164487/ - читать
1192https://habrahabr.ru/company/luxoft/blog/157273/ - читать
1193
1194
1195JMM
1196_______________
1197Понимать как устроена работа с памятью в Java
1198https://habrahabr.ru/post/84165/ - читать
1199https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8_Java - читать
1200
1201
1202Коллекции
1203_____________
1204Знать как устроенны коллекции, их иерархия и скорость работы в зависимости от условий
1205https://habrahabr.ru/post/237043/ - читаем
1206http://www.quizful.net/post/Java-Collections - читаем
1207https://habrahabr.ru/post/162017/ - читаем
1208
1209
1210Дополнительно:
1211
12121)Способы аутентификации пользователя
1213https://habrahabr.ru/company/dataart/blog/262817/
1214
12152)Паттерны
1216https://ru.wikipedia.org/wiki/Design_Patterns
1217
12183)Многопоточность в java
1219https://habrahabr.ru/post/108016/
1220https://habrahabr.ru/post/164487/
1221
12224)Написать реализацию паттерна Singleton
1223https://habrahabr.ru/post/129494/
1224
1225
12265)
1227Бинарные деревья
1228https://habrahabr.ru/post/144850/
1229https://habrahabr.ru/post/65617/
1230http://www.quizful.net/post/Java-TreeMap
1231
12326)
1233Вопрос на сообразительность:
1234http://www.programbeginner.ru/?p=99
1235
12367)
1237Hibernate:
1238http://javastudy.ru/interview/jee-hibernate-questions-answers/ ()
1239
12408)
1241How to define immutable object:
1242https://docs.oracle.com/javase/tutorial/essential/concurrency/imstrat.html
1243
12449)
1245Abstract Factory vs factory method
1246https://dzone.com/articles/factory-method-vs-abstract
1247
1248SPRING-CORE, AOP and MVC(DispatcherServlet - how to work)
1249
1250
1251
12521. Контракт equals и hashcode. Что будет если переопределить hashcode - return 1;
1253
12542.
1255Что будет на печати:
1256Integer a = null;
1257if (a != null & a.toString().equals("1")) {
1258System.out.println("1");
1259} else {
1260System.out.println("a is null");
1261}
1262
12633. Почему метод main - static. Что такое args в сигнатуре метода main.
1264
12654. Рассказать, что знаю про Class Loader Java.
1266
12675. Написать простую реализацию Linked List и метод, который повернёт этот лист задом наперёд.
1268
12696. Найти ошибки в коде, в котором нет ошибок:
1270public String join(Collection<String> collection, String between) {
1271 if (collection == null || collection.isEmpty()) {
1272 return "";
1273 } else {
1274 String b = (between == null) ? "" : between;
1275 Iterator<String> iterator = collection.iterator();
1276 StringBuilder builder = new StringBuilder(iterator.next());
1277 while (iterator.hasNext()) {
1278 builder.append(b).append(iterator.next());
1279 }
1280 return builder.toString();
1281 }
1282 }