Vadovas būsimam Java kūrėjui. Interviu ir karjera. Vidurio Java kūrėjų interviu Java interviu Dažnai užduodami klausimai

Išsikrausčiau gyventi į kitą miestą, įsidarbinu, einu į pokalbius. Man atrodė, kad ten užduodami klausimai, nors žinomi, vis dėlto, surinkti kartu, gali padėti pasiruošti ir jaustis labiau pasitikintiems.

Klausimai norint suprasti DBVS kūrimo principus.
1. Kokia yra pirmoji normalioji forma ir normalizavimo procesas? Kokios yra normalios formos?
2. Ką reiškia DBVS indeksas, kaip jie išdėstyti, kaip saugomi? Kaip įdiegtumėte tą pačią funkciją? Paskutinis klausimas užduodamas, jei nėra aiškaus supratimo apie indeksus.
3. Nubraižykite ryšį „Daugelis su daugeliu“. Pavyzdžiui: lentelės Autoriai ir knygos. Vienas autorius gali turėti kelias knygas, o knygą gali parašyti keli autoriai. Sukurkite SQL užklausą, kad pasirinktumėte konkretaus autoriaus knygas.

Pagrindiniai klausimai apie Java.
4. Žinoma, kad pagrindinė Java klasė yra Object. Kokius metodus galite įvardyti?
5. Pasakykite mums, kas yra lygūs ir hashCode? Kokios yra šių metodų įgyvendinimo taisyklės ir susitarimai? Kada jie taikomi?
6. Papasakokite apie laukimą, praneškite, praneškiteVisi metodai. Kaip jie naudojami, kada, kam jie reikalingi? Kas yra sinchronizuota?
7. Kas yra baigti? kam to reikia? Ką galite pasakyti apie šiukšlių surinkėją ir jo algoritmus.
8. Kodėl klonavimo metodas deklaruojamas kaip apsaugotas? Ko reikia klonavimui įgyvendinti?
9. Kokie yra modifikatoriai (prieiga ir kiti)? Kas yra nepastovus ir trumpalaikis? Kam ir kokiais atvejais būtų galima naudoti nutylėjimą?

Java kolekcijos sistema
10. Kokios yra „Java“ rinkinio sąsajos? Paaiškinkite, kuo jie skiriasi.
11. Kokius žinote šių sąsajų diegimus?
12. Kuo skiriasi ArrayList ir LinkedList. Kaip jie išdėstyti? Kada jie turėtų būti naudojami.
13. Kuo skiriasi HashMap ir TreeMap? Kaip jie nustatomi ir kaip veikia? Kaip yra su prieigos prie objektų laiku, kokios priklausomybės?
14. Kas yra Hashtable, kuo ji skiriasi nuo HashMap? Iki šiol jis nebenaudojamas. Kaip vis dar naudojate norimas funkcijas?

Išimtys
15. Kas yra išimtis? Kokias išimčių rūšis žinote, kuo jos skiriasi?
16. Ar gali būti pasiūlyta dėlionė su bandom-pagauk-pagaliau blokais ir klausimu, kas bus grąžinta arba kokia išimtis galiausiai bus praleista?

Algoritmai
17. Kokius žinote rūšiavimo algoritmus? Kokius algoritmus žinote?
Be to, čia galimi įvairūs papildomi klausimai apie algoritmų sudėtingumo įvertinimą, jų palyginimą tarpusavyje.

Dizaino modeliai.
18. Ar esate susipažinę su kokiais nors dizaino modeliais?
19. Parašyk Singletoną... Ir su tingiu krovimu. Ką daryti, jei jis turi būti saugus siūlams? Kada tingus krautis blogiau?
20. Ką galite pasakyti apie MVC? Nubraižykite diagramą ir paaiškinkite, kaip veikia MVC.

Klausimų serija, skirta suprasti J2EE technologijų rinkinį.
21. Kas yra servletas, jsp, jų skirtumas?
22. Kas yra Ajax? Kaip ši technologija iš esmės sutvarkyta?
23. Kas yra ORM, kaip jį išversti ir kaip jis turėtų veikti?

Paprastos užduotys rašant algoritmus.
24. Parašykite funkciją faktorialui apskaičiuoti.
25. Pateikta funkcija Fibonačio skaičiams skaičiuoti, žinoma, kad ji veikia. Raskite logikos klaidą. Įvertinkite gauto algoritmo sudėtingumą.
26. Apverskite liniją.
27. Apskaičiuokite masyvo vidurkį.

Pravartu prisiminti, kad kai nesijaučiate labai pasitikintis, papildomų žodžių sakyti nereikia. Jūs pasakote papildomą žodį, o jie prie jo prikimba, atvynioja grandinę. Jie garsina dalykus, dėl kurių nėra labai tikri. Šį žmonių sugebėjimą – prikibti – reikia panaudoti, bet į naudą ;-)

Žinios ir supratimas… viskas yra visiškai kitokia, todėl
– skirtingus algoritmus, pavyzdžiui, rūšiavimą, reikėtų parašyti pačiam, kad ir iš vadovėlio. Pažiūrėkite, kuo jie skiriasi vienas nuo kito, palyginkite jų sudėtingumą.
- pravartu pažvelgti į įvairias komunalines paslaugas ir bibliotekas, klasių grupavimo į paketus principus bei kodo rašymo, komentavimo stilių. Tai gali labai padėti suprasti prieigos modifikatorius, projekto organizavimą.
- Suprasdami ką nors konkretaus, galite padėti tiems, kurie išmano mažiau. Eikite į bet kurį forumą ir pabandykite atsakyti į dominančius klausimus. Diskusijoje galite ką nors pasiimti sau. Galite parašyti trumpą straipsnį. Žinoma, jūs turite gerai suprasti temą.
Bet koks darbas, kurio tikslas – tobulinti savo kvalifikaciją, bus matomas kompetentingam pašnekovui ir neliks be dėmesio. Vienintelis dalykas, apie kurį reikia kalbėti nuoširdžiai, nenuvertinkite savo galimybių ir sugebėjimų.
Norėdami turėti kokį nors etaloną treniruoti ar tobulinti save kaip specialistą, galite pažvelgti į kažką panašaus.

Tiesą sakant, aukščiau išvardyti klausimai yra jaunesniojo kūrėjo lygis, kaip aš įsivaizduoju. Kai kur gal giliau, kai kur mažiau, bet kaip faktas – Junior.

Kiekvienas sprendimas sukuria naujų problemų.

Šis skyrius skirtas klausimams, kuriuos galima užduoti einant interviu Java programuotojo pareigoms užimti.

Tikslas – vienoje vietoje surinkti ne tik klausimus (jų internete labai daug), bet ir atsakymus į juos.

Dėl priskyrimo skaitykite pagrindiniame skilties Interviu puslapyje

  1. Kiek raktinių žodžių rezervuota kalba, kokie tai žodžiai, kurie nevartojami?
  2. Iš kokių simbolių gali sudaryti kintamojo pavadinimas (teisingas identifikatorius)?
  3. Ką reiškia žodis „inicializacija“?
  4. Kokios yra pagrindinės duomenų tipų grupės?
  5. Kokius primityvius tipus žinote?
  6. Ką žinote apie primityvių duomenų tipų konvertavimą, ar yra duomenų praradimo, ar įmanoma konvertuoti loginį tipą?
  7. Kokios reikšmės yra numatytieji inicijuoti kintamieji?
  8. Kaip perduodama kintamojo reikšmė (pagal nuorodą / reikšmę)?
  9. Ką žinote apie pagrindinę funkciją, kokios yra jos apibrėžimo sąlygos?
  10. Kokias logines operacijas ir operatorius žinote?
  11. Kuo skiriasi trumpųjų ir ilgųjų loginių operatorių žymėjimas?
  12. Kas yra tiesos lentelė?
  13. Kas yra trijų dalių pasirinkimo operatorius?
  14. Kokias vienanares ir dvejetaines aritmetines operacijas žinote?
  15. Kokias bitines operacijas žinote?
  16. Koks yra pasirinkto teiginio (jungiklio) rašymo vaidmuo ir taisyklės?
  17. Kokius ciklus žinote, kokie jų skirtumai?
  18. Kas yra „ciklo iteracija“?
  19. Kokius parametrus turi for kilpa, ar galima jų praleisti?
  20. Koks teiginys naudojamas norint nedelsiant sustabdyti kilpą?
  21. Kuris teiginys naudojamas pereiti prie kitos ciklo iteracijos?
  22. Kas yra masyvas?
  23. Kokius masyvų tipus žinote?
  24. Ką žinote apie vyniojimo klases?
  25. Kas yra automatinis pakavimas (boksavimas / išpakavimas)?

  1. Įvardykite OOP principus ir kiekvieną iš jų apibūdinkite.
  2. Apibrėžkite terminą „klasė“.
  3. Kas yra klasės laukas/atributas?
  4. Kaip tinkamai organizuoti prieigą prie klasės laukų?
  5. Apibrėžkite terminą „konstruktorius“.
  6. Kuo skiriasi numatytieji konstruktoriai, kopijavimo konstruktoriai ir konstruktorius su parametrais?
  7. Kokias prieigos lygio modifikacijas žinote, papasakokite apie kiekvieną iš jų.
  8. Papasakokite apie klasės su vienu privačiu konstruktoriumi ypatybes.
  9. Ką sako raktažodžiai „tai“, „super“, kur ir kaip juos galima panaudoti?
  10. Apibrėžkite terminą „metodas“.
  11. Kas yra metodo parašas?
  12. Kokie metodai vadinami perkrautais?
  13. Ar nestatiniai metodai gali perkrauti statinius?
  14. Papasakokite apie svarbiausius metodus.
  15. Ar metodas gali turėti skirtingą parametrų skaičių (kintamo ilgio argumentus)?
  16. Ar galima susiaurinti prieigos lygį / grąžinimo tipą, kai nepaisoma metodo?
  17. Kaip pasiekti nepaisytus pirminės klasės metodus?
  18. Kokios yra transformacijos iš viršaus į apačią ir iš apačios į viršų?
  19. Kuo skiriasi nepaisymas ir perkrovimas?
  20. Kur galima inicijuoti statinius / nestatinius laukus?
  21. Kodėl reikalingas operatorius instanceof?
  22. Kodėl mes reikalingi ir kas yra inicijavimo blokai?
  23. Kokia yra dviejų klasių konstruktorių ir inicijavimo blokų iškvietimo tvarka: vaikas ir jo protėvis?
  24. Kur ir kam naudojamas abstraktus modifikatorius?
  25. Ar galima metodą paskelbti abstrakčiu ir statišku tuo pačiu metu?
  26. Ką reiškia statinis raktinis žodis?
  27. Kurioms Java konstrukcijoms taikomas statinis modifikatorius?
  28. Kas atsitiks, jei statiniame kodo bloke atsiranda išimtis?
  29. Ar galima perkrauti statinį metodą?
  30. Kas yra statinė klasė, kokios jos naudojimo ypatybės?
  31. Kokios yra galutinių statinių kintamųjų inicijavimo ypatybės?
  32. Kaip statinis modifikatorius veikia klasę/metodą/lauką?
  33. Ką reiškia galutinis raktinis žodis?
  34. Apibrėžkite terminą „sąsaja“.
  35. Kokie yra numatytieji sąsajos laukų ir metodų modifikatoriai?
  36. Kodėl sąsajos metodas negali būti paskelbtas galutiniu arba statiniu?
  37. Kokių tipų klasės yra „Java“ (įdėtos… ir tt)
  38. Kokios yra įdėtųjų klasių kūrimo ypatybės: paprastos ir statiškos.
  39. Ką žinote apie įdėtas klases, kodėl jos naudojamos? Klasifikavimas, naudojimo atvejai, įkapsuliavimo pažeidimas.
  40. Kuo skiriasi įdėtos ir vidinės klasės?
  41. Kokios klasės vadinamos anoniminėmis?
  42. Kaip pasiekti išorinės klasės lauką iš įdėtos klasės?
  43. Kaip galite pasiekti vietinį metodo kintamąjį iš anoniminės klasės, nurodytos šio metodo tekste? Ar yra kokių nors apribojimų tokiam kintamajam?
  44. Kaip bet kuri pasirinktinė klasė yra susijusi su Objekto klase?
  45. Papasakokite apie kiekvieną Object klasės metodą.
  46. Kas yra lygus() metodas. Kuo ji skiriasi nuo == operacijos.
  47. Jei norite nepaisyti equals(), kokios turi būti įvykdytos nepaisyto metodo sąlygos?
  48. Jei lygis() nepaisomas, ar yra kokių nors kitų metodų, kuriuos reikėtų nepaisyti?
  49. Kuo skiriasi hashCode ir equals metodų ypatumai? Kaip „Object“ klasėje realizuojami „hashCode“ ir „ equals“ metodai? Kokios yra šių metodų įgyvendinimo taisyklės ir susitarimai? Kada jie taikomi?
  50. Kuris metodas grąžina objekto eilutės atvaizdavimą?
  51. Kas atsitiks, jei nepaisysite lygybės nepaisydami maišos kodo? Kokios problemos gali kilti?
  52. Ar yra kokių nors gairių, kokius laukus reikia naudoti skaičiuojant maišos kodą?
  53. Ar manote, kad kils kokių nors problemų, jei objektas, kuris naudojamas kaip raktas hashMap, pakeis lauką, dalyvaujantį hashCode apibrėžime?
  54. Kuo skiriasi abstrakčioji klasė nuo sąsajos, kokiais atvejais ją naudosite?
  55. Ar galima pasiekti privačių klasių kintamuosius ir jei taip, kaip?
  56. Kas yra nepastovus ir trumpalaikis? Kam ir kokiais atvejais būtų galima naudoti nutylėjimą?
  57. Modifikatorių išplėtimas paveldint, nepaisant ir slepiant metodus. Jei pagrindinė klasė turi privatų metodą, ar vaikas gali išplėsti jo matomumą? O jei apsaugotas? Ir susiaurinti matomumą?
  58. Ar prasminga metodą paskelbti privačiu galutiniu?
  59. Kokios yra galutinio kintamojo inicijavimo ypatybės?
  60. Kas atsitiks, jei vienintelis klasės konstruktorius bus paskelbtas galutiniu?
  61. Kas yra užbaigimas? kam to reikia? Ką galite pasakyti apie šiukšlių surinkėją ir jo algoritmus.
  62. Kodėl klonavimo metodas paskelbtas apsaugotu? Ko reikia klonavimui įgyvendinti?
  63. Ar esate susipažinę su kokiais nors dizaino modeliais?
  64. Parašyk Singletoną... Bet su tingiu įkėlimu. Ką daryti, jei jis turi būti saugus siūlams? Kada tingus krautis blogiau?
  65. Ką galite pasakyti apie MVC? Nubraižykite diagramą ir paaiškinkite, kaip veikia MVC.
  66. Parašykite funkciją faktorialui apskaičiuoti.
  67. Atsižvelgiant į Fibonačio skaičių skaičiavimo funkciją, žinoma, kad ji veikia. Raskite logikos klaidą. Įvertinkite gauto algoritmo sudėtingumą.

  1. Apibrėžkite „išskyrimą“
  2. Kokia yra išimčių hierarchija.
  3. Ar galiu / turėčiau tvarkyti jvm klaidas?
  4. Kokie yra išimčių tvarkymo būdai?
  5. Ką reiškia raktinis žodis metimai?
  6. Kuo ypatingas galutinis blokas? Ar visada išsipildo?
  7. Ar gaudant išimtis negali būti gaudymo bloko?
  8. Ar galėtumėte pagalvoti apie situaciją, kai galiausiai blokas nebūtų įvykdytas?
  9. Ar vienas gaudymo blokas gali sugauti kelias išimtis (iš tos pačios ir skirtingos paveldėjimo šakos)?
  10. Ką žinote apie tvarkomas ir neapdorotas (pažymėtas/nepažymėtas) išimtis?
  11. Kuo ypatinga RuntimeException?
  12. Kaip parašyti savo ("priskirtą") išimtį? Kokiais motyvais vadovausitės rinkdamiesi išimties tipą: pažymėta / nepažymėta?
  13. Kuris operatorius leidžia priverstinai išmesti išimtį?
  14. Ar yra papildomų sąlygų metodui, kuris gali būti išimtis?
  15. Ar pagrindinis metodas gali išmesti išimtį ir jei taip, kur ši išimtis bus tvarkoma?
  16. Jei grąžinimo teiginys yra ir gaudymo bloke, ir galutiniame bloke, kuris iš jų yra „svarbesnis“?
  17. Ką žinote apie OutOfMemoryError?
  18. Ką žinote apie SQLException? Kokio tipo pažymėta ar nepažymėta, kodėl?
  19. Kas yra klaida? Tokiu atveju naudojama klaida. Pateikite klaidos pavyzdį.
  20. Kokia konstrukcija naudojama „Java“ išimčių tvarkymui?
  21. Tarkime, kad yra „try-final“ blokas. Bandymo bloke buvo padaryta išimtis, o vykdymas perkeltas į galutinį bloką. Galutinis blokas taip pat metė išimtį. Kuri iš dviejų išimčių „išmes“ iš try-final bloko? Kas atsitiks su antrąja išimtimi?
  22. Tarkime, kad yra metodas, kuris gali išmesti IOException ir FileNotFoundException, kokia tvarka turėtų būti sugauti blokai? Kiek gaudymo blokų bus įvykdyta?

  1. Apibrėžkite sąvoką „kolekcija“.
  2. Išvardykite kolekcijų naudojimo pranašumus.
  3. Kokius duomenis gali saugoti kolekcijos?
  4. Kokia yra kolekcijų hierarchija?
  5. Ką žinote apie List kolekcijas?
  6. Ką žinote apie rinkinių kolekcijas?
  7. Ką žinote apie eilės kolekcijas?
  8. Ką žinote apie žemėlapių kolekcijas, koks jų esminis skirtumas?
  9. Pavadinkite pagrindinius sąrašo, rinkinio, žemėlapio įgyvendinimus.
  10. Kokius SortedSet diegimus žinote ir kokios jų funkcijos?
  11. Kokie yra sąrašo ir rinkinio skirtumai / panašumai?
  12. Kuo ArrayList ir LinkedList klasės skiriasi/bendrai, kada geriau naudoti ArrayList, o kada – LinkedList?
  13. Kada tikslinga naudoti masyvą, o ne ArrayList?
  14. Kuo ArrayList skiriasi nuo Vector?
  15. Ką žinote apie HashSet ir TreeSet klasių įgyvendinimą?
  16. Kuo skiriasi „HashMap“ ir „TreeMap“? Kaip jie nustatomi ir kaip veikia? Kaip yra su prieigos prie objektų laiku, kokios priklausomybės?
  17. Kas yra Hashtable, kuo ji skiriasi nuo HashMap? Iki šiol jis nebenaudojamas. Kaip vis dar naudojate norimas funkcijas?
  18. Kas atsitiks, jei į Žemėlapį įtrauksime dvi reikšmes su tuo pačiu raktu?
  19. Kaip nustatoma kolekcijos objektų eiliškumas, kaip rūšiuoti kolekciją?
  20. Apibrėžkite terminą „iteratorius“.
  21. Kokias funkcijas suteikia kolekcijų klasė?
  22. Kaip gauti nekeičiamą kolekciją?
  23. Kokios kolekcijos sinchronizuojamos?
  24. Kaip gauti sinchronizuotą kolekciją iš nesinchronizuotos?
  25. Kaip gauti tik skaitomą kolekciją?
  26. Kodėl žemėlapis nepaveldi iš kolekcijos?
  27. Kuo skiriasi „Iteratorius“ ir „Enumeration“?
  28. Kaip įgyvendinama foreach kilpa?
  29. Kodėl nėra metodo iterator.add() elementams pridėti prie kolekcijos?
  30. Kodėl iteratoriaus klasėje nėra metodo, kaip gauti kitą elementą nejudinus žymeklio?
  31. Kuo skiriasi „Iterator“ ir „ListIterator“?
  32. Kokiais būdais galima kartoti visus sąrašo elementus?
  33. Kuo skiriasi nuo gedimų apsaugančios ir greitai veikiančios savybės?
  34. Ką turėčiau daryti, kad išvengčiau ConcurrentModificationException?
  35. Kas yra kaminas ir eilė, pasakykite mums, kuo jie skiriasi?
  36. Kuo skiriasi palyginimo ir palyginimo sąsajos?
  37. Kodėl kolekcijos nepaveldi Cloneable ir Serializable sąsajų?

  1. Kokias „styginių“ klases žinote?
  2. Kokios yra pagrindinės „styginių“ klasių savybės (jų savybės)?
  3. Ar galima paveldėti eilutės tipą, kodėl?
  4. Apibrėžkite terminą eilutės sujungimas.
  5. Kaip eilutę konvertuoti į skaičių?
  6. Kaip palyginti dviejų eilučių vertę?
  7. Kaip pakeisti eilutę?
  8. Kaip veikia dviejų eilučių palyginimas?
  9. Kaip apkarpyti tarpus eilutės gale?
  10. Kaip pakeisti simbolį eilutėje?
  11. Kaip gauti eilutės dalį?
  12. Apibrėžkite terminą „styginių baseinas“.
  13. Koks metodas leidžia pasirinkti eilutę eilutėje?
  14. Kaip padalyti eilutę į eilutes pagal nurodytą skirtuką?
  15. Koks metodas vadinamas kintamąjį konvertuoti į eilutę?
  16. Kaip sužinoti konkretaus eilutės simbolio reikšmę, žinant jo eilės skaičių eilutėje?
  17. Kaip eilutėje rasti reikiamą simbolį?
  18. Ar galima sinchronizuoti prieigą prie eilučių?
  19. Ką daro intern() metodas?
  20. Kuo skiriasi „String“, „StringBuffer“ ir „StringBuilder“ klasės ir kas jos turi bendro?
  21. Koks yra teisingas būdas palyginti dviejų skirtingų objektų, tipų String ir StringBuffer, eilučių reikšmes?
  22. Kodėl eilutė yra nekintama ir užbaigiama Java?
  23. Kodėl simbolių masyvas yra geresnis už slaptažodžio saugojimo eilutę?
  24. Kodėl eilutė yra populiarus „HashMap“ raktas „Java“?
  25. Parašykite metodą, kaip pašalinti nurodytą simbolį iš eilutės.

  1. Kokie yra I/O srautų tipai?
  2. Įvardykite pagrindinius I/O srautų protėvius.
  3. Kokie yra šių srautų panašumai ir skirtumai: „InputStream“, „OutputStream“, „Reader“, „Writer“?
  4. Ką žinote apie RandomAccessFile?
  5. Kokie yra failų prieigos režimai?
  6. Kokiuose paketuose yra srauto klasės?
  7. Ką žinote apie antstatų klases?
  8. Kokia priedų klasė leidžia nuskaityti duomenis iš įvesties baitų srauto primityvių duomenų tipų formatu?
  9. Kokia priedų klasė leidžia pagreitinti skaitymą / rašymą naudojant buferį?
  10. Kokios klasės leidžia konvertuoti baitų srautus į simbolių srautus ir atvirkščiai?
  11. Kokia klasė skirta dirbti su failų sistemos (EFS) elementais?
  12. Koks yra skyriklis, nurodant kelią į EFS?
  13. Kaip pasirinkti visą tam tikro katalogo EFS pagal kriterijų (pavyzdžiui, su tam tikru plėtiniu)?
  14. Ką žinote apie FilenameFilter sąsają?
  15. Kas yra serializavimas?
  16. Kokios yra „saugios“ objekto serijos sąlygos?
  17. Kokios klasės leidžia archyvuoti objektus?

  1. Apibrėžkite terminą „procesas“.
  2. Apibrėžkite terminą „tekėjimas“.
  3. Apibrėžkite terminą „gijos sinchronizavimas“.
  4. Kaip sąveikauja programos, procesai ir gijos?
  5. Kada patartina sukurti kelias gijas?
  6. Kas gali atsitikti, jei dvi gijos vykdo tą patį kodą programoje?
  7. Ką žinote apie pagrindinę programos giją?
  8. Kokie yra gijų kūrimo ir vykdymo būdai?
  9. Koks metodas pradeda vykdyti giją?
  10. Kuris metodas apibūdina gijos veiksmą vykdymo metu?
  11. Kada gija baigia vykdyti?
  12. Kaip sinchronizuoti metodą?
  13. Kaip priverstinai sustabdyti siūlą?
  14. Apibrėžkite terminą „demono gija“.
  15. Kaip sukurti demono giją?
  16. Kaip gauti dabartinį srautą?
  17. Apibrėžkite terminą „monitorius“.
  18. Kaip pristabdyti gijos vykdymą?
  19. Kokiose būsenose gali būti srautas?
  20. Kas yra monitorius skambinant nestatiniu ir statiniu metodu?
  21. Kas yra monitorius, kai vykdoma metodo kodo dalis?
  22. Kokie metodai leidžia sinchronizuoti gijų vykdymą?
  23. Kuris metodas įjungia giją į laukimo režimą?
  24. Kokios yra notify ir notifyAll metodų funkcijos?
  25. Ką daro prisijungimo metodas?
  26. Kokios yra laukimo/pranešimo metodo iškvietimo sąlygos?
  27. Apibrėžkite terminą „abipusis blokavimas“.
  28. Kuo skiriasi pertraukimo, pertraukimo ir istrukdymo metodai?
  29. Kokiu atveju bus išmestas InterruptedException, kokie metodai gali jį mesti?
  30. lakieji modifikatoriai ir išeigos() metodas.
  31. Paketas java.util.concurrent
  32. Yra tam tikras metodas, kuris atlieka i++ operaciją. Kintamasis i tipo int. Daroma prielaida, kad kodas bus vykdomas kelių gijų aplinkoje. Ar blokas turi būti sinchronizuotas?
  33. Kas naudojamas kaip mutex, jei metodas paskelbtas statiniu sinchronizuotu? Ar galima sukurti naujus klasės egzempliorius, kai veikia statinis sinchronizuotas metodas?
  34. Tarkime, kad vykdymo metodas įvyko RuntimeException, kuris nebuvo užfiksuotas. Kas atsitiks su srautu? Ar yra būdas sužinoti, kad įvyko išimtis (neapvyniojus viso bėgimo kūno į try-catch bloką)? Ar yra būdas atkurti temą po to, kai tai atsitiko?
  35. Kokius standartinius „Java“ įrankius naudotumėte gijų telkiniui įdiegti?
  36. Kas yra ThreadGroup ir kam ji reikalinga?
  37. Kas yra ThreadPool ir kam jis reikalingas?
  38. Kas yra ThreadPoolExecutor ir kam jis reikalingas?
  39. Kas yra „atominiai tipai“ Java?
  40. Kodėl reikalinga ThreadLocal klasė?
  41. Kas yra Vykdytojas?
  42. Kas yra „ExecutorService“?
  43. Kodėl reikalinga ScheduledExecutorService?
Šis daugiau nei 300 klausimų sąrašas (be atsakymų) buvo rastas adresu http://becomejavasenior.com/. Ten surašyti ir kiti autoriai.

58489 Iš viso peržiūrų 15 peržiūrų šiandien

Peržiūrų: 38 283

  • Kas yra OOP?
  • Kas yra objektas?
  • Įvardykite pagrindinius OOP principus.
  • Kas yra paveldėjimas?
  • Kas yra polimorfizmas? Kokias polimorfizmo apraiškas Java žinai?
  • Kas yra kapsuliavimas?
  • Kas yra abstrakcija?
  • Kokie yra objektinio programavimo kalbų pranašumai?
  • Kaip į objektą orientuoto požiūrio naudojimas pagerina programinės įrangos kūrimą?
  • Yra posakis „yra“ ir „turi“. Ką jie reiškia, kalbant apie OOP principus? Kuo skiriasi sudėtis ir agregavimas?
  • Ką reiškia polimorfizmas, inkapsuliavimas ir dinaminis susiejimas?

java branduolys.

  • Kuo skiriasi JRE, JVM ir JDK?
  • Apibūdinkite „Java“ prieigos modifikatorius.
  • Kas yra paketo lygio prieiga.
  • Kuo abstrakčioji klasė skiriasi nuo sąsajos? Kada naudotumėte abstrakčią klasę ir kada sąsają?
  • Ar objektas gali pasiekti privačios klasės kintamąjį? Jei taip, kaip?
  • Kam skirti statiniai blokai Java?
  • Ar galima perkrauti statinį metodą?
  • Papasakokite apie vidines klases. Kada juos naudosi?
  • Kuo skiriasi egzemplioriaus kintamasis ir statinis kintamasis? Pateikite pavyzdį.
  • Pateikite pavyzdį, kada galite naudoti statinį metodą?
  • Papasakokite apie krautuvo klases ir dinaminį klasių įkėlimą.
  • Koks yra „Assert“ operatoriaus tikslas Java?
  • Kodėl kai kurios sąsajos visai neapibrėžia metodų?
  • Koks yra pagrindinis skirtumas tarp „String“, „StringBuffer“, „StringBuilder“?
  • Papasakokite apie Java I/O srautus.
  • Kas yra „Heap and Stack“ atmintis „Java“?
  • Kuo skiriasi „Stack“ ir „Heap“ atmintis „Java“?
  • Papasakokite apie „Java“ atminties modelį?
  • Kaip veikia šiukšlių surinkėjas?
  • Papasakokite apie tipo liejimą. Kas yra pažeminimas ir paaukštinimas? Kada gausite ClassCastException?
  • Kas yra statinė klasė, kokios jos naudojimo ypatybės?
  • Kaip pasiekti išorinės klasės lauką iš įdėtos klasės.
  • Kokie yra įdėtųjų klasių tipai? Kam jie naudojami?
  • Ar galima pakeisti, kai nepaisoma metodo:
  • Prieigos modifikatorius
  • grąžinimo tipas
  • Argumento tipas arba skaičius
  • Argumento pavadinimas
  • Keisti tvarką, kiekį ar išvis pašalinti metimų skiltį?
  • Kas yra autoboksas?
  • Kas yra generiniai vaistai?
  • Koks yra tikrasis bendrųjų tipų naudojimo Java programoje tikslas?
  • Kaip kintamieji perduodami metodams pagal vertę ar nuorodą?
  • Kokius metodus turi objektų klasė?
  • Metodo Object.equals() nepaisymo taisyklės.
  • Jei norite nepaisyti equals(), kokios turi būti įvykdytos nepaisyto metodo sąlygos?
  • Koks yra santykis tarp hashCode ir lygių?
  • Kaip „Object“ klasėje realizuojami „hashCode“ ir „ equals“ metodai?
  • Kas atsitiks, jei nepaisysite lygybės nepaisydami maišos kodo? Kokios problemos gali kilti?
  • Ar yra kokių nors gairių, kokius laukus reikia naudoti skaičiuojant maišos kodą?
  • Kam skirtas hashCode() metodas?
  • Metodo Object.hashCode() nepaisymo taisyklės.
  • Papasakokite apie objektų klonavimą. Kuo skiriasi seklus ir gilus klonavimas?
  • Metodo Object.clone() nepaisymo taisyklės.
  • Kur ir kaip galite pasinaudoti privačiu konstruktoriumi?
  • Kas yra numatytasis konstruktorius?
  • Apibūdinkite Object.finalize() metodą.
  • Kuo skiriasi žodžiai final, final ir finalize?
  • Apibūdinkite išimčių hierarchiją.
  • Kokias „Java“ išimtis žinote, kuo jos skiriasi?
  • Kas yra pažymėta ir nepažymėta išimtis?
  • Kaip sukurti savo nepažymėtą išimtį?
  • Kokios yra panaikinimo išimtys?
  • Kas yra klaida?
  • Apibūdinkite, kaip veikia blokas „Try-pagauti pagaliau“.
  • Ar galima naudoti try-finally (be gaudymo) bloką?
  • Ar galutinis blokas visada vykdomas?
  • Kokios yra String klasės ypatybės? ką daro intern() metodas.
  • Ar galima paveldėti eilutės tipą, kodėl?
  • Kodėl eilutė yra populiarus „HashMap“ raktas „Java“?
  • Apibrėžkite terminą eilutės sujungimas.
  • Kaip pakeisti eilutę?
  • Kaip palyginti dviejų eilučių vertę?
  • Kaip apkarpyti tarpus eilutės pradžioje ir pabaigoje?
  • Apibrėžkite terminą „styginių baseinas“.
  • Ar galima sinchronizuoti prieigą prie eilučių?
  • Koks yra teisingas būdas palyginti dviejų skirtingų objektų, tipų String ir StringBuffer, eilučių reikšmes?
  • Kodėl eilutė yra nekintama ir užbaigiama Java?
  • Parašykite metodą, kaip pašalinti nurodytą simbolį iš eilutės.
  • Kas yra atspindys?
  • Kas atsitiks šiukšlių surinkėjui (GC), jei vykdant kokio nors objekto finalize() metodą įvyksta išimtis?
  • Kas yra internacionalizacija, lokalizacija?
  • Kas yra „Java“ komentarai?
  • Kokias funkcijas atlieka anotacija?
  • Kokius įtaisytuosius „Java“ komentarus žinote?
  • Ką daro @Retention, @Documented, @Target ir @ Herited komentarai?
  • Ką daro @Override, @Deprecated, @SafeVarargs ir @SuppressWarnings komentarai?
  • Kokį komentaro gyvavimo ciklą galima nurodyti naudojant @Retention?
  • Kokius elementus galima anotuoti, kaip tai nurodyti?
  • Kaip sukurti savo anotaciją?
  • Kokių tipų atributai leidžiami komentaruose?
  • Kas yra JMX?
  • Kokius privalumus siūlo JMX?
  • Ką dar gali JMX, be nuotolinio valdymo?
  • Kas yra MBean?
  • Kokie yra MBean tipai?
  • Kas yra MBean serveris?
  • Kokie mechanizmai užtikrina saugumą „Java“ technologijoje?
  • Kokius patikrinimus atlieka „Java“ baito kodo tikrintuvas?
  • Ką žinote apie „apsaugos tvarkyklę“ programoje „Java“?
  • Kas yra JAS?
  • Kas yra Refaktoringas?

Java kolekcijų sistema.

  • Kas yra Kolekcija?
  • Įvardykite pagrindines kolekcijų sąsajas ir jų įgyvendinimą.
  • Kuo ArrayList skiriasi nuo LinkedList? Kokiais atvejais geriau naudoti pirmąjį, o kokiais antrąjį?
  • Kuo skiriasi „HashMap“ ir „Hashtable“?
  • Kuo ArrayList skiriasi nuo Vector?
  • Kaip lyginami kolekcijos elementai?
  • Hierarchijoje išdėstykite šias sąsajas: sąrašas, rinkinys, žemėlapis, rūšiuotas rinkinys, rūšiuotas žemėlapis, kolekcija, kartojamas, iteratorius, navigacinis rinkinys, navigacinis žemėlapis.
  • Kodėl žemėlapis nėra rinkinys, o sąrašas ir rinkinys yra rinkinys?
  • Apibrėžkite terminą „iteratorius“.
  • Ką žinote apie Iterable sąsają?
  • Kaip konvertuoti HashSet į ArrayList vienoje eilutėje?
  • Kaip konvertuoti ArrayList į HashSet vienoje eilutėje?
  • Kaip kartoti visus žemėlapio klavišus, atsižvelgiant į tai, kad žemėlapis nėra kartojamas?
  • Kaip kartoti visas žemėlapio reikšmes, atsižvelgiant į tai, kad žemėlapis nėra kartojamas?
  • Kaip kartoti visas raktų ir reikšmių poras žemėlapyje, atsižvelgiant į tai, kad žemėlapio negalima kartoti?
  • Kas yra SortedMap "rūšiavimas", be to, kad toString() spausdina viską iš eilės?
  • Kaip vienu skambučiu nukopijuoti elementus iš bet kurios kolekcijos į masyvą?
  • Įdiekite simetrišką dviejų kolekcijų skirtumą naudodami rinkimo metodus (addAll(), removeAll(), retainAll()).
  • Palyginkite išvardinimą ir iteratorių.
  • Kaip yra susiję Iterable ir Iterator?
  • Koks yra ryšys tarp „Iterable“, „Iterator“ ir „for-each“, pristatytų „Java 5“?
  • Palyginkite Iterator ir ListIterator.
  • Kas atsitiks, jei iškviečiu Iterator.next() „neklausęs“ Iterator.hasNext()?
  • Kas atsitiks, jei iškviečiu Iterator.next() prieš skambindamas Iterator.hasNext() 10 kartų? Ar man trūksta 9 prekių?
  • Jei turiu kolekciją ir antrinį iteratorių, ar rinkinys pasikeis, jei paskambinsiu iterator.remove()?
  • Jei turiu kolekciją ir antrinį iteratorių, ar jis pasikeis, jei paskambinsiu collection.remove(..)?
  • Kodėl jie pridėjo ArrayList, jei jau buvo vektorius?
  • ArrayList klasės įgyvendinimas turi šiuos laukus: Object elementData, int size. Paaiškinkite, kodėl dydį reikia saugoti atskirai, kai visada galite paimti elementData.length?
  • Ar „LinkedList“ yra vienkartinis, dvigubai ar keturiais saitais susietas sąrašas?
  • Koks yra blogiausias laikas įtraukti() metodą elementui, kuris yra susietų sąraše (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N))?
  • Koks yra blogiausias laikas įtraukti() metodą elementui, kuris yra masyvo sąraše (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N))?
  • Koks yra blogiausias laikas naudoti LinkedList add() metodą (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Koks yra blogiausias laikas naudoti ArrayList add() metodą (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Kiek elementų paskirstoma atmintyje, kai iškviečiamas ArrayList.add()?
  • Kiek elementų paskirstoma atmintyje, kai iškviečiama LinkedList.add()?
  • Apskaičiuokite, kiek atminties reikia laikyti vienam primityvui tipo baitui „LinkedList“?
  • Apskaičiuokite atminties kiekį vienam primityvui tipo baitui saugoti ArrayList?
  • Pridedu elementą į sąrašo vidurį: list.add(list.size()/2, newElem). Kam ši operacija lėtesnė – ArrayList ar LinkedList?
  • Kaip pakartoti „LinkedList“ elementus atvirkštine tvarka, nenaudojant „slow get“ (indekso)?
  • Kaip gauti sąrašą su visais elementais, išskyrus pirmąjį ir paskutinius 3, vienu skambučiu iš sąrašo?
  • Ar skirtingi objektai atmintyje (ref0 != ref1) gali turėti ref0.hashCode() == ref1.hashCode()?
  • Ar skirtingi objektai atmintyje (ref0 != ref1) gali turėti ref0.equals(ref1) == true?
  • Ar skirtingos nuorodos į tą patį objektą atmintyje (ref0 == ref1) gali turėti ref0.equals(ref1) == false?
  • Yra klasė Point(int x, y;). Kodėl maišos kodas, kurio forma yra 31 * x + y, yra geresnis už x + y?
  • Jei klasė Point(int x, y;) yra "teisinga", kad būtų galima įgyvendinti lygybės metodą (grąžinti ref0.x == ref1.x && ref0.y == ref1.y), bet maišos kodą padarykite kaip int hashCode( ) ( grąžinti x;), ar tokie taškai bus teisingai išdėstyti ir paimti iš HashSet?
  • equals() sukuria lygiavertiškumo santykį. Kurias iš savybių turi toks ryšys: komutatyvumą, simetriją, refleksyvumą, pasiskirstymą, asociatyvumą, tranzityvumą?
  • Ar galima taip įgyvendinti equals(Object that) (grąžinti this.hashCode() == that.hashCode())?
  • lygus reikalauja patikrinti, ar argumentas (lygus(Object that)) yra tokio paties tipo kaip ir pats objektas. Kuo skiriasi this.getClass() == that.getClass() nuo to MyClass egzemplioriaus?
  • Ar galima įgyvendinti klasės MyClass lygybės metodą taip: class MyClass (public loginis lygis(MyClass that) (return this == that;))?
  • Ar „HashMap“ veiks, jei visi raktai grąžins int hashCode() (grąžina 42;)?
  • Kodėl jie pridėjo „HashMap“, jei jau buvo „Hashtable“?
  • Pasak Knutho ir Kormen, yra du pagrindiniai maišos lentelės diegimai: pagrįsta atviru adresu ir pagrįsta grandinės metodu. Kaip įgyvendinamas HashMap? Kodėl jie taip padarė (jūsų nuomone)? Kokie yra kiekvieno požiūrio privalumai ir trūkumai?
  • Kiek nuorodos paspaudimų įvyksta, kai darote HashMap.get(key) ant rakto, esančio lentelėje?
  • Kiek naujų objektų sukuriama, kai į „HashMap“ pridedate naują elementą?
  • Kaip veikia HashMap, kai bandote į jį įrašyti du elementus naudodami raktus su tuo pačiu maišos kodu, bet kuriam lygus == false?
  • HashMap gali išsigimti į sąrašą net raktams su skirtingu maišos kodu. Kaip tai įmanoma?
  • Koks yra blogiausias laikas gauti(rakto) metodui raktui, kurio nėra lentelėje (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N ))?
  • Koks yra blogiausias laikas gauti(rakto) metodui raktui, kuris yra lentelėje (O(1), O(log(N)), O(N), O(N*log(N)), O (N*N ))?
  • Paaiškinkite parametrų reikšmę HashMap(int inicialinė talpa, float loadFactor) konstruktoriuje.
  • Kuo skiriasi „HashMap“ ir „IdentityHashMap“? Kam skirtas „IdentityHashMap“? Kaip gali būti naudinga įgyvendinti serializavimą ar klonavimą?
  • Kuo skiriasi „HashMap“ ir „WeakHashMap“? Kam skirtas WeakHashMap?
  • „WeakHashMap“ naudoja „WeakReferences“. Kodėl nesukūrus „SoftHashMap“ „SoftReferences“?
  • „WeakHashMap“ naudoja „WeakReferences“. Kodėl nesukūrus PhantomHashMap „PhantomReferences“?
  • Sukurkite HashSet iš HashMap (naudokite tik kelis raktus, o ne kelias reikšmes).
  • Sukurkite HashMap iš HashSet (HashSet >).
  • Palyginkite java.util.Queue ir java.util.Deque sąsajas.
  • Kas ką pratęsia: eilė pratęsia Deque arba Deque pratęsia eilę?
  • Kodėl „LinkedList“ įdiegia ir sąrašą, ir „Deque“?
  • Kuo skiriasi java.util.Arrays ir java.lang.reflect.Array klasės?
  • Kuo skiriasi java.util.Collection ir java.util.Collections klasės?
  • Parašykite programą be sriegių, dėl kurios rinkinys išmes ConcurrentModificationException.
  • Kas yra „greitas elgesys“?
  • Ar yra speciali klasė java.util.EnumSet, skirta enums rinkiniams? Kam? Kodėl autoriams nepatiko HashSet ar TreeSet?
  • java.util.Stack – laikoma „pasenusia“. Kuo rekomenduojama jį pakeisti? Kodėl?
  • Kuri kolekcija įgyvendina FIFO paslaugų discipliną?
  • Kuri kolekcija įgyvendina FILO paslaugų discipliną?
  • Pateikite pavyzdį, kai kolekcija pateikia UnsupportedOperationException.
  • Kodėl negalite parašyti „ArrayList skaičiai = naujas ArrayList ();“, bet galite „Sąrašas skaičiai = naujas ArrayList ();"?
  • LinkedHashMap – kas tai per „žvėris“? Kas jame yra iš LinkedList ir kas iš HashMap?
  • LinkedHashSet – kas yra šis „žvėris“? Kas jame yra iš LinkedList ir kas iš HashSet?
  • Jie sako, kad „LinkedHashMap“ naudojant „negaliojimo politiką“ lengva sukurti paprastą talpyklą, žinote kaip?
  • Ką „PriorityQueue“ leidžia padaryti?
  • Kuo skiriasi java.util.Comparator ir java.lang.Comparable?

Java 8.

  • Kas yra simbolinė nuoroda?
  • Kuo skiriasi I/O ir NIO?
  • Kokias NIO savybes žinote?
  • Kokie yra I/O srautų tipai?
  • Pavadinkite pagrindines įvesties/išvesties srautų klases.
  • Kuo skiriasi „OutputStream“, „InputStream“, „Writer“, „Reader“ ir ką jie turi bendro?
  • Kokius pagrindinės InputStream klasės poklasius žinote, kam jie skirti?
  • Ką žinote apie RandomAccessFile?
  • Kokius failų prieigos režimus turi RandomAccessFile?
  • Kokie yra OutputStream bazinės klasės poklasiai ir ar žinote, kam jie skirti?
  • Kam naudojamas PushbackInputStream?
  • Kam naudojamas „SequenceInputStream“?
  • Kuriems Reader bazinės klasės poklasiams žinote, kam jie skirti?
  • Kuriems Writer bazinės klasės poklasiams žinote, kam jie skirti?
  • Kas yra absoliutus kelias ir santykinis kelias?
  • Kokiuose paketuose yra srauto klasės?
  • Ką žinote apie antstatų klases?
  • Kokia priedų klasė leidžia nuskaityti duomenis iš įvesties baitų srauto primityvių duomenų tipų formatu?
  • Kokia priedų klasė leidžia pagreitinti skaitymą / rašymą naudojant buferį?
  • Kokios klasės leidžia konvertuoti baitų srautus į simbolių srautus ir atvirkščiai?
  • Kuo skiriasi PrintWriter klasė nuo PrintStream klasės?
  • Kuri klasė skirta dirbti su failų sistemos elementais?
  • Koks simbolis yra skyriklis, nurodant kelią failų sistemoje?
  • Kokius Failų klasės metodus žinote?
  • Ką žinote apie „FileFilter“ sąsają?
  • Kokios klasės leidžia archyvuoti objektus?

  • Kokiame objekte vyksta sinchronizavimas, kai iškviečiamas statinis sinchronizuotas metodas?
  • Kam naudojamas nepastovus, sinchronizuotas, trumpalaikis, vietinis raktinis žodis?
  • Ką reiškia gijos prioritetas?
  • Kas yra demonų gijos Java?
  • Ką reiškia užliūliuoti upelį?
  • Kokiose būsenose gija gali būti java? Kaip iš tikrųjų veikia srautas?
  • Kuo skiriasi dvi sąsajos, skirtos vykdyti vykdomas ir iškviečiamas užduotis?
  • Kuo skiriasi „CyclicBarrier“ ir „CountDownLatch“?
  • Kas yra lenktynių sąlyga?
  • Kaip sustabdyti giją?
  • Kas nutinka, kai gijoje atsiranda išimtis?
  • Kas yra ThreadLocal kintamasis?
  • Kas yra FutureTask?
  • Kuo skiriasi interrupted ir isinterrupted?
  • Kodėl laukimo ir pranešimo metodai iškviečiami sinchronizuotame bloke?
  • Kas yra siūlų baseinas?
  • Kuo skiriasi „livelock“ ir „aklavietė“?
  • Kaip patikrinti, ar sriegis laiko užraktą?
  • Kaip gauti siūlų išmetimą?
  • Koks JVM nustatymas naudojamas gijos krūvos dydžiui valdyti?
  • Skirtumai tarp sinchronizuoto ir „ReentrantLock“?
  • Kas yra Semaforas?
  • Kas atsitiks, jei gijų telkinio eilė jau pilna ir jūs pateikiate užduotį?
  • Kuo skiriasi gijų telkinio submit() ir execute() metodai?
  • Kas yra blokavimo metodas?
  • Kas yra „ReadWriteLock“?
  • Kas yra „Singleton“ dvigubai patikrintas užraktas?
  • Kas yra Fork/Join sistema?
  • Jėga yra upė, iš kurios daugelis gali gerti, o Jedi mokymas nėra vienintelis būdas iš jos pasisemti. - Lukas Skywalkeris Visos paliktos knygų kolekcijos. Kurį iš jų skaityti, ko ne – spręsti jums. Dabar jums liko tik vienas tikslas: gauti darbą ir kurti karjerą neužlipus ant grėblio. Paskutinis straipsnis suskirstytas į skyrius: - Prieš darbą - Interviu - Darbo metuŠioje dalyje yra daug mano asmeninės nuomonės, todėl prašome neištraukti frazių iš konteksto ir traktuoti tai kaip atvirą pokalbį su senu draugu :).

    Prieš darbą

    Žemiau pateikiame dešimt populiariausių klišių, kylančių, kai sielą traukia programavimas, tačiau tam tikros aplinkybės žmogui trukdo. Mano užduotis – pabandyti sustabdyti jūsų įtarumą ir paskatinti jus pozityviai mąstyti. Jei skaitote šį straipsnį, esate toliau, nei manote! Psichiškai jau esi ten, kur reikia, o jei jau perskaitei keletą knygų, vadinasi, pusė kelio jau įveikta. Todėl nustokite abejoti – tokia silpnųjų dalis. Tik pirmyn! Jau geriau? Tada eime! "Aš neturiu išsilavinimo" Kai įstojau į vienos iš didelių užsakomųjų paslaugų firmų akademiją, pašnekovai man švelniai užsiminė, kad diplomas jų visai nedomina, todėl klausimai buvo konkretūs – apie OOP ir bazinę Java. Žinoma, jūs susidursite su laisvomis darbo vietomis, kuriose jų yra. išsilavinimas bus aiškus reikalavimas. Tik noriu pasakyti, kad šiais laikais jo nebuvimas nėra kliūtis. Daugelis užsienio biurų prašo BS / MS Computer Science arba, dėmesio, atitinkamos patirties. Neįtikina? Galbūt jus paskatins tai, kad neturiu techninio išsilavinimo;), tačiau tai visiškai nesutrukdė man įgyti patirties didelėse įmonėse. Paklauskite manęs dabar, ką daryčiau, jei galėčiau atsukti juostą? Aišku, eičiau į KPI/NAU, bet per daug nesigailėčiau, jei neįstočiau. Nustok jaudintis dėl šito. Laikas praeis – jei norite, sulaukę 40 metų galite gauti plutą, tačiau kol kas susitelkite į tai, kad taptumėte jaunesniuoju kūrėju čia ir dabar. "Bus protingesnių už mane" Visada atsiras protingesnių, protingesnių, lankstesnių, talentingesnių už tave žmonių ir bet koks darbas – ne išimtis. Šis faktas visiškai nesuteikia teisės nukrypti nuo tikslo. Galbūt kažkur kitoje žemės rutulio pusėje yra mažas berniukas iš Japonijos, kuris daugina ir dalija skaičius greičiau nei tu, o kažkokia močiutė iš Čekijos spausdina mobiliojo telefono klaviatūra greičiau nei bet kuris paauglys. Bet tu apie tai negalvoji, ar ne? Taigi kodėl jums turėtų rūpėti žmonės, su kuriais dirbsite, kai apsigyvensite? Kai kuriais atžvilgiais būsimi kolegos jus pranoks, kai kuriais – pralaimės jums. Tai yra gerai! Išbraukti. "Nemanau, kad galiu" Na, visų pirma, niekas nesakė, kad tai bus lengva, bet tai visiškai nereiškia, kad jūsų tikslas yra neįgyvendinamas. Niekas netrukdo tiesiog išbandyti, net jei šiuo metu dirbate buhalteriu ar pardavėjo padėjėju. Ateik po darbo dienos ir atsisėsk mokytis. Jei po kurio laiko matote tam tikrą pažangą, tai yra ženklas, kad judate teisinga kryptimi. Nesustok! Jeigu tau tai nors šiek tiek įdomu ir tai tau duota, tai aš nežinau nei vieno taško, kuris galėtų mane įtikinti, kad tu to nevertas. "Aš tingus" Tinginystė – tai tik motyvacijos trūkumas. Jei pastebite, kad didžiąją dalį savo laisvo laiko, užuot studijavęs ir nekovojęs nuo kurso, kvailai darote šiukšles - skubu pranešti, kad greičiausiai programuotojo darbas ne jūsų. Bent jau ne dabar. Kai kas tinginystę vadina nuodėme, liga, šiuolaikinio amžiaus cholera kartu su nutukimu. Palikite šį verslą karjeros isterikams. Mano nuomone, viskas aplinkui šiame gyvenime yra prisotinta kovos ir konkurencijos iliuzijos: kas aukščiau, kas stipresnis, kas turtingesnis. Kas šaunesnį automobilį, kam didesnį atlyginimą komandoje, kas stipriau spaudė štangą sporto salėje, kuri iš merginų anksčiau ištekėjo ir susilaukė vaikų – nuo ​​to pykina, kaip smirdančiam greitam maistui. Žmonės nustojo gyventi ir džiaugtis gyvenimu, sekti savo svajonėmis, iškeitė komforto zoną į pasirinkimą tarp Pepsi ir Coca-Cola. Man tinginystė yra gerai, tai tiesiog nuostabu. Tai įprasta jūsų kūno apsauginė funkcija, skirta sutaupyti laiko ir energijos jam nenaudingiems dalykams. Žmogus sukurtas būti laisvas, tad jei tingi – nustok kelti užpakalį nuo sofos – galbūt jis dabar savo vietoje :). „Aš einu ten dėl pinigų“ Jei surinksime kūrėjus ir pasakysime: nuo šiol jūsų atlyginimas bus 3-4 tūkst. grivinų už bet kokį lygį, o bandytojai ir toliau gaus tuos pačius tarifus, tada klausimas bus kitas: ne kiek bus subombarduota, o kiek programišiai po šios naujienos liks tik programuotojais. Daug žmonių į IT įstoja dėl tešlos. Atlyginimas išverstas iš dolerių, sūrių ir brangaus DSLR. Kad ir kiek dirbau su žmonėmis, pokalbiai apie tai vis praslysdavo. Nesakau, kad tai yra blogai, tik noriu, kad nebandytumėte savęs įtikinėti, kad einate iš grynai dvasinių tikslų, kad pakeistumėte pasaulį į gerąją pusę. Prieš įsidarbindama jaunesniuoju, žinojau, kokie yra vyresniųjų, technikos vadovų – ir net vidurinių – atlyginimai, ir šios mintys mane tik įkvėpė: savo laikais, prieš dirbdamas programuotoju, apie tokius galėjau tik pasvajoti. figūros. Vadinkite šiuos dalykus tinkamais vardais ir nustokite to gėdytis. "Nemanau, kad tai mano" Kieno tada? Žinote, tai lengva patikrinti. Atidarykite pirmąjį Hortsmann tomą ir pradėkite skaityti, rašydami kodą iš pavyzdžių. Jei nenuobodu ir antrą savaitę tame pačiame skyriuje nežymite laiko, atsisakykite abejonių. Techninių specialybių studijos yra nuoseklus dalykas. Negalite patekti į B, nežinant A, bet visada turėsite galimybę grįžti vienu skyriumi atgal ir sustiprinti pagrindą. Pirmyn. "Yra daug tokių kaip aš" Visada vyksta konkurencija dėl vietos. Nesiginčiju, pavyzdžiui, dabar šis skaičius yra 300–400 testuotojų be patirties arba net daugiau vienoje vietoje. Taip, tai karti tiesa, bet, kita vertus, net ir turėdamas tokius rodiklius negaliu rasti pakankamai rimto taško. Taip, bent 100500 vietoje !! Visada turite galimybę įgyti patirties įgyvendindami savo projektus: sukurkite kokią nors paslaugą, darbalaukio programą, naudokite visą žinomą krūvą – ir jūs jau darote nelygumus, o likusieji, išskyrus gyvenimo aprašymo išsiuntimą, nieko nedarykite. Kitas. „Niekas neatsako į mano gyvenimo aprašymą“ Tęsiant pirmiau pateiktą pastraipą. Greičiausiai būsimiems IT specialistams, neturintiems patirties, mokėjimas parašyti gražų gyvenimo aprašymą yra gerai, bet kai į vieną laisvą vietą yra daug žmonių, daugelis gyvenimo aprašymų yra labai panašūs vienas į kitą: žinoma, galite atsiųsti nuotrauką su iškirptę (jei mergina) arba parašyk daug technologijų , kurias pats žinai tik iš Vikipedijos. Abiem atvejais HR tiesiog nerūpės: jei laisvoje projekto vietoje turėtų būti asmuo, kuris, pavyzdžiui, žino AWS, tada jis ieškos AWS gyvenimo aprašyme. Atsižvelkite į dar vieną svarbų dalyką, pavyzdžiui, kolegų rekomendacijas. Tai yra kiekvieno žmogaus, kuris neturi tokių pažinčių, skausmas, nes iš ten paimama liūto dalis jaunesniųjų (jei žmogus, rekomendavus, nėra idiotas, žinoma). Dažniausiai, pabrėžiu, į jaunesniojo pareigas paimamas adekvatus aktyvus žmogus, pasiruošęs mokytis ir net maistui. Ir jei tokiam kandidatui nepavyks, tada greičiausiai būsite kitas. Na, o likusieji yra apklausiami, jūs turite daug sričių, kuriose galite atsipalaiduoti: atviras kodas, galvosūkiai internete ir galbūt laisvai samdomas darbas. „Nepralaikysiu pokalbio / noriu dirbti konkrečioje įmonėje“ Taip, greičiausiai pirmasis pokalbis bus nesėkmingas, tačiau patirtis, kurią gausite, yra neįkainojama. Su kiekvienu paskesniu pokalbiu tapsite labiau pasitikintys savimi ir išradingesni. Kaip dabar prisimenu savo pirmąjį... Dieve, apie kokias nesąmones aš kalbėjau?! Kaip gėdinga buvo išeiti paskui jį (pamenu tą šmėklą, kuri šyptelėjo man į veidą), bet kai grįžau namo ir pagalvojau, supratau, kad tai buvo nuostabi pamoka. Po jo visi vėlesni panašūs įvykiai buvo persmelkti lengvumo ir pasitikėjimo. Niekas nemirė, ieško tokių kaip aš, tad ateisiu. Tikėk savimi! Jei norite konkrečiai į tam tikrą įmonę, tai manau, kad mūsų aplinkoje populiaraus life hack jums neatskleisiu, bet vis tiek: prieš organizuodami susitikimą su šiuo biuru, prieš tai atlikite pokalbį su konkurentais. Galbūt jums bus pasiūlyta tai, ko neatsisakysite, arba sąlygos bus staigesnės. Tikrai žinau vieną dalyką: nepasigailėsite. "Aš gerai dirbu šį darbą"Žinote, yra toks senas posakis: Le mieux est I'enneini du bien („Geriausias yra gėrio priešas“). Galbūt jūsų darbas nėra pati blogiausia vieta, bet taip, viršininkas yra ožka, o kas? Arba, pavyzdžiui, treti metai be priedo, o stabilus atlyginimas, juolab kad man jau per 30. Tam tikru mastu taip gali būti, tik prisimink, kad tu turi vieną gyvenimą ir jo nereikėtų išleisti nusivylimų, dėl įsivaizduojamo komforto, kai aplink tiek daug įdomių dalykų, o viso gyvenimo neužtenka suprasti. Nebijok būti geresniu, nebijok būti geresniu. Nieko neklausykite, atkakliai eikite į tikslą, jei žinote, kad tai yra tai, ką iš tikrųjų norite daryti. Nebijokite keistis!

    Interviu

    Apskritai, visa tai galite rasti internete arba pasiteirauti su draugais, bet manau, kad tai nebus nereikalinga. Žemiau pateikiamas interviu su jaunesniuoju Java kūrėju, koks jis būtų dabar, jei aš būčiau pašnekovas, pavyzdys. Klausimai gali būti bet kokie, tik bandžiau surinkti kažką vidutinio ligoninei. Apsimeskime, kad tau pasisekė. Standartinė schema 1 žingsnis. Jums paskambina verbuotojas ir susitarsite su ja pokalbį, pavyzdžiui, rytoj 11:00. 2 žingsnis Atvykstate anksti, nes 11:00 laikas greičiausiai ne jums, o kūrėjams, kurie turi rezervavę kažkokį kambarį, kuriame būsite kankinami. Bet kuris verbuotojas turi apie tai įspėti. 3 veiksmas Tiesą sakant, pradedant nuo 3 žingsnio, visi dalykai gali būti sumaišyti, nes interviu galima atlikti įvairiais būdais. Pavyzdžiui, čia tavęs galima paklausti apie pagrindinius dalykus, iš kur tu, kodėl esi su mumis ir pan. Gali būti, kad tai gali padaryti pats HR, ir, žinoma, gali būti, kad angliškai. Tiesa, tai priklauso nuo įmonės. 4 veiksmas Kviečiame į susitikimų salę, kurioje pabendrausite su vienu, dviem, trimis žmonėmis, iš kurių vienas bus vyresnysis arba techninis vadovas, kuris dirbs su jumis ateityje, tarp kitų gali būti Scrum meistras, kiti kūrėjai arba HR. Kurį laiką tave kalbina, tada paspaudžia ranką ir paleidžia. 5 veiksmas Galbūt tai bus kitą dieną, o gal iš karto po 4 žingsnio – pasikalbėsite su užsienio klientu (jei toks yra), o gal jis pats atliks interviu. Kaip matote, yra daug variantų. Kai kur klientai, kai kur ir pokalbis telefonu. Tai tik pavyzdys. Techninio pokalbio su jaunesniuoju Java kūrėju pavyzdys Man labai gaila nepakankamų kūrėjų, kurie skaito ką nors protingo, norėdami paskandinti / sutraiškyti / pasipuikuoti prieš pretendentą į pokalbį. Jei matote, kad toks žmogus yra priešais jus, ir jaučiate iš jo spaudimą ir įtampą, nedelsdami nusiųskite jį į tris juokingus, nes po sėkmingo praėjimo su šiuo kretinu turėsite dirbti. Nešvaistykite savo brangių nervų. Pokalbis, visų pirma, turėtų vykti siekiant išsiaiškinti, ką kandidatas žino, o ne tai, ko nežino. Natūralu, kad jei jums reikia žmogaus, kuris žino ką nors konkretaus - klauskite jo, nekankinkite jo nenaudingais dalykais, kurių nenaudojate projekte. Juk būk žmogus! Žemiau pateikiami apytiksliai klausimai, kurie gali kilti interviu metu. 5 klausimai kiekvienai technologijai. OOP 1. Pateikite polimorfizmo pavyzdį iš realaus gyvenimo? Kokia nauda? Trūkumai? Parašykite paprastą kodą. 2. Kas yra sąsaja? Abstrakti klasė? Kam mums reikalingos sąsajos, jei galima kvailai viską rašyti su pamokomis (šiek tiek provokuojant)? Tas pats pasakytina ir apie abstrakčią klasę. Kokie yra numatytieji Java 8 metodai? 3. Sukurkite klasių hierarchiją pagal konkretų įsivaizduojamos duomenų bazės ar programos pavyzdį (yra įvairių darbuotojų klasių sąrašas iš duomenų bazės) ir sąveikos tarp jų (sujungimas, sudėtis). 4. Kuo kompozicija skiriasi nuo agregacijos (is-a, has-a)? 5. Kaip galite apeiti daugkartinio paveldėjimo draudimą Java? JDK/JRE 1. Kuo JDK skiriasi nuo JRE? Kas yra JVM? 2. Kas yra klasės kelias ir kam jis skirtas? Kaip, pavyzdžiui, įkelti kitas klases į klasės kelią? 3. Ką žinote apie klasės įkroviklį? 4. Papasakokite apie javadoc? Kam tai? 5. Kas yra JAR, WAR? Bendra Java 1. Kuo skiriasi statiniai ir nestatiniai metodai? Kas yra galutinis? 2. Kas yra boksas-išpakavimas? baitas b = 127, b++, koks rezultatas ir kodėl? 3. Kas yra įvyniokliai, kam jie skirti? 4. Ką turiu padaryti, kad sukurčiau savo anotaciją? Kas yra nepaisymas / perkrovimas? 5. Kodėl Styginių klasė yra finalinė? Ką daro intern() metodas? Duomenų struktūros 1. Papasakokite apie „Java“ kolekcijų API struktūrą? Ar jau dirbote su Stream API? 2. Kuo ArrayList skiriasi nuo LinkedList? Kur geriau naudoti ArrayList ir kur yra LinkedList? 3. Papasakokite, kaip veikia HashMap? Kokios yra darbo su TreeSet, HashSet ypatybės? Turite patirties su Guava kolekcijomis? 4. Masyvai Java kalba, dvimačio masyvo pavyzdys. 5. HashCode, lygus HashMap pavyzdyje? Lygiagretumas 1. Kas yra procesas? Srautas? Kaip sukurti giją? Kas yra sinchronizuota? Kaip suprasti tą ar kitą saugaus kodo dalį? 2. Kas yra Thread.sleep, taip pat laukti, pranešti, duoti? 3. Pateikite aklavietės pavyzdį? 4. Kolekcijos dirbant su daugiasriegiu būdu. 5. ThreadLocal ir atominės operacijos SQL/JDBC 1. Konkrečiame pavyzdyje iš Vartotojų duomenų bazės gaukite tą, kurio atlyginimas didesnis nei 5000. 2. VIDINIS JOIN, OUTER JOIN, Order By, Group By pavyzdžiai. 3. Kodėl man reikia JDBC tvarkyklės? Pavyzdžiai. 4. Papasakokite viską, ką žinote apie ResultSet, keletą pavyzdžių. 5. Parašykite paprastą DAO naudodami RS. JPA / Hibernate 1. Kokie yra JPA privalumai ir trūkumai? 2. Kas yra EntityManager? subjektas? 3. JPA/Hibernate kriterijai. 4. „Vienas su vienu“, „daugelis su daugeliu“ JPA / „Hibernate“ 5. Kaip galėtumėte PRISIJUNGTI „Hibernate“? HQL? Pavasaris 1. Kas yra DI/IoC? Privalumai. 2. Kas yra taikymo kontekstas? Pupelė? 3. Kokie yra IoC inicijavimo tipai? 4. Singleton, prototipas pavasarį? Anotacija pagrįstas pavasaris? 5. Pupelių gyvavimo ciklas? init-metodas, sunaikinti-metodas? @PostConstruct, @PostDeploy? Maven 1. Pagrindinės maven fazės, gyvavimo ciklas. 2. Kaip paleisti maven su testais, be testu? Kas yra archetipas, mvn priklausomybė? 3. Profiliai maven, kaip kurti, kaip paleisti. 4. Kas yra momentinė nuotrauka maven? Centrinės / nuotolinės saugyklos? 5. Įskiepiai mvn, veikimo principas, pora pavyzdžių. Algo 1. Algoritmo samprata, jo greitis, Big-O-Notation. 2. Kaip vienu ypu rasti vidurinį elementą LinkedList? 3. Parašykite primityvų krūvą? Kuo skiriasi „Stack“ ir „Queue“? LIFO, FIFO? 4. Greitas rūšiavimas, sujungimo rūšiavimas. 5. Parašykite programą, kuri patikrintų, ar skaičius yra palindromas. Sutinku, gal štanga šiek tiek labiau linksta į vidurį nei jaunesniajam, bet manau, kad toks pasiruošimas tau tikrai nepakenks. Pabandykite į kiekvieną klausimą įsigilinti. Beje, daugelis „Java“ krypčių čia nenurodytos, prašome į tai atsižvelgti.

    Darbo metu

    Čia yra nedidelės rekomendacijos tiems jaunesniems / vidutiniams kūrėjams, kurie jau yra įsitvirtinę. Šie paprasti patarimai gali būti naudingi jums, kaip jie padėjo man savo ruožtu. Nebūk užsispyręs Nustokite įrodinėti savo mintį, net jei tai viliojančiai arti tiesos. Jau pastebėjote, kad ilgai ginčijosi, vadinasi, kitoje barikadų pusėje – eilinis asilas, kuris gyvenime turi tik dvi nuomones: savo ir neteisingą. Turime neįtikėtinai daug užsispyrusių žmonių, kurie laikosi savo pozicijas iki paskutinio, kol jų ego nepajudina. Ir tai ne tik jūsų kolegos, jie yra visur - mikroautobuse, parduotuvėje, giminaičiams, artimiems draugams - jūs negalite nuo jų pabėgti ar pasislėpti. Reikia kažkaip su jais bendrauti, net jei supranti, kad žmogus kalba atviras nesąmones. Be to, tas pats gali nutikti ir jums. Sutinku, paprastus dalykus galima paaiškinti ir užsispyrusiam žmogui, o jei kalbame apie architektūrinius klausimus projekte ar asmeninę nuomonę? Pamirškite šį šlamštą – būkite lankstūs. Labai gerbiu žmones, kurie visų akivaizdoje gali pripažinti klydę. Būtent ši savybė jums, kaip jaunesniajam specialistui, pravers – sunku susidurti su atviru žmogumi, ypač kai jis pripažįsta, kad mokosi ir turi teisę klysti. Nevėluok Nesvarbu, ar tai bandomasis laikotarpis, ar tik penktadienis, kai visi surenka balus ir ateina į 11. Svarbus ir kitas dalykas: punktualumas – tai profesionalo, kuris užsidirba sau papildomų taškų, bruožas. O papildomi balai žmogui be patirties nepakenks, tiesa? Stenkitės nevėluoti ir sąžiningai išeiti iš darbo po 8 valandų. Nepiktnaudžiaukite sąmata Deja, tai labai dažnas vaizdas, į kurį kažkada patekau anksčiau. Kūrėjas užduočiai atlikti skyrė 8-16 valandų ir netikėtai ją atliko per 3-4 valandas. Likusias valandas jis skiria asmeniniam laikui stalo teniso pavidalu, kaip buvo pas mane, arba žiūrėdamas youtube ir kitas pramogas. Iš teisinės pusės lyg ir susitarė, bet iš žmogiškosios pusės atimate iš savęs labai svarbius dalykus: 1. Stovite vietoje, nes užpildote papildomą laiką nereikalingais dalykais; 2. Jūs nesitobulinate, nes neinformuojate vadovybės apie savo sparčią pažangą, niekas nežino, kad užduotis atliekate greičiau nei tikėjotės; 3. Pradedi nuolat pervertinti vidutinį laiko kiekį vertybėms, tai tik kelias į niekur. Skirkite laiko studijoms Tikimybė atsilikti nuo variklio yra nerealiai didelė, todėl nepamirškite, kad technologijos ir naujos versijos vystosi labai greitai. Prenumeruokite mūsų dienų Java evangelistus, skaitykite Java santraukas ir apskritai domėkitės, mokykitės naujų dalykų. Tai padės išlaikyti savo prekės ženklą ir tobulėti. Padėti kitiems Nebijokite padėti kitiems, net jei jie tokie pat žali kaip jūs. Pirma, labai sustiprinsite savo žinias, antra, sulauksite pagarbos kitų akyse, o jie kartu jums padės. Tokioje aplinkoje gimsta geriausios komandos, labai spartus techninis ir asmeninis augimas. Užsiimk sportu. Turėti hobį Nerimtai. Sportuojantys žmonės ne tik atrodo ir jaučiasi geriau, bet ir jų smegenų veikla yra puiki! Prie to prisideda skoliozė, apatinė nugaros dalis, antsvoris, įvairios vidaus organų problemos – visą parą sėdintys prie kompiuterio, net ir ne darbo metu. Jei negalite sportuoti (kuo abejoju), naudokite mažus gyvenimo būdus: karts nuo karto dirbkite atsistoję, palikite du sustojimus anksčiau ir eikite į darbą. Ir taip, daugiau vaikščiokite. Taip pat kyla pavojus perdegti, jei programavimas užima daug daugiau laiko nei 40 valandų per savaitę. Į pagalbą ateis asmeniniai pomėgiai – pavyzdžiui, fotografija, muzika ir pan. Reguliariai skirkite laiko dvasingumui. Balansas asmeniniame gyvenime Kai mergina/žmona sako: „nešiojamas kompiuteris arba aš“, turite rimtai pagalvoti, kokią vietą jūsų gyvenime užima programavimas. Kita vertus, pradedant savo kelionę IT srityje, reikia aiškiai paaiškinti savo sielos draugui, kad dabar reikia daug mokytis, kad pasiektum daugiau. Tikiuosi jie supras. Na, jūs stengiatės subalansuoti ir teisingai paskirstyti savo laiką. eiti toliau Būkite iniciatyvūs, jei manote, kad, pavyzdžiui, galite pasidalinti žiniomis ar turėti įdomių temų, kodėl gi nesurengus mažų kursų įmonėje kitiems? Nebijokite prisidėti prie didelių atvirojo kodo projektų, jei žinote, kaip padėti. Jei nori parašyti žaidimą, socialinį projektą ar kitą idėją – daryk, daryk, daryk! Nestovėkite vietoje, visada ieškokite būdų, kaip galėtumėte tobulėti. Būkite konkurencingi Stebėkite naujas tendencijas, sekite tendencijas, kurios vyksta Java bendruomenėje. Pavyzdžiui, nebus nereikalinga, jei retkarčiais, laikas nuo laiko, stebėsite „Java“ laisvas darbo vietas DOU, bet ne tam, kad pabėgtumėte nuo darbo, o tam, kad žinotumėte, kurios technologijos išlieka aktualios, o kurios pamažu nyksta iš rinkos. . Taip pat pabandykite lankyti Coursera, Udacity ir kt. kursus, tyrinėkite naujus horizontus. Ir net anglų kalba: pabandykite žiūrėti savo mėgstamus filmus / TV laidas originaliu formatu su subtitrais, kad pagerintumėte pokalbio įgūdžius, atsisiųskite keletą įdomių programų kalbos mokymuisi (pavyzdžiui, „LinguaLeo“) ir galų gale eikite į kursus. .

    Išvada

    Na, mano mažasis DOU projektas eina į pabaigą. Mieli draugai, nuoširdžiai linkiu jums susirasti darbą ir tikiuosi, kad viskas, ką aprašiau šiuose 7 straipsniuose, bus vertingas vadovas jums, net ir tiems, kurie jau dirba „Java“ kūrėjais. Būsimieji jaunieji, atminkite, kad nieko nėra neįmanomo, o jei tikrai pastūmėsite, tikrai pasiseks. Noriu, kad pagaliau nuspręstumėte, ar tai jūsų, ar ne, sukurtumėte išsamų treniruočių planą ir jo šauniai vykdytumėte. Nenusiminkite, jei mainais gausite tylą - visa tai laikina, svarbiausia tikėti ir jokiu būdu neklysti, o mokytis, mokytis ir dar kartą mokytis. Norėčiau labai padėkoti DOU komandai už tai, kad suredagavo didelį kiekį medžiagos ir skyrė man puikų eterio laiką pirmadieniais. DOU yra šauni bendruomenė, kuri nustojo būti tik Ukrainos IT žmonių svetainė. Taip pat noriu padėkoti visiems komentatoriams, kurie mano straipsnius skaitė įstrižai ir ištraukė frazes iš konteksto. Straipsniai be jūsų neatrodytų tokie įdomūs :) Tegul Jėga būna su jumis!

    Tiems, kurie žodį Java Core girdi pirmą kartą, tai yra pagrindiniai kalbos pagrindai. Turėdami šias žinias, jau galite saugiai vykti į praktiką / stažuotę. Šie klausimai padės prieš pokalbį atnaujinti žinias arba išmokti ką nors naujo pačiam. Norėdami įgyti praktinių įgūdžių, mokykitės toliau.

      Kaip sukurti nekeičiamą objektą „Java“? Išvardykite visus privalumus

      Nekintama klasė yra klasė, kurios būsena negali būti pakeista ją sukūrus. Čia objekto būsena iš esmės yra vertės, saugomos klasės egzemplioriuje, nesvarbu, ar tai primityvūs tipai, ar nuorodos tipai.

      Kad klasė būtų nekintanti, turi būti įvykdytos šios sąlygos:

      1. Nenurodykite nustatymų ar metodų, modifikuojančių laukus ar objektus, kurie nurodo laukus. Seteriai reiškia objekto būsenos keitimą, ko čia norime išvengti.
      2. Padarykite visus laukus galutinius ir privačius. Privatūs laukai nebus pasiekiami iš už klasės ribų, o priskyrę juos galutiniams užtikrinsite, kad jų nepakeisite net netyčia.
      3. Neleiskite poklasiams nepaisyti metodų. Lengviausias būdas tai padaryti – paskelbti klasę galutine. Užbaigtų „Java“ klasių negalima nepaisyti.
      4. Visada atminkite, kad jūsų kintamieji atvejai gali būti kintami arba nekintantys. Apibrėžkite juos ir grąžinkite naujus objektus su nukopijuoto turinio visiems kintamiems objektams (nuorodos tipams). Nekintamus kintamuosius (primityvius tipus) galima saugiai grąžinti be papildomų pastangų.

      Be to, turite nepamiršti vėlesnių nekintamų klasių pranašumų. Jums gali prireikti jų interviu. Nekeičiamos klasės:

      • lengva projektuoti, išbandyti ir naudoti
      • yra automatiškai saugios gijos ir neturi sinchronizavimo problemų
      • nereikia kopijavimo konstruktoriaus
      • leidžia „tingiai inicijuoti“ maišos kodą ir talpykloje išsaugoti grįžtamąją reikšmę
      • nereikalauja saugios kopijos, kai naudojama kaip laukas
      • sukurti gerus žemėlapio klavišus ir rinkinio elementus (šie objektai neturėtų keisti būsenos, kai yra kolekcijoje)
      • paverskite savo klasę nuolatine, sukurdami ją vieną kartą, ir jos nereikia iš naujo tikrinti
      • visada turi „nesėkmės atomiškumą“, terminą, kurį sukūrė Joshua Bloch: jei nekintantis objektas padarys išimtį, jis niekada nebus paliktas nepageidaujamoje ar neapibrėžtoje būsenoje.

      Pažvelkite į pavyzdį, parašytą šiame įraše.

      Java specifikacijoje teigiama, kad viskas Java perduodama pagal vertę. „Java“ nėra tokio dalyko kaip „perduoti pagal nuorodą“. Šios sąlygos yra susijusios su metodų iškvietimu ir kintamųjų perdavimu kaip metodo parametrais. Na, primityvūs tipai visada perduodami pagal vertę be jokios painiavos. Tačiau sąvoka turėtų būti suprantama atsižvelgiant į sudėtingų tipų metodo parametrą.


      Aukščiau pateiktame pavyzdyje pirmojo egzemplioriaus adreso bitai nukopijuojami į kitą nuorodos kintamąjį, todėl abi nuorodos nukreipia į tą pačią atminties vietą, kurioje saugomas objektas. Atminkite, kad antrajai nuorodai priskirdami nulį, pirmai nuorodai nepriskirsite nulio. Tačiau objekto su vienu nuorodomis kintamuoju būsenos pasikeitimas atsispindės ir kitoje nuorodoje.

      Kam naudingas galutinis blokas? Ar šis blokas garantuoja jo kodo vykdymą? Kada pagaliau blokas nešaukiamas?

      Galutinis blokas visada iškviečiamas, jei yra bandomasis blokas. Tai užtikrina, kad galutinis blokas būtų iškviestas, net jei įvyksta netikėta išimtis. Bet pagaliau yra naudingiau nei tik tvarkyti išimtis – šis blokas leidžia išvalyti kodą, kuris netyčia apejo grįžimą, tęsimą arba pertrauką. Valymo kodo įdėjimas į galutinį bloką visada yra gera praktika, net jei nesitikima jokių išimčių.

      Jei virtualioji mašina išeina, kai vykdomas try arba gaudymo blokas, galutinis blokas nebus vykdomas. Panašiai, jei gija nutrūksta arba užmušama vykdant try or catch bloką, galutinis blokas nebus vykdomas, net jei programa vis dar veikia.

      Kodėl yra dvi datos klasės, viena java.util pakete, o kita java.sql?

      java.util.Date žymi datą ir laiką, o java.sql.Date – tik datą. Java.sql.Date papildymas yra java.sql.Time klasė, kuri reiškia tik laiką.

      Klasė java.sql.Date yra java.util.Date klasės poklasis (plėtimas). Taigi, kas pasikeitė java.sql.Date:

      • toString() sukuria kitokį eilutės vaizdą: yyyy-mm-dd
      • statinis metodas valueOf(String) sukuria datą iš eilutės su aukščiau pateikta reprezentacija
      • valandoms, minutėms ir sekundėms neįtraukti geteriai ir setteriai

      Klasė java.sql.Date naudojama JDBC ir yra sukurta taip, kad neturėtų laiko komponento, t. y. valandos, minutės, sekundės ir milisekundės turi būti lygios nuliui... bet klasei to nereikia.

      Paaiškinkite žymeklio sąsajas.

      Žymeklio sąsajos modelis yra informatikos dizaino modelis, naudojamas programavimo kalbose, kurios pateikti informaciją apie objektus vykdymo metu. Tai suteikia galimybę susieti klasės metaduomenis, kai kalba neturi aiškaus tokių metaduomenų palaikymo. „Java“ tam naudoja sąsajas nenurodydama metodų.

      Geras žymeklio sąsajos naudojimo Java programoje pavyzdys yra Serializable sąsaja. Klasė įgyvendina šią sąsają, kad parodytų, jog jos netrumpieji duomenys gali būti įrašyti į baitų srautą arba failų sistemą.

      Pagrindinė problemaŽymeklio sąsaja yra ta, kad sąsaja apibrėžia klasių, kurios ją įgyvendina, susitarimą, ir tą susitarimą paveldi visi poklasiai. Tai reiškia, kad negalite „derealizuoti“ žetono. Aukščiau pateiktame pavyzdyje, jei sukuriate poklasį, kurio nenorite serializuoti (galbūt todėl, kad jis yra trumpalaikės būsenos), turite aiškiai įvesti NotSerializableException .

      Kodėl pagrindinis() metodas paskelbtas kaip viešas statinis tuščias?

      Kodėl viešas? Pagrindinis metodas turi viešosios prieigos modifikatorių, todėl jį gali pasiekti visur ir bet kuris objektas, kuris nori naudoti šį metodą programai paleisti. Čia nesakau, kad JDK / JRE turi panašią priežastį, nes java.exe arba javaw.exe (skirta „Windows“) naudoja „Java Native Interface“ (JNI) iškvietimą metodui paleisti, todėl jie gali jį iškviesti bet kuriuo atveju, nepaisant prieigos modifikatorius.

      Kodėl statinis? Tarkime, kad mūsų pagrindinis metodas nėra statinis. Dabar, norint iškviesti bet kurį metodą, jums reikia klasės egzemplioriaus. Tiesa? „Java“ leidžia turėti perkrautus konstruktorius, mes visi tai žinome. Tada kurį naudoti, o iš kur bus parametrai perkrautam konstruktoriui?

      Kodėl tuščias? Grąžinimo vertė virtualioje mašinoje, kuri iš tikrųjų iškviečia šį metodą, nėra naudojama. Vienintelis dalykas, kurį programa nori pasakyti skambinimo procesui, yra įprastas arba neįprastas nutraukimas. Tai jau įmanoma naudojant System.exit(int) . Ne nulinė vertė reiškia nenormalų nutraukimą, kitaip viskas gerai.

      Kuo skiriasi eilutės kaip new() kūrimas nuo pažodinės (naudojant dvigubas kabutes)?

      Kai sukuriame eilutę naudodami new() , ji sukuriama krūvoje ir taip pat įtraukiama į eilučių telkinį, o eilutė, sukurta naudojant literalą, sukuriama tik eilučių telkinyje.

      Norėdami atsakyti į šį ar panašius klausimus, turite daugiau sužinoti apie stygų baseino koncepciją. Mano patarimas – gerai išmokti styginių klasę ir styginių baseiną.

      Kaip veikia String klasės metodas substring()?

      Kaip ir kitose programavimo kalbose, Java eilutės yra simbolių sekos. Ši klasė labiau primena naudingumo klasę, skirtą darbui su šia seka. Simbolių seką pateikia šis kintamasis:

      /** Reikšmė naudojama simboliams saugoti. */ /** Reikšmė naudojama simboliams saugoti */ privati ​​galutinė simbolio vertė; Šie kintamieji naudojami norint pasiekti šį masyvą įvairiais scenarijais /** Poslinkis yra pirmasis naudojamos saugyklos indeksas. */ /** Poslinkis yra pirmasis naudojamos saugyklos indeksas. */ privatus galutinis tarpinis užskaitymas; /** Skaičius yra simbolių skaičius eilutėje. */ /** Skaičius yra simbolių skaičius eilutėje. */ privatus galutinis int skaičius;

      Kiekvieną kartą, kai sukuriame eilutę iš esamos eilutės egzemplioriaus, metodas substring() nustato tik poslinkio ir skaičiavimo kintamuosius į naujas reikšmes. Vidinis simbolių masyvas nekeičiamas. Tai gali būti atminties nutekėjimo šaltinis, jei substring() metodas naudojamas nerūpestingai:

      Pradinė vertės vertė nesikeičia. Taigi, jei sukursite 10 000 simbolių eilutę ir 100 poeilučių su 5–10 simbolių, visuose 101 objektuose bus tas pats 10 000 simbolių masyvas. Be jokios abejonės, tai yra atminties švaistymas.

      To galima išvengti pakeitus kodą taip:

      pakeiskite original.substring(beginIndex) į naują String(original.substring(beginIndex)) , kur originalas yra pradinė eilutė.

      Paaiškinkite, kaip veikia HashMap. Kaip sprendžiama dublikatų problema?

      Daugelis iš jūsų tikrai sutiks, kad HashMap šiuo metu yra pati mėgstamiausia interviu tema. Jei kas nors manęs paprašys pasakyti „Kaip veikia HashMap?“, aš tiesiog atsakysiu: „Pagal maišos principą“. Kad ir kaip būtų paprasta.

      Taigi maišos naudojimas iš esmės yra būdas priskirti unikalų kodą bet kuriam kintamajam / objektui, pritaikius bet kokią formulę / algoritmą jo savybėms.

      Žemėlapio apibrėžimas yra toks: „Objektas, susiejantis raktus su reikšmėmis“. Labai paprasta, tiesa? Taigi, „HashMap“ turi savo vidinę klasę „Entry“, kuri atrodo taip:

      statinė klasė Įvedimo padargai Žemėlapis . Įėjimas(galutinis K klavišas; V reikšmė; Įveskite kitą; galutinis int maišos; …//Čia rasite daugiau kodo)

      Kai kas nors bando įtraukti rakto-reikšmių porą į HashMap , nutinka taip:

      • Visų pirma, pagrindinis objektas yra patikrintas prieš null . Jei raktas yra nulinis, reikšmė išsaugoma padėties lentelėje. Kadangi nulio maišos kodas visada yra 0.
      • Tada kitas veiksmas yra apskaičiuoti maišos reikšmę, iškviečiant jos hashCode() metodą pagrindiniame kintamajame. Ši maiša naudojama masyvo indeksui apskaičiuoti, kad būtų saugomas įrašo objektas. JDK kūrėjai puikiai žinojo, kad hashCode() metodas gali būti blogai parašytas ir gali grąžinti labai didelę arba labai mažą reikšmę. Norėdami išspręsti šią problemą, jie pristatė kitą hash() metodą ir perduoda objekto maišos kodą šiam metodui, kad ši reikšmė būtų perkelta į masyvo indekso dydžio diapazoną.
      • Dabar iškviečiamas metodas indexFor(hash, table.length), kad būtų galima apskaičiuoti tikslią įrašo objekto saugojimo vietą.
      • Dabar pagrindinė dalis. Kaip žinome, du skirtingi objektai gali turėti tą pačią maišos kodo reikšmę, kaip du skirtingi objektai gali būti saugomi toje pačioje archyvo [vadinamo šiukšliadėžės] vietoje?

      Atsakymas yra LinkedList. Jei prisimenate, įėjimo klasė turi „kitą“ ypatybę. Ši savybė visada nurodo kitą grandinės objektą. Šis elgesys labai panašus į LinkedList .

      Taigi, maišos kodo atitikmenų atveju Entry objektai saugomi LinkedList forma. Kai įrašą reikia įdėti į tam tikrą indeksą, ar „HashMap“ patikrina, ar toje vietoje yra kitas įrašas? Jei ten nėra įrašo, mūsų objektas bus išsaugotas šioje vietoje.

      Jei mūsų indekse jau yra kitas objektas, pažymimas kitas jo laukas. Jei jis yra nulis , mūsų objektas tampa kitu LinkedList mazgu. Jei sekantis nėra nulis , ši procedūra kartojama tol, kol randamas kitas laukas nulis.

      Kas atsitiks, jei pridėsime kitą rakto reikšmę, lygią tajai, kurią įtraukėme anksčiau? Logiška, kad ji turėtų pakeisti senąją vertę. Kaip tai atsitinka? Nustačius objekto „Entry“ padėties indeksą, kartodamas „LinkedList“, esantį mūsų indekse, „HashMap“ iškviečia kiekvieno įrašo objekto rakto vertės metodą equals (). Visi šie „LinkedList“ įrašo objektai turi tą pačią maišos kodo reikšmę, tačiau metodas equals() patikrins tikrąją lygybę. Jei raktas. lygus(k) valiai tiesa, tada abu bus laikomi tuo pačiu objektu. Dėl to bus pakeistas tik objekto Įrašo vertės objektas.

      Taigi HashMap užtikrina raktų unikalumą.

      Skirtumai tarp sąsajų ir abstrakčių klasių?

      Tai labai dažnas klausimas, jei duodate interviu jaunesnio lygio programuotojui. Svarbiausi skirtumai išvardyti žemiau:

      • „Java“ sąsajose kintamieji yra a priori galutiniai. Abstrakčiose klasėse gali būti negalutinių kintamųjų.
      • „Java“ sąsaja tikrai negali būti įgyvendinta. Abstrakčioje klasėje gali būti metodų, kurie įgyvendina bazinį elgesį, pavyzdžių.
      • Sąsajos nariai turi būti vieši. Abstrakčioji klasė gali turėti bet kokių prieigos modifikatorių.
      • Sąsaja turi būti įdiegta su implements raktiniu žodžiu. Abstrakčioji klasė turi būti išplėsta raktiniu žodžiu tęsiasi.
      • Java klasėje gali būti įdiegta daug sąsajų, tačiau ji gali būti paveldima tik iš vienos abstrakčios klasės.
      • Sąsaja yra visiškai abstrakti ir negali būti kartojama. Abstrakčioji klasė taip pat negali turėti klasės egzempliorių, bet gali būti iškviesta, jei egzistuoja main() metodas.
      • Abstrakčioji klasė yra šiek tiek greitesnė nei sąsaja, nes sąsaja tikisi peržvalgos prieš iškviesdama bet kokį nepaisytą Java metodą. Daugeliu atvejų tai yra nedidelis skirtumas, tačiau jei rašote laiko kritinį prašymą, turite atsižvelgti ir į šį faktą.
    1. Kada nepaisote hashCode() ir equals() metodų?

      HashCode() ir equals() metodai yra apibrėžti objektų klasėje, kuri yra pagrindinė visų Java objektų klasė. Dėl šios priežasties visi Java objektai paveldi bazinį šių metodų įgyvendinimą.

      HashCode() metodas naudojamas norint gauti unikalią sveikojo skaičiaus reikšmę tam tikram objektui. Ši reikšmė naudojama norint nustatyti krepšelio vietą, kai objektą reikia saugoti duomenų struktūroje, pvz., HashTable. Pagal numatytuosius nustatymus metodas hashCode() grąžina sveikąjį atminties adreso, kuriame saugomas objektas, vaizdą.

      Metodas equals (), kaip rodo pavadinimas, naudojamas paprastam objektų lygiavertiškumui. Pagrindinis metodo įgyvendinimas yra patikrinti dviejų objektų nuorodas, ar jos yra lygiavertės.

      Atkreipkite dėmesį, kad paprastai reikia nepaisyti hashCode() metodo, kai nepaisomas lygis() metodas. Tai būtina norint palaikyti bendrą hashCode metodo susitarimą, kuris teigia, kad vienodi objektai turi turėti vienodus maišos kodus.

      Equals() metodas turi nustatyti ryšio lygybę (jis turi būti rekursinis, simetriškas ir tranzityvus). Be to, jis turi būti patvarus (jei objektas nepasikeitė, metodas turi grąžinti tą pačią reikšmę). Be to, visada turėtų grįžti o.equals(null). klaidinga.

      hashCode() taip pat turi būti stabilus (jei objektas nepasikeitė vienodo() metodo sąlygomis, jis ir toliau turi grąžinti tą pačią reikšmę.

      Ryšys tarp dviejų metodų yra toks: visada, jei a.equals(b) , tada a.hashCode() turi būti toks pat kaip b.hashCode() .

    Sėkmės studijose!! Straipsnio autorius Lokesh Gupta Originalus straipsnis Nuorodos į kitas dalis: