CodeGym /Blog Jawa /Acak /Njelajah pitakonan lan jawaban saka wawancara proyek kang...
John Squirrels
tingkat
San Francisco

Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa. Bagean 11

Diterbitake ing grup
Hi! Malah kapal paling cepet mung bakal mabur ing ombak yen ora ana dalan. Yen sampeyan maca artikel iki saiki, sampeyan mesthi duwe tujuan. Ingkang utama yaiku ora metu saka kursus lan malah dadi pangembang Jawa. Dina iki aku pengin nerusake review pitakonan kanggo pangembang Jawa supaya bisa ngisi sawetara kesenjangan ing teori. Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 11 - 1

97. Apa ana aturan nalika overriding padha ()?

Nalika overriding cara padha (), sampeyan kudu tundhuk karo aturan ing ngisor iki:
  • reflexivity — kanggo sembarang nilai x , x.equals(x) kudu tansah bali bener (ngendi x != null ).

  • simetri — kanggo sembarang nilai x lan y , x.equals(y) kudu bali bener mung yen y.equals(x) bali bener .

  • transitivity — kanggo sembarang nilai x , y lan z , yen x.equals(y) bali bener lan y.equals(z) uga bali bener , banjur x.equals(z) kudu bali bener .

  • konsistensi — kanggo sembarang nilai x lan y , bola-bali nelpon x.equals(y) bakal tansah ngasilake nilai sing padha anggere kolom digunakake kanggo mbandhingaké loro obyek wis ora diganti antarane saben telpon.

  • null comparison — kanggo sembarang nilai x , nelpon x.equals(null) kudu bali palsu .

98. Apa mengkono yen sampeyan ora override witjaksono () lan hashCode ()?

Ing kasus iki, hashCode () bakal ngasilake nomer sing digawe adhedhasar alamat sel memori ing ngendi obyek kasebut disimpen. Ing tembung liyane,, nalika metode hashCode asli () diarani ing rong obyek kanthi lapangan sing padha, asil bakal beda (amarga disimpen ing lokasi memori sing beda). Asli witjaksono () cara mbandhingaké referensi, IE nuduhake apa referensi nuduhake obyek padha. Ing tembung liyane, comparison nggunakake operator == , lan bakal tansah bali palsu kanggo obyek beda, sanajan kothak sing podho rupo. bener bali mung nalika mbandingaken referensi kanggo obyek padha. Kadhangkala ora ana gunane kanggo ngatasi metode kasebut. Contone, sampeyan pengin kabeh obyek saka kelas tartamtu unik - overriding cara iki mung bisa ngrusak jaminan ana kode hash unik. Sing penting yaiku mangertos nuansa metode kasebut, manawa ditimpa utawa ora, lan nggunakake pendekatan sing dikarepake.

99. Yagene syarat simetri mung dicukupi yen x.equals(y) bali bener?

Pitakonan iki rada aneh. Yen obyek A padha karo obyek B, banjur obyek B padha karo obyek A. Yen B ora padha karo obyek A, banjur carane mbalikke bisa? Iki akal sehat.

100. Apa tabrakan HashCode? Kepiye cara sampeyan ngatasi?

Tabrakan HashCode dumadi nalika rong obyek beda duwe HashCode sing padha . Kepiye carane bisa? Inggih, kode hash bakal dipetakan menyang Integer, sing ana sawetara saka -2147483648 nganti 2147483647. Tegese, bisa dadi salah siji saka kira-kira 4 milyar integer beda. Kisaran iki ageng nanging ora tanpa wates. Tegese ana kahanan nalika rong obyek sing beda bisa duwe kode hash sing padha. Iku banget ora mungkin, nanging bisa. Fungsi hash sing ora diimplementasikake bisa nggawe kode hash sing padha luwih kerep kanthi mbalekake nomer ing sawetara cilik, saéngga nambah kemungkinan tabrakan. Kanggo nyuda tabrakan, sampeyan kudu duwe implementasine apik saka cara HashCode sing seragam nyebar metu nilai lan nyilikake kasempatan saka bola-bali nilai.

101. Apa sing kedadeyan yen nilai unsur sing melu kontrak hashCode diganti?

Yen unsur sing melu pitungan kode hash diganti, kode hash obyek kudu diganti (yen fungsi hash apik). Pramila sampeyan kudu nggunakake obyek sing ora bisa diganti minangka kunci ing HashMap , amarga negara internal (kolom) ora bisa diganti sawise digawe. Lan banjur kode hash kasebut ganti sawise digawe. Yen sampeyan nggunakake obyek sing bisa diowahi minangka kunci, banjur nalika kolom obyek diganti, kode hash bakal diganti, lan sampeyan bisa ilang pasangan nilai kunci sing cocog ing HashMap . Sawise kabeh, bakal disimpen ing ember sing ana gandhengane karo kode hash asli, nanging sawise owah-owahan obyek, sampeyan bakal nelusuri ing ember sing beda.

102. Nulis padha () lan hashCode () cara kanggo kelas Student sing wis String jeneng lan lapangan umur int.

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;
 }
}
padha ():
  • Kaping pisanan, kita mbandhingake referensi kasebut kanthi langsung, amarga yen referensi kasebut nuduhake obyek sing padha, apa gunane terus mriksa kesetaraan? Kita wis ngerti yen asile bakal bener .

  • Kita mriksa null lan apa jinis kelas padha amarga yen parameter null utawa saka jinis liyane, obyek ora bisa padha, lan asil kudu palsu .

  • We matak parameter kanggo jinis padha (sawise kabeh, apa yen obyek saka jinis tiyang sepah).

  • Kita mbandhingake kolom primitif (bandhingake nggunakake =! bakal cukup). Yen padha ora padha, kita bali palsu .

  • Kita mriksa lapangan non-primitif kanggo ndeleng yen iku null lan nggunakake cara padha ( kelas String overrides cara, supaya bakal nindakake comparison bener). Yen loro lapangan null, utawa padha bali bener , kita mungkasi mriksa, lan cara bali bener .

kode hash() :
  • Kita nyetel nilai awal kode hash padha karo nilai lapangan umur obyek .

  • We Multiply kode hash saiki 31 (kanggo panyebaran luwih ing nilai) lan banjur nambah kode hash saka lapangan String non-primitif (yen ora null).

  • Kita bali asil.

  • Ngganti cara kanthi cara iki tegese obyek kanthi jeneng lan nilai int sing padha bakal ngasilake kode hash sing padha.

103. Apa bedane antarane nggunakake "yen (obj instanceof Student)" lan "yen (getClass () == obj.getClass ())"?

Ayo goleki apa sing ditindakake saben ekspresi:
  • instanceof mriksa apa referensi obyek ing sisih kiwa minangka conto saka jinis ing sisih tengen utawa salah sawijining subtipe.

  • "getClass() == ..." mriksa apa jinis padha.

Ing tembung liyane, getClass () ngasilake identitas tartamtu saka kelas, nanging instanceof bali bener sanajan obyek mung subtipe, kang bisa menehi kita luwih keluwesan nalika nggunakake polymorphism. Loro pendekatan kasebut njanjeni yen sampeyan ngerti cara kerjane lan ditrapake ing papan sing bener.

104. Menehi gambaran singkat saka clone () cara.

Metode klon () kalebu kelas Obyek . Tujuane kanggo nggawe lan ngasilake tiron (salinan) saka obyek saiki. Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 11 - 2Kanggo nggunakake metode iki, sampeyan kudu ngetrapake antarmuka panandha Cloneable :
Student implements Cloneable
Lan ngganti metode clone () dhewe:
@Override
protected Object clone() throws CloneNotSupportedException {
 return super.clone();
}
Sawise kabeh, dilindhungi ing kelas Obyek , yaiku mung katon ing kelas Siswa lan ora katon ing kelas eksternal.

105. Apa pertimbangan khusus sampeyan kudu ngelingi babagan metode klon () lan variabel referensi ing obyek?

Nalika obyek dikloning, mung nilai primitif lan nilai referensi obyek sing disalin. Iki tegese yen obyek nduweni lapangan sing ngrujuk obyek liya, mung referensi sing bakal dikloning - obyek referensi liyane iki ora bakal dikloning. Iki sing diarani salinan cethek. Dadi, kepiye yen sampeyan butuh salinan lengkap, ing ngendi saben obyek sing dipasang dikloning? Kepiye carane sampeyan nggawe manawa iki ora mung salinan referensi, nanging salinan lengkap saka obyek sing beda-beda sing manggoni alamat memori sing beda ing tumpukan kasebut? Bener, kabeh iku cukup prasaja - kanggo saben kelas sing dirujuk ing njero, sampeyan kudu ngilangi cara clone () lan nambah antarmuka panandha Cloneable . Yen sampeyan nindakake iki, operasi klon ora bakal nyalin referensi menyang obyek sing wis ana, nanging bakal nyalin obyek sing dirujuk, amarga saiki dheweke uga duwe kemampuan kanggo nyalin dhewe.

Pangecualian

106. Apa bedane kesalahan lan pengecualian?

Pangecualian, uga kasalahan, minangka subclass saka Throwable . Nanging, dheweke duwe bedane. Kesalahan kasebut nuduhake masalah sing kedadeyan utamane amarga kekurangan sumber daya sistem. Lan aplikasi kita ngirim ora ndeleng jinis masalah iki. Conto kasalahan iki kalebu kacilakan sistem lan kesalahan metu saka memori. Kesalahan biasane kedadeyan nalika runtime, amarga ora dicenthang. Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 11 - 3Pangecualian minangka masalah sing bisa kedadeyan nalika runtime lan ing wektu kompilasi. Masalah kasebut biasane muncul ing kode sing kita tulis minangka pangembang. Tegese pangecualian kasebut luwih bisa diprediksi lan luwih gumantung marang kita. Miturut kontras, kasalahan luwih acak lan luwih bebas saka kita. Nanging, padha gumantung ing masalah ing sistem sing aplikasi kita mlaku ing.

107. Apa bedane dicenthang, ora dicenthang, dikecualian, dibuwang, lan dibuwang?

Kaya sing dakkandhakake sadurunge, pangecualian yaiku kesalahan runtime utawa compile-time sing kedadeyan ing kode sing ditulis dening pangembang (amarga sawetara kahanan sing ora normal). Dipriksa yaiku apa sing diarani pengecualian sing kudu ditindakake kanthi cara nggunakake mekanisme coba-nyekel utawa bali menyang cara nelpon. Tembung kunci mbuwang digunakake ing header metode kanggo nunjukake pangecualian sing bisa dibuwang. Ing tembung liyane, iku menehi kita karo mekanisme kanggo mbuwang istiméwa kanggo cara nelpon. Pengecualian sing ora dicenthang ora perlu ditangani. Padha cenderung kurang bisa ditebak lan kurang kamungkinan. Sing jarene, sampeyan bisa nangani yen sampeyan pengin. Kita nggunakake uncalan nalika mbuwang pangecualian kanthi manual, contone:
throw new Exception();

108. Apa hierarki pengecualian?

Hierarki pangecualian iku jembar banget. Ana akeh banget kanggo njlèntrèhaké ing kene. Dadi, tinimbang kita mung bakal nimbang cabang utama: Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 11 - 4 Ing kene, ing ndhuwur hirarki, kita ndeleng kelas Throwable , sing minangka leluhur umum saka hirarki pangecualian lan banjur dibagi dadi:
  • Kasalahan - masalah kritis, ora dicenthang.
  • Pangecualian — pangecualian sing bisa dipriksa.
Pangecualian dipérang dadi macem-macem pengecualian runtime sing ora dicenthang lan macem-macem pengecualian sing dicenthang.

109. Apa pengecualian sing dicenthang lan ora dicenthang?

Kaya sing dakkandhakake sadurunge:
  • Pangecualian sing dicenthang minangka pangecualian sing kudu sampeyan lakoni. Yaiku, sampeyan kudu nangani ing blok nyoba-nyekel utawa uncalan menyang cara ing ndhuwur. Kanggo nindakake iki, sawise nyathet argumen metode ing tandha metode, gunakake throws <type exception> kanggo nunjukake yen metode kasebut bisa mbuwang pengecualian kasebut. Iki kaya bebaya, kanthi menehi kabar yen cara nelpon kudu tanggung jawab kanggo nangani pangecualian kasebut.

  • Pangecualian sing ora dicenthang ora perlu ditangani, amarga ora dicenthang ing wektu kompilasi lan biasane luwih ora bisa ditebak. Bentenane utama karo pangecualian sing dicenthang yaiku nangani kanthi nggunakake blok coba-cekel utawa kanthi mbaleni maneh minangka opsional tinimbang wajib.

101. Tulis conto ing ngendi sampeyan nggunakake blok nyoba-nyekel kanggo nyekel lan nangani pangecualian.

try{                                                 // Start of the try-catch block
 throw new Exception();                             // Manually throw an exception
} catch (Exception e) {                              // Exceptions of this type and its subtypes will be caught
 System.out.println("Oops! Something went wrong =("); // Display the exception
}

102. Tulis conto ing ngendi sampeyan nyekel lan nangani pengecualian khusus sampeyan dhewe.

Pisanan, ayo nulis kelas pangecualian kita dhewe sing marisi Pengecualian lan ngilangi konstruktor sing njupuk pesen kesalahan minangka argumen:
public class CustomException extends Exception {

 public CustomException(final String message) {
   super(message);
 }
}
Sabanjure kita bakal mbuwang siji kanthi manual lan nyekel kaya sing ditindakake ing conto kanggo pitakonan sadurunge:
try{
 throw new CustomException("Oops! Something went wrong =(");
} catch (CustomException e) {
 System.out.println(e.getMessage());
}
Sawise maneh, nalika mbukak kode, kita entuk output ing ngisor iki:
Adhuh! Ana sing salah =(
Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 11 - 5Nah, iku kabeh kanggo dina iki! Ndeleng sampeyan ing bagean sabanjure!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION