Vodič za buduće Java programere. Intervju i karijera. Intervjui za razvojne programere srednje Java Jave Intervju Često postavljana pitanja

Preselio sam se u drugi grad, zaposlim se, idem na razgovore. Činilo mi se da pitanja koja se tamo postavljaju, iako poznata, ali skupljena zajedno, mogu pomoći u pripremi i osjećaju samopouzdanja.

Pitanja za razumijevanje principa izgradnje DBMS-a.
1. Koji je prvi normalni oblik i proces normalizacije? Koji su normalni oblici?
2. Što znači DBMS indeks, kako su raspoređeni, kako se pohranjuju? Kako biste implementirali istu funkcionalnost? Posljednje pitanje postavlja se ako nema jasnog razumijevanja indeksa.
3. Nacrtajte odnos Mnogi-prema-više. Na primjer: tablice Autori i Knjige. Jedan autor može imati više knjiga, a knjigu može napisati više autora. Sastavite SQL upit za odabir knjiga određenog autora.

Osnovna pitanja o Javi.
4. Poznato je da je osnovna klasa u Javi Object. Koje metode možete imenovati?
5. Recite nam što su jednaki i hashCode? Koja pravila i konvencije postoje za provedbu ovih metoda? Kada se primjenjuju?
6. Recite nam o metodama čekanja, obavijesti, obavijestiAll. Kako se koriste, kada, zašto su potrebni? Što je sinkronizirano?
7. Što je finalize? Zašto je to potrebno? Što možete reći o sakupljaču smeća i njegovim algoritmima.
8. Zašto je metoda kloniranja deklarirana kao zaštićena? Što je potrebno za provedbu kloniranja?
9. Koji su modifikatori (pristup i drugi)? Što je hlapljivo i prolazno? Za što i u kojim slučajevima bi bilo moguće koristiti default?

Java Collection Framework
10. Koja su sučelja za prikupljanje u Javi? Objasnite po čemu se razlikuju.
11. Koje implementacije ovih sučelja poznajete?
12. Koja je razlika između ArrayList i LinkedList. Kako su raspoređeni? Kada ih treba koristiti.
13. Koja je razlika između HashMapa i TreeMapa? Kako su postavljeni i kako rade? Što s vremenom pristupa objektima, koje ovisnosti?
14. Što je Hashtable, po čemu se razlikuje od HashMapa? Do danas je zastarjela, kako još uvijek koristite željenu funkcionalnost?

Iznimke
15. Što je iznimka? Koje vrste iznimaka poznajete, po čemu se razlikuju?
16. Može li se predložiti zagonetka s blokovima try-catch-finally i pitanjem što će biti vraćeno ili koja iznimka će na kraju biti propuštena?

Algoritmi
17. Koje algoritme razvrstavanja poznajete? Koje algoritme poznajete?
Štoviše, ovdje su moguća razna dodatna pitanja o procjeni složenosti algoritama, njihovoj međusobnoj usporedbi.

Dizajnerski uzorci.
18. Jeste li upoznati s nekim dizajnerskim uzorcima?
19. Napišite Singleton... I s lijenim učitavanjem. Što ako mora biti siguran za niti? Kada je lijeno učitavanje gore?
20. Što možete reći o MVC-u? Nacrtajte dijagram i objasnite kako MVC radi.

Niz pitanja za razumijevanje paketa tehnologije J2EE.
21. Koja je servlet, jsp, njihova razlika?
22. Što je Ajax? Kako je ova tehnologija u osnovi uređena?
23. Što je ORM, kako se može prevesti i kako bi trebao funkcionirati?

Jednostavni zadaci za pisanje algoritama.
24. Napišite funkciju za izračunavanje faktorijala.
25. S obzirom na funkciju za izračun Fibonaccijevih brojeva, poznato je da radi. Pronađite logičku grešku. Procijenite složenost rezultirajućeg algoritma.
26. Preokrenite niz.
27. Izračunajte prosjek niza.

Korisno je zapamtiti da kada se ne osjećate baš samouvjereno, ne morate izgovarati dodatne riječi. Vi kažete jednu suvišnu riječ, a oni se drže za nju, odmotaju lanac. Hiperiraju stvari u koje nisu baš sigurni. Ovu sposobnost ljudi - prianjanja - morate iskoristiti, ali u svoju korist ;-)

Znanje i razumijevanje... stvari su sasvim drugačije, dakle
- različite algoritme, kao što je razvrstavanje, treba napisati sami, čak i iz udžbenika. Pogledajte kako se razlikuju jedni od drugih, usporedite njihovu složenost.
- korisno je pogledati različite uslužne programe i knjižnice, principe grupiranja klasa u pakete i stil pisanja koda, komentiranje. Može puno pomoći u razumijevanju modifikatora pristupa, organizacije projekta.
- razumijevajući nešto konkretno, možete pomoći onima koji manje znaju. Idite na bilo koji forum i pokušajte odgovoriti na pitanja od interesa za temu. U raspravi možete uzeti nešto za sebe. Možete napisati kratak članak. Naravno, morate dobro razumjeti temu.
Svaki rad usmjeren na poboljšanje vlastite kvalifikacije bit će vidljiv kompetentnom ispitivaču i neće ostati bez pažnje. Jedino što trebate iskreno govoriti o tome, nemojte podcjenjivati ​​svoje sposobnosti i sposobnosti.
Da biste imali neku vrstu mjerila za obuku ili razvoj sebe kao stručnjaka, možete pogledati nešto slično ovome.

Zapravo, gore navedena pitanja su razina Junior Developer, kako ja to zamišljam. Negdje, možda dublje, negdje manje, ali kao činjenica - Junior.

Svako rješenje stvara nove probleme.

Ovaj odjeljak posvećen je pitanjima koja se mogu postaviti prilikom polaganja intervjua za poziciju Java programera.

Cilj je prikupiti ne samo pitanja (na internetu ih ima puno), već i odgovore na njih na jednom mjestu.

Za atribuciju pročitajte na glavnoj stranici odjeljka Intervju

  1. Koliko je ključnih riječi rezervirano za jezik, koje su to riječi, koje se ne koriste?
  2. Od kojih znakova se može sastojati naziv varijable (točan identifikator)?
  3. Što znači riječ "inicijalizacija"?
  4. Koje su glavne skupine tipova podataka?
  5. Koje primitivne tipove poznajete?
  6. Što znate o konverziji primitivnih tipova podataka, postoji li gubitak podataka, je li moguće pretvoriti boolean tip?
  7. Koje su vrijednosti zadane inicijalizirane varijable?
  8. Kako se prosljeđuje vrijednost varijable (po referenci/vrijednosti)?
  9. Što znate o glavnoj funkciji, koji su preduvjeti za njezino definiranje?
  10. Koje logičke operacije i operatore poznajete?
  11. Koja je razlika između zapisa kratkih i dugih logičkih operatora?
  12. Što je tablica istine?
  13. Što je ternarni operator odabira?
  14. Koje unarne i binarne aritmetičke operacije poznajete?
  15. Koje bitne operacije poznajete?
  16. Koja je uloga i pravila za pisanje naredbe za odabir (switch)?
  17. Koje cikluse poznajete, koje su njihove razlike?
  18. Što je "iteracija petlje"?
  19. Koje parametre ima for petlja, mogu li se izostaviti?
  20. Koja se izjava koristi za trenutno zaustavljanje petlje?
  21. Koja se izjava koristi za prijelaz na sljedeću iteraciju petlje?
  22. Što je niz?
  23. Koje vrste nizova poznajete?
  24. Što znaš o razredima omotača?
  25. Što je automatsko pakiranje (boxing/unboxing)?

  1. Imenujte principe OOP-a i opišite svaki od njih.
  2. Definirajte pojam "klasa".
  3. Što je polje/atribut klase?
  4. Kako pravilno organizirati pristup poljima razreda?
  5. Definirajte pojam "konstruktor".
  6. Koja je razlika između zadanih konstruktora, konstruktora kopiranja i konstruktora s parametrima?
  7. Koje izmjene razine pristupa znate, recite nam o svakoj od njih.
  8. Recite nam o značajkama klase s jednim privatnim konstruktorom.
  9. Što govore ključne riječi “ovo”, “super”, gdje i kako se mogu koristiti?
  10. Definirajte pojam "metoda".
  11. Što je signatura metode?
  12. Koje metode se nazivaju preopterećene?
  13. Mogu li nestatičke metode preopteretiti statičke?
  14. Recite nam o metodama prevladavanja.
  15. Može li metoda uzeti drugačiji broj parametara (argumenata promjenjive duljine)?
  16. Je li moguće suziti razinu pristupa/vrstu povrata prilikom nadjačavanja metode?
  17. Kako pristupiti nadjačanim metodama roditeljske klase?
  18. Koje su transformacije odozgo prema dolje i odozdo prema gore?
  19. Koja je razlika između nadjačavanja i preopterećenja?
  20. Gdje se statička/nestatička polja mogu inicijalizirati?
  21. Zašto je potreban operator instanceof?
  22. Zašto smo potrebni i što su inicijalizacijski blokovi?
  23. Koji je redoslijed pozivanja konstruktora i inicijalizacijskih blokova dviju klasa: dijete i njegov predak?
  24. Gdje i za što se koristi apstraktni modifikator?
  25. Je li moguće proglasiti metodu apstraktnom i statičkom u isto vrijeme?
  26. Što znači ključna riječ static?
  27. Na koje se Java konstrukcije primjenjuje statički modifikator?
  28. Što se događa ako se u statičkom bloku koda dogodi iznimka?
  29. Je li moguće preopteretiti statičku metodu?
  30. Što je statička klasa, koje su značajke njezine upotrebe?
  31. Koje su značajke inicijalizacije konačnih statičkih varijabli?
  32. Kako statički modifikator utječe na klasu/metodu/polje?
  33. Što znači konačna ključna riječ?
  34. Definirajte pojam "sučelje".
  35. Koji su zadani modifikatori za polja i metode sučelja?
  36. Zašto se metoda sučelja ne može proglasiti konačnom ili statičkom?
  37. Koje vrste klasa postoje u Javi (ugniježđene...itd)
  38. Koje su značajke stvaranja ugniježđenih klasa: jednostavne i statične.
  39. Što znate o ugniježđenim klasama, zašto se koriste? Klasifikacija, slučajevi uporabe, kršenje enkapsulacije.
  40. Koja je razlika između ugniježđenih i unutarnjih klasa?
  41. Koje se klase nazivaju anonimnim?
  42. Kako pristupiti polju vanjske klase iz ugniježđene klase?
  43. Kako možete pristupiti lokalnoj varijabli metode iz anonimne klase deklarirane u tijelu ove metode? Postoje li ograničenja za takvu varijablu?
  44. Kako je bilo koja prilagođena klasa povezana s klasom Object?
  45. Recite nam o svakoj od metoda klase Object.
  46. Što je metoda equals(). Po čemu se razlikuje od operacije ==.
  47. Ako želite nadjačati equals(), koji uvjeti moraju biti ispunjeni za nadjačanu metodu?
  48. Ako je equals() nadjačano, postoje li još neke metode koje bi se trebale nadjačati?
  49. Koja je posebnost metoda hashCode i equals? Kako su metode hashCode i equals implementirane u klasi Object? Koja pravila i konvencije postoje za provedbu ovih metoda? Kada se primjenjuju?
  50. Koja metoda vraća string prikaz objekta?
  51. Što se događa ako nadjačate jednake bez nadjačavanja hashCode-a? Koji se problemi mogu pojaviti?
  52. Postoje li upute o tome koja polja treba koristiti pri izračunavanju hashCode-a?
  53. Mislite li da će biti problema ako objekt koji se koristi kao ključ u hashMapu promijeni polje koje sudjeluje u definiciji hashCodea?
  54. Koja je razlika između apstraktne klase i sučelja, u kojim slučajevima ćete je koristiti?
  55. Je li moguće pristupiti varijablama privatne klase, i ako jest, kako?
  56. Što je hlapljivo i prolazno? Za što i u kojim slučajevima bi bilo moguće koristiti default?
  57. Proširenje modifikatora kod metoda nasljeđivanja, nadjačavanja i skrivanja. Ako roditeljska klasa ima privatnu metodu, može li dijete proširiti svoju vidljivost? Što ako zaštićeno? A na usku vidljivost?
  58. Ima li smisla proglasiti metodu privatnom konačnom?
  59. Koje su značajke konačne inicijalizacije varijable?
  60. Što se događa ako se jedini konstruktor klase proglasi konačnim?
  61. Što je finalizacija? Zašto je to potrebno? Što možete reći o sakupljaču smeća i njegovim algoritmima.
  62. Zašto je metoda kloniranja deklarirana kao zaštićena? Što je potrebno za provedbu kloniranja?
  63. Jeste li upoznati s nekim dizajnerskim uzorcima?
  64. Napišite Singleton... Ali s lijenim učitavanjem. Što ako mora biti siguran za niti? Kada je lijeno učitavanje gore?
  65. Što možete reći o MVC-u? Nacrtajte dijagram i objasnite kako MVC radi.
  66. Napišite funkciju za izračunavanje faktorijala.
  67. S obzirom na funkciju za izračunavanje Fibonaccijevih brojeva, poznato je da radi. Pronađite logičku grešku. Procijenite složenost rezultirajućeg algoritma.

  1. Definirajte "isključivanje"
  2. Kakva je hijerarhija izuzetaka.
  3. Mogu li/treba li rješavati jvm pogreške?
  4. Koji su načini rješavanja iznimaka?
  5. Što znači ključna riječ throws?
  6. Što je posebno kod finally bloka? Je li uvijek ispunjeno?
  7. Može li biti bloka catch prilikom hvatanja iznimaka?
  8. Možete li zamisliti situaciju u kojoj se finally blok ne bi izvršio?
  9. Može li jedan blok catch uhvatiti više iznimaka (iz istih i različitih grana nasljeđivanja)?
  10. Što znate o obrađenim i neobrađenim (provjerenim/nepotvrđenim) iznimkama?
  11. Što je posebno u vezi RuntimeException?
  12. Kako napisati vlastitu ("prilagođenu") iznimku? Kojim ćete se motivima voditi pri odabiru vrste iznimke: provjereno/neprovjereno?
  13. Koji vam operator omogućuje prisilno izbacivanje iznimke?
  14. Postoje li dodatni uvjeti za metodu koja bi mogla izazvati iznimku?
  15. Može li glavna metoda izbaciti iznimku van, i ako može, gdje će se obrađivati ​​ova iznimka?
  16. Ako je povratna izjava sadržana i u bloku catch i u bloku finally, koji je "važniji"?
  17. Što znate o OutOfMemoryError?
  18. Što znate o SQLExceptionu? Koja je to vrsta provjerenog ili neprovjerenog, zašto?
  19. Što je pogreška? U tom slučaju se koristi Error. Navedite primjer pogreške.
  20. Koja se konstrukcija koristi u Javi za rukovanje iznimkama?
  21. Pretpostavimo da postoji blok try-finally. Iznimka je ubačena u blok try i izvršenje je premješteno na finally blok. Finally blok također je bacio iznimku. Koja će od dvije iznimke "izbaciti" iz bloka try-finally? Što se događa s drugom iznimkom?
  22. Pretpostavimo da postoji metoda koja može izbaciti IOException i FileNotFoundException kojim bi redoslijedom trebali ići blokovi catch? Koliko će blokova catch biti izvršeno?

  1. Definirajte pojam "kolekcija".
  2. Navedite prednosti korištenja zbirki.
  3. Koje vrste podataka mogu pohraniti zbirke?
  4. Koja je hijerarhija zbirke?
  5. Što znate o zbirkama popisa?
  6. Što znate o set kolekcijama?
  7. Što znate o zbirkama Queue?
  8. Što znate o zbirkama karata, koja je njihova temeljna razlika?
  9. Imenujte glavne implementacije popisa, skupa, karte.
  10. Koje implementacije SortedSeta poznajete i koje su njihove značajke?
  11. Koje su razlike/sličnosti između Liste i Seta?
  12. Koja je razlika/zajednička razlika između klasa ArrayList i LinkedList, kada je bolje koristiti ArrayList, a kada LinkedList?
  13. Kada je razumno koristiti niz umjesto ArrayList?
  14. Po čemu se ArrayList razlikuje od Vector?
  15. Što znate o implementaciji klasa HashSet i TreeSet?
  16. Koja je razlika između HashMapa i TreeMapa? Kako su postavljeni i kako rade? Što s vremenom pristupa objektima, koje ovisnosti?
  17. Što je Hashtable, po čemu se razlikuje od HashMapa? Do danas je zastarjela, kako još uvijek koristite željenu funkcionalnost?
  18. Što se događa ako stavimo dvije vrijednosti u kartu s istim ključem?
  19. Kakav je redoslijed objekata u kolekciji, kako sortirati kolekciju?
  20. Definirajte pojam "iterator".
  21. Koju funkcionalnost nudi klasa Collections?
  22. Kako doći do nepromjenjive kolekcije?
  23. Koje se zbirke sinkroniziraju?
  24. Kako dobiti sinkroniziranu kolekciju od nesinkronizirane?
  25. Kako doći do zbirke samo za čitanje?
  26. Zašto se karta ne nasljeđuje od zbirke?
  27. Koja je razlika između Iteratora i Enumeracije?
  28. Kako se implementira foreach petlja?
  29. Zašto ne postoji metoda iterator.add() za dodavanje elemenata u kolekciju?
  30. Zašto klasa iteratora nema metodu za dobivanje sljedećeg elementa bez pomicanja kursora?
  31. Koja je razlika između Iteratora i ListIteratora?
  32. Koji su načini ponavljanja kroz sve elemente popisa?
  33. Koja je razlika između sigurnosnih i brzih svojstava?
  34. Što trebam učiniti da izbjegnem izbacivanje ConcurrentModificationException?
  35. Što je stog i red čekanja, recite nam u čemu su njihove razlike?
  36. Koja je razlika između Comparable i Comparator sučelja?
  37. Zašto zbirke ne nasljeđuju sučelja za kloniranje i serijalizaciju?

  1. Koje "string" klase znate?
  2. Koja su glavna svojstva "string" klasa (njihove značajke)?
  3. Je li moguće naslijediti vrstu stringa, zašto?
  4. Definirajte pojam konkatenacije nizova.
  5. Kako pretvoriti niz u broj?
  6. Kako usporediti vrijednost dva niza?
  7. Kako preokrenuti niz?
  8. Kako funkcionira usporedba dvije žice?
  9. Kako smanjiti razmake na kraju niza?
  10. Kako zamijeniti znak u nizu?
  11. Kako dobiti dio niza?
  12. Definirajte pojam "string pool".
  13. Koja metoda vam omogućuje da odaberete podniz u nizu?
  14. Kako podijeliti niz na podnizove prema danom graničniku?
  15. Koja se metoda poziva za pretvaranje varijable u niz?
  16. Kako saznati vrijednost određenog znaka niza, znajući njegov redni broj u nizu?
  17. Kako pronaći traženi znak u nizu?
  18. Je li moguće sinkronizirati pristup retku?
  19. Što radi metoda intern()?
  20. Po čemu se klase String, StringBuffer i StringBuilder razlikuju i što im je zajedničko?
  21. Koji je ispravan način za usporedbu vrijednosti niza dvaju različitih objekata tipa String i StringBuffer?
  22. Zašto je niz nepromjenjiv i finaliziran u Javi?
  23. Zašto je niz znakova poželjniji od niza za pohranu lozinke?
  24. Zašto je niz popularan ključ u HashMapu u Javi?
  25. Napišite metodu za uklanjanje zadanog znaka iz niza.

  1. Koje su vrste I/O tokova?
  2. Navedite glavne pretke I/O tokova.
  3. Koje su sličnosti i razlike između sljedećih tokova: InputStream, OutputStream, Reader, Writer?
  4. Što znate o RandomAccessFile?
  5. Koji su načini pristupa datotekama?
  6. U kojim se paketima nalaze stream klase?
  7. Što znaš o razredima nadgradnje?
  8. Koja klasa dodataka omogućuje čitanje podataka iz ulaznog toka bajtova u formatu primitivnih tipova podataka?
  9. Koja klasa dodataka vam omogućuje da ubrzate čitanje/pisanje korištenjem međuspremnika?
  10. Koje vam klase omogućuju pretvaranje tokova bajtova u tokove znakova i obrnuto?
  11. Koja je klasa dizajnirana za rad s elementima datotečnog sustava (EFS)?
  12. Koji je znak separator pri određivanju puta do EFS-a?
  13. Kako odabrati sve EFS određenog imenika prema kriteriju (na primjer, s određenim nastavkom)?
  14. Što znate o sučelju FilenameFilter?
  15. Što je serijalizacija?
  16. Koji su uvjeti za “sigurnu” serijalizaciju objekta?
  17. Koje klase vam omogućuju arhiviranje objekata?

  1. Definirajte pojam "proces".
  2. Definirajte pojam "tok".
  3. Definirajte pojam "sinkronizacija niti".
  4. Kako programi, procesi i niti međusobno djeluju?
  5. Kada je preporučljivo stvoriti više niti?
  6. Što se može dogoditi ako dvije niti izvrše isti kod u programu?
  7. Što znate o glavnoj niti programa?
  8. Koji su načini za stvaranje i pokretanje niti?
  9. Koja metoda pokreće nit za izvršenje?
  10. Koja metoda opisuje radnju niti tijekom izvršavanja?
  11. Kada nit dovršava svoje izvršenje?
  12. Kako sinkronizirati metodu?
  13. Kako prisilno zaustaviti nit?
  14. Definirajte pojam "daemon thread".
  15. Kako stvoriti daemon nit?
  16. Kako doći do trenutne teme?
  17. Definirajte pojam "monitor".
  18. Kako pauzirati izvođenje niti?
  19. U kojim stanjima može biti stream?
  20. Što je monitor pri pozivanju nestatičke i statičke metode?
  21. Što je monitor prilikom izvršavanja dijela koda metode?
  22. Koje metode vam omogućuju sinkronizaciju izvršavanja niti?
  23. Koja metoda stavlja nit u stanje mirovanja?
  24. Koja je funkcionalnost metoda notify i notifyAll?
  25. Što radi metoda spajanja?
  26. Koji su uvjeti za pozivanje metode čekanja/obavijesti?
  27. Definirajte pojam "međusobno blokiranje".
  28. Koja je razlika između metoda interrupt, interrupted, isInterrupted?
  29. U kojem slučaju će biti izbačen InterruptedException, koje metode ga mogu izbaciti?
  30. volatile modifikatore i metoda yield().
  31. Paket java.util.concurrent
  32. Postoji neka metoda koja izvodi i++ operaciju. Varijabla i tipa int. Pretpostavlja se da će se kod izvršavati u višenitnom okruženju. Treba li blok sinkronizirati?
  33. Što se koristi kao mutex ako je metoda deklarirana statičkom sinkroniziranom? Je li moguće stvoriti nove instance klase dok se izvodi statička sinkronizirana metoda?
  34. Pretpostavimo da se u metodi pokretanja dogodila iznimka RuntimeException koja nije uhvaćena. Što će se dogoditi s protokom? Postoji li način da se zna da je došlo do iznimke (bez omotanja cijelog tijela pokretanja u blok try-catch)? Postoji li način da se nit ponovo podigne nakon što se to dogodi?
  35. Koje biste standardne Java alate koristili za implementaciju skupa niti?
  36. Što je ThreadGroup i zašto je potrebna?
  37. Što je ThreadPool i zašto je potreban?
  38. Što je ThreadPoolExecutor i zašto je potreban?
  39. Što su "atomski tipovi" u Javi?
  40. Zašto je potrebna klasa ThreadLocal?
  41. Što je Izvršitelj?
  42. Što je ExecutorService?
  43. Zašto je potreban ScheduledExecutorService?
Ovaj popis od 300+ pitanja (bez odgovora) pronađen je na http://becomejavasenior.com/. Tu su navedeni i drugi autori.

58489 Ukupno pregleda 15 Pregleda danas

Pregledi: 38 283

  • Što je OOP?
  • Što je objekt?
  • Navedite osnovne principe OOP-a.
  • Što je nasljedstvo?
  • Što je polimorfizam? Koje manifestacije polimorfizma u Javi poznajete?
  • Što je inkapsulacija?
  • Što je apstrakcija?
  • Koje su prednosti objektno orijentiranih programskih jezika?
  • Kako korištenje objektno orijentiranog pristupa poboljšava razvoj softvera?
  • Postoji izraz "je" i "ima". Što oni znače u smislu OOP principa? Koja je razlika između sastava i agregacije?
  • Što mislite pod polimorfizmom, inkapsulacijom i dinamičkim povezivanjem?

java jezgra.

  • Koja je razlika između JRE, JVM i JDK?
  • Opišite modifikatore pristupa u Javi.
  • Što je pristup na razini paketa.
  • Po čemu se apstraktna klasa razlikuje od sučelja? Kada biste koristili apstraktnu klasu, a kada bi koristili sučelje?
  • Može li objekt pristupiti varijabli privatne klase? Ako da, kako?
  • Čemu služe statički blokovi u Javi?
  • Je li moguće preopteretiti statičku metodu?
  • Recite nam o unutarnjim klasama. Kada ćete ih koristiti?
  • Koja je razlika između varijable instance i statičke varijable? Navedite primjer.
  • Navedite primjer kada možete koristiti statičku metodu?
  • Recite nam o klasama učitavača i dinamičkom učitavanju klasa.
  • Koja je svrha operatora "assert" u Javi?
  • Zašto neka sučelja uopće ne definiraju metode?
  • Koja je glavna razlika između String, StringBuffer, StringBuilder?
  • Recite mi o Java I/O streamovima.
  • Što je Heap i Stack memorija u Javi?
  • Koja je razlika između Stack i Heap memorije u Javi?
  • Recite nam nešto o memorijskom modelu u Javi?
  • Kako radi sakupljač smeća?
  • Recite nam o odljevu tipova. Što je degradacija i napredovanje? Kada dobivate ClassCastException?
  • Što je statička klasa, koje su značajke njezine upotrebe?
  • Kako pristupiti polju vanjske klase iz ugniježđene klase.
  • Koje vrste ugniježđenih klasa postoje? Za što se koriste?
  • Je li moguće promijeniti prilikom nadjačavanja metode:
  • Modifikator pristupa
  • tip povratka
  • Vrsta ili broj argumenta
  • Naziv argumenta
  • Promijeniti redoslijed, količinu ili potpuno ukloniti odjeljak za bacanje?
  • Što je autoboxing?
  • Što je generički lijek?
  • Koja je prava svrha korištenja generičkih tipova u Javi?
  • Kako se varijable prosljeđuju metodama, po vrijednosti ili referenci?
  • Koje metode ima klasa Object?
  • Pravila za nadjačavanje metode Object.equals().
  • Ako želite nadjačati equals(), koji uvjeti moraju biti ispunjeni za nadjačanu metodu?
  • Kakav je odnos između hashCode i jednakih?
  • Kako su metode hashCode i equals implementirane u klasi Object?
  • Što se događa ako nadjačate jednake bez nadjačavanja hashCode-a? Koji se problemi mogu pojaviti?
  • Postoje li upute o tome koja polja treba koristiti pri izračunavanju hashCode-a?
  • Čemu služi metoda hashCode()?
  • Pravila za nadjačavanje metode Object.hashCode().
  • Recite nam nešto o kloniranju objekata. Koja je razlika između plitkog i dubokog kloniranja?
  • Pravila za nadjačavanje metode Object.clone().
  • Gdje i kako možete koristiti privatni konstruktor?
  • Što je zadani konstruktor?
  • Opišite metodu Object.finalize().
  • Koja je razlika između riječi final, finally i finalize?
  • Opišite hijerarhiju izuzetaka.
  • Koje vrste iznimaka u Javi znate, po čemu se razlikuju?
  • Što je označeno, a što neoznačeno iznimka?
  • Kako stvoriti vlastitu neoznačenu iznimku?
  • Što su Unchecke iznimke?
  • Što je pogreška?
  • Opišite kako funkcionira blok try-catch-finally.
  • Je li moguće koristiti try-finally (bez catch) blok?
  • Izvodi li se blok finally uvijek?
  • Koje su značajke String klase? što radi metoda intern().
  • Je li moguće naslijediti vrstu stringa, zašto?
  • Zašto je niz popularan ključ u HashMapu u Javi?
  • Definirajte pojam konkatenacije nizova.
  • Kako preokrenuti niz?
  • Kako usporediti vrijednost dva niza?
  • Kako obrezati razmake na početku i na kraju niza?
  • Definirajte pojam "string pool".
  • Je li moguće sinkronizirati pristup retku?
  • Koji je ispravan način za usporedbu vrijednosti niza dvaju različitih objekata tipa String i StringBuffer?
  • Zašto je niz nepromjenjiv i finaliziran u Javi?
  • Napišite metodu za uklanjanje zadanog znaka iz niza.
  • Što je refleksija?
  • Što se događa sa sakupljačem smeća (GC) ako se dogodi iznimka tijekom izvršavanja metode finalize() nekog objekta?
  • Što je internacionalizacija, lokalizacija?
  • Što su bilješke u Javi?
  • Koje funkcije obavlja anotacija?
  • Koje ugrađene bilješke u Javi znate?
  • Što rade napomene @Retention, @Documented, @Target i @Inherited?
  • Što rade napomene @Override, @Deprecated, @SafeVarargs i @SuppressWarnings?
  • Koji se životni ciklus bilješke može odrediti pomoću @Retention?
  • Koji elementi se mogu označiti, kako to specificirati?
  • Kako kreirati svoju napomenu?
  • Koje su vrste atributa dopuštene u bilješkama?
  • Što je JMX?
  • Koje prednosti nudi JMX?
  • Što još JMX može učiniti osim daljinskog upravljanja?
  • Što je MBean?
  • Koje vrste MBeana postoje?
  • Što je MBean poslužitelj?
  • Koji mehanizmi osiguravaju sigurnost u Java tehnologiji?
  • Koje su neke od provjera koje obavlja Java verifikator bajtkoda?
  • Što znate o "upravitelju zaštite" u Javi?
  • Što je JAS?
  • Što je refaktoring?

Java Collections Framework.

  • Što je zbirka?
  • Navedite glavna sučelja zbirki i njihovu implementaciju.
  • Po čemu se ArrayList razlikuje od LinkedList-a? U kojim slučajevima je bolje koristiti prvi, a u kojim drugi?
  • Koja je razlika između HashMapa i Hashtablea?
  • Po čemu se ArrayList razlikuje od Vector?
  • Kako se uspoređuju elementi kolekcije?
  • Rasporedite sljedeća sučelja u hijerarhiji: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
  • Zašto karta nije zbirka dok su popis i skup zbirka?
  • Definirajte pojam "iterator".
  • Što znate o Iterable sučelju?
  • Kako pretvoriti HashSet u ArrayList u jednom retku?
  • Kako pretvoriti ArrayList u HashSet u jednom retku?
  • Kako iterirati sve tipke Mape s obzirom na to da Karta nije Iterable?
  • Kako iterirati sve vrijednosti Mape s obzirom na to da Karta nije Iterable?
  • Kako iterirati sve parove ključ/vrijednost u mapi s obzirom da mapa nije iterable?
  • Što je "razvrstavanje" SortedMap-a, osim činjenice da toString() ispisuje sve po redu?
  • Kako kopirati elemente iz bilo koje zbirke u niz u jednom pozivu?
  • Implementirajte simetričnu razliku dviju zbirki koristeći metode Collection (addAll(), removeAll(), retainAll()).
  • Usporedite Enumeraciju i Iterator.
  • Kako su Iterable i Iterator povezani?
  • Kakav je odnos između Iterable, Iterator i "za-svakog" uveden u Javi 5?
  • Usporedite Iterator i ListIterator.
  • Što se događa ako pozovem Iterator.next() bez "pitanja" Iterator.hasNext()?
  • Što se događa ako pozovem Iterator.next() prije nego što pozovem Iterator.hasNext() 10 puta? Nedostaje li mi 9 stavki?
  • Ako imam kolekciju i podređeni iterator, hoće li se zbirka promijeniti ako pozovem iterator.remove()?
  • Ako imam zbirku i podređeni iterator, hoće li se iterator promijeniti ako pozovem collection.remove(..)?
  • Zašto su dodali ArrayList ako je već postojao Vector?
  • Implementacija klase ArrayList ima sljedeća polja: Object elementData, int size. Objasnite zašto morate odvojeno pohraniti veličinu kada uvijek možete uzeti elementData.length?
  • Je li LinkedList jednostruko, dvopovezan ili četverostruko povezan popis?
  • Koje je najgore vrijeme za metodu contain() za element koji se nalazi u LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N) )?
  • Koje je najgore vrijeme za metodu contain() za element koji se nalazi u ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N) )?
  • Koje je najgore vrijeme za LinkedList add() metodu (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Koje je najgore vrijeme za metodu ArrayList add() (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Koliko elemenata je dodijeljeno u memoriji kada se pozove ArrayList.add()?
  • Koliko elemenata je dodijeljeno u memoriji kada se pozove LinkedList.add()?
  • Procijenite količinu memorije za pohranu jednog primitiva tipa bajta u LinkedList?
  • Procijenite količinu memorije za pohranu jednog primitiva tipa bajta u ArrayList?
  • Dodao sam element u sredinu popisa: list.add(list.size()/2, newElem). Kome je ova operacija sporija - za ArrayList ili za LinkedList?
  • Kako iterirati elemente LinkedList obrnutim redoslijedom bez korištenja sporog get(index)?
  • Kako jednim pozivom iz Liste dobiti Listu sa svim elementima osim prva i zadnja 3?
  • Mogu li različiti objekti u memoriji (ref0 != ref1) imati ref0.hashCode() == ref1.hashCode()?
  • Mogu li različiti objekti u memoriji (ref0 != ref1) imati ref0.equals(ref1) == true?
  • Mogu li različite reference na isti objekt u memoriji (ref0 == ref1) imati ref0.equals(ref1) == false?
  • Postoji klasa Point(int x, y;). Zašto je hash kod oblika 31 * x + y poželjniji od x + y?
  • Ako je klasa Point(int x, y;) "ispravna" za implementaciju metode equals (return ref0.x == ref1.x && ref0.y == ref1.y), ali napravite hash kod kao int hashCode( ) ( return x;), hoće li takve točke biti ispravno postavljene i dohvaćene iz HashSeta?
  • equals() generira relaciju ekvivalencije. Koje od svojstava ima takav odnos: komutativnost, simetriju, refleksivnost, distributivnost, asocijativnost, tranzitivnost?
  • Je li moguće implementirati equals(Object that) (vrati this.hashCode() == that.hashCode()) ovako?
  • equals zahtijeva provjeru je li argument (equals(Object that)) istog tipa kao i sam objekt. Koja je razlika između this.getClass() == that.getClass() i one instanceof MyClass?
  • Je li moguće implementirati equals metodu klase MyClass ovako: klasa MyClass (javni boolean equals(MyClass that) (return this == that;))?
  • Hoće li HashMap raditi ako svi ključevi vrate int hashCode() (vrati 42;)?
  • Zašto su dodali HashMap ako je već postojao Hashtable?
  • Prema Knuthu i Kormenu, postoje dvije glavne implementacije hash tablice: na temelju otvorenog adresiranja i na temelju metode ulančavanja. Kako se implementira HashMap? Zašto su to učinili (po vašem mišljenju)? Koje su prednosti i nedostaci svakog pristupa?
  • Koliko se klikova na vezu dogodi kada izvršite HashMap.get(key) na ključu koji se nalazi u tablici?
  • Koliko novih objekata nastaje kada dodate novi element u HashMap?
  • Kako radi HashMap kada pokušate pohraniti dva elementa u njega pomoću ključeva s istim hashCode, ali za koji je jednak == false?
  • HashMap se može degenerirati u popis čak i za ključeve s različitim hashCode-om. Kako je ovo moguće?
  • Koje je najgore vrijeme za metodu get(key) za ključ koji nije u tablici (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Koje je najgore vrijeme za metodu get(key) za ključ koji se nalazi u tablici (O(1), O(log(N)), O(N), O(N*log(N)), O (N*N))?
  • Objasnite značenje parametara u konstruktoru HashMap(int initialCapacity, float loadFactor).
  • Koja je razlika između HashMapa i IdentityHashMapa? Čemu služi IdentityHashMap? Kako može biti korisno implementirati serijalizaciju ili kloniranje?
  • Koja je razlika između HashMapa i WeakHashMapa? Čemu služi WeakHashMap?
  • WeakHashMap koristi WeakReferences. Zašto ne stvoriti SoftHashMap na SoftReferences?
  • WeakHashMap koristi WeakReferences. Zašto ne stvoriti PhantomHashMap na PhantomReferences?
  • Napravite HashSet iz HashMapa (koristite samo više ključeva, ne više vrijednosti).
  • Napravite HashMap od HashSet(HashSet >).
  • Usporedite sučelja java.util.Queue i java.util.Deque.
  • Tko koga proširuje: Queue produljuje Deque ili Deque proširuje Queue?
  • Zašto LinkedList implementira i List i Deque?
  • Koja je razlika između klasa java.util.Arrays i java.lang.reflect.Array?
  • Koja je razlika između klasa java.util.Collection i java.util.Collections?
  • Napišite program bez niti koji uzrokuje da zbirka izbaci ConcurrentModificationException.
  • Što je "fail-fast ponašanje"?
  • Postoji li posebna klasa java.util.EnumSet za skupove enuma? Za što? Zašto se autorima nije svidio HashSet ili TreeSet?
  • java.util.Stack - Smatra se "zastarjelim". Što se preporuča zamijeniti? Zašto?
  • Koja zbirka provodi disciplinu FIFO usluga?
  • Koja zbirka provodi FILO servisnu disciplinu?
  • Navedite primjer kada zbirka izbacuje UnsupportedOperationException.
  • Zašto ne možete napisati "ArrayList brojevi = novi ArrayList ();", ali možete "Popis brojevi = novi ArrayList ();"?
  • LinkedHashMap - što je to "zvijer"? Što je u njemu s LinkedLista, a što s HashMapa?
  • LinkedHashSet - što je to "zvijer"? Što je u njemu s LinkedLista, a što s HashSeta?
  • Kažu da je lako napraviti jednostavnu predmemoriju s "politikom nevaženja" na LinkedHashMapu, znate kako?
  • Što vam PriorityQueue dopušta?
  • Koje su razlike između java.util.Comparator i java.lang.Comparable?

Java 8.

  • Što je simbolička poveznica?
  • Koja je razlika između I/O i NIO?
  • Koje značajke NIO-a znate?
  • Koje su vrste I/O tokova?
  • Imenujte glavne klase ulaznih/izlaznih tokova.
  • Kako se OutputStream, InputStream, Writer, Reader razlikuju i što im je zajedničko?
  • Koje podklase osnovne klase InputStream znate čemu služe?
  • Što znate o RandomAccessFile?
  • Koje načine pristupa datotekama ima RandomAccessFile?
  • Koje su podklase osnovne klase OutputStream i znate li čemu služe?
  • Za što se PushbackInputStream koristi?
  • Za što se koristi SequenceInputStream?
  • Koje podklase osnovne klase Reader znate čemu služe?
  • Koje podklase osnovne klase Writer znate čemu služe?
  • Što je apsolutni i relativni put?
  • U kojim se paketima nalaze stream klase?
  • Što znaš o razredima nadgradnje?
  • Koja klasa dodataka omogućuje čitanje podataka iz ulaznog toka bajtova u formatu primitivnih tipova podataka?
  • Koja klasa dodataka vam omogućuje da ubrzate čitanje/pisanje korištenjem međuspremnika?
  • Koje vam klase omogućuju pretvaranje tokova bajtova u tokove znakova i obrnuto?
  • Koja je razlika između klase PrintWriter i klase PrintStream?
  • Koja je klasa dizajnirana za rad s elementima datotečnog sustava?
  • Koji je znak graničnik kada se navodi staza u datotečnom sustavu?
  • Koje metode klase File poznajete?
  • Što znate o sučelju FileFilter?
  • Koje klase vam omogućuju arhiviranje objekata?

  • Na kojem objektu dolazi do sinkronizacije kada se pozove statička sinkronizirana metoda?
  • Za što se koristi ključna riječ volatile, synchronized, transient, native?
  • Što znači prioritet niti?
  • Što su demonske niti u Javi?
  • Što znači uspavljivati ​​potok?
  • U kojim stanjima nit može biti u Javi? Kako zapravo stream funkcionira?
  • Koja je razlika između dva sučelja za implementaciju Runnable i Callable zadataka?
  • Razlike između CyclicBarrier i CountDownLatch?
  • Što je uvjet utrke?
  • Kako zaustaviti nit?
  • Što se događa kada se u niti pojavi iznimka?
  • Što je ThreadLocal varijabla?
  • Što je FutureTask?
  • Razlika između interrupted i isInterrupted?
  • Zašto se metode čekanja i obavijesti pozivaju u sinkroniziranom bloku?
  • Što je skup niti?
  • Razlike između livelock i mrtve točke?
  • Kako provjeriti drži li nit bravu?
  • Kako dobiti dump niti?
  • Koja se postavka JVM-a koristi za kontrolu veličine hrpe niti?
  • Razlike između sinkroniziranog i ReentrantLock-a?
  • Što je semafor?
  • Što se događa ako je red za spremište niti već pun i vi pošaljete zadatak?
  • Razlike između metoda submit() i execute() skupa niti?
  • Što je metoda blokiranja?
  • Što je ReadWriteLock?
  • Što je Singletonovo dvostruko provjereno zaključavanje?
  • Što je okvir Fork/Join?
  • Sila je rijeka iz koje mnogi mogu piti, a Jedi trening nije jedini način da se iz nje crpi." - Luke Skywalker Sve zbirke knjiga koje su ostale. Koje od njih čitati, a koje ne – na vama je. Sada vam preostaje samo jedan cilj: zaposliti se i izgraditi karijeru, a da ne zgazite na grablje. Posljednji članak podijeljen je u odjeljke: - Prije posla - Intervju - Tijekom rada U ovom dijelu ima dosta mog osobnog mišljenja, pa vas molim da ne vadite fraze iz konteksta i tretirajte to kao iskren razgovor sa starim prijateljem :).

    Prije posla

    U nastavku je deset najpopularnijih klišeja koji nastaju kada dušu privuče programiranje, ali određene okolnosti ometaju osobu. Moj zadatak je pokušati zaustaviti vašu sumnjičavost i postaviti vas na pozitivan način razmišljanja. Ako čitate ovaj članak, dalje ste nego što mislite! Psihički ste već tamo gdje trebate biti, a ako ste već pročitali neke knjige, onda je pola puta već prošlo. Stoga, prestanite sumnjati - to je sudbina slabih. Samo naprijed! Već bolje? Onda idemo! "Nemam obrazovanja" Kad sam upisao akademiju jedne od velikih outsourcinga, anketari su mi nježno dali naslutiti da ih diploma uopće ne zanima, pa su pitanja bila konkretna - o OOP-u i o osnovnoj Javi. Naravno, naići ćete na slobodna radna mjesta gdje je dostupnost istih. obrazovanje će biti jasan uvjet. Želim samo reći da njegov izostanak ovih dana nije prepreka. Mnogi inozemni uredi traže BS / MS Computer Science ili, pozornost, relevantno iskustvo. Nije uvjerljivo? Možda će vas ohrabriti činjenica da nemam tehničko obrazovanje;), ali to me apsolutno nije spriječilo da stječem iskustvo u velikim tvrtkama. Pitajte me sada što bih učinio da mogu premotati vrpcu? Naravno, išao bih na KPI/NAU, ali ne bih previše tugovao da ne uđem. Prestani se plašiti zbog ovoga. Vrijeme će proći - možete dobiti koru sa 40 ako želite - ali za sada se usredotočite na to da postanete junior developer ovdje i sada. "Bit će ljudi pametnijih od mene" Uvijek će postojati ljudi pametniji, pametniji, fleksibilniji, talentiraniji od vas, i svaki posao nije iznimka. Ova činjenica vam apsolutno ne daje za pravo da odstupite od cilja. Možda negdje na drugom kraju globusa postoji mali dječak iz Japana koji brže množi i dijeli brojeve od vas, a neka baka iz Češke tipka na tipkovnici mobitela brže od bilo kojeg tinejdžera. Ali ne razmišljaš o tome, zar ne? Pa zašto bi vam bilo stalo do ljudi s kojima ćete raditi kada se smjestite? Po nečemu će vas budući kolege nadmašiti, u nečemu izgubiti od vas. Ovo je u redu! Prekrižiti. "Mislim da ne mogu" Pa, prije svega, nitko nije rekao da će biti lako, ali to uopće ne znači da vaš cilj nije ostvariv. Ništa vas ne sprječava da jednostavno isprobate, čak i ako trenutno radite kao računovođa ili pomoćnik u prodaji. Dođite nakon radnog dana i sjednite učiti. Ako nakon nekog vremena vidite napredak, to je znak da se krećete u pravom smjeru. Nemoj stati! Ako te ovo makar malo zanima i dano ti je onda ne znam niti jednu točku koja bi me mogla uvjeriti da toga nisi vrijedan. "Ja sam lijen" Lijenost je samo nedostatak motivacije. Ako primijetite da većinu svog slobodnog vremena, umjesto da učite i da se ne borite s tečajem, glupo radite smeće - žurim vas obavijestiti da, najvjerojatnije, posao programera nije vaš. Barem ne sada. Neki nazivaju lijenost grijehom, bolešću, kolerom modernog doba zajedno s pretilošću. Prepustite ovaj posao karijernoj histeriji. Po mom mišljenju, sve okolo u ovom životu je zasićeno iluzijom borbe i natjecanja: tko je viši, tko jači, tko je bogatiji. Tko ima hladniji auto, tko veću plaću u timu, tko jače pritišće uteg u teretani, koja se od cura ranije udala i rodila djecu - od ovoga ti je muka, kao smrdljiva brza hrana. Ljudi su prestali živjeti i uživati ​​u životu, slijediti svoje snove, mijenjajući svoju zonu udobnosti za izbor između Pepsija i Coca-Cole. Za mene je lijenost dobra, jednostavno je divna. Ovo je obična zaštitna funkcija vašeg tijela da štedi vrijeme i energiju na stvarima koje su mu beskorisne. Osoba je stvorena da bude slobodna, pa ako ste lijeni - prestanite dizati guzicu s kauča - možda je sada na svom mjestu :). "Idem tamo zbog novca" Ako okupimo programere i kažemo: od sada će vaša plaća biti 3-4 tisuće grivna za bilo koju razinu, a testeri će i dalje primati iste stope, onda će pitanje biti drugačije: ne koliko će biti bombardirano, već koliko programeri nakon ove vijesti ostat će samo programeri. Puno ljudi ulazi u IT zbog tijesta. Plaća prevedena od dolara, sireva i skupog DSLR-a. Bez obzira koliko sam radio s ljudima, razgovori o tome uvijek su se provlačili. Ne kažem da je ovo loše, samo želim da se ne pokušavate uvjeriti da izlazite iz čisto duhovnih ciljeva kako biste promijenili svijet na bolje. Prije nego što sam se zaposlio kao junior, znao sam kolike su plaće starijih, tehničkih voditelja - pa čak i srednjih - i ove su me misli samo inspirirale: u moje vrijeme, prije nego što sam radio kao programer, mogao sam samo sanjati o takvim figure. Nazovite te stvari pravim imenom i prestanite se toga sramiti. "Mislim da nije moj"Čiji onda? Znate, to je lako provjeriti. Otvorite prvi svezak Hortsmanna i počnite čitati, pisati kod iz primjera. Ako vam nije dosadno i već drugi tjedan ne obilježavate vrijeme na istom poglavlju, odbacite svoje sumnje. Studij tehničkih specijalnosti je konzistentna stvar. Ne možete ići na B bez poznavanja A, ali uvijek ćete imati priliku vratiti se poglavlje unatrag i ojačati temelje. Samo naprijed. "Mnogo je poput mene" Uvijek postoji konkurencija za mjesto. Ne tvrdim, na primjer, sada je ova brojka 300-400 testera bez iskustva, ili čak više za jedno mjesto. Da, ovo je gorka istina, ali, s druge strane, ni s takvim pokazateljima ne mogu pronaći dovoljno ozbiljnu stavku. Da, najmanje 100500 na mjestu !! Uvijek imate priliku steći iskustvo na svojim projektima: izgraditi neku vrstu usluge, desktop program, upotrijebiti cijeli stog koji poznaješ - i već radiš neravnine, a ostalo, osim što šalješ svoj životopis, ne radi ništa drugo. “Nitko ne odgovara na moj životopis” U nastavku gornjeg stavka. Najvjerojatnije je za buduće IT stručnjake bez iskustva dobro biti u stanju napisati lijep životopis, ali kada ima puno ljudi za jedno radno mjesto, mnogi su životopisi međusobno vrlo slični: naravno, možete poslati fotografiju s dekoltea (ako je djevojka) ili napisati puno tehnologija, koje i sami znate samo s Wikipedije. U oba slučaja HR jednostavno neće mariti: ako na natječaju za projekt bude osoba koja, na primjer, poznaje AWS, onda će u životopisu tražiti AWS. Uzmite u obzir još jednu važnu točku, kao što su preporuke kolega. To je muka svake osobe koja nema takva poznanstva, jer se odatle uzima lavovski dio juniora (ako osoba, po preporuci, nije idiot, naravno). Obično se, naglašavam, za poziciju juniora uzima adekvatna aktivna osoba koja je spremna učiti, pa i za hranu. A ako takav kandidat ne uspije, veća je vjerojatnost da ćete vi biti sljedeći. Pa, dok se s ostalima intervjuira, imate puno područja na kojima možete nadograditi cool: open source, zagonetke na internetu i možda freelancing. “Neću proći intervju / želim raditi u određenoj tvrtki” Da, najvjerojatnije će prvi intervju biti neuspješan, ali iskustvo koje dobijete je neprocjenjivo. Svakim sljedećim intervjuom postat ćete samouvjereniji i snalažljiviji. Kako se sada sjećam svog prvog ... Bože, o kakvim sam glupostima pričao?! Kako je bilo neugodno otići za njim (sjećam se onog ghoula koji mi se cerio u lice), ali kad sam došao kući i razmislio, shvatio sam da je to bila divna lekcija. Nakon njega svi sljedeći slični događaji bili su prožeti lakoćom i samopouzdanjem. Nitko nije umro, traže takve kao ja, pa ću doći. Vjeruj u sebe! Ako želite konkretno u određenu tvrtku, mislim da vam neću otkriti jedan lifehack popularan u našem okruženju, ali ipak: prije nego organizirate sastanak s ovim uredom, prije ovoga prođite intervju s konkurentima. Možda će vam biti ponuđeno nešto što nećete odbiti ili će uvjeti biti oštriji. Jedno znam sigurno: nećete požaliti. "Dobar sam u ovom poslu" Znate, postoji ova stara izreka: Le mieux est I'enneini du bien ("Najbolji je neprijatelj dobrog"). Možda ti posao nije najgore mjesto, ali da, gazda je koza, pa što? Ili, na primjer, treća godina bez bonusa, ali stabilna plaća, pogotovo jer imam već 30 godina. Donekle, može i biti tako, samo zapamtite da imate jedan život i da ga ne treba trošiti na razočaranja, za imaginarnu udobnost, kad je toliko zanimljivih stvari uokolo, a cijeli život nije dovoljan za razumijevanje. Ne bojte se biti bolji, nemojte se bojati biti bolji. Ne slušajte nikoga, idite ustrajno do cilja ako znate da je to ono što zaista želite. Ne bojte se promijeniti!

    Intervju

    Uglavnom, sve to možete pronaći na internetu ili se raspitati s prijateljima, ali mislim da to neće biti suvišno. Ispod je primjer intervjua za mlađeg Java developera kakav bi bio sada da sam ja anketar. Pitanja mogu biti svašta, samo sam pokušao prikupiti nešto prosječno za bolnicu. Pretvarajmo se da imaš sreće. Standardna shema Korak 1. Nazove vas regruter i dogovorite razgovor s njom, na primjer, sutra u 11:00. Korak 2 Dolazite rano, jer 11 sati najvjerojatnije nije vrijeme za vas, već za programere, koji imaju rezerviranu nekakvu sobu u kojoj ćete biti mučeni. Lijepo je ponašanje svakog regrutera upozoriti na to. Korak 3 Zapravo, počevši od koraka 3, sve se točke mogu miješati, jer se intervjui mogu provoditi na različite načine. Na primjer, ovdje vas mogu pitati o osnovnim stvarima, odakle ste, zašto ste s nama i tako dalje. Moguće je da to može i sam HR, a naravno, moguće je i na engleskom. Točno, ovisi o tvrtki. 4. korak Pozvani ste u sobu za sastanke, gdje ćete razgovarati s jednom, dvije, tri osobe, od kojih će jedna biti viši ili tehnički voditelj koji će s vama raditi u budućnosti, među ostalima može biti Scrum majstor, drugi programeri ili HR-ovi. Neko vrijeme vas intervjuiraju, a onda vam stisnu ruku i puste. Korak 5 Možda će to biti sljedeći dan, ili možda odmah nakon koraka 4 - obavit ćete razgovor sa stranim kupcem (ako ga ima), ili će možda on sam obaviti intervju. Kao što vidite, postoji mnogo opcija. Negdje ima kupaca, negdje je i telefonski razgovor. Ovo je samo primjer. Primjer tehničkog intervjua za Junior Java developera Stvarno mi je žao nedovoljno razvijenih koji čitaju nešto pametno kako bi se utopili/zgnječili/hvalili pred podnositeljem zahtjeva za intervju. Ako vidite da je takva osoba ispred vas, a osjećate pritisak i napetost od nje, odmah je pošaljite na tri smiješna, jer ćete nakon uspješnog prolaza s ovim kretenom morati raditi. Ne trošite svoje dragocjene živce. Razgovor bi se, prije svega, trebao odvijati s ciljem da se sazna što kandidat zna, a ne što ne zna. Naravno, ako trebate osobu koja zna nešto konkretno - pitajte je, nemojte je mučiti beskorisnim stvarima koje ne koristite u projektu. Ipak budi čovjek! U nastavku su približna pitanja koja se mogu pojaviti u intervjuu. 5 pitanja za svaku tehnologiju. OOP 1. Navedite primjer polimorfizma iz stvarnog života? Koje su prednosti? Nedostaci? Napišite jednostavan kod. 2. Što je sučelje? Apstraktna klasa? Zašto nam trebaju sučelja ako možete glupo sve napisati s klasama (malo provokacije)?. Isto vrijedi i za apstraktnu klasu. Koje su zadane metode u Javi 8? 3. Izgradite hijerarhiju klasa na konkretnom primjeru zamišljene baze podataka ili programa (postoji popis različitih klasa radnika iz baze) i interakcije između njih (agregacija, sastav). 4. Kako se sastav razlikuje od agregacije (is-a, has-a)? 5. Kako možete zaobići zabranu višestrukog nasljeđivanja u Javi? JDK/JRE 1. Po čemu se JDK razlikuje od JRE? Što je JVM? 2. Što je classpath i čemu služi? Kako, na primjer, učitati druge klase u classpath? 3. Što znate o classloaderu? 4. Recite nam nešto o javadocu? Čemu služi? 5. Što je JAR, WAR? Java Common 1. Koja je razlika između statičkih metoda i nestatičkih metoda? Što je konačno? 2. Što je boxing-unboxing? bajt b = 127, b++, kakav je rezultat i zašto? 3. Što su omoti, čemu služe? 4. Što trebam učiniti da izradim svoju bilješku? Što je nadjačavanje/preopterećenje? 5. Zašto je klasa String konačna? Što radi metoda intern()? Strukture podataka 1. Recite nam nešto o strukturi API-ja za zbirke u Javi? Jeste li već radili s Stream API-jem? 2. Koja je razlika između ArrayList i LinkedList? Gdje je bolje koristiti ArrayList, a gdje LinkedList? 3. Recite nam kako HashMap funkcionira? Koje su značajke rada s TreeSet-om, HashSet-om? Imate li iskustva s Guava kolekcijama? 4. Nizovi u Javi, primjer dvodimenzionalnog niza. 5. hashCode, jednak na primjeru HashMap? Konkurencija 1. Što je proces? Teći? Kako stvoriti nit? Što je sinkronizirano? Kako razumjeti ovaj ili onaj dio sigurnog koda? 2. Što je Thread.sleep, kao i čekanje, obavijesti, izdavanje? 3. Navedite primjer zastoja? 4. Zbirke pri radu s višenitnošću. 5. Lokalne i atomske operacije niti SQL/JDBC 1. Na konkretnom primjeru, iz baze korisnika nabavite onoga čija je plaća veća od 5000. 2. Primjeri INNER JOIN, OUTER JOIN, Order By, Group By. 3. Zašto mi treba JDBC upravljački program? Primjeri. 4. Recite sve što znate o ResultSet-u, par primjera. 5. Napišite jednostavan DAO koristeći RS. JPA/Hibernacija 1. Koje su prednosti i nedostaci JPA? 2. Što je EntityManager? entitet? 3. Kriteriji u JPA/Hibernate. 4. Jedan-na-jedan, mnogo-prema-mnogima u JPA/hibernaciji 5. Kako biste napravili JOIN u hibernaciji? HQL? Proljeće 1. Što je DI/IoC? Prednosti. 2. Što je kontekst aplikacije? Grah? 3. Koje su vrste IoC inicijalizacije? 4. Singleton, prototip u proljeće? Proljeće temeljeno na bilješkama? 5. Životni ciklus graha? init-metoda, uništi-metoda? @PostConstruct, @PostDeploy? Maven 1. Glavne faze mavena, životni ciklus. 2. Kako pokrenuti maven s testovima, bez testova? Što je arhetip, mvn ovisnost? 3. Profili u mavenu, kako kreirati, kako pokrenuti. 4. Što je snapshot u mavenu? Središnja/udaljena spremišta? 5. Dodaci u mvn-u, princip rada, par primjera. Algo 1. Koncept algoritma, njegova brzina, Big-O-Notation. 2. Kako u jednom potezu pronaći srednji element na LinkedList-u? 3. Napisati primitivni Stack? Koja je razlika između Stack i Queue? LIFO, FIFO? 4. Brzo sortiranje, razvrstavanje spajanjem. 5. Napišite program koji provjerava je li broj palindrom. Slažem se, možda je letvica malo više savijena prema sredini od juniora, ali mislim da vam takva priprema sigurno neće škoditi. Pokušajte dublje ući u svako pitanje. Usput, mnoge upute u Javi ovdje nisu naznačene, uzmite u obzir.

    Tijekom rada

    Ovdje su male preporuke za one mlađe/srednje programere koji su već ustali. Ovi jednostavni savjeti mogu vam biti korisni baš kao što su pomogli i meni. Ne budi tvrdoglav Prestanite dokazivati ​​svoju tvrdnju, čak i ako je zavodljivo blizu istine. Već ste primijetili da ste dugo u sporu, što znači da je s druge strane barikada običan magarac koji u životu ima samo dva mišljenja: svoje i krivo. Imamo nevjerojatan broj tvrdoglavih ljudi koji stoje na svome do posljednjeg, samo da im ego ne bude poljuljan. I to nisu samo vaši kolege, oni su posvuda - u minibusu, u trgovini, rodbini, bliskim prijateljima - od njih ne možete pobjeći ili se sakriti. Morate nekako komunicirati s njima, čak i ako razumijete da osoba priča otvorene gluposti. Štoviše, isto se može dogoditi i vama. Slažem se, jednostavne stvari se mogu objasniti čak i tvrdoglavoj osobi, ali što ako govorimo o arhitektonskim temama u projektu ili osobnom mišljenju? Zaboravite na ovo smeće – budite fleksibilni. Jako poštujem ljude koji mogu priznati da su u krivu, pred svima. Upravo će vam ta kvaliteta biti od koristi kao mlađem specijalistu - teško je suočiti se s otvorenom osobom, pogotovo kad prizna da uči i da ima pravo na pogreške. Nemoj kasniti Nije važno je li probni rok ili samo petak, u kojem svi postižu gol i dolaze do 11. Još je jedna stvar važna: točnost je značajka profesionalca koji si iz vedra neba zarađuje dodatne bodove. A dodatni bodovi za osobu bez iskustva neće škoditi, zar ne? Pokušajte ne kasniti i pošteno napustite posao nakon 8 sati rada. Nemojte zloupotrijebiti procjene Nažalost, ovo je vrlo česta slika u koju sam se jednom uvalio u prošlosti. Programer si je odredio 8-16 sati da izvrši zadatak i neočekivano ga je završio za 3-4 sata. Ostatak sati provodi za svoje osobno vrijeme u vidu stolnog tenisa, kao što je to bio slučaj sa mnom, ili gledanja youtube-a i druge zabave. S pravne točke gledišta, čini se da su se složili, ali s ljudske točke gledišta, uskraćujete sebi vrlo važne stvari: 1. Stojite na mjestu, dok dodatno vrijeme ispunjavate nepotrebnim stvarima; 2. Ne razvijate se jer ne obavještavate menadžment o svom brzom napretku, nitko ne zna da izvršavate zadatke brže od očekivanog; 3. Počinjete stalno precjenjivati ​​prosječno vrijeme za vrijednosti, to je samo put u nigdje. Odvojite vrijeme za učenje Šansa za zaostajanje za motorom je nerealno velika, stoga imajte na umu da se tehnologija i nove verzije razvijaju vrlo brzo. Pretplatite se na Java evanđeliste naših dana, čitajte Java sažetke i općenito se zainteresirajte, naučite nove stvari. To će vam pomoći da zadržite svoj brend i razvijete se. Pomozi drugima Nemojte se bojati pomoći drugima, čak i ako su zeleni poput vas. Prvo, uvelike ćete ojačati svoje znanje, a drugo, dobit ćete poštovanje u očima drugih, a oni će vam u isto vrijeme pomoći. U takvom okruženju rađaju se najbolji timovi, ali i vrlo brz tehnički i osobni rast. Bavite se sportom. Imati hobi Ne ozbiljno. Ljudi koji se bave sportom ne samo da izgledaju i osjećaju se bolje, nego im je i funkcija mozga na vrhu! Tome pridonose skolioza, donji dio leđa, prekomjerna tjelesna težina, razni problemi s unutarnjim organima - 24-satna druženja za računalom, čak i izvan posla. Ako se ne možete baviti sportom (u što sumnjam), upotrijebite male životne trikove: s vremena na vrijeme radite stojeći, napustite dvije stanice ranije i pješice na posao. I da, hodajte više. Također postoji rizik od izgaranja ako vam programiranje oduzima mnogo više vremena od 40 sati tjedno. Osobni hobiji će doći u pomoć - na primjer, fotografija, glazba itd. Odvojite redovito vrijeme za duhovnost. Ravnoteža u vašem osobnom životu Kada djevojka/žena kaže: “laptop ili ja”, morate ozbiljno razmisliti o tome koje mjesto zauzima programiranje u vašem životu. S druge strane, kada započinjete svoj put u IT-u, morate svojoj srodnoj duši jasno objasniti da sada morate puno učiti kako biste postigli više. Nadam se da razumiju. Pa, trudite se balansirati i pravilno rasporediti svoje vrijeme. prekoračiti Budite proaktivni, ako smatrate, na primjer, da možete podijeliti znanje ili imati zanimljive teme, zašto ne organizirate male tečajeve unutar tvrtke za druge? Nemojte se bojati doprinijeti velikim projektima otvorenog koda ako znate kako pomoći. Ako želite napisati igru, društveni projekt ili neku drugu ideju - učinite to, učinite to, učinite to! Nemojte stajati mirno, uvijek tražite načine na koje se možete razvijati. Budite konkurentni Pratite nove trendove, budite u toku s trendovima koji se događaju u Java zajednici. Primjerice, neće biti suvišno ako povremeno, s vremena na vrijeme, pratite Java slobodna radna mjesta u DOU-u, ali ne da biste se maknuli s posla, već kako biste znali koje tehnologije ostaju relevantne, a koje polako nestaju s tržišta . Također pokušajte pohađati tečajeve na Courseri, Udacityju itd., istražite nove horizonte. Pa čak i engleski: pokušajte gledati svoje omiljene filmove / TV emisije u originalu s titlovima kako biste poboljšali svoje konverzacijske vještine, preuzmite nekoliko zanimljivih aplikacija za učenje jezika (na primjer, LinguaLeo) i, na kraju, idite na tečajeve .

    Zaključak

    Pa, moj mali DOU projekt se bliži kraju. Dragi prijatelji, od srca vam želim da se zaposlite i nadam se da će vam sve što sam opisao u ovih 7 članaka biti vrijedan vodič, čak i za one koji već rade kao Java developer. Budući juniori, sjetite se da ništa nije nemoguće, a ako se jako trudite, sigurno ćete uspjeti. Želim da konačno odlučite je li ovo vaše ili ne, izradite detaljan plan treninga i slijedite ga hladnokrvno. Nemojte se uzrujati ako zauzvrat dobijete šutnju - sve je to privremeno, glavna stvar je vjerovati i ni u kojem slučaju ne zalutati, već učiti, proučavati i ponovno proučavati. Želio bih izraziti duboku zahvalnost DOU timu što je uredio veliku količinu materijala i što mi je dao udarno vrijeme ponedjeljkom. DOU je cool zajednica koja je prestala biti samo stranica za ukrajinske IT ljude. Htio bih se zahvaliti i svim komentatorima koji su čitali moje članke dijagonalno i izvlačili fraze iz konteksta. Članci bez vas ne bi izgledali tako zanimljivi :) Neka Sila bude s vama!

    Za one koji prvi put čuju riječ Java Core, ovo su temeljni temelji jezika. S tim znanjem već možete sigurno ići na pripravnički staž. Ova pitanja će vam pomoći da osvježite svoje znanje prije intervjua ili naučite nešto novo za sebe. Za praktične vještine, učite dalje.

      Kako stvoriti nepromjenjivi objekt u Javi? Navedite sve prednosti

      Nepromjenjiva klasa je klasa čije se stanje ne može promijeniti nakon što je stvorena. Ovdje su stanje objekta u biti vrijednosti pohranjene u instanci klase, bilo da su primitivni tipovi ili referentni tipovi.

      Da bi klasa bila nepromjenjiva, moraju biti ispunjeni sljedeći uvjeti:

      1. Nemojte davati postavke ili metode koje modificiraju polja ili objekte koji se odnose na polja. Seteri podrazumijevaju promjenu stanja objekta, što ovdje želimo izbjeći.
      2. Neka sva polja budu konačna i privatna. Polja koja su označena kao privatna neće biti dostupna izvan razreda, a njihovo konačno označavanje osigurava da ih nećete promijeniti čak ni slučajno.
      3. Ne dopustite podklasama da nadjačaju metode. Najlakši način da to učinite je da klasu proglasite konačnom. Finalizirane klase u Javi ne mogu se nadjačati.
      4. Uvijek zapamtite da vaše varijabilne instance mogu biti promjenjive ili nepromjenjive. Definirajte ih i vratite nove objekte s kopiranim sadržajem za sve promjenjive objekte (referentne vrste). Nepromjenjive varijable (primitivni tipovi) mogu se sigurno vratiti bez dodatnog napora.

      Također, morate imati na umu naknadne prednosti nepromjenjivih klasa. Možda će vam trebati za intervju. Nepromjenjive klase:

      • jednostavan za dizajn, testiranje i korištenje
      • automatski su sigurni niti i nemaju problema sa sinkronizacijom
      • ne zahtijevaju konstruktor kopiranja
      • omogućuju vam da "lijeno inicijalizirate" hashcode i predmemoriju povratne vrijednosti
      • ne zahtijevaju sigurnu kopiju kada se koriste kao polje
      • napraviti dobre tipke mape i elemente Set (ovi objekti ne bi trebali mijenjati stanje kada su u kolekciji)
      • neka njihova klasa bude trajna stvaranjem jednom i ne treba je ponovno provjeravati
      • uvijek imaju "atomičnost neuspjeha", izraz koji je skovao Joshua Bloch: ako nepromjenjivi objekt izbaci iznimku, nikada neće ostati u neželjenom ili nedefiniranom stanju.

      Pogledajte primjer napisan u ovom postu.

      Java specifikacija navodi da se sve u Javi prenosi po vrijednosti. U Javi ne postoji takva stvar kao što je "pass by reference". Ovi uvjeti su povezani s pozivanjem metoda i prosljeđivanjem varijabli kao parametara metode. Pa, primitivni tipovi se uvijek prosljeđuju po vrijednosti bez ikakve zabune. No, koncept treba shvatiti u kontekstu parametra metode složenih tipova.


      U gornjem primjeru, bitovi adrese prve instance kopiraju se u drugu referentnu varijablu, uzrokujući da obje reference upućuju na istu memorijsku lokaciju gdje je objekt pohranjen. Zapamtite da dodjeljivanjem null drugoj referenci, nećete dodijeliti null prvoj referenci. Ali promjena stanja objekta s jednom referenciranom varijablom odrazit će se i na drugu referencu.

      Koja je korist od finally bloka? Jamči li ovaj blok izvršenje svog koda? Kada se finally blok ne poziva?

      Blok finally se uvijek poziva ako postoji blok try. To osigurava da se finally blok poziva čak i ako se dogodi neočekivana iznimka. Ali konačno je korisniji od pukog rukovanja iznimkama - ovaj blok vam omogućuje čišćenje koda koji je slučajno zaobišao povratak, nastavak ili prekid. Postavljanje koda za čišćenje u blok finally uvijek je dobra praksa, čak i kada se ne očekuju iznimke.

      Ako se virtualni stroj zatvori dok se izvršava blok try ili catch, tada se finally blok neće izvršiti. Slično, ako je nit prekinuta ili ubijena tijekom izvođenja bloka try or catch, finally blok neće biti izvršen iako je aplikacija još uvijek pokrenuta.

      Zašto postoje dvije klase Date, jedna u paketu java.util, a druga u java.sql?

      java.util.Date predstavlja datum i vrijeme, dok java.sql.Date predstavlja samo datum. Dopuna java.sql.Date je klasa java.sql.Time, koja predstavlja samo vrijeme.

      Klasa java.sql.Date je potklasa (proširenje) klase java.util.Date. Dakle, što se promijenilo u java.sql.Date:

      • toString() proizvodi drugačiji prikaz niza: gggg-mm-dd
      • statička metoda valueOf(String) stvara datum iz niza s gornjim prikazom
      • isključeni getteri i setteri satima, minutama i sekundama

      Klasa java.sql.Date se koristi u JDBC-u i dizajnirana je tako da nema vremensku komponentu, tj. sati, minute, sekunde i milisekundi moraju biti nula...ali to klasa ne zahtijeva.

      Objasniti sučelja markera.

      Uzorak sučelja markera je obrazac dizajna računalnih znanosti koji koriste programski jezici koji pružiti informacije o objektima u vrijeme izvođenja. Ovaj pruža način povezivanja metapodataka klase gdje jezik nema eksplicitnu podršku za takve metapodatke. Java za to koristi sučelja bez navođenja metoda.

      Dobar primjer korištenja sučelja markera u Javi je Serializable sučelje. Klasa implementira ovo sučelje kako bi naznačila da se njegovi neprolazni podaci mogu zapisati u tok bajtova ili datotečni sustav.

      Glavni problem Sučelje markera je da sučelje definira konvenciju za klase koje ga implementiraju, a tu konvenciju nasljeđuju sve podklase. To znači da ne možete "derealizirati" token. U gornjem primjeru, ako stvorite podklasu koju ne želite serijalizirati (možda zato što je u prolaznom stanju), morate pribjeći eksplicitnom izbacivanju NotSerializableException .

      Zašto je main() metoda deklarirana kao javna statička void?

      Zašto javno? Glavna metoda ima modifikator javnog pristupa, tako da joj se može pristupiti svugdje i bilo kojem objektu koji želi koristiti ovu metodu za pokretanje aplikacije. Ovdje ne kažem da JDK/JRE imaju sličan razlog, jer java.exe ili javaw.exe (za Windows) koriste poziv Java Native Interface (JNI) za pokretanje metode, tako da je mogu pozvati svejedno bez obzira na modifikator pristupa .

      Zašto statična? Pretpostavimo da naša glavna metoda nije statična. Sada, da biste pozvali bilo koju metodu, potrebna vam je instanca klase. Pravo? Java vam omogućuje da imate preopterećene konstruktore, to svi znamo. Onda koji bi trebao biti korišten i odakle će doći parametri za preopterećeni konstruktor?

      Zašto poništiti? Nema koristi za povratnu vrijednost u virtualnom stroju koji zapravo poziva ovu metodu. Jedina stvar koju aplikacija želi reći procesu poziva je normalan ili nenormalan prekid. To je već moguće pomoću System.exit(int) . Vrijednost različita od nule podrazumijeva nenormalan prekid, inače je sve u redu.

      Koja je razlika između stvaranja niza kao new() i doslovnog (koristeći dvostruke navodnike)?

      Kada kreiramo niz pomoću new() , on se kreira u hrpi i također dodaje u skup nizova, dok se niz kreiran s literalom stvara samo u skupu nizova.

      Morate znati više o konceptu skupa nizova da biste odgovorili na ovo ili slična pitanja. Moj savjet je da dobro naučite String klasu i string pool.

      Kako radi metoda substring() klase String?

      Kao i drugi programski jezici, nizovi su u Javi nizovi znakova. Ova klasa je više kao uslužna klasa za rad s ovim nizom. Slijed znakova osigurava sljedeća varijabla:

      /** Vrijednost se koristi za pohranu znakova. */ /** Vrijednost se koristi za pohranjivanje znakova */ privatna konačna vrijednost char; Sljedeće varijable koriste se za pristup ovom nizu u različitim scenarijima /** Pomak je prvi indeks pohrane koji se koristi. */ /** Pomak je prvi indeks pohrane koji se koristi. */ privatni konačni int offset; /** Broj je broj znakova u nizu. */ /** Broj je broj znakova u nizu. */ privatni konačni broj int;

      Svaki put kada kreiramo podniz iz postojeće instance niza, metoda substring() samo postavlja varijable pomaka i brojanja na nove vrijednosti. Interni niz znakova nije promijenjen. Ovo je mogući izvor curenja memorije ako se metoda substring() nepažljivo koristi:

      Izvorna vrijednost vrijednosti se ne mijenja. Dakle, ako stvorite niz od 10000 znakova i stvorite 100 podnizova sa 5-10 znakova svaki, svih 101 objekata će sadržavati isti niz znakova od 10000 znakova. Ovo je bez sumnje gubitak sjećanja.

      To se može izbjeći promjenom koda na sljedeći način:

      zamijeni original.substring(beginIndex) s novim String(original.substring(beginIndex)) , gdje je original izvorni niz.

      Objasnite kako HashMap funkcionira. Kako se rješava problem duplikata?

      Većina vas će se sigurno složiti da je HashMap trenutno najomiljenija tema intervjua. Ako me netko pita da vam kažem “Kako radi HashMap?”, jednostavno ću odgovoriti: “Po principu hashiranja”. Koliko god jednostavno.

      Dakle, raspršivanje je u biti način dodjeljivanja jedinstvenog koda bilo kojoj varijabli/objektu nakon primjene bilo koje formule/algoritma na njegova svojstva.

      Definicija karte je: "Objekt koji povezuje ključeve s vrijednostima." Vrlo jednostavno, zar ne? Dakle, HashMap sadrži vlastitu unutarnju klasu Entry, koja izgleda ovako:

      statička klasa Entry implementira Map . Ulazak( konačni ključ K; vrijednost V; sljedeći unos; završni int hash; …//Više koda ide ovdje )

      Kada netko pokuša staviti par ključ/vrijednost u HashMap, događa se sljedeće:

      • Prije svega, ključni se objekt provjerava u odnosu na null. Ako je ključ null, vrijednost je pohranjena u tablici položaja. Budući da je hashcode za null uvijek 0.
      • Zatim, sljedeći korak je izračunavanje hash vrijednosti pozivanjem metode hashCode() za ključnu varijablu. Ovaj hash se koristi za izračunavanje indeksa u nizu za držanje objekta Entry. Programeri JDK-a bili su svjesni da metoda hashCode() može biti loše napisana i može vratiti vrlo veliku ili vrlo malu vrijednost. Kako bi riješili ovaj problem, uveli su još jednu metodu hash() i proslijedili hashcode objekta ovoj metodi kako bi tu vrijednost prebacili u raspon veličine indeksa polja.
      • Metoda indexFor(hash, table.length) sada se poziva za izračunavanje točne pozicije za pohranjivanje objekta Entry.
      • Sada glavni dio. Kao što znamo da dva različita objekta mogu imati istu vrijednost hashcodea, kako dva različita objekta mogu biti pohranjena na istom mjestu u arhivi [koja se zove kanta za smeće]?

      Odgovor je LinkedList. Ako se sjećate, klasa Entry ima svojstvo "next". Ovo svojstvo uvijek ukazuje na sljedeći objekt u lancu. Ovo ponašanje je vrlo slično LinkedList-u.

      Dakle, u slučaju podudaranja hashcodea, Entry objekti se pohranjuju u obliku LinkedList. Kada se unos treba postaviti na određeni indeks, provjerava li HashMap postoji li drugi unos na tom mjestu? Ako tamo nema zapisa, naš će objekt biti spremljen na ovom mjestu.

      Ako već postoji drugi objekt u našem indeksu, provjerava se njegovo sljedeće polje. Ako je null, naš objekt postaje sljedeći čvor na LinkedList-u. Ako next nije null , ovaj postupak se ponavlja dok se ne pronađe null next polje.

      Što se događa ako dodamo drugu vrijednost ključa jednaku onoj koju smo dodali ranije? Logično je da treba zamijeniti staru vrijednost. Kako se to događa? Nakon što je odredio indeks položaja za objekt Entry, iteracijom preko LinkedList-a koji se nalazi na našem indeksu, HashMap poziva metodu equals() za vrijednost ključa za svaki objekt Entry. Svi ovi objekti Entry u LinkedList imaju istu vrijednost hashcodea, ali metoda equals() će testirati pravu jednakost. Ako je ključ. jednako(k) će pravi, tada će se oba tretirati kao isti objekt. To će uzrokovati zamjenu samo objekta vrijednosti unutar objekta Entry.

      Tako HashMap osigurava jedinstvenost ključeva.

      Razlike između sučelja i apstraktnih klasa?

      Ovo je vrlo često pitanje ako intervjuirate za programera mlađe razine. Najznačajnije razlike navedene su u nastavku:

      • U Java sučeljima varijable su a priori konačne. Apstraktne klase mogu sadržavati nekonačne varijable.
      • Sučelje u Javi definitivno ne može imati implementaciju. Apstraktna klasa može imati instance metoda koje implementiraju osnovno ponašanje.
      • Članovi sučelja moraju biti javni. Apstraktna klasa može imati modifikatore pristupa bilo koje vrste.
      • Sučelje mora biti implementirano s ključnom riječi implements. Apstraktna klasa mora biti proširena ključnom riječi proteže.
      • U Javi, klasa može implementirati mnoga sučelja, ali može naslijediti samo jednu apstraktnu klasu.
      • Sučelje je potpuno apstraktno i ne može se instancirati. Apstraktna klasa također ne može imati instance klase, ali se može pozvati ako postoji metoda main().
      • Apstraktna klasa je nešto brža od sučelja jer sučelje očekuje traženje prije pozivanja bilo koje nadjačane metode u Javi. U većini slučajeva, ovo je mala razlika, ali ako pišete vremenski kritičnu aplikaciju, morate uzeti u obzir i ovu činjenicu.
    1. Kada nadjačavate metode hashCode() i equals()?

      Metode hashCode() i equals() definirane su u klasi Object, koja je roditeljska klasa svih Java objekata. Iz tog razloga, svi Java objekti nasljeđuju osnovnu implementaciju ovih metoda.

      Metoda hashCode() koristi se za dobivanje jedinstvene cjelobrojne vrijednosti za dati objekt. Ova vrijednost se koristi za određivanje lokacije košarice kada se objekt treba pohraniti u strukturu podataka poput HashTable. Prema zadanim postavkama, metoda hashCode() vraća cjelobrojni prikaz memorijske adrese na kojoj je objekt pohranjen.

      Metoda equals(), kao što ime sugerira, koristi se za jednostavnu ekvivalentnost objekata. Osnovna implementacija metode je provjera referenci dvaju objekata da se vidi jesu li ekvivalentne.

      Imajte na umu da je obično potrebno nadjačati metodu hashCode() kad god se metoda equals() nadjača. Ovo je neophodno kako bi se podržala opća konvencija metode hashCode, koja kaže da jednaki objekti moraju imati jednake hash kodove.

      Metoda equals() mora odrediti jednakost odnosa (mora biti rekurzivna, simetrična i tranzitivna). Osim toga, mora biti postojan (ako se objekt nije promijenio, metoda mora vratiti istu vrijednost). Također, o.equals(null) bi se uvijek trebao vratiti lažno.

      hashCode() također mora biti stabilan (ako se objekt nije promijenio pod uvjetima metode equals(), mora nastaviti vraćati istu vrijednost.

      Odnos između dvije metode je: uvijek ako je a.equals(b) , tada a.hashCode() mora biti isti kao b.hashCode() .

    Sretno sa studiranjem!! Autor članka Lokesh Gupta Orginalni članak Linkovi na ostale dijelove: