Основы Java, коллекции, OOP, лямбды, иммутабельность

Основы Java, коллекции, OOP, лямбды, иммутабельность #


1. HashMap расширилась. Добавили в неё 13 элементов, потом удалили 2 что произойдет? #

2. В HashMap вставляем 10 тыс. ключ-значений, это все разные объекты. Как сделать так, что с вероятностью 99% мы получили значение по ключу за константное время? - один вариант: сразу создать очень большую мапу 10 млрд значений #

3. Какие коллекции позволяют дублировать, какие не позволяют? #

4. Переменная не помечена словом final, но изменяться она не может? #

5. Хорошо ли делать длинную цепочку наследования на классах? #

6. Есть класс, у которого 2 поля int и java.util.date. Как сделать immutable class из этого? #

7. Есть key, value. Программист создает Map с дженериками, где key - собственный класс, а value - string. Что ему нужно сделать, чтобы использовать key? #

8. Есть список из 10 объектов. Делаю стрим map, filter, и другие нетерминальные операции. Сохраняю ссылку на стрим. Потом добавлю новые объекты в список. В самом конце, беру ссылку на стрим, вызываю терминальную операцию toList(). Какое количество объектов стрим обработает: изначальное или новое? Или ошибка? #

9. Я использую массив в качестве ключа для HashMap. Во время код-ревью что вы мне скажете? #

10. В таблице первичный ключ Х, но нужно искать не по Х, а по У. Когда грузишь мапу, что ты можешь сделать, чтобы ключь стал другим в мапе, но ты не потеряешь данные? Зачем я могу это делать? #

11. Компилятор требует при использовании лямбды выражения либо final, либо effectively final? #

12. Ты передаешь переменные. Параметры через конструктор. Они объявлены как final. Это иммутабельность? #

13. У класса переопределили метод. Как вызвать метод предка из переопределенного класса? Представим, что метод приватный. #

14. Создал иммутабельный класс, в нем 10 полей, хочу использовать свой класс как ключ в HashMap. Что делать? #

15. Объект типа User с двумя полями String firstName, String lastName, без реализации hashCode(). Объекты User используются в качестве ключей в HashMap. Сначала записали в HashMap с ключом user1. Потом создали user2 с такими же firstName, lastName, пробуем по ключу user2 вытащить из HashMap данные. Что будет? #

16. Сможет ли сборщик мусора удалить два объекта ссылающиеся друг на друга? #

17. Если в интерфейсе есть один дефолтный метод, то его можно использовать как функциональный интерфейс? #

18. Если мы переопределяем поведение родительского метода, можем ли мы изменить тип исключения, которое выбрасывает родительское? #

19. Предположим у тебя есть объект, который представляет собой List листов стрингов. С помощью Stream API тебе надо найти String с наибольшей длиной #

20. Статический блок, переменная статическая не final, она проинициализирована в блоке инициализации и в самом поле. Какое значение переменная примет? #

21. Берем не final переменную. Инициализируем переменную через поле и через конструктор. Какое значение переменная примет? #

22. Есть три способа пройтись по коллекции. Расскажи про них и какой в каком случае использовать? #

23. Что будет если на вход map() и flatMap() приходит null #

24. Как скопировать объект? Сделать копию объекта #

25. Есть ArrayList на 10 элементов. Хочу получить доступ к пятому элементу. Почему доступ будет O(1)? Как сработает доступ по индексу? Если в ArrayList лежат strings? #

26. Хочу создать LinkedList из strings. Где будут лежать strings? #

27. У нас есть некий объект Юзер. Есть три параметра. Как инкапсулировать параметры? #

28. Есть класс Parent и от него наследуется класс Child. В Parent есть три метода. Как нам реализовать методы, чтобы ими могли пользоваться только наследуемые. #

29. Есть класс внутри которого находится статический параметр. Если я создам 50 инстансов этого класса и буду менять этот статический параметр, то что будет? #

30. Создал Stream. Произвел операцию. Смогу ли я обратиться к этому стриму еще раз? #

31. Нужно от сортировать List с какими то классами. Стринговыми юзерами. а стринговые юзеры они храняться в пакете который мы получили из мавена. Что тут лучше использовать? #

32. Если мы напишем stream.filter.filter.filter что произойдет? #

33. Как на практике проверить, что вместо родителя можно подставить наследника? #

34. С чего начинается поиск ресурсов для удаления GC. Как GC ищет первые ссылки для удаления? #

35. Представим, что у нас есть приложение, которое нормально обрабатывает 100 RPS. Жрет 250 мб оперативки. Мы захотели его ускорить и выдали ему 32 гб оперативки. Дадим на него теже 100 RPS. Измениться ли профиль ответа? Ускориться ли работа? Как будет наполняться Heap? #

36. Как можно сравнить объекты между собой кроме equals и hashcode #

37. Есть два класса. Один класс используется как ключ для мапы, другой класс используется только для значений в мапе. Как ты будешь реализовывать контракт hashCode и equals в этих классах #

38. TreeSet. Есть элементы от 0 до n. Начинаю последовательно вставлять в TreeSet. Какая будет высота дерева? #

39. Есть список состоящий из одного миллиона объектов. Нужно отыскать все дубликаты использую минимальный объем памяти #

40. Есть класс User. Внутри есть поле класса Address. В классе Address есть поле класса Building. Хочу по user получить номер здания, в котором живет. В этой цепочке всё может быть Null. Мы не хотим NullPointerException. Как это сделать? Какой уникальный безопасный метод нужно создать? #

41. Если в кетч поймали исключение, начали обрабатывать и словили еще одно исключение. Что будет? #

42. Что можно сделать с List, но нельзя сделать с Queue #

43. Как сделать копию объекта не используя стандартные методы? #

44. Предположим у нас есть лист Юзеров. У Юзера есть логин. Как преобразовать лист в мапу, где ключ будет логин, а значение будет Юзер. #

45. Есть бинарное дерево упорядоченное слево на право. Есть ссылка на корень дерева. Нужно вывести все элементы дерева в порядке возрастания. #

46. Предположим есть обхект, который представляет собой List<List>. С помощью Stream нужно найти String с наибольшей длиной #

47. Тебе с фронтенда приходит enum. Тебе надо сравнить два enum. Что ты будешь использовать? equals или == и почему? #

48. Нужно List превратить в List. Что используешь для задачи перегнать один тип объектов в другой? Классический цикл или Java Stream API? #

49. Я создал интерфейс там есть абстрактный метод и дефолтный метод. Это будет являться функциональным интерфейсом? #

50. We have a large text file, we want to count all the words. What Java collection you will use? #

51. We have a list of Strings. There are some duplicates. How to remove duplicates without loops and if statements? #

52. Есть код, написанный на Java. Какие этапы он проходит перед тем, как он будет исполнен на машине? И что происходит при исполнении на машине? #

53. Есть наш класс, в котором переопределили hashCode() так, что каждый раз возвращается новое рандомное значение (return Random.nextInt()). Мы параметризовали этим классом HashSet. Изменится ли сложность contains() у HashSet? Как будет работать HashSet? #

54. Нужно реализовать энциклопедию: книжка, в которой написаны слова и их значения. Все слова упорядочены по алфавиту. Какую структуру, структуры данных ты бы использовал? #

55. I put a key-value pair into the HashMap. Then another key (different from the first key) generates the same hashcode. What is the HashMap next scenario? #

56. I’ve created final HashMap. Can I change elements of HashMap? #

57. А как сделать, чтобы при получении ссылочного типа через getter я не мог его изменять внутри? #

58. Ты создал параметризованный класс. Потом ты где-то в коде насоздавал этих классов, параметризованных разными классами. В Runtime все эти классы будут разными? #

59. Открываем ресурс в конструкции try-with-resources. В логическом блоке вылетело исключение. Ресурс будет закрываться, но процессе закрытия что-то произошло с сетью и тоже вылетело исключение. Ресурс закроется? #

60. Пишем Generic List. Что это будет значить? Какие объекты можем положить в этот лист? #

61. Есть Pair a и Pair b. Содержимое одинаковое. Ты сравниваешь через равно, через тройное равно, через equals(). Какие результаты будут? Как в ключевом слове record? #

62. Создашь переменную внутри цикла. Что с ней произойдет в Куче, после того, как одна итерация цикла пройдет? Когда она вычистится? #

63. Мы делаем много вставок в конец ArrayList. Иногда хватает места, иногда не хватает, приходится расширяться. Какая средняя сложность операции? Чаще встречается плохой сценарий, когда надо расширяться? #

64. Есть два списка очень больших, с млн элементов в каждом. ArrayList и LinkedList. Мы просто итерируемся foreach по каждому. Где быстрее процедура итерации? #

65. Хотим использовать как ключ HashMap свой класс иммутабельный. В классе очень много полей 20-30, многие из них опциональные. Я не хочу создавать поля через конструктор объекта. Какую более удачную конструкцию можешь предложить для создания иммутабельных объектов с кучей опциональных полей? #

66. Есть интерфейс. В нем один метод. В сигнатуре метода я не написал, что он кидает какие-либо исключения. Реализую этот интерфейс, хочу из этого метода кинуть проверяемое исключение. Могу ли я так сделать? #

67. В TreeMap 100 элементов. Сколько там будет сравнений, сколько проходов в худшем случае, пока он не найдет элемент? #

68. Ситуация с двумя списками: ArrayList vs LinkedList. Элементы одинаковые. Ты постоянно добавляешь элемент в конец каждого списка. И итерируешься полностью по листу. Что будет быстрее отрабатывать? #

69. List очень большой, а памяти очень мало. На копирование даже половины исходного списка не хватит. Как с этим побороться? #

70. Что будет быстрее работать при операции сложения: два int или два Integer? #

71. Есть функция, которая складывает два числа. Сначала ее сигнатура: передаем в нее два int, возвращает она тоже int. Потом заменили все эти int на Integer. Это корректная замена? Какие проблемы, ошибки могут быть? #

72. Есть список с объектами - геометрическими фигурами. У них есть свойство цвет. Надо из списка с помощью Stream API получить только зеленые фигуры. Как это сделать? Усложнение ситуации. На выходе нужно получить Map, у которой ключ это цвет, а значение это список фигур такого цвета #

73. Как найти последний элемент стрима? Сколько всего элементов заранее не известно #

74. Объявили переменную типа int count. Потом есть стрим и в нем есть метод map(). И в методе map() мы инкрементим count переменную, чтобы посчитать количество вызовов map(). Можно ли так сделать? #

75. ArrayList с capacity 20. Я уже вставил 3 элемента. Потом вставляю четвертый элемент посерединке. Будет ли расширение ArrayList? #

76. Создали HashMap. У нее 16 бакетов. Хотим вставить элемент. Посчитали его hashCode(), получили число 1024. Что дальше? Следующий элемент тоже имеет hashCode() 1024? Следующий элемент имеет hashCode() 1025, в какой бакет? Бакеты будут создаваться до бесконечности? Как буду складывать на основе hashCode() в бакеты, если в hashCode() элементов намного больше, чем 16 бакетов? #

77. Есть наш класс, он в jar файле. jar с классом добавлен в classpath в явном виде. Какой жизненный цикл при старте JVM проходит наш класс? #

78. Есть объекты A и B. Из A есть ссылка на B, из B есть ссылка на A. Больше на эти объекты никто не ссылается. Будет ли такая пара собрана GC? #

79. Есть стек вызова потока. Там указана точка возврата, точка входа в метод. Что-нибудь еще на стеке есть в это время? #

80. Есть объект, просто new Object(). У него я вызвал hashCode(). Потом прошла сборка GC, переместила объект между поколениями, по хипу перемещала. И потом я еще раз вызвал hashCode(). Он вернется такой же или изменится? #

81. Если GC переместил объект в памяти, ссылка на объект меняется, но hashCode объекта не должен меняться. Как это происходит? #

82. Пишешь программу. Унаследовался от какого-то класса. И тебе надо получить доступ к приватному полю или приватному методу у родительского класса. Какие варианты есть? #

83. Есть 2 интерфейса, их оба наследует наш класс. У этих интерфейсов есть дефолтные методы с одинаковым названием и сигнатурой. Метод void apply(). Как на экземпляре нашего класса вызвать конкретный метод apply() конкретного интерфейса? #

84. Как трансформировать Set mySet в List myList = mySet с помощью стримов? #

85. Вы пишете код. У вас есть валидация. Вам нужно создать свое собственное исключение. Какое будете создавать? Проверяемое или нет? Критерии выбора #

86. Есть SQLException - он проверяемый, а HibernateException почему-то не проверяемый. По сути одно и тоже. Почему так сделано #

87. Immutability. We have an Employee object with List of departments inside it. What should we do to make Employee object immutable? The list of departments is set through the construction of the Employee object #

88. We have an Employee object. We want to put it to the TreeSet. How Java knows what is the correct order of Employee objects? #

89. StreamAPI. Есть терминальные операции findFirst() и findAny(). Если у тебя Array, ты сделал Stream. Сначала сделал findFirst(), а потом сделал findAny() - всегда будет возвращать одно и то же? Или разное? #

90. Есть список lst из Integer-ов (1, 2, 3, 4, 5). Я сделал два стрима lst.stream().findFirst() и lst.stream().findAny(). Могу я быть уверенным, что вернет одно и то же? Странно, если рандомно findAny() выводит #

91. Есть время заказа, какой бы тип ты выбрал: LocalDateTime или ZonedDateTime? #

92. В стримах есть метод findFirst(), он находит первый элемент в стриме. А как бы ты реализовал поиск последнего элемента в стриме? #

93. Есть классическое консольное приложение. Мы добавили 1 млн примитивных объектов в это приложение. Мы хотим очень часто (200 раз в сек.) делать операции contains(), чтобы просто получать результат True или False, и выводить на консоль. Нас интересует только скорость работы contains(), чтобы он работал как можно быстрее. Что лучше выбрать в этой ситуации: ArrayList или LinkedList? #

94. Вставили в HashSet 1 млн уникальных объектов, они успешно вставились. Но мы реализовали hash функцию, которая всегда возвращает 1. Какой сложности будет операция contains() в этом случае? #

95. Добавили в TreeSet 1 млн объектов, при условии, что каждый новый добавляемый объект больше предыдущего. Какая будет эффективность contains()? #

96. Ты пишешь свой микросервис. В нем надо реализовать 10 кастомных исключений. У тебя возникает вопрос: сделать их Checked или Unchecked? Как поступишь? Где перехватывать родителя исключений будешь? #