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

Toparda çap edildi
Salam! Kursyz iň çalt gämi hem tolkunlaryň üstünden süýşer. Indi makalamy okaýan bolsaň, hökman bir maksadyň bar. Esasy zat azaşmak däl-de, ahyryna çenli setiriňizi yzarlamak - Java dörediji bolmak. Bu gün, Java döredijiler üçin 250+ sorag baradaky derňewimi dowam etdirmek isleýärin, bu teoriýadaky käbir boşluklary ýapmaga kömek eder. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  11-nji bölüm

97. Deňlik kesgitlenende şertnamany kesgitlemek şertleri goýulýarmy?

Artykmaç deňdir () usuly aşakdaky şertlere (düzgünlere) laýyk gelmelidir:
  • reflekslilik - islendik baha üçin x.equals (x) ýaly aňlatma hemişe hakykata gaýdyp gelmeli ( x! = null bolanda ).

  • simmetriýa - x we ​​y islendik bahalar üçin x.equals (y) formasynyň aňlatmasy diňe y.equals (x) dogry gaýdyp gelse hakyky bolmaly .

  • geçişliligi - x , y we z islendik bahalary üçin , eger x.equals (y) hakyky bolsa we y.equals (z) hem hakyky bolsa , x.equals (z) hakykata gaýdyp gelmeli .

  • yzygiderlilik - x we ​​y islendik bahalary üçin , x.equals (y) -a gaýtalanýan jaň, iki obýekti deňeşdirmek üçin ulanylýan meýdanlar jaňlaryň arasynda üýtgemese, öňki jaňyň bahasyny hemişe şu usula gaýtaryp berer. .

  • deňeşdirme null - x bahasy üçin x.equals (null) çagyrmak ýalňyş gaýdyp geler .

98. “Equals” we “HashCode” -ni ýok etmeseňiz näme bolýar?

Bu ýagdaýda hashCode () berlen obýektiň ýatda saklanýan ýeri esasynda döredilen sanlary yzyna getirer. Exactlyagny, birmeňzeş meýdany bolan iki obýekt, ýazylmadyk hashCode () jaň edende dürli bahalary alar (ahyrsoňy olar dürli ýat ýerlerinde saklanýar). Gizlenmedik deňdir (), şol bir obýekte degişlidigini ýa-da ýokdugyny görmek üçin salgylanmalary deňeşdirýär. .Agny, deňeşdirme == arkaly edilýär we şol bir meýdany bolan obýektler mydama ýalňyş gaýdyp geler . Hakyky diňe şol bir obýekte salgylanmalar deňeşdirilende bolar. Käwagt bu usullary äsgermezlik etmegiň logikasy bar. Mysal üçin, belli bir synpyň ähli obýektleriniň özboluşly bolmagyny isleýärsiňiz we bu usullara aşa baha bermek diňe özboluşlylyk logikasyny bozar. Esasy zat, artykmaç we artykmaç usullaryň nuanslaryna düşünmek we ýagdaýa baglylykda iki çemeleşmäni ulanmak.

99. Näme üçin simmetriýa diňe x.equals (y) dogry gaýdyp gelse dogry?

Biraz geň sorag. A obýekt B obýektine deň bolsa, B obýekt A obýektine deň bolsa, B obýekt A obýektine deň däl bolsa, tersine nädip mümkin? Bu ýönekeý logika. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  11-nji bölüm

100. HashCode-de çaknyşyk näme? Oňa nähili çemeleşmeli?

HashCode çaknyşygy , iki dürli obýektiň birmeňzeş hashCode bahasy bolan ýagdaýdyr . Bu nädip mümkin? Hakykat, hashkodyň “Integer” görnüşine düzülendigi , öz gezeginde -2147483648-den 2147483647 aralygy, ýagny takmynan 4 milliard dürli bitewi san bar. Bu aralyk gaty uludyr, ýöne ol çäksiz däl. Şol sebäpden, düýbünden başga iki obýektiň hash kody bolanda ýagdaýlar mümkin. Bu gaty ähtimal däl, ýöne mümkin. Gowy ýerine ýetirilmedik hash funksiýasy birmeňzeş hash kodlarynyň ýygylygyny hem artdyryp biler, meselem, sanlary az aralykda yzyna getirer, bu bolsa çaknyşmak mümkinçiligini artdyrar. Çaknyşyk bilen göreşmek üçin bahalaryň ýaýramagy iň ýokary we bahalary gaýtalamak mümkinçiligi minimal bolar ýaly hashCode usulyny gowy durmuşa geçirmeli .

101. HashCode şertnamasyna gatnaşýan elementiň bahasy üýtgese näme bolar?

Haş koduny hasaplamaga gatnaşýan bir element üýtgedilen bolsa, obýektiň hash kody üýtgediler (eger hash funksiýasy gowy bolsa). Şonuň üçin “HashMap” -da üýtgewsiz (üýtgemeýän) zatlary açar hökmünde ulanmak maslahat berilýär, sebäbi döredilenden soň içerki ýagdaýy (meýdanlary) üýtgedilip bilinmez. Şoňa laýyklykda olaryň hash kody hem döredilenden soň öwrülmeýär. Üýtgedip bolýan obýekti açar hökmünde ulanýan bolsaňyz, bu obýektiň meýdanlaryny üýtgedeniňizde, onuň hash kody üýtgär we netijede HashMap -da bu jübüti ýitirip bilersiňiz . Galyberse-de, asyl hash kody üçin çelekde saklanar we üýtgedilenden soň başga bir çelekde gözlener. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  11-nji bölüm

102. String ady we int ýaş meýdanlaryndan ybarat Talyp synpy üçin deň we HashCode usullaryny ýazyň

public class Student {
int age;
String name;

 @Override
 public boolean equals(final Object o) {
   if (this == o) {
     return true;
   }
   if (o == null || this.getClass() != o.getClass()) {
     return false;
   }

   final Student student = (Student) o;

   if (this.age != student.age) {
     return false;
   }
   return this.name != null ? this.name.equals(student.name) : student.name == null;
 }

 @Override
 public int hashCode() {
   int result = this.age;
   result = 31 * result + (this.name != null ? this.name.hashCode() : 0);
   return result;
 }
}
Deňdir:
  • Ilki bilen baglanyşyklary gönüden-göni deňeşdirýäris, sebäbi baglanyşyklar şol bir obýekt bilen baglanyşykly bolsa, barlagy dowam etdirmegiň näme manysy bar? Her niçigem bolsa hemme zat dogry bolar .

  • Null we synp görnüşlerine gabat gelmek üçin barlamak, sebäbi bir obýekt null ýa-da başga bir görnüşiň argumenti bolsa, bu obýektleriň deň däldigini aňladýar - ýalan .

  • Argument obýektini bir görnüşe zyňmak (ene-atanyň görnüşi bolan bolsa).

  • Ilkinji synp meýdanyny deňeşdirmek (ahyrsoňy, =! Bilen deňeşdirmek ýeterlikdir ), meýdan deň bolmasa - ýalan .

  • Nul we deň däl üçin başlangyç däl meýdany barlamak ( String usuly ýokaşdyrylýar we dogry deňeşdiriler), iki meýdan hem null ýa-da deň bolsa , barlag gutarýar we usul dogry gaýdyp gelýär .

HashCode:
  • Başdaky hash kodunyň bahasyny obýektiň ýaşyna görä kesgitlemek .

  • Häzirki hash koduny 31-e köpeltmek (has giň ýaýramak üçin) we oňa başlangyç däl setir meýdanynyň hash kody goşmak (eger ol ýok bolsa).

  • Netijäni gaýtarmak

  • Bu hash kody ýok etmegiň netijesinde birmeňzeş at we int bahalary bolan obýektler hemişe şol bir bahany yzyna gaýtaryp berer.

103. Eger (Talyp garşy obj mysal) bilen (getClass () == obj.getClass ()) ulanmagyň arasynda näme tapawut bar?

Her çemeleşmäniň näme edýändigine seredeliň:
  • Mysal üçin , çep tarapdaky obýekt salgylanmasy sag tarapdaky görnüşiň ýa-da onuň bir görnüşiniň bardygyny barlaýar.

  • getClass () == ... görnüşiň şahsyýetini barlaýar.

Getagny, getClass () synpyň doly şahsyýetini barlasa, polimorfizmi işjeň ulananymyzda bize has çeýeligi berip biljek obýektiň diňe bir görnüşi bolsa-da, mysal hakyky bolar . Aslynda, işleriniň aýratynlyklaryna düşünip, dogry ýerlerde ulansaňyz, iki çemeleşme hem gowy.

104. Klon () usuly barada gysgaça düşündiriş beriň.

Klon () Obýekt synpynyň usuly bolup , onuň maksady häzirki obýektiň klonyny döretmek we yzyna gaýtarmak (häzirki obýektiň göçürmesi). Ony ulanmak üçin “Cloneable”Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  11-nji bölüm marker interfeýsini durmuşa geçirmeli :
Student implements Cloneable
Klon () usulynyň özüni ýok et :
@Override
protected Object clone() throws CloneNotSupportedException {
 return super.clone();
}
Galyberse-de, Obýekt synpynda goralýar, ýagny diňe Talyplar synpynda görüner , ýöne daşardan synplara görünmez.

105. Salgy görnüşli obýektiň meýdanlary bilen işleýän klon () usulynyň aýratynlygy näme?

Obýektleri klonlaşdyrylanda diňe başlangyç bahalar we obýekt salgylanmalarynyň bahasy göçürilýär. Diýmek, bir obýektiň içerki meýdanynda başga bir obýekt bilen baglanyşygy bar bolsa, diňe bu baglanyşyk klonlaşdyrylar, ýöne bu beýleki obýektiň özi klonlaşdyrylmaz. Aslynda, bu ýerüsti klonlaşdyrma diýilýär. Nhli höwürtgeleýän zatlaryň klonlaşdyrylmagy bilen doly hukukly klonlaşdyryş gerek bolsa näme etmeli? Bularyň baglanyşyklaryň göçürmesi däldigine, üýşmeleňdäki beýleki ýat öýjükleri bilen obýektleriň doly hukukly klonlaryna nädip göz ýetirmeli? Aslynda hemme zat gaty ýönekeý - munuň üçin bu içerki obýektleriň her synpynda klon () usulyny hem ýok etmeli we marker interfeýsini goşmaly - Cloneable . Soňra göçüriljek obýektlere salgylanmalar däl-de, obýektleriň özleri bolar, sebäbi indi olaryň hem göçürip bilmek ukyby bar.

Kadadan çykmalar

106. erroralňyşlyk bilen kadadan çykmagyň arasynda näme tapawut bar?

Iki kadadan çykma we ýalňyşlyk, Zyňylýan synpyň kiçi bölümleri . Şeýle-de bolsa, olaryň tapawutlary bar. Erroralňyşlyk esasan ulgam çeşmeleriniň ýeterlik däldigi sebäpli ýüze çykýan meseläni görkezýär. Biziň programmamyz bu hili problemalary ýüze çykarmaly däldir. Rorsalňyşlyklaryň käbir mysallary ulgamyň çökmegi we ýadyň ýalňyşlygydyr. Rorsalňyşlyklar köplenç iş wagty ýüze çykýar, sebäbi olar barlanmadyk görnüşde. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  11-5-nji bölümKadadan çykmalar iş wagty we jemlenen wagtynda ýüze çykyp biljek meselelerdir. Adatça bu döredijiler tarapyndan ýazylan kodda bolýar. .Agny, kadadan çykmalar has öňünden aýdylýar we işläp düzüjiler hökmünde bize baglydyr. Şol bir wagtyň özünde, ýalňyşlyklar has tötänleýin we bizden has garaşsyz, tersine, programmamyzyň işleýän ulgamynyň özi bilen baglanyşykly meselelere baglydyr.

107. Barlanylan we barlanmadyk, kadadan çykma, zyňmak, zyňmak arasynda näme tapawut bar?

Öň hem aýdyşym ýaly, kadadan çykma programmanyň ýerine ýetirilişinde we işläp düzüjiniň ýazan kodunda (käbir adaty bolmadyk ýagdaý sebäpli) ýüze çykan ýalňyşlykdyr . Barlanylan synanyşyk mehanizminiň kömegi bilen elmydama işlenmeli ýa-da ýokardaky usullara zyňylmaly kadadan çykma görnüşidir . Zyňmak, usul bilen atylan mümkin kadadan çykmalary görkezmek üçin usul sözbaşysynda ulanylýar. .Agny, kadadan çykmalary ýokardaky usullara “zyňmagyň” mehanizmi. Barlanylmaly däl kadadan çykma görnüşi, adatça öňünden çak edilip bilinmeýän we ýüze çykma ähtimallygy az. Şeýle-de bolsa, isleseňiz gaýtadan işlenip bilner. Zyňmak kadadan çykma el bilen ulanylanda ulanylýar, mysal üçin:
throw new Exception();

108. Kadadan çykmalar iýerarhiýasy näme?

Kadadan çykmalar iýerarhiýasy gaty uly we giň, hatda bu hakda hemme zady aýdyp biljek derejede giňdir. Şonuň üçin diňe esasy baglanyşyklaryna serederis: Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  11-6-njy bölümBu ýerde iýerarhiýanyň iň ýokarsynda synpy - Zyňylýan - umumy synpy, kadadan çykma iýerarhiýasynyň atasy, öz gezeginde bölünýär:
  • Roralňyşlyk - möhüm, barlap bolmaýan ýalňyşlyklar.
  • Kadadan çykma - barlanylan kadadan çykmalar.
Kadadan çykma iş wagty dürli kadadan çykmalara we dürli barlanylan kadadan çykmalara bölünýär.

109. Barlanylýan we barlanmadyk kadadan çykma näme?

Öň hem aýdyşym ýaly:
  • Barlanyldy - haýsydyr bir usul bilen işlemeli kadadan çykmalar, ýa-da synap görüň - blokirläň ýa-da ýokardaky usula "ugradyň". Munuň üçin usul golunda, usul argumentlerini sananyňyzdan soň, usulyň ulanyjylaryna bu usulyň (duýduryş ýaly bir zady) taşlap biljekdigini görkezýän “ kadadan çykma görnüşi” açar söz ulanmaly. kadadan çykmany bu usuldan peýdalanýanlara bermek.

  • Barlanmadyk - işlenmeli däl kadadan çykmalar, sebäbi düzüliş wagtynda barlanmaýar we, adatça, has öňünden aýdyp bolmaýar. Checkagny, barlanylan esasy tapawut, bu synanyşyk ýa-da zyňmak mehanizmleriniň birmeňzeş işlemegidir, ýöne hökmany däl.

101. Usulyň synanyşyk blokynda kadadan çykma we işlemegiň mysalyny ýazyň

try{                                                 // начало блока перехвата
 throw new Exception();                             // ручной бросок исключения
} catch (Exception e) {                              // данное исключение и его потомки будут перехватываться
 System.out.println("Упс, что-то пошло не так =("); // вывод некоторого исключения в консоль
}

102. Öz kadadan çykmalaryňyzy ulanyp, kadadan çykma we işlemegiň mysalyny ýazyň

Ilki bilen, “Exception” -dan miras galan we konstruktoryny ýalňyş habary bilen ýoklaýan öz kadadan çykma synpymyzy ýazalyň :
public class CustomException extends Exception {

 public CustomException(final String message) {
   super(message);
 }
}
Bolýar, soň el bilen zyňarys we öňki soragdaky ýaly saklarys:
try{
 throw new CustomException("Упс, что-то пошло не так =(");
} catch (CustomException e) {
 System.out.println(e.getMessage());
}
Againene-de işledeniňizde, konsola aşakdaky çykyşy alarsyňyz:
Wah, bir zat ýalňyşdy = (
Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  11-7-nji bölümKadadan çykmalar barada has giňişleýin maglumaty şu ýerden tapyp bilersiňiz . Dogrusy, bularyň hemmesi şu gün üçin! Indiki bölümde görüşeris!
Tapgyryň beýleki materiallary:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION