En guide för framtidens Java-utvecklare. Intervju och karriär. Middle Java Developer Intervjuer Java Intervju Vanliga frågor

Jag flyttade till en annan stad, jag får jobb, jag går på intervjuer. Det verkade för mig att de frågor som ställs där, även om de är kända, ändå samlade, kan hjälpa till att förbereda och känna mer självförtroende.

Frågor för att förstå principerna för att bygga ett DBMS.
1. Vilken är den första normala formen och normaliseringsprocessen? Vilka är de normala formerna?
2. Vad är meningen med DBMS-indexet, hur är de ordnade, hur lagras de? Hur skulle du implementera samma funktionalitet? Den sista frågan ställs om det inte finns någon klar förståelse för indexen.
3. Rita en många-till-många-relation. Till exempel: tabeller Författare och böcker. En författare kan ha flera böcker och en bok kan skrivas av flera författare. Skriv en SQL-fråga för att välja böcker av en specifik författare.

Grundläggande frågor om Java.
4. Basklassen i Java är känd för att vara Object. Vilka metoder kan du nämna?
5. Berätta för oss vad lika och hashCode är? Vilka regler och konventioner finns för implementeringen av dessa metoder? När ansöker de?
6. Berätta för oss om att vänta, meddela, meddela alla metoder. Hur används de, när, varför behövs de? Vad är synkroniserat?
7. Vad är finalize? Varför behövs det? Vad kan du berätta om sopsamlaren och dess algoritmer.
8. Varför förklaras klonmetoden som skyddad? Vad krävs för att implementera kloning?
9. Vilka är modifierarna (åtkomst och andra)? Vad är flyktigt och övergående? För vad och i vilka fall skulle det vara möjligt att använda standard?

Java Collection Framework
10. Vilka är samlingsgränssnitten i Java? Förklara hur de skiljer sig åt.
11. Vilka implementeringar av dessa gränssnitt känner du till?
12. Vad är skillnaden mellan ArrayList och LinkedList. Hur är de ordnade? När ska de användas.
13. Vad är skillnaden mellan HashMap och TreeMap? Hur är de uppsatta och hur fungerar de? Hur är det med tiden för tillgång till objekt, vilka beroenden?
14. Vad är Hashtable, hur skiljer det sig från HashMap? Hittills har den blivit utfasad, hur använder du fortfarande önskad funktionalitet?

Undantag
15. Vad är ett undantag? Vilka typer av undantag känner du till, hur skiljer de sig åt?
16. Kan ett pussel föreslås med försök-fånga-slutligen-block och frågan om vad som kommer att returneras eller vilket undantag som så småningom kommer att passeras?

Algoritmer
17. Vilka sorteringsalgoritmer känner du till? Vilken typ av algoritmer känner du till?
Dessutom är olika ytterligare frågor möjliga här om uppskattningen av komplexiteten hos algoritmer, deras jämförelse med varandra.

Design mönster.
18. Är du bekant med några designmönster?
19. Skriv en Singleton... Och med lat laddning. Tänk om det måste vara trådsäkert? När är lata lastning värre?
20. Vad kan du säga om MVC? Rita ett diagram och förklara hur MVC fungerar.

En serie frågor för att förstå J2EE-tekniksviten.
21. Vad är en servlet, jsp, deras skillnad?
22. Vad är Ajax? Hur är denna teknik i grunden ordnad?
23. Vad är en ORM, hur kan den översättas och hur ska den fungera?

Enkla uppgifter för att skriva algoritmer.
24. Skriv en funktion för att beräkna faktorialet.
25. Givet en funktion för att beräkna Fibonacci-tal är det känt att det fungerar. Hitta det logiska felet. Uppskatta komplexiteten hos den resulterande algoritmen.
26. Vänd på strängen.
27. Beräkna medelvärdet av arrayen.

Det är användbart att komma ihåg att när du inte känner dig särskilt säker behöver du inte säga extra ord. Du säger ett extra ord, och de klamrar sig fast vid det, varva ner kedjan. De hypar saker som de inte är särskilt säkra på. Denna förmåga hos människor - att klamra sig fast - måste användas, men till din fördel ;-)

Kunskap och förståelse... saker och ting är helt annorlunda, så
- olika algoritmer, som sortering, bör du skriva själv, även från en lärobok. Se hur de skiljer sig från varandra, jämför deras komplexitet.
- det är användbart att titta på olika verktyg och bibliotek, principerna för att gruppera klasser i paket och stilen för att skriva kod, kommentera. Det kan hjälpa mycket för att förstå åtkomstmodifierare, projektorganisation.
- om du förstår något specifikt kan du hjälpa dem som vet mindre. Gå till valfritt forum och försök att svara på frågor av intresse för ämnet. I diskussionen kan du ta något för dig själv. Du kan skriva en kort artikel. Naturligtvis måste du förstå ämnet väl.
Allt arbete som syftar till att förbättra sina egna kvalifikationer kommer att vara synligt för en kompetent intervjuare och kommer inte att lämnas utan uppmärksamhet. Det enda du behöver prata om det ärligt, underskatta inte dina förmågor och förmågor.
För att ha något slags riktmärke för att utbilda eller utveckla sig själv som specialist kan man titta på något liknande detta.

Frågorna ovan är faktiskt juniorutvecklarnivån, som jag föreställer mig det. Någonstans, kanske djupare, någonstans mindre, men som ett faktum - Junior.

Varje lösning skapar nya problem.

Det här avsnittet är tillägnat frågor som kan ställas när du klarar en intervju för en Java-programmerare.

Målet är att samla inte bara frågor (det finns många av dem på Internet), utan också svar på dem på ett ställe.

För tillskrivning, läs på huvudsidan i avsnittet Intervju

  1. Hur många nyckelord är reserverade av språket, vilka är dessa ord, vilka används inte?
  2. Vilka tecken kan ett variabelnamn bestå av (korrekt identifierare)?
  3. Vad betyder ordet "initiering"?
  4. Vilka är huvudgrupperna av datatyper?
  5. Vilka primitiva typer känner du till?
  6. Vad vet du om konvertering av primitiva datatyper, finns det någon dataförlust, är det möjligt att konvertera boolesk typ?
  7. Vilka värden är standardinitierade variabler?
  8. Hur skickas värdet av en variabel (genom referens/värde)?
  9. Vad vet du om huvudfunktionen, vilka är förutsättningarna för dess definition?
  10. Vilka logiska operationer och operatörer känner du till?
  11. Vad är skillnaden mellan kort och lång logisk operatornotation?
  12. Vad är en sanningstabell?
  13. Vad är en ternär valoperator?
  14. Vilka unära och binära aritmetiska operationer känner du till?
  15. Vilka bitvisa operationer känner du till?
  16. Vad är rollen och reglerna för att skriva ett urvalsuttryck (switch)?
  17. Vilka cykler känner du till, vad är skillnaderna mellan dem?
  18. Vad är en "iteration av en loop"?
  19. Vilka parametrar har for-slingan, kan de utelämnas?
  20. Vilket uttalande används för att stoppa slingan omedelbart?
  21. Vilket påstående används för att flytta till nästa iteration av loopen?
  22. Vad är en array?
  23. Vilka typer av arrayer känner du till?
  24. Vad kan du om inpackningskurser?
  25. Vad är autopackning (boxning/unboxing)?

  1. Nämn principerna för OOP och beskriv var och en.
  2. Definiera termen "klass".
  3. Vad är ett klassfält/-attribut?
  4. Hur organiserar man åtkomst till klassfält på rätt sätt?
  5. Definiera termen "konstruktör".
  6. Vad är skillnaden mellan standardkonstruktörer, kopieringskonstruktörer och en konstruktor med parametrar?
  7. Vilka ändringar av åtkomstnivån känner du till, berätta för oss om var och en av dem.
  8. Berätta för oss om funktionerna i en klass med en enda privat konstruktör.
  9. Vad säger nyckelorden "det här", "super", var och hur kan de användas?
  10. Definiera termen "metod".
  11. Vad är en metodsignatur?
  12. Vilka metoder kallas överbelastade?
  13. Kan icke-statiska metoder överbelasta statiska?
  14. Berätta för oss om överordnade metoder.
  15. Kan en metod ta ett annat antal parametrar (argument av variabel längd)?
  16. Är det möjligt att begränsa åtkomstnivån/returtypen när man åsidosätter en metod?
  17. Hur får man åtkomst till åsidosatta metoder för överordnad klass?
  18. Vilka är transformationerna uppifrån och ner och nerifrån och upp?
  19. Vad är skillnaden mellan åsidosättande och överbelastning?
  20. Var kan statiska/icke-statiska fält initieras?
  21. Varför behövs instansen av operatören?
  22. Varför behövs vi och vad är initieringsblock?
  23. Vilken är ordningen för att anropa konstruktörer och initialiseringsblock för två klasser: ett barn och dess förfader?
  24. Var och vad används den abstrakta modifieraren till?
  25. Är det möjligt att deklarera en metod abstrakt och statisk på samma gång?
  26. Vad betyder det statiska nyckelordet?
  27. För vilka Java-konstruktioner gäller den statiska modifieraren?
  28. Vad händer om ett undantag inträffar i ett statiskt kodblock?
  29. Är det möjligt att överbelasta en statisk metod?
  30. Vad är en statisk klass, vilka är funktionerna för dess användning?
  31. Vilka är egenskaperna för att initiera slutliga statiska variabler?
  32. Hur påverkar den statiska modifieraren en klass/metod/fält?
  33. Vad betyder det sista sökordet?
  34. Definiera termen "gränssnitt".
  35. Vilka är standardmodifierarna för gränssnittsfält och metoder?
  36. Varför kan en gränssnittsmetod inte deklareras som slutgiltig eller statisk?
  37. Vilka typer av klasser finns det i java (kapslade...etc)
  38. Vilka är funktionerna för att skapa kapslade klasser: enkel och statisk.
  39. Vad vet du om kapslade klasser, varför används de? Klassificering, användningsfall, brott mot inkapsling.
  40. Vad är skillnaden mellan kapslade och inre klasser?
  41. Vilka klasser kallas anonyma?
  42. Hur får man tillgång till ett fält i en yttre klass från en kapslad klass?
  43. Hur kan du komma åt den lokala variabeln för en metod från en anonym klass som deklareras i kroppen av denna metod? Finns det några restriktioner för en sådan variabel?
  44. Hur är en anpassad klass relaterad till klassen Object?
  45. Berätta för oss om var och en av metoderna i klassen Object.
  46. Vad är metoden equals(). Hur skiljer den sig från operationen ==.
  47. Om du vill åsidosätta equals(), vilka villkor måste uppfyllas för den åsidosatta metoden?
  48. Om equals() åsidosätts, finns det några andra metoder som bör åsidosättas?
  49. Vad är det speciella med hashCode och equals-metoderna? Hur implementeras hashCode och equals-metoderna i klassen Object? Vilka regler och konventioner finns för implementeringen av dessa metoder? När ansöker de?
  50. Vilken metod returnerar en strängrepresentation av ett objekt?
  51. Vad händer om du åsidosätter lika utan att åsidosätta hashCode? Vilka problem kan uppstå?
  52. Finns det någon vägledning om vilka fält som ska användas vid beräkning av hashkoden?
  53. Tror du att det blir några problem om objektet som används som nyckel i hashMap ändrar fältet som deltar i hashCode definitionen?
  54. Vad är skillnaden mellan en abstrakt klass och ett gränssnitt, i vilka fall kommer du att använda den?
  55. Är det möjligt att komma åt privata klassvariabler, och i så fall hur?
  56. Vad är flyktigt och övergående? För vad och i vilka fall skulle det vara möjligt att använda standard?
  57. Utökning av modifierare vid ärvning, överstyrning och döljning av metoder. Om en föräldraklass har en privat metod, kan barnet utöka sin synlighet? Vad händer om skyddad? Och för att minska sikten?
  58. Är det vettigt att förklara en metod privat final?
  59. Vilka är egenskaperna för slutlig variabelinitiering?
  60. Vad händer om den enda klasskonstruktören förklaras som final?
  61. Vad är slutförande? Varför behövs det? Vad kan du berätta om sopsamlaren och dess algoritmer.
  62. Varför förklaras klonmetoden som skyddad? Vad krävs för att implementera kloning?
  63. Är du bekant med några designmönster?
  64. Skriv en Singleton... Men med lat laddning. Tänk om det måste vara trådsäkert? När är lata lastning värre?
  65. Vad kan du säga om MVC? Rita ett diagram och förklara hur MVC fungerar.
  66. Skriv en funktion för att beräkna faktorialet.
  67. Med tanke på en funktion för att beräkna Fibonacci-tal är det känt att det fungerar. Hitta det logiska felet. Uppskatta komplexiteten hos den resulterande algoritmen.

  1. Definiera "uteslutning"
  2. Vad är hierarkin av undantag.
  3. Kan/ska jag hantera jvm-fel?
  4. Vilka är sätten att hantera undantag?
  5. Vad betyder nyckelordet kastar?
  6. Vad är speciellt med finalblocket? Är det alltid uppfyllt?
  7. Kan det inte finnas något fångstblock när man fångar undantag?
  8. Skulle du kunna tänka dig en situation där det slutgiltiga blocket inte skulle verkställas?
  9. Kan ett enda fångstblock fånga flera undantag (från samma och olika arvsgrenar)?
  10. Vad vet du om hanterade och ohanterade (markerade/omarkerade) undantag?
  11. Vad är speciellt med RuntimeException?
  12. Hur skriver man ett eget ("anpassat") undantag? Vilka motiv kommer du att vägledas av när du väljer typ av undantag: bockat / avmarkerat?
  13. Vilken operatör tillåter dig att tvinga ett undantag att kastas?
  14. Finns det ytterligare villkor för en metod som potentiellt kan skapa ett undantag?
  15. Kan huvudmetoden kasta ett undantag utanför, och i så fall, var kommer detta undantag att hanteras?
  16. Om en retursats finns i både ett catch-block och ett finally-block, vilket är "viktigare"?
  17. Vad vet du om OutOfMemoryError?
  18. Vad vet du om SQLException? Vilken typ av markerad eller okontrollerad är det, varför?
  19. Vad är fel? I så fall används Error. Ge ett exempel på Error.
  20. Vilken konstruktion används i Java för undantagshantering?
  21. Anta att det finns ett försök-äntligen-block. Ett undantag kastades i försöksblocket och exekveringen flyttades till finalblocket. Slutligen blocket kastade också ett undantag. Vilket av de två undantagen kommer att "kasta" ut ur försök-slutligen-blocket? Vad händer med det andra undantaget?
  22. Anta att det finns en metod som kan kasta IOException och FileNotFoundException i vilken ordning ska fångstblocken gå? Hur många fångstblock kommer att exekveras?

  1. Definiera termen "samling".
  2. Lista fördelarna med att använda samlingar.
  3. Vilken typ av data kan samlingar lagra?
  4. Vad är samlingshierarkin?
  5. Vad vet du om Listsamlingar?
  6. Vad kan du om Set-kollektioner?
  7. Vad vet du om kösamlingar?
  8. Vad vet du om kartsamlingar, vad är deras grundläggande skillnad?
  9. Namnge de viktigaste implementeringarna av List, Set, Map.
  10. Vilka implementeringar av SortedSet känner du till och vilka funktioner har de?
  11. Vilka är skillnaderna/likheterna mellan List och Set?
  12. Vad är skillnaden/gemensamt mellan klasserna ArrayList och LinkedList, när är det bättre att använda ArrayList och när är det bättre att använda LinkedList?
  13. När är det rimligt att använda en array istället för en ArrayList?
  14. Hur skiljer sig ArrayList från Vector?
  15. Vad vet du om implementeringen av klasserna HashSet och TreeSet?
  16. Vad är skillnaden mellan HashMap och TreeMap? Hur är de uppsatta och hur fungerar de? Hur är det med tiden för tillgång till objekt, vilka beroenden?
  17. Vad är Hashtable, hur skiljer det sig från HashMap? Hittills har den blivit utfasad, hur använder du fortfarande önskad funktionalitet?
  18. Vad händer om vi lägger två värden i en karta med samma nyckel?
  19. Hur är ordningen på objekten i samlingen, hur sorterar man samlingen?
  20. Definiera termen "iterator".
  21. Vilken funktionalitet tillhandahåller klassen Collections?
  22. Hur får man en samling som inte kan ändras?
  23. Vilka samlingar synkroniseras?
  24. Hur får man en synkroniserad samling från en osynkroniserad?
  25. Hur får man en skrivskyddad samling?
  26. Varför ärver inte Map från Collection?
  27. Vad är skillnaden mellan Iterator och Enumeration?
  28. Hur implementeras foreach loop?
  29. Varför finns det ingen iterator.add()-metod för att lägga till element i en samling?
  30. Varför har inte iteratorklassen en metod för att få nästa element utan att flytta markören?
  31. Vad är skillnaden mellan Iterator och ListIterator?
  32. Vilka är sätten att iterera genom alla element i en lista?
  33. Vad är skillnaden mellan felsäkra och felsnabba egenskaper?
  34. Vad ska jag göra för att undvika att kasta ett ConcurrentModificationException?
  35. Vad är en stack och en kö, berätta för oss vad är skillnaderna mellan dem?
  36. Vad är skillnaden mellan jämförbara och jämförbara gränssnitt?
  37. Varför ärver inte samlingarna gränssnitten Klonbar och Serialiserbar?

  1. Vilka "strängklasser" kan du?
  2. Vilka är de viktigaste egenskaperna hos "sträng"-klasser (deras egenskaper)?
  3. Är det möjligt att ärva strängtypen, varför?
  4. Definiera termen strängsammansättning.
  5. Hur konverterar man sträng till nummer?
  6. Hur jämför man värdet på två strängar?
  7. Hur vänder man en sträng?
  8. Hur fungerar det att jämföra två strängar?
  9. Hur trimmar man mellanslag i slutet av ett snöre?
  10. Hur ersätter man ett tecken i en sträng?
  11. Hur får man del av ett snöre?
  12. Definiera termen "strängpool".
  13. Vilken metod låter dig välja en delsträng i en sträng?
  14. Hur delar man upp en sträng i delsträngar med en given avgränsare?
  15. Vilken metod kallas för att konvertera en variabel till en sträng?
  16. Hur tar man reda på värdet av ett visst tecken i en sträng, att känna till dess ordningsnummer i strängen?
  17. Hur hittar man det önskade tecknet i en sträng?
  18. Är det möjligt att synkronisera radåtkomst?
  19. Vad gör intern()-metoden?
  20. Hur skiljer sig klasserna String, StringBuffer och StringBuilder åt och vad har de gemensamt?
  21. Vad är det korrekta sättet att jämföra strängvärden för två olika objekt av typen String och StringBuffer?
  22. Varför är sträng oföränderlig och färdigställd i Java?
  23. Varför är en teckenuppsättning att föredra framför en sträng för lösenordslagring?
  24. Varför är en sträng en populär nyckel i en HashMap i Java?
  25. Skriv en metod för att ta bort ett givet tecken från en sträng.

  1. Vilka typer av I/O-strömmar finns det?
  2. Nämn de viktigaste förfäderna till I/O-strömmar.
  3. Vilka är likheterna och skillnaderna mellan följande strömmar: InputStream, OutputStream, Reader, Writer?
  4. Vad vet du om RandomAccessFile?
  5. Vilka är filåtkomstlägena?
  6. Vilka paket finns stream-klasserna i?
  7. Vad kan du om överbyggnadsklasser?
  8. Vilken tilläggsklass låter dig läsa data från indatabyteströmmen i formatet av primitiva datatyper?
  9. Vilken tilläggsklass gör att du kan snabba på läsning/skrivande genom att använda en buffert?
  10. Vilka klasser låter dig konvertera byteströmmar till karaktärsströmmar och vice versa?
  11. Vilken klass är designad för att fungera med delar av filsystemet (EFS)?
  12. Vilket tecken är avgränsaren när man anger sökvägen till EFS?
  13. Hur väljer man alla EFS i en viss katalog efter ett kriterium (till exempel med en viss förlängning)?
  14. Vad vet du om FilenameFilter-gränssnittet?
  15. Vad är serialisering?
  16. Vilka är förutsättningarna för en "säker" serialisering av ett objekt?
  17. Vilka klasser låter dig arkivera objekt?

  1. Definiera termen "process".
  2. Definiera termen "flöde".
  3. Definiera termen "trådsynkronisering".
  4. Hur samverkar program, processer och trådar?
  5. När är det lämpligt att skapa flera trådar?
  6. Vad kan hända om två trådar kör samma kod i ett program?
  7. Vad vet du om programmets huvudtråd?
  8. Vilka är sätten att skapa och köra trådar?
  9. Vilken metod startar en tråd för exekvering?
  10. Vilken metod beskriver verkan av en tråd under körning?
  11. När slutförs en tråd?
  12. Hur synkroniserar man metoden?
  13. Hur tvingar man stoppa en tråd?
  14. Definiera termen "demontråd".
  15. Hur skapar man en demon-tråd?
  16. Hur får man den nuvarande streamen?
  17. Definiera termen "monitor".
  18. Hur pausar man körningen av en tråd?
  19. Vilka tillstånd kan en ström vara i?
  20. Vad är monitor när man anropar icke-statisk och statisk metod?
  21. Vad är monitorn när man kör en del av metodkoden?
  22. Vilka metoder låter dig synkronisera körningen av trådar?
  23. Vilken metod sätter en tråd i viloläge?
  24. Vad är funktionaliteten för notify och notifyAll-metoderna?
  25. Vad gör joinmetoden?
  26. Vilka är villkoren för att anropa vänte-/aviseringsmetoden?
  27. Definiera termen "ömsesidig blockering".
  28. Vad är skillnaden mellan interrupt, interrupted, isInterrupted-metoder?
  29. I vilket fall kommer ett InterruptedException att kastas, vilka metoder kan kasta det?
  30. flyktiga modifierare och metoden yield().
  31. Paket java.util.concurrent
  32. Det finns någon metod som utför i++ operation. Variabel i av typen int. Det antas att koden kommer att exekveras i en flertrådig miljö. Ska blocket synkroniseras?
  33. Vad används som mutex om metoden deklareras statiskt synkroniserad? Är det möjligt att skapa nya instanser av en klass medan en statisk synkroniserad metod körs?
  34. Anta att ett RuntimeException inträffade i körmetoden som inte fångades upp. Vad kommer att hända med strömmen? Finns det något sätt att veta att ett undantag har inträffat (utan att linda in hela körkroppen i ett försöksfångstblock)? Finns det något sätt att få upp tråden igen efter att detta har hänt?
  35. Vilka standard Java-verktyg skulle du använda för att implementera en trådpool?
  36. Vad är en trådgrupp och varför behövs den?
  37. Vad är en ThreadPool och varför behövs den?
  38. Vad är en ThreadPoolExecutor och varför behövs den?
  39. Vad är "atomtyper" i Java?
  40. Varför behövs ThreadLocal-klassen?
  41. Vad är en exekutor?
  42. Vad är ExecutorService?
  43. Varför behövs ScheduledExecutorService?
Den här listan med 300+ frågor (utan svar) hittades på http://becomejavasenior.com/ . Andra författare finns listade där.

58489 Totalt antal visningar 15 visningar idag

Visningar: 38 283

  • Vad är OOP?
  • Vad är ett föremål?
  • Nämn de grundläggande principerna för OOP.
  • Vad är arv?
  • Vad är polymorfism? Vilka manifestationer av polymorfism i Java känner du till?
  • Vad är inkapsling?
  • Vad är abstraktion?
  • Vilka är fördelarna med objektorienterade programmeringsspråk?
  • Hur förbättrar användningen av ett objektorienterat tillvägagångssätt mjukvaruutveckling?
  • Det finns ett uttryck "är" och "har". Vad betyder de i termer av OOP-principer? Vad är skillnaden mellan sammansättning och aggregering?
  • Vad menar du med polymorfism, inkapsling och dynamisk länkning?

java kärna.

  • Vad är skillnaden mellan JRE, JVM och JDK?
  • Beskriv åtkomstmodifierare i Java.
  • Vad är åtkomst på paketnivå.
  • Hur skiljer sig en abstrakt klass från ett gränssnitt? När skulle du använda en abstrakt klass och när skulle du använda ett gränssnitt?
  • Kan ett objekt komma åt en privat klassvariabel? Om så är fallet, hur?
  • Vad är statiska block för i Java?
  • Är det möjligt att överbelasta en statisk metod?
  • Berätta om inre klasser. När kommer du att använda dem?
  • Vad är skillnaden mellan instansvariabel och statisk variabel? Ge ett exempel.
  • Ge ett exempel när du kan använda en statisk metod?
  • Berätta för oss om lastarklasser och dynamisk klassladdning.
  • Vad är syftet med "assert"-operatorn i Java?
  • Varför definierar vissa gränssnitt inte metoder alls?
  • Vad är den största skillnaden mellan String, StringBuffer, StringBuilder?
  • Berätta för mig om Java I/O-strömmar.
  • Vad är Heap and Stack-minne i Java?
  • Vad är skillnaden mellan Stack- och Heap-minne i Java?
  • Berätta om minnesmodellen i Java?
  • Hur fungerar sophämtaren?
  • Berätta om typgjutning. Vad är degradering och befordran? När får du en ClassCastException?
  • Vad är en statisk klass, vilka är funktionerna för dess användning?
  • Hur man kommer åt ett fält av den yttre klassen från en kapslad klass.
  • Vilka typer av kapslade klasser finns det? Vad används de till?
  • Är det möjligt att ändra när man åsidosätter en metod:
  • Åtkomstmodifierare
  • returtyp
  • Argumenttyp eller nummer
  • Argumentets namn
  • Ändra ordning, kvantitet eller ta bort kastsektionen helt och hållet?
  • Vad är autoboxning?
  • Vad är generika?
  • Vad är det sanna syftet med att använda generiska typer i Java?
  • Hur överförs variabler till metoder, efter värde eller genom referens?
  • Vilka metoder har klassen Object?
  • Regler för att åsidosätta metoden Object.equals().
  • Om du vill åsidosätta equals(), vilka villkor måste uppfyllas för den åsidosatta metoden?
  • Vad är förhållandet mellan hashCode och lika?
  • Hur implementeras hashCode och equals-metoderna i klassen Object?
  • Vad händer om du åsidosätter lika utan att åsidosätta hashCode? Vilka problem kan uppstå?
  • Finns det någon vägledning om vilka fält som ska användas vid beräkning av hashkoden?
  • Vad är hashCode()-metoden till för?
  • Regler för att åsidosätta Object.hashCode()-metoden.
  • Berätta om objektkloning. Vad är skillnaden mellan ytlig och djup kloning?
  • Regler för att åsidosätta metoden Object.clone().
  • Var och hur kan man använda en privat konstruktör?
  • Vad är en standardkonstruktor?
  • Beskriv Object.finalize()-metoden.
  • Vad är skillnaden mellan orden final, finalize och finalize?
  • Beskriv hierarkin av undantag.
  • Vilka typer av undantag i Java känner du till, hur skiljer de sig åt?
  • Vad är markerat och avmarkerat Undantag?
  • Hur skapar man ett eget omarkerat undantag?
  • Vad är Unchecke-undantag?
  • Vad är fel?
  • Beskriv hur försök-fånga-äntligen-blocket fungerar.
  • Är det möjligt att använda ett försök-slutligen (utan fångst)-block?
  • Körs finalblocket alltid?
  • Vilka egenskaper har String-klassen? vad gör intern()-metoden.
  • Är det möjligt att ärva strängtypen, varför?
  • Varför är en sträng en populär nyckel i en HashMap i Java?
  • Definiera termen strängsammansättning.
  • Hur vänder man en sträng?
  • Hur jämför man värdet på två strängar?
  • Hur trimmar man mellanslag i början och slutet av en sträng?
  • Definiera termen "strängpool".
  • Är det möjligt att synkronisera radåtkomst?
  • Vad är det korrekta sättet att jämföra strängvärden för två olika objekt av typen String och StringBuffer?
  • Varför är sträng oföränderlig och färdigställd i Java?
  • Skriv en metod för att ta bort ett givet tecken från en sträng.
  • Vad är reflektion?
  • Vad händer med garbage collector (GC) om ett undantag inträffar under exekveringen av finalize()-metoden för något objekt?
  • Vad är internationalisering, lokalisering?
  • Vad är anteckningar i Java?
  • Vilka funktioner utför Annotation?
  • Vilka inbyggda kommentarer i Java känner du till?
  • Vad gör anteckningarna @Retention, @Documented, @Target och @Inherited?
  • Vad gör annoteringarna @Override, @Deprecated, @SafeVarargs och @SuppressWarnings?
  • Vilken livscykel för anteckningar kan anges med @Retention?
  • Vilka element kan kommenteras, hur specificeras det?
  • Hur skapar du din anteckning?
  • Vilka typer av attribut är tillåtna i kommentarer?
  • Vad är JMX?
  • Vilka fördelar erbjuder JMX?
  • Vad mer kan JMX göra förutom fjärrstyrning?
  • Vad är MBean?
  • Vilka typer av MBeans finns det?
  • Vad är MBean Server?
  • Vilka mekanismer ger säkerhet i Java-teknik?
  • Vilka är några av de kontroller som Java-bytecode-verifieraren utför?
  • Vad vet du om "skyddshanterare" i Java?
  • Vad är JAS?
  • Vad är Refactoring?

Java Collections Framework.

  • Vad är en samling?
  • Nämn samlingarnas huvudgränssnitt och deras implementering.
  • Hur skiljer sig ArrayList från LinkedList? I vilka fall är det bättre att använda den första och i vilka den andra?
  • Vad är skillnaden mellan HashMap och Hashtable?
  • Hur skiljer sig ArrayList från Vector?
  • Hur jämförs samlingselement?
  • Ordna följande gränssnitt i en hierarki: Lista, Set, Map, SortedSet, SortedMap, Collection,Iterable, Iterator, NavigableSet, NavigableMap.
  • Varför är kartan inte samling medan Lista och Set är samling?
  • Definiera termen "iterator".
  • Vad vet du om Iterable-gränssnittet?
  • Hur konverterar man HashSet till ArrayList på en rad?
  • Hur konverterar man ArrayList till HashSet på en rad?
  • Hur itererar man över alla nycklar på kartan med tanke på att kartan inte kan itereras?
  • Hur itererar man över alla värden på kartan med tanke på att kartan inte kan itereras?
  • Hur itererar man över alla nyckel-värdepar i Map med tanke på att Map inte är Iterable?
  • Vad är "sortering" av SortedMap, förutom det faktum att toString() skriver ut allt i ordning?
  • Hur kopierar man element från valfri samling till en array i ett anrop?
  • Implementera en symmetrisk skillnad mellan två samlingar med hjälp av samlingsmetoderna (addAll(), removeAll(), retainAll()).
  • Jämför Uppräkning och Iterator.
  • Hur är Iterable och Iterator relaterade?
  • Vad är förhållandet mellan Iterable, Iterator och "for-each" introducerade i Java 5?
  • Jämför Iterator och ListIterator.
  • Vad händer om jag anropar Iterator.next() utan att "fråga" Iterator.hasNext()?
  • Vad händer om jag anropar Iterator.next() innan jag anropar Iterator.hasNext() 10 gånger? Saknar jag 9 saker?
  • Om jag har en samling och en underordnad iterator, kommer samlingen att ändras om jag anropar iterator.remove()?
  • Om jag har en samling och en underordnad iterator, kommer iteratorn att ändras om jag anropar collection.remove(..)?
  • Varför lade de till ArrayList om det redan fanns en vektor?
  • Implementeringen av klassen ArrayList har följande fält: Object elementData, int size. Förklara varför du behöver lagra storlek separat när du alltid kan ta elementData.length?
  • Är LinkedList en enkellänkad, dubbellänkad eller fyrlänkad lista?
  • Vilken är den sämsta tiden för contain()-metoden för ett element som finns i en LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N))?
  • Vilken är den sämsta tiden för contain()-metoden för ett element som finns i en ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N))?
  • Vilken är den sämsta tiden för LinkedList add()-metoden (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Vilken är den sämsta tiden för en ArrayList add()-metod (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Hur många element allokeras i minnet när ArrayList.add() anropas?
  • Hur många element allokeras i minnet när LinkedList.add() anropas?
  • Uppskatta mängden minne för att lagra en primitiv byte av typen i LinkedList?
  • Uppskatta mängden minne för att lagra en primitiv byte av typen i ArrayList?
  • Jag lägger till ett element i mitten av listan: list.add(list.size()/2, newElem). För vem är denna operation långsammare - för ArrayList eller för LinkedList?
  • Hur itererar man LinkedList-element i omvänd ordning utan att använda slow get(index)?
  • Hur får man en lista med alla element utom de första och sista 3 med ett anrop från List?
  • Kan olika objekt i minnet (ref0 != ref1) ha ref0.hashCode() == ref1.hashCode()?
  • Kan olika objekt i minnet (ref0 != ref1) ha ref0.equals(ref1) == sant?
  • Kan olika referenser till samma objekt i minnet (ref0 == ref1) ha ref0.equals(ref1) == false?
  • Det finns en klass Point(int x, y;). Varför är en hash-kod av formen 31 * x + y att föredra framför x + y?
  • Om klassen Point(int x, y;) är "korrekt" för att implementera equals-metoden (returnera ref0.x == ref1.x && ref0.y == ref1.y), men gör hashkoden som int hashCode( ) (retur x;), kommer sådana punkter att placeras korrekt och hämtas från HashSet?
  • equals() genererar en ekvivalensrelation. Vilken av egenskaperna har en sådan relation: kommutativitet, symmetri, reflexivitet, distributivitet, associativitet, transitivitet?
  • Är det möjligt att implementera equals(Object that) (return this.hashCode() == that.hashCode()) så här?
  • equals kräver att man kontrollerar att argumentet (equals(Object that)) är av samma typ som själva objektet. Vad är skillnaden mellan this.getClass() == that.getClass() och den instansen av MyClass?
  • Är det möjligt att implementera equals-metoden för klass MyClass så här: class MyClass (public boolean equals(MyClass that) (retur this == that;))?
  • Kommer HashMap att fungera om alla nycklar returnerar int hashCode() (retur 42;)?
  • Varför lade de till HashMap om det redan fanns en hashtabell?
  • Enligt Knuth och Kormen finns det två huvudsakliga implementeringar av hashtabellen: baserad på öppen adressering och baserad på kedjemetoden. Hur implementeras HashMap? Varför gjorde de det (enligt din mening)? Vilka är för- och nackdelarna med varje tillvägagångssätt?
  • Hur många länkklick händer när du gör HashMap.get(key) på en nyckel som finns i tabellen?
  • Hur många nya objekt skapas när du lägger till ett nytt element i en HashMap?
  • Hur fungerar en HashMap när du försöker lagra två element i den med nycklar med samma hashCode, men för vilken är lika med == false?
  • HashMap kan degenerera till en lista även för nycklar med olika hashCode. Hur är detta möjligt?
  • Vilken är den sämsta tiden för en get(key)-metod för en nyckel som inte finns i tabellen (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • Vilken är den sämsta tiden för en get(key)-metod för en nyckel som finns i en tabell (O(1), O(log(N)), O(N), O(N*log(N)), O (N*N))?
  • Förklara innebörden av parametrarna i HashMap(int initialCapacity, float loadFactor)-konstruktorn.
  • Vad är skillnaden mellan HashMap och IdentityHashMap? Vad är IdentityHashMap för? Hur kan det vara användbart att implementera serialisering eller kloning?
  • Vad är skillnaden mellan HashMap och WeakHashMap? Vad är WeakHashMap till för?
  • WeakHashMap använder WeakReferences. Varför inte skapa en SoftHashMap på SoftReferences?
  • WeakHashMap använder WeakReferences. Varför inte skapa en PhantomHashMap på PhantomReferences?
  • Gör en HashSet från en HashMap (använd bara flera nycklar, inte flera värden).
  • Gör HashMap från HashSet(HashSet >).
  • Jämför gränssnitten java.util.Queue och java.util.Deque.
  • Vem förlänger vem: Kön förlänger Deque, eller Deque förlänger Kön?
  • Varför implementerar LinkedList både List och Deque?
  • Vad är skillnaden mellan klasserna java.util.Arrays och java.lang.reflect.Array?
  • Vad är skillnaden mellan klasserna java.util.Collection och java.util.Collections?
  • Skriv ett icke-trådat program som får en samling att kasta ett ConcurrentModificationException.
  • Vad är "felsnabbt beteende"?
  • Finns det en speciell klass java.util.EnumSet för uppsättningar av enums? Varför då? Varför gillade inte författarna HashSet eller TreeSet?
  • java.util.Stack - Anses som "utfasad". Vad rekommenderas för att ersätta det? Varför?
  • Vilken samling implementerar FIFO-servicedisciplinen?
  • Vilken samling implementerar tjänstedisciplinen FILO?
  • Ge ett exempel när en samling kastar ett UnsupportedOperationException.
  • Varför kan du inte skriva "ArrayList siffror = ny ArrayList ();" men du kan "Lista siffror = ny ArrayList ();"?
  • LinkedHashMap - vad är detta "odjur"? Vad finns i den från LinkedList och vad finns i HashMap?
  • LinkedHashSet - vad är detta "odjur"? Vad finns i den från LinkedList och vad finns i HashSet?
  • De säger att det är lätt att skapa en enkel cache med "invalidation policy" på LinkedHashMap, vet du hur?
  • Vad tillåter PriorityQueue dig att göra?
  • Vilka är skillnaderna mellan java.util.Comparator och java.lang.Comparable?

Java 8.

  • Vad är en symbolisk länk?
  • Vad är skillnaden mellan I/O och NIO?
  • Vilka funktioner hos NIO känner du till?
  • Vilka typer av I/O-strömmar finns det?
  • Namnge huvudklasserna av in-/utgångsströmmar.
  • Hur skiljer sig OutputStream, InputStream, Writer, Reader och vad har de gemensamt?
  • Vilka underklasser till basklassen InputStream vet du vad de är till för?
  • Vad vet du om RandomAccessFile?
  • Vilka filåtkomstlägen har RandomAccessFile?
  • Vilka är underklasserna för basklassen OutputStream och vet du vad de är till för?
  • Vad används PushbackInputStream till?
  • Vad används SequenceInputStream till?
  • Vilka underklasser av Reader-basklassen vet du vad de är till för?
  • Vilka underklasser till Writer-basklassen vet du vad de är till för?
  • Vad är absolut väg och relativ väg?
  • Vilka paket finns stream-klasserna i?
  • Vad kan du om överbyggnadsklasser?
  • Vilken tilläggsklass låter dig läsa data från indatabyteströmmen i formatet av primitiva datatyper?
  • Vilken tilläggsklass gör att du kan snabba på läsning/skrivande genom att använda en buffert?
  • Vilka klasser låter dig konvertera byteströmmar till karaktärsströmmar och vice versa?
  • Vad är skillnaden mellan PrintWriter-klassen och PrintStream-klassen?
  • Vilken klass är designad för att fungera med filsystemelement?
  • Vilket tecken är avgränsaren när man anger en sökväg i filsystemet?
  • Vilka metoder i klassen File känner du till?
  • Vad vet du om FileFilter-gränssnittet?
  • Vilka klasser låter dig arkivera objekt?

  • På vilket objekt sker synkronisering när en statisk synkroniserad metod anropas?
  • Vad används det flyktiga, synkroniserade, övergående, infödda nyckelordet till?
  • Vad betyder trådprioritet?
  • Vad är demon-trådar i Java?
  • Vad betyder det att vagga strömmen?
  • I vilka tillstånd kan en tråd vara i java? Hur fungerar en stream egentligen?
  • Vad är skillnaden mellan de två gränssnitten för implementering av körbara och anropsbara uppgifter?
  • Skillnader mellan CyclicBarrier och CountDownLatch?
  • Vad är ett rasvillkor?
  • Hur stoppar man en tråd?
  • Vad händer när ett undantag inträffar i en tråd?
  • Vad är en ThreadLocal-variabel?
  • Vad är FutureTask?
  • Skillnaden mellan interrupted och isInterrupted?
  • Varför anropas vänte- och meddelandemetoderna i ett synkroniserat block?
  • Vad är en trådpool?
  • Skillnader mellan livelock och deadlock?
  • Hur kontrollerar man om en tråd håller ett lås?
  • Hur får man en tråddump?
  • Vilken JVM-inställning används för att styra storleken på en tråds stack?
  • Skillnader mellan synchronized och ReentrantLock?
  • Vad är en semafor?
  • Vad händer om trådpoolskön redan är full och du skickar in en uppgift?
  • Skillnader mellan metoderna submit() och execute() för en trådpool?
  • Vad är en blockeringsmetod?
  • Vad är ReadWriteLock?
  • Vad är Singletons dubbelkontrollerade låsning?
  • Vad är Fork/Join-ramverket?
  • The Force är en flod som många kan dricka ur, och jedi-träning är inte det enda sättet att dra ur den." - Luke Skywalker Alla boksamlingar lämnade efter sig. Vilken av dem du ska läsa, vad inte - det är upp till dig. Nu har du bara ett mål kvar: att få ett jobb och bygga en karriär utan att trampa på en kratta. Den sista artikeln är indelad i avsnitt: - Före arbetet - Intervju - Under arbetet Det finns mycket av min personliga åsikt i den här delen, så ta inte fraserna ur sitt sammanhang och behandla det som ett uppriktigt samtal med en gammal vän :).

    Innan jobbet

    Nedan är de tio populäraste klyschorna som uppstår när själen dras till programmering, men vissa omständigheter stör personen. Min uppgift är att försöka stoppa din misstänksamhet och förbereda dig för ett positivt sätt att tänka. Om du läser den här artikeln är du längre än du tror! Mentalt är du redan där du behöver vara, och om du redan har läst några böcker så har halva vägen redan passerats. Sluta därför tvivla - det här är de svagas lott. Endast framåt! Redan bättre? Då går vi! "Jag har ingen utbildning" När jag kom in på akademin hos ett av de stora outsourcingföretagen antydde intervjuarna försiktigt för mig att de inte alls var intresserade av diplomet, så frågorna var specifika - på OOP och på grundläggande Java. Naturligtvis kommer du att stöta på lediga platser där tillgängligheten av dessa. utbildning kommer att vara ett tydligt krav. Jag vill bara säga att hans frånvaro inte är ett hinder nu för tiden. Många utländska kontor efterfrågar BS / MS Computer Science eller, uppmärksamma, relevant erfarenhet. Inte övertygande? Kanske kommer du att bli uppmuntrad av att jag inte har en teknisk utbildning ;), men det hindrade mig absolut inte från att skaffa mig erfarenhet i stora företag. Fråga mig nu vad skulle jag göra om jag kunde spola tillbaka bandet? Självklart skulle jag gå på KPI/NAU, men jag skulle inte sörja för mycket om jag inte gick in. Sluta skrämma dig över det här. Tiden kommer att gå - du kan få en skorpa vid 40 om du vill - men för nu, fokusera på att bli en junior utvecklare här och nu. "Det kommer att finnas människor som är smartare än jag" Det kommer alltid att finnas människor som är smartare, smartare, mer flexibla, mer begåvade än du, och vilket jobb som helst är inget undantag. Detta faktum ger dig absolut inte rätt att avvika från målet. Kanske finns det någonstans på andra sidan jordklotet en liten pojke från Japan som multiplicerar och delar siffror snabbare än du, och någon mormor från Tjeckien skriver på tangentbordet på en mobiltelefon snabbare än någon tonåring. Men du tänker inte på det, eller hur? Så varför ska du bry dig om de människor du kommer att arbeta med när du är klar? På vissa sätt kommer dina framtida kollegor att överträffa dig, på något sätt kommer de att förlora mot dig. Det här är okej! Stryka. "Jag tror inte att jag kan" Tja, för det första var det ingen som sa att det skulle vara lätt, men det betyder inte alls att ditt mål inte är genomförbart. Inget hindrar dig från att helt enkelt prova, även om du för närvarande arbetar som revisor eller försäljningsassistent. Kom efter en arbetsdag och sätt dig ner för att plugga. Om du efter ett tag ser några framsteg är detta ett tecken på att du rör dig i rätt riktning. Sluta inte! Om du ens är lite intresserad av detta och det ges till dig, så vet jag inte en enda punkt som skulle kunna övertyga mig om att du inte är värd det. "Jag är lat" Lättja är bara en brist på motivation. Om du märker att det mesta av din fritid, istället för att studera och inte kämpa dig bort från kursen, gör du dumt skräp - jag skyndar mig att meddela dig att en programmerares arbete med största sannolikhet inte är ditt. Åtminstone inte nu. Vissa kallar lättja för en synd, en sjukdom, den moderna tidens kolera tillsammans med fetma. Lämna denna verksamhet till karriärhysteriker. Enligt min mening är allt runt omkring i det här livet mättat med illusionen av kamp och konkurrens: vem är högre, vem är starkare, vem är rikare. Vem har en svalare bil, vem har högre lön i laget, vem trycker hårdare på skivstången på gymmet, vem av tjejerna som gifte sig tidigare och fick barn – det här gör dig sjuk, som illaluktande snabbmat. Människor slutade leva och njuta av livet, följa sina drömmar, byta ut sin komfortzon mot ett val mellan Pepsi och Coca-Cola. För mig är lathet bra, det är bara underbart. Detta är en vanlig skyddsfunktion för din kropp för att spara tid och energi på saker som är värdelösa för den. En person skapades för att vara fri, så om du är lat - sluta försöka lyfta din rumpa från soffan - kanske är den på sin plats nu :). "Jag går dit för pengarna" Om vi ​​samlar utvecklare och säger: från och med nu kommer din lön att vara 3-4k hryvnias för vilken nivå som helst, och testare kommer att fortsätta att få samma priser, då kommer frågan att vara annorlunda: inte hur många som kommer att bombas, utan hur många programmerare efter denna nyhet kommer att förbli bara programmerare. Många människor kommer in på IT på grund av degen. Lön översatt från dollar, ostar och en dyr DSLR. Oavsett hur mycket jag arbetade med människor, så gled alltid samtal om detta igenom. Jag säger inte att det här är dåligt, jag vill bara att du inte försöker övertyga dig själv om att du går ut ur rent andliga mål för att förändra världen till det bättre. Innan jag fick jobb som junior visste jag vad lönerna för seniorer, tekniska ledare – och till och med mitten – var, och dessa tankar inspirerade mig bara: på min tid, innan jag jobbade som programmerare, kunde jag bara drömma om sådana. siffror. Kalla dessa saker vid deras rätta namn och sluta skämmas för det. "Jag tror inte det är min" Vems då? Du vet, det är lätt att kolla. Öppna den första volymen av Hortsmann och börja läsa, skriv koden från exemplen. Om du inte är uttråkad och du inte markerar tid på samma kapitel för den andra veckan, släpp dina tvivel. Studiet av tekniska specialiteter är en genomgående sak. Du kan inte gå till B utan att känna till A, men du har alltid en chans att gå tillbaka ett kapitel och stärka grunden. Varsågod. "Det finns många som jag" Det är alltid konkurrens om en plats. Jag argumenterar inte, till exempel, nu är denna siffra 300-400 testare utan erfarenhet, eller ännu mer för en plats. Ja, detta är en bitter sanning, men å andra sidan, även med sådana indikatorer kan jag inte hitta en tillräckligt seriös sak. Ja, minst 100500 på plats !! Du har alltid möjlighet att få erfarenhet av dina projekt: bygg någon form av tjänst, ett skrivbordsprogram, använd hela stacken som du känner till - och du gör redan stötar, och resten, förutom att skicka ut ditt CV, gör ingenting annan. "Ingen svarar på mitt CV" I fortsättning på ovanstående stycke. Troligtvis är det bra för framtida IT-specialister utan erfarenhet att kunna skriva ett vackert CV, men när det är många personer för en ledig tjänst är många CV:n väldigt lika varandra: självklart kan du skicka ett foto med en urringning (om en tjej) eller skriv en massa tekniker , som du själv vet bara från Wikipedia. I båda fallen kommer HR helt enkelt inte bry sig: om det skulle finnas en person i projektvakansen som till exempel kan AWS, då kommer de att leta efter AWS i CV:t. Ta hänsyn till en annan viktig punkt, som rekommendationer från kollegor. Detta är smärtan för varje person som inte har sådana bekanta, eftersom lejonparten av juniorer tas därifrån (om personen, på rekommendation, inte är en idiot, förstås). Vanligtvis, jag betonar, tas en lämplig aktiv person som är redo att lära sig, och till och med för mat, för tjänsten som junior. Och om en sådan kandidat misslyckas, är det mer sannolikt att du blir nästa. Tja, medan resten intervjuas har du många områden där du kan svalka dig: öppen källkod, pussel på Internet och kanske frilansande. "Jag klarar inte intervjun / jag vill jobba på ett specifikt företag" Ja, troligen kommer den första intervjun att bli ett misslyckande, men upplevelsen du får är ovärderlig. Med varje efterföljande intervju kommer du att bli mer självsäker och påhittig. Som nu kommer jag ihåg min första ... Gud, vad var det för dumheter jag pratade om?! Så pinsamt det var att gå efter honom (jag minns den där jäkeln som log i ansiktet på mig), men när jag kom hem och tänkte om, insåg jag att det var en underbar lektion. Efter honom var alla efterföljande liknande händelser genomsyrade av lätthet och självförtroende. Ingen dog, de letar efter sådana som jag, så jag kommer. Tro på dig själv! Om du vill specifikt till ett visst företag, så tror jag att jag inte kommer att avslöja för dig ett livshack som är populärt i vår miljö, men ändå: innan du organiserar ett möte med det här kontoret, gå igenom en intervju med konkurrenter innan detta. Kanske kommer du att erbjudas något som du inte kommer att tacka nej till, eller så blir förhållandena mer abrupta. Jag vet en sak med säkerhet: du kommer inte att ångra dig. "Jag är bra på det här jobbet" Du vet, det finns det här gamla talesättet: Le mieux est I'enneini du bien ("Det bästa är det godas fiende"). Ditt jobb kanske inte är det värsta stället, men ja, chefen är en get, så vad? Eller till exempel tredje året utan bonus, men stabil lön, speciellt eftersom jag redan är över 30. Till viss del kan det vara så, kom bara ihåg att du har ett liv, och det ska inte spenderas på besvikelser, för imaginär tröst, när det finns så många intressanta saker runt omkring, och hela livet räcker inte för att förstå. Var inte rädd för att bli bättre, var inte rädd för att bli bättre. Lyssna inte på någon, gå ihärdigt till målet om du vet att det är det du verkligen vill göra. Var inte rädd för att ändra!

    Intervju

    I stort sett kan du hitta allt på internet eller fråga runt med vänner, men jag tror att det inte blir överflödigt. Nedan är ett exempel på en intervju för en junior Java-utvecklare som han skulle vara nu om jag var intervjuaren. Frågor kan vara vad som helst, jag försökte bara samla något medelmåttigt för sjukhuset. Låt oss låtsas att du har tur. Standardschema Steg 1. En rekryterare ringer dig och du ordnar en intervju med henne, till exempel imorgon kl 11:00. Steg 2 Du anländer tidigt, eftersom 11:00 med största sannolikhet inte är tiden för dig, utan för utvecklarna, som har något slags rum reserverat där du kommer att torteras. Det är bra seder för alla rekryterare att varna för detta. Steg 3 Faktum är att från och med steg 3 kan alla punkter blandas, eftersom intervjuer kan genomföras på olika sätt. Här kan du till exempel få frågor om grundläggande saker, var kommer du ifrån, varför är du hos oss och så vidare. Det är möjligt att HR själv kan göra detta, och naturligtvis är det möjligt på engelska. Okej, det beror på företaget. Steg 4 Du bjuds in till ett mötesrum, där du kommer att ha ett samtal med en, två, tre personer, varav en är antingen senior eller en teknisk ledare som kommer att arbeta med dig i framtiden, bland resten kan det finnas en Scrum master, andra utvecklare eller HR:s. Du intervjuas en stund, sedan skakar de din hand och släpper taget. Steg 5 Kanske blir det nästa dag, eller kanske direkt efter steg 4 - du kommer att ha ett samtal med en utländsk kund (om någon), eller så kommer han att genomföra en intervju själv. Som du kan se finns det många alternativ. Någonstans finns det kunder, någonstans är det också en telefonintervju. Detta är bara ett exempel. Exempel på en teknisk intervju för en Junior Java-utvecklare Jag tycker verkligen synd om underutvecklarna som läser något smart för att drunkna / krossa / visa upp sig inför den sökande för en intervju. Om du ser att en sådan person är framför dig och du känner press och spänning från honom, skicka honom omedelbart till tre roliga, för efter en framgångsrik passage med denna cretin måste du arbeta. Slösa inte dina dyrbara nerver. Intervjun bör först och främst ske med syftet att ta reda på vad kandidaten vet och inte vad han inte vet. Naturligtvis, om du behöver en person som kan något specifikt - fråga honom, plåga honom inte med värdelösa saker som du inte använder i projektet. Var människa trots allt! Nedan finns ungefärliga frågor som kan stötas på i en intervju. 5 frågor för varje teknik. OOP 1. Ge ett exempel på polymorfism från det verkliga livet? Vad är fördelarna? Brister? Skriv en enkel kod. 2. Vad är ett gränssnitt? Abstrakt klass? Varför behöver vi gränssnitt om du dumt kan skriva allt med klasser (lite provokation)? Detsamma gäller för en abstrakt klass. Vilka är standardmetoder i Java 8? 3. Bygg en klasshierarki på ett specifikt exempel på en tänkt databas eller program (det finns en lista över olika klasser av arbetare från databasen) och interaktionen mellan dem (aggregation, sammansättning). 4. Hur skiljer sig sammansättning från aggregering (är-a, har-a)? 5. Hur kan man komma runt förbudet mot multipelarv i Java? JDK/JRE 1. Hur skiljer sig JDK från JRE? Vad är JVM? 2. Vad är en klassväg och vad är den till för? Hur laddar man till exempel andra klasser i klassvägen? 3. Vad kan du om classloader? 4. Berätta om javadoc? Vad är det för? 5. Vad är JAR, WAR? Java Common 1. Vad är skillnaden mellan statiska metoder och icke-statiska metoder? Vad är final? 2. Vad är boxning-unboxing? byte b = 127, b++, vad är resultatet och varför? 3. Vad är omslag, vad är de till för? 4. Vad behöver jag göra för att skapa min anteckning? Vad är åsidosättande/överbelastning? 5. Varför är String-klassen final? Vad gör intern()-metoden? Data struktur 1. Berätta om strukturen för Collections API i Java? Har du redan arbetat med Stream API? 2. Vad är skillnaden mellan ArrayList och LinkedList? Var är det bättre att använda ArrayList och var är LinkedList? 3. Berätta hur HashMap fungerar? Vilka är funktionerna i att arbeta med TreeSet, HashSet? Har du erfarenhet av Guava-kollektioner? 4. Arrayer i Java, ett exempel på en tvådimensionell array. 5. hashCode, lika med HashMap exempel? Samtidighet 1. Vad är en process? Flöde? Hur skapar man en tråd? Vad är synkroniserat? Hur förstår man den eller den biten trådsäker kod? 2. Vad är Thread.sleep, samt vänta, meddela, ge? 3. Ge ett exempel på ett dödläge? 4. Samlingar vid arbete med multithreading. 5. ThreadLocal and Atomic Operations SQL/JDBC 1. På ett specifikt exempel, hämta från användardatabasen den vars lön är högre än 5000. 2. Exempel på INNER JOIN, OUTTER JOIN, Order By, Group By. 3. Varför behöver jag en JDBC-drivrutin? Exempel. 4. Berätta allt du vet om ResultSet, ett par exempel. 5. Skriv en enkel DAO med RS. JPA/Hibernate 1. Vilka är fördelarna och nackdelarna med JPA? 2. Vad är en EntityManager? entitet? 3. Kriterier i JPA/Hibernate. 4. En-till-en, många-till-många i JPA/Hibernate 5. Hur skulle du göra en JOIN i Hibernate? HQL? Vår 1. Vad är DI/IoC? Fördelar. 2. Vad är Application Context? Böna? 3. Vilka är IoC-initieringstyper? 4. Singleton, prototyp på våren? Anteckningsbaserad vår? 5. Bönornas livscykel? init-metod, förstör-metod? @PostConstruct, @PostDeploy? Maven 1. Mavens huvudfaser, livscykeln. 2. Hur kör man maven med tester, utan tester? Vad är arketyp, mvn-beroende? 3. Profiler i maven, hur man skapar, hur man kör. 4. Vad är snapshot i maven? Centrala/Fjärrlager? 5. Plugins i mvn, funktionsprincipen, ett par exempel. Algo 1. Algoritmens koncept, dess hastighet, Big-O-Notation. 2. Hur hittar man mittelementet i en LinkedList på en gång? 3. Skriv en primitiv stack? Vad är skillnaden mellan Stack och Queue? LIFO, FIFO? 4. Snabbsortering, Sammanfogad sortering. 5. Skriv ett program som kontrollerar om ett tal är ett palindrom. Jag håller med, ribban kanske är böjd lite mer mot mitten än junioren, men jag tror att en sådan förberedelse definitivt inte kommer att skada dig. Försök att fördjupa dig i varje fråga. Förresten, många riktningar i Java anges inte här, vänligen ta hänsyn till.

    Under arbetet

    Här är små rekommendationer för de junior/mellan utvecklare som redan är fasta. Dessa enkla tips kan komma till nytta för dig precis som de hjälpte mig i sin tur. Var inte envis Sluta bevisa din poäng, även om den är förföriskt nära sanningen. Du har redan märkt att du har varit i en tvist länge, vilket betyder att det på andra sidan barrikaderna finns en vanlig åsna som bara har två åsikter i livet: hans och den felaktiga. Vi har otroligt många envisa människor som står sig in i det sista, så länge deras ego inte skakas. Och det här är inte bara dina kollegor, de är bara överallt - i minibussen, i butiken, släktingar, nära vänner - du kan inte fly eller gömma dig för dem. Du måste på något sätt interagera med dem, även om du förstår att en person pratar öppet nonsens. Dessutom kan samma sak hända dig. Jag håller med, enkla saker kan förklaras även för en envis person, men vad händer om vi pratar om arkitektoniska frågor i ett projekt eller en personlig åsikt? Glöm detta skräp - var flexibel. Jag har stor respekt för människor som kan erkänna att de har fel, inför alla. Det är denna egenskap som kommer att vara användbar för dig som juniorspecialist - det är svårt att konfrontera en öppen person, särskilt när han erkänner att han lär sig och har rätt att göra misstag. Bli inte sen Det spelar ingen roll om det är en provperiod eller bara en fredag, där alla gör mål och kommer till 11. En annan sak är viktig: punktlighet är en egenskap hos ett proffs som tjänar extra poäng direkt. Och extrapoäng för en person utan erfarenhet skadar väl inte? Försök att inte komma för sent och lämna jobbet ärligt efter att ha jobbat 8 ​​timmar. Missbruka inte uppskattningar Tyvärr är detta en väldigt vanlig bild som jag en gång hamnat i förr i tiden. Utvecklaren satte sig 8-16 timmar för att slutföra uppgiften och slutförde den oväntat på 3-4 timmar. Resten av timmarna ägnar han åt sin personliga tid i form av bordtennis, som var fallet med mig, eller tittar på youtube och annan underhållning. Ur juridisk synvinkel verkar de ha kommit överens, men ur mänsklig synvinkel berövar du dig själv mycket viktiga saker: 1. Du står stilla, då du fyller extra tid med onödiga saker; 2. Du utvecklas inte för att du inte informerar ledningen om dina snabba framsteg, ingen vet att du slutför uppgifter snabbare än förväntat; 3. Du börjar hela tiden överskatta den genomsnittliga tiden för värden, det är bara en väg till ingenstans. Avsätt tid för studier. Chansen att hamna bakom motorn är orealistiskt hög, så tänk på att teknik och nya versioner utvecklas väldigt snabbt. Prenumerera på våra dagars Java-evangelister, läs Java-sammandrag och bli allmänt intresserad, lär dig nya saker. Detta hjälper dig att behålla ditt varumärke och utvecklas. Hjälpa andra Var inte rädd för att hjälpa andra, även om de är lika gröna som du. För det första kommer du att avsevärt stärka din kunskap, och för det andra kommer du att få respekt i andras ögon, och de kommer att hjälpa dig samtidigt. I en sådan miljö föds de bästa teamen, liksom mycket snabb teknisk och personlig tillväxt. Börja med sporter. Har en hobby Nej seriöst. Människor som är involverade i sport ser och mår inte bara bättre, utan även deras hjärnfunktion är på topp! Skolios, ländryggen, övervikt, olika problem med inre organ – dygnet runt-samlingar vid datorn, även utanför jobbet, bidrar till detta. Om du inte kan idrotta (vilket jag tvivlar på), använd små life hacks: arbeta stående då och då, lämna två stopp tidigt och gå till jobbet. Och ja, gå mer. Det finns också en risk för utbrändhet om programmering tar mycket mer av din tid än 40 timmar i veckan. Personliga hobbyer kommer till undsättning - till exempel fotografering, musik etc. Avsätt regelbunden tid för andlighet. Balans i ditt personliga liv När en flickvän/fru säger: "laptop eller jag", måste du seriöst fundera över vilken plats programmering tar i ditt liv. Å andra sidan, när du börjar din resa inom IT måste du tydligt förklara för din själsfrände att nu behöver du plugga mycket för att uppnå mer. Jag hoppas att de förstår. Tja, du försöker balansera och fördela din tid korrekt. går utöver Var proaktiv, om du till exempel känner att du kan dela kunskap eller har intressanta ämnen, varför inte anordna små kurser inom företaget för andra? Var inte rädd för att bidra till stora projekt med öppen källkod om du vet hur du kan hjälpa till. Om du vill skriva ett spel, socialt projekt eller annan idé – gör det, gör det, gör det! Stå inte stilla, leta alltid efter sätt där du kan utvecklas. Var konkurrenskraftig Håll utkik efter nya trender, håll dig uppdaterad med trenderna som händer i Java-communityt. Det kommer till exempel inte att vara överflödigt om du då och då övervakar Java-vakanser på DOU, men inte för att komma bort från jobbet, utan för att veta vilka teknologier som fortfarande är relevanta och som sakta försvinner från marknaden. . Försök också att ta kurser om Coursera, Udacity, etc., utforska nya horisonter. Och även engelska: försök att titta på dina favoritfilmer/TV-program i originalet med undertexter för att förbättra dina konversationsförmåga, ladda ner ett par intressanta applikationer för att lära dig språket (till exempel LinguaLeo), och i slutändan gå till kurser .

    Slutsats

    Nåväl, mitt lilla DOU-projekt närmar sig sitt slut. Kära vänner, jag önskar er uppriktigt att få ett jobb och jag hoppas att allt som jag har beskrivit i dessa 7 artiklar kommer att vara en värdefull guide för er, även för dem som redan arbetar som Java-utvecklare. Kommande juniorer, kom ihåg att ingenting är omöjligt, och om du verkligen trycker på kommer du definitivt att lyckas. Jag vill att du äntligen bestämmer dig för om detta är ditt eller inte, utvecklar en detaljerad träningsplan och följer den lugnt. Bli inte upprörd om du får tystnad i gengäld - allt detta är tillfälligt, huvudsaken är att tro och i inget fall gå vilse, utan studera, studera och studera igen. Jag skulle vilja uttrycka min djupa tacksamhet till DOU-teamet för att de redigerade en stor mängd material och för att de gav mig bästa sändningstid på måndagar. DOU är en cool community som har upphört att bara vara en sida för ukrainska IT-folk. Jag skulle också vilja säga tack till alla kommentatorer som läste mina artiklar diagonalt och tog fraser ur sitt sammanhang. Artiklar skulle inte se så intressanta ut utan dig :) Må Kraften vara med dig!

    För dem som hör ordet Java Core för första gången är dessa de grundläggande grunderna för språket. Med denna kunskap kan du redan nu tryggt gå på praktik/praktik. Dessa frågor hjälper dig att fräscha upp dina kunskaper innan intervjun, eller lära dig något nytt själv. För praktiska färdigheter, studera på.

      Hur skapar man ett oföränderligt objekt i Java? Lista alla fördelar

      En oföränderlig klass är en klass vars tillstånd inte kan ändras efter att den har skapats. Här är tillståndet för ett objekt i huvudsak de värden som är lagrade i en instans av klassen, oavsett om de är primitiva typer eller referenstyper.

      För att göra en klass oföränderlig måste följande villkor vara uppfyllda:

      1. Ange inte sättare eller metoder som modifierar fält eller objekt som refererar till fält. Setters innebär att ett objekts tillstånd ändras, vilket är vad vi vill undvika här.
      2. Gör alla fält slutgiltiga och privata. Fält som betecknas som privata kommer inte att vara tillgängliga utanför klassen, och genom att utse dem som slutgiltiga ser du till att du inte ändrar dem ens av misstag.
      3. Tillåt inte underklasser att åsidosätta metoder. Det enklaste sättet att göra detta är att förklara klassen som slutgiltig. Slutförda klasser i Java kan inte åsidosättas.
      4. Kom alltid ihåg att dina variabla instanser kan vara antingen föränderliga eller oföränderliga. Definiera dem och returnera nya objekt med kopierat innehåll för alla föränderliga objekt (referenstyper). Oföränderliga variabler (primitiva typer) kan säkert returneras utan ytterligare ansträngning.

      Du måste också komma ihåg de efterföljande fördelarna med oföränderliga klasser. Du kan behöva dem för en intervju. Oföränderliga klasser:

      • lätt att designa, testa och använda
      • är automatiskt trådsäkra och har inga synkroniseringsproblem
      • kräver ingen kopieringskonstruktör
      • låter dig "lata initialisera" hashkoden och cachelagra returvärdet
      • kräver inte säker kopia när den används som ett fält
      • gör bra kartnycklar och set-element (dessa objekt ska inte ändra tillstånd när de finns i samlingen)
      • gör sin klass permanent genom att skapa den en gång, och den behöver inte kontrolleras igen
      • alltid ha "misslyckande atomicitet", en term som myntats av Joshua Bloch: om ett oföränderligt objekt ger ett undantag, kommer det aldrig att lämnas i ett oönskat eller odefinierat tillstånd.

      Titta på exemplet i det här inlägget.

      Java-specifikationen säger att allt i Java skickas av värde. Det finns inget sådant som "pass by reference" i Java. Dessa villkor är associerade med att anropa metoder och skicka variabler som metodparametrar. Tja, primitiva typer passeras alltid av värde utan någon förvirring. Men begreppet bör förstås i sammanhanget av en metodparameter av komplexa typer.


      I exemplet ovan kopieras adressbitarna för den första instansen till en annan referensvariabel, vilket gör att båda referenserna pekar på samma minnesplats där objektet är lagrat. Kom ihåg att genom att tilldela null till den andra referensen kommer du inte att tilldela null till den första referensen. Men en förändring i tillståndet för ett objekt med en refererad variabel kommer också att återspeglas i den andra referensen.

      Vad är användningen av finalblocket? Garanterar detta block exekvering av dess kod? När kallas inte finalblocket?

      Finally-blocket anropas alltid om försöksblocket finns. Detta säkerställer att finalblocket anropas även om ett oväntat undantag inträffar. Men slutligen är det mer användbart än att bara hantera undantag - detta block låter dig rensa upp kod som av misstag har kringgått retur, fortsätt eller bryts. Att placera rensningskod i ett finalblock är alltid god praxis, även när inga undantag förväntas.

      Om den virtuella maskinen avslutas medan försöks- eller fångstblocket körs, kommer det slutliga blocket inte att exekveras. På liknande sätt, om en tråd avbryts eller avbryts medan ett försök eller fånga block körs, kommer finalblocket inte att exekveras även om programmet fortfarande körs.

      Varför finns det två Date-klasser, en i java.util-paketet och den andra i java.sql?

      java.util.Date representerar ett datum och en tid, medan java.sql.Date endast representerar ett datum. Komplementet till java.sql.Date är klassen java.sql.Time, som endast representerar tid.

      Klassen java.sql.Date är en underklass (tillägg) av klassen java.util.Date. Så vad har förändrats i java.sql.Date:

      • toString() producerar en annan strängrepresentation: åååå-mm-dd
      • den statiska metoden valueOf(String) skapar ett datum från en sträng med ovanstående representation
      • exkluderade getters och sättare i timmar, minuter och sekunder

      Klassen java.sql.Date används i JDBC och är designad för att inte ha en tidskomponent, dvs timmar, minuter, sekunder och millisekunder måste vara noll...men detta krävs inte av klassen.

      Förklara markörgränssnitt.

      Markörgränssnittsmönstret är ett datavetenskapligt designmönster som används av programmeringsspråk som tillhandahålla information om objekt vid körning. Detta tillhandahåller ett sätt att associera klassmetadata där språket inte har något uttryckligt stöd för sådan metadata. Java använder gränssnitt för detta utan att ange metoder.

      Ett bra exempel på att använda ett markörgränssnitt i Java är gränssnittet Serializable. Klassen implementerar detta gränssnitt för att indikera att dess icke-transienta data kan skrivas till en byteström eller ett filsystem.

      Huvudproblemet Ett markörgränssnitt är att ett gränssnitt definierar en konvention för klasser som implementerar den, och den konventionen ärvs av alla underklasser. Det betyder att du inte kan "avrealisera" token. I exemplet ovan, om du skapar en underklass som du inte vill ska serialiseras (kanske för att den är i ett övergående tillstånd), måste du ta till uttryckligen att kasta en NotSerializableException .

      Varför deklareras main()-metoden som public static void?

      Varför offentligt? Huvudmetoden har public access modifier, så den kan nås överallt och av alla objekt som vill använda den här metoden för att starta applikationen. Här säger jag inte att JDK/JRE har en liknande anledning, eftersom java.exe eller javaw.exe (för Windows) använder Java Native Interface (JNI)-anrop för att köra metoden, så de kan anropa den ändå oavsett åtkomstmodifierare .

      Varför statisk? Låt oss anta att vår huvudmetod inte är statisk. Nu, för att anropa vilken metod som helst, behöver du en instans av klassen. Höger? Java låter dig ha överbelastade konstruktörer, det vet vi alla. Vilken ska då användas, och var kommer parametrarna för den överbelastade konstruktorn ifrån?

      Varför ogiltig? Det finns ingen användning för returvärdet i den virtuella maskinen som faktiskt anropar denna metod. Det enda applikationen vill berätta för anropsprocessen är en normal eller onormal avslutning. Detta är redan möjligt med System.exit(int) . Ett värde som inte är noll innebär onormal avslutning, annars är allt bra.

      Vad är skillnaden mellan att skapa en sträng som new() och en bokstavlig (med dubbla citattecken)?

      När vi skapar en sträng med new() skapas den i högen och läggs även till i strängpoolen, medan strängen som skapas med bokstaven bara skapas i strängpoolen.

      Du behöver veta mer om strängpoolskonceptet för att svara på denna eller liknande frågor. Mitt råd är att lära dig String-klassen och stringpoolen väl.

      Hur fungerar metoden substring() för klassen String?

      Liksom andra programmeringsspråk är strängar i Java teckensekvenser. Den här klassen är mer som en verktygsklass för att arbeta med den här sekvensen. Teckensekvensen tillhandahålls av följande variabel:

      /** Värdet används för teckenlagring. */ /** Värdet används för att lagra tecken */ privat slutligt char-värde ; Följande variabler används för att komma åt denna array i olika scenarier /** Offset är det första indexet för lagringen som används. */ /** Offset är det första indexet för lagringen som ska användas. */ privat slutlig int offset; /** Antalet är antalet tecken i strängen. */ /** Antalet är antalet tecken i strängen. */ privat slutlig int count;

      Varje gång vi skapar en delsträng från en befintlig stränginstans, ställer metoden substring() bara in offset- och räkningsvariablerna till nya värden. Den interna teckenarrayen ändras inte. Detta är en möjlig källa till en minnesläcka om substring()-metoden används slarvigt:

      Det ursprungliga värdet på värdet ändras inte. Så om du skapar en sträng på 10 000 tecken och skapar 100 delsträngar med 5-10 tecken vardera, kommer alla 101 objekt att innehålla samma teckenuppsättning med 10 000 tecken. Detta är utan tvekan ett slöseri med minne.

      Detta kan undvikas genom att ändra koden så här:

      ersätt original.substring(beginIndex) med ny String(original.substring(beginIndex)) , där original är den ursprungliga strängen.

      Förklara hur HashMap fungerar. Hur löses problemet med dubbletter?

      De flesta av er kommer säkert att hålla med om att HashMap är det mest favoritintervjuämnet för tillfället. Om någon ber mig att berätta "Hur fungerar HashMap?", kommer jag helt enkelt att svara: "Med principen om hash". Så enkelt som det är.

      Så hashing är i huvudsak ett sätt att tilldela en unik kod till valfri variabel/objekt efter att ha tillämpat valfri formel/algoritm på dess egenskaper.

      Definitionen av en karta är: "Ett objekt som binder nycklar till värden." Väldigt enkelt, eller hur? Så, HashMap innehåller sin egen inre klass Entry , som ser ut så här:

      statisk klass Entry implements Karta . Inträde(slutlig K-nyckel; V-värde; Entry next; final int hash; …//Mer kod kommer här)

      När någon försöker lägga in ett nyckel-värdepar i en HashMap händer följande:

      • Först och främst kontrolleras nyckelobjektet mot null . Om nyckeln är noll, lagras värdet i positionstabellen. Eftersom hashkoden för null alltid är 0.
      • Sedan är nästa steg att beräkna hashvärdet genom att anropa dess hashCode()-metod på nyckelvariabeln. Denna hash används för att beräkna indexet i arrayen för att hålla Entry-objektet. JDK-utvecklarna var väl medvetna om att hashCode()-metoden kunde vara dåligt skriven och kunde returnera ett mycket stort eller mycket litet värde. För att lösa detta problem introducerade de en annan hash()-metod och skickade objektets hashkod till denna metod för att casta det värdet till storleksintervallet för arrayens index.
      • Metoden indexFor(hash, table.length) anropas nu för att beräkna den exakta positionen för att lagra Entry-objektet.
      • Nu huvuddelen. Som vi vet kan två olika objekt ha samma hashkodvärde, hur kan två olika objekt lagras på samma plats i ett arkiv [kallad papperskorg]?

      Svaret är LinkedList. Om du kommer ihåg har Entry-klassen en "next"-egenskap. Denna egenskap pekar alltid på nästa objekt i kedjan. Detta beteende är mycket likt LinkedList.

      Så, vid hashkodmatchningar, lagras Entry-objekt i form av LinkedList . När en post måste placeras på ett visst index, kontrollerar HashMap om en annan post finns på den platsen? Om det inte finns någon post där, kommer vårt objekt att sparas på denna plats.

      Om det redan finns ett annat objekt i vårt index, kontrolleras dess nästa fält. Om det är null blir vårt objekt nästa nod i LinkedList . Om nästa inte är null, upprepas denna procedur tills ett null nästa fält hittas.

      Vad händer om vi lägger till ytterligare ett nyckelvärde lika med det vi lade till tidigare? Det är logiskt att det ska ersätta det gamla värdet. Hur går det till? Efter att ha bestämt positionsindexet för Entry-objektet, genom att iterera över LinkedList som finns i vårt index, anropar HashMap metoden equals() på nyckelvärdet för varje Entry-objekt. Alla dessa Entry-objekt i LinkedList har samma hashkodvärde, men metoden equals() kommer att testa för sann likhet. Om nyckel. lika med (k) vilja Sann, då kommer båda att behandlas som samma objekt. Detta gör att endast värdeobjektet inuti Entry-objektet ersätts.

      Således säkerställer HashMap nycklarnas unika karaktär.

      Skillnader mellan gränssnitt och abstrakta klasser?

      Detta är en mycket vanlig fråga om du intervjuar för en programmerare på juniornivå. De viktigaste skillnaderna listas nedan:

      • I Java-gränssnitt är variabler a priori final . Abstrakta klasser kan innehålla icke-slutliga variabler.
      • Ett gränssnitt i Java kan definitivt inte ha en implementering. En abstrakt klass kan ha instanser av metoder som implementerar basbeteendet.
      • Gränssnittsmedlemmar måste vara offentliga. En abstrakt klass kan ha åtkomstmodifierare av alla slag.
      • Ett gränssnitt måste implementeras med nyckelordet implements. En abstrakt klass måste utökas med ett nyckelord sträcker sig.
      • I Java kan en klass implementera många gränssnitt, men kan bara ärva från en abstrakt klass.
      • Ett gränssnitt är helt abstrakt och kan inte instansieras. En abstrakt klass kan inte heller ha instanser av klassen, men kan anropas om metoden main() finns.
      • En abstrakt klass är något snabbare än ett gränssnitt eftersom ett gränssnitt förväntar sig en uppslagning innan det anropar någon åsidosatt metod i Java. I de flesta fall är detta en mindre skillnad, men om du skriver en tidskritisk ansökan måste du ta hänsyn till detta faktum också.
    1. När åsidosätter du metoderna hashCode() och equals()?

      Metoderna hashCode() och equals() är definierade i klassen Object, som är den överordnade klassen för alla Java-objekt. Av denna anledning ärver alla Java-objekt basimplementeringen av dessa metoder.

      Metoden hashCode() används för att få ett unikt heltalsvärde för ett givet objekt. Detta värde används för att bestämma platsen för korgen när objektet behöver lagras i en datastruktur som en HashTable. Som standard returnerar metoden hashCode() en heltalsrepresentation av minnesadressen där objektet är lagrat.

      Metoden equals() används, som namnet antyder, för enkel objektekvivalens. Den grundläggande implementeringen av metoden är att kontrollera referenserna för de två objekten för att se om de är likvärdiga.

      Observera att det vanligtvis är nödvändigt att åsidosätta hashCode()-metoden närhelst metoden equals() åsidosätts. Detta är nödvändigt för att stödja den allmänna konventionen för hashCode-metoden, som säger att lika objekt måste ha lika hashkoder.

      Metoden equals() måste bestämma likheten i relationen (den måste vara rekursiv, symmetrisk och transitiv). Dessutom måste den vara beständig (om objektet inte har ändrats måste metoden returnera samma värde). O.equals(null) ska också alltid returnera falsk.

      hashCode() måste också vara stabil (om objektet inte har ändrats under villkoren för metoden equals() måste det fortsätta att returnera samma värde.

      Relationen mellan de två metoderna är: alltid om a.equals(b) måste a.hashCode() vara samma som b.hashCode() .

    Lycka till med dina studier!! Artikelförfattare Lokesh Gupta Originalartikel Länkar till andra delar: