JavaRush /Java Blog /Random-TK /Java dörediji üçin geçirilen söhbetdeşliklerden soraglary...

Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi. 9-njy bölüm

Toparda çap edildi
Feýerwerk! Programmist bolmak aňsat däl. Yzygiderli öwrenmeli, elmydama täze bir zat öwrenmeli. Emma, ​​beýleki işlerde bolşy ýaly, iň kyn zat başlamak, maksadyňyza ilkinji ädim ätmekdir. Bu sahypada oturyp, bu makalany okaýandygyňyz üçin, birinji ädimi tamamladyňyz. Diýmek, indi ýolda haýallaşman ýa-da öçürmän maksatly maksadyňyza tarap hereket etmeli. Dogry düşünýän bolsam, maksadyňyz Java dörediji bolmak ýa-da bir bolsaňyz bilimiňizi artdyrmak. Şeýle bolsa, dogry ýerdediňiz, sebäbi 250+ Java dörediji söhbetdeşlik soraglarynyň giň sanawyny seljermegi dowam etdireris. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  9-njy bölümDowam edeliň!

Kolleksiýalar

84. Iteratorlar we olaryň ulanylyşy barada bize aýdyň

Kolleksiýalar, Java döredijiler bilen geçirilen islendik söhbetdeşlikde iň halanýan mowzuklaryň biri we kolleksiýa iýerarhiýasy barada aýdylanda, dalaşgärler köplenç Kolleksiýa interfeýsinden başlaýandygyny aýdýarlar . Thisöne bu dogry däl, sebäbi bu interfeýsiň üstünde başga biri bar - Iterable . Bu interfeýs , häzirki kolleksiýa üçin Iterator obýektini çagyrmaga mümkinçilik berýän iterator () usulyny görkezýär. Bu Iterator obýekti näme ? Iterator , ulanyjynyň belli bir kolleksiýanyň ýerine ýetirilişini bilmezden, kolleksiýanyň üstünden geçmek we elementleriň üstünden gaýtalamak ukybyny üpjün edýän obýektdir. .Agny, bu ýygyndydaky elementlere haýsydyr bir görkeziji bolup, bolşy ýaly, içindäki belli bir ýere seredýär. Iteratoryň aşakdaky usullary bar:
  • hasNext () - görkezijiden soň ýerleşýän bir element bar bolsa (bu usul kolleksiýanyň soňuna ýetilendigini anyklamaga mümkinçilik berýär);
  • indiki () - görkezijiden soň indiki elementi yzyna berýär. Eger ýok bolsa, NoSuchElementException zyňylýar . Thisagny, bu usuly ulanmazdan ozal elementiň bardygyna göz ýetirmek has gowudyr - hasNext () ulanyp ;
  • aýyrmak () - indiki () usuly bilen ýygyndydan alnan iň soňky elementi aýyrýar . Indiki () aýyrmak () çagyrylmazdan ozal çagyrylmadyk bolsa , kadadan çykma - IllegalStateException ;
  • forEachRemaining (<Consumer>) - kolleksiýanyň her elementi bilen geçirilen hereketi ýerine ýetirýär (usul Java 8-de peýda boldy).
Sanawyň üsti bilen gaýtalanmagyň we ara alnyp maslahatlaşylan iterator usullaryny ulanyp, ähli elementlerini aýyrmagyň kiçijik mysaly:
List<String> list = new ArrayList<>();
list.add("Hello ");
list.add("World, ");
list.add("It's ");
list.add("Amigo!");
Iterator iterator = list.iterator();

while(iterator.hasNext()) {
   iterator.next();
   iterator.remove();
}
System.out.println(list.size());
Konsol görkeziler:
0
Bu elementleriň aýrylmagynyň üstünlikli bolandygyny aňladýar. Iteratorymyz bolansoň, ähli elementleri ekrana çap etmegiň usulyny ulanyp bilerdik:
iterator.forEachRemaining(x -> System.out.print(x));
Thisöne şondan soň iterator mundan beýläk ulanmak üçin ýaramsyz bolar, sebäbi tutuş sanawy geçerdi we yzygiderli iteratoryň yzyna yzarlamak usuly ýok. Bu ýerde ýuwaş-ýuwaşdan LinkedList-e , ýagny, listIterator () usulyna ýakynlaşýarys , bu döwrebaplaşdyrylan iterator görnüşini - ListIterator . Adaty (standart) iterator usullaryndan başga-da goşmaça usullary bar:
  • goş (<Element>) - sanawa täze element girizýär;
  • hasPrevious () - görkezijiniň öňünde ýerleşýän bir element bar bolsa (öňki elementiň bardygyny ýa-da ýokdugyny) görkezýär ;
  • nextIndex () - görkezijiden soň indiki elementiň sanawynda indeksini görkezýär;
  • öňki () - öňki elementi görkezýär (görkezijä çenli);
  • previousIndex () - öňki elementiň indeksini görkezýär;
  • set (<Element>) - Indiki () ýa-da öňki () usullar bilen yzyna gaýtarylan soňky elementi çalyşýar .
Görşüňiz ýaly, bu iteratoryň işleýşi has gyzykly: iki tarapa hereket etmäge mümkinçilik berýär we elementler bilen işleýän wagtyňyz elleriňizi boşadýar. Mundan başga-da, adamlar iteratorlar hakda gürlänlerinde, käwagt nagşyň özüni aňladýarlar. Kynçylyk çekmezlik we bu barada ynandyryjy gürlemek üçin Iterator nagşy hakda bu makalany okaň . Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  9-njy bölüm

85. Java kolleksiýa çarçuwasyndaky ýygnamak iýerarhiýasy näme?

Java-da iki kolleksiýa iýerarhiýasy bar. Birinji iýerarhiýa, aşakdaky gurluş bilen Kolleksiýa iýerarhiýasynyň özi: Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  9-njy bölümÖz gezeginde aşakdaky bölümlere bölünýär:
  • Set , şeýle maglumat gurluşyny tertipsiz üýtgeşik (gaýtalanmaýan) elementleri öz içine alýan interfeýsdir . Interfeýsde adaty ýerine ýetirişler bar - TreeSet , HashSet we LinkedHashSet .
  • Sanaw, obýektleriň tertipli yzygiderliligini saklaýan maglumat gurluşyny beýan edýän interfeýsdir. Sanawdaky ýagdaýlar, bu ýygyndydaky indeksleri bilen girizilip we pozulyp bilner (bir massiw bilen meňzeş, ýöne dinamiki ölçegi bilen). Interfeýsde adaty ýerine ýetirişler bar - ArrayList , Vektor ( könelişen we aslynda ulanylmaýar ) we LinkedList .
  • Nobat , elementleri FIFO - First In First Out düzgünine eýerýän nobat görnüşinde saklaýan maglumat gurluşyny suratlandyrýan interfeýsdir . Interfeýsde aşakdaky standart amallar bar: LinkedList (hawa, nobaty hem ýerine ýetirýär ) we PriotityQueue .
Kolleksiýalaryň ikinji iýerarhiýasy , aşakdaky gurluşy bolan Kartadyr: Bu ýygyndyda kiçi bölümlere bölünişik ýok ( Kartanyň iýerarhiýasynyň özi subkolýasiýa ýaly bir zat, ýöne aýratyn ýatýar) . Standart karta ýerine ýetirişleri Hashtable ( könelişen hasaplanýar), LinkedHashMap we TreeMap . Aslynda, Kolleksiýa barada soralanda , iki iýerarhiýa hem göz öňünde tutulýar. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  9-njy bölümJava dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  9-njy bölüm

86. “ArrayList” -iň içki gurluşy näme?

“ArrayList” massiwine meňzeýär, ýöne dinamiki giňeltmek ukyby bilen. Bu näme many berýär? Hakykat, “ArrayList” yzygiderli massiwiň üstünde işleýär, ýagny elementleri içerki massiwde saklaýar (deslapky ululygy 10 öýjük). Içerki massiw doly bolanda, ululygy formula bilen kesgitlenýän täze massiw döredilýär:
<размерТекущегоМассива> * 3 / 2  + 1
.Agny, massiwimiziň ululygy 10 bolsa, täzesiniň ululygy bolar: 10 * 3/2 + 1 = 16. Ondan soň, birinji (köne) massiwdäki ähli bahalar oňa ulanylýar. ýerli System.arraycopy () usuly we birinji massiw öçürildi. Aslynda, “ArrayList” -iň dinamiki giňelmegi şeýle amala aşyrylýar . Iň köp ulanylýan ArrayList usullaryna seredeliň : 1. goşuň (<Elelement>) - massiwiň soňuna bir element goşýar (iň soňky boş öýjüge) we ilki bu massiwde boşlugyň bardygyny barlaň. Ol ýerde ýok bolsa, elementleriň göçürilen täze massiw döredilýär. Bu amalyň logarifmiki çylşyrymlylygy O (1). Şuňa meňzeş usul bar - goşuň (<Index>, <Elelement>) . Sanawyň soňuna (massiwine) däl-de, argument hökmünde gelen indeks bilen belli bir öýjüge element goşýar. Bu ýagdaýda logarifmiki çylşyrymlylyk, goşulan ýerine baglylykda tapawutlanýar:
  • bu takmynan sanawyň başy bolan bolsa, logarifmiki çylşyrymlylyk O (N) -e ýakyn bolar, sebäbi täzesiniň sag tarapynda ýerleşýän ähli elementler bir öýjügi saga geçirmeli bolar;
  • element ortasyna girizilen bolsa - O (N / 2) sebäbi sanaw elementleriniň diňe ýarysyny bir öýjügi saga geçirmeli.
Thisagny, bu usulyň logarifmiki çylşyrymlylygy, elementiň nirede goýlandygyna baglylykda O (N) -den O (1) aralygynda üýtgeýär. 2. set (<Index>, <Elelement>) - sanawda görkezilen ýere bir element ýazýar. Şol ýagdaýda eýýäm bir element bar bolsa, ony gaýtadan ýazyň. Bu amalyň logarifmiki çylşyrymlylygy O (1), sebäbi hiç hili üýtgeşiklik ýok: diňe massiwdäki indeks boýunça gözlemek, ýadymyzda bolsa O (1) çylşyrymlylygy we elementi ýazmak. 3. aýyrmak (<index>) - içerki massiwdäki indeks boýunça bir elementi aýyrmak. Sanawyň soňundaky elementi pozanyňyzda, elementi pozanyňyzdan soň galan boşlugy ýapmak üçin ähli elementleri onuň sag tarapyna bir öýjügi çepe geçirmeli. Şonuň üçin logarifmiki çylşyrymlylyk elementiň ortasynda bolsa - O (N / 2) goşmak bilen (<Index>, <Elelement>) birmeňzeş bolar - sebäbi elementleriň ýarysyny çepe geçirmeli. Şoňa görä, başynda bolan bolsa - O (N). Bolýar, ahyrynda O (1) bolsa, hiç zady göçürmegiň zerurlygy ýok. Bu mowzuga has içgin öwrenmek isleýänler üçin bu baglanyşygy ArrayList synpynyň derňewi bilen bir makala goýaryn . Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  9-njy bölüm

87. “LinkedList” -iň içki gurluşy näme?

“ArrayList” içerki massiwde elementleri öz içine alýan bolsa , “LinkedList” goşa baglanyşyk sanawy görnüşinde. Diýmek, her elementde öňki elemente ( öňki ) we indiki elemente ( indiki ) baglanyşyk bar. Birinji elementiň öňki bilen baglanyşygy ýok (bu birinji), ýöne sanawyň başy hasaplanýar we LinkedList-iň gönüden -göni baglanyşygy bar. Iň soňky elementiň aslynda indiki elementi ýok, ol sanawyň guýrugy, şonuň üçin LinkedList-iň özünde göni baglanyşyk bar . Şonuň üçin sanawyň kellesine ýa-da guýrugyna girmegiň logarifmiki çylşyrymlylygy O (1). “ArrayList”Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 9 - 7 -de sanaw ulalansoň içerki massiw köpeldi, ýöne bu ýerde hemme zat has ýönekeý bolýar - element goşanyňyzda iki baglanyşyk üýtgeýär. Iň köp ulanylýan LinkedlList usullaryna seredeliň : 1. goşuň (<Elelement>) - sanawyň soňuna goşmak, ýagny. soňky elementden (5) soň täze elemente baglanyşyk goşular . Täze elementiň öňki elementi ýaly iň soňky (5) bilen baglanyşygy bolar . Şeýle amalyň logarifmiki çylşyrymlylygy O (1) bolar, sebäbi diňe soňky elemente baglanyşyk gerek we ýadyňyzda bolsa, guýrugyň LinkedList -den göni baglanyşygy bar we oňa girmegiň logarifmiki çylşyrymlylygy minimaldyr. 2. goşuň (<Index>, <Elelement>) - indeks boýunça element goşmak. Mysal üçin, sanawyň ortasyna bir element goşulanda, kelläniň we guýrugyň elementleri (iki tarapda) ilki islenýän ýer tapylýança gaýtalanýar. Üçünji bilen dördünjiniň arasynda bir element goýmak islesek (ýokardaky suratda), dogry ýer gözlänimizde, üçünji elementiň indiki baglanyşygy eýýäm täze birine yşarat eder. Täzesi üçin öňki baglanyşyk üçünji baglanyşygy görkezer. Şoňa laýyklykda dördünji elementiň - öňki - baglanyşygy eýýäm täze elemente, täze elementiň indiki baglanyşygy bolsa dördünji elemente yşarat eder: Bu usulyň logarifmiki çylşyrymlylygy täze elemente berlen görkezijä bagly bolar: Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 9 - 8
  • kellä ýa-da guýruga ýakyn bolsa, O (1) -e ýakynlaşar, sebäbi elementleriň üstünde gaýtalamak hökman bolmaz;
  • ortasyna ýakyn bolsa, O (N / 2) - kelläniň we guýrugyň elementleri zerur element tapylýança bir wagtda tertiplener.
3. set (<Index>, <Elelement>) - sanawda görkezilen ýere bir element ýazýar. Bu amalyň logarifmiki çylşyrymlylygy, elementiň kellä, guýruga ýa-da ortasyna näçe ýakynlygyna baglylykda O (1) -den O (N / 2) aralygynda bolar. 4. aýyrmak (<index>) - sanawdan bir elementi aýyrýar, aýrylmazdan ozal gelýän elementi ( öňki ) aýrylandan soň gelýän elemente salgylanýar . Tersine: öçürilenden soň gelýän element, pozulmazdan ozal gelýän elementi aňladýar ýaly: Netije indeks goşmak bilen ters gelýär ( goşuň (<Index>, <Elelement>) ). “LinkedList” -iň içki gurluşy barada has giňişleýin öwrenmek isleýänler üçin bu makalany okamagyňyzy maslahat berýärin .Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 9 - 9

88. “HashMap” -yň içki gurluşy näme?

Java dörediji bilen söhbetdeşlik geçirende iň meşhur soraglaryň biri bolsa gerek. HashMap v açar bahaly jübütler bilen işleýär . “HashMapv” -yň içinde nädip saklanýar ? “HashMap” -yň içinde köp sanly düwün bar:
Node<K,V>[] table
Düzgüne görä, massiwiň ululygy 16 bolup, elementler bilen doldurylanda her gezek iki esse köpelýär ( LOAD_FACTOR ýetilende - dolulygyň belli bir göterimi, adaty ýagdaýda 0,75 ). Her düwün açaryň, açaryň, bahanyň we indiki elementiň baglanyşygyny saklaýar: Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 9 - 10Aslynda, “indiki elemente baglanyşyk”, her elementiň baglanyşygy bolan ýeke-täk sanaw bilen iş salyşýandygymyzy aňladýar. indiki. Hagny, “HashMap” maglumatlary ýeke-täk baglanyşdyrylan sanawlarda saklaýar. Immediatelyöne derrew bellärin: tablisa massiwiniň bir öýjüginde birden köp elementden ybarat birmeňzeş baglanyşyk sanawyna baglanyşyk bar bolsa, bu gowy däl. Bu hadysa çaknyşyk diýilýär . Firstöne ilki bilen zatlar. Goýmak usuly bilen täze jübütiň nädip tygşytlanýandygyny göreliň . Ilki bilen açaryň hachCode () alynýar. Şonuň üçin hashmapyň dogry işlemegi üçin bu usulyň açar hökmünde ýokaşdyrylan sapaklaryny almaly. Soňra bu hash kody içerki usulda - hash () - tablisa massiwiniň ululygyndaky san kesgitlemek üçin ulanylýar . Ondan soň, alnan belgini ulanyp, tablisa massiwiniň belli bir öýjügine girilýär . Bu ýerde iki ýagdaý bar:
  1. Öýjük boş - täze düwün bahasy içinde saklanýar .
  2. Öýjük boş däl - düwmeleriň bahasy deňeşdirilýär. Deň bolsa, täze düwün bahasy köne ýazýar, deň däl bolsa, indiki elemente girýär we açary bilen deňeşdirilýär ... we ş.m. täze baha köne biriniň üstünden ýazylýança ýa-da soňuna ýetýänçä we ş.m. baglanyşdyrylan sanaw we iň soňky element hökmünde şol ýerde saklanar.
Düwme ( almak (<key>) usuly ) elementini gözläniňizde, açaryň hashCode hasaplanýar, soňra hash () ulanyp, massiwdäki bahasy hasaplanýar we netijede belgini ulanyp, tablisa massiwiniň öýjügi tapylýar. Gözleg, düwünleri sanamak we islenýän düwüniň açaryny häzirki açar bilen deňeşdirmek arkaly amala aşyrylýar. Iň oňat ýagdaýda Kartadaky amallar O (1) algoritmiki çylşyrymlylygyna eýe, sebäbi olar bir massiwde bolýar we ýadyňyzda bolsa, elementleriň sanyna garamazdan, bir massiwdäki amallar O (1) çylşyrymlylygyna eýe. Emma bu ideal. Haçan-da ulanylýan massiw öýjügi boş bolmasa (2) we ol ýerde eýýäm käbir düwünler bar bolsa, algoritmiki çylşyrymlylyk çyzykly O (N) öwrülýär, sebäbi indi dogry ýer tapmazdan ozal elementleriň üstünden gaýtalamak zerur. Muny ýatlap bilemok: Java 8-den başlap, ýeke-täk baglanyşdyrylan sanaw düwüninde 8-den gowrak element (çaknyşyk) bar bolsa, ikilik agaja öwrülýär. Bu ýagdaýda algoritmiki çylşyrymlylyk indi O (N) bolmaz, O (log (N)) - bu başga mesele, şeýlemi? Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 9 - 11“HashMap” uly mowzuk, adamlar söhbetdeşliklerde bu hakda sorag bermegi halaýarlar. Şonuň üçin size jikme-jik düşünmegiňizi maslahat berýärin (dişleriňizden çykar ýaly). Şahsy tarapdan, HashMap soraglary bolmazdan söhbetdeşlik geçirmedim . Bu makalada HashMap- a çuňňur çümüp bilersiňiz . Bularyň hemmesi şu gün dowam etdirilmeli ... Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 9 - 12
Tapgyryň beýleki materiallary:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION