Juhend tulevasele Java arendajale. Intervjuu ja karjäär. Keskmise Java arendaja intervjuud Java intervjuu korduma kippuvad küsimused

Kolisin teise linna, saan tööd, käin intervjuudel. Mulle tundus, et need küsimused, mida seal esitatakse, kuigi need on teada, koos kogutud, võivad aidata valmistuda ja tunda end enesekindlamalt.

Küsimused DBMS-i loomise põhimõtete mõistmiseks.
1. Mis on esimene normaalvorm ja normaliseerimisprotsess? Millised on tavalised vormid?
2. Mis on DBMS-i indeksi tähendus, kuidas need on paigutatud, kuidas neid hoitakse? Kuidas rakendaksite sama funktsiooni? Viimane küsimus esitatakse siis, kui indeksitest pole selget arusaama.
3. Joonistage mitu-mitmele suhe. Näiteks: tabelid Autorid ja Raamatud. Ühel autoril võib olla mitu raamatut ja raamatu võib kirjutada mitu autorit. Konkreetse autori raamatute valimiseks koostage SQL-päring.

Põhiküsimused Java kohta.
4. Java baasklass on teatavasti Object. Milliseid meetodeid saate nimetada?
5. Rääkige meile, mis on võrdsed ja hashCode? Millised reeglid ja kokkulepped kehtivad nende meetodite rakendamiseks? Millal neid kohaldatakse?
6. Räägi meile ootamisest, teata, teataKõik meetodid. Kuidas neid kasutatakse, millal, miks neid vaja on? Mis on sünkroniseeritud?
7. Mis on lõplik? Miks seda vaja on? Mida oskate öelda prügikoristaja ja selle algoritmide kohta.
8. Miks on kloonimismeetod kuulutatud kaitstuks? Mida on vaja kloonimise rakendamiseks?
9. Mis on modifikaatorid (juurdepääs ja muud)? Mis on muutlik ja mööduv? Mille jaoks ja millistel juhtudel oleks võimalik vaikimisi kasutada?

Java kollektsiooni raamistik
10. Millised on Java koguliidesed? Selgitage, kuidas need erinevad.
11. Milliseid nende liideste rakendusi teate?
12. Mis vahe on ArrayListil ja LinkedListil? Kuidas need on korraldatud? Millal tuleks neid kasutada.
13. Mis vahe on HashMapil ja TreeMapil? Kuidas need üles seatakse ja kuidas need töötavad? Kuidas on objektidele juurdepääsu ajaga, millised sõltuvused?
14. Mis on Hashtable, mille poolest see HashMapist erineb? Praeguseks on see aegunud. Kuidas te ikkagi soovitud funktsioone kasutate?

Erandid
15. Mis on erand? Milliseid erandeid te teate, kuidas need erinevad?
16. Kas saab välja pakkuda pusle proovi-püüa-lõpuks plokkidega ja küsimusega, mis tagastatakse või milline erand jääb lõpuks vahele?

Algoritmid
17. Milliseid sortimisalgoritme tead? Milliseid algoritme te teate?
Veelgi enam, siin on võimalikud erinevad lisaküsimused algoritmide keerukuse hindamise, nende võrdlemise kohta üksteisega.

Disaini mustrid.
18. Kas olete tuttav mõne disainimustriga?
19. Kirjutage Singleton... Ja laisa laadimisega. Mis siis, kui see peab olema niidikindel? Millal on laisk laadimine halvem?
20. Mida saate MVC kohta öelda? Joonistage diagramm ja selgitage, kuidas MVC töötab.

Küsimuste sari J2EE tehnoloogiakomplekti mõistmiseks.
21. Mis on servlet, jsp, nende erinevus?
22. Mis on Ajax? Kuidas on see tehnoloogia põhimõtteliselt korraldatud?
23. Mis on ORM, kuidas seda tõlkida ja kuidas see peaks töötama?

Lihtsad ülesanded algoritmide kirjutamiseks.
24. Kirjutage funktsioon faktoriaali arvutamiseks.
25. Arvestades Fibonacci arvude arvutamise funktsiooni, on teada, et see töötab. Leidke loogikaviga. Hinnake saadud algoritmi keerukust.
26. Pöörake stringi.
27. Arvutage massiivi keskmine.

Kasulik on meeles pidada, et kui te ei tunne end eriti enesekindlalt, ei pea te lisasõnu ütlema. Ütled lisasõna ja nad klammerduvad selle külge, kerivad keti lahti. Nad hüppavad asjadest, milles nad pole eriti kindlad. Seda inimeste oskust – klammerduda – tuleb kasutada, aga enda kasuks ;-)

Teadmised ja mõistmine... asjad on üsna erinevad, nii et
- erinevad algoritmid, näiteks sorteerimine, tuleks ise kirjutada, kasvõi õpikust. Vaadake, kuidas need üksteisest erinevad, võrrelge nende keerukust.
- kasulik on vaadata erinevaid utiliite ja teeke, klasside pakettidena rühmitamise põhimõtteid ning koodi kirjutamise stiili, kommenteerimist. See võib palju aidata juurdepääsu modifikaatorite ja projektikorralduse mõistmisel.
- millestki konkreetsest aru saades saad aidata neid, kes vähem teavad. Minge mis tahes foorumisse ja proovige vastata teemat huvitavatele küsimustele. Arutelus saate midagi enda jaoks võtta. Saate kirjutada lühikese artikli. Muidugi peate teemast hästi aru saama.
Igasugune enda kvalifikatsiooni tõstmisele suunatud töö on pädevale intervjueerijale nähtav ega jää tähelepanuta. Ainus asi, mida peate sellest ausalt rääkima, ärge alahinnake oma võimeid ja võimeid.
Et omada mingisuguseid võrdlusaluseid koolitamiseks või enda kui spetsialisti arendamiseks, võite vaadata midagi sarnast.

Tegelikult on ülaltoodud küsimused nooremarendaja tase, nagu ma seda ette kujutan. Kuskil võib-olla sügavamalt, kuskil vähem, aga faktina - Juunior.

Iga lahendus tekitab uusi probleeme.

See jaotis on pühendatud küsimustele, mida saab esitada Java programmeerija ametikoha intervjuu läbimisel.

Eesmärk on koguda ühte kohta mitte ainult küsimusi (neid on Internetis palju), vaid ka vastuseid neile.

Omistamise kohta lugege jaotise Intervjuu pealehelt

  1. Mitu märksõna on keele poolt reserveeritud, mis need sõnad on, milliseid ei kasutata?
  2. Millistest tähemärkidest võib muutuja nimi koosneda (õige identifikaator)?
  3. Mida tähendab sõna "initsialiseerimine"?
  4. Millised on peamised andmetüüpide rühmad?
  5. Milliseid primitiivseid tüüpe te teate?
  6. Mida teate primitiivsete andmetüüpide teisendamise kohta, kas on andmete kadu, kas on võimalik teisendada tõeväärtuslikku tüüpi?
  7. Millised väärtused on vaikimisi lähtestatud muutujad?
  8. Kuidas edastatakse muutuja väärtus (viite/väärtuse järgi)?
  9. Mida teate põhifunktsiooni kohta, millised on selle määratlemise eeldused?
  10. Milliseid loogikatehteid ja operaatoreid teate?
  11. Mis vahe on lühikeste ja pikkade loogiliste operaatorite tähistusel?
  12. Mis on tõetabel?
  13. Mis on kolmekordne valikoperaator?
  14. Milliseid ühe- ja kahendaritmeetilisi tehteid teate?
  15. Milliseid bitipõhiseid tehteid teate?
  16. Milline on valiklause (lüliti) kirjutamise roll ja reeglid?
  17. Milliseid tsükleid te teate, millised on nende erinevused?
  18. Mis on "tsükli iteratsioon"?
  19. Millised parameetrid on tsüklil for, kas neid saab ära jätta?
  20. Millist lauset kasutatakse tsükli koheseks peatamiseks?
  21. Millist lauset kasutatakse tsükli järgmisele iteratsioonile liikumiseks?
  22. Mis on massiiv?
  23. Mis tüüpi massiive te teate?
  24. Mida sa tead ümbristundidest?
  25. Mis on automaatne pakkimine (poksimine/lahtipakkimine)?

  1. Nimetage OOP põhimõtted ja kirjeldage igaüks neist.
  2. Defineerige mõiste "klass".
  3. Mis on klassi väli/atribuut?
  4. Kuidas õigesti korraldada juurdepääsu klassiväljadele?
  5. Defineerige mõiste "konstruktor".
  6. Mis vahe on vaikekonstruktoril, kopeerimiskonstruktoril ja parameetritega konstruktoril?
  7. Milliseid juurdepääsutaseme muudatusi teate, rääkige meile neist igaühe kohta.
  8. Rääkige meile ühe erakonstruktoriga klassi funktsioonidest.
  9. Mida ütlevad märksõnad “see”, “super”, kus ja kuidas neid kasutada saab?
  10. Defineerige mõiste "meetod".
  11. Mis on meetodi allkiri?
  12. Milliseid meetodeid nimetatakse ülekoormatud?
  13. Kas mittestaatilised meetodid võivad staatilisi meetodeid üle koormata?
  14. Rääkige meile ülimuslikest meetoditest.
  15. Kas meetod võib võtta erineva arvu parameetreid (muutuva pikkusega argumendid)?
  16. Kas meetodi alistamisel on võimalik juurdepääsutaset/tagasitüüpi kitsendada?
  17. Kuidas pääseda juurde vanemklassi alistatud meetoditele?
  18. Millised on ülalt-alla ja alt-üles teisendused?
  19. Mis vahe on alistamise ja ülekoormamise vahel?
  20. Kus saab staatilisi/mittestaatilisi välju lähtestada?
  21. Miks on instanceof operaatorit vaja?
  22. Miks meid vaja on ja mis on initsialiseerimisplokid?
  23. Milline on kahe klassi konstruktorite ja lähtestamisplokkide kutsumise järjekord: laps ja tema esivanem?
  24. Kus ja milleks kasutatakse abstraktset modifikaatorit?
  25. Kas meetodit on võimalik kuulutada korraga abstraktseks ja staatiliseks?
  26. Mida tähendab staatiline märksõna?
  27. Millistele Java konstruktsioonidele staatiline modifikaator kehtib?
  28. Mis juhtub, kui staatilises koodiplokis ilmneb erand?
  29. Kas staatilist meetodit on võimalik üle koormata?
  30. Mis on staatiline klass, millised on selle kasutamise omadused?
  31. Millised on lõplike staatiliste muutujate lähtestamise omadused?
  32. Kuidas mõjutab staatiline modifikaator klassi/meetodit/välja?
  33. Mida tähendab viimane märksõna?
  34. Defineerige mõiste "liides".
  35. Millised on liidese väljade ja meetodite vaikemuutjad?
  36. Miks ei saa liidesemeetodit kuulutada lõplikuks või staatiliseks?
  37. Mis tüüpi klassid javas on (pesastatud jne)
  38. Millised on pesastatud klasside loomise omadused: lihtsad ja staatilised.
  39. Mida teate pesastatud klasside kohta, miks neid kasutatakse? Klassifitseerimine, kasutusjuhud, kapseldamise rikkumine.
  40. Mis vahe on pesastatud ja sisemiste klasside vahel?
  41. Milliseid klasse nimetatakse anonüümseteks?
  42. Kuidas pääseda pesastatud klassist välise klassi väljale?
  43. Kuidas pääsete ligi meetodi kohalikule muutujale selle meetodi põhiosas deklareeritud anonüümsest klassist? Kas sellisel muutujal on mingeid piiranguid?
  44. Kuidas on mis tahes kohandatud klass seotud objektiklassiga?
  45. Rääkige meile igast objektiklassi meetodist.
  46. Mis on võrdub() meetod. Mille poolest see erineb == operatsioonist.
  47. Kui soovite alistada võrdub(i), siis millised tingimused peavad olema alistatud meetodi jaoks täidetud?
  48. Kui võrdsus() on tühistatud, kas on muid meetodeid, mida tuleks tühistada?
  49. Mis on hashCode ja equals meetodite eripära? Kuidas rakendatakse klassis Object meetodeid hashCode ja equals? Millised reeglid ja kokkulepped kehtivad nende meetodite rakendamiseks? Millal neid kohaldatakse?
  50. Milline meetod tagastab objekti stringi esituse?
  51. Mis juhtub, kui alistate võrdsed ilma hashCode'i alistamata? Millised probleemid võivad tekkida?
  52. Kas on mingeid juhiseid selle kohta, milliseid välju tuleks hashCode'i arvutamisel kasutada?
  53. Kas arvate, et tekib probleeme, kui hashMapis võtmena kasutatav objekt muudab välja, mis osaleb hashCode'i definitsioonis?
  54. Mis vahe on abstraktsel klassil ja liidesel, millistel juhtudel te seda kasutate?
  55. Kas privaatklassi muutujatele on võimalik juurde pääseda ja kui jah, siis kuidas?
  56. Mis on muutlik ja mööduv? Mille jaoks ja millistel juhtudel oleks võimalik vaikimisi kasutada?
  57. Modifikaatorite laiendamine meetodite pärimisel, alistamisel ja peitmisel. Kui vanemklassil on privaatmeetod, kas laps saab selle nähtavust laiendada? Mis siis, kui kaitstud? Ja nähtavuse kitsendamiseks?
  58. Kas meetodit on mõtet privaatseks lõplikuks kuulutada?
  59. Millised on lõpliku muutuja lähtestamise omadused?
  60. Mis juhtub, kui ainus klassikonstruktor kuulutatakse lõplikuks?
  61. Mis on lõpetamine? Miks seda vaja on? Mida oskate öelda prügikoristaja ja selle algoritmide kohta.
  62. Miks on kloonimismeetod kuulutatud kaitstuks? Mida on vaja kloonimise rakendamiseks?
  63. Kas olete mõne disainimustriga tuttav?
  64. Kirjutage Singleton... Aga laisa laadimisega. Mis siis, kui see peab olema niidikindel? Millal on laisk laadimine halvem?
  65. Mida saate MVC kohta öelda? Joonistage diagramm ja selgitage, kuidas MVC töötab.
  66. Kirjutage faktoriaali arvutamiseks funktsioon.
  67. Arvestades Fibonacci arvude arvutamise funktsiooni, on teada, et see töötab. Leidke loogikaviga. Hinnake saadud algoritmi keerukust.

  1. Defineeri "välistus"
  2. Mis on erandite hierarhia.
  3. Kas ma saan/kas ma peaksin käsitlema jvm-vigu?
  4. Millised on võimalused erandite käsitlemiseks?
  5. Mida tähendab visked märksõna?
  6. Mis on lõpliku bloki puhul erilist? Kas see on alati täidetud?
  7. Kas erandite püüdmisel ei saa olla püüdmisplokki?
  8. Kas võiksite mõelda olukorrale, kus lõplikku blokki ei täideta?
  9. Kas üks püüdmisplokk saab püüda mitu erandit (samast ja erinevatest pärimisharudest)?
  10. Mida teate käsitletud ja töötlemata (kontrollitud/kontrollimata) erandite kohta?
  11. Mis on RuntimeExceptionis erilist?
  12. Kuidas kirjutada oma ("kohandatud") erandit? Millistest motiividest juhindute erandi tüübi valimisel: märgitud / märkimata?
  13. Milline operaator lubab erandit sundida?
  14. Kas meetodil, mis võib potentsiaalselt erandi teha, on lisatingimusi?
  15. Kas põhimeetod võib erandi välja jätta ja kui jah, siis kus seda erandit käsitletakse?
  16. Kui tagastamislause sisaldub nii püüdmisplokis kui ka lõplikus plokis, siis kumb on "olulisem"?
  17. Mida teate OutOfMemoryErrorist?
  18. Mida teate SQLExceptionist? Mis tüüpi kontrollitud või kontrollimata see on, miks?
  19. Mis on viga? Sel juhul kasutatakse valikut Error. Too näide vea kohta.
  20. Millist konstruktsiooni kasutatakse Javas erandite käsitlemiseks?
  21. Oletame, et on olemas try-finally blokk. Prooviblokis tehti erand ja täitmine viidi lõpuks blokki. Viimane blokk viskas ka erandi. Milline kahest erandist "viskab" try-finally blokist välja? Mis saab teise erandiga?
  22. Oletame, et on olemas meetod, mis võib IOExceptioni ja FileNotFoundExceptioni visata, mis järjekorras peaksid püüdmisplokid minema? Mitu püüdmisplokki täidetakse?

  1. Defineerige mõiste "kollektsioon".
  2. Loetlege kogude kasutamise eelised.
  3. Milliseid andmeid kogud saavad salvestada?
  4. Mis on kogude hierarhia?
  5. Mida sa tead Listi kogudest?
  6. Mida sa tead Seti kollektsioonidest?
  7. Mida sa tead Queue kogudest?
  8. Mida sa tead kaardikogudest, mis on nende põhimõtteline erinevus?
  9. Nimetage loendi, komplekti, kaardi peamised teostused.
  10. Milliseid SortedSeti rakendusi teate ja millised on nende omadused?
  11. Millised on loendi ja komplekti erinevused/sarnasused?
  12. Mis vahe on/ühine on ArrayList ja LinkedList klasside vahel, millal on parem kasutada ArrayListi ja millal LinkedListi?
  13. Millal on mõistlik kasutada massiivi ArrayListi asemel?
  14. Mille poolest ArrayList erineb Vectorist?
  15. Mida teate klasside HashSet ja TreeSet rakendamisest?
  16. Mis vahe on HashMapil ja TreeMapil? Kuidas need üles seatakse ja kuidas need töötavad? Kuidas on objektidele juurdepääsu ajaga, millised sõltuvused?
  17. Mis on Hashtable, mille poolest see HashMapist erineb? Praeguseks on see aegunud. Kuidas te ikkagi soovitud funktsioone kasutate?
  18. Mis juhtub, kui paneme kaardile kaks väärtust sama võtmega?
  19. Kuidas on seatud kogus olevate objektide järjekord, kuidas koguda sorteerida?
  20. Defineerige mõiste "iteraator".
  21. Milliseid funktsioone pakub klass Collections?
  22. Kuidas saada mittemuutuva kollektsiooni?
  23. Milliseid kogusid sünkroonitakse?
  24. Kuidas saada sünkroonimata kogu sünkroonimata kollektsioonist?
  25. Kuidas saada kirjutuskaitstud kogu?
  26. Miks Map ei päri kogust?
  27. Mis vahe on Iteraatoril ja Loendamisel?
  28. Kuidas foreach-silmust rakendatakse?
  29. Miks pole kogusse elementide lisamiseks meetodit iterator.add()?
  30. Miks ei ole iteraatoriklassil meetodit järgmise elemendi saamiseks ilma kursorit liigutamata?
  31. Mis vahe on Iteratoril ja ListIteratoril?
  32. Kuidas on võimalik kõiki loendi elemente itereerida?
  33. Mis vahe on tõrkekindlatel ja tõrkekindlatel omadustel?
  34. Mida peaksin tegema, et vältida ConcurrentModificationException'i viskamist?
  35. Mis on virn ja järjekord, öelge meile, millised on nende erinevused?
  36. Mis vahe on võrreldava ja võrdleva liidese vahel?
  37. Miks ei päri kogud kloonitavaid ja jadastatavaid liideseid?

  1. Milliseid keelpilliklasse te teate?
  2. Millised on "stringi" klasside peamised omadused (nende omadused)?
  3. Kas stringitüüpi on võimalik pärida, miks?
  4. Defineerige termin stringi konkatenatsioon.
  5. Kuidas stringi numbriks teisendada?
  6. Kuidas võrrelda kahe stringi väärtust?
  7. Kuidas stringi ümber pöörata?
  8. Kuidas kahe stringi võrdlemine toimib?
  9. Kuidas kärpida tühikuid stringi lõpus?
  10. Kuidas asendada tähemärki stringis?
  11. Kuidas saada osa stringist?
  12. Defineerige mõiste "stringikogum".
  13. Milline meetod võimaldab teil valida stringis alamstringi?
  14. Kuidas jagada string antud eraldaja abil alamstringideks?
  15. Millist meetodit nimetatakse muutuja teisendamiseks stringiks?
  16. Kuidas teada saada stringi konkreetse märgi väärtust, teades selle järjekorranumbrit stringis?
  17. Kuidas leida stringist vajalik märk?
  18. Kas reajuurdepääsu on võimalik sünkroonida?
  19. Mida teeb intern() meetod?
  20. Mille poolest erinevad klassid String, StringBuffer ja StringBuilder ning mis on neil ühist?
  21. Milline on õige viis kahe erineva String ja StringBuffer tüüpi objekti stringiväärtuste võrdlemiseks?
  22. Miks on string Javas muutumatu ja lõpetatud?
  23. Miks eelistatakse paroolide salvestamiseks märgimassiivi stringile?
  24. Miks on string Java HashMapis populaarne võti?
  25. Kirjutage meetod antud märgi stringist eemaldamiseks.

  1. Millised on I/O-voogude tüübid?
  2. Nimetage I/O voogude peamised esivanemad.
  3. Millised on järgmiste voogude sarnasused ja erinevused: InputStream, OutputStream, Reader, Writer?
  4. Mida teate RandomAccessFile'i kohta?
  5. Millised on failidele juurdepääsu režiimid?
  6. Millistes pakettides on vooklassid?
  7. Mida teate pealisehituse klassidest?
  8. Milline lisaklass võimaldab teil lugeda andmeid sisendbaitivoost primitiivsete andmetüüpide vormingus?
  9. Milline lisandmoodul võimaldab teil puhvri abil lugemist/kirjutamist kiirendada?
  10. Millised klassid võimaldavad teisendada baitide vooge märgivoogudeks ja vastupidi?
  11. Milline klass on loodud töötama failisüsteemi (EFS) elementidega?
  12. Mis märk on eraldaja EFS-i tee määramisel?
  13. Kuidas valida kriteeriumi järgi teatud kataloogi kõik EFS-id (näiteks teatud laiendiga)?
  14. Mida teate FilenameFilteri liidese kohta?
  15. Mis on serialiseerimine?
  16. Millised on objekti "ohutu" serialiseerimise tingimused?
  17. Millised klassid võimaldavad teil objekte arhiveerida?

  1. Defineerige mõiste "protsess".
  2. Defineerige mõiste "vool".
  3. Defineerige mõiste "lõime sünkroniseerimine".
  4. Kuidas programmid, protsessid ja lõimed omavahel suhtlevad?
  5. Millal on soovitatav luua mitu lõime?
  6. Mis võib juhtuda, kui kaks lõime käivitavad programmis sama koodi?
  7. Mida teate programmi põhilõime kohta?
  8. Millised on lõimede loomise ja käitamise viisid?
  9. Milline meetod käivitab lõime täitmiseks?
  10. Milline meetod kirjeldab lõime tegevust täitmise ajal?
  11. Millal lõime täitmise lõpetab?
  12. Kuidas meetodit sünkroonida?
  13. Kuidas sundida lõime peatama?
  14. Defineerige mõiste "deemoni niit".
  15. Kuidas luua deemoni lõime?
  16. Kuidas saada praegust lõime?
  17. Defineerige mõiste "monitor".
  18. Kuidas lõime täitmist peatada?
  19. Millistes olekutes võib voog olla?
  20. Mis on monitor mittestaatilise ja staatilise meetodi kutsumisel?
  21. Mis on monitor meetodi koodi osa täitmisel?
  22. Millised meetodid võimaldavad teil lõimede täitmist sünkroonida?
  23. Milline meetod paneb lõime ooterežiimi?
  24. Mis on teavitus- ja teatamismeetodite funktsionaalsus?
  25. Mida ühendamismeetod teeb?
  26. Millised on ootamise/teavitamise meetodi kutsumise tingimused?
  27. Defineerige mõiste "vastastikune blokeerimine".
  28. Mis vahe on katkestus-, katkestus- ja isinterrupted-meetoditel?
  29. Millisel juhul visatakse KatkestatudErand, millised meetodid võivad seda visata?
  30. lenduvad modifikaatorid ja saagise() meetod.
  31. Pakett java.util.concurrent
  32. On mõni meetod, mis teostab i++ operatsiooni. Muutuja i tüüpi int. Eeldatakse, et kood käivitatakse mitme lõimega keskkonnas. Kas plokk tuleks sünkroonida?
  33. Mida kasutatakse mutexina, kui meetod on kuulutatud staatiliseks sünkroonituks? Kas staatilise sünkroonitud meetodi töötamise ajal on võimalik klassi uusi eksemplare luua?
  34. Oletame, et käitamismeetodis ilmnes RuntimeException, mida ei püütud. Mis saab voolust? Kas on võimalik teada saada, et erand on toimunud (ilma kogu jooksu keha try-catch plokki mähkimata)? Kas on võimalik pärast selle juhtumist lõime uuesti üles saada?
  35. Milliseid standardseid Java tööriistu te lõimekogumi rakendamiseks kasutaksite?
  36. Mis on ThreadGroup ja miks seda vaja on?
  37. Mis on ThreadPool ja miks seda vaja on?
  38. Mis on ThreadPoolExecutor ja miks seda vaja on?
  39. Mis on Java "aatomitüübid"?
  40. Miks on ThreadLocal klassi vaja?
  41. Mis on täitja?
  42. Mis on ExecutorService?
  43. Miks on ScheduledExecutorService'i vaja?
See loend 300+ küsimusest (ilma vastusteta) leiti aadressilt http://becomejavasenior.com/ . Seal on loetletud ka teised autorid.

58489 vaatamist kokku 15 vaatamist täna

Vaatamisi: 38 283

  • Mis on OOP?
  • Mis on objekt?
  • Nimeta OOP põhiprintsiibid.
  • Mis on pärimine?
  • Mis on polümorfism? Milliseid Java polümorfismi ilminguid teate?
  • Mis on kapseldamine?
  • Mis on abstraktsioon?
  • Millised on objektorienteeritud programmeerimiskeelte eelised?
  • Kuidas objektorienteeritud lähenemisviisi kasutamine tarkvaraarendust parandab?
  • On olemas väljend "on" ja "on". Mida need OOP põhimõtete tähenduses tähendavad? Mis vahe on koostisel ja koondamisel?
  • Mida te mõtlete polümorfismi, kapseldamise ja dünaamilise sidumise all?

java tuum.

  • Mis vahe on JRE, JVM ja JDK vahel?
  • Kirjeldage Java juurdepääsu modifikaatoreid.
  • Mis on paketitaseme juurdepääs.
  • Mille poolest erineb abstraktne klass liidesest? Millal kasutaksite abstraktset klassi ja millal liidest?
  • Kas objekt pääseb juurde privaatklassi muutujale? Kui jah, siis kuidas?
  • Mille jaoks on Java-s staatilised plokid?
  • Kas staatilist meetodit on võimalik üle koormata?
  • Räägi meile siseklassidest. Millal te neid kasutate?
  • Mis vahe on eksemplari muutujal ja staatilisel muutujal? Too näide.
  • Tooge näide, millal saate kasutada staatilist meetodit?
  • Rääkige meile laaduriklassidest ja dünaamilise klassi laadimisest.
  • Mis on Java-operaatori "assert" eesmärk?
  • Miks mõned liidesed meetodeid üldse ei määratle?
  • Mis on peamine erinevus Stringi, StringBufferi ja StringBuilderi vahel?
  • Rääkige mulle Java I/O voogudest.
  • Mis on kuhja- ja virnamälu Javas?
  • Mis vahe on Javas Stack ja Heap mälul?
  • Rääkige meile Java mälumudelist?
  • Kuidas prügivedaja töötab?
  • Rääkige meile tüübivalamisest. Mis on alandamine ja edutamine? Millal saate ClassCasti erandi?
  • Mis on staatiline klass, millised on selle kasutamise omadused?
  • Kuidas pääseda pesastatud klassist välise klassi väljale.
  • Mis tüüpi pesastatud klasse on olemas? Milleks neid kasutatakse?
  • Kas meetodi alistamisel on võimalik muuta:
  • Juurdepääsu muutja
  • tagastamise tüüp
  • Argumendi tüüp või arv
  • Argumendi nimi
  • Kas muuta järjekorda, kogust või eemaldada visete sektsioon üldse?
  • Mis on autoboxing?
  • Mis on geneerilised ravimid?
  • Mis on Javas üldiste tüüpide kasutamise tegelik eesmärk?
  • Kuidas antakse muutujaid meetoditele, väärtuse või viite alusel?
  • Millised meetodid on klassis Object?
  • Reeglid meetodi Object.equals() tühistamiseks.
  • Kui soovite alistada võrdub(i), siis millised tingimused peavad olema alistatud meetodi jaoks täidetud?
  • Milline on seos hashCode'i ja võrdsete vahel?
  • Kuidas rakendatakse klassis Object meetodeid hashCode ja equals?
  • Mis juhtub, kui alistate võrdsed ilma hashCode'i alistamata? Millised probleemid võivad tekkida?
  • Kas on mingeid juhiseid selle kohta, milliseid välju tuleks hashCode'i arvutamisel kasutada?
  • Mille jaoks on meetod hashCode()?
  • Reeglid meetodi Object.hashCode() alistamiseks.
  • Rääkige meile objektide kloonimisest. Mis vahe on madalal ja sügaval kloonimisel?
  • Reeglid meetodi Object.clone() alistamiseks.
  • Kus ja kuidas saab erakonstruktorit kasutada?
  • Mis on vaikekonstruktor?
  • Kirjeldage meetodit Object.finalize().
  • Mis vahe on sõnadel lõplik, lõplik ja lõplik?
  • Kirjeldage erandite hierarhiat.
  • Milliseid Java erandeid teate, kuidas need erinevad?
  • Mis on märgitud ja märkimata erand?
  • Kuidas luua oma märkimata erand?
  • Mis on märke tühistamise erandid?
  • Mis on viga?
  • Kirjeldage, kuidas plokk proovi-püüa-lõpuks töötab.
  • Kas on võimalik kasutada try-finally (ilma püüdmiseta) plokki?
  • Kas lõplik blokk täidetakse alati?
  • Millised on String-klassi omadused? mida teeb intern() meetod.
  • Kas stringitüüpi on võimalik pärida, miks?
  • Miks on string Java HashMapis populaarne võti?
  • Defineerige termin stringi konkatenatsioon.
  • Kuidas stringi ümber pöörata?
  • Kuidas võrrelda kahe stringi väärtust?
  • Kuidas kärpida tühikuid stringi alguses ja lõpus?
  • Defineerige mõiste "stringikogum".
  • Kas reajuurdepääsu on võimalik sünkroonida?
  • Milline on õige viis kahe erineva String ja StringBuffer tüüpi objekti stringiväärtuste võrdlemiseks?
  • Miks on string Javas muutumatu ja lõpetatud?
  • Kirjutage meetod antud märgi stringist eemaldamiseks.
  • Mis on peegeldus?
  • Mis juhtub prügikogujaga (GC), kui mõne objekti finalize() meetodi täitmisel tekib erand?
  • Mis on rahvusvahelistumine, lokaliseerimine?
  • Mis on Java annotatsioonid?
  • Milliseid funktsioone annotatsioon täidab?
  • Milliseid Java sisseehitatud märkusi teate?
  • Mida teevad märkused @Retention, @Documented, @Target ja @Inherited?
  • Mida teevad märkused @Override, @Deprecated, @SafeVarargs ja @SuppressWarnings?
  • Millise märkuste elutsükli saab määrata funktsiooniga @Retention?
  • Milliseid elemente saab annoteerida, kuidas seda täpsustada?
  • Kuidas annotatsiooni luua?
  • Mis tüüpi atribuudid on märkustes lubatud?
  • Mis on JMX?
  • Milliseid eeliseid JMX pakub?
  • Mida saab JMX peale kaugjuhtimispuldi veel teha?
  • Mis on MBean?
  • Mis tüüpi MBeanid on olemas?
  • Mis on MBean Server?
  • Millised mehhanismid tagavad Java-tehnoloogia turvalisuse?
  • Milliseid kontrolle Java baitkoodi kontrollija teeb?
  • Mida sa tead Java "kaitsehaldurist"?
  • Mis on JAS?
  • Mis on ümberfaktorimine?

Java kollektsioonide raamistik.

  • Mis on kollektsioon?
  • Nimeta kogude peamised liidesed ja nende teostus.
  • Mille poolest ArrayList erineb LinkedListist? Millistel juhtudel on parem kasutada esimest ja millistel teist?
  • Mis vahe on HashMapil ja Hashtableil?
  • Mille poolest ArrayList erineb Vectorist?
  • Kuidas võrreldakse kollektsiooni elemente?
  • Järjestage hierarhias järgmised liidesed: loend, komplekt, kaart, sorteeritud kogum, sorteeritud kaart, kogumik, itereeritav, iteraator, navigeeritav kogum, kaart.
  • Miks ei ole kaart kogu, samas kui loend ja komplekt on kogu?
  • Defineerige mõiste "iteraator".
  • Mida teate Iterable liidese kohta?
  • Kuidas teisendada HashSet ühel real ArrayListiks?
  • Kuidas teisendada ArrayList ühel real HashSetiks?
  • Kuidas itereerida kõiki kaardi klahve, arvestades, et kaart ei ole itereeritav?
  • Kuidas itereerida kõiki kaardi väärtusi, arvestades, et kaart ei ole itereeritav?
  • Kuidas itereerida kõiki võtme-väärtuse paare kaardil, kuna kaart ei ole itereeritav?
  • Mis on SortedMapi ​​"sorteerimine" peale selle, et toString() prindib kõik järjekorras?
  • Kuidas kopeerida elemente mis tahes kogust massiivi ühe kõnega?
  • Rakendage kahe kogumi sümmeetriline erinevus, kasutades kogumismeetodeid (addAll(), removeAll(), retainAll()).
  • Võrrelge loendust ja iteraatorit.
  • Kuidas on Iterable ja Iterator seotud?
  • Milline on suhe Iterable, Iteratori ja Java 5-s kasutusele võetud "for-each" vahel?
  • Võrrelge Iteraatorit ja ListIteraatorit.
  • Mis juhtub, kui kutsun faili Iterator.next() ilma Iterator.hasNext() küsimata?
  • Mis juhtub, kui ma helistan Iterator.next() enne Iterator.hasNext() 10 korda? Kas mul on 9 eset puudu?
  • Kui mul on kogu ja alamiteraator, kas kogu muutub, kui kutsun iterator.remove()?
  • Kui mul on kogu ja alamiteraator, kas iteraator muutub, kui kutsun kutsun collection.remove(..)?
  • Miks nad lisasid ArrayListi, kui vektor oli juba olemas?
  • ArrayList klassi realisatsioonil on järgmised väljad: Object elementData, int size. Selgitage, miks peate suuruse eraldi salvestama, kui saate alati võtta elementData.length?
  • Kas LinkedList on üksikult lingitud, topeltlingitud või neljalingitud loend?
  • Mis on halvim aeg sisaldavad() meetodi jaoks elemendi jaoks, mis on lingitud loendis (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N) )?
  • Mis on halvim aeg sisaldavad() meetodi jaoks massiiviloendis oleva elemendi jaoks (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N) )?
  • Mis on LinkedList add() meetodi halvim aeg (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Mis on ArrayList add() meetodi halvim aeg (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Kui palju elemente ArrayList.add() kutsumisel mällu eraldatakse?
  • Mitu elementi eraldatakse mällu, kui kutsutakse LinkedList.add()?
  • Kas hinnata mälumahtu, et salvestada LinkedListis üks primitiivne tüüpbait?
  • Kas hinnata mälumahtu, et salvestada ArrayListis üks primitiivne tüüpbait?
  • Lisan loendi keskele elemendi: list.add(list.size()/2, newElem). Kelle jaoks on see toiming aeglasem – ArrayListi või LinkedListi jaoks?
  • Kuidas itereerida LinkedListi elemente vastupidises järjekorras ilma aeglast get(indeks) kasutamata?
  • Kuidas saada nimekirja kõigi elementidega, välja arvatud esimene ja viimane 3, ühe kõnega loendist?
  • Kas erinevatel objektidel mälus (ref0 != ref1) võib olla ref0.hashCode() == ref1.hashCode()?
  • Kas erinevatel objektidel mälus (ref0 != ref1) võib olla ref0.equals(ref1) == true?
  • Kas erinevad viited samale objektile mälus (ref0 == ref1) võivad olla ref0.equals(ref1) == false?
  • Seal on klass Point(int x, y;). Miks on räsikood kujul 31 * x + y eelistatavam kui x + y?
  • Kui klass Point(int x, y;) on "õige" võrdusmeetodi rakendamiseks (tagasi ref0.x == ref1.x && ref0.y == ref1.y), kuid tee räsikood int hashCode( ) ( tagasta x;), kas sellised punktid paigutatakse õigesti ja võetakse räsikomplektist välja?
  • equals() genereerib samaväärsuse seose. Millised omadused on sellisel seosel: kommutatiivsus, sümmeetria, refleksiivsus, distributiivsus, assotsiatiivsus, transitiivsus?
  • Kas võrdsust (Object that) (tagasi this.hashCode() == that.hashCode()) on võimalik niimoodi realiseerida?
  • Võrdne nõuab kontrollimist, et argument (võrdub(Objekt, mis)) on sama tüüpi kui objekt ise. Mis vahe on this.getClass() == that.getClass() ja sellel MyClassi eksemplaril?
  • Kas klassi MyClass võrdsuse meetodit on võimalik rakendada järgmiselt: klass MyClass (avalik tõeväärtus võrdub(MyClass that) (tagasta see == that;))?
  • Kas HashMap töötab, kui kõik võtmed tagastavad in hashCode() (tagastab 42;)?
  • Miks nad lisasid HashMapi, kui Hashtable oli juba olemas?
  • Knuthi ja Kormeni sõnul on räsitabelil kaks peamist teostust: avatud adresseerimisel ja aheldamise meetodil põhinev. Kuidas HashMapi rakendatakse? Miks nad seda tegid (teie arvates)? Millised on iga lähenemisviisi plussid ja miinused?
  • Kui palju lingil klõpsatakse, kui teete tabelis oleva võtmega HashMap.get(key)?
  • Kui palju uusi objekte luuakse, kui lisate HashMapile uue elemendi?
  • Kuidas HashMap töötab, kui proovite salvestada sellesse kahte elementi sama räsikoodiga võtmete abil, kuid mille puhul on == false?
  • HashMap võib muutuda loendiks isegi erineva räsikoodiga võtmete puhul. Kuidas on see võimalik?
  • Milline on halvim aeg get(key) meetodi jaoks võtme jaoks, mida tabelis pole (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N ))?
  • Mis on halvim aeg get(key) meetodi jaoks võtme jaoks, mis on tabelis (O(1), O(log(N)), O(N), O(N*log(N)), O (N*N ))?
  • Selgitage parameetrite tähendust konstruktoris HashMap(int originCapacity, float loadFactor).
  • Mis vahe on HashMapil ja IdentityHashMapil? Milleks IdentityHashMap on mõeldud? Kuidas võib serialiseerimise või kloonimise rakendamine olla kasulik?
  • Mis vahe on HashMapil ja WeakHashMapil? Mille jaoks WeakHashMap on mõeldud?
  • WeakHashMap kasutab WeakReferences'i. Miks mitte luua SoftHashMapi SoftReferencesis?
  • WeakHashMap kasutab WeakReferences'i. Miks mitte luua PhantomHashMap PhantomReferencesis?
  • Tehke HashMapist räsikomplekt (kasutage ainult mitut võtit, mitte mitut väärtust).
  • Tehke HashMap rakendusest HashSet(HashSet >).
  • Võrrelge liideseid java.util.Queue ja java.util.Deque.
  • Kes keda pikendab: Queue pikendab Deque'i või Deque pikendab järjekorda?
  • Miks LinkedList rakendab nii loendit kui ka deque'i?
  • Mis vahe on java.util.Arrays ja java.lang.reflect.Array klassidel?
  • Mis vahe on klassidel java.util.Collection ja java.util.Collections?
  • Kirjutage lõimeta programm, mis põhjustab kogule ConcurrentModificationExceptioni.
  • Mis on "tõrgeteta käitumine"?
  • Kas enumikomplektide jaoks on olemas eriklass java.util.EnumSet? Milleks? Miks ei meeldinud autoritele HashSet või TreeSet?
  • java.util.Stack – loetakse "aegunud". Millega seda soovitatakse asendada? Miks?
  • Milline kollektsioon rakendab FIFO teenusedistsipliini?
  • Milline kollektsioon rakendab FILO teenusedistsipliini?
  • Tooge näide, kui kogu annab välja UnsupportedOperationExceptioni.
  • Miks te ei saa kirjutada "ArrayList numbrid = uus ArrayList ();" aga saate "Loend numbrid = uus ArrayList ();"?
  • LinkedHashMap – mis see "metsaline" on? Mis on selles LinkedListist ja mis HashMapist?
  • LinkedHashSet – mis see "metsaline" on? Mis on selles LinkedListist ja mis HashSetist?
  • Nad ütlevad, et LinkedHashMapis on lihtne vahemälu luua kehtetuks tunnistamise poliitikaga, kas teate, kuidas?
  • Mida võimaldab PriorityQueue teil teha?
  • Mille poolest erinevad java.util.Comparator ja java.lang.Comparable?

Java 8.

  • Mis on sümboolne link?
  • Mis vahe on I/O ja NIO vahel?
  • Milliseid NIO funktsioone te teate?
  • Millised on I/O-voogude tüübid?
  • Nimetage sisend/väljundvoogude põhiklassid.
  • Mille poolest OutputStream, InputStream, Writer, Reader erinevad ja mis on neil ühist?
  • Milliseid baasklassi InputStream alamklasse teate, milleks need on?
  • Mida teate RandomAccessFile'i kohta?
  • Millised failile juurdepääsu režiimid RandomAccessFile'il on?
  • Mis on OutputStreami põhiklassi alamklassid ja kas teate, milleks need on mõeldud?
  • Milleks PushbackInputStreami kasutatakse?
  • Milleks SequenceInputStreami kasutatakse?
  • Milliseid Readeri baasklassi alamklasse teate, milleks need on mõeldud?
  • Milliseid Writeri baasklassi alamklasse teate, milleks need on?
  • Mis on absoluutne tee ja suhteline tee?
  • Millistes pakettides on vooklassid?
  • Mida teate pealisehituse klassidest?
  • Milline lisandklass võimaldab teil lugeda andmeid sisendbaitivoost primitiivsete andmetüüpide vormingus?
  • Milline lisandmoodul võimaldab teil puhvri abil lugemist/kirjutamist kiirendada?
  • Millised klassid võimaldavad teisendada baitide vooge märgivoogudeks ja vastupidi?
  • Mis vahe on PrintWriteri klassil ja PrintStreami klassil?
  • Milline klass on loodud failisüsteemi elementidega töötamiseks?
  • Mis tähemärk on eraldaja failisüsteemis tee määramisel?
  • Milliseid failiklassi meetodeid te teate?
  • Mida teate FileFilteri liidese kohta?
  • Millised klassid võimaldavad teil objekte arhiveerida?

  • Millisel objektil toimub sünkroonimine, kui kutsutakse välja staatiline sünkroniseeritud meetod?
  • Mille jaoks kasutatakse muutlikku, sünkroonitud, mööduvat, loomulikku märksõna?
  • Mida tähendab lõime prioriteet?
  • Mis on Java deemoni lõimed?
  • Mida tähendab oja suigutamine?
  • Millistes olekutes võib lõim Javas olla? Kuidas voog tegelikult töötab?
  • Mis vahe on käivitatavate ja helistatavate ülesannete rakendamise kahel liidesel?
  • Erinevused CyclicBarrier ja CountDownLatch vahel?
  • Mis on võistlustingimus?
  • Kuidas lõime peatada?
  • Mis juhtub, kui lõimes ilmneb erand?
  • Mis on ThreadLocal muutuja?
  • Mis on FutureTask?
  • Erinevus katkestuse ja katkestuse vahel?
  • Miks kutsutakse sünkroniseeritud plokis oote- ja teavitamismeetodeid?
  • Mis on niidibassein?
  • Erinevused livelocki ja ummikseisu vahel?
  • Kuidas kontrollida, kas niit hoiab lukku?
  • Kuidas saada niidi prügikasti?
  • Millist JVM-i sätet kasutatakse lõime virna suuruse reguleerimiseks?
  • Erinevused sünkroonitud ja ReentrantLocki vahel?
  • Mis on semafor?
  • Mis juhtub, kui lõimekogumi järjekord on juba täis ja esitate ülesande?
  • Erinevused lõimekogumi meetodi submit() ja execute() vahel?
  • Mis on blokeerimismeetod?
  • Mis on ReadWriteLock?
  • Mis on Singletoni topeltkontrollitud lukustus?
  • Mis on Fork/Join raamistik?
  • Jõud on jõgi, millest paljud saavad juua ja Jedi koolitus pole ainus viis sellest ammutada. - Luke Skywalker Kõik maha jäänud raamatukogud. Millist neist lugeda, mida mitte - see on teie enda otsustada. Nüüd on teil jäänud vaid üks eesmärk: saada tööd ja teha karjäär ilma reha otsa astumata. Viimane artikkel on jagatud osadeks: - Enne tööd - Intervjuu - Töö ajal Selles osas on palju minu isiklikku arvamust, nii et palun ärge võtke fraase kontekstist välja ja käsitlege seda kui avameelset vestlust vana sõbraga :).

    Enne tööd

    Allpool on kümme kõige populaarsemat klišeed, mis tekivad siis, kui hing tõmbab programmeerimise poole, kuid teatud asjaolud segavad inimest. Minu ülesanne on püüda peatada teie kahtlus ja häälestada teid positiivsele mõtteviisile. Kui loete seda artiklit, olete kaugemale, kui arvate! Vaimselt oled juba seal, kus pead olema ja kui oled juba mõne raamatu läbi lugenud, siis on pool teed juba läbitud. Seetõttu lõpetage kahtlemine – see on nõrkade osa. Ainult edasi! Kas juba parem? Siis lähme! "Mul pole haridust" Kui astusin ühe suure allhankefirma akadeemiasse, vihjasid intervjueerijad mulle õrnalt, et diplom neid üldse ei huvita, nii et küsimused olid konkreetsed - OOP ja põhi Java kohta. Loomulikult kohtate vabu töökohti, kus need on saadaval. haridus on selge nõue. Tahan lihtsalt öelda, et tema puudumine ei ole tänapäeval takistuseks. Paljud välisbürood küsivad BS/MS Computer Science või, tähelepanu, vastavat kogemust. Ei veena? Võib-olla julgustab teid asjaolu, et mul pole tehnilist haridust;), kuid see ei takistanud mind suurtes ettevõtetes kogemusi omandamast. Küsi nüüd, mida ma teeksin, kui saaksin lindi tagasi kerida? Muidugi läheksin KPI / NAU-sse, kuid ma ei kurvastaks liiga palju, kui ma sisse ei astuks. Lõpetage selle pärast närvitsemine. Aeg läheb edasi – soovi korral saad 40-aastaselt koorekihi –, kuid praegu keskendu nooremarendajaks saamisele siin ja praegu. "Seal on inimesi, kes on minust targemad" Alati on inimesi, kes on targemad, targemad, paindlikumad, andekamad kui sina ja iga töö pole erand. See asjaolu ei anna absoluutselt õigust eesmärgist kõrvale kalduda. Võib-olla on kusagil teisel pool maakera väike poiss Jaapanist, kes korrutab ja jagab numbreid sinust kiiremini, ja mõni vanaema Tšehhist tipib mobiiltelefoni klaviatuuril kiiremini kui ükski teismeline. Aga sa ei mõtle sellele, eks? Miks peaksite siis hoolima inimestest, kellega koos töötate, kui asute elama? Mõnes mõttes ületavad teie tulevased kolleegid teid, mõnes mõttes kaotavad teile. See sobib! Maha kriipsutama. "Ma arvan, et ma ei saa" Noh, esiteks ei öelnud keegi, et see oleks lihtne, kuid see ei tähenda sugugi, et teie eesmärk pole teostatav. Miski ei takista lihtsalt proovimast, isegi kui töötad hetkel raamatupidaja või müügiassistendina. Tulge pärast tööpäeva ja istuge õppima. Kui mõne aja pärast näete edusamme, on see märk, et liigute õiges suunas. Ära peatu! Kui sind see vähegi huvitab ja see sulle on antud, siis ma ei tea ühtegi punkti, mis võiks mind veenda, et sa pole seda väärt. "Ma olen laisk" Laiskus on lihtsalt motivatsioonipuudus. Kui märkate, et suurema osa oma vabast ajast, selle asemel, et õppida ja kursuselt mitte võidelda, teete rumalalt prügi - kiirustan teid teavitama, et tõenäoliselt pole programmeerija töö teie oma. Vähemalt mitte praegu. Mõned nimetavad laiskust patuks, haiguseks, moodsa aja kooleraks koos ülekaalulisusega. Jätke see äri karjäärihüsteerikute hooleks. Minu arvates on siin elus kõik ümberringi küllastunud võitluse ja konkurentsi illusioonist: kes on kõrgem, kes tugevam, kes rikkam. Kellel on lahedam auto, kellel suurem palk meeskonnas, kes surub jõusaalis kangi tugevamini, kes tüdrukutest abiellus varem ja sai lapsed - see teeb haigeks, nagu haisev kiirtoit. Inimesed lõpetasid elamise ja elu nautimise, oma unistuste järgimise, vahetasid oma mugavustsooni Pepsi ja Coca-Cola vahel. Minu jaoks on laiskus hea, see on lihtsalt imeline. See on teie keha tavaline kaitsefunktsioon, et säästa aega ja energiat asjadelt, mis on tema jaoks kasutud. Inimene on loodud vabaks, nii et kui sa oled laisk - ära ürita oma tagumikku diivanilt üles tõsta - ehk on see nüüd omal kohal :). "Ma lähen sinna raha pärast" Kui kogume arendajad kokku ja ütleme: nüüdsest on teie palk 3–4 tuhat grivnat mis tahes taseme kohta ja testijad saavad jätkuvalt samad määrad, siis on küsimus teistsugune: mitte kui palju pommitatakse, vaid kui palju programmeerijad jäävad pärast seda uudist ainult programmeerijateks. Paljud inimesed satuvad IT-sse just tänu taignale. Palk tõlgituna taaladest, juustudest ja kallist peegelkaamerast. Olenemata sellest, kui palju ma inimestega töötasin, libisesid selleteemalised vestlused alati läbi. Ma ei ütle, et see on halb, ma lihtsalt tahan, et te ei püüaks end veenda, et lähete välja puhtalt vaimsetest eesmärkidest, et muuta maailma paremaks. Enne juuniorina tööle asumist teadsin, millised on seenioride, tehnikajuhtide ja isegi keskmiste palgad ning need mõtted inspireerisid mind: omal ajal, enne programmeerijana töötamist, võisin sellistest vaid unistada. arvud. Nimetage neid asju õigete nimedega ja lõpetage selle pärast häbenemine. "Ma ei usu, et see on minu" Kelle oma siis? Teate, seda on lihtne kontrollida. Avage Hortsmanni esimene köide ja alustage lugemist, kirjutades näidetest koodi. Kui sul ei ole igav ja sa ei märgi teist nädalat samasse peatükki aega, siis loobu kahtlustest. Tehniliste erialade õppimine on järjekindel asi. Te ei saa minna B-sse ilma A-d tundmata, kuid teil on alati võimalus minna peatükiga tagasi ja tugevdada vundamenti. Lase käia. "Minusuguseid on palju" Koha pärast on alati konkurents. Ma ei vaidle vastu, näiteks praegu on see näitaja 300-400 ilma kogemuseta testijat või isegi rohkem ühe koha kohta. Jah, see on kibe tõde, kuid teisest küljest ei leia ma isegi selliste näitajate juures piisavalt tõsist eset. Jah, vähemalt 100500 paigas!! Teil on alati võimalus oma projektide osas kogemusi omandada: koostage mingi teenus, töölauaprogramm, kasutage kogu teadaolevat pinu – ja juba teete konarusi ning ülejäänud, peale CV väljasaatmise, ei tee midagi muidu. "Keegi ei vasta mu CV-le" Eelmise lõigu jätkuks. Tõenäoliselt on tulevaste kogemusteta IT-spetsialistide jaoks hea osata kirjutada ilus CV, kuid kui ühele vabale kohale on palju inimesi, on paljud CV-d üksteisega väga sarnased: loomulikult võite saata foto koos kaelus (kui tüdruk) või kirjutage palju tehnoloogiaid , mida teate ainult Vikipeediast. Mõlemal juhul on HR lihtsalt ükskõik: kui projekti vabal kohal peaks olema inimene, kes tunneb näiteks AWS-i, siis ta otsib AWS-i CV-st. Võtke arvesse veel ühte olulist punkti, nagu kolleegide soovitusi. See on iga inimese valu, kellel selliseid tutvusi pole, sest lõviosa juunioridest võetakse sealt ära (kui inimene soovitusel idioot muidugi pole). Tavaliselt, ma rõhutan, võetakse juuniori kohale adekvaatne aktiivne inimene, kes on valmis õppima ja isegi toiduks. Ja kui selline kandidaat läbi kukub, siis olete tõenäolisemalt järgmine. Sel ajal, kui ülejäänutega intervjueeritakse, on teil palju valdkondi, kus saate maha rahuneda: avatud lähtekoodiga, mõistatused Internetis ja võib-olla vabakutseline töö. "Ma ei läbi intervjuu / tahan töötada konkreetses ettevõttes" Jah, tõenäoliselt ebaõnnestub esimene intervjuu, kuid saadud kogemus on hindamatu. Iga järgneva intervjuuga muutute enesekindlamaks ja leidlikumaks. Nagu ma praegu mäletan oma esimest ... issand, mis lollusest ma rääkisin?! Kui piinlik oli tema järel lahkuda (mäletan seda tondikest, kes mulle näkku irvitas), aga kui koju tulin ja järele mõtlesin, sain aru, et see oli imeline õppetund. Pärast teda olid kõik järgnevad sarnased sündmused läbi imbunud kergusest ja enesekindlusest. Keegi ei surnud, nad otsivad minusuguseid, nii et ma tulen. Usu endasse! Kui soovite konkreetselt teatud ettevõttesse, siis ma arvan, et ma ei avalda teile meie keskkonnas populaarset eluhäkki, kuid siiski: enne selle kontoriga kohtumise korraldamist pidage enne seda läbi intervjuu konkurentidega. Võib-olla pakutakse teile midagi, millest te ei keeldu, või on tingimused äkilisemad. Ühte tean ma kindlalt: te ei kahetse seda. "Ma olen selles töös hea" Teate, seal on selline vana ütlus: Le mieux est I'enneini du bien ("Parim on hea vaenlane"). Võib-olla pole teie töö kõige hullem koht, aga jah, ülemus on kits, mis siis saab? Või näiteks kolmas aasta ilma lisatasuta, aga stabiilne palk, seda enam, et olen juba üle 30. Mingil määral võib see nii olla, pea meeles, et sul on üks elu ja seda ei tohiks kulutada pettumused, kujuteldava mugavuse saamiseks, kui ümberringi on nii palju huvitavaid asju ja kogu elust ei piisa, et mõista. Ära karda olla parem, ära karda olla parem. Ärge kuulake kedagi, minge järjekindlalt eesmärgi poole, kui teate, et see on see, mida sa tõesti teha tahad. Ära karda muutuda!

    Intervjuu

    Üldiselt võite selle kõik Internetist leida või sõpradega ringi küsida, kuid ma arvan, et see ei lähe üleliigseks. Allpool on näide intervjuust Java noorema arendaja jaoks, nagu ta oleks praegu, kui oleksin intervjueerija. Küsimusi võib olla mida iganes, proovisin lihtsalt haigla jaoks midagi keskmist koguda. Teeskleme, et sul veab. Standardskeem Samm 1. Sulle helistab värbaja ja lepid temaga intervjuu näiteks homme kell 11.00. 2. samm Saabute varakult, kuna kell 11.00 on tõenäoliselt mitte teie, vaid arendajate aeg, kellel on reserveeritud mingi ruum, kus teid piinatakse. Iga värbaja jaoks on hea kombeks selle eest hoiatada. 3. samm Tegelikult saab alates 3. sammust kõik punktid segamini ajada, sest intervjuusid saab läbi viia erineval viisil. Näiteks siin saab küsida elementaarsete asjade kohta, kust sa pärit oled, miks sa meiega oled jne. Võimalik, et HR ise suudab seda teha ja muidugi on võimalik, et inglise keeles. Eks see oleneb firmast. 4. samm Olete kutsutud koosolekuruumi, kus vestlete ühe, kahe, kolme inimesega, kellest üks on kas vanem või tehniline juht, kes teiega tulevikus koostööd teeb, ülejäänute hulgas võib olla Scrum master, teised arendajad või personalitöötajad. Mõnda aega intervjueeritakse sind, siis surutakse kätt ja lastakse lahti. 5. samm Võib-olla toimub see järgmisel päeval või võib-olla kohe pärast 4. sammu - vestlete välismaise kliendiga (kui see on olemas) või võib-olla viib ta ise intervjuu läbi. Nagu näete, on palju võimalusi. Kuskil on kliendid, kuskil on ka telefoniintervjuu. See on vaid näide. Näide tehnilisest intervjuust Junior Java arendajale Mul on väga kahju alaarendajatest, kes loevad midagi tarka, et intervjuule kandideerija ees uppuda / muserdada / eputada. Kui näete, et selline inimene on teie ees ja tunnete tema poolt survet ja pinget, saatke ta kohe kolme naljaka juurde, sest pärast edukat läbimist selle kretiiniga peate töötama. Ärge raisake oma väärtuslikke närve. Intervjuu peaks ennekõike toimuma eesmärgiga saada teada, mida kandidaat teab, mitte seda, mida ta ei tea. Loomulikult, kui vajate inimest, kes teab midagi konkreetset - küsige temalt, ärge piinake teda kasutute asjadega, mida te projektis ei kasuta. Olge ometi inimene! Allpool on toodud ligikaudsed küsimused, mis võivad intervjuul ette tulla. 5 küsimust iga tehnoloogia kohta. OOP 1. Too näide polümorfismi kohta päriselust? Mis kasu sellest on? Puudused? Kirjutage lihtne kood. 2. Mis on liides? Abstraktne klass? Miks vajame liideseid, kui saate klassidega kõike rumalalt kirjutada (väike provokatsioon)?. Sama kehtib ka abstraktse klassi kohta. Millised on Java 8 vaikemeetodid? 3. Ehitage klassihierarhia konkreetsel kujuteldava andmebaasi või programmi näitel (andmebaasist on olemas nimekiri erinevatest tööliste klassidest) ja nendevahelisest interaktsioonist (agregeerimine, koosseis). 4. Mille poolest erineb koostis liitmisest (is-a, has-a)? 5. Kuidas saate Javas mitmikpärimise keelust mööda minna? JDK/JRE 1. Mille poolest JDK erineb JRE-st? Mis on JVM? 2. Mis on klassitee ja milleks see on mõeldud? Kuidas laadida näiteks klassitee teisi klasse? 3. Mida sa tead klassilaadurist? 4. Rääkige meile javadocist? Milleks see mõeldud on? 5. Mis on JAR, WAR? Java tavaline 1. Mis vahe on staatilistel ja mittestaatilistel meetoditel? Mis on lõplik? 2. Mis on poks-lahtipakkimine? bait b = 127, b++, mis on tulemus ja miks? 3. Mis on ümbrised, milleks need on? 4. Mida ma pean annotatsiooni loomiseks tegema? Mis on ületamine/ülekoormamine? 5. Miks on keelpilliklass finaal? Mida teeb intern() meetod? Andmestruktuurid 1. Rääkige meile Java kogude API struktuurist? Kas olete juba Stream API-ga töötanud? 2. Mis vahe on ArrayListil ja LinkedListil? Kus on parem kasutada ArrayListi ja kus on LinkedList? 3. Rääkige meile, kuidas HashMap töötab? Millised on TreeSeti ja HashSetiga töötamise funktsioonid? Kas teil on kogemusi Guava kollektsioonidega? 4. Massiivid Javas, kahemõõtmelise massiivi näide. 5. hashCode, võrdub HashMapi näitel? Samaaegsus 1. Mis on protsess? Voolu? Kuidas lõime luua? Mis on sünkroniseeritud? Kuidas sellest või teisest lõimekindla koodijupist aru saada? 2. Mis on Thread.sleep, aga ka ootamine, teavitamine, saak? 3. Too näide ummikseisust? 4. Kollektsioonid mitme lõimega töötamisel. 5. ThreadLocal ja Atomic Operations SQL/JDBC 1. Konkreetse näite puhul hankige kasutajate andmebaasist see, kelle palk on suurem kui 5000. 2. Näited INNER JOIN, OUTER JOIN, Order By, Group By. 3. Miks ma vajan JDBC draiverit? Näited. 4. Rääkige kõik, mida teate ResultSeti kohta, paar näidet. 5. Kirjutage RS-i abil lihtne DAO. JPA / talveunerežiim 1. Millised on parlamentaarse ühisassamblee eelised ja puudused? 2. Mis on EntityManager? üksus? 3. Kriteeriumid parlamentaarses ühisassamblees/talveunerežiimis. 4. Üks-ühele, paljud-mitmele JPA/talveunerežiimis 5. Kuidas teeksite talveunerežiimis LIITUMIST? HQL? Kevad 1. Mis on DI/IoC? Eelised. 2. Mis on rakenduse kontekst? Uba? 3. Mis on IoC initsialiseerimise tüübid? 4. Singleton, prototüüp kevadel? Annotatsioonipõhine kevad? 5. Ubade elutsükkel? init-meetod, hävita-meetod? @PostConstruct, @PostDeploy? Maven 1. Maveni põhifaasid, elutsükkel. 2. Kuidas joosta maven testidega, ilma testideta? Mis on arhetüüp, mvn-sõltuvus? 3. Profiilid mavenis, kuidas luua, kuidas joosta. 4. Mis on mavenis snapshot? Kesksed/kaughoidlad? 5. Pluginad mvn-s, tööpõhimõte, paar näidet. Algo 1. Algoritmi kontseptsioon, kiirus, Big-O-Notation. 2. Kuidas leida LinkedListist ühe korraga keskmine element? 3. Kirjutage primitiivne virn? Mis vahe on virna ja järjekorra vahel? LIFO, FIFO? 4. Kiirsortimine, Ühenda sortimine. 5. Kirjutage programm, mis kontrollib, kas number on palindroom. Nõus, võib-olla on latt veidi rohkem keskele painutatud kui juunior, aga arvan, et selline ettevalmistus ei tee sulle kindlasti haiget. Proovige igasse küsimusse sügavamalt süveneda. Muide, paljusid Java-i juhiseid pole siin näidatud, palun võtke arvesse.

    Töö ajal

    Siin on väikesed soovitused neile noorematele/keskmistele arendajatele, kes on juba paigas. Need lihtsad näpunäited võivad teile kasuks tulla just nii, nagu need aitasid mind omakorda. Ära ole kangekaelne Lõpetage oma väite tõestamine, isegi kui see on tõele võrgutavalt lähedal. Olete juba märganud, et olete olnud pikka aega vaidluses, mis tähendab, et teisel pool barrikaade on tavaline eesel, kellel on elus ainult kaks arvamust: tema ja vale. Meil on uskumatult palju kangekaelseid inimesi, kes seisavad viimseni vastu, kuni nende ego ei kõiguta. Ja need pole ainult teie kolleegid, nad on lihtsalt kõikjal - väikebussis, poes, sugulastel, lähedastel sõpradel - te ei saa nende eest põgeneda ega peita. Peate nendega kuidagi suhtlema, isegi kui saate aru, et inimene räägib lahtist jama. Pealegi võib sama juhtuda ka sinuga. Olen nõus, lihtsad asjad saab selgeks ka jonnakale inimesele, aga mis siis, kui räägime arhitektuurilistest küsimustest projektis või isiklikust arvamusest? Unustage see rämps – olge paindlik. Austan väga inimesi, kes suudavad kõigi ees tunnistada, et nad eksivad. Just see omadus tuleb teile nooremspetsialistina kasuks - avatud inimesele on raske vastu astuda, eriti kui ta tunnistab, et õpib ja tal on õigus vigu teha. Ära jää hiljaks Pole vahet, kas tegemist on prooviperioodiga või lihtsalt reedega, mil kõik löövad punkti ja jõuavad 11-ni. Oluline on veel üks asi: täpsus on professionaali omadus, kes teenib endale ootamatult lisapunkte. Ja lisapunktid kogemuseta inimesele ei tee paha, eks? Püüdke mitte hiljaks jääda ja lahkuge töölt ausalt pärast 8-tunnist töötamist. Ärge kuritarvitage hinnanguid Kahjuks on see väga levinud pilt, millesse ma kunagi varem sattusin. Arendaja määras endale ülesande täitmiseks aega 8-16 tundi ja täitis selle ootamatult 3-4 tunniga. Ülejäänud tunnid veedab ta isiklikule ajale lauatennise näol, nagu minuga juhtus, või youtube’i ja muu meelelahutuse vaatamise näol. Juriidilisest aspektist vaadatuna on nad justkui kokku leppinud, kuid inimlikust vaatenurgast jätad sa end ilma väga olulistest asjadest: 1. Seisad paigal, kui täidad lisaaega mittevajalike asjadega; 2. Sa ei arene, sest sa ei teavita juhtkonda oma kiirest arengust, keegi ei tea, et täidad ülesandeid oodatust kiiremini; 3. Hakkad väärtuste keskmist aega pidevalt üle hindama, see on lihtsalt tee eikuhugi. Varu õppimiseks aega Võimalus mootorist maha jääda on ebareaalselt suur, seega pidage meeles, et tehnoloogia ja uued versioonid arenevad väga kiiresti. Tellige meie aja Java evangelistid, lugege Java kokkuvõtteid ja tundke üldiselt huvi, õppige uusi asju. See aitab teil oma kaubamärki hoida ja areneda. Aita teisiÄrge kartke teisi aidata, isegi kui nad on sama rohelised kui teie. Esiteks tugevdate oluliselt oma teadmisi ja teiseks saate teiste silmis austuse ja nemad aitavad teid samal ajal. Sellises keskkonnas sünnivad parimad meeskonnad, samuti väga kiire tehniline ja isiklik kasv. Mine sportima. Tee endale hobi Ei tõsiselt. Mitte ainult spordiga tegelevad inimesed ei näe ja tunnevad end paremini, vaid ka nende ajufunktsioon on tipptasemel! Sellele aitavad kaasa skolioos, alaselg, ülekaal, mitmesugused probleemid siseorganitega – ööpäevaringsed arvuti taga kogunemised, ka väljaspool tööd. Kui te ei saa sportida (milles ma kahtlen), kasutage väikseid eluviise: töötage aeg-ajalt püsti, lahkuge kaks peatust varem ja kõndige tööle. Ja jah, kõndige rohkem. Samuti on oht läbi põleda, kui programmeerimine võtab palju rohkem aega kui 40 tundi nädalas. Appi tulevad isiklikud hobid - näiteks fotograafia, muusika jne. Leidke vaimsuse jaoks regulaarselt aega. Tasakaal isiklikus elus Kui tüdruksõber/naine ütleb: "sülearvuti või mina", peate tõsiselt mõtlema, millise koha programmeerimine teie elus võtab. Teisalt tuleb IT-teekonda alustades hingesugulasele selgelt selgitada, et nüüd on vaja palju õppida, et rohkem saavutada. Loodan, et nad mõistavad. Noh, proovite tasakaalustada ja oma aega õigesti jaotada. minna kaugemale Ole proaktiivne, kui tunned näiteks, et saad teadmisi jagada või on huvitavaid teemasid, siis miks mitte korraldada ettevõttesiseseid väikseid kursusi ka teistele? Ärge kartke panustada suurtesse avatud lähtekoodiga projektidesse, kui teate, kuidas aidata. Kui soovid kirjutada mängu, sotsiaalprojekti või muud ideed – tee seda, tee, tee! Ärge seiske paigal, otsige alati võimalusi, kus saate areneda. Ole konkurentsivõimeline Jälgige uusi suundumusi, olge kursis Java kogukonnas toimuvate suundumustega. Näiteks ei ole üleliigne, kui jälgite aeg-ajalt Java vabu töökohti DOU-s, kuid mitte selleks, et töölt eemale saada, vaid selleks, et teada saada, millised tehnoloogiad on endiselt asjakohased ja millised on turult aeglaselt kadumas. . Proovige läbida ka Coursera, Udacity jne kursusi, uurida uusi horisonte. Ja isegi inglise keeles: proovige oma vestlusoskuste parandamiseks vaadata oma lemmikfilme / telesaateid originaalis koos subtiitritega, laadige alla paar huvitavat keeleõpperakendust (näiteks LinguaLeo) ja minge lõpuks kursustele. .

    Järeldus

    Noh, minu väike DOU projekt hakkab lõppema. Kallid sõbrad, soovin teile siiralt tööd ja loodan, et kõik, mida ma nendes 7 artiklis kirjeldasin, on teile väärtuslikuks juhendiks isegi neile, kes juba töötavad Java arendajana. Tulevased juuniorid, pidage meeles, et miski pole võimatu ja kui tõesti pingutate, siis kindlasti õnnestub. Soovin, et otsustaksite lõpuks, kas see on teie oma või mitte, koostaksite üksikasjaliku treeningplaani ja järgiksite seda lahedalt. Ärge ärrituge, kui saate vastutasuks vaikuse - see kõik on ajutine, peamine on uskuda ja mitte mingil juhul eksida, vaid õppida, õppida ja uuesti õppida. Tahaksin avaldada sügavat tänu DOU meeskonnale suure hulga materjali toimetamise ja esmaspäeviti parima aja andmise eest. DOU on lahe kogukond, mis on lakanud olemast ainult Ukraina IT-inimeste sait. Samuti tahan tänada kõiki kommentaatoreid, kes lugesid minu artikleid diagonaalis ja võtsid fraase kontekstist välja. Artiklid ei näeks ilma sinuta nii huvitavad välja :) Olgu Jõud teiega!

    Neile, kes kuulevad sõna Java Core esimest korda, on need keele põhialused. Selle teadmisega saad juba julgelt praktikale/praktikale minna. Need küsimused aitavad teil enne intervjuud oma teadmisi värskendada või enda jaoks midagi uut õppida. Praktiliste oskuste saamiseks uurige edasi.

      Kuidas luua Java-s muutumatut objekti? Loetlege kõik eelised

      Muutumatu klass on klass, mille olekut ei saa pärast selle loomist muuta. Siin on objekti olek sisuliselt klassi eksemplari salvestatud väärtused, olgu need siis primitiivsed või viitetüübid.

      Klassi muutumatuks muutmiseks peavad olema täidetud järgmised tingimused:

      1. Ärge esitage seadjaid ega meetodeid, mis muudavad välju või väljadele viitavaid objekte. Seterid tähendavad objekti oleku muutmist, mida me siin vältida tahame.
      2. Muutke kõik väljad lõplikuks ja privaatseks. Privaatseks määratud väljad ei ole väljaspool klassi ligipääsetavad ja nende lõplikuks määramine tagab, et te ei muuda neid isegi kogemata.
      3. Ärge lubage alamklassidel meetodeid alistada. Lihtsaim viis seda teha on kuulutada klass lõplikuks. Java lõpetatud klasse ei saa alistada.
      4. Pidage alati meeles, et teie muutuvad eksemplarid võivad olla muutuvad või muutumatud. Määratlege need ja tagastage kõik muudetavate objektide (viitetüübid) jaoks uued kopeeritud sisuga objektid. Muutumatuid muutujaid (primitiivseid tüüpe) saab turvaliselt tagastada ilma täiendavate pingutusteta.

      Samuti peate meeles pidama muutumatute klasside hilisemaid eeliseid. Teil võib neid intervjuuks vaja minna. Muutumatud klassid:

      • lihtne kujundada, testida ja kasutada
      • on automaatselt lõime turvalised ja neil pole sünkroonimisprobleeme
      • ei nõua koopiakonstruktorit
      • võimaldab teil räsikoodi "laiskalt initsialiseerida" ja tagastatava väärtuse vahemällu salvestada
      • ei nõua turvalist koopiat, kui seda kasutatakse väljana
      • teha head kaardiklahvid ja seadistuselemendid (need objektid ei tohiks kogus olles olekut muuta)
      • muuta oma klass püsivaks, luues selle üks kord ja seda ei ole vaja uuesti kontrollida
      • neil on alati "tõrke atomaarsus", mille lõi Joshua Bloch: kui muutumatu objekt teeb erandi, ei jäeta seda kunagi soovimatusse või määratlemata olekusse.

      Vaadake selles postituses kirjutatud näidet.

      Java spetsifikatsioon ütleb, et Javas edastatakse kõik väärtuse järgi. Javas pole sellist asja nagu "viitega läbimine". Need tingimused on seotud meetodite kutsumisega ja muutujate edastamisega meetodi parameetritena. Noh, primitiivsed tüübid lähevad alati väärtuste järgi ilma segaduseta. Kuid seda kontseptsiooni tuleks mõista keeruliste tüüpide meetodi parameetri kontekstis.


      Ülaltoodud näites kopeeritakse esimese eksemplari aadressibitid teise võrdlusmuutujasse, mistõttu mõlemad viited osutavad samale mälukohale, kus objekt on salvestatud. Pidage meeles, et määrates nulli teisele viitele, ei määra te esimesele viitele nulli. Kuid ühe viidatud muutujaga objekti oleku muutus kajastub ka teises viites.

      Mis kasu on lõplikust plokist? Kas see plokk tagab selle koodi täitmise? Millal lõplikku plokki ei kutsuta?

      Lõpuplokk kutsutakse alati välja, kui prooviplokk on olemas. See tagab, et lõplik plokk kutsutakse välja isegi ootamatu erandi korral. Kuid lõpuks on see kasulikum kui lihtsalt erandite käsitlemine – see plokk võimaldab teil kustutada koodi, mis on kogemata tagasi pöördumisest, jätkamisest või katkestamisest mööda läinud. Puhastuskoodi paigutamine lõplikku plokki on alati hea tava, isegi kui erandeid pole oodata.

      Kui virtuaalmasin väljub proovi või püüdmise ploki täitmise ajal, siis lõplikku plokki ei käivitata. Samamoodi, kui lõim katkestatakse või suletakse proovi või püüdmise ploki täitmisel, siis lõplikku plokki ei käivitata, kuigi rakendus veel töötab.

      Miks on kaks kuupäevaklassi, üks paketis java.util ja teine ​​failis java.sql?

      java.util.Date tähistab kuupäeva ja kellaaega, java.sql.Date aga ainult kuupäeva. Java.sql.Date täiendus on java.sql.Time klass, mis tähistab ainult aega.

      Klass java.sql.Date on klassi java.util.Date alamklass (laiend). Mis on failis java.sql.Date muutunud:

      • toString() loob teistsuguse stringi esituse: yyyy-mm-dd
      • staatiline meetod valueOf(String) loob kuupäeva ülaltoodud esitusega stringist
      • tundide, minutite ja sekundite getterid ja seadjad välistatud

      Klassi java.sql.Date kasutatakse JDBC-s ja see ei sisalda ajakomponenti, st tunnid, minutid, sekundid ja millisekundid peavad olema nullid... kuid klass seda ei nõua.

      Selgitage markerite liideseid.

      Markeri liidese muster on arvutiteaduse disaini muster, mida kasutavad programmeerimiskeeled, mis pakkuda teavet objektide kohta käitamise ajal. See pakub võimalust klassi metaandmete seostamiseks, kui keelel pole sellistele metaandmetele selget tuge. Java kasutab selleks liideseid ilma meetodeid määramata.

      Hea näide markeri liidese kasutamisest Java-s on Serialiseeritav liides. Klass rakendab seda liidest, et näidata, et selle mittesiirduvaid andmeid võib kirjutada baidivoogu või failisüsteemi.

      Peamine probleem Markeri liides on see, et liides määratleb kokkuleppe klassidele, mis seda rakendavad, ja see konventsioon on päritud kõikidele alamklassidele. See tähendab, et te ei saa märki "de-realiseerida". Kui loote ülaltoodud näites alamklassi, mida te ei soovi serialiseerida (võib-olla seetõttu, et see on mööduvas olekus), peate kasutama selgesõnaliselt NotSerializableException .

      Miks on main() meetod kuulutatud avalikuks staatiliseks tühiseks?

      Miks avalik? Põhimeetodil on avaliku juurdepääsu modifikaator, nii et sellele pääseb juurde kõikjal ja iga objekt, mis soovib seda meetodit rakenduse käivitamiseks kasutada. Siin ma ei väida, et JDK/JRE-l on sarnane põhjus, sest java.exe või javaw.exe (Windowsi jaoks) kasutavad meetodi käivitamiseks Java Native Interface'i (JNI) kutset, nii et nad saavad seda igal juhul helistada, sõltumata juurdepääsu modifikaatorist .

      Miks staatiline? Oletame, et meie põhimeetod ei ole staatiline. Nüüd on mis tahes meetodi kutsumiseks vaja klassi eksemplari. eks? Java võimaldab teil konstruktoreid üle koormata, me kõik teame seda. Kumba siis kasutada ja kust tulevad ülekoormatud konstruktori parameetrid?

      Miks tühine? Virtuaalses masinas, mis seda meetodit tegelikult kutsub, pole tagastatavast väärtusest kasu. Ainus, mida rakendus soovib helistamisprotsessile öelda, on tavaline või ebanormaalne lõpetamine. See on juba võimalik System.exit(int) abil. Nullist erinev väärtus tähendab ebanormaalset lõpetamist, muidu on kõik korras.

      Mis vahe on stringi loomisel new() ja literaalina (kasutades jutumärke)?

      Kui loome stringi kasutades new() , luuakse see hunnikus ja lisatakse ka stringikogumisse, samas kui literaaliga loodud string luuakse ainult stringikogumis.

      Sellele või sarnastele küsimustele vastamiseks peate stringikogumi kontseptsiooni kohta rohkem teadma. Minu nõuanne on keelpilliklass ja keelpillibassein hästi selgeks õppida.

      Kuidas String-klassi meetod substring() töötab?

      Sarnaselt teiste programmeerimiskeeltega on Java stringid märgijadad. See klass sarnaneb selle järjestusega töötamiseks rohkem utiliidiklassile. Märkide jada annab järgmine muutuja:

      /** Väärtust kasutatakse märkide salvestamiseks. */ /** Väärtust kasutatakse märkide salvestamiseks */ privaatne lõplik täheväärtus; Sellele massiivile juurdepääsuks erinevatel stsenaariumidel kasutatakse järgmisi muutujaid /** Nihe on kasutatud salvestusruumi esimene indeks. */ /** Nihe on esimene kasutatava salvestusruumi indeks. */ privaatne lõplik int offset; /** Arv on märkide arv stringis. */ /** Arv on märkide arv stringis. */ privaatne lõplik int count;

      Iga kord, kui loome olemasolevast stringi eksemplarist alamstringi, määrab meetod alamstring() ainult nihke- ja loendusmuutujad uutele väärtustele. Sisemist märgimassiivi ei muudeta. See on võimalik mälulekke allikas, kui substring() meetodit kasutatakse hooletult:

      Väärtuse algset väärtust ei muudeta. Nii et kui loote 10 000 tähemärgist koosneva stringi ja loote 100 alamstringi, millest igaühes on 5–10 tähemärki, sisaldavad kõik 101 objekti sama 10 000 märgist koosnevat märgimassiivi. See on kahtlemata mälu raiskamine.

      Seda saab vältida, muutes koodi järgmiselt:

      asendada original.substring(beginIndex) uuega String(original.substring(beginIndex)) , kus originaal on algne string.

      Selgitage, kuidas HashMap töötab. Kuidas duplikaatide probleem lahendatakse?

      Enamik teist on kindlasti nõus, et HashMap on hetkel kõige lemmikum intervjuuteema. Kui keegi palub mul öelda "Kuidas HashMap töötab?", vastan lihtsalt: "Räsimise põhimõttel". Nii lihtne kui see ka pole.

      Seega on räsimine sisuliselt viis, kuidas määrata igale muutujale/objektile kordumatu kood pärast mis tahes valemi/algoritmi rakendamist selle omadustele.

      Kaardi definitsioon on: "Objekt, mis seob võtmed väärtustega." Väga lihtne, eks? Niisiis sisaldab HashMap oma sisemist klassi kirjet, mis näeb välja järgmine:

      staatiline klass Sisestustööriistad Kaart . Sissepääs(lõplik K-klahv; V väärtus; Sisestage järgmine; lõplik int räsi; …//Siia läheb rohkem koodi)

      Kui keegi proovib lisada võtme-väärtuse paari HashMapi, juhtub järgmine.

      • Kõigepealt kontrollitakse võtmeobjekti null . Kui võti on null, salvestatakse väärtus positsioonitabelisse. Kuna nulli räsikood on alati 0.
      • Seejärel tuleb järgmise sammuna arvutada räsiväärtus, kutsudes võtmemuutujal välja selle hashCode() meetodi. Seda räsi kasutatakse massiivi indeksi arvutamiseks, et hoida kirjet. JDK arendajad teadsid hästi, et meetod hashCode() võib olla halvasti kirjutatud ja võib tagastada väga suure või väga väikese väärtuse. Selle probleemi lahendamiseks võtsid nad kasutusele teise hash() meetodi ja edastasid sellele meetodile objekti räsikoodi, et kanda see väärtus massiivi indeksi suurusvahemikku.
      • Nüüd kutsutakse välja meetod indexFor(hash, table.length), et arvutada täpne asukoht kirje objekti salvestamiseks.
      • Nüüd põhiosa. Kuna me teame, et kahel erineval objektil võib olla sama räsikoodi väärtus, siis kuidas saab kahte erinevat objekti arhiivis [nimetatakse prügikastiks] samasse kohta salvestada?

      Vastus on LinkedList. Kui mäletate, on Entry klassil atribuut "järgmine". See omadus osutab alati ahela järgmisele objektile. See käitumine on väga sarnane LinkedListiga.

      Seega salvestatakse räsikoodide vastete korral sisestusobjektid LinkedList kujul. Kui kirje tuleb paigutada konkreetsesse registrisse, kas HashMap kontrollib, kas selles kohas on mõni muu kanne? Kui seal kirjet pole, salvestatakse meie objekt sellesse asukohta.

      Kui meie registris on juba mõni muu objekt, märgitakse selle järgmine väli. Kui see on null , saab meie objektist LinkedListi järgmine sõlm. Kui järgmine ei ole null , korratakse seda protseduuri seni, kuni leitakse tühi järgmine väli.

      Mis juhtub, kui lisame teise võtmeväärtuse, mis on võrdne varem lisatud väärtusega? On loogiline, et see peaks asendama vana väärtuse. Kuidas see juhtub? Pärast sisestusobjekti asukohaindeksi määramist, itereerides meie indeksis asuvat LinkedListit, kutsub HashMap iga sisestusobjekti võtmeväärtusel meetodi equals(). Kõigil Linkedlisti kirjeobjektidel on sama räsikoodi väärtus, kuid meetod equals() testib tõelist võrdsust. Kui võti. võrdub (k) tahtega tõsi, siis käsitletakse mõlemat sama objektina. Selle tulemusel asendatakse ainult sisestusobjektis olev väärtusobjekt.

      Seega tagab HashMap võtmete unikaalsuse.

      Erinevused liideste ja abstraktsete klasside vahel?

      See on väga levinud küsimus, kui intervjueerite noorema taseme programmeerijat. Kõige olulisemad erinevused on loetletud allpool:

      • Java liidestes on muutujad a priori lõplikud . Abstraktsed klassid võivad sisaldada mittelõplikke muutujaid.
      • Java liidesel ei saa kindlasti olla rakendust. Abstraktsel klassil võib olla baaskäitumist rakendavate meetodite eksemplare.
      • Liidese liikmed peavad olema avalikud. Abstraktsel klassil võivad olla igasugused juurdepääsumuutjad.
      • Liides tuleb realiseerida märksõnaga implements. Abstraktset klassi tuleb laiendada märksõnaga ulatub.
      • Javas saab klass rakendada palju liideseid, kuid pärida ainult ühest abstraktsest klassist.
      • Liides on täiesti abstraktne ja seda ei saa instantseerida. Abstraktsel klassil ei saa olla ka klassi eksemplare, kuid seda saab välja kutsuda, kui meetod main() on olemas.
      • Abstraktne klass on veidi kiirem kui liides, kuna liides ootab enne Java alistatud meetodi kutsumist otsingut. Enamasti on see väike erinevus, kuid kui kirjutate ajakriitilist taotlust, peate ka seda asjaolu arvesse võtma.
    1. Millal alistate meetodid hashCode() ja equals()?

      Meetodid hashCode() ja equals() on määratletud klassis Object, mis on kõigi Java-objektide vanemklass. Sel põhjusel pärivad kõik Java-objektid nende meetodite baasrakenduse.

      HashCode() meetodit kasutatakse antud objekti unikaalse täisarvu väärtuse saamiseks. Seda väärtust kasutatakse ostukorvi asukoha määramiseks, kui objekt tuleb salvestada andmestruktuuri, näiteks HashTable. Vaikimisi tagastab meetod hashCode() selle mäluaadressi täisarvulise esituse, kuhu objekt on salvestatud.

      Meetodit equals () kasutatakse, nagu nimigi ütleb, lihtsa objekti samaväärsuse jaoks. Meetodi põhirakendus on kontrollida kahe objekti viiteid, et näha, kas need on samaväärsed.

      Pange tähele, et tavaliselt on vaja meetod hashCode() alistada alati, kui meetod equals() alistatakse. See on vajalik, et toetada räsikoodi meetodi üldist tava, mille kohaselt peavad võrdsetel objektidel olema võrdsed räsikoodid.

      Võrdsed()-meetod peab määrama seose võrdsuse (see peab olema rekursiivne, sümmeetriline ja transitiivne). Lisaks peab see olema püsiv (kui objekt pole muutunud, peab meetod tagastama sama väärtuse). Samuti peaks alati tagastama o.equals(null). vale.

      hashCode() peab samuti olema stabiilne (kui objekt ei ole meetodi equals() tingimustes muutunud, peab ta jätkama sama väärtuse tagastamist.

      Kahe meetodi vaheline seos on järgmine: alati, kui a.võrdub(b), siis peab a.hashCode() olema sama mis b.hashCode() .

    Edu õpingutes!! Artikli autor Lokesh Gupta Originaalartikkel Lingid teistele osadele: