JavaRush /Blog Jawa /Random-JV /Analisis pitakonan lan wangsulan saka wawancara kanggo pa...

Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa. Bagean 11

Diterbitake ing grup
Hello! Malah kapal paling cepet tanpa dalan mung bakal mabur ing ombak. Yen sampeyan maca artikelku saiki, sampeyan mesthi duwe tujuan. Sing utama ora kesasar, nanging tindakake garis sampeyan nganti pungkasan - dadi pangembang Java. Dina iki aku pengin nerusake analisis babagan 250+ pitakonan kanggo pangembang Java, sing bakal mbantu sampeyan nutupi sawetara kesenjangan ing teori kasebut. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 11 - 1

97. Apa kahanan redefinition persetujuan dileksanakake nalika redefining Equals?

Metode equals() sing ditindhes kudu tundhuk karo kahanan (aturan) ing ngisor iki:
  • reflexivity - kanggo sembarang nilai x, ekspresi kaya x.equals(x) kudu tansah bali bener (nalika x != null ).

  • simetri - kanggo sembarang nilai x lan y, ekspresi saka wangun 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, telpon bola-bali menyang x.equals(y) bakal tansah ngasilake nilai telpon sadurunge kanggo metode iki, kasedhiya yen kolom digunakake kanggo mbandhingaké rong obyek ora diganti antarane telpon. .

  • comparison null - kanggo sembarang Nilai x, nelpon x.equals(null) bakal bali palsu .

98. Apa sing kedadeyan yen sampeyan ora ngilangi Equals lan HashCode?

Ing kasus iki, hashCode () bakal ngasilake nomer sing digawe adhedhasar lokasi memori ing ngendi obyek kasebut disimpen. Yaiku, rong obyek kanthi kolom sing padha bakal nampa nilai sing beda nalika nelpon kode hash () sing ora ditimpa (sawise kabeh, disimpen ing lokasi memori sing beda). The unoverridden witjaksono () mbandhingaké referensi kanggo ndeleng apa padha nuding obyek padha utawa ora. Sing, comparison digawe liwat == , lan ing cilik saka obyek karo kolom padha bakal tansah bali palsu . Bener mung nalika mbandhingake referensi menyang obyek sing padha. Kadhangkala ana logika kanggo ora ngatasi metode kasebut. Contone, sampeyan pengin kabeh obyek saka kelas tartamtu dadi unik lan overriding cara iki mung bakal ngrusak logika uniqueness. Ingkang utama yaiku mangertos nuansa metode sing ditimpa lan ora ditindhes lan nggunakake pendekatan loro kasebut gumantung saka kahanan kasebut.

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

Pitakonan sing 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 ngelawan bisa? Iki logika prasaja. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 11 - 2

100. Apa tabrakan ing HashCode? Carane menehi hasil karo?

Tabrakan kode hash yaiku kahanan ing ngendi rong obyek sing beda nduweni nilai kode hash sing padha . Carane iki bisa? Kasunyatane yaiku kode hash dipetakan menyang jinis Integer , sing uga duwe sawetara saka -2147483648 nganti 2147483647, yaiku, kira-kira 4 milyar integer beda. Kisaran iki ageng, nanging ora tanpa wates. Mulane, kahanan bisa uga nalika rong obyek sing beda duwe kode hash sing padha. Iki banget ora mungkin, nanging bisa. Fungsi hash sing ora ditindakake uga bisa nambah frekuensi kode hash sing padha, sing bakal, contone, ngasilake nomer ing sawetara cilik, sing bakal nambah kemungkinan tabrakan. Kanggo nglawan tabrakan, sampeyan kudu duwe implementasine metode hashCode sing apik supaya panyebaran nilai maksimal lan kemungkinan mbaleni nilai minimal.

101. Apa sing kedadeyan yen unsur sing melu kontrak HashCode ngganti regane?

Yen unsur sing melu ngetung kode hash wis diganti, banjur kode hash obyek kasebut dhewe bakal diganti (yen fungsi hash apik). Mulane, ing HashMap disaranake nggunakake obyek sing ora bisa diganti (ora bisa diganti) minangka kunci, amarga negara internal (kolom) ora bisa diganti sawise digawe. Mulane, kode hash uga ora diowahi sawise digawe. Yen sampeyan nggunakake obyek sing bisa diowahi minangka kunci, banjur nalika sampeyan ngganti kolom obyek iki, kode hash bakal diganti lan, minangka asil, sampeyan bisa ilang pasangan iki ing HashMap . Sawise kabeh, bakal disimpen ing ember kanggo kode hash asli, lan sawise ngganti, bakal digoleki ing ember liyane. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 11 - 3

102. Tulis metode Equals lan HashCode kanggo kelas Siswa, sing kalebu kolom jeneng String lan 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 karo:
  • Kaping pisanan, kita mbandhingake pranala langsung, amarga yen pranala menyang obyek sing padha, apa gunane nerusake mriksa? Kabeh bakal bener .

  • Priksa null lan jinis kelas sing cocog, amarga yen obyek minangka argumentasi null utawa jinis liyane, iki tegese obyek kasebut ora padha - palsu .

  • Casting obyek argumentasi menyang siji jinis (yen ana obyek saka jinis induk).

  • Perbandingan lapangan kelas primitif (sawise kabeh, comparison liwat =! cukup kanggo iku ), yen lapangan ora padha - palsu .

  • Mriksa kolom non-primitif kanggo null lan padha (ing String cara ditimpa lan bakal mbandhingaké bener), yen loro kolom null utawa padha , banjur mriksa ends lan cara bali bener .

Kode Hash:
  • Nyetel nilai kode hash awal menyang primitif umur obyek .

  • Nikelake kode hash saiki kanthi 31 (kanggo panyebaran luwih akeh) lan nambahake kode hash saka kolom string non-primitif (yen ora null).

  • Ngasilake asil.

  • Minangka asil override kode hash iki, obyek kanthi jeneng lan nilai int sing padha bakal ngasilake nilai sing padha.

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

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

  • getClass() == ... mriksa identitas jinis.

Yaiku, yen getClass () mriksa identitas lengkap sawijining kelas, mula instanceof bakal bali bener sanajan obyek kasebut mung subtipe, sing bisa menehi keluwesan luwih akeh nalika nggunakake polimorfisme kanthi aktif. Bener, loro pendekatan kasebut apik yen sampeyan ngerti fitur karyane lan ditrapake ing papan sing bener.

104. Menehi gambaran singkat saka clone () cara.

Klone () minangka cara saka kelas Obyek , tujuane kanggo nggawe lan ngasilake klon saka obyek saiki (salinan saka obyek saiki). Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 11 - 4Kanggo nggunakake, sampeyan kudu ngleksanakake antarmuka panandha Cloneable :
Student implements Cloneable
Lan ngganti metode clone() dhewe :
@Override
protected Object clone() throws CloneNotSupportedException {
 return super.clone();
}
Sawise kabeh, ing kelas Obyek dilindhungi, yaiku, bakal katon mung ing kelas Siswa dhewe , nanging ora katon ing kelas saka njaba.

105. Apa peculiarity saka clone () cara digunakake karo kothak obyek saka jinis referensi?

Nalika kloning obyek, mung nilai primitif lan nilai referensi obyek sing disalin. Iki tegese yen obyek duwe pranala menyang obyek liyane ing lapangan internal, banjur mung link iki bakal kloning, nanging obyek liyane dhewe ora bakal kloning. Nyatane, iki sing diarani kloning permukaan. Nah, kepiye yen sampeyan butuh kloning lengkap kanthi kloning kabeh obyek sing bersarang? Kepiye mesthekake yen iki dudu salinan pranala, nanging klone lengkap obyek karo sel memori liyane sing dikuwasani ing tumpukan kasebut? Ing kasunyatan, kabeh iku cukup prasaja - kanggo iki sampeyan uga kudu ngalahake clone () cara ing saben kelas obyek internal iki lan nambah antarmuka panandha - Cloneable . Banjur ora bakal dadi referensi kanggo obyek sing bakal disalin, nanging obyek kasebut dhewe, amarga saiki uga duwe kemampuan kanggo nyalin awake dhewe.

Pangecualian

106. Apa bedane kesalahan lan pengecualian?

Pangecualian lan kasalahan iku subclass saka kelas Throwable . Nanging, dheweke duwe bedane. Kesalahan kasebut nuduhake masalah sing kedadeyan utamane amarga sumber daya sistem sing ora cukup. Lan aplikasi kita ngirim ora ndeteksi jinis masalah iki. Sawetara conto kasalahan yaiku kacilakan sistem lan kesalahan memori. Kesalahan biasane kedadeyan nalika runtime amarga jinis sing ora dicenthang. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 11 - 5Pangecualian minangka masalah sing bisa kedadeyan nalika runtime lan ing wektu kompilasi. Biasane iki kedadeyan ing kode sing ditulis dening pangembang. Tegese, pangecualian luwih bisa diprediksi lan luwih gumantung marang kita minangka pangembang. Ing wektu sing padha, kesalahan luwih acak lan luwih bebas saka kita, nanging gumantung marang masalah karo sistem kasebut dhewe ing ngendi aplikasi kita mlaku.

107. Apa bedane dicenthang lan ora dicenthang, istiméwa, uncalan, uncalan.

Kaya sing dakkandhakake sadurunge, pangecualian minangka kesalahan sajrone eksekusi program lan sajrone kompilasi sing kedadeyan ing kode sing ditulis dening pangembang (amarga sawetara kahanan sing ora normal). Dipriksa minangka jinis pangecualian sing kudu ditindakake kanthi nggunakake mekanisme nyoba-nyekel utawa dibuwang menyang cara ing ndhuwur. Throws digunakake ing header metode kanggo nunjukake kemungkinan pengecualian sing ditindakake dening metode kasebut. Sing, iki mekanisme kanggo "mbuwang" pangecualian menyang cara ndhuwur. Ora dicenthang minangka jinis pangecualian sing ora perlu ditangani lan biasane kurang bisa diprediksi lan cenderung kedadeyan. Nanging, uga bisa diproses yen dikarepake. Throw digunakake nalika mbuwang pengecualian kanthi manual, contone:
throw new Exception();

108. Apa hierarki pengecualian?

Hierarki pangecualian gedhe banget lan jembar, malah akeh banget kanggo nyritakake kabeh babagan kene. Mulane, kita bakal nimbang mung pranala tombol: Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 11 - 6Kene ing ndhuwur banget hirarki kita ndeleng kelas - Throwable - kelas umum, leluhur saka hirarki pangecualian, kang siji dipérang dadi:
  • Kesalahan - kesalahan kritis, ora bisa dicenthang.
  • Pangecualian - dicenthang pangecualian.
Pengecualian dipérang dadi macem-macem pengecualian runtime sing ora dicenthang lan macem-macem pengecualian sing dicenthang.

109. Apa sing dicenthang lan ora dicenthang pengecualian?

Kaya sing dakkandhakake sadurunge:
  • Dicenthang - pangecualian sing kudu sampeyan lakoni, yaiku, diproses kanthi nyoba - nyekel blok , utawa "terusake" menyang cara ing ndhuwur. Kanggo nindakake iki, ing tandha cara, sawise nyathet argumentasi metode, sampeyan kudu nggunakake trows <exception type> keyword , sing nuduhake pangguna cara yen metode kasebut bisa mbuwang pengecualian iki (kaya bebaya) lan nransfer tanggung jawab kanggo nangani pangecualian kanggo pangguna cara iki.

  • Ora dicenthang - pangecualian sing ora perlu ditangani, amarga ora dicenthang ing wektu kompilasi lan, minangka aturan, luwih ora bisa ditebak. Sing, prabédan utama karo dicenthang iku kanggo wong-wong mau iki nyoba-nyekel utawa mekanisme mbuwang padha, nanging padha ora prentah.

101. Tulis conto nyegat lan nangani pangecualian ing blok try-catch saka cara

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

102. Tulisen tuladha nyekel lan nangani pangecualian nggunakake pangecualianmu dhewe

Pisanan, ayo nulis kelas pangecualian dhewe, sing entuk warisan saka Exception lan ngilangi konstruktor kanthi pesen kesalahan:
public class CustomException extends Exception {

 public CustomException(final String message) {
   super(message);
 }
}
Inggih, banjur kita bakal mbuwang kanthi manual lan nyegat kaya ing pitakonan sadurunge:
try{
 throw new CustomException("Упс, что-то пошло не так =(");
} catch (CustomException e) {
 System.out.println(e.getMessage());
}
Lan maneh, nalika sampeyan mbukak, sampeyan bakal entuk output ing ngisor iki menyang konsol:
Duh, ana sing salah =(
Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 11 - 7Sampeyan bisa ngerteni luwih akeh babagan pangecualian ing kene . Nah, iku kabeh kanggo dina iki! Ndeleng sampeyan ing bagean sabanjure!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION