Ce să spui la un interviu cu un programator java. Interviuri pentru dezvoltatori Middle Java

M-am mutat în alt oraș, îmi caut un loc de muncă, merg la interviuri. Mi s-a părut că întrebările puse acolo, deși binecunoscute, totuși, puse cap la cap, te pot ajuta să te pregătești și să te simți mai încrezător.

Întrebări pentru a vă ajuta să înțelegeți principiile construirii unui SGBD.
1. Care este prima formă normală și procesul de normalizare? Care sunt formele normale?
2. Care este semnificația unui index DBMS, cum sunt structurate, cum sunt stocate? Cum ați implementa aceeași funcționalitate? Ultima întrebare este pusă dacă nu există o înțelegere clară a indicilor.
3. Desenați o relație Multi-la-Mulți. De exemplu: tabelele autori și cărți. Un autor poate avea mai multe cărți, iar o carte poate fi scrisă de mai mulți autori. Scrieți o interogare SQL pentru a selecta cărți ale unui anumit autor.

Întrebări de bază despre Java.
4. Clasa de bază în Java, după cum știți, este Object. Ce metode poți numi?
5. Spuneți-ne ce sunt equals și hashCode? Ce reguli și convenții există pentru implementarea acestor metode? Când sunt folosite?
6. Explicați metodele wait, notify, notifyAll. Cum sunt folosite, când, de ce sunt necesare? Ce este sincronizat?
7. Ce este finalizarea? De ce este nevoie? Ce ne puteți spune despre colectorul de gunoi și algoritmii săi?
8. De ce este declarată protejată metoda clonării? Ce este necesar pentru a implementa clonarea?
9. Ce modificatori există (acces și altele)? Ce sunt volatile și tranzitorii? Pentru ce și în ce cazuri ar putea fi folosit implicit?

Cadrul de colecție Java
10. Care sunt interfețele de colecție în Java? Explicați cum diferă.
11. Ce implementări ale acestor interfețe cunoașteți?
12. Cum diferă ArrayList și LinkedList unul de celălalt? Cum sunt construite? În ce cazuri ar trebui folosite?
13. Care este diferența dintre HashMap și TreeMap? Cum sunt structurate și cum funcționează? Dar timpul de acces la obiecte, care sunt dependențele?
14. Ce este un Hashtable, cu ce este diferit de un HashMap? Astăzi este depreciat, cum puteți folosi în continuare funcționalitatea necesară?

Excepții
15. Ce este o excepție? Ce tipuri de excepții cunoașteți și prin ce diferă?
16. Poate o problemă cu blocurile try-catch-finally și întrebarea ce va fi returnat sau ce excepție va fi trecută în cele din urmă?

Algoritmi
17. Ce algoritmi de sortare cunoașteți? Ce fel de algoritmi cunoașteți?
Mai mult, aici sunt posibile diverse întrebări suplimentare despre evaluarea complexității algoritmilor și compararea lor între ei.

Modele de design.
18. Sunteți familiarizat cu vreun model de design?
19. Scrie un Singleton... Și cu încărcare leneșă. Ce se întâmplă dacă trebuie să fie sigur pentru fire? Și în ce cazuri este mai rău încărcarea leneșă?
20. Ce poți spune despre MVC? Desenați o diagramă și explicați cum funcționează MVC.

O serie de întrebări pentru a vă ajuta să înțelegeți tehnologia J2EE.
21. Ce este un servlet, jsp, diferența lor?
22. Ce este Ajax? Cum funcționează în principiu această tehnologie?
23. Ce este ORM, cum să îl traduc și cum ar trebui să funcționeze?

Probleme simple pentru scrierea algoritmilor.
24. Scrieți o funcție pentru a calcula factorial.
25. Este dată o funcție pentru calcularea numerelor Fibonacci, se știe că funcționează. Găsiți eroarea logică. Estimați complexitatea algoritmului rezultat.
26. Inversați linia.
27. Calculați media tabloului.

Este util să rețineți că, dacă nu vă simțiți foarte încrezători, nu este nevoie să spuneți cuvinte inutile. Spui un cuvânt în plus, iar ei se agață de el, derulând lanțul. Ei promovează ceva despre care nu sunt foarte siguri. Această capacitate a oamenilor - de a se agăța - trebuie folosită, dar cu beneficii pentru tine;-)

Cunoașterea și înțelegerea... lucrurile stau cu totul altfel, deci
- diferiți algoritmi, de exemplu sortarea, merită să vă scrieți chiar și dintr-un manual. Vedeți cât de diferiți sunt unul de celălalt, comparați complexitatea lor.
- este util să privim diferite utilități și biblioteci, principiile grupării claselor în pachete și stilul de scriere a codului și de comentare. Poate fi foarte util în înțelegerea modificatorilor de acces și a organizării proiectului.
- înțelegând ceva anume, îi poți ajuta pe cei care știu mai puțin. Accesați orice forum și încercați să răspundeți la întrebări pe un subiect care vă interesează. Poți lua ceva pentru tine din discuție. Puteți scrie un articol scurt. Desigur, trebuie să înțelegeți bine subiectul.
Orice lucrare care vizează îmbunătățirea propriilor calificări va fi vizibilă unui intervievator competent și nu va trece neobservată. Singurul lucru este că trebuie să vorbiți despre asta sincer, nu ar trebui să vă subestimați capacitățile și abilitățile.
Pentru a avea orice ghid pentru pregătirea sau dezvoltarea ta ca specialist, poți să te uiți la ceva similar cu acesta.

De fapt, întrebările enumerate mai sus sunt la nivelul Junior Developer, așa cum îmi imaginez. Undeva, poate mai profund, undeva mai puțin, dar ca fapt - Junior.

Fiecare soluție creează noi probleme

Forța este un râu din care mulți pot bea, iar antrenamentul Jedi nu este singura modalitate de a extrage din el.” - Luke Skywalker Toate selecțiile de cărți au fost lăsate în urmă. Depinde de tine să decizi pe care dintre ele să citești și pe care nu. Acum îți mai rămâne un singur obiectiv: să obții un loc de muncă și să-ți construiești o carieră fără a călca pe greblă. Ultimul articol este împărțit în secțiuni: - Înainte de muncă - Interviu - În timpul muncii Există multe păreri personale în această parte, așa că vă rog să nu scoateți fraze din context și să o tratați ca pe o conversație sinceră cu un vechi prieten :).

Înainte de muncă

Mai jos sunt cele mai populare zece clișee care apar atunci când sufletul este atras de programare, dar anumite circumstanțe interferează cu persoana respectivă. Sarcina mea este să încerc să-ți opresc suspiciunea și să te pregătesc pentru un mod pozitiv de a gândi. Dacă citești acest articol, ești mai departe decât crezi! Din punct de vedere mental, ești deja acolo unde trebuie, iar dacă ai citit deja câteva cărți, atunci ești deja la jumătatea drumului. Prin urmare, încetează să te îndoiești - acesta este lotul celor slabi. Doar înainte! Deja mai bine? Atunci să mergem! "Nu am studii" Când am fost complet verde și am intrat în academia uneia dintre marile companii de outsourcing, intervievatorii mi-au dat de înțeles că nu sunt deloc interesați de diplomă, așa că întrebările erau specifice - despre OOP și Java de bază. Desigur, veți întâlni posturi vacante în care există disponibilitatea tehnologiei. educația va fi o cerință clară. Vreau doar să spun că absența lui nu este un obstacol în aceste zile. Multe birouri din străinătate solicită BS/MS Informatică sau, atenție, experiență relevantă. Nu convingător? S-ar putea să fii încurajat de faptul că educatie tehnica Nu-l am ;), dar acest lucru nu m-a împiedicat absolut să câștig experiență companii mari. Întrebați-mă acum, ce aș face dacă aș putea derula filmul? Desigur, aș merge la KPI/NAU, dar nu aș fi prea trist dacă nu aș intra. Nu-ți mai face griji pentru asta. Timpul va trece - poți obține o diplomă la 40 de ani dacă vrei - dar deocamdată, concentrează-te pe a deveni un dezvoltator junior aici și acum. „Vor fi oameni mai deștepți decât mine”Întotdeauna vor exista oameni mai deștepți, mai deștepți, mai flexibili, mai talentați decât tine și orice job nu face excepție. Acest fapt nu vă oferă absolut dreptul de a vă abate de la obiectivul dvs. Poate că undeva în cealaltă parte a globului este un băiețel din Japonia care înmulțește și împarte numere mai repede decât tine, iar o bunica din Republica Cehă scrie pe tastatură telefon mobil mai repede decât orice adolescent. Dar nu te gândești la asta, nu? Atunci de ce ar trebui să-ți pese de oamenii cu care lucrezi odată ce te angajezi? În unele privințe, viitorii tăi colegi îți vor fi superiori, iar în altele îți vor fi inferiori. Este în regulă! O tăiem. „Nu cred că pot” Ei bine, în primul rând, nimeni nu a spus că ar fi ușor, dar asta nu înseamnă că scopul tău este imposibil. Nimic nu te împiedică să încerci, chiar dacă în prezent lucrezi ca contabil sau consultant de vânzări. Vino după muncă și stai să studiezi. Dacă în timp vezi ceva progres, acesta este un semn că mergi în direcția corectă. Nu te opri! Dacă ești chiar puțin interesat de acest lucru și ți se dă, atunci nu știu un singur punct care să mă convingă că nu ești demn de asta. „Sunt copleșit de lene” Lenea este pur și simplu o lipsă de motivație. Dacă observi asta cel maiÎn timpul liber, în loc să studiezi și să rămâi pe drumul cel bun, faci prostesc gunoi – mă grăbesc să te anunț că, cel mai probabil, meseria de programator nu este pentru tine. Cel puțin nu acum. Unii numesc lenea un păcat, o boală, holera epocii moderne împreună cu obezitatea. Lăsați această chestiune în seama celor isterici în carieră. După părerea mea, totul în jur în această viață este impregnat de iluzia luptei și a competiției: cine este mai înalt, cine este mai puternic, cine este mai bogat. Cine are o mașină mai mișto, cine în echipă are un salariu mai mare, cine presă pe bancă cu greutăți mai mari în sală, care dintre fete s-a căsătorit mai devreme și a avut copii - asta te îmbolnăvește, ca fast-food puturos. Oamenii au încetat să trăiască și să se bucure de viață, urmându-și visele, schimbându-și zona de confort cu o alegere între Pepsi și Coca-Cola. Pentru mine, lenea este bună, este pur și simplu minunată. Aceasta este o funcție de protecție obișnuită a corpului tău pentru a economisi energie și timp pentru lucruri care nu-i sunt utile. Omul a fost creat pentru a fi liber, așa că dacă ești leneș, nu mai încerca să-ți ridici fundul de pe canapea - poate că acum este la locul lui :). „Merg acolo după bani” Dacă adunați dezvoltatori și spuneți: de acum înainte salariul dvs. va fi de 3-4k grivne pentru orice nivel, iar testerii vor continua să primească aceleași tarife, atunci întrebarea va fi diferită: nu câți bombardieri, ci câți programatori după aceasta Știrile vor rămâne la programatori. Mulți oameni intră în IT din cauza banilor. Salariu tradus din dolari, brânză și un DSLR scump. Indiferent cât de mult am lucrat cu oamenii, au existat mereu discuții despre asta. Nu spun că acest lucru este rău, vreau doar să nu încerci să te convingi că vii în scopuri pur spirituale pentru a schimba lumea în bine. Înainte să mă angajez ca junior, știam care sunt salariile seniorilor, conducătorilor tehnici și chiar ale managerilor de mijloc, iar aceste gânduri m-au inspirat doar: pe vremea mea înainte de a lucra ca programator, nu puteam decât să visez la astfel de cifre. Numiți aceste lucruri pe numele lor propriu și nu vă mai rușinați de ele. „Mi se pare că acesta nu este al meu” A cui atunci? Știi, este ușor de verificat. Deschide primul volum al lui Hortsmann și începe să citești și să scrii cod din exemple. Dacă nu te-ai plictisit și nu îți marchezi timp la același capitol pentru a doua săptămână, lasă-ți îndoielile deoparte. Studiu specialități tehnice- un lucru consistent. Nu poți trece la B fără să cunoști A, dar vei avea întotdeauna șansa de a te întoarce cu un capitol și de a-ți consolida fundația. Du-te. „Sunt mulți ca mine” Există întotdeauna competiție pentru un loc. Nu argumentez, de exemplu, acum există 300-400 de testeri fără experiență, sau chiar mai mulți pe loc. Da, acesta este adevărul amar, dar, pe de altă parte, nici cu astfel de indicatori nu găsesc un punct suficient de serios. Da, cel putin 100500 pe loc!! Ai întotdeauna ocazia de a câștiga experiență în proiectele tale: construiește un fel de serviciu, un program desktop, folosește întregul stack pe care îl cunoști - și faci deja progrese, în timp ce restul, în afară de trimiterea CV-ului, nu nimic altceva. „Nimeni nu răspunde la CV-ul meu” Continuând de la punctul de mai sus. Cel mai probabil, pentru viitorii specialiști IT fără experiență, a putea scrie un CV frumos este bine, dar când sunt mulți oameni pentru un post vacant, multe CV-uri sunt foarte asemănătoare între ele: tu, desigur, poți trimite o fotografie cu un decolteu (dacă e fată) sau scrie o mulțime de tehnologii, pe care tu însuți le știi doar de pe Wikipedia. În ambele cazuri, HR pur și simplu nu îi va păsa: dacă postul vacant în proiect trebuie să includă o persoană care, de exemplu, cunoaște AWS, atunci va căuta AWS în CV. Luați în considerare un alt punct important, precum recomandările colegilor. Aceasta este durerea oricărei persoane care nu are astfel de cunoștințe, deoarece partea leului de juniori este luată de acolo (dacă persoana este recomandată - nu este un idiot, desigur). De obicei, pentru postul de junior, se angajează, subliniez, o persoană activă adecvată, pregătită să învețe, și chiar pentru mâncare. Și dacă un astfel de candidat eșuează, atunci cel mai probabil vei fi următorul. Ei bine, în timp ce restul sunt intervievați, aveți multe domenii în care vă puteți îmbunătăți abilitățile: open source, sarcini pe Internet și, poate, freelancer. „Nu voi trece interviul/Vreau să mă alătur unei anumite companii” Da, cel mai probabil, primul interviu va fi un eșec, dar experiența pe care o vei dobândi este neprețuită. Cu fiecare interviu ulterior, vei deveni mai încrezător și mai plin de resurse. Îmi amintesc și acum primul meu... Doamne, despre ce prostie vorbeam?! A fost atât de păcat să plec după el (mi-am amintit de acel ghoul care mi-a rânjit în față), dar când am venit acasă și m-am gândit bine, mi-am dat seama că a fost o lecție minunată. După el, toate evenimentele similare ulterioare au fost impregnate de ușurință și încredere. Nu a murit nimeni, ei caută oameni ca mine, ceea ce înseamnă că voi veni. Crede în tine! Dacă doriți în mod special să vă alăturați unei anumite companii, atunci cred că nu vă voi spune un truc de viață care este popular în mediul nostru, dar totuși: înainte de a organiza o întâlnire cu această companie, treceți printr-un interviu cu concurenții. Poate ți se va oferi ceva ce nu poți refuza, sau condițiile vor fi mai dure. Știu un lucru sigur: nu vei regreta. „Si eu ma simt bine la meseria asta”Știi, există o zicală veche: Le mieux est I’enneini du bien („Cel mai bun este dușmanul binelui”). Poate că slujba ta nu este cel mai rău loc în care să fii, dar da, șeful este un nemernic, deci ce? Sau, de exemplu, al treilea an fără bonus, dar un salariu stabil, mai ales că am deja peste 30 de ani. Într-o oarecare măsură, acest lucru poate fi adevărat, amintiți-vă doar că aveți o viață și nu trebuie irosită dezamăgiri, pentru confortul imaginar, când sunt atâtea lucruri interesante în jur și toată viața ta nu este suficientă pentru a înțelege. Nu-ți fie frică să fii mai bun, nu-ți fie frică să fii cel mai bun. Nu asculta pe nimeni, mergi spre obiectivul tău cu insistență dacă știi că asta vrei cu adevărat să faci. Nu-ți fie frică să te schimbi!

Interviu

În general, puteți găsi toate acestea pe internet sau vă puteți întreba prietenii, dar cred că nu va fi de prisos. Mai jos este un exemplu de interviu pentru juniori Dezvoltator Java așa cum ar fi el acum dacă aș fi intervievatorul. Întrebările pot fi orice, doar am încercat să adun ceva mediu despre spital. Să ne imaginăm că ești norocos. Schema standard Pasul 1. Te sună un recrutor și aranjezi un interviu cu ea, de exemplu, mâine la 11:00. Pasul 2. Ajungi mai devreme, din moment ce 11:00 cel mai probabil nu este momentul pentru tine, ci pentru dezvoltatori, care și-au rezervat un fel de cameră în care te vor tortura. Ar fi o bună practică ca orice recrutor să avertizeze despre acest lucru. Pasul 3. De fapt, începând de la pasul 3, toate punctele pot fi amestecate, pentru că interviurile pot merge diferit. De exemplu, aici s-ar putea să fii întrebat despre lucruri de bază, de unde ești, de ce aici și așa mai departe. Este posibil ca însuși HR să poată face acest lucru și, desigur, este posibil ca în engleză. Într-adevăr, depinde de companie. Pasul 4. Sunteți invitat într-o sală de ședințe, unde veți avea o conversație cu una, două, trei persoane, dintre care unul va fi fie un senior, fie un lider tehnic care va lucra cu dvs. în viitor, restul poate fi un Scrum master , alți dezvoltatori sau HR. Te intervievează o vreme, apoi îți strâng mâna și îți lasă să pleci. Pasul 5. Poate că va fi a doua zi, sau poate imediat după pasul 4 - veți avea o conversație cu un client străin (dacă există unul) sau poate el va conduce el însuși un interviu. După cum puteți vedea, există multe opțiuni. Undeva sunt clienți, undeva este și un interviu telefonic. Acesta este doar un exemplu. Exemplu interviu tehnic pentru Junior Java developerÎmi pare foarte rău pentru subdezvoltatorii care citesc ceva inteligent cu scopul de a se îneca/zdrobi/să se arate în fața solicitantului la un interviu. Dacă vezi o astfel de persoană în fața ta și simți presiune și tensiune din partea lui, trimite-l imediat la trei distractive, pentru că după finalizarea cu succes va trebui să lucrezi cu acest idiot. Nu-ți pierde nervii prețioși. Interviul, în primul rând, ar trebui să fie realizat cu scopul de a afla ce știe candidatul, și nu ceea ce nu știe. Desigur, dacă ai nevoie de o persoană care știe ceva anume, întreabă-l, nu-l deranja cu lucruri inutile pe care nu le folosești în proiect. Fii om, până la urmă! Mai jos sunt întrebări aproximative care pot apărea într-un interviu. 5 întrebări pentru fiecare tehnologie. OOP 1. Dați un exemplu de polimorfism din viata reala? Care sunt avantajele? Defecte? Scrieți un cod simplu. 2. Ce este o interfață? Clasa abstracta? De ce avem nevoie de interfețe dacă putem scrie prostesc totul la cursuri (puțină provocare)? Același lucru este valabil și pentru clasa abstractă. Care sunt metodele implicite în Java 8? 3. Construiți o ierarhie de clasă bazată pe exemplu concret o bază de date sau un program imaginar (există o listă cu diferite clase de lucrători din baza de date) și interacțiunea dintre aceștia (agregare, compunere). 4. Cum diferă compoziția de agregare (este-a, are-a)? 5. Cum puteți ocoli interdicția moștenirii multiple în Java? JDK/JRE 1. Prin ce diferă JDK de JRE? Ce este JVM? 2. Ce este classpath și pentru ce este? Cum să încărcați, de exemplu, alte clase în classpath? 3. Ce știi despre classloader? 4. Spune-ne despre javadoc? Pentru ce este? 5. Ce este JAR, WAR? Java comun 1. Care este diferența dintre metodele statice și cele nestatice? Ce este finalul? 2. Ce este boxul-unboxing? octet b = 127, b++, care este rezultatul și de ce? 3. Ce sunt ambalajele, pentru ce sunt acestea? 4. Ce trebuie să fac pentru a-mi crea adnotarea? Ce este suprasolicitarea/supraîncărcarea? 5. De ce este finala clasa String? Ce face metoda intern()? Structuri de date 1. Explicați structura API-ului Collections în Java? Ați lucrat deja cu Stream API? 2. Care este diferența dintre ArrayList și LinkedList? Unde este mai bine să utilizați ArrayList și unde este LinkedList? 3. Spuneți-ne cum funcționează HashMap? Care sunt caracteristicile lucrului cu TreeSet, HashSet? Ai experiență cu colecțiile de guava? 4. Matrice în Java, exemplu de matrice bidimensională. 5. hashCode, este egal cu utilizarea HashMap ca exemplu? Concurență 1. Ce este un proces? Curgere? Cum se creează un fir? Ce este sincronizat? Cum să înțelegeți asta sau acea bucată de cod thread-safe? 2. Ce este Thread.sleep și, de asemenea, așteptați, notificați, cedați? 3. Dați un exemplu de blocaj? 4. Colecții atunci când lucrați cu multithreading. 5. Operațiuni ThreadLocal și Atomic SQL/JDBC 1. Folosind un exemplu concret, obțineți din baza de date Users pe cel al cărui salariu este mai mare de 5000. 2. Exemple INNER JOIN, OUTER JOIN, Order By, Group By. 3. De ce aveți nevoie de un driver JDBC? Exemple. 4. Spune-ne tot ce știi despre ResultSet, câteva exemple. 5. Scrieți un DAO simplu folosind RS. JPA/Hibernare 1. Care sunt dezavantajele și avantajele JPA? 2. Ce este EntityManager? Entitate? 3. Criterii în JPA/Hibernate. 4. One-To-One, Many-To-Many în JPA/Hibernate 5. Cum ați face un JOIN în Hibernate? HQL? Arc 1. Ce este DI/IoC? Avantaje. 2. Ce este Contextul aplicației? Fasole? 3. Care sunt tipurile de inițializare IoC? 4. Singleton, prototip în primăvară? Spring bazat pe adnotări? 5. Ciclul de viață al fasolei? Init-metoda, distruge-metoda? @PostConstruct, @PostDeploy? Maven 1. Principalele faze ale maven, ciclu de viață. 2. Cum să rulezi Maven cu teste, fără teste? Ce este arhetipul, dependența de mvn? 3. Profiluri în maven, cum se creează, cum se lansează. 4. Ce este snapshot în Maven? Arhive centrale/la distanță? 5. Pluginuri în mvn, cum funcționează, câteva exemple. Algo 1. Conceptul de algoritm, viteza acestuia, Big-O-Notation. 2. Cum să găsiți elementul de mijloc în LinkedList dintr-o singură mișcare? 3. Scrieți o stivă primitivă? Care este diferența dintre Stack și Queue? LIFO, FIFO? 4. Sortare rapidă, Sortare prin îmbinare. 5. Scrieți un program care verifică dacă un număr este un palindrom. Sunt de acord, poate bara este aplecata un pic mai mult spre mijloc decat junior, dar cred ca o astfel de pregatire cu siguranta nu va strica. Încercați să aprofundați fiecare întrebare. Apropo, multe zone din Java nu sunt indicate aici, vă rugăm să țineți cont de ele.

În timpul lucrului

Iată câteva mici recomandări pentru acei dezvoltatori juniori/medii care s-au stabilit deja. Aceste sfaturi simpleți-ar putea fi de folos așa cum m-au ajutat la rândul lor. Nu fi încăpățânat Nu mai încerca să-ți demonstrezi punctul de vedere, chiar dacă este îngrozitor de aproape de adevăr. Ai observat deja că ești într-o ceartă de multă vreme, ceea ce înseamnă că de cealaltă parte a baricadelor se află un măgar obișnuit care are doar două păreri în viață: a lui și cea greșită. Avem un număr incredibil de mare de oameni încăpățânați care își rezistă până la urmă, doar pentru ca ego-ul lor să nu fie zdruncinat. Și aceștia nu sunt doar colegii tăi, sunt pur și simplu peste tot - în microbuz, în magazin, rude, prieteni apropiați - nu poți fugi sau ascunde de ei. Trebuie să interacționezi cumva cu ei, chiar dacă înțelegi că persoana vorbește deschis prostii. În plus, ți se poate întâmpla același lucru. Sunt de acord, lucrurile simple pot fi explicate chiar și unei persoane încăpățânate, dar dacă vorbim despre probleme de arhitectură într-un proiect sau o opinie personală? Uitați de aceste nedorite - fiți flexibili. Am foarte mult respect pentru oamenii care pot recunoaște că au făcut o greșeală în fața tuturor. Tocmai aceasta este calitatea care iti va fi de folos ca specialist junior - cu o persoană deschisă este greu să intri în confruntare, mai ales când recunoaște că învață și are dreptul să greșească. Nu întârzia Nu contează, este probațiune sau doar vineri, în care toată lumea uită și vine la 11. Un alt lucru este important: punctualitatea este o caracteristică a unui profesionist care își câștigă din senin puncte în plus. Și punctele suplimentare nu vor răni o persoană fără experiență, nu? Încearcă să nu întârzii și să pleci de la serviciu după ce ai lucrat sincer timp de 8 ore. Nu abuzați de estimări Din păcate, aceasta este o imagine foarte comună în care m-am băgat cândva în trecut. Dezvoltatorul și-a stabilit 8-16 ore pentru a finaliza sarcina și a finalizat-o în mod neașteptat în 3-4 ore. El își petrece orele rămase în timpul său personal sub formă de tenis de masă, așa cum a fost cazul cu mine, sau urmărind YouTube și alte divertisment. Din punct de vedere juridic, se pare că am fost de acord, dar din punct de vedere uman, te privezi de lucruri foarte importante: 1. Stai pe loc, pentru că îți umpli timpul suplimentar cu lucruri inutile; 2. Nu vă dezvoltați pentru că nu vă informați conducerea despre progresul rapid, nimeni nu știe că îndepliniți sarcinile mai repede decât se aștepta; 3. Începi să supraestimezi în mod constant durata medie de timp pentru valori, acesta este doar un drum spre nicăieri. Acordați-vă timp pentru a studia Șansa de a rămâne în spatele locomotivei este nerealist, așa că rețineți că tehnologia și noile versiuni se dezvoltă foarte repede. Abonați-vă la evangheliștii Java ai zilelor noastre, citiți rezumate Java și, în general, vă interesează, învățați lucruri noi. Acest lucru vă va ajuta să vă mențineți marca și să vă dezvoltați. Ajută pe alții Nu-ți fie teamă să-i ajuți pe alții, chiar dacă ei sunt la fel de verzi ca tine. În primul rând, îți vei întări foarte mult cunoștințele, iar în al doilea rând, vei câștiga respect în ochii celorlalți și, în același timp, ei te vor ajuta. Într-un astfel de mediu se nasc cele mai bune echipe, precum și o creștere tehnică și personală foarte rapidă. A juca jocuri sportive. Ai un hobby Nu, serios. Nu numai că oamenii care fac sport arată și se simt mai bine, dar și funcția lor cerebrală este mai bună! Scolioza, partea inferioară a spatelui, excesul de greutate, diverse probleme cu organele interne - stând la computer non-stop, chiar și în afara serviciului, contribuie la acest lucru. Dacă nu poți face sport (ceea ce mă îndoiesc), folosește mici trucuri de viață: lucrează din când în când în picioare, coboară cu două opriri mai devreme și mergi la serviciu. Și, în general, mergi mai mult. Există, de asemenea, riscul de epuizare dacă programarea vă ocupă mult mai mult timp decât 40 de ore pe săptămână. Hobby-urile personale vor veni în ajutor - de exemplu, fotografia, muzica etc. Fă-ți timp pentru spiritualitate în mod regulat. Echilibrează-ți viața personală Când o fată/soție spune: „laptop-ul sau eu”, trebuie să te gândești cu atenție ce loc ocupă programarea în viața ta. Pe de altă parte, atunci când îți începi călătoria în IT, trebuie să-i explici în mod clar persoanei semnificative că acum trebuie să studiezi mult pentru a obține mai mult. Sper ca ei sa inteleaga. Ei bine, încercați să echilibrați și să vă distribuiți timpul corect. A merge mai departe Fii proactiv, dacă simți, de exemplu, că poți împărtăși cunoștințe sau ai subiecte interesante, de ce să nu organizezi mici cursuri în cadrul companiei pentru alții? Nu vă fie teamă să participați la proiecte mari open source dacă știți cum puteți ajuta. Vrei să scrii un joc? proiect social sau altă idee - fă-o, fă-o, fă-o! Nu sta pe loc, caută întotdeauna modalități de dezvoltare. Fii competitiv Urmărește noile tendințe, fii la curent cu tendințele care se întâmplă în comunitatea Java. De exemplu, nu va strica dacă ocazional, din când în când, monitorizați posturile Java vacante pe DOU, dar nu pentru a scăpa de la muncă, ci pentru a ști ce tehnologii rămân relevante și care dispar încet de pe piață. . De asemenea, încercați să urmați cursuri despre Coursera, Udacity etc., explorați noi orizonturi. Și chiar și engleză: încercați să vizionați filmele/seriale preferate în original cu subtitrări pentru a vă îmbunătăți abilitățile de vorbire, descărcați câteva aplicații interesante pentru învățarea limbii (de exemplu LinguaLeo) și, în final, faceți cursuri.

Concluzie

Ei bine, micul meu proiect pe DOU se apropie de final. dragi prieteni, iti doresc din tot sufletul sa te angajezi si sper ca tot ce a fost descris de mine in aceste 7 articole va fi ajutor valoros pentru tine, chiar și pentru cei care lucrează deja ca dezvoltator Java. Viitorii juniori, amintiți-vă că nimic nu este imposibil, iar dacă vă împingeți cu adevărat, cu siguranță veți reuși. Vreau să decizi în sfârșit dacă este pentru tine sau nu, să te dezvolți plan detaliat antrenându-se și l-a urmat cu calm. Nu fi supărat dacă primești tăcerea în schimb - totul este temporar, principalul lucru este să crezi și în niciun caz să nu te abate de la curs, ci să studiezi, să studiezi și să studiezi din nou. Aș dori să mulțumesc enorm echipei DOU pentru editarea multor materiale și pentru că mi-a oferit timpul de antenă principal în zilele de luni. DOU este o comunitate cool care a încetat să mai fie doar un site pentru specialiștii IT ucraineni. De asemenea, aș vrea să le mulțumesc tuturor comentatorilor care mi-au citit articolele în diagonală și au scos fraze din context. Fără tine, articolele nu ar părea atât de interesante :) Fie ca Forța să fie cu tine!
  • Ce este OOP?
  • Ce este un obiect?
  • Care sunt principiile de bază ale OOP?
  • Ce este moștenirea?
  • Ce este polimorfismul? Ce manifestări ale polimorfismului în Java cunoașteți?
  • Ce este încapsularea?
  • Ce este abstractizarea?
  • Care sunt avantajele limbajelor de programare orientate pe obiecte?
  • Cum îmbunătățește utilizarea unei abordări orientate pe obiecte dezvoltarea software-ului?
  • Există o expresie „este” și „are”. Ce înseamnă ele în termeni de principii OOP? Care este diferența dintre compoziție și agregare?
  • Ce înțelegeți prin polimorfism, încapsulare și legare dinamică?

Miez Java.

  • Care este diferența dintre JRE, JVM și JDK?
  • Descrieți modificatorii de acces în Java.
  • Ce este accesul la nivel de pachet.
  • Cum este o clasă abstractă diferită de o interfață? În ce cazuri ați folosi o clasă abstractă și în ce cazuri ați folosi o interfață?
  • Poate un obiect să acceseze o variabilă de clasă privată? Dacă da, atunci cum?
  • De ce există blocuri statice în Java?
  • Este posibil să supraîncărcați o metodă statică?
  • Povestește-ne despre cursurile interne. Când le vei folosi?
  • Care este diferența dintre o variabilă de instanță și o variabilă statică? Dă un exemplu.
  • Dați un exemplu când puteți utiliza o metodă statică?
  • Spuneți-ne despre clasele de încărcare și încărcarea dinamică a claselor.
  • Care este declarația „assert” folosită în Java?
  • De ce unele interfețe nu definesc deloc metodele?
  • Care este principala diferență dintre String, StringBuffer, StringBuilder?
  • Explicați despre fluxurile I/O Java.
  • Ce este memoria Heap și Stack în Java?
  • Care este diferența dintre memoria stivă și memoria heap în Java?
  • Spuneți-ne despre modelul de memorie în Java?
  • Cum funcționează gunoiul?
  • Spune-ne despre tipul de turnare. Ce este tipul retrogradare și promovare? Când primiți o ClassCastException?
  • Ce este o clasă statică, care sunt caracteristicile utilizării ei?
  • Cum se accesează un câmp al unei clase exterioare dintr-o clasă imbricată.
  • Ce tipuri de clase imbricate există? La ce sunt folosite?
  • Este posibil să se schimbe atunci când se înlocuiește o metodă:
  • Modificator de acces
  • Tip de returnare
  • Tipul sau cantitatea argumentului
  • Numele argumentului
  • Ar trebui să schimb comanda, cantitatea sau să elimin cu totul secțiunea de aruncări?
  • Ce este autoboxing-ul?
  • Ce sunt genericele?
  • Care este scopul real al utilizării tipurilor generice în Java?
  • Cum sunt transmise variabilele la metode, prin valoare sau prin referință?
  • Ce metode are clasa Object?
  • Reguli pentru suprascrierea metodei Object.equals().
  • Dacă doriți să înlocuiți equals(), ce condiții trebuie îndeplinite pentru metoda suprascrisă?
  • Care este relația dintre hashCode și equals?
  • Cum sunt implementate metodele hashCode și equals în clasa Object?
  • Ce se întâmplă dacă suprascrieți equals fără a înlocui hashCode? Ce probleme pot apărea?
  • Există recomandări cu privire la ce câmpuri ar trebui folosite la calcularea codului hash?
  • Pentru ce este metoda hashCode()?
  • Reguli pentru suprascrierea metodei Object.hashCode().
  • Povestește-ne despre clonarea obiectelor. Care este diferența dintre clonarea superficială și cea profundă?
  • Reguli pentru suprascrierea metodei Object.clone().
  • Unde și cum poți folosi un constructor privat?
  • Care este constructorul implicit?
  • Descrieți metoda Object.finalize().
  • Care este diferența dintre final, finally și finalize?
  • Descrieți ierarhia excepțiilor.
  • Ce tipuri de excepții în Java cunoașteți, cum diferă?
  • Ce este bifată și nebifată excepția?
  • Cum să-ți creezi propria excepție nebifată?
  • Care sunt excepțiile Unchecke?
  • Ce este eroarea?
  • Descrieți funcționarea blocului try-catch-finally.
  • Este posibil să utilizați un bloc try-finally (fără catch)?
  • Blocul final este întotdeauna executat?
  • Care sunt caracteristicile clasei String? ce face metoda intern()?
  • Este posibil să moștenești un tip de șir, de ce?
  • De ce este String o cheie populară în HashMap în Java?
  • Definiți conceptul de concatenare de șiruri.
  • Cum se inversează un șir?
  • Cum se compară valoarea a două șiruri de caractere?
  • Cum să tăiați spațiile la începutul și la sfârșitul unei linii?
  • Definiți conceptul de „pool de șiruri”.
  • Este posibil să sincronizați accesul la rând?
  • Cum se compară corect valorile șirurilor a două obiecte diferite de tip String și StringBuffer?
  • De ce șirul este imuabil și finalizat în Java?
  • Scrieți o metodă pentru a elimina un anumit caracter dintr-un șir.
  • Ce este reflexia?
  • Ce se întâmplă cu garbage collector (GC) dacă apare o excepție în timpul metodei finalize() a unui obiect?
  • Ce este internaționalizarea, localizarea?
  • Ce sunt adnotările în Java?
  • Ce funcții îndeplinește Adnotarea?
  • Ce adnotări încorporate în Java știți?
  • Ce fac adnotările @Retention, @Documented, @Target și @Inherited?
  • Ce fac adnotările @Override, @Deprecated, @SafeVarargs și @SuppressWarnings?
  • Ce ciclu de viață al adnotărilor poate fi specificat folosind @Retention?
  • La ce elemente se poate aplica adnotarea și cum pot indica acest lucru?
  • Cum să-ți creezi propria adnotare?
  • Ce tipuri de atribute sunt permise în adnotări?
  • Ce este JMX?
  • Ce beneficii oferă JMX?
  • Ce altceva poate face JMX în afară de telecomandă?
  • Ce este un MBean?
  • Ce tipuri de MBeans există?
  • Ce este MBean Server?
  • Ce mecanisme asigură securitatea în tehnologia Java?
  • Numiți câteva tipuri de verificări pe care le efectuează verificatorul de coduri de octet Java?
  • Ce știi despre „managerul de securitate” din Java?
  • Ce este JAAS?
  • Ce este refactorizarea?

Cadrul de colecții Java.

  • Ce este o colecție?
  • Numiți principalele interfețe ale colecțiilor și implementările acestora.
  • Prin ce diferă ArrayList de LinkedList? În ce cazuri este mai bine să îl folosiți pe primul și în ce cazuri pe al doilea?
  • Prin ce diferă HashMap de Hashtable?
  • Care este diferența dintre ArrayList și Vector?
  • Cum se compară elementele de colecție?
  • Aranjați următoarele interfețe într-o ierarhie: Listă, Set, Hartă, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
  • De ce Map nu este o colecție în timp ce Lista și Set sunt colecții?
  • Definiți termenul „iterator”.
  • Ce știi despre interfața Iterable?
  • Cum se transformă un HashSet într-o ArrayList într-o singură linie?
  • Cum se transformă un ArrayList într-un HashSet într-o singură linie?
  • Cum se repetă peste toate cheile unei hărți, având în vedere că harta nu este iterabilă?
  • Cum se repetă peste toate valorile hărții, având în vedere că harta nu este iterabilă?
  • Cum se repetă peste toate perechile cheie-valoare dintr-o hartă, având în vedere că harta nu este iterabilă?
  • Cum este SortedMap „sortat”, în afară de faptul că toString() afișează totul în ordine?
  • Cum să copiați elemente din orice colecție într-o matrice cu un singur apel?
  • Implementați diferența simetrică a două colecții folosind metodele Collection (addAll(), removeAll(), retainAll()).
  • Comparați enumerarea și iteratorul.
  • Cum sunt legate Iterable și Iterator?
  • Cum sunt Iterable, Iterator și „pentru fiecare” introduse în Java 5 între ele?
  • Comparați Iterator și ListIterator.
  • Ce se întâmplă dacă apelez Iterator.next() fără să „întreb” Iterator.hasNext()?
  • Ce se întâmplă dacă apelez Iterator.next() înainte de a apela Iterator.hasNext() de 10 ori? Îmi lipsesc 9 elemente?
  • Dacă am o colecție și un iterator copil, colecția se va schimba dacă apelez iterator.remove()?
  • Dacă am o colecție și un iterator copil, se va schimba iteratorul dacă apelez collection.remove(..)?
  • De ce au adăugat ArrayList dacă exista deja un Vector?
  • Implementarea clasei ArrayList are următoarele câmpuri: Object elementData, int size. Explicați de ce dimensiunea stocării separat dacă puteți lua întotdeauna elementData.length?
  • LinkedList este o listă cu legături unice, o listă dublu legată sau o listă cu patru legături?
  • Care este cel mai prost timp de rulare al metodei contain() pentru un element care se află în LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N))?
  • Care este cel mai prost timp de rulare al metodei contain() pentru un element care se află în ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O (N*N))?
  • Care este cel mai prost timp de rulare pentru metoda add() pe LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) ?
  • Care este cel mai prost timp de rulare al metodei add() pentru ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) ?
  • Câte elemente sunt alocate în memorie la apelarea ArrayList.add()?
  • Câte elemente sunt alocate în memorie la apelarea LinkedList.add()?
  • Estimați cantitatea de memorie pentru stocarea unei primitive de un octet în LinkedList?
  • Estimați cantitatea de memorie pentru stocarea unei primitive de un octet într-o ArrayList?
  • Adaug un element la mijlocul Listei: list.add(list.size()/2, newElem). Pentru cine este această operațiune mai lentă - pentru ArrayList sau pentru LinkedList?
  • Cum se repetă prin elementele LinkedList în ordine inversă fără a utiliza slow get(index)?
  • Cum să obțineți o listă cu toate elementele, cu excepția primelor și ultimelor 3, cu un apel din Listă?
  • Pot diferite obiecte din memorie (ref0 != ref1) să aibă ref0.hashCode() == ref1.hashCode()?
  • Pot diferite obiecte din memorie (ref0 != ref1) să aibă ref0.equals(ref1) == true?
  • Pot referințe diferite la același obiect din memorie (ref0 == ref1) să aibă ref0.equals(ref1) == false?
  • Există o clasă Point(int x, y;). De ce este codul hash 31 * x + y preferabil decât x + y?
  • Dacă clasa Point(int x, y;) are implementarea „corectă” a metodei equals (return ref0.x == ref1.x && ref0.y == ref1.y), dar faceți codul hash sub forma int hashCode() ( return x;), atunci astfel de puncte vor fi plasate corect și preluate din HashSet?
  • equals() generează o relație de echivalență. Ce proprietăți are această relație: comutativitate, simetrie, reflexivitate, distributivitate, asociativitate, tranzitivitate?
  • Este posibil să implementați equals(Object that) (return this.hashCode() == that.hashCode()) astfel?
  • equals necesită verificarea faptului că argumentul (equals(Object that)) este de același tip ca și obiectul însuși. Care este diferența dintre this.getClass() == that.getClass() și acea instanță a MyClass?
  • Este posibil să implementați metoda equals a clasei MyClass astfel: clasa MyClass (public boolean equals(MyClass that) (return this == that;))?
  • Va funcționa HashMap dacă toate cheile returnează int hashCode() (return 42;)?
  • De ce au adăugat HashMap dacă exista deja un Hashtable?
  • Potrivit lui Knuth și Cormen, există două implementări principale de tabel hash: bazate pe adresare deschisă și bazată pe înlănțuire. Cum este implementat HashMap? De ce au făcut asta (în opinia ta)? Care sunt avantajele și dezavantajele fiecărei abordări?
  • Câte clicuri pe link apar atunci când faceți HashMap.get(key) pe o cheie care se află într-un tabel?
  • Câte obiecte noi sunt create atunci când adăugați un element nou la un HashMap?
  • Cum funcționează un HashMap atunci când încercați să stocați două elemente în el prin chei cu același hashCode, dar pentru care este egal cu == false?
  • Un HashMap poate degenera într-o listă chiar și pentru chei cu diferite hashCodes. Cum este posibil acest lucru?
  • Care este cel mai prost timp de rulare al metodei get(key) pentru o cheie care nu este în tabel (O(1), O(log(N)), O(N), O(N*log(N)) , O(N*N ))?
  • Care este cel mai prost timp de rulare al metodei get(key) pentru o cheie care se află în tabel (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Explicați semnificația parametrilor din constructorul HashMap(int initialCapacity, float loadFactor).
  • Care este diferența dintre HashMap și IdentityHashMap? Pentru ce este IdentityHashMap? Cum poate fi util pentru implementarea serializării sau clonării?
  • Care este diferența dintre HashMap și WeakHashMap? Pentru ce este WeakHashMap?
  • WeakHashMap folosește WeakReferences. De ce nu creați un SoftHashMap pe SoftReferences?
  • WeakHashMap folosește WeakReferences. De ce nu creați un PhantomHashMap pe PhantomReferences?
  • Faceți un HashSet dintr-un HashMap (utilizați doar un set de chei, nu un set de valori).
  • Faceți un HashMap dintr-un HashSet (HashSet >).
  • Comparați interfețele java.util.Queue și java.util.Deque.
  • Cine extinde pe cine: coada extinde Deque sau Deque extinde coada?
  • De ce LinkedList implementează atât Listă, cât și Deque?
  • Care este diferența dintre clasele java.util.Arrays și java.lang.reflect.Array?
  • Care este diferența dintre clasele java.util.Collection și java.util.Collections?
  • Scrieți un program cu mai multe fire care determină o colecție să arunce o excepție ConcurrentModificationException.
  • Ce este „comportamentul eșuat rapid”?
  • Există o clasă specială java.util.EnumSet pentru seturi de enumerari? Pentru ce? De ce nu au fost mulțumiți autorii de HashSet sau TreeSet?
  • java.util.Stack - considerat „învechit”. Cu ce ​​se recomanda inlocuirea lui? De ce?
  • Ce colecție implementează disciplina de serviciu FIFO?
  • Ce colecție implementează disciplina de serviciu FILO?
  • Dați un exemplu când orice colecție aruncă UnsupportedOperationException.
  • De ce nu pot scrie „ArrayList” numere = nou ArrayList ();" dar puteți să „Listați numere = nou ArrayList ();"?
  • LinkedHashMap - ce fel de „fiară” este aceasta? Ce este LinkedList și ce este HashMap?
  • LinkedHashSet - ce fel de „fiară” este aceasta? Ce este LinkedList și ce este HashSet?
  • Ei spun că este ușor să faci un cache simplu cu o „politică de invalidare” pe LinkedHashMap, știi cum?
  • Ce vă permite PriorityQueue să faceți?
  • Care sunt diferențele dintre java.util.Comparator și java.lang.Comparable?

Java 8.

  • Ce este o legătură simbolică?
  • Care este diferența dintre I/O și NIO?
  • Ce caracteristici ale NIO cunoașteți?
  • Ce tipuri de fluxuri I/O există?
  • Denumiți principalele clase de fluxuri I/O.
  • Care este diferența și ce au în comun OutputStream, InputStream, Writer, Reader?
  • Ce subclase ale clasei de bază InputStream cunoașteți și ce fac acestea?
  • Ce știi despre RandomAccessFile?
  • Ce moduri de acces la fișiere are RandomAccessFile?
  • Ce subclase ale clasei de bază OutputStream cunoașteți și ce fac acestea?
  • Pentru ce se folosește PushbackInputStream?
  • Pentru ce se folosește SequenceInputStream?
  • Ce subclase ale clasei de bază Reader cunoașteți și pentru ce sunt acestea?
  • Ce subclase ale clasei de bază Writer cunoașteți și ce fac acestea?
  • Ce este calea absolută și calea relativă?
  • Ce pachete conțin clase de fire?
  • Ce știi despre superclase?
  • Ce clasă de supliment vă permite să citiți date dintr-un flux de octeți de intrare în formatul tipurilor de date primitive?
  • Ce clasă suplimentară vă permite să accelerați citirea/scrierea utilizând un buffer?
  • Ce clase vă permit să convertiți fluxurile de octeți în fluxuri de caractere și invers?
  • Care este diferența dintre clasa PrintWriter și PrintStream?
  • Care clasă este proiectată să funcționeze cu elemente ale sistemului de fișiere?
  • Ce caracter este separatorul când se specifică o cale într-un sistem de fișiere?
  • Ce metode din clasa File cunoașteți?
  • Ce știi despre interfața FileFilter?
  • Ce clase vă permit să arhivați obiecte?

  • Pe ce obiect are loc sincronizarea la apelarea unei metode statice sincronizate?
  • Pentru ce este folosit? cuvânt cheie volatil, sincronizat, tranzitoriu, nativ?
  • Ce înseamnă prioritatea firului?
  • Ce sunt firele daemon în Java?
  • Ce înseamnă să adormi fluxul?
  • În ce stări poate exista un fir în Java? Cum funcționează de fapt fluxul?
  • Care este diferența dintre cele două interfețe pentru implementarea sarcinilor Runnable și Callable?
  • Diferențele dintre CyclicBarrier și CountDownLatch?
  • Ce este o condiție de cursă?
  • Cum se opresc firul?
  • Ce se întâmplă când un thread aruncă o excepție?
  • Ce este o variabilă ThreadLocal?
  • Ce este FutureTask?
  • Diferența dintre întrerupt și isInterrupted?
  • De ce sunt apelate metodele de așteptare și notificare într-un bloc sincronizat?
  • Ce este un pool de fire?
  • Diferențele dintre livelock și deadlock?
  • Cum se verifică dacă un fir ține un lacăt?
  • Cum să obțineți o descărcare de fir?
  • Ce parametru JVM este folosit pentru a controla dimensiunea stivei firului?
  • Diferențe între sincronizat și ReentrantLock?
  • Ce este Semaphore?
  • Ce se întâmplă dacă coada pool-ului de fire este deja plină și trimiteți o sarcină?
  • Diferențele dintre metodele submit() și execute() pe un pool de fire?
  • Ce este o metodă de blocare?
  • Ce este ReadWriteLock?
  • Ce este încuierea dublu verificată a lui Singleton?
  • Ce este cadrul Fork/Join?
    • Ce este OOP?
    • Ce este un obiect?
    • Care sunt principiile de bază ale OOP?
    • Ce este moștenirea?
    • Ce este polimorfismul? Ce manifestări ale polimorfismului în Java cunoașteți?
    • Ce este încapsularea?
    • Ce este abstractizarea?
    • Care sunt avantajele limbajelor de programare orientate pe obiecte?
    • Cum îmbunătățește utilizarea unei abordări orientate pe obiecte dezvoltarea software-ului?
    • Există o expresie „este” și „are”. Ce înseamnă ele în termeni de principii OOP? Care este diferența dintre compoziție și agregare?
    • Ce înțelegeți prin polimorfism, încapsulare și legare dinamică?

    • Care este diferența dintre JRE, JVM și JDK?
    • Descrieți modificatorii de acces în Java.
    • Ce este accesul la nivel de pachet.
    • Cum este o clasă abstractă diferită de o interfață? În ce cazuri ați folosi o clasă abstractă și în ce cazuri ați folosi o interfață?
    • Poate un obiect să acceseze o variabilă de clasă privată? Dacă da, atunci cum?
    • De ce există blocuri statice în Java?
    • Este posibil să supraîncărcați o metodă statică?
    • Povestește-ne despre cursurile interne. Când le vei folosi?
    • Care este diferența dintre o variabilă de instanță și o variabilă statică? Dă un exemplu.
    • Dați un exemplu când puteți utiliza o metodă statică?
    • Spuneți-ne despre clasele de încărcare și încărcarea dinamică a claselor.
    • Care este declarația „assert” folosită în Java?
    • De ce unele interfețe nu definesc deloc metodele?
    • Care este principala diferență dintre String, StringBuffer, StringBuilder?
    • Explicați despre fluxurile I/O Java.
    • Ce este memoria Heap și Stack în Java?
    • Care este diferența dintre memoria stivă și memoria heap în Java?
    • Spuneți-ne despre modelul de memorie în Java?
    • Cum funcționează gunoiul?
    • Spune-ne despre tipul de turnare. Ce este tipul retrogradare și promovare? Când primiți o ClassCastException?
    • Ce este o clasă statică, care sunt caracteristicile utilizării ei?
    • Cum se accesează un câmp al unei clase exterioare dintr-o clasă imbricată.
    • Ce tipuri de clase imbricate există? La ce sunt folosite?
    • Este posibil să se schimbe atunci când se înlocuiește o metodă:
    • Modificator de acces
    • Tip de returnare
    • Tipul sau cantitatea argumentului
    • Numele argumentului
    • Ar trebui să schimb comanda, cantitatea sau să elimin cu totul secțiunea de aruncări?
    • Ce este autoboxing-ul?
    • Ce sunt genericele?
    • Care este scopul real al utilizării tipurilor generice în Java?
    • Cum sunt transmise variabilele la metode, prin valoare sau prin referință?
    • Ce metode are clasa Object?
    • Reguli pentru suprascrierea metodei Object.equals().
    • Dacă doriți să înlocuiți equals(), ce condiții trebuie îndeplinite pentru metoda suprascrisă?
    • Care este relația dintre hashCode și equals?
    • Cum sunt implementate metodele hashCode și equals în clasa Object?
    • Ce se întâmplă dacă suprascrieți equals fără a înlocui hashCode? Ce probleme pot apărea?
    • Există recomandări cu privire la ce câmpuri ar trebui folosite la calcularea codului hash?
    • Pentru ce este metoda hashCode()?
    • Reguli pentru suprascrierea metodei Object.hashCode().
    • Povestește-ne despre clonarea obiectelor. Care este diferența dintre clonarea superficială și cea profundă?
    • Reguli pentru suprascrierea metodei Object.clone().
    • Unde și cum poți folosi un constructor privat?
    • Care este constructorul implicit?
    • Descrieți metoda Object.finalize().
    • Care este diferența dintre final, finally și finalize?
    • Descrieți ierarhia excepțiilor.
    • Ce tipuri de excepții în Java cunoașteți, cum diferă?
    • Ce este bifată și nebifată excepția?
    • Cum să-ți creezi propria excepție nebifată?
    • Care sunt excepțiile Unchecke?
    • Ce este eroarea?
    • Descrieți funcționarea blocului try-catch-finally.
    • Este posibil să utilizați un bloc try-finally (fără catch)?
    • Blocul final este întotdeauna executat?
    • Care sunt caracteristicile clasei String? ce face metoda intern()?
    • Este posibil să moștenești un tip de șir, de ce?
    • De ce este String o cheie populară în HashMap în Java?
    • Definiți conceptul de concatenare de șiruri.
    • Cum se inversează un șir?
    • Cum se compară valoarea a două șiruri de caractere?
    • Cum să tăiați spațiile la începutul și la sfârșitul unei linii?
    • Definiți conceptul de „pool de șiruri”.
    • Este posibil să sincronizați accesul la rând?
    • Cum se compară corect valorile șirurilor a două obiecte diferite de tip String și StringBuffer?
    • De ce șirul este imuabil și finalizat în Java?
    • Scrieți o metodă pentru a elimina un anumit caracter dintr-un șir.
    • Ce este reflexia?
    • Ce se întâmplă cu garbage collector (GC) dacă apare o excepție în timpul metodei finalize() a unui obiect?
    • Ce este internaționalizarea, localizarea?
    • Ce sunt adnotările în Java?
    • Ce funcții îndeplinește Adnotarea?
    • Ce adnotări încorporate în Java știți?
    • Ce fac adnotările @Retention, @Documented, @Target și @Inherited?
    • Ce fac adnotările @Override, @Deprecated, @SafeVarargs și @SuppressWarnings?
    • Ce ciclu de viață al adnotărilor poate fi specificat folosind @Retention?
    • La ce elemente se poate aplica adnotarea și cum pot indica acest lucru?
    • Cum să-ți creezi propria adnotare?
    • Ce tipuri de atribute sunt permise în adnotări?
    • Ce este JMX?
    • Ce beneficii oferă JMX?
    • Ce altceva poate face JMX în afară de telecomandă?
    • Ce este un MBean?
    • Ce tipuri de MBeans există?
    • Ce este MBean Server?
    • Ce mecanisme asigură securitatea în tehnologia Java?
    • Numiți câteva tipuri de verificări pe care le efectuează verificatorul de coduri de octet Java?
    • Ce știi despre „managerul de securitate” din Java?
    • Ce este JAAS?
    • Ce este refactorizarea?

    • Ce este o colecție?
    • Numiți principalele interfețe ale colecțiilor și implementările acestora.
    • Prin ce diferă ArrayList de LinkedList? În ce cazuri este mai bine să îl folosiți pe primul și în ce cazuri pe al doilea?
    • Prin ce diferă HashMap de Hashtable?
    • Care este diferența dintre ArrayList și Vector?
    • Cum se compară elementele de colecție?
    • Aranjați următoarele interfețe într-o ierarhie: Listă, Set, Hartă, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
    • De ce Map nu este o colecție în timp ce Lista și Set sunt colecții?
    • Definiți termenul „iterator”.
    • Ce știi despre interfața Iterable?
    • Cum se transformă un HashSet într-o ArrayList într-o singură linie?
    • Cum se transformă un ArrayList într-un HashSet într-o singură linie?
    • Cum se repetă peste toate cheile unei hărți, având în vedere că harta nu este iterabilă?
    • Cum se repetă peste toate valorile hărții, având în vedere că harta nu este iterabilă?
    • Cum se repetă peste toate perechile cheie-valoare dintr-o hartă, având în vedere că harta nu este iterabilă?
    • Cum este SortedMap „sortat”, în afară de faptul că toString() afișează totul în ordine?
    • Cum să copiați elemente din orice colecție într-o matrice cu un singur apel?
    • Implementați diferența simetrică a două colecții folosind metodele Collection (addAll(), removeAll(), retainAll()).
    • Comparați enumerarea și iteratorul.
    • Cum sunt legate Iterable și Iterator?
    • Cum sunt Iterable, Iterator și „pentru fiecare” introduse în Java 5 între ele?
    • Comparați Iterator și ListIterator.
    • Ce se întâmplă dacă apelez Iterator.next() fără să „întreb” Iterator.hasNext()?
    • Ce se întâmplă dacă apelez Iterator.next() înainte de a apela Iterator.hasNext() de 10 ori? Îmi lipsesc 9 elemente?
    • Dacă am o colecție și un iterator copil, colecția se va schimba dacă apelez iterator.remove()?
    • Dacă am o colecție și un iterator copil, se va schimba iteratorul dacă apelez collection.remove(..)?
    • De ce au adăugat ArrayList dacă exista deja un Vector?
    • Implementarea clasei ArrayList are următoarele câmpuri: Object elementData, int size. Explicați de ce dimensiunea stocării separat dacă puteți lua întotdeauna elementData.length?
    • LinkedList este o listă cu legături unice, o listă dublu legată sau o listă cu patru legături?
    • Care este cel mai prost timp de rulare al metodei contain() pentru un element care se află în LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N))?
    • Care este cel mai prost timp de rulare al metodei contain() pentru un element care se află în ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O (N*N))?
    • Care este cel mai prost timp de rulare pentru metoda add() pe LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) ?
    • Care este cel mai prost timp de rulare al metodei add() pentru ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) ?
    • Câte elemente sunt alocate în memorie la apelarea ArrayList.add()?
    • Câte elemente sunt alocate în memorie la apelarea LinkedList.add()?
    • Estimați cantitatea de memorie pentru stocarea unei primitive de un octet în LinkedList?
    • Estimați cantitatea de memorie pentru stocarea unei primitive de un octet într-o ArrayList?
    • Adaug un element la mijlocul Listei: list.add(list.size()/2, newElem). Pentru cine este această operațiune mai lentă - pentru ArrayList sau pentru LinkedList?
    • Cum se repetă prin elementele LinkedList în ordine inversă fără a utiliza slow get(index)?
    • Cum să obțineți o listă cu toate elementele, cu excepția primelor și ultimelor 3, cu un apel din Listă?
    • Pot diferite obiecte din memorie (ref0 != ref1) să aibă ref0.hashCode() == ref1.hashCode()?
    • Pot diferite obiecte din memorie (ref0 != ref1) să aibă ref0.equals(ref1) == true?
    • Pot referințe diferite la același obiect din memorie (ref0 == ref1) să aibă ref0.equals(ref1) == false?
    • Există o clasă Point(int x, y;). De ce este codul hash 31 * x + y preferabil decât x + y?
    • Dacă clasa Point(int x, y;) are implementarea „corectă” a metodei equals (return ref0.x == ref1.x && ref0.y == ref1.y), dar faceți codul hash sub forma int hashCode() ( return x;), atunci astfel de puncte vor fi plasate corect și preluate din HashSet?
    • equals() generează o relație de echivalență. Ce proprietăți are această relație: comutativitate, simetrie, reflexivitate, distributivitate, asociativitate, tranzitivitate?
    • Este posibil să implementați equals(Object that) (return this.hashCode() == that.hashCode()) astfel?
    • equals necesită verificarea faptului că argumentul (equals(Object that)) este de același tip ca și obiectul însuși. Care este diferența dintre this.getClass() == that.getClass() și acea instanță a MyClass?
    • Este posibil să implementați metoda equals a clasei MyClass astfel: clasa MyClass (public boolean equals(MyClass that) (return this == that;))?
    • Va funcționa HashMap dacă toate cheile returnează int hashCode() (return 42;)?
    • De ce au adăugat HashMap dacă exista deja un Hashtable?
    • Potrivit lui Knuth și Cormen, există două implementări principale de tabel hash: bazate pe adresare deschisă și bazată pe înlănțuire. Cum este implementat HashMap? De ce au făcut asta (în opinia ta)? Care sunt avantajele și dezavantajele fiecărei abordări?
    • Câte clicuri pe link apar atunci când faceți HashMap.get(key) pe o cheie care se află într-un tabel?
    • Câte obiecte noi sunt create atunci când adăugați un element nou la un HashMap?
    • Cum funcționează un HashMap atunci când încercați să stocați două elemente în el prin chei cu același hashCode, dar pentru care este egal cu == false?
    • Un HashMap poate degenera într-o listă chiar și pentru chei cu diferite hashCodes. Cum este posibil acest lucru?
    • Care este cel mai prost timp de rulare al metodei get(key) pentru o cheie care nu este în tabel (O(1), O(log(N)), O(N), O(N*log(N)) , O(N*N ))?
    • Care este cel mai prost timp de rulare al metodei get(key) pentru o cheie care se află în tabel (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
    • Explicați semnificația parametrilor din constructorul HashMap(int initialCapacity, float loadFactor).
    • Care este diferența dintre HashMap și IdentityHashMap? Pentru ce este IdentityHashMap? Cum poate fi util pentru implementarea serializării sau clonării?
    • Care este diferența dintre HashMap și WeakHashMap? Pentru ce este WeakHashMap?
    • WeakHashMap folosește WeakReferences. De ce nu creați un SoftHashMap pe SoftReferences?
    • WeakHashMap folosește WeakReferences. De ce nu creați un PhantomHashMap pe PhantomReferences?
    • Faceți un HashSet dintr-un HashMap (utilizați doar un set de chei, nu un set de valori).
    • Faceți un HashMap dintr-un HashSet (HashSet >).
    • Comparați interfețele java.util.Queue și java.util.Deque.
    • Cine extinde pe cine: coada extinde Deque sau Deque extinde coada?
    • De ce LinkedList implementează atât Listă, cât și Deque?
    • Care este diferența dintre clasele java.util.Arrays și java.lang.reflect.Array?
    • Care este diferența dintre clasele java.util.Collection și java.util.Collections?
    • Scrieți un program cu mai multe fire care determină o colecție să arunce o excepție ConcurrentModificationException.
    • Ce este „comportamentul eșuat rapid”?
    • Există o clasă specială java.util.EnumSet pentru seturi de enumerari? Pentru ce? De ce nu au fost mulțumiți autorii de HashSet sau TreeSet?
    • java.util.Stack - considerat „învechit”. Cu ce ​​se recomanda inlocuirea lui? De ce?
    • Ce colecție implementează disciplina de serviciu FIFO?
    • Ce colecție implementează disciplina de serviciu FILO?
    • Dați un exemplu când orice colecție aruncă UnsupportedOperationException.
    • De ce nu pot scrie „ArrayList” numere = nou ArrayList ();" dar puteți să „Listați numere = nou ArrayList ();"?
    • LinkedHashMap - ce fel de „fiară” este aceasta? Ce este LinkedList și ce este HashMap?
    • LinkedHashSet - ce fel de „fiară” este aceasta? Ce este LinkedList și ce este HashSet?
    • Ei spun că este ușor să faci un cache simplu cu o „politică de invalidare” pe LinkedHashMap, știi cum?
    • Ce vă permite PriorityQueue să faceți?
    • Care sunt diferențele dintre java.util.Comparator și java.lang.Comparable?

    • Ce este o legătură simbolică?
    • Care este diferența dintre I/O și NIO?
    • Ce caracteristici ale NIO cunoașteți?
    • Ce tipuri de fluxuri I/O există?
    • Denumiți principalele clase de fluxuri I/O.
    • Care este diferența și ce au în comun OutputStream, InputStream, Writer, Reader?
    • Ce subclase ale clasei de bază InputStream cunoașteți și ce fac acestea?
    • Ce știi despre RandomAccessFile?
    • Ce moduri de acces la fișiere are RandomAccessFile?
    • Ce subclase ale clasei de bază OutputStream cunoașteți și ce fac acestea?
    • Pentru ce se folosește PushbackInputStream?
    • Pentru ce se folosește SequenceInputStream?
    • Ce subclase ale clasei de bază Reader cunoașteți și pentru ce sunt acestea?
    • Ce subclase ale clasei de bază Writer cunoașteți și ce fac acestea?
    • Ce este calea absolută și calea relativă?
    • Ce pachete conțin clase de fire?
    • Ce știi despre superclase?
    • Ce clasă de supliment vă permite să citiți date dintr-un flux de octeți de intrare în formatul tipurilor de date primitive?
    • Ce clasă suplimentară vă permite să accelerați citirea/scrierea utilizând un buffer?
    • Ce clase vă permit să convertiți fluxurile de octeți în fluxuri de caractere și invers?
    • Care este diferența dintre clasa PrintWriter și PrintStream?
    • Care clasă este proiectată să funcționeze cu elemente ale sistemului de fișiere?
    • Ce caracter este separatorul când se specifică o cale într-un sistem de fișiere?
    • Ce metode din clasa File cunoașteți?
    • Ce știi despre interfața FileFilter?
    • Ce clase vă permit să arhivați obiecte?

  • Pe ce obiect are loc sincronizarea la apelarea unei metode statice sincronizate?
  • Pentru ce este folosit cuvântul cheie volatil, sincronizat, tranzitoriu, nativ?
  • Ce înseamnă prioritatea firului?
  • Ce sunt firele daemon în Java?
  • Ce înseamnă să adormi fluxul?
  • În ce stări poate exista un fir în Java? Cum funcționează de fapt fluxul?
  • Care este diferența dintre cele două interfețe pentru implementarea sarcinilor Runnable și Callable?
  • Diferențele dintre CyclicBarrier și CountDownLatch?
  • Ce este o condiție de cursă?
  • Cum se opresc firul?
  • Ce se întâmplă când un thread aruncă o excepție?
  • Ce este o variabilă ThreadLocal?
  • Ce este FutureTask?
  • Diferența dintre întrerupt și isInterrupted?
  • De ce sunt apelate metodele de așteptare și notificare într-un bloc sincronizat?
  • Ce este un pool de fire?
  • Diferențele dintre livelock și deadlock?
  • Cum se verifică dacă un fir ține un lacăt?
  • Cum să obțineți o descărcare de fir?
  • Ce parametru JVM este folosit pentru a controla dimensiunea stivei firului?
  • Diferențe între sincronizat și ReentrantLock?
  • Ce este Semaphore?
  • Ce se întâmplă dacă coada pool-ului de fire este deja plină și trimiteți o sarcină?
  • Diferențele dintre metodele submit() și execute() pe un pool de fire?
  • Ce este o metodă de blocare?
  • Ce este ReadWriteLock?
  • Ce este încuierea dublu verificată a lui Singleton?
  • Ce este cadrul Fork/Join?
  • airsoft-unity.ru - Portal minier - Tipuri de afaceri. Instrucțiuni. Companii. Marketing. Impozite