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. 15-nji bölüm

Toparda çap edildi
Salam Salam! Java dörediji näçeräk bilmeli? Bu mesele boýunça uzak wagtlap jedel edip bilersiňiz, ýöne hakykat, söhbetdeşlikde teoriýa boýunça doly derejede durmuşa geçiriljekdigiňizdir. Hatda işiňizde ulanmaga mümkinçiligiňiz bolmaz ýaly bilim ugurlarynda-da. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  15-nji bölümGaraz, täze öwrenen bolsaň, teoretiki bilimleriňe çynlakaý serediler. Entek tejribe we uly üstünlikler bolmansoň, galan zat bilim bazasynyň berkligini barlamakdyr. Bu gün Java döredijiler üçin iň meşhur söhbetdeşlik soraglaryny gözden geçirip, bu binýady berkitmegi dowam etdireris. Uçalyň!

Java Core

9. Java-da statiki we dinamiki baglanyşygyň arasynda näme tapawut bar?

Bu soraga statiki we dinamiki polimorfizm hakda 18-nji soragda eýýäm jogap berdim , okamagyňyzy maslahat berýärin.

10. Şahsy ýa-da goralýan üýtgeýänleri interfeýsde ulanmak mümkinmi?

Nook. Sebäbi interfeýsi yglan edeniňizde, Java düzüjisi interfeýs usullaryndan öň köpçülige we abstrakt açar sözleri we maglumatlar agzalarynyň öňünde köpçülige , statiki we soňky açar sözleri awtomatiki goşýar. Aslynda, şahsy ýa-da goragly goşsaňyz , gapma-garşylyk ýüze çykar we düzüji giriş modifikatoryndan: “Modifier” <saýlanan modifikator> 'bu ýerde rugsat berilmeýär' habary bilen zeýrener. Näme üçin düzüjiniň köpçülige açyk , statiki we gutarnykly goşýandygy? interfeýsdäki üýtgeýjiler? Geliň, muny anyklalyň:
  • köpçülik - interfeýs müşderä obýekt bilen täsirleşmäge mümkinçilik berýär. Üýtgeýjiler köpçülige açyk bolmadyk bolsa, müşderiler olara girip bilmezdiler.
  • statik - interfeýsler döredilip bilinmez (has dogrusy, olaryň obýektleri), şonuň üçin üýtgeýji statikdir.
  • jemleýji - interfeýs 100% abstraksiýa ýetmek üçin ulanylýandygy sebäpli, üýtgeýjiniň soňky görnüşi bar (we üýtgedilmez).

11. “Classloader” näme we näme üçin ulanylýar?

Classloader - ýa-da Class Loader - Java synplaryny ýüklemegi üpjün edýär. Has takygy, ýüklemek onuň nesilleri - belli bir synp ýükleýjileri tarapyndan üpjün edilýär, sebäbi “ClassLoader” -iň özi abstrakt. Her gezek .class faýly ýüklenende, mysal üçin, degişli synpyň konstruktoryna ýa-da statiki usulyna jaň edensoň, bu hereket ClassLoader synpynyň nesillerinden biri tarapyndan amala aşyrylýar . Mirasçylaryň üç görnüşi bar:
  1. “Bootstrap ClassLoader” JVM derejesinde amala aşyrylýan we JVM ýadrosynyň bir bölegi bolup, ýerli kodda ýazylanlygy sebäpli, iş wagtyndan hiç hili seslenme ýok. Bu ýükleýji, beýleki ClassLoader mysallarynyň ene-atasy bolup hyzmat edýär.

    JDK içerki synplaryny ýüklemek üçin esasan rt.jar we $ JAVA_HOME / jre / lib katalogynda ýerleşýän beýleki esasy kitaphanalar ýüklenýär . Dürli platformalarda bu synp ýükleýjiniň dürli ýerine ýetirişleri bolup biler.

  2. “Extension Classloader” esasy ýükleýji synpyň neslinden bolan giňeldiji ýükleýji. Adaty Java esasy synplarynyň giňeldilmegini ýükleýär. JDK giňeltmeler katalogyndan, adatça $ JAVA_HOME / lib / ext ýa-da java.ext.dirs ulgam eýeçiliginde agzalan başga bir katalogdan ýüklenýär (bu opsiýa giňeltmeleriň ýüklenmegine gözegçilik etmek üçin ulanylyp bilner).

  3. System ClassLoader , JRE derejesinde ýerine ýetirilen ulgam ýükleýjisi bolup, ähli programma derejesindäki synplary JVM-e ýüklemek barada alada edýär. Synp gurşawy üýtgeýän -classpath ýa -cp buýruk setiri opsiýasynda tapylan faýllary ýükleýär .

Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  15-nji bölümSynp ýükleýjiler Java iş wagtynyň bir bölegidir. JVM synp talap eden pursatynda, synp ýükleýjisi synpy tapmaga we synpyň doly hünärli adyny ulanyp, iş wagtyna synp kesgitlemesini ýüklemäge synanyşýar. Java.lang.ClassLoader.loadClass () usuly, iş wagty synp kesgitlemesini ýüklemek üçin jogapkärdir. Doly adyna esaslanyp synp ýüklemäge synanyşýar. Synp entek ýüklenmedik bolsa, haýyşy esasy synp ýükleýjisine berýär. Bu proses gaýtalanýar we şuňa meňzeýär:
  1. System Classloader synpy keş görnüşinde tapmaga synanyşýar.

    • 1.1. Synp tapylsa, ýüklemek üstünlikli tamamlanýar.

    • 1.2. Eger synp tapylmasa, ýüklemek “Extension Classloader” -e berilýär.

  2. Extension Classloader synpy öz keşinde tapmaga synanyşýar.

    • 2.1. Synp tapylsa, üstünlikli tamamlanýar.

    • 2.2. Eger synp tapylmasa, ýüklemek “Bootstrap Classloader” -e berilýär.

  3. “Bootstrap Classloader” synpy öz keşinde tapmaga synanyşýar.

    • 3.1. Synp tapylsa, ýüklemek üstünlikli tamamlanýar.

    • 3.2. Synp tapylmasa, esasy Bootstrap Classloader ony ýüklemäge synanyşar.

  4. Adingüklenýän bolsa:

    • 4.1. Üstünlikli - synpy ýüklemek tamamlandy.

    • 4.2. Eger şowsuz bolsa, dolandyryş “Extension Classloader” -e geçirilýär.

  5. 5. “Extension Classloader” synpy ýüklemäge synanyşýar, ýüklenýän bolsa:

    • 5.1. Üstünlikli - synpy ýüklemek tamamlandy.

    • 5.2. Üstünlikli bolmasa, gözegçilik “System Classloader” -e geçirilýär.

  6. 6. “System Classloader” synpy ýüklemäge synanyşýar, ýüklenýän bolsa:

    • 6.1. Üstünlikli - synpy ýüklemek tamamlandy.

    • 6.2. Üstünlikli geçmedi - kadadan çykma döredilýär - ClassNotFoundException.

Synp ýükleýänleriň mowzugy gaty giň we ünsden düşürilmeli däldir. Has jikme-jik tanyşmak üçin size bu makalany okamagyňyzy maslahat berýärin , uzaga çekmeris we dowam etmeris.

12. Iş wagtyndaky maglumatlar sebitleri näme?

Iş wagtyndaky maglumatlar aralygy - JVM iş wagtynyň maglumat meýdanlary. JVM programma ýerine ýetirilende zerur iş wagtynyň käbir ýerlerini kesgitleýär. Olaryň käbiri JVM başlanda döredilýär. Beýlekiler bolsa sapak-ýerli bolup, diňe sapak döredilende döredilýär (we sapak ýok bolanda ýok edilýär). JVM iş wagtynyň maglumat meýdanlary şeýle: Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  15-nji bölüm
  • Kompýuter sanawy her sapak üçin ýerli bolup, sapagyň häzirki wagtda ýerine ýetirýän JVM görkezmesiniň salgysyny öz içine alýar.

  • JVM Stack ýerli üýtgeýänleri we wagtlaýyn netijeleri saklamak üçin ulanylýan ýat meýdanydyr. Her sapagyň öz aýratyn bölegi bar: sapak gutaran badyna bu taýak hem ýok edilýär. Üýşmegiň üstünde üýşmegiň artykmaçlygy öndürijidigini, üýşmegiň ammar masştabynda elbetde artykmaçlygynyň bardygyny bellemelidiris.

  • Nativeerli usul usuly - ýerli (Java däl) usullary ýerine ýetirmek üçin JVM stakasyna meňzeş maglumatlar elementlerini saklaýan her sapak üçin maglumat meýdany.

  • Toprak - ähli sapaklar tarapyndan iş wagtynda döredilen zatlary, synp meta-maglumatyny, massiwleri we ş.m. öz içine alýan dükan hökmünde ulanylýar. Bu meýdan JVM başlanda döredilýär we ýapylanda ýok edilýär.

  • Usul meýdany - Bu iş wagty ähli sapaklar üçin umumydyr we JVM başlanda döredilýär. Her synp üçin gurluşlary, iş wagtynyň yzygiderli howzy, konstruktorlaryň kody we usullary, usul maglumatlary we ş.m. saklaýar.

13. Üýtgemeýän zat näme?

Makalanyň bu bölüminde , 14 we 15-nji soraglarda bu soraga eýýäm jogap bar, şonuň üçin wagtyňyzy ýitirmän göz aýlaň.

14. Setir synpynyň aýratynlygy näme?

Derňewiň öňüsyrasynda Stringiň käbir aýratynlyklary barada birnäçe gezek gürleşdik (munuň üçin aýratyn bölüm bardy). Indi setiriň aýratynlyklaryny jemläliň :
  1. Java-da iň meşhur obýekt bolup, dürli maksat bilen ulanylýar. Ulanyş ýygylygy taýdan hatda başlangyç görnüşlerdenem pes däl.

  2. Bu klasyň obýekti täze açar söz ulanmazdan döredilip bilner - göni String str = “string” sitatasy arkaly; .

  3. Setir üýtgewsiz synpdyr : bu synpyň obýektini döredeniňizde, maglumatlary üýtgedip bolmaz (belli bir setire + “başga bir setir” goşsaňyz, täze, üçünji setir alarsyňyz). Setir synpynyň üýtgewsizligi ony sapagy ygtybarly edýär.

  4. Setir synpy gutarnykly ( iň soňky üýtgediji bar ), şonuň üçin miras alyp bolmaz.

  5. Setiriň öz setir basseýni , üýşmeleňdäki ýadyň meýdany, döredýän setir bahalaryny saklaýar. Tapgyryň bu bölüminde , 62-nji soragda, men basseýni beýan etdim.

  6. “Java” -da “StringBuilder ” we “StringBuffer” setirleri bilen işlemek üçin döredilen “String” -iň analoglary bar , ýöne üýtgäp bilýän tapawudy bilen. Olar hakda has giňişleýin maglumaty şu makalada okap bilersiňiz .

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

15. Kowariýa görnüşi näme?

Ygtybarlylyga düşünmek üçin bir mysala serederis. Haýwanlar synpymyz bar diýeliň:
public class Animal {
 void voice() {
   System.out.println("*тишина*");
 }
}
Käbir it synpy :
public class Dog extends Animal {

 @Override
 public void voice() {
   System.out.println("Гав, гав, гав!!!");
 }
}
.Adymyzda bolsa, mirasdüşer görnüşindäki zatlary ene-atanyň görnüşine aňsatlyk bilen belläp bileris:
Animal animal = new Dog();
Bu polimorfizmden başga zat bolmaz. Amatly, çeýe dälmi? Haýwanlaryň sanawy näme? Umumy haýwan bilen sanaw, It obýektleri bilen sanaw berip bilerismi ?
List<Dog> dogs = new ArrayList<>();
List<Animal> animals = dogs;
Bu ýagdaýda itleriň sanawyny haýwanlaryň sanawyna bellemek üçin setir gyzyl reňkde görkeziler. düzüji bu kody geçirmez. Bu ýumuş gaty mantykly ýaly görünse-de (ahyrsoňy, It görnüşini haýwan görnüşine üýtgedip bileris ), edip bolmaýar. Sebäbi rugsat berlen halatynda sanawda diňe Itlerimiz bar öýdüp, Haýwan obýektini ilkibaşda It bolmak üçin niýetlenen sanawa girizip bilerdik . Soň bolsa, mysal üçin, it (it) diýip pikir edip, itleriň sanawyndan bir zat almak üçin we (It) usulyny ulanarys we Itiň obýektiniň haýsydyr bir usulyna haýwan ýok . Düşünşiňiz ýaly, bu mümkin däl - ýalňyşlyk ýüze çykar. Emma, ​​bagtymyza, düzüji nesilleriň sanawyny ene-atalaryň sanawyna bellemek bilen (we tersine) bu logiki ýalňyşlygy sypdyrmaýar. Java-da diňe gabat gelýän umumylyklar bilen üýtgeýänleri sanawlamak üçin sanaw obýektlerini belläp bilersiňiz. Oňa üýtgemezlik diýilýär. Muny edip bilýän bolsalar, oňa “kovariance” diýilýär we diýilýär. Arragny, ArrayList <Dog> görnüşli obýektiň sanawyny <Animal> üýtgeýänine belläp bilsek, başarnyklylyk . Java-da kovariance goldanylmaýarmy? Nähili bolsa-da! Emma bu öz aýratyn usuly bilen edilýär. Dizaýn näme üçin ulanylýar ? Haýwany uzadýar . Sanaw obýektini bellemek isleýän üýtgeýjimiziň umumy görnüşi bilen, nesliň umumy görnüşi bilen ýerleşdirildi. Bu umumy gurluşyk, Haýwan görnüşiniň neslinden bolan islendik görnüşiň etjekdigini aňladýar (we Haýwan görnüşi hem bu umumylaşdyryşa girýär). Öz gezeginde Haýwan diňe bir synp däl, eýsem interfeýs hem bolup biler ( giňeldilen açar söz bilen aldanmaň ). Öňki tabşyrygymyzy şeýle edip bileris: Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  15-5-nji bölüm
List<Dog> dogs = new ArrayList<>();
List<? extends Animal> animals = dogs;
Netijede, IDE-de düzüjiniň bu gurluşykdan zeýrenmejekdigini görersiňiz. Geliň, bu dizaýnyň işleýşini barlap göreliň. Animalshli haýwanlaryň ses çykarmagyna sebäp bolýan usulymyz bar diýeliň:
public static void animalsVoice(List<? extends Animal> animals) {
 for (Animal animal : animals) {
   animal.voice();
 }
}
Geliň, oňa itleriň sanawyny bereliň:
List<Dog> dogs = new ArrayList<>();
dogs.add(new Dog());
dogs.add(new Dog());
dogs.add(new Dog());
animalsVoice(dogs);
Konsolda aşakdaky çykyşy göreris:
Woüň ýüň ýüň !!! Woüň ýüň ýüň !!! Woüň ýüň ýüň !!!
Bu, bileleşige bolan çemeleşmäniň üstünlikli işleýändigini aňladýar. Bu umumy sanawyň içine girendigini belläsim gelýärmi ? Haýwany giňeldýär Biz haýsydyr bir görnüşdäki täze maglumatlary goýup bilmeris: It görnüşi , hatda Haýwan görnüşi :
List<Dog> dogs = new ArrayList<>();
List<? extends Animal> animals = dogs;
animals.add(new Dog());
dogs.add(new Animal());
Aslynda, soňky iki setirde düzüji obýektleriň gyzyl reňkde goýulmagyny görkezer. Munuň sebäbi, umumy <? Haýwanlary uzadýar . Mundan başga-da, gapma-garşylykJava dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  15-6-njy bölüm hakda gürleşmek isleýärin , sebäbi adatça bu düşünje hemişe oňatlyk bilen utgaşýar we adatça olar hakda bilelikde soralýar. Bu düşünje birneme gapma-garşylygyň tersine, sebäbi bu gurluş mirasçy görnüşini ulanýar. It obýektiniň ata-babalary bolmadyk görnüşli obýektleriň sanawyny belläp boljak sanawy isleýändigimizi aýdalyň . Şeýle-de bolsa, olaryň haýsy görnüşleriniň boljakdygyny öňünden bilemzok. Bu ýagdaýda görnüşiň gurluşygy ? ähli görnüşlere laýyk gelýän super it - It synpynyň nesilleri :
List<Animal> animals = new ArrayList<>();
List<? super Dog> dogs = animals;
dogs.add(new Dog());
dogs.add(new Dog());
Şeýle umumy sanaw bilen It görnüşine obýektleri arkaýyn goşup bileris , sebäbi islendik ýagdaýda-da ata-babalarynyň haýsydyr biriniň durmuşa geçiren usullary bar. Animalöne haýwan görnüşli bir obýekt goşup bilmeris , sebäbi içerde bu görnüşdäki zatlaryň boljakdygyna ynam ýok, mysal üçin It däl . Galyberse-de, bu sanawyň bir elementinden Haýwanlarda ýok It synpynyň usulyny sorap bileris . Bu ýagdaýda jemleme ýalňyşlygy ýüze çykar. Şeýle hem, öňki usuly durmuşa geçirmek islesek, ýöne şu umumy usul bilen:
public static void animalsVoice(List<? super Dog> dogs) {
 for (Dog dog : dogs) {
   dog.voice();
 }
}
yzyna gaýtarylan sanawda It görnüşli zatlaryň bardygyny we onuň usullaryny ulanmaga erkindigine ynanmaýandygymyz üçin, aýlawda jemleme ýalňyşlygy alarys . Bu sanawdaky itler.get (0) usuly diýsek. - Obýekt görnüşli obýekt alarys . Animalsagny, haýwanlarVoice () usulynyň işlemegi üçin iň bolmanda görnüş maglumatlaryny daraltmak bilen ownuk manipulýasiýa goşmaly:
public static void animalsVoice(List<? super Dog> dogs) {
 for (Object obj : dogs) {
   if (obj instanceof Dog) {
     Dog dog = (Dog) obj;
     dog.voice();
   }
 }
}
Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  15-7-nji bölüm

16. Obýekt synpynda usullar nähili?

Tapgyryň bu bölüminde , 11-nji paragrafda, men bu soraga eýýäm jogap berdim, şonuň üçin entek etmedik bolsaňyz okamagyňyzy maslahat berýärin. Ine, şu gün gutararys. Indiki bölümde görüşeris! Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  15-8-nji bölüm
Tapgyryň beýleki materiallary:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION