Un ghid pentru viitorul dezvoltator Java. Interviu și carieră. Interviuri pentru dezvoltatori Java mijlocii Interviu Java Întrebări frecvente

M-am mutat în alt oraș, mă angajez, merg la interviuri. Mi s-a părut că întrebările care se pun acolo, deși cunoscute, totuși, strânse laolaltă, pot ajuta la pregătire și să te simți mai încrezător.

Întrebări pentru înțelegerea principiilor construirii unui SGBD.
1. Care este prima formă normală și procesul de normalizare? Care sunt formele normale?
2. Care este semnificația indexului DBMS, cum sunt aranjate, cum sunt stocate? Cum ați implementa aceeași funcționalitate? Ultima întrebare este pusă dacă nu există o înțelegere clară a indicilor.
3. Desenați o relație Multi-la-Mulți. De exemplu: tabele Autori și Cărți. Un autor poate avea mai multe cărți, iar o carte poate fi scrisă de mai mulți autori. Compuneți o interogare SQL pentru a selecta cărțile unui anumit autor.

Întrebări de bază despre Java.
4. Clasa de bază în Java este cunoscută a fi Object. Ce metode poți numi?
5. Spuneți-ne ce sunt equals și hashCode? Ce reguli și convenții există pentru implementarea acestor metode? Când se aplică?
6. Spuneți-ne despre metodele de așteptare, notificare, notificare. Cum sunt folosite, când, de ce sunt necesare? Ce este sincronizat?
7. Ce este finalizarea? De ce este nevoie? Ce puteți spune despre colectorul de gunoi și algoritmii săi.
8. De ce metoda clonării este declarată protejată? Ce este necesar pentru a implementa clonarea?
9. Care sunt modificatorii (acces și altele)? Ce este volatil și tranzitoriu? Pentru ce și în ce cazuri ar fi posibilă utilizarea implicită?

Cadrul de colecție Java
10. Care sunt interfețele de colecție în Java? Explicați cum diferă.
11. Ce implementări ale acestor interfețe cunoașteți?
12. Care este diferența dintre ArrayList și LinkedList. Cum sunt aranjate? Când ar trebui folosite.
13. Care este diferența dintre HashMap și TreeMap? Cum sunt configurate și cum funcționează? Ce se întâmplă cu timpul de acces la obiecte, ce dependențe?
14. Ce este Hashtable, prin ce diferă de HashMap? Până în prezent, a fost depreciat, cum folosiți în continuare funcționalitatea dorită?

Excepții
15. Ce este o excepție? Ce tipuri de excepții cunoașteți, cu ce diferă?
16. Poate fi propus un puzzle cu blocuri try-catch-finally și întrebarea ce va fi returnat sau ce excepție va fi trecută în cele din urmă?

Algoritmi
17. Ce algoritmi de sortare cunoașteți? Ce fel de algoritmi cunoașteți?
Mai mult, aici sunt posibile diverse întrebări suplimentare despre estimarea complexității algoritmilor, compararea lor între ei.

Modele de design.
18. Sunteți familiarizat cu vreun model de design?
19. Scrie un Singleton... Și cu încărcare leneșă. Ce se întâmplă dacă trebuie să fie sigur pentru fire? Când este mai rău încărcarea leneșă?
20. Ce poți spune despre MVC? Desenați o diagramă și explicați cum funcționează MVC.

O serie de întrebări pentru a înțelege suita de tehnologie J2EE.
21. Ce este un servlet, jsp, diferența lor?
22. Ce este Ajax? Cum este aranjată în mod fundamental această tehnologie?
23. Ce este un ORM, cum poate fi tradus și cum ar trebui să funcționeze?

Sarcini simple pentru scrierea algoritmilor.
24. Scrieți o funcție pentru a calcula factorialul.
25. Având în vedere o funcție pentru calcularea numerelor Fibonacci, se știe că funcționează. Găsiți eroarea de logică. Estimați complexitatea algoritmului rezultat.
26. Întoarceți șirul.
27. Calculați media tabloului.

Este util să rețineți că atunci când nu vă simțiți foarte încrezători, nu trebuie să spuneți cuvinte suplimentare. Spui un cuvânt în plus, iar ei se agață de el, desfășoară lanțul. Ei hype lucruri despre care nu sunt foarte siguri. Această capacitate a oamenilor - de a se agăța - trebuie folosită, dar în avantajul tău ;-)

Cunoașterea și înțelegerea... lucrurile sunt destul de diferite, deci
- diferiți algoritmi, cum ar fi sortarea, ar trebui să fie scrisi de dvs., chiar și dintr-un manual. Vedeți cum diferă unul de celălalt, comparați complexitatea lor.
- este util să privim diferite utilități și biblioteci, principiile grupării claselor în pachete și stilul de scriere a codului, comentând. Poate ajuta foarte mult la înțelegerea modificatorilor de acces, organizarea proiectului.
- înțelegând ceva anume, îi poți ajuta pe cei care știu mai puțin. Accesați orice forum și încercați să răspundeți la întrebări de interes pentru subiect. În discuție, poți lua ceva pentru tine. Puteți scrie un articol scurt. Desigur, trebuie să înțelegeți bine subiectul.
Orice lucrare care vizează îmbunătățirea propriilor calificări va fi vizibilă unui intervievator competent și nu va fi lăsată fără atenție. Singurul lucru de care trebuie să vorbiți sincer despre asta, nu vă subestimați capacitățile și abilitățile.
Pentru a avea un fel de punct de referință pentru formarea sau dezvoltarea ta ca specialist, poți să te uiți la ceva asemănător cu asta.

De fapt, întrebările enumerate mai sus sunt la nivelul Junior Developer, așa cum îmi imaginez. Undeva, poate mai profund, undeva mai puțin, dar ca fapt - Junior.

Fiecare soluție creează noi probleme.

Această secțiune este dedicată întrebărilor care pot fi adresate atunci când promovați un interviu pentru un post de programator Java.

Scopul este de a colecta nu numai întrebări (există o mulțime de ele pe Internet), ci și răspunsuri la ele într-un singur loc.

Pentru atribuire, citiți pe pagina principală a secțiunii Interviu

  1. Câte cuvinte cheie sunt rezervate de limbă, care sunt aceste cuvinte, care nu sunt folosite?
  2. Din ce caractere poate consta un nume de variabilă (identificator corect)?
  3. Ce înseamnă cuvântul „inițializare”?
  4. Care sunt principalele grupuri de tipuri de date?
  5. Ce tipuri primitive cunoașteți?
  6. Ce știți despre conversia tipurilor de date primitive, există vreo pierdere de date, este posibilă conversia tipului boolean?
  7. Ce valori sunt variabilele initializate implicite?
  8. Cum se transmite valoarea unei variabile (prin referință/valoare)?
  9. Ce știți despre funcția principală, care sunt condițiile preliminare pentru definirea acesteia?
  10. Ce operații și operatori logici cunoașteți?
  11. Care este diferența dintre notația operatorilor logici scurt și lung?
  12. Ce este un tabel de adevăr?
  13. Ce este un operator de selecție ternar?
  14. Ce operații aritmetice unare și binare cunoașteți?
  15. Ce operațiuni pe biți cunoașteți?
  16. Care este rolul și regulile pentru scrierea unei declarații select (comutator)?
  17. Ce cicluri cunoașteți, care sunt diferențele dintre ele?
  18. Ce este o „iterație a unei bucle”?
  19. Ce parametri are bucla for, pot fi omise?
  20. Ce instrucțiune este folosită pentru a opri imediat bucla?
  21. Ce instrucțiune este folosită pentru a trece la următoarea iterație a buclei?
  22. Ce este o matrice?
  23. Ce tipuri de matrice cunoașteți?
  24. Ce știi despre cursurile de wrapper?
  25. Ce este împachetarea automată (boxing/unboxing)?

  1. Numiți principiile POO și descrieți-le pe fiecare.
  2. Definiți termenul „clasă”.
  3. Ce este un câmp/atribut de clasă?
  4. Cum se organizează corect accesul la câmpurile de clasă?
  5. Definiți termenul „constructor”.
  6. Care este diferența dintre constructorii impliciti, constructorii de copiere și un constructor cu parametri?
  7. Ce modificări ale nivelului de acces cunoașteți, spuneți-ne despre fiecare dintre ele.
  8. Spuneți-ne despre caracteristicile unei clase cu un singur constructor privat.
  9. Ce spun cuvintele cheie „acest”, „super”, unde și cum pot fi folosite?
  10. Definiți termenul „metodă”.
  11. Ce este o semnătură de metodă?
  12. Ce metode se numesc supraîncărcate?
  13. Metodele non-statice le pot supraîncărca pe cele statice?
  14. Spuneți-ne despre metodele de suprascriere.
  15. Poate o metodă să ia un număr diferit de parametri (argumente de lungime variabilă)?
  16. Este posibil să restrângeți nivelul de acces/tipul de returnare atunci când treceți peste o metodă?
  17. Cum se accesează metodele suprascrise ale clasei părinte?
  18. Care sunt transformările de sus în jos și de jos în sus?
  19. Care este diferența dintre suprasolicitare și supraîncărcare?
  20. Unde pot fi inițializate câmpurile statice/non-statice?
  21. De ce este nevoie de instanța operatorului?
  22. De ce avem nevoie și ce sunt blocurile de inițializare?
  23. Care este ordinea apelării constructorilor și a blocurilor de inițializare a două clase: un copil și strămoșul său?
  24. Unde și pentru ce este folosit modificatorul abstract?
  25. Este posibil să declarați o metodă abstractă și statică în același timp?
  26. Ce înseamnă cuvântul cheie static?
  27. La care constructe Java se aplică modificatorul static?
  28. Ce se întâmplă dacă apare o excepție într-un bloc static de cod?
  29. Este posibil să supraîncărcați o metodă statică?
  30. Ce este o clasă statică, care sunt caracteristicile utilizării ei?
  31. Care sunt caracteristicile inițializării variabilelor statice finale?
  32. Cum afectează modificatorul static o clasă/metodă/câmp?
  33. Ce înseamnă cuvântul cheie final?
  34. Definiți termenul „interfață”.
  35. Care sunt modificatorii impliciti pentru câmpurile și metodele de interfață?
  36. De ce nu poate fi declarată o metodă de interfață finală sau statică?
  37. Ce tipuri de clase există în java (imbricate... etc)
  38. Care sunt caracteristicile creării claselor imbricate: simple și statice.
  39. Ce știi despre clasele imbricate, de ce sunt folosite? Clasificare, cazuri de utilizare, încălcare a încapsulării.
  40. Care este diferența dintre clasele imbricate și cele interioare?
  41. Ce clase se numesc anonime?
  42. Cum se accesează un câmp al unei clase exterioare dintr-o clasă imbricată?
  43. Cum puteți accesa variabila locală a unei metode dintr-o clasă anonimă declarată în corpul acestei metode? Există restricții pentru o astfel de variabilă?
  44. Cum este o clasă personalizată legată de clasa Object?
  45. Povestește-ne despre fiecare dintre metodele clasei Object.
  46. Ce este metoda equals(). Cum este diferit de operațiunea ==.
  47. Dacă doriți să înlocuiți equals(), ce condiții trebuie îndeplinite pentru metoda suprascrisă?
  48. Dacă equals() este suprascris, există alte metode care ar trebui înlocuite?
  49. Care este particularitatea metodelor hashCode și equals? Cum sunt implementate metodele hashCode și equals în clasa Object? Ce reguli și convenții există pentru implementarea acestor metode? Când se aplică?
  50. Ce metodă returnează o reprezentare șir a unui obiect?
  51. Ce se întâmplă dacă suprascrieți equals fără a înlocui hashCode? Ce probleme ar putea apărea?
  52. Există îndrumări cu privire la ce câmpuri ar trebui folosite la calcularea codului hash?
  53. Crezi că vor fi probleme dacă obiectul care este folosit ca cheie în hashMap schimbă câmpul care participă la definiția hashCode?
  54. Care este diferența dintre o clasă abstractă și o interfață, în ce cazuri o vei folosi?
  55. Este posibil să accesați variabile de clasă privată și, dacă da, cum?
  56. Ce este volatil și tranzitoriu? Pentru ce și în ce cazuri ar fi posibilă utilizarea implicită?
  57. Extinderea modificatorilor la moștenirea, suprascrierea și ascunderea metodelor. Dacă o clasă părinte are o metodă privată, copilul își poate extinde vizibilitatea? Dacă este protejat? Și la vizibilitate îngustă?
  58. Are sens să declari o metodă privată finală?
  59. Care sunt caracteristicile initializării variabilei finale?
  60. Ce se întâmplă dacă singurul constructor de clasă este declarat final?
  61. Ce este finalizarea? De ce este nevoie? Ce puteți spune despre colectorul de gunoi și algoritmii săi.
  62. De ce metoda clonării este declarată protejată? Ce este necesar pentru a implementa clonarea?
  63. Sunteți familiarizat cu vreun model de design?
  64. Scrie un Singleton... Dar cu încărcare leneșă. Ce se întâmplă dacă trebuie să fie sigur pentru fire? Când este mai rău încărcarea leneșă?
  65. Ce poți spune despre MVC? Desenați o diagramă și explicați cum funcționează MVC.
  66. Scrieți o funcție pentru a calcula factorialul.
  67. Având în vedere o funcție pentru calcularea numerelor Fibonacci, se știe că funcționează. Găsiți eroarea de logică. Estimați complexitatea algoritmului rezultat.

  1. Definiți „excluderea”
  2. Care este ierarhia excepțiilor.
  3. Pot/ar trebui să mă ocup de erorile jvm?
  4. Care sunt modalitățile de a gestiona excepțiile?
  5. Ce înseamnă cuvântul cheie throws?
  6. Ce are special blocul final? Este întotdeauna îndeplinită?
  7. Nu poate exista nici un bloc de captură atunci când prindeți excepții?
  8. V-ați putea gândi la o situație în care blocul final nu ar fi executat?
  9. Poate un singur bloc de captură să prindă mai multe excepții (de la aceleași ramuri de moștenire și diferite)?
  10. Ce știți despre excepțiile gestionate și necontrolate (bifate/neverificate)?
  11. Ce este special la RuntimeException?
  12. Cum să scrieți propria excepție („personalizată”)? După ce motive te vei ghida atunci când alegi tipul de excepție: bifată/nebifată?
  13. Ce operator vă permite să forțați să fie aruncată o excepție?
  14. Există condiții suplimentare pentru o metodă care ar putea arunca o excepție?
  15. Metoda principală poate arunca o excepție în exterior și, dacă da, unde va fi tratată această excepție?
  16. Dacă o instrucțiune return este conținută atât într-un bloc catch, cât și într-un bloc final, care este „mai important”?
  17. Ce știi despre OutOfMemoryError?
  18. Ce știi despre SQLException? Ce tip de bifat sau nebifat este, de ce?
  19. Ce este eroarea? În acest caz se folosește Error. Dați un exemplu de eroare.
  20. Ce construct este folosit în Java pentru gestionarea excepțiilor?
  21. Să presupunem că există un bloc try-finally. O excepție a fost aruncată în blocul try și execuția a fost mutată în blocul final. Blocul final a făcut și o excepție. Care dintre cele două excepții va „arunca” din blocul try-finally? Ce se întâmplă cu a doua excepție?
  22. Să presupunem că există o metodă care poate arunca IOException și FileNotFoundException în ce ordine ar trebui să meargă blocurile catch? Câte blocuri catch vor fi executate?

  1. Definiți termenul „colecție”.
  2. Enumerați beneficiile utilizării colecțiilor.
  3. Ce fel de date pot stoca colecțiile?
  4. Care este ierarhia colecțiilor?
  5. Ce știi despre colecțiile Listă?
  6. Ce știi despre colecțiile Set?
  7. Ce știi despre colecțiile de coadă?
  8. Ce știți despre colecțiile de hărți, care este diferența lor fundamentală?
  9. Denumiți principalele implementări ale List, Set, Map.
  10. Ce implementări ale SortedSet cunoașteți și care sunt caracteristicile acestora?
  11. Care sunt diferențele/asemănările dintre Listă și Set?
  12. Care este diferența/comunul dintre clasele ArrayList și LinkedList, când este mai bine să utilizați ArrayList și când este mai bine să utilizați LinkedList?
  13. Când este rezonabil să folosiți o matrice mai degrabă decât un ArrayList?
  14. Prin ce diferă ArrayList de Vector?
  15. Ce știți despre implementarea claselor HashSet și TreeSet?
  16. Care este diferența dintre HashMap și TreeMap? Cum sunt configurate și cum funcționează? Ce se întâmplă cu timpul de acces la obiecte, ce dependențe?
  17. Ce este Hashtable, prin ce diferă de HashMap? Până în prezent, a fost depreciat, cum folosiți în continuare funcționalitatea dorită?
  18. Ce se întâmplă dacă punem două valori într-o Hartă cu aceeași cheie?
  19. Cum se setează ordinea obiectelor din colecție, cum se sortează colecția?
  20. Definiți termenul „iterator”.
  21. Ce funcționalități oferă clasa Colecții?
  22. Cum să obțineți o colecție nemodificabilă?
  23. Ce colecții sunt sincronizate?
  24. Cum să obțineți o colecție sincronizată de la una nesincronizată?
  25. Cum să obțineți o colecție doar pentru citire?
  26. De ce Map nu moștenește din Collection?
  27. Care este diferența dintre Iterator și Enumerare?
  28. Cum este implementată bucla foreach?
  29. De ce nu există o metodă iterator.add() pentru a adăuga elemente la o colecție?
  30. De ce clasa iteratorului nu are o metodă pentru a obține următorul element fără a muta cursorul?
  31. Care este diferența dintre Iterator și ListIterator?
  32. Care sunt modalitățile de iterare prin toate elementele unei liste?
  33. Care este diferența dintre proprietățile de siguranță și cele rapide?
  34. Ce ar trebui să fac pentru a evita să arunc o excepție ConcurrentModificationException?
  35. Ce este o stivă și o coadă, spune-ne care sunt diferențele lor?
  36. Care este diferența dintre interfețele Comparabil și Comparator?
  37. De ce colecțiile nu moștenesc interfețele Cloneable și Serializable?

  1. Ce clase de „șir” cunoașteți?
  2. Care sunt principalele proprietăți ale claselor „șir” (trăsăturile lor)?
  3. Este posibil să moșteniți tipul șir, de ce?
  4. Definiți termenul concatenare șir.
  5. Cum se transformă șirul în număr?
  6. Cum se compară valoarea a două șiruri de caractere?
  7. Cum se inversează un șir?
  8. Cum funcționează compararea a două șiruri?
  9. Cum să tăiați spațiile de la sfârșitul unui șir?
  10. Cum se înlocuiește un caracter într-un șir?
  11. Cum să obțineți o parte dintr-un șir?
  12. Definiți termenul „pool de șiruri”.
  13. Ce metodă vă permite să selectați un subșir dintr-un șir?
  14. Cum se împarte un șir în subșiruri de un delimitator dat?
  15. Ce metodă se numește pentru a converti o variabilă într-un șir?
  16. Cum să aflați valoarea unui anumit caracter al unui șir, cunoscând numărul său ordinal din șir?
  17. Cum să găsiți caracterul necesar într-un șir?
  18. Este posibil să sincronizați accesul la rând?
  19. Ce face metoda intern()?
  20. Cum diferă clasele String, StringBuffer și StringBuilder și ce au în comun?
  21. Care este modalitatea corectă de a compara valorile șirurilor a două obiecte diferite de tip String și StringBuffer?
  22. De ce șirul este imuabil și finalizat în Java?
  23. De ce este preferabilă o matrice de caractere unui șir pentru stocarea parolei?
  24. De ce este un șir o cheie populară într-un HashMap în Java?
  25. Scrieți o metodă pentru a elimina un anumit caracter dintr-un șir.

  1. Care sunt tipurile de fluxuri I/O?
  2. Numiți principalii strămoși ai fluxurilor I/O.
  3. Care sunt asemănările și diferențele dintre următoarele fluxuri: InputStream, OutputStream, Reader, Writer?
  4. Ce știi despre RandomAccessFile?
  5. Care sunt modurile de acces la fișiere?
  6. În ce pachete sunt clasele de flux?
  7. Ce știi despre clasele de suprastructură?
  8. Ce clasă de supliment vă permite să citiți date din fluxul de octeți de intrare în formatul tipurilor de date primitive?
  9. Ce clasă suplimentară vă permite să accelerați citirea/scrierea prin utilizarea unui buffer?
  10. Ce clase vă permit să convertiți fluxurile de octeți în fluxuri de caractere și invers?
  11. Ce clasă este proiectată să funcționeze cu elemente ale sistemului de fișiere (EFS)?
  12. Ce caracter este separatorul când se specifică calea către EFS?
  13. Cum se selectează toate EFS dintr-un anumit director după un criteriu (de exemplu, cu o anumită extensie)?
  14. Ce știi despre interfața FilenameFilter?
  15. Ce este serializarea?
  16. Care sunt condițiile pentru o serializare „sigură” a unui obiect?
  17. Ce clase vă permit să arhivați obiecte?

  1. Definiți termenul „proces”.
  2. Definiți termenul „flux”.
  3. Definiți termenul „sincronizare fir”.
  4. Cum interacționează programele, procesele și firele de execuție?
  5. Când este recomandabil să creați mai multe fire?
  6. Ce se poate întâmpla dacă două fire execută același cod într-un program?
  7. Ce știi despre firul principal al programului?
  8. Care sunt modalitățile de a crea și de a rula fire?
  9. Ce metodă începe un fir de execuție?
  10. Ce metodă descrie acțiunea unui fir în timpul execuției?
  11. Când își termină execuția un fir?
  12. Cum se sincronizează metoda?
  13. Cum să forțezi oprirea unui fir?
  14. Definiți termenul „fir demon”.
  15. Cum se creează un fir de demon?
  16. Cum să obțineți fluxul curent?
  17. Definiți termenul „monitor”.
  18. Cum se întrerupe execuția unui fir?
  19. În ce stări poate fi un flux?
  20. Ce este monitorul atunci când apelați metoda non-statică și statică?
  21. Ce este monitorul când se execută o secțiune a codului metodei?
  22. Ce metode vă permit să sincronizați execuția firelor?
  23. Ce metodă pune un fir în modul inactiv?
  24. Care este funcționalitatea metodelor notify și notifyAll?
  25. Ce face metoda join?
  26. Care sunt condițiile pentru apelarea metodei wait/notify?
  27. Definiți termenul „blocare reciprocă”.
  28. Care este diferența dintre metodele întrerupt, întrerupt, isInterrupted?
  29. În ce caz va fi aruncată o Excepție întreruptă, ce metode o pot arunca?
  30. modificatori volatili și metoda yield().
  31. Pachetul java.util.concurrent
  32. Există o metodă care efectuează operația i++. Variabila i de tip int. Se presupune că codul va fi executat într-un mediu cu mai multe fire. Ar trebui să fie sincronizat blocul?
  33. Ce se folosește ca mutex dacă metoda este declarată sincronizată static? Este posibil să se creeze noi instanțe ale unei clase în timp ce se execută o metodă sincronizată statică?
  34. Să presupunem că a apărut o excepție RuntimeException în metoda de rulare care nu a fost prinsă. Ce se va întâmpla cu fluxul? Există vreo modalitate de a ști că a avut loc o excepție (fără a înfășura întregul corp de rulare într-un bloc try-catch)? Există vreo modalitate de a relua firul după ce s-a întâmplat acest lucru?
  35. Ce instrumente standard Java ați folosi pentru a implementa un pool de fire?
  36. Ce este un ThreadGroup și de ce este necesar?
  37. Ce este un ThreadPool și de ce este necesar?
  38. Ce este un ThreadPoolExecutor și de ce este necesar?
  39. Ce sunt „tipurile atomice” în Java?
  40. De ce este necesară clasa ThreadLocal?
  41. Ce este un executor?
  42. Ce este ExecutorService?
  43. De ce este nevoie de ScheduledExecutorService?
Această listă de peste 300 de întrebări (fără răspunsuri) a fost găsită la http://becomejavasenior.com/ . Alți autori sunt enumerați acolo.

58489 Vizualizări totale 15 Vizualizări Astăzi

Vizualizari: 38 283

  • Ce este OOP?
  • Ce este un obiect?
  • Numiți principiile de bază ale POO.
  • Ce este moștenirea?
  • Ce este polimorfismul? Ce manifestări ale polimorfismului în Java cunoașteți?
  • Ce este încapsularea?
  • Ce este abstractizarea?
  • Care sunt avantajele limbajelor de programare orientate pe obiecte?
  • Cum îmbunătățește utilizarea unei abordări orientate pe obiecte dezvoltarea software-ului?
  • Există o expresie „este” și „are”. Ce înseamnă ele în termeni de principii OOP? Care este diferența dintre compoziție și agregare?
  • Ce înțelegeți prin polimorfism, încapsulare și legătură dinamică?

nucleu java.

  • Care este diferența dintre JRE, JVM și JDK?
  • Descrieți modificatorii de acces în Java.
  • Ce este accesul la nivel de pachet.
  • Cum este o clasă abstractă diferită de o interfață? Când ați folosi o clasă abstractă și când ați folosi o interfață?
  • Poate un obiect să acceseze o variabilă de clasă privată? Dacă da, cum?
  • Pentru ce sunt blocurile statice în Java?
  • Este posibil să supraîncărcați o metodă statică?
  • Povestește-ne despre clasele interioare. Când le vei folosi?
  • Care este diferența dintre variabila de instanță și variabila statică? Dă un exemplu.
  • Dați un exemplu când puteți utiliza o metodă statică?
  • Spuneți-ne despre clasele de încărcare și despre încărcarea dinamică a claselor.
  • Care este scopul operatorului „assert” în Java?
  • De ce unele interfețe nu definesc deloc metode?
  • Care este principala diferență dintre String, StringBuffer, StringBuilder?
  • Spuneți-mi despre fluxurile Java I/O.
  • Ce este memoria Heap și Stack în Java?
  • Care este diferența dintre memoria stivă și memoria heap în Java?
  • Spuneți-ne despre modelul de memorie în Java?
  • Cum funcționează gunoiul?
  • Spune-ne despre tipul de turnare. Ce este retrogradarea și promovarea? Când primiți o ClassCastException?
  • Ce este o clasă statică, care sunt caracteristicile utilizării ei?
  • Cum se accesează un câmp al clasei exterioare dintr-o clasă imbricată.
  • Ce tipuri de clase imbricate există? La ce sunt folosite?
  • Este posibil să se schimbe atunci când se anulează o metodă:
  • Modificator de acces
  • tip de returnare
  • Tipul sau numărul argumentului
  • Numele argumentului
  • Schimbați ordinea, cantitatea sau eliminați cu totul secțiunea de aruncări?
  • Ce este autoboxing-ul?
  • Ce este generice?
  • Care este adevăratul scop al utilizării tipurilor generice în Java?
  • Cum sunt transmise variabilele la metode, prin valoare sau prin referință?
  • Ce metode are clasa Object?
  • Reguli pentru suprascrierea metodei Object.equals().
  • Dacă doriți să înlocuiți equals(), ce condiții trebuie îndeplinite pentru metoda suprascrisă?
  • Care este relația dintre hashCode și equals?
  • Cum sunt implementate metodele hashCode și equals în clasa Object?
  • Ce se întâmplă dacă suprascrieți equals fără a înlocui hashCode? Ce probleme ar putea apărea?
  • Există îndrumări cu privire la ce câmpuri ar trebui folosite la calcularea codului hash?
  • Pentru ce este metoda hashCode()?
  • Reguli pentru suprascrierea metodei Object.hashCode().
  • Povestește-ne despre clonarea obiectelor. Care este diferența dintre clonarea superficială și cea profundă?
  • Reguli pentru suprascrierea metodei Object.clone().
  • Unde și cum poți folosi un constructor privat?
  • Ce este un constructor implicit?
  • Descrieți metoda Object.finalize().
  • Care este diferența dintre cuvintele final, final și finalize?
  • Descrieți ierarhia excepțiilor.
  • Ce fel de excepții în Java cunoașteți, cum diferă?
  • Ce este bifată și nebifată excepția?
  • Cum să-ți creezi propria excepție nebifată?
  • Care sunt excepțiile Unchecke?
  • Ce este eroarea?
  • Descrieți cum funcționează blocul try-catch-finally.
  • Este posibil să utilizați un bloc try-finally (fără catch)?
  • Blocul final este întotdeauna executat?
  • Care sunt caracteristicile clasei String? ce face metoda intern().
  • Este posibil să moșteniți tipul șir, de ce?
  • De ce este un șir o cheie populară într-un HashMap în Java?
  • Definiți termenul concatenare șir.
  • Cum se inversează un șir?
  • Cum se compară valoarea a două șiruri de caractere?
  • Cum să tăiați spațiile la începutul și la sfârșitul unui șir?
  • Definiți termenul „pool de șiruri”.
  • Este posibil să sincronizați accesul la rând?
  • Care este modalitatea corectă de a compara valorile șirurilor a două obiecte diferite de tip String și StringBuffer?
  • De ce șirul este imuabil și finalizat în Java?
  • Scrieți o metodă pentru a elimina un anumit caracter dintr-un șir.
  • Ce este reflexia?
  • Ce se întâmplă cu garbage collector (GC) dacă apare o excepție în timpul execuției metodei finalize() a unui obiect?
  • Ce este internaționalizarea, localizarea?
  • Ce sunt adnotările în Java?
  • Ce funcții îndeplinește Adnotarea?
  • Ce adnotări încorporate în Java știți?
  • Ce fac adnotările @Retention, @Documented, @Target și @Inherited?
  • Ce fac adnotările @Override, @Deprecated, @SafeVarargs și @SuppressWarnings?
  • Ce ciclu de viață al adnotărilor poate fi specificat cu @Retention?
  • Ce elemente pot fi adnotate, cum se specifică?
  • Cum să-ți creezi adnotarea?
  • Ce tipuri de atribute sunt permise în adnotări?
  • Ce este JMX?
  • Ce beneficii oferă JMX?
  • Ce altceva poate face JMX în afară de telecomandă?
  • Ce este MBean?
  • Ce tipuri de MBeans există?
  • Ce este MBean Server?
  • Ce mecanisme asigură securitatea în tehnologia Java?
  • Care sunt unele dintre verificările pe care le efectuează verificatorul Java bytecode?
  • Ce știi despre „managerul de protecție” în Java?
  • Ce este JAS?
  • Ce este refactorizarea?

Cadrul de colecții Java.

  • Ce este o colecție?
  • Denumiți principalele interfețe ale colecțiilor și implementarea lor.
  • Prin ce diferă ArrayList de LinkedList? În ce cazuri este mai bine să folosiți primul și în care al doilea?
  • Care este diferența dintre HashMap și Hashtable?
  • Prin ce diferă ArrayList de Vector?
  • Cum se compară elementele de colecție?
  • Aranjați următoarele interfețe într-o ierarhie: Listă, Set, Hartă, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
  • De ce Harta nu este o colecție în timp ce Lista și Setul sunt colecție?
  • Definiți termenul „iterator”.
  • Ce știi despre interfața Iterable?
  • Cum se convertesc HashSet în ArrayList într-o singură linie?
  • Cum se convertesc ArrayList în HashSet într-o singură linie?
  • Cum se repetă peste toate cheile Mapului, având în vedere că Map nu este iterabilă?
  • Cum se repetă peste toate valorile Map, având în vedere că Map nu este iterabilă?
  • Cum se repetă peste toate perechile cheie-valoare din Map, având în vedere că Map nu este iterabilă?
  • Care este „sortarea” lui SortedMap, în afară de faptul că toString() imprimă totul în ordine?
  • Cum să copiați elemente din orice colecție într-o matrice într-un singur apel?
  • Implementați o diferență simetrică a două colecții folosind metodele Collection (addAll(), removeAll(), retainAll()).
  • Comparați enumerarea și iteratorul.
  • Cum sunt legate Iterable și Iterator?
  • Care este relația dintre Iterable, Iterator și „for-each” introdus în Java 5?
  • Comparați Iterator și ListIterator.
  • Ce se întâmplă dacă apelez Iterator.next() fără să „întreb” Iterator.hasNext()?
  • Ce se întâmplă dacă apelez Iterator.next() înainte de a apela Iterator.hasNext() de 10 ori? Îmi lipsesc 9 articole?
  • Dacă am o colecție și un iterator copil, colecția se va schimba dacă apelez iterator.remove()?
  • Dacă am o colecție și un iterator copil, se va schimba iteratorul dacă apelez collection.remove(..)?
  • De ce au adăugat ArrayList dacă exista deja un Vector?
  • Implementarea clasei ArrayList are următoarele câmpuri: Object elementData, int size. Explicați de ce trebuie să stocați dimensiunea separat când puteți lua oricând elementData.length?
  • LinkedList este o listă cu legături unice, duble sau cu patru legături?
  • Care este cel mai rău moment pentru metoda contain() pentru un element care se află într-o Lista LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N))?
  • Care este cel mai rău moment pentru metoda contain() pentru un element care se află într-o ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N))?
  • Care este cel mai rău moment pentru metoda LinkedList add() (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Care este cel mai rău moment pentru o metodă ArrayList add() (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Câte elemente sunt alocate în memorie când se apelează ArrayList.add()?
  • Câte elemente sunt alocate în memorie când este apelat LinkedList.add()?
  • Estimați cantitatea de memorie pentru a stoca o primitivă de tip octet în LinkedList?
  • Estimați cantitatea de memorie pentru a stoca o primitivă de tip octet în ArrayList?
  • Adaug un element la mijlocul Listei: list.add(list.size()/2, newElem). Pentru cine este această operațiune mai lentă - pentru ArrayList sau pentru LinkedList?
  • Cum se repetă elementele LinkedList în ordine inversă fără a utiliza slow get(index)?
  • Cum să obțineți o listă cu toate elementele, cu excepția primelor și ultimelor 3, cu un apel din Listă?
  • Pot diferite obiecte din memorie (ref0 != ref1) să aibă ref0.hashCode() == ref1.hashCode()?
  • Pot diferite obiecte din memorie (ref0 != ref1) să aibă ref0.equals(ref1) == true?
  • Pot referințe diferite la același obiect din memorie (ref0 == ref1) să aibă ref0.equals(ref1) == false?
  • Există o clasă Point(int x, y;). De ce este preferabil un cod hash de forma 31 * x + y decât x + y?
  • Dacă clasa Point(int x, y;) este „corectă” pentru a implementa metoda equals (return ref0.x == ref1.x && ref0.y == ref1.y), dar faceți codul hash ca int hashCode( ) ( returnează x;), vor fi astfel de puncte plasate corect și recuperate din HashSet?
  • equals() generează o relație de echivalență. Care dintre proprietățile are o astfel de relație: comutativitate, simetrie, reflexivitate, distributivitate, asociativitate, tranzitivitate?
  • Este posibil să implementați equals(Object that) (return this.hashCode() == that.hashCode()) astfel?
  • equals necesită verificarea faptului că argumentul (equals(Object that)) este de același tip ca și obiectul însuși. Care este diferența dintre this.getClass() == that.getClass() și acea instanță a MyClass?
  • Este posibil să implementați metoda equals a clasei MyClass astfel: clasa MyClass (public boolean equals(MyClass that) (return this == that;))?
  • Va funcționa HashMap dacă toate cheile returnează int hashCode() (return 42;)?
  • De ce au adăugat HashMap dacă exista deja un Hashtable?
  • Potrivit lui Knuth și Kormen, există două implementări principale ale tabelului hash: bazate pe adresare deschisă și bazată pe metoda de înlănțuire. Cum este implementat HashMap? De ce au făcut asta (în opinia ta)? Care sunt avantajele și dezavantajele fiecărei abordări?
  • Câte clicuri pe link au loc când faceți HashMap.get(key) pe o cheie care se află în tabel?
  • Câte obiecte noi sunt create atunci când adăugați un element nou la un HashMap?
  • Cum funcționează un HashMap când încercați să stocați două elemente în el prin chei cu același hashCode, dar pentru care este egal cu == false?
  • HashMap poate degenera într-o listă chiar și pentru chei cu hashCode diferit. Cum este posibil acest lucru?
  • Care este cel mai rău moment pentru o metodă get(key) pentru o cheie care nu este în tabel (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Care este cel mai rău moment pentru o metodă get(key) pentru o cheie care se află într-un tabel (O(1), O(log(N)), O(N), O(N*log(N)), O (N*N))?
  • Explicați semnificația parametrilor din constructorul HashMap(int initialCapacity, float loadFactor).
  • Care este diferența dintre HashMap și IdentityHashMap? Pentru ce este IdentityHashMap? Cum poate fi utilă implementarea serializării sau clonării?
  • Care este diferența dintre HashMap și WeakHashMap? Pentru ce este WeakHashMap?
  • WeakHashMap folosește WeakReferences. De ce nu creați un SoftHashMap pe SoftReferences?
  • WeakHashMap folosește WeakReferences. De ce nu creați un PhantomHashMap pe PhantomReferences?
  • Faceți un HashSet dintr-un HashMap (utilizați doar mai multe chei, nu mai multe valori).
  • Faceți HashMap din HashSet(HashSet >).
  • Comparați interfețele java.util.Queue și java.util.Deque.
  • Cine extinde pe cine: coada extinde Deque sau Deque extinde coada?
  • De ce LinkedList implementează atât Listă, cât și Deque?
  • Care este diferența dintre clasele java.util.Arrays și java.lang.reflect.Array?
  • Care este diferența dintre clasele java.util.Collection și java.util.Collections?
  • Scrieți un program fără fire care determină o colecție să arunce o excepție ConcurrentModificationException.
  • Ce este „comportamentul de eșec rapid”?
  • Există o clasă specială java.util.EnumSet pentru seturi de enumerari? Pentru ce? De ce autorilor nu le-a plăcut HashSet sau TreeSet?
  • java.util.Stack - Considerat „depreciat”. Ce se recomandă pentru a-l înlocui? De ce?
  • Ce colecție implementează disciplina de serviciu FIFO?
  • Ce colecție implementează disciplina de serviciu FILO?
  • Dați un exemplu când o colecție aruncă o excepție UnsupportedOperationException.
  • De ce nu poți scrie „ArrayList numere = nou ArrayList ();" dar puteți să „Listați numere = nou ArrayList ();"?
  • LinkedHashMap - ce este această „fiară”? Ce este în el din LinkedList și ce este din HashMap?
  • LinkedHashSet - ce este această „fiară”? Ce conține de la LinkedList și ce este de la HashSet?
  • Ei spun că este ușor să faci un cache simplu cu „politica de invalidare” pe LinkedHashMap, știi cum?
  • Ce vă permite PriorityQueue să faceți?
  • Care sunt diferențele dintre java.util.Comparator și java.lang.Comparable?

Java 8.

  • Ce este o legătură simbolică?
  • Care este diferența dintre I/O și NIO?
  • Ce caracteristici ale NIO cunoașteți?
  • Care sunt tipurile de fluxuri I/O?
  • Denumiți principalele clase de fluxuri de intrare/ieșire.
  • Cum diferă OutputStream, InputStream, Writer, Reader și ce au în comun?
  • Pentru ce subclase ale clasei de bază InputStream știți pentru ce sunt?
  • Ce știi despre RandomAccessFile?
  • Ce moduri de acces la fișiere are RandomAccessFile?
  • Care sunt subclasele clasei de bază OutputStream și știți pentru ce sunt acestea?
  • Pentru ce se folosește PushbackInputStream?
  • Pentru ce se folosește SequenceInputStream?
  • Pentru ce subclase ale clasei de bază Reader știți pentru ce sunt?
  • Pentru ce subclase ale clasei de bază Writer știți pentru ce sunt?
  • Ce este calea absolută și calea relativă?
  • În ce pachete sunt clasele de flux?
  • Ce știi despre clasele de suprastructură?
  • Ce clasă de supliment vă permite să citiți date din fluxul de octeți de intrare în formatul tipurilor de date primitive?
  • Ce clasă suplimentară vă permite să accelerați citirea/scrierea prin utilizarea unui buffer?
  • Ce clase vă permit să convertiți fluxurile de octeți în fluxuri de caractere și invers?
  • Care este diferența dintre clasa PrintWriter și clasa PrintStream?
  • Care clasă este proiectată să funcționeze cu elemente ale sistemului de fișiere?
  • Ce caracter este delimitătorul când se specifică o cale în sistemul de fișiere?
  • Ce metode din clasa File cunoașteți?
  • Ce știi despre interfața FileFilter?
  • Ce clase vă permit să arhivați obiecte?

  • Pe ce obiect are loc sincronizarea atunci când este apelată o metodă sincronizată statică?
  • Pentru ce este folosit cuvântul cheie volatil, sincronizat, tranzitoriu, nativ?
  • Ce înseamnă prioritatea firului?
  • Ce sunt firele daemon în Java?
  • Ce înseamnă să potolești pârâul?
  • În ce stări poate fi un fir în java? Cum funcționează de fapt un flux?
  • Care este diferența dintre cele două interfețe pentru implementarea sarcinilor Runnable și Callable?
  • Diferențele dintre CyclicBarrier și CountDownLatch?
  • Ce este o condiție de cursă?
  • Cum să oprești un fir?
  • Ce se întâmplă când apare o excepție într-un fir?
  • Ce este o variabilă ThreadLocal?
  • Ce este FutureTask?
  • Diferența dintre întrerupt și isInterrupted?
  • De ce sunt apelate metodele de așteptare și notificare într-un bloc sincronizat?
  • Ce este un pool de fire?
  • Diferențele dintre livelock și deadlock?
  • Cum se verifică dacă un fir ține un lacăt?
  • Cum să obțineți o descărcare de fir?
  • Ce setare JVM este folosită pentru a controla dimensiunea stivei unui fir?
  • Diferențe între sincronizat și ReentrantLock?
  • Ce este un semafor?
  • Ce se întâmplă dacă coada pool-ului de fire este deja plină și trimiteți o sarcină?
  • Diferențele dintre metodele submit() și execute() ale unui pool de fire?
  • Ce este o metodă de blocare?
  • Ce este ReadWriteLock?
  • Ce este blocarea cu dublu verificare a lui Singleton?
  • Ce este cadrul Fork/Join?
  • Forța este un râu din care mulți pot bea, iar antrenamentul Jedi nu este singura modalitate de a extrage din el.” - Luke Skywalker Toate colecțiile de cărți rămase în urmă. Pe care dintre ele să citești, ce nu - depinde de tine. Acum îți mai rămâne un singur obiectiv: să obții un loc de muncă și să-ți construiești o carieră fără a călca pe greblă. Ultimul articol este împărțit în secțiuni: - Înainte de muncă - Interviu - În timpul muncii Există multe păreri personale în această parte, așa că vă rog să nu scoateți frazele din context și să o tratați ca pe o conversație sinceră cu un vechi prieten :).

    Înainte de muncă

    Mai jos sunt cele mai populare zece clișee care apar atunci când sufletul este atras de programare, dar anumite circumstanțe interferează cu persoana respectivă. Sarcina mea este să încerc să-ți opresc suspiciunea și să te pregătesc pentru un mod pozitiv de a gândi. Dacă citești acest articol, ești mai departe decât crezi! Din punct de vedere mental, ești deja acolo unde trebuie, iar dacă ai citit deja câteva cărți, atunci jumătate din drum a fost deja trecută. Prin urmare, încetează să te îndoiești - acesta este lotul celor slabi. Doar înainte! Deja mai bine? Atunci să mergem! "Nu am studii" Când am intrat în academia uneia dintre marile firme de outsourcing, intervievatorii mi-au sugerat cu blândețe că nu sunt deloc interesați de diplomă, așa că întrebările erau specifice - pe OOP și pe Java de bază. Desigur, veți întâlni posturi vacante în cazul în care disponibilitatea acestora. educația va fi o cerință clară. Vreau doar să spun că absența lui nu este un obstacol în aceste zile. Multe birouri din străinătate solicită BS/MS Computer Science sau, atenție, experiență relevantă. Nu convingător? Poate că veți fi încurajat de faptul că nu am studii tehnice;), dar acest lucru nu m-a împiedicat absolut să dobândesc experiență în marile companii. Întrebați-mă acum ce aș face dacă aș putea derula banda? Bineînțeles, aș merge la KPI / NAU, dar nu m-aș întrista prea tare dacă nu aș intra. Nu te mai speria de asta. Timpul va trece - poți obține o crustă la 40 dacă vrei - dar deocamdată, concentrează-te pe a deveni un dezvoltator junior aici și acum. „Vor fi oameni mai deștepți decât mine”Întotdeauna vor exista oameni mai deștepți, mai deștepți, mai flexibili, mai talentați decât tine și orice job nu face excepție. Acest fapt nu vă oferă absolut dreptul de a vă abate de la obiectiv. Poate că undeva, în cealaltă parte a globului, există un băiețel din Japonia care înmulțește și împarte numerele mai repede decât tine și o bunica din Cehia tastează la tastatura unui telefon mobil mai repede decât orice adolescent. Dar nu te gândești la asta, nu-i așa? Deci, de ce ar trebui să-ți pese de oamenii cu care vei lucra când te vei stabili? În unele privințe, viitorii tăi colegi te vor depăși, în anumite privințe vor pierde în fața ta. Este în regulă! Tăiați. "Nu cred ca pot" Ei bine, în primul rând, nimeni nu a spus că ar fi ușor, dar asta nu înseamnă deloc că scopul tău nu este fezabil. Nimic nu te împiedică să încerci pur și simplu, chiar dacă în prezent lucrezi ca contabil sau asistent de vânzări. Vino după o zi de lucru și stai să studiezi. Dacă după un timp vezi ceva progres, acesta este un semn că mergi în direcția corectă. Nu te opri! Dacă ești chiar puțin interesat de acest lucru și ți se dă, atunci nu știu un singur punct care să mă convingă că nu ești demn de asta. "Sunt leneș" Lenea este doar o lipsă de motivație. Dacă observi că cea mai mare parte a timpului tău liber, în loc să studiezi și să nu te lupți de la curs, faci gunoaie prostește - mă grăbesc să te anunț că, cel mai probabil, munca unui programator nu este a ta. Cel puțin nu acum. Unii numesc lenea un păcat, o boală, holera epocii moderne împreună cu obezitatea. Lasă această afacere pe seama istericilor în carieră. După părerea mea, totul în jur în această viață este saturat de iluzia luptei și competiției: cine este mai sus, cine este mai puternic, cine este mai bogat. Cine are o mașină mai tare, cine are un salariu mai mare în echipă, cine apasă mai tare mreana în sală, care dintre fete s-a căsătorit mai devreme și a avut copii - asta te îmbolnăvește, ca fast-food mirositoare. Oamenii au încetat să trăiască și să se bucure de viață, urmându-și visele, schimbându-și zona de confort cu o alegere între Pepsi și Coca-Cola. Pentru mine, lenea este bună, este pur și simplu minunată. Aceasta este o funcție de protecție obișnuită a corpului tău pentru a economisi timp și energie în lucrurile care îi sunt inutile. O persoană a fost creată pentru a fi liberă, așa că dacă ești leneș - nu mai încerca să-ți ridici fundul de pe canapea - poate că acum este la locul ei :). "Merg acolo pentru bani" Dacă adunăm dezvoltatori și spunem: de acum înainte, salariul tău va fi de 3-4k grivne pentru orice nivel, iar testerii vor continua să primească aceleași tarife, atunci întrebarea va fi diferită: nu câți vor fi bombardați, ci câți. programatorii după această știre vor rămâne doar programatori. Mulți oameni intră în IT din cauza aluatului. Salariu tradus din dolari, brânzeturi și un DSLR scump. Indiferent cât de mult am lucrat cu oamenii, conversațiile despre asta au scapat mereu. Nu spun că acest lucru este rău, vreau doar să nu încerci să te convingi că ieși din scopuri pur spirituale pentru a schimba lumea în bine. Înainte să mă angajez ca junior, știam care sunt salariile seniorilor, liderilor tech - și chiar mijlocii - și aceste gânduri m-au inspirat doar: pe vremea mea, înainte de a lucra ca programator, nu puteam decât să visez la așa ceva. cifre. Numiți aceste lucruri pe numele lor propriu și nu vă mai rușinați de ele. „Nu cred că este al meu” A cui atunci? Știi, este ușor de verificat. Deschide primul volum din Hortsmann și începe să citești, scriind codul din exemple. Dacă nu te-ai plictisit și nu îți marchezi timp pe același capitol pentru a doua săptămână, elimină îndoielile. Studiul specialităților tehnice este un lucru consistent. Nu poți merge la B fără să-l cunoști pe A, dar vei avea întotdeauna șansa de a te întoarce la un capitol și de a întări fundația. Dați-i drumul. „Sunt mulți ca mine”Întotdeauna există competiție pentru un loc. Nu argumentez, de exemplu, acum această cifră este de 300-400 de testeri fără experiență, sau chiar mai mult pentru un loc. Da, acesta este un adevăr amar, dar, pe de altă parte, chiar și cu astfel de indicatori nu găsesc un punct suficient de serios. Da, cel puțin 100500 pe loc !! Ai întotdeauna ocazia să câștigi experiență în proiectele tale: construiește un fel de serviciu, un program desktop, folosește întregul stack pe care îl cunoști - și faci deja denivelări, iar restul, în afară de trimiterea CV-ului, nu faci nimic altfel. „Nimeni nu îmi răspunde la CV”În continuarea paragrafului de mai sus. Cel mai probabil, pentru viitorii IT-iști fără experiență, a putea scrie un CV frumos este bine, dar când sunt mulți oameni pentru un post vacant, multe CV-uri sunt foarte asemănătoare între ele: desigur, poți trimite o fotografie cu un decolteu (dacă e fată) sau scrie o mulțime de tehnologii, pe care tu însuți le cunoști doar de pe Wikipedia. În ambele cazuri, HR pur și simplu nu îi va păsa: dacă ar trebui să existe o persoană în postul vacant de proiect care, de exemplu, cunoaște AWS, atunci va căuta AWS în CV. Luați în considerare un alt punct important, precum recomandările colegilor. Aceasta este durerea oricărei persoane care nu are astfel de cunoștințe, pentru că de acolo se ia cea mai mare parte a juniorilor (dacă persoana, la recomandare, nu este un idiot, desigur). De obicei pentru postul de junior ocupă, subliniez, o persoană activă adecvată, gata să învețe, și chiar pentru mâncare. Și dacă un astfel de candidat eșuează, atunci este mai probabil să fii următorul. Ei bine, în timp ce restul sunt intervievați, aveți o mulțime de domenii în care puteți face upgrade cool: open source, puzzle-uri pe Internet și poate freelancing. „Nu voi trece interviul / vreau să lucrez într-o anumită companie” Da, cel mai probabil, primul interviu va fi un eșec, dar experiența pe care o obțineți este neprețuită. Cu fiecare interviu ulterior, vei deveni mai încrezător și mai plin de resurse. Ca acum imi amintesc primul meu... Doamne, despre ce prostii vorbeam?! Cât de jenant a fost să plec după el (îmi amintesc de acel ghoul care mi-a rânjit în față), dar când am venit acasă și m-am gândit bine, mi-am dat seama că a fost o lecție minunată. După el, toate evenimentele similare ulterioare au fost impregnate de ușurință și încredere. Nu a murit nimeni, ei caută oameni ca mine, așa că voi veni. Crede în tine! Dacă doriți în mod specific la o anumită companie, atunci cred că nu vă voi dezvălui un life hack popular în mediul nostru, dar totuși: înainte de a organiza o întâlnire cu acest birou, treceți printr-un interviu cu concurenții înainte de aceasta. Poate ți se va oferi ceva pe care nu îl vei refuza, sau condițiile vor fi mai abrupte. Știu un lucru sigur: nu vei regreta. „Sunt bun la meseria asta”Știi, există această veche zicală: Le mieux est I'enneini du bien ("Cel mai bun este dușmanul binelui"). Poate că slujba ta nu este cel mai rău loc, dar da, șeful este o capră, deci ce? Sau, de exemplu, al treilea an fără bonus, dar un salariu stabil, mai ales că am deja peste 30 de ani. Într-o oarecare măsură, poate fi așa, amintește-ți doar că ai o singură viață și nu trebuie cheltuită pentru dezamăgiri, pentru confort imaginar, când sunt atâtea lucruri interesante în jur, iar întreaga viață nu este suficientă pentru a înțelege. Nu-ți fie frică să fii mai bun, nu-ți fie frică să fii mai bun. Nu asculta pe nimeni, mergi la obiectiv cu insistență dacă știi că asta vrei cu adevărat să faci. Nu-ți fie frică să te schimbi!

    Interviu

    În general, puteți găsi totul pe internet sau întrebați cu prietenii, dar cred că nu va fi de prisos. Mai jos este un exemplu de interviu pentru un dezvoltator Java junior, așa cum ar fi el acum dacă aș fi intervievatorul. Întrebările pot fi orice, doar am încercat să adun ceva mediu pentru spital. Să ne prefacem că ești norocos. Schema standard Pasul 1. Te sună un recrutor și aranjezi un interviu cu ea, de exemplu, mâine la 11:00. Pasul 2 Ajungi devreme, deoarece ora 11:00 este cel mai probabil ora nu pentru tine, ci pentru dezvoltatori, care au rezervat un fel de cameră în care vei fi chinuit. Este bine ca orice recrutor să avertizeze despre acest lucru. Pasul 3 De fapt, începând de la pasul 3, toate punctele pot fi amestecate, deoarece interviurile se pot desfășura în moduri diferite. De exemplu, aici poți fi întrebat despre lucruri de bază, de unde ești, de ce ești cu noi și așa mai departe. Este posibil ca însăși HR să poată face acest lucru și, desigur, este posibil ca în engleză. Corect, depinde de companie. Pasul 4 Sunteți invitat într-o sală de ședințe, unde veți avea o conversație cu una, două, trei persoane, dintre care unul va fi fie un senior, fie un lider tehnic care va lucra cu dvs. în viitor, printre restul poate fi și un Scrum Master, alți dezvoltatori sau HR. Ești intervievat un timp, apoi îți strâng mâna și îți dau drumul. Pasul 5 Poate că va fi a doua zi, sau poate imediat după pasul 4 - veți avea o conversație cu un client străin (dacă există), sau poate el va conduce el însuși un interviu. După cum puteți vedea, există multe opțiuni. Undeva sunt clienți, undeva este și un interviu telefonic. Acesta este doar un exemplu. Exemplu de interviu tehnic pentru un dezvoltator Java JuniorÎmi pare foarte rău pentru subdezvoltatorii care citesc ceva inteligent pentru a se îneca / zdrobi / arăta în fața solicitantului pentru un interviu. Daca vezi ca o astfel de persoana se afla in fata ta, si simti presiune si tensiune din partea lui, trimite-l imediat la trei amuzante, pentru ca dupa o trecere reusita cu acest cretin va trebui sa muncesti. Nu-ți pierde nervii prețioși. Interviul, în primul rând, ar trebui să aibă loc cu scopul de a afla ce știe candidatul, și nu ceea ce nu știe. Desigur, dacă ai nevoie de o persoană care știe ceva anume - întreabă-l, nu-l chinui cu lucruri inutile pe care nu le folosești în proiect. Fii om, până la urmă! Mai jos sunt întrebări aproximative care pot apărea într-un interviu. 5 întrebări pentru fiecare tehnologie. OOP 1. Dați un exemplu de polimorfism din viața reală? Care sunt beneficiile? Dezavantaje? Scrieți un cod simplu. 2. Ce este o interfață? Clasa abstracta? De ce avem nevoie de interfețe dacă poți scrie prostesc totul cu cursuri (puțină provocare)?. Același lucru este valabil și pentru o clasă abstractă. Care sunt metodele implicite în Java 8? 3. Construiți o ierarhie de clase pe un exemplu specific de bază de date sau program imaginar (există o listă cu diferite clase de lucrători din baza de date) și interacțiunea dintre acestea (agregare, compunere). 4. Cum este diferită compoziția de agregare (este-a, are-a)? 5. Cum puteți ocoli interzicerea moștenirii multiple în Java? JDK/JRE 1. Prin ce diferă JDK de JRE? Ce este JVM? 2. Ce este un curs de clasă și pentru ce este? Cum, de exemplu, să încărcați alte clase în classpath? 3. Ce știi despre classloader? 4. Spune-ne despre javadoc? Pentru ce este? 5. Ce este JAR, WAR? Java comun 1. Care este diferența dintre metodele statice și metodele nestatice? Ce este finalul? 2. Ce este boxul-unboxing? octet b = 127, b++, care este rezultatul și de ce? 3. Ce sunt ambalajele, pentru ce sunt acestea? 4. Ce trebuie să fac pentru a-mi crea adnotarea? Ce este suprasolicitarea/supraîncărcarea? 5. De ce este finala clasa String? Ce face metoda intern()? Structuri de date 1. Spuneți-ne despre structura API-ului Collections în Java? Ați lucrat deja cu Stream API? 2. Care este diferența dintre ArrayList și LinkedList? Unde este mai bine să utilizați ArrayList și unde este LinkedList? 3. Spuneți-ne cum funcționează HashMap? Care sunt caracteristicile lucrului cu TreeSet, HashSet? Ai experiență cu colecțiile de guava? 4. Matrice în Java, un exemplu de matrice bidimensională. 5. hashCode, este egal pe exemplul HashMap? Concurență 1. Ce este un proces? Curgere? Cum se creează un fir? Ce este sincronizat? Cum să înțelegeți asta sau acea bucată de cod thread-safe? 2. Ce este Thread.sleep, precum și așteptare, notificare, randament? 3. Dați un exemplu de blocaj? 4. Colecții atunci când lucrați cu multithreading. 5. ThreadLocal și operațiuni atomice SQL/JDBC 1. Pe un exemplu concret, obțineți din baza de date Utilizatori pe cel al cărui salariu este mai mare de 5000. 2. Exemple de INNER JOIN, OUTER JOIN, Order By, Group By. 3. De ce am nevoie de un driver JDBC? Exemple. 4. Spune tot ce știi despre ResultSet, câteva exemple. 5. Scrieți un DAO simplu folosind RS. JPA/Hibernare 1. Care sunt avantajele și dezavantajele JPA? 2. Ce este un EntityManager? entitate? 3. Criterii în JPA/Hibernate. 4. One-To-One, Many-To-Many în JPA/Hibernate 5. Cum ai face un JOIN în Hibernate? HQL? Primăvară 1. Ce este DI/IoC? Avantaje. 2. Ce este Contextul aplicației? Fasole? 3. Care sunt tipurile de inițializare IoC? 4. Singleton, prototip în primăvară? Spring bazat pe adnotări? 5. Ciclul de viață al fasolei? init-method, distruge-metoda? @PostConstruct, @PostDeploy? Maven 1. Principalele faze ale maven, ciclul de viață. 2. Cum să rulezi Maven cu teste, fără teste? Ce este arhetipul, dependența de mvn? 3. Profiluri în Maven, cum se creează, cum se rulează. 4. Ce este snapshot în Maven? Arhive centrale/la distanță? 5. Plugin-uri în mvn, principiul de funcționare, câteva exemple. Algo 1. Conceptul de algoritm, viteza acestuia, Big-O-Notation. 2. Cum să găsiți elementul de mijloc într-o Lista Linked dintr-o singură mișcare? 3. Scrieți o stivă primitivă? Care este diferența dintre Stack și Queue? LIFO, FIFO? 4. Sortare rapidă, Sortare prin îmbinare. 5. Scrieți un program care verifică dacă un număr este un palindrom. Sunt de acord, poate bara este aplecata un pic mai mult spre mijloc decat junior, dar cred ca o astfel de pregatire cu siguranta nu va strica. Încercați să aprofundați fiecare întrebare. Apropo, multe direcții în Java nu sunt indicate aici, vă rugăm să luați în considerare.

    În timpul lucrului

    Iată mici recomandări pentru acei dezvoltatori juniori/medii care sunt deja stabiliți. Aceste sfaturi simple vă pot fi utile, așa cum m-au ajutat la rândul lor. Nu fi încăpățânat Nu mai demonstra punctul tău, chiar dacă este seducător de aproape de adevăr. Ai observat deja că ești într-o dispută de multă vreme, ceea ce înseamnă că de cealaltă parte a baricadelor se află un măgar obișnuit care are doar două păreri în viață: a lui și cea greșită. Avem un număr incredibil de oameni încăpățânați care își rezistă până la urmă, atâta timp cât ego-ul lor nu este zdruncinat. Și aceștia nu sunt doar colegii tăi, ci sunt peste tot - în microbuz, în magazin, rude, prieteni apropiați - nu poți fugi sau ascunde de ei. Trebuie să interacționezi cumva cu ei, chiar dacă înțelegi că o persoană vorbește prostii deschise. În plus, ți se poate întâmpla același lucru. Sunt de acord, lucrurile simple pot fi explicate chiar și unei persoane încăpățânate, dar dacă vorbim despre probleme de arhitectură într-un proiect sau o părere personală? Uitați de aceste nedorite - fiți flexibili. Am foarte mult respect pentru oamenii care pot recunoaște că greșesc, în fața tuturor. Aceasta calitate iti va fi de folos ca specialist junior - este greu sa te confrunti cu o persoana deschisa, mai ales cand recunoaste ca invata si are dreptul sa greseasca. Nu întârzia Nu contează dacă este o perioadă de probă sau doar o zi de vineri, în care toată lumea înscrie și ajunge la 11. Un alt lucru este important: punctualitatea este o caracteristică a unui profesionist care își câștigă din senin puncte în plus. Și punctele suplimentare pentru o persoană fără experiență nu vor strica, nu? Încearcă să nu întârzii și să pleci de la serviciu cinstit după ce ai lucrat 8 ore. Nu abuzați de estimări Din păcate, aceasta este o imagine foarte comună în care m-am băgat cândva în trecut. Dezvoltatorul și-a stabilit 8-16 ore pentru a finaliza sarcina și a finalizat-o în mod neașteptat în 3-4 ore. Restul orelor le petrece timpul personal sub formă de tenis de masă, așa cum a fost cazul meu, sau urmărind youtube și alte divertisment. Din punct de vedere legal, par să fi fost de acord, dar din punct de vedere uman, te privezi de lucruri foarte importante: 1. Stai pe loc, căci umpli timpul suplimentar cu lucruri inutile; 2. Nu te dezvolți pentru că nu informezi conducerea despre progresul tău rapid, nimeni nu știe că îndeplinești sarcinile mai repede decât se aștepta; 3. Începi să supraestimezi în mod constant durata medie de timp pentru valori, este doar un drum spre nicăieri. Alocați timp pentru a studia Șansa de a rămâne în spatele motorului este nerealist de mare, așa că rețineți că tehnologia și noile versiuni se dezvoltă foarte repede. Abonează-te la evangheliștii Java ai zilelor noastre, citește rezumatele Java și, în general, te interesează, învață lucruri noi. Acest lucru vă va ajuta să vă păstrați marca și să vă dezvoltați. Ajută pe alții Nu-ți fie teamă să îi ajuți pe alții, chiar dacă sunt la fel de verzi ca tine. În primul rând, îți vei întări foarte mult cunoștințele, iar în al doilea rând, vei primi respect în ochii celorlalți, iar ei te vor ajuta în același timp. Într-un astfel de mediu se nasc cele mai bune echipe, precum și o creștere tehnică și personală foarte rapidă. A o face pentru sport. Ai un hobby Nu, serios. Oamenii implicați în sport nu numai că arată și se simt mai bine, dar și funcția lor cerebrală este în top! Scolioza, partea inferioară a spatelui, excesul de greutate, diverse probleme cu organele interne - adunările non-stop la computer, chiar și în afara serviciului, contribuie la aceasta. Dacă nu poți face sport (ceea ce mă îndoiesc), folosește mici trucuri de viață: lucrează din când în când în picioare, lasă două opriri devreme și mergi la serviciu. Și da, mergi mai mult. Există, de asemenea, riscul de epuizare dacă programarea vă ocupă mult mai mult timp decât 40 de ore pe săptămână. Hobby-urile personale vor veni în ajutor - de exemplu, fotografia, muzica etc. Fă-ți timp regulat pentru spiritualitate. Echilibrul în viața personală Când o prietenă/soție spune: „laptop sau eu”, trebuie să te gândești serios la ce loc ocupă programarea în viața ta. Pe de altă parte, atunci când îți începi călătoria în IT, trebuie să-i explici clar sufletului tău pereche că acum trebuie să studiezi mult pentru a obține mai mult. Sper ca ei sa inteleaga. Ei bine, încerci să echilibrezi și să-ți aloci corect timpul. a merge mai departe Fii proactiv, dacă simți, de exemplu, că poți împărtăși cunoștințe sau ai subiecte interesante, de ce să nu organizezi mici cursuri în cadrul companiei pentru alții? Nu-ți fie teamă să contribui la proiecte mari open source dacă știi cum să ajuți. Dacă vrei să scrii un joc, un proiect social sau o altă idee - fă-o, fă-o, fă-o! Nu sta pe loc, caută întotdeauna căi în care te poți dezvolta. Fii competitiv Urmăriți noile tendințe, fiți la curent cu tendințele care se întâmplă în comunitatea Java. De exemplu, nu va fi de prisos dacă ocazional, din când în când, monitorizați posturile Java vacante la DOU, dar nu pentru a scăpa de la muncă, ci pentru a ști ce tehnologii rămân relevante și care dispar încet de pe piață. . De asemenea, încercați să urmați cursuri despre Coursera, Udacity etc., explorați noi orizonturi. Și chiar și engleză: încercați să vizionați filmele / emisiunile TV preferate în original cu subtitrări pentru a vă îmbunătăți abilitățile de conversație, descărcați câteva aplicații interesante pentru învățarea limbii (de exemplu, LinguaLeo) și, în final, mergeți la cursuri .

    Concluzie

    Ei bine, micul meu proiect DOU se apropie de final. Dragi prieteni, vă doresc din tot sufletul să obțineți un loc de muncă și sper că tot ceea ce am descris în aceste 7 articole va fi un ghid valoros pentru voi, chiar și pentru cei care lucrează deja ca dezvoltator Java. Viitori juniori, amintiți-vă că nimic nu este imposibil, iar dacă vă împingeți cu adevărat, veți reuși cu siguranță. Vreau să decizi în sfârșit dacă acesta este al tău sau nu, să dezvolți un plan detaliat de antrenament și să-l urmezi cu răceală. Nu fi supărat dacă primești liniște în schimb - totul este temporar, principalul lucru este să crezi și să nu te rătăci în niciun caz, ci să studiezi, să studiezi și să studiezi din nou. Aș dori să-mi exprim profunda recunoștință echipei DOU pentru editarea unei cantități mari de material și pentru că mi-a oferit prime time luni. DOU este o comunitate cool care a încetat să mai fie doar un site pentru IT-ul din Ucraina. De asemenea, aș vrea să le mulțumesc tuturor comentatorilor care mi-au citit articolele în diagonală și au scos fraze din context. Articolele nu ar arăta atât de interesante fără tine :) Fie ca Forța să fie cu tine!

    Pentru cei care aud cuvântul Java Core pentru prima dată, acestea sunt bazele fundamentale ale limbajului. Cu aceste cunoștințe, puteți merge deja într-un stagiu/stagiu în siguranță. Aceste întrebări vă vor ajuta să vă reîmprospătați cunoștințele înainte de interviu sau să învățați ceva nou pentru dvs. Pentru abilități practice, studiați mai departe.

      Cum se creează un obiect imuabil în Java? Enumerați toate beneficiile

      O clasă imuabilă este o clasă a cărei stare nu poate fi schimbată după ce a fost creată. Aici, starea unui obiect este în esență valorile stocate într-o instanță a clasei, fie că sunt tipuri primitive sau tipuri de referință.

      Pentru a face o clasă imuabilă, trebuie îndeplinite următoarele condiții:

      1. Nu furnizați setari sau metode care modifică câmpuri sau obiecte care se referă la câmpuri. Setterii implică schimbarea stării unui obiect, ceea ce vrem să evităm aici.
      2. Faceți toate câmpurile finale și private. Câmpurile desemnate private nu vor fi accesibile din afara clasei, iar desemnarea lor definitivă asigură că nu le modificați nici măcar accidental.
      3. Nu permiteți subclaselor să suprascrie metode. Cel mai simplu mod de a face acest lucru este să declarați clasa ca finală. Clasele finalizate în Java nu pot fi suprascrise.
      4. Amintiți-vă întotdeauna că instanțele dvs. variabile pot fi fie mutabile, fie imuabile. Definiți-le și returnați noi obiecte cu conținut copiat pentru toate obiectele mutabile (tipuri de referință). Variabilele imuabile (tipurile primitive) pot fi returnate în siguranță, fără efort suplimentar.

      De asemenea, trebuie să țineți cont de beneficiile ulterioare ale claselor imuabile. Este posibil să aveți nevoie de ele pentru un interviu. Clase imuabile:

      • ușor de proiectat, testat și utilizat
      • sunt automat sigure pentru fire și nu au probleme de sincronizare
      • nu necesită un constructor de copiere
      • vă permit să „inițializați leneș” codul hash și să memorați în cache valoarea returnată
      • nu necesită o copie securizată atunci când este utilizat ca câmp
      • faceți chei de hartă și elemente set bune (aceste obiecte nu ar trebui să-și schimbe starea când sunt în colecție)
      • faceți clasa lor permanentă creând-o o singură dată și nu trebuie să fie verificată din nou
      • au întotdeauna „atomicitate de eșec”, un termen inventat de Joshua Bloch: dacă un obiect imuabil face o excepție, nu va fi niciodată lăsat într-o stare nedorită sau nedefinită.

      Uită-te la exemplul scris în această postare.

      Specificația Java afirmă că totul în Java este transmis prin valoare. Nu există „trecere prin referință” în Java. Aceste condiții sunt asociate cu apelarea metodelor și trecerea variabilelor ca parametri ai metodei. Ei bine, tipurile primitive sunt întotdeauna trecute după valoare, fără nicio confuzie. Dar, conceptul trebuie înțeles în contextul unui parametru de metodă de tipuri complexe.


      În exemplul de mai sus, biții de adresă ai primei instanțe sunt copiați într-o altă variabilă de referință, determinând ambele referințe să indice aceeași locație de memorie în care este stocat obiectul. Amintiți-vă că, atribuind null la a doua referință, nu veți atribui null primei referințe. Dar o schimbare a stării unui obiect cu o variabilă referită se va reflecta și în cealaltă referință.

      La ce folosește blocul final? Acest bloc garantează executarea codului său? Când blocul final nu este numit?

      Blocul final este întotdeauna apelat dacă blocul try există. Acest lucru asigură că blocul final este apelat chiar dacă apare o excepție neașteptată. Dar, în sfârșit, este mai util decât gestionarea excepțiilor - acest bloc vă permite să curățați codul care a ocolit accidental returnarea, continuarea sau întreruperea. Plasarea codului de curățare într-un bloc final este întotdeauna o practică bună, chiar și atunci când nu sunt așteptate excepții.

      Dacă mașina virtuală iese în timp ce se execută blocul try sau catch, atunci blocul final nu va fi executat. În mod similar, dacă un fir de execuție este întrerupt sau oprit în timpul executării unui bloc try sau catch, blocul final nu va fi executat chiar dacă aplicația încă rulează.

      De ce există două clase Date, una în pachetul java.util și cealaltă în java.sql?

      java.util.Date reprezintă o dată și o oră, în timp ce java.sql.Date reprezintă doar o dată. Complementul la java.sql.Date este clasa java.sql.Time, care reprezintă doar timpul.

      Clasa java.sql.Date este o subclasă (extensie) a clasei java.util.Date. Deci, ce s-a schimbat în java.sql.Date:

      • toString() produce o reprezentare șir diferită: aaaa-mm-zz
      • metoda statică valueOf(String) creează o dată dintr-un șir cu reprezentarea de mai sus
      • a exclus getters și setters pentru ore, minute și secunde

      Clasa java.sql.Date este folosită în JDBC și este proiectată să nu aibă o componentă de timp, adică ore, minute, secunde și milisecunde trebuie să fie zero... dar acest lucru nu este cerut de clasă.

      Explicați interfețele markerilor.

      Modelul de interfață marker este un model de design informatic utilizat de limbajele de programare care furnizați informații despre obiecte în timpul execuției. Acest oferă o modalitate de a asocia metadate de clasă în cazul în care limbajul nu are suport explicit pentru astfel de metadate. Java folosește interfețe pentru aceasta fără a specifica metode.

      Un bun exemplu de utilizare a unei interfețe de marcare în Java este interfața Serializable. Clasa implementează această interfață pentru a indica faptul că datele sale netranzitorii pot fi scrise într-un flux de octeți sau în sistemul de fișiere.

      Problema principala O interfață de marcare este aceea că o interfață definește o convenție pentru clasele care o implementează și acea convenție este moștenită de toate subclasele. Aceasta înseamnă că nu puteți „de-realiza” simbolul. În exemplul de mai sus, dacă creați o subclasă pe care nu doriți să fie serializată (poate pentru că se află într-o stare tranzitorie), trebuie să recurgeți la aruncarea explicit a unei NotSerializableException .

      De ce metoda main() este declarată public static void?

      De ce public? Metoda principală are modificatorul de acces public, deci poate fi accesată oriunde și de orice obiect care dorește să folosească această metodă pentru a porni aplicația. Aici nu spun că JDK/JRE au un motiv similar, deoarece java.exe sau javaw.exe (pentru Windows) folosesc apelul JNI (Java Native Interface) pentru a rula metoda, așa că o pot apela oricum indiferent de modificatorul de acces. .

      De ce static? Să presupunem că metoda noastră principală nu este statică. Acum, pentru a apela orice metodă, aveți nevoie de o instanță a clasei. Dreapta? Java vă permite să aveți constructori supraîncărcați, știm cu toții asta. Apoi, care ar trebui folosit și de unde vor veni parametrii pentru constructorul supraîncărcat?

      De ce nul? Nu este de nici un folos pentru valoarea returnată în mașina virtuală care apelează de fapt această metodă. Singurul lucru pe care aplicația vrea să-l spună procesului de apelare este o terminare normală sau anormală. Acest lucru este deja posibil folosind System.exit(int) . O valoare diferită de zero implică o terminare anormală, altfel totul este în regulă.

      Care este diferența dintre crearea unui șir ca new() și a unui literal (folosind ghilimele duble)?

      Când creăm un șir folosind new() , acesta este creat în heap și, de asemenea, adăugat la pool-ul de șiruri, în timp ce șirul creat cu literalul este creat doar în pool-ul de șiruri.

      Trebuie să știți mai multe despre conceptul de string pool pentru a răspunde la această întrebare sau la întrebări similare. Sfatul meu este să înveți bine clasa String și string pool.

      Cum funcționează metoda substring() a clasei String?

      Ca și alte limbaje de programare, șirurile din Java sunt secvențe de caractere. Această clasă este mai mult ca o clasă de utilitate pentru lucrul cu această secvență. Secvența de caractere este furnizată de următoarea variabilă:

      /** Valoarea este folosită pentru stocarea caracterelor. */ /** Valoarea este folosită pentru a stoca caractere */ valoare finală privată; Următoarele variabile sunt utilizate pentru a accesa această matrice în diferite scenarii /** Offset-ul este primul index al stocării care este utilizat. */ /** Offset-ul este primul index al stocării de utilizat. */ private final int offset; /** Numărul este numărul de caractere din șir. */ /** Numărul este numărul de caractere din șir. */ private final int count;

      De fiecare dată când creăm un subșir dintr-o instanță de șir existentă, metoda substring() setează doar variabilele offset și număr la valori noi. Matricea internă de caractere nu este modificată. Aceasta este o posibilă sursă a unei scurgeri de memorie dacă metoda substring() este folosită neglijent:

      Valoarea inițială a valorii nu este modificată. Deci, dacă creați un șir de 10000 de caractere și creați 100 de subșiruri cu 5-10 caractere fiecare, toate cele 101 obiecte vor conține aceeași matrice de caractere de 10000 de caractere. Aceasta este fără îndoială o risipă de memorie.

      Acest lucru poate fi evitat prin schimbarea codului astfel:

      înlocuiți original.substring(beginIndex) cu new String(original.substring(beginIndex)) , unde original este șirul original.

      Explicați cum funcționează HashMap. Cum se rezolvă problema duplicaturilor?

      Cei mai mulți dintre voi veți fi cu siguranță de acord că HashMap este cel mai preferat subiect de interviu în acest moment. Dacă cineva mă cere să vă spun „Cum funcționează HashMap?”, voi răspunde pur și simplu: „După principiul hashingului”. Pe cât de simplu este.

      Deci, hashingul este în esență o modalitate de a atribui un cod unic oricărei variabile/obiect după aplicarea oricărei formule/algoritm proprietăților sale.

      Definiția unei hărți este: „Un obiect care leagă chei de valori”. Foarte simplu, nu? Deci, HashMap conține propria sa clasă interioară Entry , care arată astfel:

      Clasa statică Entry implementează Harta . Intrare( tasta finală K; valoarea V; intrarea următoare; hash int final; ...// Mai multe coduri sunt disponibile aici )

      Când cineva încearcă să pună o pereche cheie-valoare într-un HashMap , se întâmplă următoarele:

      • În primul rând, obiectul cheie este verificat cu null . Dacă cheia este nulă, valoarea este stocată în tabelul de poziții. Deoarece codul hash pentru null este întotdeauna 0.
      • Apoi, următorul pas este să calculați valoarea hash apelând metoda sa hashCode() pe variabila cheie. Acest hash este folosit pentru a calcula indexul în matrice pentru a deține obiectul Entry. Dezvoltatorii JDK erau conștienți de faptul că metoda hashCode() ar putea fi scrisă prost și ar putea returna o valoare foarte mare sau foarte mică. Pentru a rezolva această problemă, au introdus o altă metodă hash() și au transmis codul hash al obiectului acestei metode pentru a arunca acea valoare în intervalul de dimensiune a indexului matricei.
      • Metoda indexFor(hash, table.length) este acum apelată pentru a calcula poziția exactă pentru a stoca obiectul Entry.
      • Acum partea principală. După cum știm că două obiecte diferite pot avea aceeași valoare hashcode, cum pot fi stocate două obiecte diferite în aceeași locație într-o arhivă [numită coș de gunoi]?

      Răspunsul este LinkedList. Dacă vă amintiți, clasa Entry are o proprietate „următoarea”. Această proprietate indică întotdeauna următorul obiect din lanț. Acest comportament este foarte asemănător cu LinkedList .

      Deci, în cazul potrivirilor de cod hash, obiectele Entry sunt stocate sub formă de LinkedList . Când o intrare trebuie plasată la un anumit index, HashMap verifică dacă există o altă intrare în acea locație? Dacă nu există nicio înregistrare acolo, obiectul nostru va fi salvat în această locație.

      Dacă există deja un alt obiect la indexul nostru, următorul său câmp este verificat. Dacă este null, obiectul nostru devine următorul nod din LinkedList. Dacă next nu este null, această procedură se repetă până când este găsit un câmp null next.

      Ce se întâmplă dacă adăugăm o altă valoare cheie egală cu cea adăugată mai devreme? Este logic ca acesta să înlocuiască vechea valoare. Cum se întâmplă asta? După determinarea indexului de poziție pentru obiectul Entry, iterând peste LinkedList situat la indexul nostru, HashMap apelează metoda equals() pe valoarea cheii pentru fiecare obiect Entry. Toate aceste obiecte Entry din LinkedList au aceeași valoare hashcode, dar metoda equals() va testa egalitatea adevărată. Dacă cheie. este egal cu (k) va Adevărat, atunci ambele vor fi tratate ca același obiect. Acest lucru va face ca doar obiectul valoare din interiorul obiectului Entry să fie înlocuit.

      Astfel HashMap asigură unicitatea cheilor.

      Diferențele dintre interfețe și clase abstracte?

      Aceasta este o întrebare foarte frecventă dacă sunteți la un interviu pentru un programator de nivel junior. Cele mai semnificative diferențe sunt enumerate mai jos:

      • În interfețele Java, variabilele sunt a priori finale. Clasele abstracte pot conține variabile non-finale.
      • O interfață în Java cu siguranță nu poate avea o implementare. O clasă abstractă poate avea instanțe de metode care implementează comportamentul de bază.
      • Membrii interfeței trebuie să fie publici. O clasă abstractă poate avea modificatori de acces de orice fel.
      • O interfață trebuie implementată cu cuvântul cheie implements. O clasă abstractă trebuie extinsă cu un cuvânt cheie se extinde.
      • În Java, o clasă poate implementa multe interfețe, dar poate moșteni doar de la o clasă abstractă.
      • O interfață este complet abstractă și nu poate fi instanțiată. De asemenea, o clasă abstractă nu poate avea instanțe ale clasei, dar poate fi apelată dacă metoda main() există.
      • O clasă abstractă este puțin mai rapidă decât o interfață, deoarece o interfață așteaptă o căutare înainte de a apela orice metodă suprascrisă în Java. În cele mai multe cazuri, aceasta este o diferență minoră, dar dacă scrieți o aplicație critică în timp, trebuie să luați în considerare și acest fapt.
    1. Când suprascrieți metodele hashCode() și equals()?

      Metodele hashCode() și equals() sunt definite în clasa Object, care este clasa părinte a tuturor obiectelor Java. Din acest motiv, toate obiectele Java moștenesc implementarea de bază a acestor metode.

      Metoda hashCode() este folosită pentru a obține o valoare întreagă unică pentru un obiect dat. Această valoare este folosită pentru a determina locația coșului atunci când obiectul trebuie să fie stocat într-o structură de date precum un HashTable. În mod implicit, metoda hashCode() returnează o reprezentare întreagă a adresei de memorie unde este stocat obiectul.

      Metoda equals(), după cum sugerează și numele, este folosită pentru echivalența obiectelor simple. Implementarea de bază a metodei este de a verifica referințele celor două obiecte pentru a vedea dacă sunt echivalente.

      Rețineți că este de obicei necesar să suprascrieți metoda hashCode() ori de câte ori metoda equals() este suprascrisă. Acest lucru este necesar pentru a susține convenția generală a metodei hashCode, care afirmă că obiectele egale trebuie să aibă coduri hash egale.

      Metoda equals() trebuie să determine egalitatea relației (trebuie să fie recursivă, simetrică și tranzitivă). În plus, trebuie să fie persistent (dacă obiectul nu s-a schimbat, metoda trebuie să returneze aceeași valoare). De asemenea, o.equals(null) ar trebui să revină întotdeauna fals.

      hashCode() trebuie să fie, de asemenea, stabil (dacă obiectul nu s-a schimbat în condițiile metodei equals(), acesta trebuie să continue să returneze aceeași valoare.

      Relația dintre cele două metode este: întotdeauna dacă a.equals(b) atunci a.hashCode() trebuie să fie același cu b.hashCode() .

    Mult succes la studii!! Autorul articolului Lokesh Gupta Articol original Link-uri către alte părți: