Biografije Karakteristike Analiza

Java junior kako ide intervju. Intervjui za programere srednje Java

Brzo ću vam reći o sebi. Imam 25 godina, rođen sam na Krimu, Feodosija. Studirao je u gradskoj tehničkoj školi, zatim ušao u Harkov, diplomirao i vratio se kući 2014. 2014. godine upisao sam dopisne studije na master studijama (sve specijalnosti su nekako bile vezane za programiranje), a 2015. godine sam otišao u vojsku na ugovor po ugovoru na period od 3 godine. Nakon dvije godine služenja vojnog roka, shvatio sam da moram nešto promijeniti u svom životu... A onda sam u decembru 2017. naišao na JavaRush i počeo uporno da učim Javu. Leti pohađam kurseve Topjave kod Grigorija, počinjem da pohađam svaki njegov čas, a do sredine septembra trebalo je da se završi tromesečni kurs. Generalno, početkom septembra sa suprugom se selim u Moskvu da tražim posao Java programera i do danas sam obavio oko 10 intervjua. Pisaću vam ono što mi stalno postavljaju i pitanja kojima sam bombardovan.

    Šta je JDK, JRE, JVM i kompajler. Ovo se mora imati. Ako vam se na razgovoru postavi ovo pitanje, a ne odgovorite na njega, najvjerovatnije više ništa neće pitati. Kratak video sa youtube

    Objektno orijentirano programiranje (OOP). Ovdje je glavna stvar da vam kažem šta je polimorfizam. Možda će od vas zatražiti da prevedete ovu riječ, a onda morate u skladu s tim reći njenu definiciju. Sve možete ispričati svojim riječima. Zatim navedite svoje primjere.

    Višestruko nasljeđivanje u Javi. Java ne dozvoljava višestruko nasljeđivanje klasa, ali dozvoljava višestruko nasljeđivanje interfejsa. O nasljeđivanju

    Metode klase Object(preporučljivo je pogledati svaku metodu direktno u samom kodu i obratiti pažnju na Equals i hashCode). Nazvao sam to ovako: getClass, finallize (čitaj o tome, nikad ne znaš koliko će ljudi postaviti pitanje, ali zapamti: po mom mišljenju, OVO JE ŠTAK), čekaj (dovoljno je znati da postoje 3 preopterećene metode ) notify, notifyAll, equals i hashcode (obavezno!! !znajte 4 pravila jednakih i budite sigurni da znate zakon između jednakih i hashCode).

    JVM iznutra. Stack i Heap memorija.

    Šta je nova ključna riječ i kako funkcionira. Nisam našao materijal, ali su me pitali za njega, odnosno kada pišemo npr

    A a = novi A()
    šta se dešava prije jednakih i poslije jednakih?

    Work Garbage Collection- nisu baš često pitali, ali kada su pitali počeli su da kopaju, koliko ja znam ovu temu. Odličan članak o

    Redoslijed inicijalizacije polja klase roditelj i dijete

    kolekcije: Morao sam objasniti apsolutno cijelu hijerarhiju i rad svake zbirke.

    Pitanje je koja je razlika između Liste i Seta. Najvažnije je reći šta je interfejs liste. Ako odgovorite da je Set skup jedinstvenih objekata, to neće biti dovoljno.

    HashMap, HashSet - početna veličina; kapacitet, loadfactor, null dozvoljeno ili ne? Kako se izračunava ćelija za objekat kada se radi sa Hash kolekcijom? Razlika između HashMap-a i TreeMap-a (nije dovoljno reći da je TreeMap sortirana kolekcija, prema crveno-crnom algoritmu stabla). Znati algoritme za umetanje, brisanje i pretraživanje za svaku kolekciju. Red, Deque, Stack - rijetko su mi postavljana pitanja o njima. Morate znati gdje je sučelje i gdje su klase u kolekcijama.

    Imajte na umu da zbirke imaju Iterable roditelja

    Java 8. Apsolutno prema do maksimuma morate istisnuti sve što znate o objavljenim "inovacijama". prije 4 godine: ovdje je izvor Novo u Javi 8

    Pitali su me o potrošačima, funkciji itd., zatim su me pitali za funkcionalna sučelja, zatim su me pitali kako da kreiram vlastitu anotaciju, što znači, na primjer, @SomeAnnotation (name = .... count =.... ), naime, što je ime, broj i kako funkcioniraju prilikom kreiranja vaše napomene.

    Generici. Sve o genericima. Pitaju svuda.

    Threads. Thread, Runnable, u čemu je razlika, kako pokrenuti nit. Sve je u sinhronizaciji. Muteksi, monitori, klasa zaključavanja. Zastoj kada se dogodi, navedite te primjere.

    Hijerarhija provjerenih/nepotvrđenih izuzetaka, napišite vlastitu klasu izuzetaka.

    Final, finallize(opet), nepromjenjiv, konačno. Kada finally blok ne uspije.

    Kako onemogućiti nasljeđivanje klasa(privatni konstruktori, završni razred...).

    IO/NIO niti.

    Uzorci. Naučite najmanje 5 osnovnih (mvc, factory, decorator, singleton, observer).

    Opruga ioc, di, ioc - kontejner. Evo linka do nekog praktičnog uvida koji mi je puno pomogao... PROLJEĆE . Ovdje sam prošao kroz proljeće do poglavlja 16, ispisujući cijeli kod ručno. Savjetujem i vama da učinite isto.

  • Šta je OOP?
  • Šta je objekat?
  • Koji su osnovni principi OOP-a?
  • Šta je nasljeđe?
  • Šta je polimorfizam? Koje manifestacije polimorfizma u Javi znate?
  • Šta je inkapsulacija?
  • Šta je apstrakcija?
  • Koje su prednosti objektno orijentisanih programskih jezika?
  • Kako korištenje objektno orijentiranog pristupa poboljšava razvoj softvera?
  • Postoji izraz “je” i “ima”. Šta oni znače u smislu OOP principa? Koja je razlika između sastava i agregacije?
  • Šta mislite pod polimorfizmom, inkapsulacijom i dinamičkim vezivanjem?

  • Koja je razlika između JRE, JVM i JDK?
  • Opišite modifikatore pristupa u Javi.
  • Šta je pristup na nivou paketa.
  • Po čemu se apstraktna klasa razlikuje od interfejsa? U kojim slučajevima biste koristili apstraktnu klasu, a u kojim biste koristili interfejs?
  • Može li objekt pristupiti varijabli privatne klase? Ako da, kako onda?
  • Zašto postoje statički blokovi u Javi?
  • Da li je moguće preopteretiti statičku metodu?
  • Recite nam nešto o internim časovima. 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.
  • Šta je naredba "assert" koja se koristi u Javi?
  • Zašto neki interfejsi uopšte ne definišu metode?
  • Koja je glavna razlika između String, StringBuffer, StringBuilder?
  • Objasnite Java I/O tokove.
  • Šta 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 nešto o tipovima. Šta je tip degradacije i unapređenja? Kada dobijete ClassCastException?
  • Šta je statička klasa, koje su karakteristike njene upotrebe?
  • Kako pristupiti polju vanjske klase iz ugniježđene klase.
  • Koje vrste ugniježđenih klasa postoje? Za šta se koriste?
  • Da li je moguće promijeniti prilikom nadjačavanja metode:
  • Modifikator pristupa
  • Vrsta povratka
  • Vrsta ili količina argumenta
  • Ime argumenta
  • Da li da promenim redosled, količinu ili da u potpunosti uklonim sekciju bacanja?
  • Šta je autoboks?
  • Šta su generici?
  • 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 da nadjačate equals(), koji uslovi moraju biti zadovoljeni za nadjačani metod?
  • Kakav je odnos između hashCode i jednakih?
  • Kako su metode hashCode i equals implementirane u klasi Object?
  • Šta se dešava ako nadjačate jednake bez nadjačavanja hashCode-a? Koji problemi mogu nastati?
  • Postoje li neke preporuke o tome koja polja treba koristiti prilikom izračunavanja 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?
  • Šta je podrazumevani konstruktor?
  • Opišite metodu Object.finalize().
  • Koja je razlika između finala, finally i finalize?
  • Opišite hijerarhiju izuzetaka.
  • Koje vrste izuzetaka u Javi znate, po čemu se razlikuju?
  • Šta je označeno, a što nepotvrđeno Izuzetak?
  • Kako kreirati svoj vlastiti neoznačeni izuzetak?
  • Šta su izuzeci Unchecke?
  • Šta je greška?
  • Opišite rad bloka try-catch-finally.
  • Da li je moguće koristiti try-finally blok (bez catch)?
  • Da li se blok finally uvijek izvršava?
  • Koje su karakteristike String klase? šta radi metoda intern()?
  • Da li je moguće naslijediti tip stringa, zašto?
  • Zašto je String popularan ključ u HashMapu u Javi?
  • Definirajte koncept konkatenacije nizova.
  • Kako preokrenuti niz?
  • Kako uporediti vrijednost dva niza?
  • Kako smanjiti razmake na početku i na kraju reda?
  • Definirajte koncept "string pool".
  • Da li je moguće sinhronizirati pristup redovima?
  • Kako ispravno uporediti vrijednosti stringova dva različita objekta tipa String i StringBuffer?
  • Zašto je string nepromjenjiv i finaliziran u Javi?
  • Napišite metodu za uklanjanje datog znaka iz niza.
  • Šta je refleksija?
  • Šta se dešava sa sakupljačem smeća (GC) ako dođe do izuzetka tokom finalize() metode nekog objekta?
  • Šta je internacionalizacija, lokalizacija?
  • Šta su napomene u Javi?
  • Koje funkcije obavlja anotacija?
  • Koje ugrađene napomene u Javi znate?
  • Šta rade napomene @Retention, @Documented, @Target i @Inherited?
  • Šta rade napomene @Override, @Deprecated, @SafeVarargs i @SuppressWarnings?
  • Koji životni ciklus napomene se može specificirati pomoću @Retention?
  • Na koje elemente se može primijeniti napomena i kako to mogu naznačiti?
  • Kako kreirati vlastitu anotaciju?
  • Koje vrste atributa su dozvoljene u napomenama?
  • Šta je JMX?
  • Koje prednosti nudi JMX?
  • Šta još JMX može raditi osim daljinskog upravljanja?
  • Šta je MBean?
  • Koje vrste MBeans-a postoje?
  • Šta je MBean server?
  • Koji mehanizmi obezbeđuju sigurnost u Java tehnologiji?
  • Navedite nekoliko tipova provjera koje Java verifikator bajtkoda izvodi?
  • Šta znate o "menadžeru sigurnosti" u Javi?
  • Šta je JAAS?
  • Šta je refaktoring?

  • Šta je kolekcija?
  • Imenujte glavna sučelja kolekcija i njihove implementacije.
  • Po čemu se ArrayList razlikuje od LinkedList? U kojim slučajevima je bolje koristiti prvi, a u kojim drugi?
  • Po čemu se HashMap razlikuje od Hashtablea?
  • Koja je razlika između ArrayList i Vector?
  • Kako se porede elementi kolekcije?
  • Rasporedite sljedeća sučelja u hijerarhiju: Lista, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
  • Zašto mapa nije kolekcija dok su lista i skup kolekcije?
  • Definirajte pojam "iterator".
  • Šta znate o Iterable interfejsu?
  • Kako pretvoriti HashSet u ArrayList u jednom redu?
  • Kako pretvoriti ArrayList u HashSet u jednom redu?
  • Kako iterirati sve ključeve mape, s obzirom da mapa nije iterable?
  • Kako iterirati preko svih vrijednosti Mape s obzirom da Mapa nije Iterable?
  • Kako iterirati sve parove ključ/vrijednost u mapi s obzirom da mapa nije iterable?
  • Kako se SortedMap „sortira“, osim činjenice da toString() prikazuje sve po redu?
  • Kako kopirati elemente iz bilo koje kolekcije u niz jednim pozivom?
  • Implementirajte simetričnu razliku dvije kolekcije koristeći metode Collection (addAll(), removeAll(), retainAll()).
  • Uporedite Enumeration i Iterator.
  • Kako su Iterable i Iterator povezani?
  • Kako su Iterable, Iterator i "for-each" predstavljeni u Javi 5 međusobno povezani?
  • Uporedite Iterator i ListIterator.
  • Šta se dešava ako pozovem Iterator.next() bez "pitanja" Iterator.hasNext()?
  • Šta se dešava ako pozovem Iterator.next() pre nego što pozovem Iterator.hasNext() 10 puta? Da li mi nedostaje 9 elemenata?
  • Ako imam kolekciju i podređeni iterator, hoće li se kolekcija promijeniti ako pozovem iterator.remove()?
  • Ako imam kolekciju i podređeni iterator, da li će 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 čuvati veličinu odvojeno ako uvijek možete uzeti elementData.length?
  • Da li je LinkedList jednostruko povezana lista, dvostruko povezana lista ili lista sa četiri veze?
  • Koje je najgore vrijeme rada metode contain() za element koji se nalazi na LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N) )?
  • Koje je najgore vrijeme rada metode 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 rada za add() metodu na LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) ?
  • Koje je najgore vrijeme rada add() metode za ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) ?
  • Koliko elemenata je dodijeljeno u memoriji kada se poziva ArrayList.add()?
  • Koliko elemenata je dodijeljeno u memoriji kada se poziva LinkedList.add()?
  • Procijenite količinu memorije za pohranjivanje primitivnog bajta u LinkedList?
  • Procijenite količinu memorije za pohranjivanje primitivnog bajta u ArrayList?
  • Dodao sam element u sredinu liste: list.add(list.size()/2, newElem). Kome je ova operacija sporija - za ArrayList ili za LinkedList?
  • Kako iterirati kroz elemente LinkedList obrnutim redoslijedom bez korištenja sporog get(index)?
  • Kako dobiti Listu sa svim elementima osim prvog i zadnja 3 jednim pozivom iz Liste?
  • 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 31 * x + y poželjniji od x + y?
  • Ako klasa Point(int x, y;) ima "ispravnu" implementaciju metode equals (return ref0.x == ref1.x && ref0.y == ref1.y), ali napravite hash kod u obliku int hashCode() ( return x;), da li će tada takve tačke biti ispravno postavljene i preuzete iz HashSeta?
  • equals() generiše relaciju ekvivalencije. Koja svojstva ima ova relacija: komutativnost, simetrija, refleksivnost, distributivnost, asocijativnost, tranzitivnost?
  • Da li je moguće implementirati equals(Object that) (vrati this.hashCode() == that.hashCode()) ovako?
  • equals zahtijeva provjeru da li je argument (equals(Object that)) istog tipa kao i sam objekt. Koja je razlika između this.getClass() == that.getClass() i te instance MyClass?
  • Da li je 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() (vraćanje 42;)?
  • Zašto su dodali HashMap ako je već postojala Hashtable?
  • Prema Knuth-u i Cormenu-u, postoje dvije glavne implementacije hash tablice: zasnovano na otvorenom adresiranju i bazirano na lančanju. Kako se implementira HashMap? Zašto su to uradili (po vašem mišljenju)? Koje su prednosti i nedostaci svakog pristupa?
  • Koliko klikova na link se dešava kada uradite HashMap.get(key) na ključu koji se nalazi u tabeli?
  • Koliko novih objekata se kreira kada dodate novi element u HashMap?
  • Kako HashMap funkcionira kada pokušate pohraniti dva elementa u njega pomoću ključeva s istim hashCode-om, ali za koji je jednako == false?
  • HashMap se može degenerisati u listu čak i za ključeve sa različitim hash kodovima. Kako je to moguće?
  • Koje je najgore vrijeme rada metode get(key) za ključ koji nije u tabeli (O(1), O(log(N)), O(N), O(N*log(N)) , O(N*N))?
  • Koje je najgore vrijeme rada metode get(key) za ključ koji se nalazi u tabeli (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Objasnite značenje parametara u HashMap(int initialCapacity, float loadFactor) konstruktoru.
  • Koja je razlika između HashMap-a i IdentityHashMap-a? Čemu služi IdentityHashMap? Kako može biti korisno za implementaciju serijalizacije ili kloniranja?
  • Koja je razlika između HashMap-a i WeakHashMap-a? Čemu služi WeakHashMap?
  • WeakHashMap koristi WeakReferences. Zašto ne kreirate SoftHashMap na SoftReferences?
  • WeakHashMap koristi WeakReferences. Zašto ne kreirate PhantomHashMap na PhantomReferences?
  • Napravite HashSet od HashMap-a (koristite samo skup ključeva, a ne skup vrijednosti).
  • Napravite HashMap od HashSeta (HashSet >).
  • Uporedite java.util.Queue i java.util.Deque sučelja.
  • Ko koga proširuje: Queue proširuje 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 sa više niti koji uzrokuje da kolekcija izbaci ConcurrentModificationException.
  • Šta je "fail-fast ponašanje"?
  • Postoji li posebna klasa java.util.EnumSet za skupove enuma? Za što? Zašto autori nisu bili zadovoljni HashSet-om ili TreeSet-om?
  • java.util.Stack - smatra se "zastarjelim". Čime se preporuča zamijeniti? Zašto?
  • Koja zbirka implementira FIFO servisnu disciplinu?
  • Koja zbirka implementira FILO servisnu disciplinu?
  • Navedite primjer kada bilo koja kolekcija izbaci UnsupportedOperationException.
  • Zašto ne mogu napisati "ArrayList" brojevi = nova lista polja ();" ali možete "List brojevi = nova lista polja ();"?
  • LinkedHashMap - kakva je ovo "zvijer"? Šta je LinkedList, a šta HashMap?
  • LinkedHashSet - kakva je ovo "zvijer"? Šta je LinkedList, a šta HashSet?
  • Kažu da je lako napraviti jednostavnu keš memoriju sa "politikom nevaženja" na LinkedHashMap-u, znate li kako?
  • Šta vam PriorityQueue dozvoljava?
  • Koje su razlike između java.util.Comparator i java.lang.Comparable?

  • Šta je simbolička veza?
  • Koja je razlika između I/O i NIO?
  • Koje karakteristike NIO-a znate?
  • Koje vrste I/O tokova postoje?
  • Imenujte glavne klase I/O tokova.
  • Koja je razlika i šta je zajedničko OutputStream, InputStream, Writer, Reader?
  • Koje podklase osnovne klase InputStream poznajete i čime se one bave?
  • Šta znate o RandomAccessFile-u?
  • Koje načine pristupa fajlovima ima RandomAccessFile?
  • Koje podklase osnovne klase OutputStream poznajete i čime se one bave?
  • Za šta se koristi PushbackInputStream?
  • Za šta se koristi SequenceInputStream?
  • Koje podklase osnovne klase Reader poznajete i čemu služe?
  • Koje podklase osnovne klase Writer poznajete i čime se one bave?
  • Šta je apsolutni i relativni put?
  • Koji paketi sadrže klase niti?
  • Šta znaš o superklasama?
  • Koja klasa dodataka vam omogućava čitanje podataka iz ulaznog toka bajtova u formatu primitivnih tipova podataka?
  • Koja klasa dodataka vam omogućava da ubrzate čitanje/pisanje korištenjem bafera?
  • Koje klase vam omogućavaju da konvertujete tokove bajtova u tokove znakova i obrnuto?
  • Koja je razlika između klase PrintWriter i PrintStream?
  • Koja je klasa dizajnirana za rad sa elementima sistema datoteka?
  • Koji je znak separator kada se specificira putanja u sistemu datoteka?
  • Koje metode klase File poznajete?
  • Šta znate o interfejsu FileFilter?
  • Koje klase vam omogućavaju da arhivirate objekte?

  • Na kom objektu dolazi do sinhronizacije kada se poziva statička sinhronizovana metoda?
  • Za šta se koristi ključna riječ volatile, synchronized, transient, native?
  • Šta znači prioritet niti?
  • Šta su demonske niti u Javi?
  • Šta znači uspavati tok?
  • U kojim stanjima može postojati nit u Javi? Kako protok zapravo funkcionira?
  • Koja je razlika između dva interfejsa za implementaciju Runnable i Callable zadataka?
  • Razlike između CyclicBarrier-a i CountDownLatch-a?
  • Šta je uslov trke?
  • Kako zaustaviti nit?
  • Šta se dešava kada nit izbaci izuzetak?
  • Šta je ThreadLocal varijabla?
  • Šta je FutureTask?
  • Razlika između interrupted i isInterrupted?
  • Zašto se metode čekanja i obavijesti pozivaju u sinhroniziranom bloku?
  • Šta je skup niti?
  • Razlike između livelock i mrtve tačke?
  • Kako provjeriti da li nit drži bravu?
  • Kako dobiti dump niti?
  • Koji JVM parametar se koristi za kontrolu veličine steka niti?
  • Razlike između sinkroniziranog i ReentrantLock-a?
  • Šta 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() na skupu niti?
  • Šta je metoda blokiranja?
  • Šta je ReadWriteLock?
  • Šta je Singletonovo dvostruko provjereno zaključavanje?
  • Šta je okvir Fork/Join?
    • Šta je OOP?
    • Šta je objekat?
    • Koji su osnovni principi OOP-a?
    • Šta je nasljeđe?
    • Šta je polimorfizam? Koje manifestacije polimorfizma u Javi znate?
    • Šta je inkapsulacija?
    • Šta je apstrakcija?
    • Koje su prednosti objektno orijentisanih programskih jezika?
    • Kako korištenje objektno orijentiranog pristupa poboljšava razvoj softvera?
    • Postoji izraz “je” i “ima”. Šta oni znače u smislu OOP principa? Koja je razlika između sastava i agregacije?
    • Šta mislite pod polimorfizmom, inkapsulacijom i dinamičkim vezivanjem?

    Java jezgro.

    • Koja je razlika između JRE, JVM i JDK?
    • Opišite modifikatore pristupa u Javi.
    • Šta je pristup na nivou paketa.
    • Po čemu se apstraktna klasa razlikuje od interfejsa? U kojim slučajevima biste koristili apstraktnu klasu, a u kojim biste koristili interfejs?
    • Može li objekt pristupiti varijabli privatne klase? Ako da, kako onda?
    • Zašto postoje statički blokovi u Javi?
    • Da li je moguće preopteretiti statičku metodu?
    • Recite nam nešto o internim časovima. 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.
    • Šta je naredba "assert" koja se koristi u Javi?
    • Zašto neki interfejsi uopšte ne definišu metode?
    • Koja je glavna razlika između String, StringBuffer, StringBuilder?
    • Objasnite Java I/O tokove.
    • Šta 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 nešto o tipovima. Šta je tip degradacije i unapređenja? Kada dobijete ClassCastException?
    • Šta je statička klasa, koje su karakteristike njene upotrebe?
    • Kako pristupiti polju vanjske klase iz ugniježđene klase.
    • Koje vrste ugniježđenih klasa postoje? Za šta se koriste?
    • Da li je moguće promijeniti prilikom nadjačavanja metode:
    • Modifikator pristupa
    • Vrsta povratka
    • Vrsta ili količina argumenta
    • Ime argumenta
    • Da li da promenim redosled, količinu ili da u potpunosti uklonim sekciju bacanja?
    • Šta je autoboks?
    • Šta su generici?
    • 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 da nadjačate equals(), koji uslovi moraju biti zadovoljeni za nadjačani metod?
    • Kakav je odnos između hashCode i jednakih?
    • Kako su metode hashCode i equals implementirane u klasi Object?
    • Šta se dešava ako nadjačate jednake bez nadjačavanja hashCode-a? Koji problemi mogu nastati?
    • Postoje li neke preporuke o tome koja polja treba koristiti prilikom izračunavanja 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?
    • Šta je podrazumevani konstruktor?
    • Opišite metodu Object.finalize().
    • Koja je razlika između finala, finally i finalize?
    • Opišite hijerarhiju izuzetaka.
    • Koje vrste izuzetaka u Javi znate, po čemu se razlikuju?
    • Šta je označeno, a što nepotvrđeno Izuzetak?
    • Kako kreirati svoj vlastiti neoznačeni izuzetak?
    • Šta su izuzeci Unchecke?
    • Šta je greška?
    • Opišite rad bloka try-catch-finally.
    • Da li je moguće koristiti try-finally blok (bez catch)?
    • Da li se blok finally uvijek izvršava?
    • Koje su karakteristike String klase? šta radi metoda intern()?
    • Da li je moguće naslijediti tip stringa, zašto?
    • Zašto je String popularan ključ u HashMapu u Javi?
    • Definirajte koncept konkatenacije nizova.
    • Kako preokrenuti niz?
    • Kako uporediti vrijednost dva niza?
    • Kako smanjiti razmake na početku i na kraju reda?
    • Definirajte koncept "string pool".
    • Da li je moguće sinhronizirati pristup redovima?
    • Kako ispravno uporediti vrijednosti stringova dva različita objekta tipa String i StringBuffer?
    • Zašto je string nepromjenjiv i finaliziran u Javi?
    • Napišite metodu za uklanjanje datog znaka iz niza.
    • Šta je refleksija?
    • Šta se dešava sa sakupljačem smeća (GC) ako dođe do izuzetka tokom finalize() metode nekog objekta?
    • Šta je internacionalizacija, lokalizacija?
    • Šta su napomene u Javi?
    • Koje funkcije obavlja anotacija?
    • Koje ugrađene napomene u Javi znate?
    • Šta rade napomene @Retention, @Documented, @Target i @Inherited?
    • Šta rade napomene @Override, @Deprecated, @SafeVarargs i @SuppressWarnings?
    • Koji životni ciklus napomene se može specificirati pomoću @Retention?
    • Na koje elemente se može primijeniti napomena i kako to mogu naznačiti?
    • Kako kreirati vlastitu anotaciju?
    • Koje vrste atributa su dozvoljene u napomenama?
    • Šta je JMX?
    • Koje prednosti nudi JMX?
    • Šta još JMX može raditi osim daljinskog upravljanja?
    • Šta je MBean?
    • Koje vrste MBeans-a postoje?
    • Šta je MBean server?
    • Koji mehanizmi obezbeđuju sigurnost u Java tehnologiji?
    • Navedite nekoliko tipova provjera koje Java verifikator bajtkoda izvodi?
    • Šta znate o "menadžeru sigurnosti" u Javi?
    • Šta je JAAS?
    • Šta je refaktoring?

    Java Collections Framework.

    • Šta je kolekcija?
    • Imenujte glavna sučelja kolekcija i njihove implementacije.
    • Po čemu se ArrayList razlikuje od LinkedList? U kojim slučajevima je bolje koristiti prvi, a u kojim drugi?
    • Po čemu se HashMap razlikuje od Hashtablea?
    • Koja je razlika između ArrayList i Vector?
    • Kako se porede elementi kolekcije?
    • Rasporedite sljedeća sučelja u hijerarhiju: Lista, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
    • Zašto mapa nije kolekcija dok su lista i skup kolekcije?
    • Definirajte pojam "iterator".
    • Šta znate o Iterable interfejsu?
    • Kako pretvoriti HashSet u ArrayList u jednom redu?
    • Kako pretvoriti ArrayList u HashSet u jednom redu?
    • Kako iterirati sve ključeve mape, s obzirom da mapa nije iterable?
    • Kako iterirati preko svih vrijednosti Mape s obzirom da Mapa nije Iterable?
    • Kako iterirati sve parove ključ/vrijednost u mapi s obzirom da mapa nije iterable?
    • Kako se SortedMap „sortira“, osim činjenice da toString() prikazuje sve po redu?
    • Kako kopirati elemente iz bilo koje kolekcije u niz jednim pozivom?
    • Implementirajte simetričnu razliku dvije kolekcije koristeći metode Collection (addAll(), removeAll(), retainAll()).
    • Uporedite Enumeration i Iterator.
    • Kako su Iterable i Iterator povezani?
    • Kako su Iterable, Iterator i "for-each" predstavljeni u Javi 5 međusobno povezani?
    • Uporedite Iterator i ListIterator.
    • Šta se dešava ako pozovem Iterator.next() bez "pitanja" Iterator.hasNext()?
    • Šta se dešava ako pozovem Iterator.next() pre nego što pozovem Iterator.hasNext() 10 puta? Da li mi nedostaje 9 elemenata?
    • Ako imam kolekciju i podređeni iterator, hoće li se kolekcija promijeniti ako pozovem iterator.remove()?
    • Ako imam kolekciju i podređeni iterator, da li će 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 čuvati veličinu odvojeno ako uvijek možete uzeti elementData.length?
    • Da li je LinkedList jednostruko povezana lista, dvostruko povezana lista ili lista sa četiri veze?
    • Koje je najgore vrijeme rada metode contain() za element koji se nalazi na LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N) )?
    • Koje je najgore vrijeme rada metode 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 rada za add() metodu na LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) ?
    • Koje je najgore vrijeme rada add() metode za ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) ?
    • Koliko elemenata je dodijeljeno u memoriji kada se poziva ArrayList.add()?
    • Koliko elemenata je dodijeljeno u memoriji kada se poziva LinkedList.add()?
    • Procijenite količinu memorije za pohranjivanje primitivnog bajta u LinkedList?
    • Procijenite količinu memorije za pohranjivanje primitivnog bajta u ArrayList?
    • Dodao sam element u sredinu liste: list.add(list.size()/2, newElem). Kome je ova operacija sporija - za ArrayList ili za LinkedList?
    • Kako iterirati kroz elemente LinkedList obrnutim redoslijedom bez korištenja sporog get(index)?
    • Kako dobiti Listu sa svim elementima osim prvog i zadnja 3 jednim pozivom iz Liste?
    • 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 31 * x + y poželjniji od x + y?
    • Ako klasa Point(int x, y;) ima "ispravnu" implementaciju metode equals (return ref0.x == ref1.x && ref0.y == ref1.y), ali napravite hash kod u obliku int hashCode() ( return x;), da li će tada takve tačke biti ispravno postavljene i preuzete iz HashSeta?
    • equals() generiše relaciju ekvivalencije. Koja svojstva ima ova relacija: komutativnost, simetrija, refleksivnost, distributivnost, asocijativnost, tranzitivnost?
    • Da li je moguće implementirati equals(Object that) (vrati this.hashCode() == that.hashCode()) ovako?
    • equals zahtijeva provjeru da li je argument (equals(Object that)) istog tipa kao i sam objekt. Koja je razlika između this.getClass() == that.getClass() i te instance MyClass?
    • Da li je 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() (vraćanje 42;)?
    • Zašto su dodali HashMap ako je već postojala Hashtable?
    • Prema Knuth-u i Cormenu-u, postoje dvije glavne implementacije hash tablice: zasnovano na otvorenom adresiranju i bazirano na lančanju. Kako se implementira HashMap? Zašto su to uradili (po vašem mišljenju)? Koje su prednosti i nedostaci svakog pristupa?
    • Koliko klikova na link se dešava kada uradite HashMap.get(key) na ključu koji se nalazi u tabeli?
    • Koliko novih objekata se kreira kada dodate novi element u HashMap?
    • Kako HashMap funkcionira kada pokušate pohraniti dva elementa u njega pomoću ključeva s istim hashCode-om, ali za koji je jednako == false?
    • HashMap se može degenerisati u listu čak i za ključeve sa različitim hash kodovima. Kako je to moguće?
    • Koje je najgore vrijeme rada metode get(key) za ključ koji nije u tabeli (O(1), O(log(N)), O(N), O(N*log(N)) , O(N*N))?
    • Koje je najgore vrijeme rada metode get(key) za ključ koji se nalazi u tabeli (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
    • Objasnite značenje parametara u HashMap(int initialCapacity, float loadFactor) konstruktoru.
    • Koja je razlika između HashMap-a i IdentityHashMap-a? Čemu služi IdentityHashMap? Kako može biti korisno za implementaciju serijalizacije ili kloniranja?
    • Koja je razlika između HashMap-a i WeakHashMap-a? Čemu služi WeakHashMap?
    • WeakHashMap koristi WeakReferences. Zašto ne kreirate SoftHashMap na SoftReferences?
    • WeakHashMap koristi WeakReferences. Zašto ne kreirate PhantomHashMap na PhantomReferences?
    • Napravite HashSet od HashMap-a (koristite samo skup ključeva, a ne skup vrijednosti).
    • Napravite HashMap od HashSeta (HashSet >).
    • Uporedite java.util.Queue i java.util.Deque sučelja.
    • Ko koga proširuje: Queue proširuje 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 sa više niti koji uzrokuje da kolekcija izbaci ConcurrentModificationException.
    • Šta je "fail-fast ponašanje"?
    • Postoji li posebna klasa java.util.EnumSet za skupove enuma? Za što? Zašto autori nisu bili zadovoljni HashSet-om ili TreeSet-om?
    • java.util.Stack - smatra se "zastarjelim". Čime se preporuča zamijeniti? Zašto?
    • Koja zbirka implementira FIFO servisnu disciplinu?
    • Koja zbirka implementira FILO servisnu disciplinu?
    • Navedite primjer kada bilo koja kolekcija izbaci UnsupportedOperationException.
    • Zašto ne mogu napisati "ArrayList" brojevi = nova lista polja ();" ali možete "List brojevi = nova lista polja ();"?
    • LinkedHashMap - kakva je ovo "zvijer"? Šta je LinkedList, a šta HashMap?
    • LinkedHashSet - kakva je ovo "zvijer"? Šta je LinkedList, a šta HashSet?
    • Kažu da je lako napraviti jednostavnu keš memoriju sa "politikom nevaženja" na LinkedHashMap-u, znate li kako?
    • Šta vam PriorityQueue dozvoljava?
    • Koje su razlike između java.util.Comparator i java.lang.Comparable?

    Java 8.

    • Šta je simbolička veza?
    • Koja je razlika između I/O i NIO?
    • Koje karakteristike NIO-a znate?
    • Koje vrste I/O tokova postoje?
    • Imenujte glavne klase I/O tokova.
    • Koja je razlika i šta je zajedničko OutputStream, InputStream, Writer, Reader?
    • Koje podklase osnovne klase InputStream poznajete i čime se one bave?
    • Šta znate o RandomAccessFile-u?
    • Koje načine pristupa fajlovima ima RandomAccessFile?
    • Koje podklase osnovne klase OutputStream poznajete i čime se one bave?
    • Za šta se koristi PushbackInputStream?
    • Za šta se koristi SequenceInputStream?
    • Koje podklase osnovne klase Reader poznajete i čemu služe?
    • Koje podklase osnovne klase Writer poznajete i čime se one bave?
    • Šta je apsolutni i relativni put?
    • Koji paketi sadrže klase niti?
    • Šta znaš o superklasama?
    • Koja klasa dodataka vam omogućava čitanje podataka iz ulaznog toka bajtova u formatu primitivnih tipova podataka?
    • Koja klasa dodataka vam omogućava da ubrzate čitanje/pisanje korištenjem bafera?
    • Koje klase vam omogućavaju da konvertujete tokove bajtova u tokove znakova i obrnuto?
    • Koja je razlika između klase PrintWriter i PrintStream?
    • Koja je klasa dizajnirana za rad sa elementima sistema datoteka?
    • Koji je znak separator kada se specificira putanja u sistemu datoteka?
    • Koje metode klase File poznajete?
    • Šta znate o interfejsu FileFilter?
    • Koje klase vam omogućavaju da arhivirate objekte?

  • Na kom objektu dolazi do sinhronizacije kada se poziva statička sinhronizovana metoda?
  • Za šta se koristi ključna riječ volatile, synchronized, transient, native?
  • Šta znači prioritet niti?
  • Šta su demonske niti u Javi?
  • Šta znači uspavati tok?
  • U kojim stanjima može postojati nit u Javi? Kako protok zapravo funkcionira?
  • Koja je razlika između dva interfejsa za implementaciju Runnable i Callable zadataka?
  • Razlike između CyclicBarrier-a i CountDownLatch-a?
  • Šta je uslov trke?
  • Kako zaustaviti nit?
  • Šta se dešava kada nit izbaci izuzetak?
  • Šta je ThreadLocal varijabla?
  • Šta je FutureTask?
  • Razlika između interrupted i isInterrupted?
  • Zašto se metode čekanja i obavijesti pozivaju u sinhroniziranom bloku?
  • Šta je skup niti?
  • Razlike između livelock i mrtve tačke?
  • Kako provjeriti da li nit drži bravu?
  • Kako dobiti dump niti?
  • Koji JVM parametar se koristi za kontrolu veličine steka niti?
  • Razlike između sinkroniziranog i ReentrantLock-a?
  • Šta 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() na skupu niti?
  • Šta je metoda blokiranja?
  • Šta je ReadWriteLock?
  • Šta je Singletonovo dvostruko provjereno zaključavanje?
  • Šta je okvir Fork/Join?
  • Preselio sam se u drugi grad, dobijam posao, idem na razgovore. Činilo mi se da pitanja koja se tamo postavljaju, iako poznata, ipak, zajedno, mogu pomoći da se pripremite i da se osjećate sigurnije.

    Pitanja koja će vam pomoći da shvatite principe izgradnje DBMS-a.
    1. Šta je prvi normalni oblik i proces normalizacije? Koji su normalni oblici?
    2. Šta je značenje DBMS indeksa, kako su strukturirani, kako se pohranjuju? Kako biste implementirali istu funkcionalnost? Posljednje pitanje se postavlja ako nema jasnog razumijevanja indeksa.
    3. Nacrtajte odnos Mnogi-prema-više. Na primjer: tabele Autori i Knjige. Jedan autor može imati više knjiga, a knjigu može napisati više autora. Napišite SQL upit za odabir knjiga određenog autora.

    Osnovna pitanja o Javi.
    4. Osnovna klasa u Javi, kao što znate, je Object. Koje metode možete navesti?
    5. Recite nam šta su jednaki i hashCode? Koja pravila i konvencije postoje za implementaciju ovih metoda? Kada se koriste?
    6. Objasnite metode čekanja, obavijesti, notifyAll. Kako se koriste, kada, zašto su potrebni? Šta je sinhronizovano?
    7. Šta je finalizirati? Zašto je to potrebno? Šta nam možete reći o sakupljaču smeća i njegovim algoritmima?
    8. Zašto je metoda kloniranja proglašena zaštićenom? Šta je potrebno za implementaciju kloniranja?
    9. Koji modifikatori postoje (pristup i drugi)? Šta su nestabilni i prolazni? Za šta se i u kojim slučajevima može koristiti default?

    Java Collection Framework
    10. Koji su interfejsi za prikupljanje u Javi? Objasnite po čemu se razlikuju.
    11. Koje implementacije ovih interfejsa poznajete?
    12. Kako se ArrayList i LinkedList razlikuju jedni od drugih? Kako su izgrađeni? U kojim slučajevima ih treba koristiti?
    13. Koja je razlika između HashMap-a i TreeMap-a? Kako su strukturirani i funkcionišu? Šta je sa vremenom pristupa objektima, koje su zavisnosti?
    14. Šta je Hashtable, kako se razlikuje od HashMap-a? Danas je zastario, kako još uvijek možete koristiti potrebnu funkcionalnost?

    Izuzeci
    15. Šta je izuzetak? Koje vrste izuzetaka poznajete i po čemu se razlikuju?
    16. Možda problem sa blokovima try-catch-finally i pitanjem šta će biti vraćeno ili koji izuzetak će na kraju biti propušten?

    Algoritmi
    17. Koje algoritme za sortiranje poznajete? Koje algoritme poznajete?
    Štaviše, ovdje su moguća razna dodatna pitanja o procjeni složenosti algoritama i njihovom međusobnom upoređivanju.

    Dizajnerski obrasci.
    18. Da li ste upoznati sa nekim dizajnerskim uzorcima?
    19. Napišite Singleton... I sa lijenim učitavanjem. Šta ako treba da bude siguran na niti? A u kojim slučajevima je lijeno učitavanje gore?
    20. Šta možete reći o MVC-u? Nacrtajte dijagram i objasnite kako MVC radi.

    Niz pitanja koja će vam pomoći da shvatite J2EE tehnološki stog.
    21. Šta je servlet, jsp, njihova razlika?
    22. Šta je Ajax? Kako ova tehnologija u osnovi funkcionira?
    23. Šta je ORM, kako ga prevesti i kako treba da radi?

    Jednostavni problemi za pisanje algoritama.
    24. Napišite funkciju za izračunavanje faktorijala.
    25. Data je funkcija za izračunavanje Fibonačijevih brojeva, poznato je da radi. Pronađite logičku zabludu. Procijenite složenost rezultirajućeg algoritma.
    26. Preokrenite liniju.
    27. Izračunajte prosjek niza.

    Korisno je zapamtiti da ako se ne osjećate baš samopouzdano, nema potrebe da izgovarate nepotrebne riječi. Kažete dodatnu riječ, a oni se drže za nju, odmotavajući lanac. Oni promovišu nešto u šta nisu baš sigurni. Ovu sposobnost ljudi - da prianjaju - morate iskoristiti, ali sa dobrom za sebe ;-)

    Znanje i razumevanje... stvari su sasvim drugačije, dakle
    - različite algoritme, na primjer sortiranje, vrijedi napisati sami, čak i iz udžbenika. Pogledajte koliko se razlikuju jedni od drugih, uporedite njihovu složenost.
    - korisno je pogledati različite uslužne programe i biblioteke, principe grupisanja klasa u pakete i stil pisanja koda i komentarisanja. Može biti od velike pomoći u razumijevanju modifikatora pristupa i organizacije projekta.
    - razumijevanjem nečeg konkretnog možete pomoći onima koji manje znaju. Idite na bilo koji forum i pokušajte odgovoriti na pitanja o temi koja vam je zanimljiva. Možete uzeti nešto za sebe iz diskusije. Možete napisati kratak članak. Naravno, morate dobro razumjeti temu.
    Svaki rad usmjeren na poboljšanje vlastitih kvalifikacija bit će vidljiv kompetentnom ispitivaču i neće proći nezapaženo. Jedina stvar je da o tome treba iskreno govoriti, ne treba potcjenjivati ​​svoje mogućnosti i sposobnosti.
    Da biste imali bilo kakve smjernice za pripremu ili razvoj sebe kao specijaliste, možete pogledati nešto slično ovome.

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

    Svako rješenje stvara nove probleme

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

      Kako kreirati nepromjenjivi objekt u Javi? Navedite sve prednosti

      Nepromjenjiva klasa je klasa čije se stanje ne može promijeniti nakon kreiranja. Ovdje se stanje objekta u suštini smatra vrijednostima pohranjenim u instanci klase, bilo da se radi o primitivnim tipovima ili referentnim tipovima.

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

      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 dozvolite podklasama da nadjačaju metode. Najlakši način da to učinite je da proglasite klasu konačnom. Finalizirane klase u Javi ne mogu se nadjačati.
      4. Uvijek zapamtite da vaše promjenljive instance mogu biti promjenjive ili nepromjenjive. Definirajte ih i vratite nove objekte s kopiranim sadržajem za sve promjenjive objekte (referentne tipove). Promjenjive varijable (primitivni tipovi) mogu se sigurno vratiti bez ikakvog dodatnog napora.

      Također, morate zapamtiti naknadne prednosti nepromjenjivih klasa. Možda će vam trebati na intervjuu. Nepromjenjive klase:

      • jednostavan za dizajn, testiranje i upotrebu
      • automatski siguran niti i nema problema sa sinhronizacijom
      • ne zahtijevaju konstruktor kopiranja
      • omogućavaju vam da lijeno inicijalizirate hashcode i keširate povratnu vrijednost
      • ne zahtijevaju sigurno kopiranje kada se koriste kao polje
      • napravite dobre ključeve mape i elemente Set (ovi objekti ne bi trebali mijenjati stanje kada su u kolekciji)
      • učinite svoju klasu trajnom tako što ćete je jednom kreirati i ne treba je ponovo provjeravati
      • uvijek imaju "atomičnost neuspjeha" (izraz koji je skovao Joshua Bloch): ako nepromjenjivi objekt izbaci izuzetak, nikada neće ostati u neželjenom ili nedefiniranom stanju.

      Pogledajte primjer napisan u ovom postu.

      Java specifikacija kaže da se sve u Javi prenosi po vrijednosti. U Javi ne postoji takva stvar kao što je "prolaz po referenci". Ovi uslovi su povezani sa pozivanjem metoda i prosleđivanjem varijabli kao parametara metode. U redu, primitivni tipovi se uvijek prosljeđuju po vrijednosti bez ikakve zabune. Ali, koncept bi trebao biti jasan u kontekstu parametra metode složenih tipova.


      U gornjem primjeru, bitovi adrese prve instance kopiraju se od strane druge referentne varijable, uzrokujući da obje reference upućuju na istu memorijsku lokaciju gdje je objekt pohranjen. Zapamtite da dodjeljivanjem null drugoj vezi, nećete dodijeliti null prvoj vezi. Ali promjena stanja objekta s jednom referentnom varijablom odrazit će se na drugu vezu.

      Koja je korist od finally bloka? Da li ovaj blok garantuje izvršenje svog koda? Kada se blok finally ne poziva?

      Blok finally se uvijek poziva ako postoji blok try. Ovo osigurava da se finally blok poziva čak i ako se dogodi neočekivani izuzetak. Ali konačno je korisniji od samo rukovanja izuzetkom - ovaj blok vam omogućava da očistite kod koji je slučajno zaobiđen kroz povratak, nastavak ili prekid. Postavljanje koda za čišćenje u blok finally je uvijek dobra praksa, čak i kada se ne očekuju izuzeci.

      Ako virtuelna mašina izađe dok se izvršava blok try ili catch, onda se finally blok neće izvršiti. Isto tako, ako nit izvršava blok try ili catch i bude prekinuta ili ubijena, finally blok neće biti izvršen, iako aplikacija nastavlja da radi.

      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. Komplementarna java.sql.Date je klasa java.sql.Time, koja predstavlja samo vrijeme.

      Klasa java.sql.Date je potklasa (ekstenzija) klase java.util.Date. Dakle, šta se promijenilo u java.sql.Date:

      • toString() proizvodi drugačiji prikaz stringa: gggg-mm-dd
      • statička metoda valueOf(String) kreira datum iz niza sa gornjim prikazom
      • getteri i setteri za sate, minute i sekunde su isključeni

      Klasa java.sql.Date se koristi u JDBC-u i dizajnirana je da nema vremensku komponentu, što znači da sati, minute, sekunde i milisekunde moraju biti nula... ali to nije potrebno za klasu.

      Objasnite interfejse markera.

      Obrazac tokena interfejsa je obrazac dizajna u računarskoj nauci koji koriste programski jezici koji pružaju informacije o objektima u vrijeme izvođenja. Ovo pruža način povezivanja metapodataka klase gdje jezik nema eksplicitnu podršku za takve metapodatke. U Javi se za to koriste interfejsi bez specificiranja metoda.

      Dobar primjer interfejsa tokena u Javi je interfejs koji se može serijalizirati. Klasa implementira ovaj interfejs kako bi naznačila da se njeni neprolazni podaci mogu upisati u tok bajtova ili u sistem datoteka.

      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ćete moći "de-implementirati" token. U gornjem primjeru, ako kreirate podklasu koju ne želite serijalizirati (možda zato što je u prolaznom stanju), morate pribjeći eksplicitnom izbacivanju NotSerializableException.

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

      Zašto javno? Glavna metoda ima modifikator javnog pristupa, tako da joj se može pristupiti svuda i bilo kojem objektu koji želi koristiti ovu metodu za pokretanje aplikacije. Sada 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 ga mogu pozvati u svakom slučaju, 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. zar ne? Java dozvoljava preopterećene konstruktore, to svi znamo. Onda koji treba koristiti i odakle će doći parametri za preopterećeni konstruktor?

      Zašto poništiti? Ne postoji upotreba povratne vrijednosti u virtuelnoj mašini koja zapravo poziva ovu metodu. Jedina stvar koju će aplikacija htjeti reći procesu poziva je da li je prekinut normalno ili nenormalno. Ovo je već moguće pomoću System.exit(int) . Vrijednost različita od nule implicira nenormalan završetak, inače je sve u redu.

      Koja je razlika između kreiranja stringa kao new() i kreiranja literala (koristeći dvostruke navodnike)?

      Kada kreiramo string koristeći new(), on se kreira u hrpi i također se dodaje u skup stringova, dok se string kreiran korištenjem literala kreira samo u skupu stringova.

      Morat ćete se bolje upoznati s konceptom skupljanja nizova da biste odgovorili na ovo ili slična pitanja. Moj savjet je da zaista naučite String klasu i skup stringova.

      Kako radi metoda substring() klase String?

      Kao i drugi programski jezici, stringovi u Javi su niz znakova. Ova klasa je više kao uslužna klasa za rad sa ovom sekvencom. Redoslijed znakova obezbjeđuje sljedeća varijabla:

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

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

      Originalna vrijednost nije promijenjena. Dakle, ako kreirate string dug 10000 znakova i kreirate 100 podstringova sa 5-10 znakova svaki, svih 101 objekata će sadržavati isti niz znakova od 10000 znakova. Ovo je nesumnjivo gubitak sjećanja.

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

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

      Objasnite rad HashMap-a. Kako se rješava problem duplikata?

      Većina vas će se vjerovatno složiti da je HashMap danas najomiljenija tema za razgovore u intervjuima. Ako me neko pita da vam kažem „Kako radi HashMap?“, jednostavno ću odgovoriti: „Zasnovano na principu heširanja“. Koliko god da je jednostavno.

      Dakle, heširanje je u suštini način da se bilo kojoj promenljivoj/objektu dodeli jedinstveni kod nakon primene bilo koje formule/algoritma na njena svojstva.

      Definicija mape je: “Objekat koji povezuje ključeve s vrijednostima.” Vrlo jednostavno, zar ne? Dakle, HashMap sadrži svoju unutrašnju klasu Entry, koja izgleda ovako:

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

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

      • Prije svega, ključni objekt se provjerava na null. Ako je ključ null, vrijednost se pohranjuje na poziciji tabele. Zato što je hashcode za null uvijek 0.
      • Zatim, sljedeći korak je izračunavanje hash vrijednosti pozivanjem metode hashCode() ključne varijable. Ovaj hash se koristi za izračunavanje indeksa u nizu za držanje objekta Entry. Programeri JDK-a su bili svjesni da metoda hashCode() može biti loše napisana i može vratiti vrlo veliku ili vrlo malu vrijednost. Da bi riješili ovaj problem, uveli su još jednu metodu hash() i prosljeđivali hashcode objekta ovoj metodi da bi tu vrijednost prebacili u raspon veličine indeksa niza.
      • Sada se poziva metoda indexFor(hash, table.length) da izračuna tačnu poziciju za pohranjivanje objekta Entry.
      • Sada glavni dio. Kao što znamo da dva različita objekta mogu imati istu vrijednost hashcode-a, kako bi dva različita objekta bila pohranjena na istoj lokaciji u arhivi [koja se zove korpa za otpatke]?

      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 hashcode-a, Entry objekti se pohranjuju u obliku LinkedList-a. Kada se Entry objekat treba postaviti na određeni indeks, HashMap provjerava da li postoji drugi Entry objekt na toj lokaciji? Ako tamo nema unosa, naš objekat će biti sačuvan na ovoj lokaciji.

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

      Šta se događa ako dodamo još jednu vrijednost ključa jednaku onoj koju smo dodali ranije? Logično je da treba zamijeniti staru vrijednost. Kako se to događa? Nakon određivanja indeksa pozicije za Entry objekat, iteracijom preko LinkedList-a koji se nalazi na našem indeksu, HashMap poziva metodu equals() za vrijednost ključa za svaki Entry objekt. Svi ovi objekti Entry u LinkedList imaju istu vrijednost hashcode-a, ali metoda equals() će provjeriti stvarnu jednakost. Ako je ključ. jednako(k) će biti istinito, tada će oba biti percipirana kao isti objekt. Ovo će uzrokovati samo zamjenu objekta vrijednosti unutar objekta Entry.

      Na ovaj način, HashMap osigurava da su ključevi jedinstveni.

      Razlike između interfejsa i apstraktnih klasa?

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

      • U Java interfejsima, varijable su a priori konačne. Apstraktne klase mogu sadržavati nekonačne varijable.
      • Interfejs u Javi apsolutno ne može imati implementaciju. Apstraktna klasa može imati instance metoda koje implementiraju osnovno ponašanje.
      • Komponente interfejsa moraju biti javne. Apstraktna klasa može imati modifikatore pristupa koji odgovaraju svakom ukusu.
      • Interfejs mora biti implementiran ključnom riječi implements. Apstraktna klasa mora biti proširena ključnom riječi produžava.
      • U Javi, klasa može implementirati mnogo interfejsa, ali može naslijediti samo jednu apstraktnu klasu.
      • Interfejs je potpuno apstraktan i ne može imati instance. Apstraktna klasa također ne može imati instance klase, ali se može pozvati ako postoji main() metoda.
      • Apstraktna klasa je nešto brža od interfejsa jer interfejs očekuje pretragu pre nego što pozove bilo koju zaobiđenu metodu u Javi. U većini slučajeva, ovo je mala razlika, ali ako pišete vremenski kritičnu aplikaciju, morate tu činjenicu uzeti u obzir.
    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() se koristi za dobivanje jedinstvene cjelobrojne vrijednosti za dati objekt. Ova vrijednost se koristi za određivanje lokacije kante kada objekt treba biti pohranjen u strukturi podataka kao što je HashTable. Po defaultu, metoda hashCode() vraća cjelobrojni prikaz memorijske adrese na kojoj je objekt pohranjen.

      Metoda equals(), kao što ime kaže, koristi se za obavljanje jednostavne ekvivalencije objekata. Osnovna implementacija metode je provjera referenci dvaju objekata kako bi se provjerilo da li su ekvivalentne.

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

      Metoda equals() mora odrediti jednakost između relacija (mora biti rekurentna, simetrična i tranzitivna). Osim toga, mora biti postojan (ako se objekt nije promijenio, metoda mora vratiti istu vrijednost). Također, o.equals(null) uvijek treba da se vrati false.

      hashCode() također mora biti postojan (ako objekat nije modificiran prema uvjetima metode equals(), mora nastaviti da vraća istu vrijednost.

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

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