Ideje.  zanimivo  Javna prehrana.  Proizvodnja.  Upravljanje.  Kmetijstvo

Vprašanja za intervju z Javo. Priročnik za bodočega Java razvijalca. Intervju in kariera. Razlike med vmesniki in abstraktnimi razredi

  • Kaj je OOP?
  • Kaj je predmet?
  • Katera so osnovna načela OOP?
  • Kaj je dedovanje?
  • Kaj je polimorfizem? Katere manifestacije polimorfizma v Javi poznate?
  • Kaj je enkapsulacija?
  • Kaj je abstrakcija?
  • Kakšne so prednosti objektno usmerjenih programskih jezikov?
  • Kako uporaba objektno usmerjenega pristopa izboljša razvoj programske opreme?
  • Obstaja izraz "je" in "ima". Kaj pomenijo v smislu načel OOP? Kakšna je razlika med sestavo in združevanjem?
  • Kaj mislite s polimorfizmom, inkapsulacijo in dinamično vezavo?

  • Kakšna je razlika med JRE, JVM in JDK?
  • Opišite modifikatorje dostopa v Javi.
  • Kaj je dostop na ravni paketa.
  • Kako se abstraktni razred razlikuje od vmesnika? V katerih primerih bi uporabili abstraktni razred in v katerih bi uporabili vmesnik?
  • Ali lahko objekt dostopa do spremenljivke zasebnega razreda? Če da, kako?
  • Zakaj so v Javi statični bloki?
  • Ali je mogoče preobremeniti statično metodo?
  • Povejte nam o notranjih razredih. Kdaj jih boste uporabili?
  • Kakšna je razlika med spremenljivko primerka in statično spremenljivko? Navedite primer.
  • Navedite primer, ko lahko uporabite statično metodo?
  • Povejte nam o razredih nalagalnika in dinamičnem nalaganju razredov.
  • Kaj je stavek "assert", ki se uporablja v Javi?
  • Zakaj nekateri vmesniki sploh ne definirajo metod?
  • Kakšna je glavna razlika med String, StringBuffer, StringBuilder?
  • Pojasnite V/I tokove Java.
  • Kaj je pomnilnik Heap in Stack v Javi?
  • Kakšna je razlika med Stack in Heap pomnilnikom v Javi?
  • Povejte nam o pomnilniškem modelu v Javi?
  • Kako deluje zbiralnik smeti?
  • Povejte nam o ulivanju tipov. Kaj je degradacija in napredovanje vrste? Kdaj dobite izjemo ClassCastException?
  • Kaj je statični razred, kakšne so značilnosti njegove uporabe?
  • Kako dostopati do polja zunanjega razreda iz ugnezdenega razreda.
  • Katere vrste ugnezdenih razredov obstajajo? Za kaj se uporabljajo?
  • Ali je mogoče spremeniti, ko preglasite metodo:
  • Modifikator dostopa
  • Vrnitev vrste
  • Vrsta ali količina argumenta
  • Ime argumenta
  • Ali naj spremenim vrstni red, količino ali v celoti odstranim del za metanje?
  • Kaj je autoboxing?
  • Kaj so generiki?
  • Kakšen je pravi namen uporabe generičnih tipov v Javi?
  • Kako se spremenljivke posredujejo metodam, po vrednosti ali po sklicu?
  • Katere metode ima razred Object?
  • Pravila za preglasitev metode Object.equals().
  • Če želite preglasiti equals(), kateri pogoji morajo biti izpolnjeni za preglaseno metodo?
  • Kakšno je razmerje med hashCode in equals?
  • Kako sta metodi hashCode in equals implementirani v razred Object?
  • Kaj se zgodi, če preglasite enako, ne da bi preglasili hashCode? Kakšne težave se lahko pojavijo?
  • Ali obstajajo kakšna priporočila o tem, katera polja je treba uporabiti pri izračunu hashCode?
  • Čemu je namenjena metoda hashCode()?
  • Pravila za preglasitev metode Object.hashCode().
  • Povejte nam o kloniranju predmetov. Kakšna je razlika med plitkim in globokim kloniranjem?
  • Pravila za preglasitev metode Object.clone().
  • Kje in kako lahko uporabite zasebnega konstruktorja?
  • Kaj je privzeti konstruktor?
  • Opišite metodo Object.finalize().
  • Kakšna je razlika med finalom, finally in finalize?
  • Opišite hierarhijo izjem.
  • Katere vrste izjem v Javi poznate, v čem se razlikujejo?
  • Kaj je označena in nepreverjena izjema?
  • Kako ustvariti lastno nepreverjeno izjemo?
  • Katere so izjeme Unchecke?
  • Kaj je napaka?
  • Opišite delovanje bloka try-catch-finally.
  • Ali je mogoče uporabiti poskusni blok (brez catch)?
  • Ali se končni blok vedno izvede?
  • Kakšne so značilnosti razreda String? kaj naredi metoda intern()?
  • Ali je mogoče podedovati tip niza, zakaj?
  • Zakaj je String priljubljen ključ v HashMap v Javi?
  • Opredelite koncept veriženja nizov.
  • Kako obrniti niz?
  • Kako primerjati vrednost dveh nizov?
  • Kako obrezati presledke na začetku in koncu vrstice?
  • Opredelite koncept "baze nizov".
  • Ali je mogoče sinhronizirati dostop do vrstic?
  • Kako pravilno primerjati vrednosti nizov dveh različnih predmetov vrste String in StringBuffer?
  • Zakaj je niz nespremenljiv in dokončen v Javi?
  • Napišite metodo za odstranitev podanega znaka iz niza.
  • Kaj je refleksija?
  • Kaj se zgodi z zbiralnikom smeti (GC), če pride do izjeme med metodo finalize() nekega predmeta?
  • Kaj je internacionalizacija, lokalizacija?
  • Kaj so opombe v Javi?
  • Katere funkcije opravlja Annotation?
  • Katere vgrajene opombe v Javi poznate?
  • Kaj počnejo opombe @Retention, @Documented, @Target in @Inherited?
  • Kaj počnejo opombe @Override, @Deprecated, @SafeVarargs in @SuppressWarnings?
  • Kateri življenjski cikel pripisov je mogoče določiti z @Retention?
  • Za katere elemente je mogoče uporabiti opombe in kako lahko to označim?
  • Kako ustvariti lastno opombo?
  • Katere vrste atributov so dovoljene v opombah?
  • Kaj je JMX?
  • Kakšne prednosti ponuja JMX?
  • Kaj še lahko naredi JMX poleg daljinskega upravljanja?
  • Kaj je MBean?
  • Katere vrste MBeans obstajajo?
  • Kaj je strežnik MBean?
  • Kateri mehanizmi zagotavljajo varnost v tehnologiji Java?
  • Navedite več vrst preverjanj, ki jih izvaja preverjanje bajtne kode Java?
  • Kaj veste o "varnostnem upravitelju" v Javi?
  • Kaj je JAAS?
  • Kaj je preoblikovanje?

  • Kaj je zbirka?
  • Poimenujte glavne vmesnike zbirk in njihove izvedbe.
  • Kako se ArrayList razlikuje od LinkedList? V katerih primerih je bolje uporabiti prvo, v katerih pa drugo?
  • Kako se HashMap razlikuje od Hashtable?
  • Kakšna je razlika med ArrayList in Vector?
  • Kako se primerjajo elementi zbirke?
  • Razporedite naslednje vmesnike v hierarhijo: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
  • Zakaj zemljevid ni zbirka, medtem ko sta seznam in nabor zbirki?
  • Definirajte izraz "iterator".
  • Kaj veste o vmesniku Iterable?
  • Kako pretvoriti HashSet v ArrayList v eni vrstici?
  • Kako pretvoriti ArrayList v HashSet v eni vrstici?
  • Kako ponoviti vse ključe zemljevida, glede na to, da zemljevida ni mogoče ponoviti?
  • Kako ponoviti čez vse vrednosti Map glede na to, da Map ni Iterable?
  • Kako ponoviti vse pare ključ-vrednost v zemljevidu glede na to, da zemljevida ni mogoče ponoviti?
  • Kako je SortedMap »razvrščen«, razen dejstva, da toString() prikaže vse po vrstnem redu?
  • Kako kopirati elemente iz katere koli zbirke v matriko z enim klicem?
  • Izvedite simetrično razliko dveh zbirk z uporabo metod zbirke (addAll(), removeAll(), retainAll()).
  • Primerjajte enumeration in iterator.
  • Kako sta Iterable in Iterator povezana?
  • Kako so Iterable, Iterator in "za vsakega", predstavljeni v Javi 5, povezani med seboj?
  • Primerjaj Iterator in ListIterator.
  • Kaj se zgodi, če pokličem Iterator.next() brez "vprašanja" Iterator.hasNext()?
  • Kaj se zgodi, če pokličem Iterator.next(), preden pokličem Iterator.hasNext() 10-krat? Ali mi manjka 9 elementov?
  • Če imam zbirko in podrejeni iterator, ali se zbirka spremeni, če pokličem iterator.remove()?
  • Če imam zbirko in podrejeni iterator, ali se bo iterator spremenil, če pokličem collection.remove(..)?
  • Zakaj so dodali ArrayList, če je že obstajal Vector?
  • Izvedba razreda ArrayList ima naslednja polja: Object elementData, int size. Pojasnite, zakaj shranjujete velikost ločeno, če lahko vedno vzamete elementData.length?
  • Ali je LinkedList enojno povezan seznam, dvojno povezan seznam ali štiripovezan seznam?
  • Kakšen je najslabši čas izvajanja metode contain() za element, ki je na LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N) )?
  • Kakšen je najslabši čas izvajanja metode contain() za element, ki je v ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O (N*N) )?
  • Kakšen je najslabši čas delovanja za metodo add() na LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) ?
  • Kakšen je najslabši čas delovanja metode add() za ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) ?
  • Koliko elementov je dodeljenih v pomnilniku ob klicu ArrayList.add()?
  • Koliko elementov je dodeljenih v pomnilniku ob klicu LinkedList.add()?
  • Ocenite količino pomnilnika za shranjevanje enobajtnega primitiva v LinkedList?
  • Ocenite količino pomnilnika za shranjevanje enobajtnega primitiva v ArrayList?
  • Na sredino seznama dodam element: list.add(list.size()/2, newElem). Za koga je ta operacija počasnejša - za ArrayList ali za LinkedList?
  • Kako ponoviti elemente LinkedList v obratnem vrstnem redu brez uporabe počasnega get(index)?
  • Kako z enim klicem seznama pridobiti seznam z vsemi elementi razen prvih in zadnjih 3?
  • Ali imajo lahko različni predmeti v pomnilniku (ref0 != ref1) ref0.hashCode() == ref1.hashCode()?
  • Ali imajo lahko različni predmeti v pomnilniku (ref0 != ref1) ref0.equals(ref1) == true?
  • Ali imajo lahko različne reference na isti objekt v pomnilniku (ref0 == ref1) ref0.equals(ref1) == false?
  • Obstaja razred Point(int x, y;). Zakaj je zgoščena koda 31 * x + y boljša od x + y?
  • Če ima razred Point(int x, y;) "pravilno" implementacijo metode equals (vrni ref0.x == ref1.x && ref0.y == ref1.y), vendar naredi zgoščeno kodo v obliki int hashCode() ( return x;), potem bodo te točke pravilno postavljene in pridobljene iz HashSet?
  • equals() ustvari ekvivalenčno relacijo. Katere lastnosti ima ta relacija: komutativnost, simetričnost, refleksivnost, distributivnost, asociativnost, tranzitivnost?
  • Ali je mogoče implementirati equals(Object that) (return this.hashCode() == that.hashCode()) takole?
  • equals zahteva preverjanje, ali je argument (equals(Object that)) iste vrste kot sam objekt. Kakšna je razlika med this.getClass() == that.getClass() in tem primerkom MyClass?
  • Ali je mogoče implementirati metodo equals razreda MyClass takole: class MyClass (public boolean equals(MyClass that) (return this == that;))?
  • Ali bo HashMap deloval, če vsi ključi vrnejo int hashCode() (vrni 42;)?
  • Zakaj so dodali HashMap, če je že obstajala Hashtable?
  • Knuth in Cormen menita, da obstajata dve glavni implementaciji zgoščevalnih tabel: odprto naslavljanje in veriženje. Kako je implementiran HashMap? Zakaj so to storili (po vašem mnenju)? Katere so prednosti in slabosti vsakega pristopa?
  • Koliko klikov povezave se zgodi, ko izvedete HashMap.get(key) na ključu, ki je v tabeli?
  • Koliko novih objektov se ustvari, ko dodate nov element v HashMap?
  • Kako deluje HashMap, ko poskušate vanj shraniti dva elementa s ključi z isto kodo hashCode, ki pa je enaka == false?
  • HashMap se lahko spremeni v seznam tudi za ključe z različnimi hashCodes. Kako je to mogoče?
  • Kakšen je najslabši čas delovanja metode get(key) za ključ, ki ga ni v tabeli (O(1), O(log(N)), O(N), O(N*log(N)) , O(N*N ))?
  • Kakšen je najslabši čas delovanja metode get(key) za ključ, ki je v tabeli (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N ))?
  • Pojasnite pomen parametrov v konstruktorju HashMap(int initialCapacity, float loadFactor).
  • Kakšna je razlika med HashMap in IdentityHashMap? Za kaj je IdentityHashMap? Kako je lahko uporaben za izvajanje serializacije ali kloniranja?
  • Kakšna je razlika med HashMap in WeakHashMap? Za kaj je WeakHashMap?
  • WeakHashMap uporablja WeakReferences. Zakaj ne bi ustvarili SoftHashMap na SoftReferences?
  • WeakHashMap uporablja WeakReferences. Zakaj ne ustvarite PhantomHashMap na PhantomReferences?
  • Naredite HashSet iz HashMap (uporabite samo nabor ključev, ne nabora vrednosti).
  • Naredite HashMap iz HashSeta (HashSet >).
  • Primerjajte vmesnika java.util.Queue in java.util.Deque.
  • Kdo podaljšuje koga: Queue podaljšuje Deque ali Deque podaljšuje Queue?
  • Zakaj LinkedList izvaja tako List kot Deque?
  • Kakšna je razlika med razredoma java.util.Arrays in java.lang.reflect.Array?
  • Kakšna je razlika med razredoma java.util.Collection in java.util.Collections?
  • Napišite VEČNITNI program, ki povzroči, da zbirka vrže izjemo ConcurrentModificationException.
  • Kaj je "fail-fast vedenje"?
  • Ali obstaja poseben razred java.util.EnumSet za nize enume? Za kaj? Zakaj avtorji niso bili zadovoljni s HashSet ali TreeSet?
  • java.util.Stack - velja za "zastarelo". S čim ga je priporočljivo zamenjati? Zakaj?
  • Katera zbirka izvaja disciplino storitev FIFO?
  • Katera zbirka izvaja servisno disciplino FILO?
  • Navedite primer, ko katera koli zbirka vrže UnsupportedOperationException.
  • Zakaj ne morem napisati "ArrayList" števila = nov ArrayList ();", vendar lahko "Seznam števila = nov ArrayList ();"?
  • LinkedHashMap - kakšna "zver" je to? Kaj je LinkedList in kaj HashMap?
  • LinkedHashSet - kakšna "zver" je to? Kaj je LinkedList in kaj HashSet?
  • Pravijo, da je preprosto narediti preprost predpomnilnik s "politiko razveljavitve" na LinkedHashMap, ali veste, kako?
  • Kaj vam omogoča PriorityQueue?
  • Kakšne so razlike med java.util.Comparator in java.lang.Comparable?

  • Kaj je simbolna povezava?
  • Kakšna je razlika med I/O in NIO?
  • Katere funkcije NIO poznate?
  • Katere vrste V/I tokov obstajajo?
  • Poimenujte glavne razrede V/I tokov.
  • Kakšna je razlika in kaj imajo skupnega OutputStream, InputStream, Writer, Reader?
  • Katere podrazrede osnovnega razreda InputStream poznate in kaj počnejo?
  • Kaj veste o RandomAccessFile?
  • Katere načine dostopa do datotek ima RandomAccessFile?
  • Katere podrazrede osnovnega razreda OutputStream poznate in kaj počnejo?
  • Za kaj se uporablja PushbackInputStream?
  • Za kaj se uporablja SequenceInputStream?
  • Katere podrazrede osnovnega razreda Reader poznate in čemu so namenjeni?
  • Katere podrazrede osnovnega razreda Writer poznate in kaj počnejo?
  • Kaj je absolutna in relativna pot?
  • Kateri paketi vsebujejo razrede niti?
  • Kaj veš o superrazredih?
  • Kateri razred dodatkov vam omogoča branje podatkov iz vhodnega bajtnega toka v formatu primitivnih tipov podatkov?
  • Kateri razred dodatkov vam omogoča, da z uporabo medpomnilnika pospešite branje/pisanje?
  • Kateri razredi vam omogočajo pretvorbo tokov bajtov v tokove znakov in obratno?
  • Kakšna je razlika med razredom PrintWriter in PrintStream?
  • Kateri razred je zasnovan za delo z elementi datotečnega sistema?
  • Kateri znak je ločilo pri podajanju poti v datotečnem sistemu?
  • Katere metode razreda File poznate?
  • Kaj veste o vmesniku FileFilter?
  • Kateri razredi vam omogočajo arhiviranje predmetov?

  • Na katerem objektu pride do sinhronizacije pri klicu statične sinhronizirane metode?
  • Za kaj se uporablja ključna beseda volatile, synchronized, transient, native?
  • Kaj pomeni prednost niti?
  • Kaj so demonske niti v Javi?
  • Kaj pomeni uspavati tok?
  • V katerih stanjih lahko obstaja nit v Javi? Kako tok pravzaprav deluje?
  • Kakšna je razlika med obema vmesnikoma za izvajanje nalog Runnable in Callable?
  • Razlike med CyclicBarrier in CountDownLatch?
  • Kaj je pogoj za dirko?
  • Kako ustaviti nit?
  • Kaj se zgodi, ko nit vrže izjemo?
  • Kaj je spremenljivka ThreadLocal?
  • Kaj je FutureTask?
  • Razlika med interrupted in isInterrupted?
  • Zakaj sta metodi čakanja in obveščanja klicani v sinhroniziranem bloku?
  • Kaj je bazen niti?
  • Razlike med livelockom in mrtvim zaklepom?
  • Kako preveriti, ali nit drži ključavnico?
  • Kako pridobiti izpis niti?
  • Kateri parameter JVM se uporablja za nadzor velikosti sklada niti?
  • Razlike med sinhroniziranim in ReentrantLock?
  • Kaj je Semafor?
  • Kaj se zgodi, če je čakalna vrsta skupine niti že polna in oddate nalogo?
  • Razlike med metodama submit() in execute() v skupini niti?
  • Kaj je metoda blokiranja?
  • Kaj je ReadWriteLock?
  • Kaj je Singletonovo dvojno preverjeno zaklepanje?
  • Kaj je ogrodje Fork/Join?
  • Preselil sem se v drugo mesto, dobil sem službo, hodim na razgovore. Zdelo se mi je, da vam tam zastavljena vprašanja, čeprav dobro znana, vendar sestavljena lahko pomagajo pripraviti in se počutiti bolj samozavestnega.

    Vprašanja, ki vam bodo pomagala razumeti načela gradnje DBMS.
    1. Kaj je prva normalna oblika in postopek normalizacije? Kakšne so normalne oblike?
    2. Kakšen je pomen indeksa DBMS, kako so strukturirani, kako so shranjeni? Kako bi implementirali isto funkcionalnost? Zadnje vprašanje se postavi, če ni jasnega razumevanja indeksov.
    3. Narišite razmerje Veliko proti mnogo. Na primer: tabeli Avtorji in Knjige. En avtor ima lahko več knjig, knjigo pa lahko napiše več avtorjev. Napišite poizvedbo SQL, da izberete knjige določenega avtorja.

    Osnovna vprašanja o Javi.
    4. Kot veste, je osnovni razred v Javi Object. Katere metode lahko imenujete?
    5. Povejte nam, kaj sta equals in hashCode? Kakšna pravila in konvencije obstajajo za izvajanje teh metod? Kdaj se uporabljajo?
    6. Razložite metode čakanja, obvestila, obvestilaVse. Kako se uporabljajo, kdaj, zakaj so potrebni? Kaj je sinhronizirano?
    7. Kaj je finalize? Zakaj je to potrebno? Kaj nam lahko poveste o zbiralniku smeti in njegovih algoritmih?
    8. Zakaj je metoda kloniranja označena kot zaščitena? Kaj je potrebno za izvedbo kloniranja?
    9. Kateri modifikatorji obstajajo (access in drugi)? Kaj sta nestanovitna in prehodna? Za kaj in v kakšnih primerih bi se lahko uporabil default?

    Ogrodje zbirke Java
    10. Kakšni so zbirni vmesniki v Javi? Pojasnite, v čem se razlikujejo.
    11. Katere izvedbe teh vmesnikov poznate?
    12. Kako se ArrayList in LinkedList razlikujeta drug od drugega? Kako so zgrajeni? V katerih primerih jih je treba uporabiti?
    13. Kakšna je razlika med HashMap in TreeMap? Kako so strukturirani in delujejo? Kaj pa čas dostopa do objektov, kakšne so odvisnosti?
    14. Kaj je Hashtable, kako se razlikuje od HashMapa? Danes je zastarel, kako lahko še vedno uporabljate zahtevano funkcionalnost?

    Izjeme
    15. Kaj je izjema? Katere vrste izjem poznate in v čem se razlikujejo?
    16. Morda je težava z bloki try-catch-finally in vprašanjem, kaj bo vrnjeno ali katera izjema bo na koncu prepuščena?

    Algoritmi
    17. Katere algoritme za razvrščanje poznate? Kakšne vrste algoritmov poznate?
    Poleg tega so tukaj možna različna dodatna vprašanja o ocenjevanju kompleksnosti algoritmov in njihovi medsebojni primerjavi.

    Oblikovalski vzorci.
    18. Ali poznate kakršne koli oblikovalske vzorce?
    19. Napišite Singleton ... In z lenim nalaganjem. Kaj pa, če mora biti varen za niti? In v katerih primerih je leno nalaganje slabše?
    20. Kaj lahko rečete o MVC? Narišite diagram in pojasnite, kako deluje MVC.

    Niz vprašanj, ki vam bodo pomagala razumeti tehnološki sklad J2EE.
    21. Kaj je servlet, jsp, njihova razlika?
    22. Kaj je Ajax? Kako ta tehnologija načeloma deluje?
    23. Kaj je ORM, kako ga prevesti in kako naj bi deloval?

    Enostavne naloge za pisanje algoritmov.
    24. Napišite funkcijo za izračun faktoriala.
    25. Podana je funkcija za izračun Fibonaccijevih števil, ve se, da deluje. Poiščite logično zmoto. Ocenite kompleksnost nastalega algoritma.
    26. Obrnite črto.
    27. Izračunajte povprečje niza.

    Koristno si je zapomniti, da če se ne počutite zelo samozavestni, ni treba izgovarjati nepotrebnih besed. Povedaš dodatno besedo, oni pa se je oprimejo in odvijejo verigo. Propagirajo nekaj, o čemer niso preveč prepričani. To sposobnost ljudi - oprijeti - je treba uporabiti, vendar v korist zase;-)

    Znanje in razumevanje ... stvari so precej drugačne, torej
    - različne algoritme, na primer razvrščanje, je vredno napisati sam, tudi iz učbenika. Poglejte, kako različni so drug od drugega, primerjajte njihovo kompleksnost.
    - koristno je pogledati različne pripomočke in knjižnice, principe združevanja razredov v pakete ter stil pisanja kode in komentiranja. Lahko je zelo koristno pri razumevanju modifikatorjev dostopa in organizacije projekta.
    - z razumevanjem nečesa specifičnega lahko pomagaš tistim, ki vedo manj. Pojdite na kateri koli forum in poskusite odgovoriti na vprašanja o temi, ki vas zanima. Iz razprave lahko vzamete nekaj zase. Lahko napišete kratek članek. Seveda morate dobro razumeti temo.
    Vsako delo, namenjeno izboljšanju lastnih kvalifikacij, bo vidno pristojnemu anketarju in ne bo ostalo neopaženo. Edina stvar je, da se morate o tem iskreno pogovarjati, ne smete podcenjevati svojih zmožnosti in sposobnosti.
    Če želite imeti kakršno koli smernico za pripravo ali razvoj sebe kot specialista, si lahko ogledate nekaj podobnega temu.

    Pravzaprav so zgoraj navedena vprašanja stopnja Junior Developer, kot si jaz predstavljam. Nekje morda globlje, nekje manj, a kot dejstvo - Junior.

    Vsaka rešitev ustvarja nove težave

    Zbrali smo 10 zapletenih primerov programov, ki prikazujejo kakršne koli informacije. Moral bi pogledati kodo in povedati, kaj bo program izpisal. Možno je, da se program sploh ne bo prevedel. V tem primeru morate določiti, kaj bo izpisal prevajalnik.

    Ljudje med intervjuji radi postavljajo taka vprašanja, zato je dobro, da osvežite svoje znanje programskega jezika Java. Odgovori bodo skriti v spojlerjih - kaj bo program ali prevajalnik izpisal. Poskusite razmisliti sami, preden pogledate pravilen odgovor.

    Paket com.instanceofjava; public class B ( B b = new B(); public int show())( return (true ? null: 0); ) public static void main(String args) ( B b = new B(); b.show( ) ; ) )

    • Vsakič, ko ustvarimo objekt katerega koli razreda, se najprej pokliče konstruktor in pomnilnik se dodeli za vse nestatične spremenljivke.
    • Tukaj B b = novo B(); objektu razreda B je dodeljen nov objekt istega razreda.
    • Napišite B b = novo B(); vodi do rekurzivnega izvajanja konstruktorja, ki ustvari neskončno število objektov. Zato bo pri izvajanju te kode v "glavni" niti sprožena izjema java.lang.StackOverFlowError.
    • Pogost vzrok za tovrstne izjeme je slaba rekurzija. Do tega običajno pride zaradi neveljavnih odpovednih pogojev.

    Kaj bo izpisal naslednji program?

    paket com.instanceofjava; public class A( public static void show())( System.out.println("Static method called"); ) public static void main(String args) ( A obj = null; obj.show(); ) )
    • Statične metode lahko kličemo z uporabo spremenljivke, ki se sklicuje na null. Bistvo je, da so statične metode na ravni razreda. Zato lahko kličemo statične funkcije tako z uporabo samega razreda kot z uporabo spremenljivke, ki je enaka null.

    Kaj bo izpisal naslednji program?

    paket com.instanceofjava; javni razred A( statični int a = 1111; statični ( a = a-- - --a; ) ( a = a++ + ++a; ) javni statični void main(String args) ( System.out.println(a) ;))

    Kaj bo izpisal naslednji program?

    paket com.instanceofjava; javni razred A( int GetValue() ( return (true ? null: 0); ) public static void main(String args) ( A obj = new A(); obj.GetValue(); ) )

    Kaj bo izpisal naslednji program?

    paket com.instanceofjava; javni razred A( javni statični void main(String args) ( Integer i1 = 128; Integer i2 = 128; System.out.println(i1 == i2); Integer i3 = 127; Integer i4 = 127; System.out.println (i3 == i4); ) )

    Kaj bo izpisal naslednji program?

    paket com.instanceofjava; razred A ( void method(int i) ( ) ) class B extends A ( @Override void method(Integer i) ( ) )
    • Katera vrstica programa bo povzročila napako v času prevajanja?
    paket com.instanceofjava; razred A ( public static void main(String args) ( Integer i = new Integer(null); String s = new String(null); ) )

    Kaj bo izpisal naslednji program?

    paket com.instanceofjava; razred A ( public static void main(String args) ( String s = "ONE"+3+2+"TWO"+"THREE"+5+4+"FOUR"+"FIVE"+5; System.out.println (s); ))

    Kaj bo izpisal naslednji program?

    paket com.instanceofjava; razred A ( statična int metoda1(int i) ( vrni metoda2(i *= 11); ) statična int metoda2(int i) ( vrni metoda3(i /= 11); ) statična int metoda3(int i) ( vrni metoda4( i -= 11); ) statični int method4(int i) ( return i += 11; ) public static void main(String args) ( System.out.println(method1(11)); ) )

    Kaj bo izpisal naslednji program?

    paket com.instanceofjava; razred A ( public static void main(String args) ( System.out.println(null); ) )

    Kaj se zgodi, ko napišete System.out.println(null); ?

    Seveda pride do napake pri prevajanju. Metoda println ima več različic. Lahko sprejme niz, objekt ali char. Pri posredovanju ničelnega argumenta tej funkciji se prevajalnik ne more odločiti, katero od treh metod naj kliče.

    Preobremenjene metode:

    • public void prinltln(String str) (
    • public void prinltln(char ch) (
    • public void prinltln(Object ch) (

    Za prevajalnik je klic System.out.println(null) dvoumen, saj sta lahko dve metodi bolj ali manj primerni za izpis null 'a: println(String) in println(char). Toda prevajalnik ne ve, katero specifično metodo naj pokliče. Da bo kompilacija uspela, morate napisati:

    • System.out.println((String)null);
    • System.out.println((char)null);
    • System.out.println((Object)null);

    Toda tukaj morate biti previdni. Pokliči System.out.println((char)null); bo povzročila izjemo med izvajanjem.

    Za tiste, ki besedo Java Core slišijo prvič, so to temeljni temelji jezika. S tem znanjem se lahko mirno odpraviš na prakso/prakso. Ta vprašanja vam bodo pomagala osvežiti svoje znanje pred razgovorom ali se naučiti nekaj novega zase. Za pridobitev praktičnih veščin se učite na.

      Kako ustvariti nespremenljiv predmet v Javi? Naštejte vse prednosti

      Nespremenljiv razred je razred, katerega stanja po ustvarjanju ni mogoče spremeniti. Tu se stanje predmeta v bistvu šteje za vrednosti, shranjene v primerku razreda, pa naj bodo to primitivni tipi ali referenčni tipi.

      Da bi bil razred nespremenljiv, morajo biti izpolnjeni naslednji pogoji:

      1. Ne zagotavljajte nastaviteljev ali metod, ki spreminjajo polja ali objekte, ki se nanašajo na polja. Nastavljalci pomenijo spreminjanje stanja objekta, čemur se tu želimo izogniti.
      2. Naj bodo vsa polja končna in zasebna. Polja, označena kot zasebna, ne bodo dostopna zunaj razreda, če jih označite kot končna, pa zagotovite, da jih ne boste spremenili, niti slučajno.
      3. Ne dovolite, da podrazredi preglasijo metode. Najlažji način za to je, da razred razglasite za končnega. Dokončanih razredov v Javi ni mogoče preglasiti.
      4. Vedno si zapomnite, da so vaši primerki spremenljivk lahko spremenljivi ali nespremenljivi. Definirajte jih in vrnite nove objekte s kopirano vsebino za vse spremenljive objekte (referenčne vrste). Nespremenljive spremenljivke (primitivni tipi) je mogoče varno vrniti brez dodatnega truda.

      Prav tako se morate spomniti kasnejših prednosti nespremenljivih razredov. Morda jih boste potrebovali na razgovoru. Nespremenljivi razredi:

      • enostaven za načrtovanje, testiranje in uporabo
      • samodejno nitno varno in nima težav s sinhronizacijo
      • ne potrebujejo konstruktorja kopiranja
      • vam omogočajo, da leno inicializirate hashcode in predpomnite vrnjeno vrednost
      • ne zahteva varnega kopiranja, ko se uporablja kot polje
      • ustvarite dobre ključe zemljevida in elemente nabora (ti objekti ne smejo spremeniti stanja, ko so v zbirki)
      • naredite svoj razred trajen tako, da ga enkrat ustvarite in ga ni treba ponovno preverjati
      • vedno imeti »atomičnost napake« (izraz, ki ga je skoval Joshua Bloch): če nespremenljiv objekt vrže izjemo, ne bo nikoli ostal v neželenem ali nedefiniranem stanju.

      Oglejte si primer, napisan v tej objavi.

      Specifikacija Jave navaja, da se vse v Javi posreduje po vrednosti. V Javi ni takega, kot je "prenos po sklicevanju". Ti pogoji so povezani s klicanjem metod in podajanjem spremenljivk kot parametrov metode. V redu, primitivni tipi se vedno posredujejo po vrednosti brez zmede. Toda koncept mora biti jasen v kontekstu parametra metode kompleksnih vrst.


      V zgornjem primeru naslovne bite prve instance kopira druga referenčna spremenljivka, zaradi česar oba sklica kažeta na isto pomnilniško lokacijo, kjer je shranjen objekt. Ne pozabite, da z dodelitvijo vrednosti null drugi povezavi ne boste dodelili vrednosti null prvi povezavi. Toda sprememba stanja objekta z eno referenčno spremenljivko se bo odrazila v drugi povezavi.

      Kakšna je uporaba bloka finally? Ali ta blok zagotavlja izvajanje svoje kode? Kdaj končni blok ni priklican?

      Blok finally se vedno kliče, če obstaja blok try. To zagotavlja, da se končni blok pokliče, tudi če pride do nepričakovane izjeme. Toda končno je bolj uporaben kot samo obravnavanje izjem - ta blok vam omogoča, da počistite kodo, ki je bila pomotoma zaobljena z return, continue ali break. Postavitev kode za čiščenje v blok finally je vedno dobra praksa, tudi če ni pričakovati izjem.

      Če navidezni stroj zapre, medtem ko se izvaja blok poskusa ali ulova, potem blok finally ne bo izveden. Podobno, če nit izvaja blok poskusa ali ulova in je prekinjena ali ukinjena, končni blok ne bo izveden, čeprav se aplikacija še naprej izvaja.

      Zakaj obstajata dva razreda Date, eden v paketu java.util in drugi v java.sql?

      java.util.Date predstavlja datum in uro, medtem ko java.sql.Date predstavlja samo datum. Dodatek k java.sql.Date je razred java.sql.Time, ki predstavlja samo čas.

      Razred java.sql.Date je podrazred (razširitev) razreda java.util.Date. Kaj se je torej spremenilo v java.sql.Date:

      • toString() ustvari drugačno predstavitev niza: llll-mm-dd
      • statična metoda valueOf(String) ustvari datum iz niza z zgornjo predstavitvijo
      • pridobivalci in nastavljalci za ure, minute in sekunde so izključeni

      Razred java.sql.Date se uporablja v JDBC in je zasnovan tako, da nima časovne komponente, kar pomeni, da morajo biti ure, minute, sekunde in milisekunde enake nič ... vendar to za razred ni potrebno.

      Razložite vmesnike markerjev.

      Vzorec žetona vmesnika je oblikovalski vzorec v računalništvu, ki ga uporabljajo programski jeziki, ki zagotoviti informacije o objektih v času izvajanja. to ponuja način za povezovanje metapodatkov razreda, kjer jezik nima izrecne podpore za takšne metapodatke. V Javi se za to uporabljajo vmesniki brez podajanja metod.

      Dober primer vmesnika žetonov v Javi je vmesnik Serializable. Razred implementira ta vmesnik, da pokaže, da je njegove neprehodne podatke mogoče zapisati v tok bajtov ali v datotečni sistem.

      Glavni problem Označevalni vmesnik je, da vmesnik definira konvencijo za razrede, ki ga izvajajo, in to konvencijo podedujejo vsi podrazredi. To pomeni, da žetona ne boste mogli "deimplementirati". Če v zgornjem primeru ustvarite podrazred, ki ga ne želite serializirati (morda zato, ker je v prehodnem stanju), se morate zateči k izrecnemu vrženju NotSerializableException.

      Zakaj je metoda main() deklarirana kot javna statična praznina?

      Zakaj javno? Glavna metoda ima modifikator javnega dostopa, tako da lahko do nje dostopa povsod in kateri koli objekt, ki želi uporabiti to metodo za zagon aplikacije. Ne trdim, da imata JDK/JRE podoben razlog, ker java.exe ali javaw.exe (za Windows) uporabljata klic Java Native Interface (JNI) za zagon metode, tako da jo lahko vseeno pokličeta, ne glede na modifikator dostopa.

      Zakaj statično? Predpostavimo, da naša glavna metoda ni statična. Za klic katere koli metode potrebujete primerek razreda. Prav? Java omogoča preobremenjene konstruktorje, to vsi vemo. Katerega naj potem uporabimo in od kod bodo parametri za preobremenjeni konstruktor?

      Zakaj prazna? V navideznem stroju, ki dejansko kliče to metodo, vrnjena vrednost ni uporabna. Edina stvar, ki jo bo aplikacija želela sporočiti klicnemu procesu, je, ali se je zaključil normalno ali nenormalno. To je že mogoče z uporabo System.exit(int) . Vrednost, ki ni nič, pomeni nenormalno dokončanje, sicer je vse v redu.

      Kakšna je razlika med ustvarjanjem niza kot new() in ustvarjanjem literala (z uporabo dvojnih narekovajev)?

      Ko ustvarimo niz z uporabo new(), je ustvarjen v kopici in je prav tako dodan v skupino nizov, medtem ko je niz, ustvarjen z uporabo literala, ustvarjen samo v skupini nizov.

      Za odgovor na to ali podobna vprašanja se boste morali bolje seznaniti s konceptom združevanja nizov. Moj nasvet je, da se res naučite razreda String in skupine nizov.

      Kako deluje metoda substring() razreda String?

      Tako kot drugi programski jeziki so nizi v Javi zaporedje znakov. Ta razred je bolj podoben uporabnemu razredu za delo s tem zaporedjem. Zaporedje znakov zagotavlja naslednja spremenljivka:

      /** Vrednost se uporablja za shranjevanje znakov. */ /** Vrednost se uporablja za shranjevanje znakov */ zasebna končna vrednost char; Naslednje spremenljivke se uporabljajo za dostop do te matrike v različnih scenarijih /** Odmik je prvi indeks uporabljenega pomnilnika. */ /** Odmik je prvi indeks uporabljenega pomnilnika. */ zasebni končni int odmik; /** Število je število znakov v nizu. */ /** Count je število znakov v vrstici. */ zasebno končno int štetje;

      Vsakič, ko ustvarimo podniz iz obstoječega primerka niza, metoda substring() samo nastavi nove vrednosti za spremenljivki offset in count. Notranji niz znakov se ne spremeni. To je možen vir uhajanja pomnilnika, če se metoda substring() uporablja neprevidno:

      Prvotna vrednost se ne spremeni. Torej, če ustvarite niz, ki je dolg 10.000 znakov, in ustvarite 100 podnizov s 5–10 znaki, bo vseh 101 predmetov vseboval isto 10.000 znakov dolgo matriko znakov. To je nedvomno izguba spomina.

      Temu se je mogoče izogniti s spremembo kode na naslednji način:

      zamenjajte original.substring(beginIndex) z novim String(original.substring(beginIndex)), kjer je original originalni niz.

      Razložite delovanje HashMapa. Kako je rešen problem dvojnikov?

      Verjetno se vas večina strinja, da je HashMap dandanes najbolj priljubljena tema za pogovore v intervjujih. Če me kdo vpraša, naj vam povem "Kako deluje HashMap?", bom preprosto odgovoril: "Na podlagi načela zgoščevanja." Kakor preprosto je.

      Torej je zgoščevanje v bistvu način za dodelitev edinstvene kode kateri koli spremenljivki/predmetu po uporabi katere koli formule/algoritma za njegove lastnosti.

      Definicija zemljevida je: "Predmet, ki povezuje ključe z vrednostmi." Zelo preprosto, kajne? Torej HashMap vsebuje svoj notranji razred Entry, ki je videti tako:

      statični razred Entry implementira Map . Vstop( končni ključ K; vrednost V; vnos naslednji; končni int zgoščevalnik; …//Več kode je tukaj )

      Ko nekdo poskuša dati par ključ-vrednost v HashMap, se zgodi naslednje:

      • Najprej se preveri, ali je ključni objekt null. Če je ključ ničelni, je vrednost shranjena na položaju tabele. Ker je hashcode za null vedno 0.
      • Nato je naslednji korak izračun zgoščene vrednosti s klicem metode hashCode() spremenljivke ključa. Ta zgoščena vrednost se uporablja za izračun indeksa v matriko za shranjevanje predmeta Entry. Razvijalci JDK so se dobro zavedali, da je lahko metoda hashCode() slabo napisana in lahko vrne zelo veliko ali zelo majhno vrednost. Da bi rešili to težavo, so predstavili drugo metodo hash() in tej metodi posredovali hashcode predmeta, da bi to vrednost prenesli v obseg velikosti indeksa matrike.
      • Zdaj je poklicana metoda indexFor(hash, table.length) za izračun natančnega položaja za shranjevanje predmeta Entry.
      • Sedaj pa glavni del. Ker vemo, da imata lahko dva različna predmeta enako vrednost hashcode, kako bi bila dva različna predmeta shranjena na isti lokaciji v arhivu [imenovanem koš za smeti]?

      Odgovor je LinkedList. Če se spomnite, ima razred Entry lastnost »next«. Ta lastnost vedno kaže na naslednji objekt v verigi. To vedenje je zelo podobno LinkedList.

      Torej, v primeru ujemanja hashcode, so predmeti Entry shranjeni v obliki LinkedList. Ko je treba predmet Entry postaviti na določen indeks, HashMap preveri, ali na tej lokaciji obstaja drug predmet Entry? Če tam ni vnosa, bo naš objekt shranjen na tem mestu.

      Če je v našem indeksu že drug predmet, se potrdi njegovo naslednje polje. Če je ničelna, naš objekt postane naslednje vozlišče v LinkedList. Če next ni null, se ta postopek ponavlja, dokler ni najdeno naslednje polje, ki je null.

      Kaj se zgodi, če dodamo drugo ključno vrednost, enako tisti, ki smo jo dodali prej? Logično je, da mora nadomestiti staro vrednost. Kako se to zgodi? Po določitvi indeksa položaja za objekt Entry, ponavljanju čez LinkedList, ki se nahaja na našem indeksu, HashMap pokliče metodo equals() za vrednost ključa za vsak objekt Entry. Vsi ti predmeti Entry v LinkedList imajo enako vrednost hashcode, vendar bo metoda equals() preverila resnično enakost. Če je ključ. enako (k) bo prav, potem bosta oba zaznana kot isti predmet. To bo samo povzročilo zamenjavo predmeta vrednosti v objektu Entry.

      Na ta način HashMap zagotavlja, da so ključi edinstveni.

      Razlike med vmesniki in abstraktnimi razredi?

      To je zelo pogosto vprašanje, če ste na razgovoru za mlajšega programerja. Najpomembnejše razlike so navedene spodaj:

      • V vmesnikih Java so spremenljivke a priori končne. Abstraktni razredi lahko vsebujejo nekončne spremenljivke.
      • Vmesnik v Javi absolutno ne more imeti izvedbe. Abstraktni razred ima lahko primerke metode, ki izvajajo osnovno vedenje.
      • Komponente vmesnika morajo biti javne. Abstraktni razred ima lahko modifikatorje dostopa za vsak okus.
      • Vmesnik mora biti implementiran s ključno besedo implements. Abstraktni razred je treba razširiti s ključno besedo se razteza.
      • V Javi lahko razred implementira veliko vmesnikov, vendar lahko deduje le iz enega abstraktnega razreda.
      • Vmesnik je popolnoma abstrakten in ne more imeti primerkov. Abstraktni razred prav tako ne more imeti primerkov razreda, vendar ga je mogoče poklicati, če obstaja metoda main().
      • Abstraktni razred je nekoliko hitrejši od vmesnika, ker vmesnik pričakuje iskanje, preden pokliče katero koli preglaseno metodo v Javi. V večini primerov je to majhna razlika, a če pišete časovno kritično aplikacijo, morate to dejstvo upoštevati.
    1. Kdaj preglasite metodi hashCode() in equals()?

      Metodi hashCode() in equals() sta definirani v razredu Object, ki je nadrejeni razred vseh objektov Java. Iz tega razloga vsi objekti Java podedujejo osnovno izvedbo teh metod.

      Metoda hashCode() se uporablja za pridobitev enolične celoštevilske vrednosti za dani objekt. Ta vrednost se uporablja za določitev lokacije vedra, ko je treba objekt shraniti v podatkovno strukturo, kot je HashTable. Metoda hashCode() privzeto vrne celoštevilsko predstavitev pomnilniškega naslova, kjer je objekt shranjen.

      Metoda equals(), kot že ime pove, se uporablja za izvajanje preproste enakovrednosti objektov. Osnovna izvedba metode je preverjanje referenc dveh objektov, da se preveri, ali sta enakovredna.

      Upoštevajte, da je običajno treba preglasiti metodo hashCode(), kadar koli je preglasena metoda equals(). To je potrebno za podporo splošni konvenciji metode hashCode, ki navaja, da morajo enaki objekti imeti enake hashcode.

      Metoda equals() mora določiti enakost med relacijami (mora biti ponavljajoča se, simetrična in tranzitivna). Poleg tega mora biti obstojen (če se objekt ni spremenil, mora metoda vrniti isto vrednost). Poleg tega mora o.equals(null) vedno vrniti lažno.

      hashCode() mora biti tudi obstojen (če objekt ni bil spremenjen s pogoji metode equals(), mora še naprej vračati isto vrednost.

      Razmerje med obema metodama je: vedno, če je a.equals(b), mora biti a.hashCode() enak b.hashCode().

    Vso srečo pri študiju!! Avtor članka Lokesh Gupta Izvirni članek Povezave do drugih delov:

    Za tiste, ki besedo Java Core slišijo prvič, so to temeljni temelji jezika. S tem znanjem se lahko mirno odpraviš na prakso/prakso. Ta vprašanja vam bodo pomagala osvežiti svoje znanje pred razgovorom ali se naučiti nekaj novega zase. Če želite pridobiti praktične veščine, se učite na JavaRush.

      Kako ustvariti nespremenljiv predmet v Javi? Naštejte vse prednosti

      Nespremenljiv razred je razred, katerega stanja po ustvarjanju ni mogoče spremeniti. Tu se stanje predmeta v bistvu šteje za vrednosti, shranjene v primerku razreda, pa naj bodo to primitivni tipi ali referenčni tipi.

      Da bi bil razred nespremenljiv, morajo biti izpolnjeni naslednji pogoji:

      1. Ne zagotavljajte nastaviteljev ali metod, ki spreminjajo polja ali objekte, ki se nanašajo na polja. Nastavljalci pomenijo spreminjanje stanja objekta, čemur se tu želimo izogniti.
      2. Naj bodo vsa polja končna in zasebna. Polja, označena kot zasebna, ne bodo dostopna zunaj razreda, če jih označite kot končna, pa zagotovite, da jih ne boste spremenili, niti slučajno.
      3. Ne dovolite, da podrazredi preglasijo metode. Najlažji način za to je, da razred razglasite za končnega. Dokončanih razredov v Javi ni mogoče preglasiti.
      4. Vedno si zapomnite, da so vaši primerki spremenljivk lahko spremenljivi ali nespremenljivi. Definirajte jih in vrnite nove objekte s kopirano vsebino za vse spremenljive objekte (referenčne vrste). Nespremenljive spremenljivke (primitivni tipi) je mogoče varno vrniti brez dodatnega truda.

      Prav tako se morate spomniti kasnejših prednosti nespremenljivih razredov. Morda jih boste potrebovali na razgovoru. Nespremenljivi razredi:

      • enostaven za načrtovanje, testiranje in uporabo
      • samodejno nitno varno in nima težav s sinhronizacijo
      • ne potrebujejo konstruktorja kopiranja
      • vam omogočajo, da leno inicializirate hashcode in predpomnite vrnjeno vrednost
      • ne zahteva varnega kopiranja, ko se uporablja kot polje
      • ustvarite dobre ključe zemljevida in elemente nabora (ti objekti ne smejo spremeniti stanja, ko so v zbirki)
      • naredite svoj razred trajen tako, da ga enkrat ustvarite in ga ni treba ponovno preverjati
      • vedno imeti »atomičnost napake« (izraz, ki ga je skoval Joshua Bloch): če nespremenljiv objekt vrže izjemo, ne bo nikoli ostal v neželenem ali nedefiniranem stanju.

      Oglejte si primer, napisan v tej objavi.

      Specifikacija Jave navaja, da se vse v Javi posreduje po vrednosti. V Javi ni takega, kot je "prenos po sklicevanju". Ti pogoji so povezani s klicanjem metod in podajanjem spremenljivk kot parametrov metode. V redu, primitivni tipi se vedno posredujejo po vrednosti brez zmede. Toda koncept mora biti jasen v kontekstu parametra metode kompleksnih vrst.


      V zgornjem primeru naslovne bite prve instance kopira druga referenčna spremenljivka, zaradi česar oba sklica kažeta na isto pomnilniško lokacijo, kjer je shranjen objekt. Ne pozabite, da z dodelitvijo vrednosti null drugi povezavi ne boste dodelili vrednosti null prvi povezavi. Toda sprememba stanja objekta z eno referenčno spremenljivko se bo odrazila v drugi povezavi.

      Kakšna je uporaba bloka finally? Ali ta blok zagotavlja izvajanje svoje kode? Kdaj končni blok ni priklican?

      Blok finally se vedno kliče, če obstaja blok try. To zagotavlja, da se končni blok pokliče, tudi če pride do nepričakovane izjeme. Toda končno je bolj uporaben kot samo obravnavanje izjem - ta blok vam omogoča, da počistite kodo, ki je bila pomotoma zaobljena z return, continue ali break. Postavitev kode za čiščenje v blok finally je vedno dobra praksa, tudi če ni pričakovati izjem.

      Če navidezni stroj zapre, medtem ko se izvaja blok poskusa ali ulova, potem blok finally ne bo izveden. Podobno, če nit izvaja blok poskusa ali ulova in je prekinjena ali ukinjena, končni blok ne bo izveden, čeprav se aplikacija še naprej izvaja.

      Zakaj obstajata dva razreda Date, eden v paketu java.util in drugi v java.sql?

      java.util.Date predstavlja datum in uro, medtem ko java.sql.Date predstavlja samo datum. Dodatek k java.sql.Date je razred java.sql.Time, ki predstavlja samo čas.

      Razred java.sql.Date je podrazred (razširitev) razreda java.util.Date. Kaj se je torej spremenilo v java.sql.Date:

      • toString() ustvari drugačno predstavitev niza: llll-mm-dd
      • statična metoda valueOf(String) ustvari datum iz niza z zgornjo predstavitvijo
      • pridobivalci in nastavljalci za ure, minute in sekunde so izključeni

      Razred java.sql.Date se uporablja v JDBC in je zasnovan tako, da nima časovne komponente, kar pomeni, da morajo biti ure, minute, sekunde in milisekunde enake nič ... vendar to za razred ni potrebno.

      Razložite vmesnike markerjev.

      Vzorec žetona vmesnika je oblikovalski vzorec v računalništvu, ki ga uporabljajo programski jeziki, ki zagotoviti informacije o objektih v času izvajanja. to ponuja način za povezovanje metapodatkov razreda, kjer jezik nima izrecne podpore za takšne metapodatke. V Javi se za to uporabljajo vmesniki brez podajanja metod.

      Dober primer vmesnika žetonov v Javi je vmesnik Serializable. Razred implementira ta vmesnik, da pokaže, da je njegove neprehodne podatke mogoče zapisati v tok bajtov ali v datotečni sistem.

      Glavni problem Označevalni vmesnik je, da vmesnik definira konvencijo za razrede, ki ga izvajajo, in to konvencijo podedujejo vsi podrazredi. To pomeni, da žetona ne boste mogli "deimplementirati". Če v zgornjem primeru ustvarite podrazred, ki ga ne želite serializirati (morda zato, ker je v prehodnem stanju), se morate zateči k izrecnemu vrženju NotSerializableException.

      Zakaj je metoda main() deklarirana kot javna statična praznina?

      Zakaj javno? Glavna metoda ima modifikator javnega dostopa, tako da lahko do nje dostopa povsod in kateri koli objekt, ki želi uporabiti to metodo za zagon aplikacije. Ne trdim, da imata JDK/JRE podoben razlog, ker java.exe ali javaw.exe (za Windows) uporabljata klic Java Native Interface (JNI) za zagon metode, tako da jo lahko vseeno pokličeta, ne glede na modifikator dostopa.

      Zakaj statično? Predpostavimo, da naša glavna metoda ni statična. Za klic katere koli metode potrebujete primerek razreda. Prav? Java omogoča preobremenjene konstruktorje, to vsi vemo. Katerega naj potem uporabimo in od kod bodo parametri za preobremenjeni konstruktor?

      Zakaj prazna? V navideznem stroju, ki dejansko kliče to metodo, vrnjena vrednost ni uporabna. Edina stvar, ki jo bo aplikacija želela sporočiti klicnemu procesu, je, ali se je zaključil normalno ali nenormalno. To je že mogoče z uporabo System.exit(int) . Vrednost, ki ni nič, pomeni nenormalno dokončanje, sicer je vse v redu.

      Kakšna je razlika med ustvarjanjem niza kot new() in ustvarjanjem literala (z uporabo dvojnih narekovajev)?

      Ko ustvarimo niz z uporabo new(), je ustvarjen v kopici in je prav tako dodan v skupino nizov, medtem ko je niz, ustvarjen z uporabo literala, ustvarjen samo v skupini nizov.

      Za odgovor na to ali podobna vprašanja se boste morali bolje seznaniti s konceptom združevanja nizov. Moj nasvet je, da se res naučite razreda String in skupine nizov.

      Kako deluje metoda substring() razreda String?

      Tako kot drugi programski jeziki so nizi v Javi zaporedje znakov. Ta razred je bolj podoben uporabnemu razredu za delo s tem zaporedjem. Zaporedje znakov zagotavlja naslednja spremenljivka:

      /** Vrednost se uporablja za shranjevanje znakov. */ /** Vrednost se uporablja za shranjevanje znakov */ zasebna končna vrednost char; Naslednje spremenljivke se uporabljajo za dostop do te matrike v različnih scenarijih /** Odmik je prvi indeks uporabljenega pomnilnika. */ /** Odmik je prvi indeks uporabljenega pomnilnika. */ zasebni končni int odmik; /** Število je število znakov v nizu. */ /** Count je število znakov v vrstici. */ zasebno končno int štetje;

      Vsakič, ko ustvarimo podniz iz obstoječega primerka niza, metoda substring() samo nastavi nove vrednosti za spremenljivki offset in count. Notranji niz znakov se ne spremeni. To je možen vir uhajanja pomnilnika, če se metoda substring() uporablja neprevidno:

      Prvotna vrednost se ne spremeni. Torej, če ustvarite niz, ki je dolg 10.000 znakov, in ustvarite 100 podnizov s 5–10 znaki, bo vseh 101 predmetov vseboval isto 10.000 znakov dolgo matriko znakov. To je nedvomno izguba spomina.

      Temu se je mogoče izogniti s spremembo kode na naslednji način:

      zamenjajte original.substring(beginIndex) z novim String(original.substring(beginIndex)), kjer je original originalni niz.

      Razložite delovanje HashMapa. Kako je rešen problem dvojnikov?

      Verjetno se vas večina strinja, da je HashMap dandanes najbolj priljubljena tema za pogovore v intervjujih. Če me kdo vpraša, naj vam povem "Kako deluje HashMap?", bom preprosto odgovoril: "Na podlagi načela zgoščevanja." Kakor preprosto je.

      Torej je zgoščevanje v bistvu način za dodelitev edinstvene kode kateri koli spremenljivki/predmetu po uporabi katere koli formule/algoritma za njegove lastnosti.

      Definicija zemljevida je: "Predmet, ki povezuje ključe z vrednostmi." Zelo preprosto, kajne? Torej HashMap vsebuje svoj notranji razred Entry, ki je videti tako:

      statični razred Entry implementira Map . Vstop( končni ključ K; vrednost V; vnos naslednji; končni int zgoščevalnik; …//Več kode je tukaj )

      Ko nekdo poskuša dati par ključ-vrednost v HashMap, se zgodi naslednje:

      • Najprej se preveri, ali je ključni objekt null. Če je ključ ničelni, je vrednost shranjena na položaju tabele. Ker je hashcode za null vedno 0.
      • Nato je naslednji korak izračun zgoščene vrednosti s klicem metode hashCode() spremenljivke ključa. Ta zgoščena vrednost se uporablja za izračun indeksa v matriko za shranjevanje predmeta Entry. Razvijalci JDK so se dobro zavedali, da je lahko metoda hashCode() slabo napisana in lahko vrne zelo veliko ali zelo majhno vrednost. Da bi rešili to težavo, so predstavili drugo metodo hash() in tej metodi posredovali hashcode predmeta, da bi to vrednost prenesli v obseg velikosti indeksa matrike.
      • Zdaj je poklicana metoda indexFor(hash, table.length) za izračun natančnega položaja za shranjevanje predmeta Entry.
      • Sedaj pa glavni del. Ker vemo, da imata lahko dva različna predmeta enako vrednost hashcode, kako bi bila dva različna predmeta shranjena na isti lokaciji v arhivu [imenovanem koš za smeti]?

      Odgovor je LinkedList. Če se spomnite, ima razred Entry lastnost »next«. Ta lastnost vedno kaže na naslednji objekt v verigi. To vedenje je zelo podobno LinkedList.

      Torej, v primeru ujemanja hashcode, so predmeti Entry shranjeni v obliki LinkedList. Ko je treba predmet Entry postaviti na določen indeks, HashMap preveri, ali na tej lokaciji obstaja drug predmet Entry? Če tam ni vnosa, bo naš objekt shranjen na tem mestu.

      Če je v našem indeksu že drug predmet, se potrdi njegovo naslednje polje. Če je ničelna, naš objekt postane naslednje vozlišče v LinkedList. Če next ni null, se ta postopek ponavlja, dokler ni najdeno naslednje polje, ki je null.

      Kaj se zgodi, če dodamo drugo ključno vrednost, enako tisti, ki smo jo dodali prej? Logično je, da mora nadomestiti staro vrednost. Kako se to zgodi? Po določitvi indeksa položaja za objekt Entry, ponavljanju čez LinkedList, ki se nahaja na našem indeksu, HashMap pokliče metodo equals() za vrednost ključa za vsak objekt Entry. Vsi ti predmeti Entry v LinkedList imajo enako vrednost hashcode, vendar bo metoda equals() preverila resnično enakost. Če je ključ. enako (k) bo prav, potem bosta oba zaznana kot isti predmet. To bo samo povzročilo zamenjavo predmeta vrednosti v objektu Entry.

      Na ta način HashMap zagotavlja, da so ključi edinstveni.

      Razlike med vmesniki in abstraktnimi razredi?

      To je zelo pogosto vprašanje, če ste na razgovoru za mlajšega programerja. Najpomembnejše razlike so navedene spodaj:

      • V vmesnikih Java so spremenljivke a priori končne. Abstraktni razredi lahko vsebujejo nekončne spremenljivke.
      • Vmesnik v Javi absolutno ne more imeti izvedbe. Abstraktni razred ima lahko primerke metode, ki izvajajo osnovno vedenje.
      • Komponente vmesnika morajo biti javne. Abstraktni razred ima lahko modifikatorje dostopa za vsak okus.
      • Vmesnik mora biti implementiran s ključno besedo implements. Abstraktni razred je treba razširiti s ključno besedo se razteza.
      • V Javi lahko razred implementira veliko vmesnikov, vendar lahko deduje le iz enega abstraktnega razreda.
      • Vmesnik je popolnoma abstrakten in ne more imeti primerkov. Abstraktni razred prav tako ne more imeti primerkov razreda, vendar ga je mogoče poklicati, če obstaja metoda main().
      • Abstraktni razred je nekoliko hitrejši od vmesnika, ker vmesnik pričakuje iskanje, preden pokliče katero koli preglaseno metodo v Javi. V večini primerov je to majhna razlika, a če pišete časovno kritično aplikacijo, morate to dejstvo upoštevati.
    1. Kdaj preglasite metodi hashCode() in equals()?

      Metodi hashCode() in equals() sta definirani v razredu Object, ki je nadrejeni razred vseh objektov Java. Iz tega razloga vsi objekti Java podedujejo osnovno izvedbo teh metod.

      Metoda hashCode() se uporablja za pridobitev enolične celoštevilske vrednosti za dani objekt. Ta vrednost se uporablja za določitev lokacije vedra, ko je treba objekt shraniti v podatkovno strukturo, kot je HashTable. Metoda hashCode() privzeto vrne celoštevilsko predstavitev pomnilniškega naslova, kjer je objekt shranjen.

      Metoda equals(), kot že ime pove, se uporablja za izvajanje preproste enakovrednosti objektov. Osnovna izvedba metode je preverjanje referenc dveh objektov, da se preveri, ali sta enakovredna.

      Upoštevajte, da je običajno treba preglasiti metodo hashCode(), kadar koli je preglasena metoda equals(). To je potrebno za podporo splošni konvenciji metode hashCode, ki navaja, da morajo enaki objekti imeti enake hashcode.

      Metoda equals() mora določiti enakost med relacijami (mora biti ponavljajoča se, simetrična in tranzitivna). Poleg tega mora biti obstojen (če se objekt ni spremenil, mora metoda vrniti isto vrednost). Poleg tega mora o.equals(null) vedno vrniti lažno.

      hashCode() mora biti tudi obstojen (če objekt ni bil spremenjen s pogoji metode equals(), mora še naprej vračati isto vrednost.

      Razmerje med obema metodama je: vedno, če je a.equals(b), mora biti a.hashCode() enak b.hashCode().

    Vso srečo pri študiju!! Avtor članka Lokesh Gupta Izvirni članek Povezave do drugih delov:
    Nalaganje...