Ръководство за бъдещия Java разработчик. Интервю и кариера. Интервюта с Java разработчици в средната част на Java Интервю с често задавани въпроси

Преместих се в друг град, намирам си работа, ходя на интервюта. Стори ми се, че въпросите, които се задават там, макар и известни, въпреки това, събрани заедно, могат да помогнат за подготовката и да се почувствате по-уверени.

Въпроси за разбиране на принципите на изграждане на СУБД.
1. Каква е първата нормална форма и процес на нормализиране? Какви са нормалните форми?
2. Какво е значението на индекса на СУБД, как са подредени, как се съхраняват? Как бихте приложили същата функционалност? Последният въпрос се задава, ако няма ясно разбиране на индексите.
3. Начертайте връзка много към много. Например: таблици Автори и Книги. Един автор може да има няколко книги и една книга може да бъде написана от няколко автора. Съставете SQL заявка, за да изберете книги от конкретен автор.

Основни въпроси за Java.
4. Известно е, че основният клас в Java е Object. Какви методи можете да назовете?
5. Кажете ни какво представляват equals и hashCode? Какви правила и конвенции съществуват за прилагането на тези методи? Кога се прилагат?
6. Разкажете ни за методите за чакане, уведомяване, уведомяване за всички. Как се използват, кога, защо са необходими? Какво е синхронизирано?
7. Какво е финализиране? Защо е необходимо? Какво можете да кажете за колектора за боклук и неговите алгоритми.
8. Защо методът на клонирането е деклариран като защитен? Какво е необходимо за прилагане на клониране?
9. Какви са модификаторите (достъп и други)? Какво е променливо и преходно? За какво и в какви случаи би било възможно да се използва по подразбиране?

Java Collection Framework
10. Какви са интерфейсите за колекция в Java? Обяснете как се различават.
11. Какви реализации на тези интерфейси познавате?
12. Каква е разликата между ArrayList и LinkedList. Как са подредени? Кога трябва да се използват.
13. Каква е разликата между HashMap и TreeMap? Как са настроени и как работят? Какво с времето на достъп до обектите, какви зависимости?
14. Какво е Hashtable, с какво се различава от HashMap? Към днешна дата тя е остаряла, как все още използвате желаната функционалност?

Изключения
15. Какво е изключение? Какви видове изключения познавате, как се различават?
16. Може ли да се предложи пъзел с блокове try-catch-finally и въпросът какво ще бъде върнато или какво изключение в крайна сметка ще бъде пропуснато?

Алгоритми
17. Какви алгоритми за сортиране познавате? Какви алгоритми познавате?
Освен това тук са възможни различни допълнителни въпроси относно оценката на сложността на алгоритмите, тяхното сравнение един с друг.

Дизайнерски модели.
18. Запознати ли сте с някакви модели на дизайн?
19. Напишете Singleton... И с мързеливо зареждане. Ами ако трябва да е безопасен за нишки? Кога мързеливото зареждане е по-лошо?
20. Какво можете да кажете за MVC? Начертайте диаграма и обяснете как работи MVC.

Поредица от въпроси за разбиране на технологичния пакет J2EE.
21. Каква е разликата между сървлет, jsp?
22. Какво е Ajax? Как е фундаментално устроена тази технология?
23. Какво е ORM, как може да бъде преведен и как трябва да работи?

Прости задачи за писане на алгоритми.
24. Напишете функция за изчисляване на факториала.
25. При дадена функция за изчисляване на числата на Фибоначи е известно, че тя работи. Намерете логическата грешка. Оценете сложността на получения алгоритъм.
26. Обърнете низа.
27. Изчислете средната стойност на масива.

Полезно е да запомните, че когато не се чувствате много уверени, не е нужно да казвате допълнителни думи. Казваш допълнителна дума и те се вкопчват в нея, развиват веригата. Те рекламират неща, в които не са много сигурни. Тази способност на хората - да се вкопчват - трябва да се използва, но във ваша полза ;-)

Знанието и разбирането... нещата са доста различни, така че
- различни алгоритми, като сортиране, трябва да се напишат сами, дори и от учебник. Вижте как се различават един от друг, сравнете тяхната сложност.
- полезно е да разгледате различни помощни програми и библиотеки, принципите на групиране на класове в пакети и стила на писане на код, коментиране. Може да помогне много в разбирането на модификаторите на достъп, организацията на проекта.
- разбирайки нещо конкретно, можете да помогнете на тези, които знаят по-малко. Отидете на всеки форум и се опитайте да отговорите на въпроси, които ви интересуват по темата. В дискусията можете да вземете нещо за себе си. Можете да напишете кратка статия. Разбира се, трябва да разберете добре темата.
Всяка работа, насочена към повишаване на собствената квалификация, ще бъде видима за компетентен интервюиращ и няма да остане без внимание. Единственото нещо, което трябва да говорите за това честно, не подценявайте своите възможности и способности.
За да имате някакъв еталон за обучение или развитие на себе си като специалист, можете да погледнете нещо подобно на това.

Всъщност изброените по-горе въпроси са ниво младши разработчик, както си го представям. Някъде, може би по-дълбоко, някъде по-малко, но като факт - Джуниър.

Всяко решение създава нови проблеми.

Този раздел е посветен на въпроси, които могат да бъдат зададени при преминаване на интервю за позиция Java програмист.

Целта е да съберем не само въпроси (има много в интернет), но и отговори на тях на едно място.

За приписване прочетете на главната страница на секцията Интервю

  1. Колко ключови думи са запазени от езика, кои са тези думи, кои не се използват?
  2. От какви символи може да се състои името на променлива (правилен идентификатор)?
  3. Какво означава думата "инициализация"?
  4. Кои са основните групи типове данни?
  5. Какви примитивни типове познавате?
  6. Какво знаете за преобразуването на примитивни типове данни, има ли загуба на данни, възможно ли е да се преобразува булев тип?
  7. Какви стойности са инициализирани по подразбиране променливи?
  8. Как се предава стойността на променлива (по препратка/стойност)?
  9. Какво знаете за основната функция, какви са предпоставките за нейното дефиниране?
  10. Какви логически операции и оператори познавате?
  11. Каква е разликата между кратката и дългата нотация на логически оператори?
  12. Какво е таблица на истината?
  13. Какво е троичен оператор за избор?
  14. Какви унарни и двоични аритметични операции знаете?
  15. Какви побитови операции знаете?
  16. Каква е ролята и правилата за писане на изявление за избор (превключване)?
  17. Какви цикли познавате, какви са разликите им?
  18. Какво е „итерация на цикъл“?
  19. Какви параметри има цикълът for, могат ли да бъдат пропуснати?
  20. Кое изявление се използва за незабавно спиране на цикъла?
  21. Кое изявление се използва за преминаване към следващата итерация на цикъла?
  22. Какво е масив?
  23. Какви видове масиви познавате?
  24. Какво знаете за класовете за обвивки?
  25. Какво е автоматично опаковане (боксиране/разопаковане)?

  1. Назовете принципите на ООП и опишете всеки един от тях.
  2. Дефинирайте понятието "клас".
  3. Какво е поле/атрибут на клас?
  4. Как правилно да организираме достъпа до полетата на класа?
  5. Дефинирайте понятието "конструктор".
  6. Каква е разликата между конструктори по подразбиране, конструктори за копиране и конструктор с параметри?
  7. Какви модификации на нивото на достъп знаете, разкажете ни за всяка от тях.
  8. Разкажете ни за характеристиките на клас с един частен конструктор.
  9. Какво казват ключовите думи “това”, “супер”, къде и как могат да се използват?
  10. Дефинирайте понятието "метод".
  11. Какво е подпис на метод?
  12. Кои методи се наричат ​​претоварени?
  13. Могат ли нестатичните методи да претоварят статичните?
  14. Разкажете ни за отменящите методи.
  15. Може ли методът да приеме различен брой параметри (аргументи с променлива дължина)?
  16. Възможно ли е да се стесни нивото на достъп/тип на връщане при отмяна на метод?
  17. Как да получите достъп до отменените методи на родителския клас?
  18. Какви са трансформациите отгоре надолу и отдолу нагоре?
  19. Каква е разликата между отменяне и претоварване?
  20. Къде могат да се инициализират статични/нестатични полета?
  21. Защо е необходим операторът instanceof?
  22. Защо сме необходими и какво представляват блоковете за инициализация?
  23. Какъв е редът на извикване на конструктори и блокове за инициализация на два класа: дете и неговия предшественик?
  24. Къде и за какво се използва абстрактният модификатор?
  25. Възможно ли е да се обяви метод за абстрактен и статичен едновременно?
  26. Какво означава ключовата дума static?
  27. Към кои конструкции на Java се прилага статичният модификатор?
  28. Какво се случва, ако възникне изключение в статичен блок код?
  29. Възможно ли е да се претовари статичен метод?
  30. Какво е статичен клас, какви са характеристиките на неговото използване?
  31. Какви са характеристиките на инициализирането на крайните статични променливи?
  32. Как статичният модификатор влияе на клас/метод/поле?
  33. Какво означава крайната ключова дума?
  34. Дефинирайте понятието "интерфейс".
  35. Какви са модификаторите по подразбиране за интерфейсни полета и методи?
  36. Защо методът на интерфейса не може да бъде обявен за окончателен или статичен?
  37. Какви типове класове има в Java (вложени... и т.н.)
  38. Какви са характеристиките на създаването на вложени класове: прости и статични.
  39. Какво знаете за вложените класове, защо се използват? Класификация, случаи на използване, нарушение на капсулирането.
  40. Каква е разликата между вложени и вътрешни класове?
  41. Кои класове се наричат ​​анонимни?
  42. Как да получите достъп до поле на външен клас от вложен клас?
  43. Как можете да получите достъп до локалната променлива на метод от анонимен клас, деклариран в тялото на този метод? Има ли ограничения за такава променлива?
  44. Как всеки персонализиран клас е свързан с класа Object?
  45. Разкажете ни за всеки от методите на класа Object.
  46. Какво е метод equals(). Как се различава от операцията ==.
  47. Ако искате да замените equals(), какви условия трябва да бъдат изпълнени за отменения метод?
  48. Ако equals() е отменен, има ли други методи, които трябва да бъдат отменени?
  49. Каква е особеността на методите hashCode и equals? Как се реализират методите hashCode и equals в класа Object? Какви правила и конвенции съществуват за прилагането на тези методи? Кога се прилагат?
  50. Кой метод връща низово представяне на обект?
  51. Какво се случва, ако замените равни без да замените hashCode? Какви проблеми могат да възникнат?
  52. Има ли някакви насоки какви полета трябва да се използват при изчисляване на хеш-кода?
  53. Смятате ли, че ще има проблеми, ако обектът, който се използва като ключ в hashMap, промени полето, което участва в дефиницията на hashCode?
  54. Каква е разликата между абстрактен клас и интерфейс, в какви случаи ще го използвате?
  55. Възможен ли е достъп до променливи на частния клас и ако да, как?
  56. Какво е променливо и преходно? За какво и в какви случаи би било възможно да се използва по подразбиране?
  57. Разширяване на модификаторите при наследяване, отмяна и скриване на методи. Ако родителският клас има частен метод, може ли детето да разшири видимостта си? Ами ако са защитени? А за стесняване на видимостта?
  58. Има ли смисъл да се обявява метод за частен окончателен?
  59. Какви са характеристиките на окончателната инициализация на променливата?
  60. Какво се случва, ако единственият конструктор на класа бъде обявен за окончателен?
  61. Какво е финализиране? Защо е необходимо? Какво можете да кажете за колектора за боклук и неговите алгоритми.
  62. Защо методът за клониране е обявен за защитен? Какво е необходимо за прилагане на клониране?
  63. Запознати ли сте с някакви модели на дизайн?
  64. Напишете Singleton... Но с мързеливо зареждане. Ами ако трябва да е безопасен за нишки? Кога мързеливото зареждане е по-лошо?
  65. Какво можете да кажете за MVC? Начертайте диаграма и обяснете как работи MVC.
  66. Напишете функция за изчисляване на факториала.
  67. Като се има предвид функция за изчисляване на числата на Фибоначи, е известно, че тя работи. Намерете логическата грешка. Оценете сложността на получения алгоритъм.

  1. Определете "изключване"
  2. Каква е йерархията на изключенията.
  3. Мога ли/трябва ли да обработвам jvm грешки?
  4. Какви са начините за справяне с изключенията?
  5. Какво означава ключовата дума throws?
  6. Какво е специалното за finally block? Винаги ли се изпълнява?
  7. Може ли да няма блок за хващане при улавяне на изключения?
  8. Можете ли да измислите ситуация, при която блокът finally да не бъде изпълнен?
  9. Може ли един блок catch да улови множество изключения (от едни и същи и различни клонове на наследяване)?
  10. Какво знаете за обработваните и необработените (отметнати/неотметнати) изключения?
  11. Какво е специалното за RuntimeException?
  12. Как да напишете свое собствено („персонализирано“) изключение? От какви мотиви ще се ръководите, когато избирате вида на изключението: проверено / непроверено?
  13. Кой оператор ви позволява да принудително хвърляте изключение?
  14. Има ли допълнителни условия за метод, който потенциално може да предизвика изключение?
  15. Може ли главният метод да изхвърли изключение навън и ако е така, къде ще се обработва това изключение?
  16. Ако изразът за връщане се съдържа както в блок catch, така и в блок finally, кой от тях е „по-важен“?
  17. Какво знаете за OutOfMemoryError?
  18. Какво знаете за SQLException? Какъв тип проверен или непроверен е, защо?
  19. Какво е грешка? В този случай се използва Error. Дайте пример за грешка.
  20. Каква конструкция се използва в Java за обработка на изключения?
  21. Да предположим, че има блок try-finally. В блока try беше хвърлено изключение и изпълнението се премести в блока finally. Блокът finally също хвърли изключение. Кое от двете изключения ще "изхвърли" от блока try-finally? Какво се случва с второто изключение?
  22. Да предположим, че има метод, който може да изхвърли IOException и FileNotFoundException в какъв ред трябва да вървят блоковете за хващане? Колко блока за хващане ще бъдат изпълнени?

  1. Дефинирайте понятието "колекция".
  2. Избройте ползите от използването на колекции.
  3. Какъв вид данни могат да съхраняват колекциите?
  4. Каква е йерархията на колекцията?
  5. Какво знаете за списъчните колекции?
  6. Какво знаете за колекциите Set?
  7. Какво знаете за колекциите на Queue?
  8. Какво знаете за колекциите от карти, каква е тяхната основна разлика?
  9. Назовете основните реализации на List, Set, Map.
  10. Какви реализации на SortedSet познавате и какви са техните характеристики?
  11. Какви са разликите/приликите между List и Set?
  12. Каква е разликата/общото между класовете ArrayList и LinkedList, кога е по-добре да използвате ArrayList и кога е по-добре да използвате LinkedList?
  13. Кога е разумно да се използва масив, а не ArrayList?
  14. Как се различава ArrayList от Vector?
  15. Какво знаете за внедряването на класовете HashSet и TreeSet?
  16. Каква е разликата между HashMap и TreeMap? Как са настроени и как работят? Какво с времето на достъп до обектите, какви зависимости?
  17. Какво е Hashtable, как се различава от HashMap? Към днешна дата тя е остаряла, как все още използвате желаната функционалност?
  18. Какво се случва, ако поставим две стойности в карта със същия ключ?
  19. Как е редът на обектите в колекцията, как се сортира колекцията?
  20. Дефинирайте термина "итератор".
  21. Каква функционалност предоставя класът Collections?
  22. Как да получите колекция, която не може да се променя?
  23. Какви колекции се синхронизират?
  24. Как да получите синхронизирана колекция от несинхронизирана?
  25. Как да получите колекция само за четене?
  26. Защо картата не наследява от колекция?
  27. Каква е разликата между итератор и изброяване?
  28. Как се изпълнява цикълът foreach?
  29. Защо няма метод iterator.add() за добавяне на елементи към колекция?
  30. Защо класът итератор няма метод за получаване на следващия елемент без преместване на курсора?
  31. Каква е разликата между Iterator и ListIterator?
  32. Какви са начините за повторение на всички елементи на списък?
  33. Каква е разликата между безопасни и бързи свойства?
  34. Какво трябва да направя, за да избегна изхвърляне на ConcurrentModificationException?
  35. Какво е стек и опашка, кажете ни какви са техните разлики?
  36. Каква е разликата между интерфейсите Comparable и Comparator?
  37. Защо колекциите не наследяват Cloneable и Serializable интерфейсите?

  1. Какви „низови“ класове познавате?
  2. Какви са основните свойства на „низовите“ класове (техните характеристики)?
  3. Възможно ли е да се наследи типа низ, защо?
  4. Дефинирайте термина конкатенация на низове.
  5. Как да конвертирам низ в число?
  6. Как да сравним стойността на два низа?
  7. Как да обърнете низ?
  8. Как работи сравняването на два низа?
  9. Как да отрежете интервали в края на низ?
  10. Как да заменя символ в низ?
  11. Как да получите част от низ?
  12. Дефинирайте термина „пул от низове“.
  13. Какъв метод ви позволява да изберете подниз в низ?
  14. Как да разделя низ на поднизове чрез даден разделител?
  15. Какъв метод се извиква за преобразуване на променлива в низ?
  16. Как да разберем стойността на конкретен знак от низ, като знаем неговия порядков номер в низа?
  17. Как да намеря необходимия символ в низ?
  18. Възможно ли е да се синхронизира достъпа до редове?
  19. Какво прави методът intern()?
  20. Как се различават класовете String, StringBuffer и StringBuilder и какво общо имат?
  21. Какъв е правилният начин за сравняване на низови стойности на два различни обекта от тип String и StringBuffer?
  22. Защо низът е неизменен и финализиран в Java?
  23. Защо символният масив е за предпочитане пред низ за съхранение на парола?
  24. Защо низът е популярен ключ в HashMap в Java?
  25. Напишете метод за премахване на даден символ от низ.

  1. Какви са видовете входно/изходни потоци?
  2. Назовете основните предшественици на I/O потоците.
  3. Какви са приликите и разликите между следните потоци: InputStream, OutputStream, Reader, Writer?
  4. Какво знаете за RandomAccessFile?
  5. Какви са режимите за достъп до файлове?
  6. В какви пакети са класовете за поток?
  7. Какво знаете за класовете за надстройка?
  8. Какъв допълнителен клас ви позволява да четете данни от входния поток от байтове във формата на примитивни типове данни?
  9. Какъв клас добавки ви позволява да ускорите четенето/писването чрез използването на буфер?
  10. Кои класове ви позволяват да преобразувате потоци от байтове в потоци от знаци и обратно?
  11. Какъв клас е предназначен да работи с елементи на файловата система (EFS)?
  12. Какъв знак е разделителят при посочване на пътя към EFS?
  13. Как да изберете всички EFS на определена директория по критерий (например с определено разширение)?
  14. Какво знаете за интерфейса FilenameFilter?
  15. Какво е сериализация?
  16. Какви са условията за „безопасна” сериализация на обект?
  17. Какви класове ви позволяват да архивирате обекти?

  1. Дефинирайте понятието "процес".
  2. Дефинирайте понятието "поток".
  3. Дефинирайте термина „синхронизация на нишки“.
  4. Как взаимодействат програмите, процесите и нишките?
  5. Кога е препоръчително да създадете няколко нишки?
  6. Какво може да се случи, ако две нишки изпълняват един и същ код в програма?
  7. Какво знаете за основната нишка на програмата?
  8. Какви са начините за създаване и стартиране на нишки?
  9. Какъв метод стартира нишка за изпълнение?
  10. Кой метод описва действието на нишка по време на изпълнение?
  11. Кога една нишка завършва своето изпълнение?
  12. Как да синхронизирам метода?
  13. Как да спрете нишка принудително?
  14. Дефинирайте термина "демонска нишка".
  15. Как да създадете демон нишка?
  16. Как да получа текущата нишка?
  17. Дефинирайте понятието "монитор".
  18. Как да поставим на пауза изпълнението на нишка?
  19. В какви състояния може да бъде поток?
  20. Какво е монитор при извикване на нестатичен и статичен метод?
  21. Какъв е мониторът при изпълнение на част от кода на метода?
  22. Какви методи ви позволяват да синхронизирате изпълнението на нишки?
  23. Кой метод поставя нишка в режим на готовност?
  24. Каква е функционалността на методите notify и notifyAll?
  25. Какво прави методът на присъединяване?
  26. Какви са условията за извикване на метода чакане/уведомяване?
  27. Дефинирайте понятието "взаимно блокиране".
  28. Каква е разликата между методите interrupt, interrupted, isInterrupted?
  29. В кой случай ще бъде изхвърлено InterruptedException, кои методи могат да го изхвърлят?
  30. volatile модификатори и метода yield().
  31. Пакет java.util.concurrent
  32. Има някакъв метод, който изпълнява i++ операция. Променлива i от тип int. Предполага се, че кодът ще се изпълнява в многонишкова среда. Блокът трябва ли да се синхронизира?
  33. Какво се използва като мютекс, ако методът е деклариран като статичен синхронизиран? Възможно ли е да се създават нови екземпляри на клас, докато се изпълнява статичен синхронизиран метод?
  34. Да предположим, че RuntimeException е възникнало в метода на изпълнение, който не е уловен. Какво ще се случи с потока? Има ли начин да разберете, че е възникнало изключение (без да обвивате цялото тяло на изпълнение в блок try-catch)? Има ли начин да върна темата, след като това се случи?
  35. Какви стандартни Java инструменти бихте използвали за внедряване на пул от нишки?
  36. Какво е ThreadGroup и защо е необходимо?
  37. Какво е ThreadPool и защо е необходим?
  38. Какво е ThreadPoolExecutor и защо е необходим?
  39. Какво представляват "атомните типове" в Java?
  40. Защо е необходим класът ThreadLocal?
  41. Какво е Изпълнител?
  42. Какво е ExecutorService?
  43. Защо е необходима ScheduledExecutorService?
Този списък от 300+ въпроса (без отговори) е намерен на http://becomejavasenior.com/. Там са изброени други автори.

58489 Общо показвания 15 Преглеждания днес

Преглеждания: 38 283

  • Какво е ООП?
  • Какво е обект?
  • Назовете основните принципи на ООП.
  • Какво е наследство?
  • Какво е полиморфизъм? Какви прояви на полиморфизъм в Java познавате?
  • Какво е капсулиране?
  • Какво е абстракция?
  • Какви са предимствата на обектно-ориентираните езици за програмиране?
  • Как използването на обектно-ориентиран подход подобрява разработката на софтуер?
  • Има изрази „е“ и „има“. Какво означават те по отношение на принципите на ООП? Каква е разликата между състава и агрегацията?
  • Какво разбирате под полиморфизъм, капсулиране и динамично свързване?

java ядро.

  • Каква е разликата между JRE, JVM и JDK?
  • Опишете модификаторите за достъп в Java.
  • Какво е достъп на ниво пакет.
  • По какво се различава абстрактният клас от интерфейса? Кога бихте използвали абстрактен клас и кога бихте използвали интерфейс?
  • Може ли обект да има достъп до променлива на частен клас? Ако да, как?
  • За какво са статичните блокове в Java?
  • Възможно ли е да се претовари статичен метод?
  • Разкажете ни за вътрешните класове. Кога ще ги използвате?
  • Каква е разликата между променлива на екземпляра и статична променлива? Дай пример.
  • Дайте пример кога можете да използвате статичен метод?
  • Разкажете ни за класовете за зареждане и динамичното зареждане на класове.
  • Каква е целта на оператора "assert" в Java?
  • Защо някои интерфейси изобщо не дефинират методи?
  • Каква е основната разлика между String, StringBuffer, StringBuilder?
  • Разкажете ми за Java I/O потоци.
  • Какво представлява паметта Heap и Stack в Java?
  • Каква е разликата между Stack и Heap памет в Java?
  • Разкажете ни за модела на паметта в Java?
  • Как работи сметосъбирачът?
  • Разкажете ни за тип кастинг. Какво е понижаване и повишение? Кога получавате ClassCastException?
  • Какво е статичен клас, какви са характеристиките на неговото използване?
  • Как да получите достъп до поле на външния клас от вложен клас.
  • Какви видове вложени класове има? За какво се използват?
  • Възможно ли е да се промени при отмяна на метод:
  • Модификатор на достъп
  • тип връщане
  • Тип или номер на аргумента
  • Име на аргумента
  • Да промените ли поръчката, количеството или да премахнете изцяло секцията за хвърляния?
  • Какво е автобокс?
  • Какво е генерик?
  • Каква е истинската цел на използването на генерични типове в Java?
  • Как се предават променливите към методи, по стойност или по препратка?
  • Какви методи има класът Object?
  • Правила за отмяна на метода Object.equals().
  • Ако искате да замените equals(), какви условия трябва да бъдат изпълнени за отменения метод?
  • Каква е връзката между hashCode и equals?
  • Как се реализират методите hashCode и equals в класа Object?
  • Какво се случва, ако замените равни без да замените hashCode? Какви проблеми могат да възникнат?
  • Има ли някакви насоки какви полета трябва да се използват при изчисляване на хеш-кода?
  • За какво е методът hashCode()?
  • Правила за отмяна на метода Object.hashCode().
  • Разкажете ни за клонирането на обекти. Каква е разликата между плиткото и дълбокото клониране?
  • Правила за отмяна на метода Object.clone().
  • Къде и как можете да използвате частен конструктор?
  • Какво е конструктор по подразбиране?
  • Опишете метода Object.finalize().
  • Каква е разликата между думите final, finally и finalize?
  • Опишете йерархията на изключенията.
  • Какви видове изключения в Java познавате, как се различават?
  • Какво е отметнато и неотметнато Изключение?
  • Как да създадете свое собствено изключение без отметка?
  • Какви са изключенията за премахване на отметката?
  • Какво е грешка?
  • Опишете как работи блокът try-catch-finally.
  • Възможно ли е да се използва блок try-finally (без catch)?
  • Винаги ли се изпълнява блокът finally?
  • Какви са характеристиките на класа String? какво прави методът intern().
  • Възможно ли е да се наследи типа низ, защо?
  • Защо низът е популярен ключ в HashMap в Java?
  • Дефинирайте термина конкатенация на низове.
  • Как да обърнете низ?
  • Как да сравним стойността на два низа?
  • Как да отрежете интервали в началото и в края на низ?
  • Дефинирайте термина „пул от низове“.
  • Възможно ли е да се синхронизира достъпа до редове?
  • Какъв е правилният начин за сравняване на низови стойности на два различни обекта от тип String и StringBuffer?
  • Защо низът е неизменен и финализиран в Java?
  • Напишете метод за премахване на даден символ от низ.
  • Какво е отражение?
  • Какво се случва с колектора за боклук (GC), ако възникне изключение по време на изпълнението на метода finalize() на някакъв обект?
  • Какво е интернационализация, локализация?
  • Какво представляват анотациите в Java?
  • Какви функции изпълнява анотацията?
  • Какви вградени пояснения в Java познавате?
  • Какво правят анотациите @Retention, @Documented, @Target и @Inherited?
  • Какво правят анотациите @Override, @Deprecated, @SafeVarargs и @SuppressWarnings?
  • Какъв жизнен цикъл на анотация може да бъде определен с @Retention?
  • Кои елементи могат да бъдат анотирани, как да се посочи?
  • Как да създадете своята анотация?
  • Какви типове атрибути са разрешени в поясненията?
  • Какво е JMX?
  • Какви предимства предлага JMX?
  • Какво друго може да прави JMX освен дистанционното управление?
  • Какво е MBean?
  • Какви видове MBean има?
  • Какво е MBean Server?
  • Какви механизми осигуряват сигурност в Java технологията?
  • Какви са някои от проверките, които извършва верификаторът на байткод на Java?
  • Какво знаете за "мениджъра за защита" в Java?
  • Какво е JAS?
  • Какво е рефакторинг?

Рамка за колекции на Java.

  • Какво е колекция?
  • Назовете основните интерфейси на колекциите и тяхното изпълнение.
  • Как се различава ArrayList от LinkedList? В кои случаи е по-добре да използвате първия и в кои втория?
  • Каква е разликата между HashMap и Hashtable?
  • Как се различава ArrayList от Vector?
  • Как се сравняват елементите на колекцията?
  • Подредете следните интерфейси в йерархия: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
  • Защо картата не е колекция, докато списъкът и наборът са колекция?
  • Дефинирайте термина "итератор".
  • Какво знаете за интерфейса Iterable?
  • Как да конвертирате HashSet в ArrayList в един ред?
  • Как да конвертирате ArrayList в HashSet в един ред?
  • Как да повторя всички ключове на Map, като се има предвид, че Map не е Iterable?
  • Как да повторя всички стойности на Map, като се има предвид, че Map не е Iterable?
  • Как да итерирате всички двойки ключ-стойност в Map, като се има предвид, че Map не е Iterable?
  • Какво е "сортирането" на SortedMap, освен факта, че toString() отпечатва всичко по ред?
  • Как да копирате елементи от всяка колекция в масив с едно извикване?
  • Реализирайте симетрична разлика от две колекции, като използвате методите Collection (addAll(), removeAll(), retainAll()).
  • Сравнете изброяване и итератор.
  • Как са свързани Iterable и Iterator?
  • Каква е връзката между Iterable, Iterator и "for-each", въведена в Java 5?
  • Сравнете Iterator и ListIterator.
  • Какво ще стане, ако извикам Iterator.next() без да „попитам“ Iterator.hasNext()?
  • Какво ще стане, ако извикам Iterator.next() преди да извикам Iterator.hasNext() 10 пъти? Липсват ли ми 9 артикула?
  • Ако имам колекция и дъщерен итератор, ще се промени ли колекцията, ако извикам iterator.remove()?
  • Ако имам колекция и дъщерен итератор, ще се промени ли итераторът, ако извикам collection.remove(..)?
  • Защо добавиха ArrayList, ако вече имаше вектор?
  • Реализацията на класа ArrayList има следните полета: Object elementData, int size. Обяснете защо трябва да съхранявате размера отделно, когато винаги можете да вземете elementData.length?
  • LinkedList е единично свързан, двусвързан или четирисвързан списък?
  • Какво е най-лошото време за метода contain() за елемент, който е в LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N))?
  • Какво е най-лошото време за метода contain() за елемент, който е в ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N))?
  • Кое е най-лошото време за метода LinkedList add() (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Кое е най-лошото време за метод ArrayList add() (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Колко елемента се разпределят в паметта, когато се извика ArrayList.add()?
  • Колко елемента се разпределят в паметта, когато се извика LinkedList.add()?
  • Преценете количеството памет за съхраняване на един примитив от тип байт в LinkedList?
  • Преценете количеството памет за съхраняване на един примитив от тип байт в ArrayList?
  • Добавям елемент в средата на списъка: list.add(list.size()/2, newElem). За кого е по-бавна тази операция - за ArrayList или за LinkedList?
  • Как да итерирате LinkedList елементи в обратен ред, без да използвате бавно get(index)?
  • Как да получите списък с всички елементи с изключение на първите и последните 3 с едно извикване от List?
  • Могат ли различни обекти в паметта (ref0 != ref1) да имат ref0.hashCode() == ref1.hashCode()?
  • Могат ли различни обекти в паметта (ref0 != ref1) да имат ref0.equals(ref1) == true?
  • Могат ли различни препратки към един и същ обект в паметта (ref0 == ref1) да имат ref0.equals(ref1) == false?
  • Има клас Point(int x, y;). Защо хеш кодът от формата 31 * x + y е за предпочитане пред x + y?
  • Ако класът Point(int x, y;) е "правилен" за реализиране на метода equals (връщане ref0.x == ref1.x && ref0.y == ref1.y), но направете хеш кода като int hashCode( ) ( return x;), ще бъдат ли правилно поставени и извлечени такива точки от HashSet?
  • equals() генерира релация на еквивалентност. Кои от свойствата има такава връзка: комутативност, симетрия, рефлексивност, дистрибутивност, асоциативност, транзитивност?
  • Възможно ли е да се имплементира equals(Object that) (връщане this.hashCode() == that.hashCode()) по този начин?
  • equals изисква проверка дали аргументът (equals(Object that)) е от същия тип като самия обект. Каква е разликата между this.getClass() == that.getClass() и този екземпляр на MyClass?
  • Възможно ли е да се внедри метода equals на клас MyClass по следния начин: клас MyClass (public boolean equals(MyClass that) (връщане this == that;))?
  • Ще работи ли HashMap, ако всички ключове върнат int hashCode() (връщане 42;)?
  • Защо добавиха HashMap, ако вече имаше Hashtable?
  • Според Кнут и Кормен има две основни реализации на хеш таблицата: базирана на отворено адресиране и базирана на верижния метод. Как се изпълнява HashMap? Защо го направиха (според вас)? Какви са плюсовете и минусите на всеки подход?
  • Колко щраквания върху връзката се случват, когато направите HashMap.get(key) върху ключ, който е в таблицата?
  • Колко нови обекта се създават, когато добавите нов елемент към HashMap?
  • Как работи HashMap, когато се опитвате да съхраните два елемента в него чрез ключове със същия хеш-код, но за който е равно == false?
  • HashMap може да се дегенерира в списък дори за ключове с различен хеш-код. Как е възможно?
  • Какво е най-лошото време за метод get(key) за ключ, който не е в таблицата (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Какво е най-лошото време за метод get(key) за ключ, който е в таблица (O(1), O(log(N)), O(N), O(N*log(N)), O (N*N))?
  • Обяснете значението на параметрите в конструктора HashMap(int initialCapacity, float loadFactor).
  • Каква е разликата между HashMap и IdentityHashMap? За какво е IdentityHashMap? Как може да бъде полезно прилагането на сериализация или клониране?
  • Каква е разликата между HashMap и WeakHashMap? За какво е WeakHashMap?
  • WeakHashMap използва WeakReferences. Защо не създадете SoftHashMap на SoftReferences?
  • WeakHashMap използва WeakReferences. Защо не създадете PhantomHashMap на PhantomReferences?
  • Направете HashSet от HashMap (използвайте само няколко ключа, а не множество стойности).
  • Направете HashMap от HashSet(HashSet >).
  • Сравнете интерфейсите java.util.Queue и java.util.Deque.
  • Кой кого разширява: Queue удължава Deque или Deque разширява Queue?
  • Защо LinkedList прилага както List, така и Deque?
  • Каква е разликата между класовете java.util.Arrays и java.lang.reflect.Array?
  • Каква е разликата между класовете java.util.Collection и java.util.Collections?
  • Напишете програма без нишка, която кара колекция да хвърля ConcurrentModificationException.
  • Какво е „поведение за бързо отказване“?
  • Има ли специален клас java.util.EnumSet за набори от изброявания? За какво? Защо авторите не харесаха HashSet или TreeSet?
  • java.util.Stack – Счита се за „остарял“. Какво се препоръчва за замяната му? Защо?
  • Коя колекция изпълнява дисциплината за обслужване на FIFO?
  • Коя колекция изпълнява дисциплината за обслужване на FILO?
  • Дайте пример, когато колекция хвърля UnsupportedOperationException.
  • Защо не можете да напишете „ArrayList числа = нов ArrayList ();", но можете да "Списък числа = нов ArrayList ();"?
  • LinkedHashMap - какъв е този "звяр"? Какво има в него от LinkedList и какво от HashMap?
  • LinkedHashSet - какъв е този "звяр"? Какво има в него от LinkedList и какво от HashSet?
  • Казват, че е лесно да се направи прост кеш с "политика за невалидиране" на LinkedHashMap, знаете ли как?
  • Какво ви позволява да правите PriorityQueue?
  • Какви са разликите между java.util.Comparator и java.lang.Comparable?

Java 8.

  • Какво е символична връзка?
  • Каква е разликата между I/O и NIO?
  • Какви характеристики на NIO познавате?
  • Какви са видовете входно/изходни потоци?
  • Назовете основните класове входни/изходни потоци.
  • Как се различават OutputStream, InputStream, Writer, Reader и какво общо имат?
  • За какви подкласове на базовия клас InputStream знаете за какво са?
  • Какво знаете за RandomAccessFile?
  • Какви режими за достъп до файлове има RandomAccessFile?
  • Кои са подкласовете на базовия клас OutputStream и знаете ли за какво служат?
  • За какво се използва PushbackInputStream?
  • За какво се използва SequenceInputStream?
  • За какви подкласове на базовия клас Reader знаете за какво са?
  • За какви подкласове на базовия клас Writer знаете за какво са?
  • Какво е абсолютен и относителен път?
  • В какви пакети са класовете за поток?
  • Какво знаете за класовете за надстройка?
  • Какъв допълнителен клас ви позволява да четете данни от входния поток от байтове във формата на примитивни типове данни?
  • Какъв клас добавки ви позволява да ускорите четенето/писването чрез използването на буфер?
  • Кои класове ви позволяват да преобразувате потоци от байтове в потоци от знаци и обратно?
  • Каква е разликата между класа PrintWriter и класа PrintStream?
  • Кой клас е предназначен да работи с елементи на файловата система?
  • Какъв знак е разделителят при посочване на път във файловата система?
  • Какви методи на класа File познавате?
  • Какво знаете за интерфейса на FileFilter?
  • Какви класове ви позволяват да архивирате обекти?

  • На кой обект се извършва синхронизация, когато се извика статичен синхронизиран метод?
  • За какво се използва volatile, synchronized, transient, native ключова дума?
  • Какво означава приоритет на нишката?
  • Какво представляват демон нишки в Java?
  • Какво означава да приспиш потока?
  • В какви състояния може да бъде дадена нишка в Java? Как всъщност работи потокът?
  • Каква е разликата между двата интерфейса за изпълнение на Runnable и Callable задачи?
  • Разлики между CyclicBarrier и CountDownLatch?
  • Какво е състояние на състезанието?
  • Как да спра нишка?
  • Какво се случва, когато се появи изключение в нишка?
  • Какво е ThreadLocal променлива?
  • Какво е FutureTask?
  • Разлика между interrupted и isInterrupted?
  • Защо методите чакане и известяване се извикват в синхронизиран блок?
  • Какво е пул от нишки?
  • Разлики между блокиране и безизходица?
  • Как да проверя дали дадена нишка държи ключалка?
  • Как да получите дъмп на нишка?
  • Каква настройка на JVM се използва за контрол на размера на стека на нишката?
  • Разлики между синхронизиран и ReentrantLock?
  • Какво е семафор?
  • Какво се случва, ако опашката на пула на нишки вече е пълна и изпратите задача?
  • Разлики между методите submit() и execute() на пула от нишки?
  • Какво е метод за блокиране?
  • Какво е ReadWriteLock?
  • Какво е двойно проверено заключване на Singleton?
  • Какво представлява рамката Fork/Join?
  • Силата е река, от която мнозина могат да пият и обучението на джедаите не е единственият начин да се черпи от нея." - Люк Скайуокър Всички колекции от книги, останали след себе си. Кои от тях да прочетете, какви не - решавате вие. Сега ви остава само една цел: да получите работа и да изградите кариера, без да стъпвате върху гребло. Последната статия е разделена на раздели: - Преди работа - Интервю - По време на работаВ тази част има много мое лично мнение, така че моля, не изваждайте фразите от контекста и го третирайте като откровен разговор със стар приятел :).

    Преди работа

    По-долу са десетте най-популярни клишета, които възникват, когато душата е привлечена от програмиране, но определени обстоятелства пречат на човека. Моята задача е да се опитам да спра подозрителността ви и да ви настроя за положителен начин на мислене. Ако четете тази статия, вие сте по-далеч, отколкото си мислите! Психически вече сте там, където трябва да бъдете и ако вече сте чели някои книги, значи половината път вече е изминал. Затова спрете да се съмнявате – това е съдбата на слабите. Само напред! Вече по-добре? Тогава да тръгваме! "Нямам образование"Когато влязох в академията на една от големите аутсорсинг фирми, интервюиращите нежно ми намекнаха, че въобще не се интересуват от дипломата, така че въпросите бяха конкретни - за OOP и за базова Java. Разбира се, ще се натъкнете на свободни работни места, където наличността на такива. образованието ще бъде ясно изискване. Искам само да кажа, че отсъствието му не е пречка в наши дни. Много чуждестранни офиси искат BS / MS компютърни науки или, внимание, съответен опит. Не убедително? Може би ще бъдете насърчени от факта, че нямам техническо образование;), но това абсолютно не ми попречи да натрупам опит в големи компании. Попитайте ме сега какво бих направил, ако мога да превъртя лентата назад? Разбира се, щях да отида в КПИ/НАУ, но нямаше да скърбя много, ако не вляза. Спрете да се отчайвате за това. Времето ще мине - можете да получите кора на 40, ако искате - но засега се съсредоточете върху това да станете младши разработчик тук и сега. "Ще има хора по-умни от мен"Винаги ще има хора по-умни, по-умни, по-гъвкави, по-талантливи от вас и всяка работа не е изключение. Този факт абсолютно не ви дава право да се отклонявате от целта. Може би някъде от другата страна на земното кълбо има малко момче от Япония, което умножава и дели числата по-бързо от вас, а някоя баба от Чехия пише на клавиатурата на мобилния телефон по-бързо от всеки тийнейджър. Но ти не мислиш за това, нали? Така че защо трябва да ви е грижа за хората, с които ще работите, когато се установите? В някои отношения бъдещите ви колеги ще ви надминат, в някои отношения ще загубят от вас. Това е добре! Зачертайте. "Не мисля, че мога"Е, първо, никой не каза, че ще бъде лесно, но това изобщо не означава, че целта ви не е осъществима. Нищо не ви пречи просто да опитате, дори ако в момента работите като счетоводител или търговски асистент. Елате след работен ден и седнете да учите. Ако след известно време забележите някакъв напредък, това е знак, че се движите в правилната посока. Не спирай! Ако дори малко се интересувате от това и ви е дадено, тогава не знам нито една точка, която да ме убеди, че не сте достоен за това. "Аз съм мързелив"Мързелът е просто липса на мотивация. Ако забележите, че по-голямата част от свободното си време, вместо да учите и да не се борите от курса, глупаво правите боклук - бързам да ви уведомя, че най-вероятно работата на програмист не е ваша. Поне не сега. Някои наричат ​​мързела грях, болест, холерата на съвременната епоха заедно със затлъстяването. Оставете този бизнес на кариерни истерии. Според мен всичко наоколо в този живот е наситено с илюзията за борба и съревнование: кой е по-висок, кой по-силен, кой по-богат. Който има по-готина кола, кой има по-висока заплата в отбора, кой натиска по-силно щангата във фитнеса, кое от момичетата се омъжи по-рано и има деца - от това се разболяваш, като миризлива бърза храна. Хората спряха да живеят и да се наслаждават на живота, да следват мечтите си, да разменят зоната си на комфорт за избор между Pepsi и Coca-Cola. За мен мързелът е добър, просто е прекрасен. Това е обикновена защитна функция на тялото ви да пести време и енергия за неща, които са безполезни за него. Човек е създаден да бъде свободен, така че ако ви мързи - спрете да се опитвате да вдигнете дупето си от дивана - може би сега е на мястото си :). "Отивам там за парите"Ако съберем разработчиците и кажем: отсега нататък вашата заплата ще бъде 3-4 хиляди гривни за всяко ниво и тестери ще продължат да получават същите ставки, тогава въпросът ще бъде различен: не колко ще бъдат бомбардирани, а колко програмистите след тази новина ще си останат само програмисти. Много хора влизат в IT заради тестото. Заплата преведена от пари, сирена и скъп DSLR. Колкото и да работих с хора, разговорите за това винаги се промъкваха. Не казвам, че това е лошо, просто искам да не се опитвате да се убеждавате, че излизате от чисто духовни цели, за да промените света към по-добро. Преди да получа работа като младши, знаех какви са заплатите на възрастните, техническите ръководители - и дори на средния - и тези мисли само ме вдъхновяваха: по мое време, преди да работя като програмист, можех само да мечтая за такива фигури. Наречете тези неща с истинските им имена и спрете да се срамувате от това. "Не мисля, че е мое"Чия тогава? Знаеш ли, лесно е да се провери. Отворете първия том на Hortsmann и започнете да четете, като пишете кода от примерите. Ако не ви е скучно и не отбелязвате време за една и съща глава за втора седмица, отхвърлете съмненията си. Изучаването на технически специалности е нещо последователно. Не можете да отидете в Б, без да знаете А, но винаги ще имате шанс да се върнете една глава назад и да укрепите основата. Продължавай. "Има много като мен"Винаги има конкуренция за място. Не споря, например, сега тази цифра е 300-400 тестери без опит или дори повече за едно място. Да, това е горчива истина, но, от друга страна, дори и с такива показатели не мога да намеря достатъчно сериозен артикул. Да, поне 100500 на място !! Винаги имате възможност да натрупате опит по своите проекти: изградете някаква услуга, програма за настолни компютри, използвайте целия стек, който познавате - и вече правите удари, а останалото, освен да изпратите автобиографията си, не правете нищо друго. „Никой не отговаря на автобиографията ми“В продължение на горния параграф. Най-вероятно за бъдещи ИТ специалисти без опит е добре да могат да напишат красива автобиография, но когато има много хора за едно свободно място, много автобиографии са много сходни една с друга: разбира се, можете да изпратите снимка с деколте (ако е момиче) или напишете много технологии, които вие сами знаете само от Wikipedia. И в двата случая на HR просто няма да им пука: ако на вакантното място по проекта има човек, който например познава AWS, тогава те ще търсят AWS в автобиографията. Вземете предвид още един важен момент, като препоръките на колегите. Това е болката на всеки човек, който няма такива познати, защото от там се взима лъвският дял на юношите (ако човекът по препоръка не е идиот, разбира се). Обикновено, подчертавам, за младши се взима адекватен активен човек, който е готов да учи, та дори и за храна. И ако такъв кандидат се провали, тогава е по-вероятно да бъдете следващият. Е, докато останалите се интервюират, имате много области, където можете да се охладите: отворен код, пъзели в Интернет и може би работа на свободна практика. „Няма да мина интервюто / искам да работя в конкретна компания“Да, най-вероятно първото интервю ще бъде провал, но опитът, който получавате, е безценен. С всяко следващо интервю ще ставате по-уверени и находчиви. Както сега си спомням първия си ... Господи, за какви глупости говорех ?! Колко неудобно беше да си тръгвам след него (спомням си онзи духал, който се усмихна в лицето ми), но когато се прибрах и се замислих, разбрах, че това е прекрасен урок. След него всички последващи подобни събития бяха пропити с лекота и увереност. Никой не е умрял, те търсят такива като мен, затова ще дойда. Вярвай в себе си! Ако искате конкретно към определена компания, тогава мисля, че няма да ви разкрия лайфхак, популярен в нашата среда, но все пак: преди да организирате среща с този офис, преминете през интервю с конкуренти преди това. Може би ще ви предложат нещо, което няма да откажете, или условията ще бъдат по-неприятни. Едно знам със сигурност: няма да съжалявате. "Добър съм в тази работа"Знаете ли, има една стара поговорка: Le mieux est I'enneini du bien („Най-доброто е враг на доброто“). Може би работата ви не е най-лошото място, но да, шефът е коза, и какво от това? Или, например, третата година без бонус, но стабилна заплата, особено след като вече съм над 30. До известна степен може и да е така, просто не забравяйте, че имате един живот и не трябва да се харчите за разочарования, за въображаем комфорт, когато има толкова много интересни неща наоколо, а целият живот не е достатъчен за разбиране. Не се страхувайте да бъдете по-добри, не се страхувайте да бъдете по-добри. Не слушайте никого, вървете към целта упорито, ако знаете, че това наистина искате да направите. Не се страхувайте да се промените!

    Интервю

    Като цяло можете да намерите всичко това в Интернет или да попитате с приятели, но мисля, че няма да е излишно. По-долу е даден пример за интервю за младши Java разработчик, какъвто би бил сега, ако аз бях интервюиращият. Въпросите могат да бъдат всякакви, просто се опитах да събера нещо средно за болницата. Нека се преструваме, че имате късмет. Стандартна схема Етап 1.Обажда ви се рекрутер и вие уговаряте интервю с нея, например, утре в 11:00. Стъпка 2Пристигате рано, тъй като 11:00 най-вероятно е времето не за вас, а за разработчиците, които имат запазена някаква стая, в която ще бъдете измъчвани. Добри маниери е всеки рекрутер да предупреждава за това. Стъпка 3Всъщност, като се започне от стъпка 3, всички точки могат да бъдат смесени, защото интервютата могат да се провеждат по различни начини. Тук например можете да бъдете попитани за основни неща, откъде сте, защо сте с нас и т.н. Възможно е самият HR да може да направи това и разбира се, възможно е на английски. Да, зависи от компанията. Стъпка 4Поканени сте в заседателна зала, където ще проведете разговор с един, двама, трима души, единият от които ще бъде или старши, или технически ръководител, който ще работи с вас в бъдеще, между останалите може да има Scrum майстор, други разработчици или HR. Интервюират ви известно време, след това ви стискат ръката и ви пускат. Стъпка 5Може би това ще бъде на следващия ден или може би веднага след стъпка 4 - ще проведете разговор с чуждестранен клиент (ако има такъв), или може би той сам ще проведе интервю. Както можете да видите, има много опции. Някъде има клиенти, някъде има и телефонно интервю. Това е само пример. Пример за техническо интервю за младши Java разработчикНаистина ми е жал за недоразработчиците, които четат нещо умно, за да се удавят / смачкат / да се изфучат пред кандидата за интервю. Ако видите, че такъв човек е пред вас и усещате натиск и напрежение от него, незабавно го изпратете при три смешни, защото след успешно преминаване с този кретин ще трябва да работите. Не си хаби скъпоценните нерви. Интервюто, на първо място, трябва да се проведе с цел да се установи какво знае кандидатът, а не какво не знае. Естествено, ако имате нужда от човек, който знае нещо конкретно - питайте го, не го измъчвайте с безполезни неща, които не използвате в проекта. В крайна сметка бъдете хора! По-долу са приблизителни въпроси, които може да срещнете в интервю. 5 въпроса за всяка технология. ООП 1. Дайте пример за полиморфизъм от реалния живот? Какви са ползите? Недостатъци? Напишете прост код. 2. Какво е интерфейс? Абстрактен клас? Защо имаме нужда от интерфейси, ако можете глупаво да напишете всичко с класове (малко провокация)?. Същото важи и за абстрактен клас. Какви са методите по подразбиране в Java 8? 3. Изградете йерархия на класове върху конкретен пример за въображаема база данни или програма (има списък с различни класове работници от базата данни) и взаимодействието между тях (агрегиране, състав). 4. Как съставът е различен от агрегирането (is-a, has-a)? 5. Как можете да заобиколите забраната за множествено наследяване в Java? JDK/JRE 1. По какво се различава JDK от JRE? Какво е JVM? 2. Какво е път към класа и за какво е? Как например да заредите други класове в пътя на класа? 3. Какво знаете за classloader? 4. Разкажете ни за javadoc? За какво е? 5. Какво е JAR, WAR? Java Common 1. Каква е разликата между статичните методи и нестатичните методи? Какво е окончателно? 2. Какво е boxing-unboxing? байт b = 127, b++, какъв е резултатът и защо? 3. Какво представляват опаковките, за какво са? 4. Какво трябва да направя, за да създам анотацията си? Какво е отменяне/претоварване? 5. Защо класът String е окончателен? Какво прави методът intern()? Структури от данни 1. Разкажете ни за структурата на API за колекции в Java? Работили ли сте вече с Stream API? 2. Каква е разликата между ArrayList и LinkedList? Къде е по-добре да използвате ArrayList и къде е LinkedList? 3. Кажете ни как работи HashMap? Какви са характеристиките на работата с TreeSet, HashSet? Имате ли опит с колекциите Guava? 4. Масиви в Java, пример за двуизмерен масив. 5. hashCode, равен на примера на HashMap? Паралелност 1. Какво е процес? Поток? Как да създадете нишка? Какво е синхронизирано? Как да разберем това или онова парче безопасен за нишки код? 2. Какво е Thread.sleep, както и чакане, уведомяване, yield? 3. Дайте пример за задънена улица? 4. Колекции при работа с многонишковост. 5. ThreadLocal и Atomic Operations SQL/JDBC 1. В конкретен пример вземете от базата данни Потребители този, чиято заплата е по-голяма от 5000. 2. Примери за INNER JOIN, OUTER JOIN, Order By, Group By. 3. Защо ми трябва JDBC драйвер? Примери. 4. Разкажете всичко, което знаете за ResultSet, няколко примера. 5. Напишете прост DAO с помощта на RS. JPA/хибернация 1. Какви са предимствата и недостатъците на JPA? 2. Какво е EntityManager? субект? 3. Критерии в JPA/Hibernate. 4. Едно към едно, много към много в JPA/Hibernate 5. Как бихте направили JOIN в Hibernate? HQL? пролет 1. Какво е DI/IoC? Предимства. 2. Какво е контекст на приложението? боб? 3. Какви са видовете инициализация на IoC? 4. Singleton, прототип през пролетта? Базирана на анотация Spring? 5. Жизненият цикъл на зърната? init-метод, унищожи-метод? @PostConstruct, @PostDeploy? Мейвън 1. Основните фази на maven, жизненият цикъл. 2. Как да стартирам maven с тестове, без тестове? Какво е архетип, зависимост от mvn? 3. Профили в maven, как се създават, как се изпълняват. 4. Какво е моментна снимка в maven? Централни/отдалечени хранилища? 5. Плъгини в mvn, принципът на работа, няколко примера. Алго 1. Концепцията за алгоритъма, неговата скорост, Big-O-Notation. 2. Как да намерите средния елемент в LinkedList наведнъж? 3. Напишете примитивен стек? Каква е разликата между стек и опашка? LIFO, FIFO? 4. Бързо сортиране, сортиране с обединяване. 5. Напишете програма, която проверява дали числото е палиндром. Съгласен съм, може би щангата е извита малко повече към средата от младшата, но мисля, че такава подготовка определено няма да ви навреди. Опитайте се да се задълбочите във всеки въпрос. Между другото, много посоки в Java не са посочени тук, моля, вземете предвид.

    По време на работа

    Ето малки препоръки за тези младши/средни разработчици, които вече са се установили. Тези прости съвети може да са ви полезни, точно както на мен ми помогнаха. Не бъдете упоритиСпрете да доказвате тезата си, дори и да е съблазнително близо до истината. Вече забелязахте, че сте в спор от дълго време, което означава, че от другата страна на барикадите има обикновено магаре, което има само две мнения в живота: неговото и грешното. Имаме невероятен брой упорити хора, които отстояват позициите си до последно, стига егото им да не се разклати. И това не са само вашите колеги, те просто са навсякъде - в микробуса, в магазина, роднини, близки приятели - не можете да избягате или да се скриете от тях. Трябва по някакъв начин да взаимодействате с тях, дори ако разбирате, че човек говори открити глупости. Нещо повече, същото може да се случи и на вас. Съгласен съм, прости неща могат да се обяснят дори на упорит човек, но какво ще стане, ако говорим за архитектурни въпроси в проект или лично мнение? Забравете за тези боклуци - бъдете гъвкави. Много уважавам хората, които могат да признаят, че грешат, пред всички. Именно това качество ще ви бъде полезно като младши специалист – трудно е да се изправите срещу отворен човек, особено когато той признае, че се учи и има право на грешки. Не закъснявайНяма значение дали е пробен период или просто петък, в който всички отбелязват точки и стигат до 11. Друго нещо е важно: точността е характеристика на професионалист, който печели допълнителни точки от небето. И допълнителни точки за човек без опит няма да навредят, нали? Опитайте се да не закъснявате и да си тръгнете от работа честно след 8 часа работа. Не злоупотребявайте с оценкитеЗа съжаление, това е много често срещана картина, в която веднъж се впуснах в миналото. Разработчикът си постави 8-16 часа за изпълнение на задачата и неочаквано я изпълни за 3-4 часа. Останалите часове прекарва в личното си време под формата на тенис на маса, както беше при мен, или гледане на youtube и други забавления. От юридическа гледна точка изглежда са се съгласили, но от човешка гледна точка се лишавате от много важни неща: 1. Стоите на едно място, докато запълвате допълнително време с ненужни неща; 2. Не се развивате, защото не информирате ръководството за бързия си напредък, никой не знае, че изпълнявате задачите по-бързо от очакваното; 3. Започвате постоянно да надценявате средното време за стойности, това е просто път към никъде. Отделете време за изучаване Шансът да изостанете от двигателя е нереално голям, така че имайте предвид, че технологиите и новите версии се развиват много бързо. Абонирайте се за Java евангелистите на нашето време, четете дайджестове на Java и като цяло се интересувайте, научавайте нови неща. Това ще ви помогне да запазите марката си и да се развивате. Помогни на другитеНе се страхувайте да помагате на другите, дори и те да са зелени като вас. Първо, вие значително ще укрепите знанията си, и второ, ще получите уважение в очите на другите и те ще ви помогнат в същото време. В такава среда се раждат най-добрите отбори, както и много бързо техническо и личностно израстване. Занимавайте се със спорт. Имайте хобиНе, сериозно. Хората, занимаващи се със спорт, не само изглеждат и се чувстват по-добре, но и мозъчната им функция е на върха! За това допринасят сколиозата, кръста, наднорменото тегло, различни проблеми с вътрешните органи - денонощни събирания пред компютъра, дори извън работа. Ако не можете да спортувате (в което се съмнявам), използвайте малки лайфхакове: работете изправени от време на време, оставяйте две спирки по-рано и ходете пеша до работа. И да, ходете повече. Съществува и риск от изгаряне, ако програмирането отнема много повече от времето ви от 40 часа седмично. Личните хобита ще дойдат на помощ - например фотография, музика и т.н. Отделете редовно време за духовност. Баланс в личния си животКогато една приятелка/съпруга каже: „лаптоп или аз“, трябва сериозно да помислите какво място заема програмирането в живота ви. От друга страна, когато започвате своя път в IT, трябва ясно да обясните на сродната си душа, че сега трябва да учите много, за да постигнете повече. Надявам се да разберат. Е, вие се опитвате да балансирате и правилно да разпределите времето си. надхвърляБъдете проактивни, ако смятате, че например можете да споделяте знания или да имате интересни теми, защо не организирате малки курсове в рамките на компанията за други? Не се страхувайте да допринасяте за големи проекти с отворен код, ако знаете как да помогнете. Ако искате да напишете игра, социален проект или друга идея - направете го, направете го, направете го! Не стойте на едно място, винаги търсете начини, по които можете да се развивате. Бъдете конкурентоспособниСледете за новите тенденции, бъдете в крак с тенденциите, които се случват в общността на Java. Например, няма да е излишно, ако от време на време, от време на време, наблюдавате свободните работни места в Java в DOU, но не за да се откъснете от работа, а за да разберете кои технологии остават актуални и кои бавно изчезват от пазара . Опитайте се също да вземете курсове за Coursera, Udacity и др., проучете нови хоризонти. И дори английски: опитайте се да гледате любимите си филми / телевизионни предавания в оригинал със субтитри, за да подобрите разговорните си умения, изтеглете няколко интересни приложения за изучаване на езика (например LinguaLeo) и в крайна сметка отидете на курсове .

    Заключение

    Е, моят малък DOU проект е към своя край. Скъпи приятели, искрено ви желая да получите работа и се надявам, че всичко, което описах в тези 7 статии, ще бъде ценно ръководство за вас, дори и за тези, които вече работят като Java разработчик. Бъдещи юноши, помнете, че нищо не е невъзможно и ако наистина натискате, определено ще успеете. Искам най-накрая да решиш дали това е твое или не, да разработиш подробен тренировъчен план и да го следваш хладнокръвно. Не се разстройвайте, ако получите мълчание в замяна - всичко това е временно, основното е да вярвате и в никакъв случай да не се заблуждавате, но учете, учете и учете отново. Бих искал да изразя дълбоката си благодарност към екипа на DOU за редактирането на голямо количество материали и за това, че ми даде най-голямо ефирно време в понеделник. DOU е страхотна общност, която престана да бъде просто сайт за украински IT хора. Бих искал да благодаря и на всички коментатори, които четат статиите ми по диагонал и извадиха фрази от контекста. Статиите нямаше да изглеждат толкова интересни без вас :) Нека Силата бъде с вас!

    За тези, които чуват думата Java Core за първи път, това са фундаменталните основи на езика. С тези знания вече можете спокойно да отидете на стаж / стаж. Тези въпроси ще ви помогнат да освежите знанията си преди интервюто или да научите нещо ново за себе си. За практически умения, учете на.

      Как да създадете неизменяем обект в Java? Избройте всички предимства

      Неизменяем клас е клас, чието състояние не може да бъде променено, след като е бил създаден. Тук състоянието на обекта са по същество стойностите, съхранени в екземпляр на класа, независимо дали са примитивни типове или референтни типове.

      За да направите класа неизменяем, трябва да са изпълнени следните условия:

      1. Не предоставяйте настройки или методи, които променят полета или обекти, които се отнасят до полета. Сетерите предполагат промяна на състоянието на обект, което искаме да избегнем тук.
      2. Направете всички полета окончателни и частни. Полетата, определени като частни, няма да бъдат достъпни извън класа, а определянето им окончателно гарантира, че няма да ги промените дори случайно.
      3. Не позволявайте на подкласовете да отменят методите. Най-лесният начин да направите това е да декларирате класа като окончателен. Финализираните класове в Java не могат да бъдат отменени.
      4. Винаги помнете, че вашите променливи екземпляри могат да бъдат променливи или неизменни. Дефинирайте ги и върнете нови обекти с копирано съдържание за всички променящи се обекти (типове референтни). Неизменните променливи (примитивни типове) могат да бъдат върнати безопасно без допълнителни усилия.

      Освен това трябва да имате предвид последващите предимства на неизменните класове. Може да са ви необходими за интервю. Неизменни класове:

      • лесен за проектиране, тестване и използване
      • са автоматично нишки безопасни и нямат проблеми със синхронизирането
      • не изискват конструктор за копиране
      • ви позволяват да "мързеливо инициализирате" хешкода и да кеширате връщаната стойност
      • не изискват защитено копие, когато се използват като поле
      • направете добри ключове за карта и Set елементи (тези обекти не трябва да променят състоянието си, когато са в колекцията)
      • направи своя клас постоянен, като го създаде веднъж и не е необходимо да се проверява повторно
      • винаги имат „атомарност при отказ“, термин, въведен от Джошуа Блок: ако неизменяем обект хвърли изключение, той никога няма да бъде оставен в нежелано или недефинирано състояние.

      Вижте примера, написан в тази публикация.

      Спецификацията на Java гласи, че всичко в Java се предава по стойност. В Java няма такова нещо като "предаване по препратка". Тези условия са свързани с извикване на методи и предаване на променливи като параметри на метода. Е, примитивните типове винаги се предават по стойност без никакво объркване. Но концепцията трябва да се разбира в контекста на параметър на метод от сложни типове.


      В примера по-горе, адресните битове на първия екземпляр се копират в друга референтна променлива, което кара и двете препратки да сочат към едно и също място в паметта, където се съхранява обектът. Не забравяйте, че като присвоите null на втората препратка, няма да присвоите null на първата препратка. Но промяната в състоянието на обект с една реферирана променлива ще бъде отразена и в другата препратка.

      Каква е ползата от блока finally? Този блок гарантира ли изпълнението на неговия код? Кога блокът finally не се извиква?

      Блокът finally винаги се извиква, ако съществува блокът try. Това гарантира, че блокът finally се извиква, дори ако възникне неочаквано изключение. Но накрая е по-полезно от просто обработка на изключения - този блок ви позволява да изчистите код, който случайно е заобиколил return, continue или break. Поставянето на код за почистване в блок finally винаги е добра практика, дори когато не се очакват изключения.

      Ако виртуалната машина излезе, докато се изпълнява блокът try или catch, тогава блокът finally няма да бъде изпълнен. По същия начин, ако нишка бъде прекъсната или убита по време на изпълнение на блок try или catch, блокът finally няма да бъде изпълнен, въпреки че приложението все още работи.

      Защо има два класа Date, единият в пакета java.util, а другият в java.sql?

      java.util.Date представлява дата и час, докато java.sql.Date представлява само дата. Допълнението към java.sql.Date е класът java.sql.Time, който представлява само времето.

      Класът java.sql.Date е подклас (разширение) на класа java.util.Date. И така, какво се промени в java.sql.Date:

      • toString() произвежда различно низово представяне: yyyy-mm-dd
      • статичният метод valueOf(String) създава дата от низ с горното представяне
      • изключени гетери и сетери за часове, минути и секунди

      Класът java.sql.Date се използва в JDBC и е проектиран да няма времеви компонент, т.е. часовете, минутите, секундите и милисекунди трябва да са нула...но това не се изисква от класа.

      Обяснете интерфейсите на маркерите.

      Шаблонът на интерфейса на маркера е модел за проектиране на компютърни науки, използван от езиците за програмиране, които предоставя информация за обекти по време на изпълнение. Това предоставя начин за асоцииране на метаданни на класа, когато езикът няма изрична поддръжка за такива метаданни. Java използва интерфейси за това, без да указва методи.

      Добър пример за използване на интерфейс за маркер в Java е интерфейсът Serializable. Класът реализира този интерфейс, за да посочи, че неговите непреходни данни могат да бъдат записани в байтов поток или във файловата система.

      Основният проблемМаркерният интерфейс е, че интерфейсът дефинира конвенция за класове, които го реализират, и тази конвенция се наследява от всички подкласове. Това означава, че не можете да "де-реализирате" токена. В примера по-горе, ако създадете подклас, който не искате да бъде сериализиран (може би защото е в преходно състояние), трябва да прибягвате до изрично изхвърляне на NotSerializableException .

      Защо методът main() е деклариран като public static void?

      Защо публичен?Основният метод има модификатора за публичен достъп, така че може да бъде достъпен навсякъде и от всеки обект, който иска да използва този метод за стартиране на приложението. Тук не казвам, че JDK/JRE имат подобна причина, защото java.exe или javaw.exe (за Windows) използват извикване на Java Native Interface (JNI) за стартиране на метода, така че те могат да го извикат така или иначе независимо от модификатора за достъп .

      Защо статично?Да приемем, че нашият основен метод не е статичен. Сега, за да извикате всеки метод, имате нужда от екземпляр на класа. нали така? Java ви позволява да имате претоварени конструктори, всички знаем това. Тогава кой трябва да се използва и откъде ще дойдат параметрите за претоварения конструктор?

      Защо невалидна?Няма полза от върнатата стойност във виртуалната машина, която всъщност извиква този метод. Единственото нещо, което приложението иска да каже на процеса на повикване, е нормално или ненормално прекратяване. Това вече е възможно с помощта на System.exit(int) . Ненулева стойност предполага необичайно прекратяване, в противен случай всичко е наред.

      Каква е разликата между създаването на низ като new() и литерал (използвайки двойни кавички)?

      Когато създаваме низ с помощта на new() , той се създава в купчината и също така се добавя към низовия пул, докато низът, създаден с литерала, се създава само в пула от низове.

      Трябва да знаете повече за концепцията на низовия пул, за да отговорите на този или подобни въпроси. Моят съвет е да научите добре класа String и string pool.

      Как работи методът substring() на класа String?

      Подобно на други езици за програмиране, низовете в Java са поредици от знаци. Този клас е по-скоро като полезен клас за работа с тази последователност. Последователността на знаците се осигурява от следната променлива:

      /** Стойността се използва за съхранение на знаци. */ /** Стойността се използва за съхраняване на знаци */частна крайна стойност на символа; Следните променливи се използват за достъп до този масив в различни сценарии /** Отместването е първият индекс на използваното хранилище. */ /** Отместването е първият индекс на използваното хранилище. */частно окончателно int компенсиране; /** Броят е броят на знаците в низа. */ /** Броят е броят на знаците в низа. */частно окончателно int броене;

      Всеки път, когато създаваме подниз от съществуващ екземпляр на низ, методът substring() задава само променливите за отместване и броене на нови стойности. Вътрешният символен масив не е променен. Това е възможен източник на изтичане на памет, ако методът substring() се използва небрежно:

      Първоначалната стойност на стойността не се променя. Така че, ако създадете низ от 10 000 знака и създадете 100 поднизове с по 5-10 знака всеки, всички 101 обекта ще съдържат един и същ символен масив от 10 000 знака. Това без съмнение е загуба на памет.

      Това може да се избегне чрез промяна на кода по следния начин:

      заменете original.substring(beginIndex) с нов String(original.substring(beginIndex)) , където оригиналът е оригиналният низ.

      Обяснете как работи HashMap. Как се решава проблемът с дубликатите?

      Повечето от вас със сигурност ще се съгласят, че HashMap е най-любимата тема за интервюта в момента. Ако някой ме помоли да ви кажа „Как работи HashMap?“, ще отговоря просто: „По принципа на хеширането“. Колкото и просто да е.

      Така че хеширането е по същество начин за присвояване на уникален код на всяка променлива/обект след прилагане на формула/алгоритъм към неговите свойства.

      Определението за карта е: „Обект, който свързва ключове със стойности“. Много просто, нали? И така, HashMap съдържа свой собствен вътрешен клас Entry, който изглежда така:

      static клас Entry реализира Map . Влизане(краен ключ K; стойност V; следващ вход; окончателен хеш int; …//Още код е тук )

      Когато някой се опита да постави двойка ключ-стойност в HashMap, се случва следното:

      • Първо, ключовият обект се проверява срещу null. Ако ключът е нулев, стойността се съхранява в таблицата с позиции. Тъй като хешкодът за null винаги е 0.
      • След това следващата стъпка е да се изчисли хеш стойността чрез извикване на неговия метод hashCode() върху ключовата променлива. Този хеш се използва за изчисляване на индекса в масива за задържане на обекта Entry. Разработчиците на JDK са били наясно, че методът hashCode() може да бъде лошо написан и може да върне много голяма или много малка стойност. За да решат този проблем, те въведоха друг метод hash() и предават хеш кода на обекта към този метод, за да прехвърлят тази стойност към диапазона на размера на индекса на масива.
      • Методът indexFor(hash, table.length) сега се извиква за изчисляване на точната позиция за съхраняване на обекта Entry.
      • Сега основната част. Както знаем, че два различни обекта могат да имат една и съща стойност на хешкод, как могат да се съхраняват два различни обекта на едно и също място в архив [наречен кошче за боклук]?

      Отговорът е LinkedList. Ако си спомняте, класът Entry има свойство "следващ". Това свойство винаги сочи към следващия обект във веригата. Това поведение е много подобно на LinkedList.

      Така че, в случай на съвпадения на хешкод, Entry обектите се съхраняват под формата на LinkedList. Когато трябва да се постави запис в конкретен индекс, HashMap проверява ли дали съществува друг запис на това място? Ако там няма запис, нашият обект ще бъде записан на това място.

      Ако вече има друг обект в нашия индекс, следващото му поле се проверява. Ако е null, нашият обект става следващият възел в LinkedList. Ако next не е null , тази процедура се повтаря, докато бъде намерено нулево следващо поле.

      Какво се случва, ако добавим друга ключова стойност, равна на тази, която добавихме по-рано? Логично е той да замени старата стойност. Как се случва това? След определяне на индекса на позицията за обекта Entry, чрез повторение на LinkedList, разположен в нашия индекс, HashMap извиква метода equals() за стойността на ключа за всеки обект Entry. Всички тези обекти Entry в LinkedList имат една и съща стойност на хешкод, но методът equals() ще тества за истинско равенство. Ако ключ. равно(k) ще вярно, тогава и двете ще бъдат третирани като един и същ обект. Това ще доведе до замяна само на обекта стойност вътре в обекта Entry.

      Така HashMap гарантира уникалността на ключовете.

      Разлики между интерфейсите и абстрактните класове?

      Това е много често срещан въпрос, ако интервюирате за младши програмист. Най-съществените разлики са изброени по-долу:

      • В интерфейсите на Java променливите са априори окончателни. Абстрактните класове могат да съдържат неокончателни променливи.
      • Интерфейсът в Java определено не може да има реализация. Един абстрактен клас може да има екземпляри на методи, които реализират базовото поведение.
      • Членовете на интерфейса трябва да са публични. Един абстрактен клас може да има модификатори на достъп от всякакъв вид.
      • Интерфейсът трябва да бъде внедрен с ключовата дума implements. Абстрактен клас трябва да бъде разширен с ключова дума удължава.
      • В Java един клас може да реализира много интерфейси, но може да наследи само един абстрактен клас.
      • Интерфейсът е напълно абстрактен и не може да бъде инстанциран. Абстрактният клас също не може да има екземпляри на класа, но може да бъде извикан, ако съществува методът main().
      • Абстрактният клас е малко по-бърз от интерфейс, защото интерфейсът очаква търсене, преди да извика който и да е отменен метод в Java. В повечето случаи това е незначителна разлика, но ако пишете приложение с критично време, трябва да вземете предвид и този факт.
    1. Кога заменяте методите hashCode() и equals()?

      Методите hashCode() и equals() са дефинирани в класа Object, който е родителският клас на всички Java обекти. Поради тази причина всички Java обекти наследяват базовата реализация на тези методи.

      Методът hashCode() се използва за получаване на уникална целочислена стойност за даден обект. Тази стойност се използва за определяне на местоположението на кошницата, когато обектът трябва да бъде съхранен в структура от данни като HashTable. По подразбиране методът hashCode() връща целочислено представяне на адреса на паметта, където се съхранява обектът.

      Методът equals(), както подсказва името, се използва за проста еквивалентност на обекти. Основната реализация на метода е да се проверят препратките на двата обекта, за да се види дали са еквивалентни.

      Обърнете внимание, че обикновено е необходимо да се заменя методът hashCode() всеки път, когато методът equals() бъде отменен. Това е необходимо, за да се поддържа общата конвенция на метода hashCode, която гласи, че равните обекти трябва да имат еднакви хешкодове.

      Методът equals() трябва да определи равенството на връзката (тя трябва да бъде рекурсивна, симетрична и преходна). Освен това той трябва да бъде постоянен (ако обектът не се е променил, методът трябва да върне същата стойност). Също така, o.equals(null) винаги трябва да се връща фалшиво.

      hashCode() също трябва да е стабилен (ако обектът не се е променил при условията на метода equals(), той трябва да продължи да връща същата стойност.

      Връзката между двата метода е: винаги ако a.equals(b) , тогава a.hashCode() трябва да бъде същият като b.hashCode() .

    Успех с обучението!! Автор на статия Локеш Гупта Оригинална статияВръзки към други части: