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. 16-njy bölüm

Toparda çap edildi
Salam dostum! Ösdüriji bolmak üçin näçe wagt gerek? Köp dürli adamdan soradym we köp dürli jogap eşitdim. Käbir adamlar üçin hatda bir aý hem ýeterlik bolup biler, ýöne beýlekiler üçin hatda bir ýyl hem ýeterlik bolmaz. Javaöne Java döredijisi bolmagyň başlangyç ukyplaryňyza garamazdan tikenli we uzyn ýoldygyny anyk bilýärin. Galyberse-de, birkemsizlik we zähmet ýaly möhüm ukyp däl. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-njy bölümŞol sebäpden, bu gün Java dörediji üçin iň meşhur söhbetdeşlik soraglaryny bilgeşleýin derňemegi dowam etdirýäris. Olary öwrenmek sizi ýuwaş-ýuwaşdan maksadyňyza ýakynlaşdyrar. Başlalyň!

17. Meýletin we üstünlikli ulanmagyň mysallaryny getiriň

Akymdan geçýän belli bir gymmatlyklarymyz bar diýsek, netijede birneme islege bagly bolarys:
Optional<String> stringOptional = Stream.of("a", "ab", "abc", "abcd")
   .filter(str -> str.length() >= 3)
   .findAny();
Garaşylyşy ýaly, bu islege görä bahany almaly . Diňe get () ulanmak erbet ýol:
String result = stringOptional.get();
Thisöne bu usul, islege görä bahany alyp , bize gaýtaryp bermelimi? Bu, elbetde, dogry, ýöne manysy bar bolsa. Dogrusy, akymdaky bahalar başgaça bolan bolsa we ahyrynda boş islege eýe bolsak, get () usuly bilen ondan baha aljak bolanymyzda aşakdakylar atylar: Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-njy bölümHaýsy gowy däl. Bu ýagdaýda aşakdaky gurluşyklary ulanmak has gowudyr:
  1. String result = null;
    if (stringOptional.isPresent()) {
     stringOptional.get();
    }

    Bu ýagdaýda, elementiň islege bagly däldigini barlaýarys . Notok bolsa, emele gelen setiriň köne gymmaty bar.

  2. String result = stringOptional.orElse("default value");

    Bu ýagdaýda, boş islege bagly bolan ýagdaýynda berlen setire beriljek käbir başlangyç bahany kesgitleýäris .

  3. String result = stringOptional.orElseThrow(() -> new CustomException());

    Bu ýagdaýda, islege görä boş bolanda kadadan çykma edýäris .

Mysal üçin, “Bahar JPA” usuly ulanylanda - goşmaça bahalary gaýtaryp berýän findById () ulanylanda bu amatly bolup biler . Bu ýagdaýda, bu usul bilen bahany almaga synanyşýarys, eger ol ýok bolsa, ExceptionHandler ulanyp, gözegçilik derejesinde işlenýän we 404 statusy bilen HTTP jogabyna öwrülen Runtime kadasyny atýarys . Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-njy bölüm

18. Esasy usuly gutarnykly diýip yglan edip bolarmy?

Hawa, elbetde, esasy () usuly gutarnykly diýip yglan etmegimize hiç zat päsgel bermeýär . Düzediji ýalňyşlyk döretmez. Finalöne ýadymyzdan çykarmaly däldiris, ony gutarnykly diýip yglan edeniňden soň islendik usul iň soňky usul bolar - ýatdan çykarylmaz. Şeýle-de bolsa, esasy kim kesgitlär ??? Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-njy bölüm

19. Bir paket / synpy iki gezek import edip bolarmy? Netijeleri näme bolup biler?

Hawa, edip bilersiň. Netijeler? Intelijj IDEA-nyň çal reňkde görkezjek birnäçe gereksiz importy bolar. ulanylmadyk. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-5-nji bölümJava dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-6-njy bölüm

20. Kasting näme? “ClassCastException” haçan alyp bileris?

Döküm ýa-da guýma görnüşi , bir maglumat görnüşini başga maglumat görnüşine öwürmek prosesi: el bilen (aç-açan guýma) ýa-da awtomatiki usulda (aç-açan kasting). Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-7-nji bölümAwtomatiki öwrüliş düzüji tarapyndan, el bilen öwrüliş bolsa dörediji tarapyndan amala aşyrylýar. Ilkinjiler we synplar üçin kasting görnüşi birneme tapawutlanýar, şonuň üçin olary aýratyn göz öňünde tutarys. Ilkinji görnüşler Ilkinji görnüşleriň awtomatiki guýulmagynyň mysaly :
int value = 17;
double convertedValue = value;
Görşüňiz ýaly, bu ýerde = belgiden başga goşmaça manipulýasiýa gerek däl. Ilkinji görnüşleri elde guýmagyň mysaly :
double value = 17.89;
int convertedValue = (int)value;
Bu ýagdaýda, (int) ulanyp ýerine ýetirilýän el bilen guýulýan synlary synlap bileris , şonda verguldan soň bölegi taşlanar we öwrülen bahanyň bahasy bolar - 17. Bu makalada başlangyç görnüşleri guýmak barada has giňişleýin okaň . Bolýar, indi obýektlere geçeliň. Salgy görnüşleri Salgy görnüşleri üçin nesil synplary üçin ene-atalar synplaryna awtomatiki guýmak mümkindir. Oňa polimorfizm hem diýilýär . Pişik synpyndan miras alýan arslan synpymyz bar diýeliň . Bu ýagdaýda awtomatiki öwrülişik şeýle bolar:
Cat cat = new Lion();
Aöne aç-açan rol oýnamak bilen hemme zat birneme çylşyrymly, sebäbi primitiwler ýaly artykmaçlygy kesmek üçin funksiýa ýok. Diňe formany aç-açan öwürmek:
Lion lion= (Lion)new Cat();
Erroralňyşlyk alarsyňyz: Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-njy bölümAslynda, Pişik synpynda bolmadyk arslan nesli synpyna usullary goşup bilersiňiz, soň bolsa olara jaň edip bilersiňiz, sebäbi obýektiňiziň görnüşi Arslan bolar . Dogrusy, munuň logikasy ýok. Şonuň üçin görnüşi daraltmak diňe asyl obýekt “Arslan” görnüşinde bolup , soňra ene-atalar synpyna atylanda mümkindir:
Lion lion = new Lion();
Cat cat = lion;
Lion newLion = (Lion)cat;
Mundan başga-da, has ygtybarlylygy üçin, mysal üçinOf konstruksiýasyny ulanyp, obýektler üçin daralýan guýma maslahat berilýär :
if (cat instanceof Lion) {
 newLion = (Lion)new Cat();
}
Bu makalada salgylanma görnüşi barada has giňişleýin okaň .

21. Näme üçin häzirki zaman çarçuwalary esasan diňe barlanmadyk kadadan çykmalary ulanýarlar?

Meniň pikirimçe, bularyň hemmesi barlanylan kadadan çykmalar henizem hemme ýerde gaýtalanýan, ýöne hemme halatlarda zerur däl spagetti kody. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-njy bölümŞeýle ýagdaýlarda, muny ýene bir gezek işläp düzüjileriň egnine geçirmezlik üçin çarçuwanyň içinde gaýtadan işlemek has aňsat. Hawa, elbetde, adatdan daşary ýagdaý ýüze çykyp biler, ýöne şol bir barlanmadyk kadadan çykmalar has amatly usulda ulanylyp bilner, synanyşykda gaýtadan işlemek bilen gyzyklanman we usullardan has köp geçmezden. Diňe kadadan çykmaHandler -de käbir HTTP jogabyna öwürmek ýeterlikdir .

22. Statiki import näme?

Statik maglumatlary (usullar, üýtgeýjiler) ulananyňyzda obýektiň özüni döredip bilmersiňiz, ýöne synpyň ady bilen edip bilersiňiz, hatda bu ýagdaýda-da synpa baglanyşyk gerek. Hemme zat ýönekeý: yzygiderli import arkaly goşulýar. Classöne synpyň adyny ýazman, häzirki synpyň statiki usuly ýaly statik usuly ulanjak bolsak näme etmeli? Bu statiki import bilen mümkindir! Bu ýagdaýda statiki import we şol usula baglanyşyk ýazmalydyrys . Munuň ýaly, meselem, kosinanyň bahasyny hasaplamak üçin Matematika synpynyň statiki usuly:
import static java.lang.Math.cos;
Netijede, synpyň adyny görkezmezden usuly ulanyp bileris:
double result = cos(60);
Şeýle hem, statiki importy ulanyp, synpyň ähli statiki usullaryny birbada ýükläp bileris:
import static java.lang.Math.*;
Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-10-njy bölüm

23. HashCode () bilen deň () usullaryň arasynda nähili baglanyşyk bar?

Oracle- yň pikiriçe , düzgün: Iki obýekt deň bolsa (ýagny deň () usuly dogry gaýdyp gelse ), şol bir hash kody bolmaly. Şol bir wagtyň özünde, iki dürli obýektiň bir hash kody bolup biljekdigini ýatdan çykarmaň. Deňdir () we hashCode () -iň elmydama jübüt görnüşde ýazylýandygyna düşünmek üçin aşakdaky ýagdaýlara serediň:
  1. Iki usul hem ýok.

    Bu ýagdaýda birmeňzeş içerki ýagdaýy bolan iki dürli obýekt deňdir () - dogry , hashCode () ikisi hem şol bir belgini yzyna getirer.

    Görnüşi ýaly, hemme zat gowy, sebäbi düzgün ýerine ýetirilýär.

  2. Iki usul hem ýok.

    Bu ýagdaýda, içerki ýagdaýlary bolan iki dürli obýekt () deň bolanda ýalňyş gaýdyp geler , sebäbi deňeşdirme == operatoryň üsti bilen amala aşyrylýar .

    HashCode () usuly, ýadyň ýerleşýän salgysynyň öwrülen bahasyny öndürýänligi sebäpli dürli bahalary (iň ähtimal) yzyna getirer. Emma şol bir obýekt üçin bu baha deň bolar, edil bu ýagdaýda deňdir () diňe salgylanmalar şol bir obýekte görkezilende hakyky bolar.

    Görnüşi ýaly, bu ýagdaýda hemme zat gowy we düzgün ýerine ýetirilýär.

  3. Artykmaç hashCode () däl-de, () deňdir .

    Bu ýagdaýda birmeňzeş içerki ýagdaýy bolan iki dürli obýekt üçin deň () hakykata gaýdyp geler we hashCode () dürli bahalary yzyna getirer.

    Bu düzgüniň bozulmagy, şonuň üçin muny etmek maslahat berilmeýär.

  4. deňdir () ýazylmady , hashCode () ýok edildi .

    Bu ýagdaýda birmeňzeş içerki ýagdaýy bolan iki dürli obýekt üçin deň () ýalan , hashCode () şol bir bahalary yzyna getirer .

    Düzgüniň bozulmagy bar, şonuň üçin çemeleşme nädogry.

Görşüňiz ýaly, bu düzgün diňe () we hashCode () deňdir ýa-da ikisi hem asla ýazylmasa ýerine ýetirilip bilner. Deňdir () we hashCode () hakdaJava dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-njy bölüm has giňişleýin okaň .

24. BufferedInputStream we BufferedOutputStream sapaklary haçan ulanylýar?

“InputStream” käbir çeşmelerden maglumatlary byte-byte okamak üçin, “ OutputStream” bolsa baýt-baýt maglumatlary ýazmak üçin ulanylýar. Emma baýt-baýt amallary gaty amatsyz bolup biler we goşmaça işlemegi talap edip biler (tekstleri adaty okamak / ýazmak üçin). Aslynda, şeýle baýt ýazgylaryny ýönekeýleşdirmek üçin BufferedOutputStream girizildi we okamak üçin BufferedInputStream hödürlendi . Bu synplar maglumatlary baýt bilen däl-de, eýsem ähli maglumatlar paketleri (massiwler) bilen işlemäge mümkinçilik berýän maglumatlary ýygnaýan buferlerden başga zat däl. Döredilende, BufferedInputStream konstruktoryna maglumatlar okalýan InputStream görnüşiniň mysalyny alýar:
BufferedInputStream bufferedInputStream = new BufferedInputStream(System.in);
byte[] arr = new byte[100];
bufferedInputStream.read(arr);
System.in , konsoldan maglumatlary okaýan GirişStream obýektidir . Thisagny, bu BufferedInputStream obýektini ulanyp, InputStream- den maglumatlary geçen massiwine ýazyp okap bileris . Bu, “InputStream” synpynyň bir görnüşi . Bu mysaldan gelýän massiw, BufferedInputStream- den maglumat alýan massiwdir . Bu bolsa öz gezeginde “InputStream” -den maglumatlary 2048 baýt ululykda başga bir massiw bilen okaýar. “BufferedOutputStream” üçin hem edil şonuň ýaly : “OutputStream” görnüşiniň mysaly konstruktora geçmeli , bu maglumatlary tutuş massiwde ýazarys:
byte[] arr = "Hello world!!!".getBytes();
BufferedOutputStream bufferedInputStream = new BufferedOutputStream(System.out);
bufferedInputStream.write(arr);
bufferedInputStream.flush();
System.out , konsola maglumat ýazýan OutputStream obýektidir . Flush () usuly BufferedOutputStream- den OutputStream- a maglumat iberýär we bu işde BufferedOutputStream- i ýuwýar . Bu usul bolmasa hiç zat ýazylmaz. Öňki mysala meňzeş: arr , BufferedOutputStream-a maglumatlaryň ýazylan massiwidir . Şol ýerden, OutputStream-a 512 baýt ululykdaky başga bir massiwde ýazylýar . Makalada bu iki synp hakda has giňişleýin okaň .

25. java.util.Collection we java.util.Collection synplarynyň arasynda näme tapawut bar?

Kolleksiýa, ýygnamak iýerarhiýasynyň başlygy bolan interfeýsdir. Obýektleriň ähli toparlaryny döretmäge, saklamaga we üýtgetmäge mümkinçilik berýän sapaklar bilen tanyşdyrýar. Munuň üçin köp usullar bar, goşmak () , aýyrmak () , öz içine () we başgalar. Kolleksiýa synpynyň esasy interfeýsleri :
  • Set , tertipsiz üýtgeşik (gaýtalanmaýan) elementleri öz içine alýan toplumy suratlandyrýan interfeýsdir.

  • Sanaw, obýektleriň tertipli yzygiderliligini saklaýan maglumat gurluşyny beýan edýän interfeýsdir. Bu obýektler öz indeksini (sanyny) alýarlar, ulanyp, olar bilen täsirleşip bilersiňiz: alyň, pozuň, üýtgediň, gaýtadan ýazyň.

  • Nobat , düzgüne eýerýän nobat görnüşinde elementleri saklaýan maglumat gurluşyny suratlandyrýan interfeýsdir - FIFO - First In First Out .

Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-12-nji bölümCollectionygyndy hakda has giňişleýin okaň . Kolleksiýalar köp dürli peýdaly usullary üpjün edýän peýdaly synpdyr. Mysal üçin:
  • addAll (Toplama <? super T> ýygyndy, T ... element) - T görnüşiniň geçen elementlerini kolleksiýa goşýar .

  • göçüriň (Sanaw <? super T> dest, Sanaw <? T> src uzadýar) - src sanawyndan ähli elementleri sanawdaky sanawyna göçüriň .

  • boş sanaw () - boş sanawy görkezýär.

  • max (Toplama <? T> kolleksiýany giňeldýär, Deňeşdiriji <? super T> comp) - Berlen kolleksiýanyň iň ýokary elementini görkezilen deňeşdiriji tarapyndan görkezilen tertibe laýyklykda yzyna berýär.

  • unmodifiableList (Sanaw <? T> sanawyny uzadýar) - geçen sanawyň üýtgewsiz görnüşini görkezýär.

Kolleksiýalarda şeýle dürli amatly usullaryň köpüsi bar . Bu usullaryň doly sanawyny Oracle web sahypasyndaJava dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-njy bölüm tapyp bilersiňiz . Olaryň rahatdygyny aýtmagym hiç zat däl. Galyberse-de, olaryň hemmesi statik. .Agny, zerur usuly çagyrmak üçin her gezek bu synpyň obýektini döretmegiň zerurlygy ýok. Diňe synpyň adyny girizmeli, oňa gerekli usula jaň etmeli we ähli zerur argumentleri geçirmeli. Jemläp aýtsak, Kolleksiýa kolleksiýa çarçuwasynyň düýp interfeýsi. Kolleksiýalar, kolleksiýa gurluşyndan bir görnüşe degişli zatlary has amatly gaýtadan işlemek üçin kömekçi synpdyr. Dogrusy, şu gün hemmesi. Iň gowusy!Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  16-njy bölüm
Tapgyryň beýleki materiallary:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION