CodeGym/Blog Java/rawak/Meneroka soalan dan jawapan daripada temu duga kerja untu...
John Squirrels
Tahap
San Francisco

Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java. Bahagian 8

Diterbitkan dalam kumpulan
Amalan atau teori? Apa yang lebih penting? Ramai orang secara semula jadi akan mengatakan bahawa amalan adalah lebih penting. Suka, berlatih sehingga matahari terbenam dan anda akan gembira. Saya akan berani untuk tidak bersetuju dengan ini. Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 8 - 1Semasa temu duga, tiada siapa yang akan tahu betapa hebatnya anda semasa anda berlatih. Sebaliknya, anda akan diminta untuk menunjukkan teori anda. Ia tidak akan sampai kemudian apabila anda telah melepasi semua lapisan temuduga dan ditugaskan untuk projek, anda akan menggunakan kemahiran praktikal anda. Anda mungkin membantah, mengatakan kadangkala mereka memberi anda tugasan ujian, jadi latihan masih diperlukan. Saya tidak tidak bersetuju, tetapi maksud saya ialah ini KADANG-KADANG, tetapi anda SENTIASA perlu menunjukkan pengetahuan tentang teori dalam temu bual. Adakah anda merasakan perbezaannya? Semua ini bermakna anda mesti mempunyai asas teori yang kukuh di bawah tapak kaki anda, dan itulah yang kami akan terus bina hari ini. Lebih khusus, kita akan terus melihat soalan yang sering ditanya dalam temu bual.

71. Apakah yang berlaku jika kita tidak mengatasi kaedah toString() Enum?

Katakan kita mempunyai enum berikut :
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD;
}
Mari paparkan medan PELAJAR pada konsol dengan memanggil kaedah toString() nya:
System.out.println(Role.STUDENT.toString());
Akibatnya, kami mendapat output konsol berikut:
PELAJAR
Oleh itu, kita melihat bahawa untuk enum , pelaksanaan lalai toString() mengembalikan nama pemalar itu sendiri.

72. Bolehkah anda mengisytiharkan pembina di dalam Enum?

Ya sudah tentu. Pembina ialah apa yang menetapkan nilai medan dalaman enum . Sebagai contoh, mari tambah dua medan pada enum sebelumnya ( ageFrom dan ageTo ) untuk menunjukkan julat umur bagi setiap peranan:
public enum Role {
   STUDENT(5,18),
   TEACHER(20,60),
   DIRECTOR(40,70),
   SECURITY_GUARD(18,50);

   int ageFrom;
   int ageTo;

   Role(int ageFrom, int ageTo) {
       this.ageFrom = ageFrom;
       this.ageTo = ageTo;
   }
}

73. Apakah perbezaan antara == dan equals()?

Ini adalah salah satu soalan wawancara yang paling biasa ditanya kepada bakal pembangun Java. Sebagai permulaan, apabila membandingkan nilai mudah ( int , char , double ...), kami menggunakan == , kerana pembolehubah ini mengandungi nilai konkrit yang boleh dibandingkan secara langsung. Lebih-lebih lagi, pembolehubah primitif bukanlah objek sepenuhnya — mereka tidak mewarisi kelas Objek dan tidak mempunyai kaedah equals() . Jika kita bercakap tentang membandingkan pembolehubah yang merujuk kepada objek, maka kita perlu tahu bahawa == hanya membandingkan nilai rujukan, iaitu sama ada ia merujuk kepada objek yang sama atau tidak. Walaupun semua data dalam satu objek adalah sama dengan semua data dalam satu lagi, menggunakan == untuk perbandingan akan menghasilkan hasil negatif ( false ), kerana ia adalah objek berasingan. Seperti yang anda mungkin telah meneka, kami menggunakan kaedah equals() untuk membandingkan pembolehubah rujukan. Ini adalah salah satu kaedah standard kelas Objek , dan diperlukan untuk perbandingan lengkap objek. Tetapi saya perlu segera mengatakan bahawa untuk kaedah ini berfungsi dengan betul, ia mesti ditindih untuk menunjukkan dengan tepat bagaimana objek harus dibandingkan. Jika anda tidak mengatasi kaedah, maka anda akan mendapat pelaksanaan lalai, yang membandingkan objek menggunakan == . Dalam IntelliJ IDEA, anda boleh mengatasinya secara automatik menggunakan pintasan IDEA: Alt+Insert . Dalam tetingkap yang muncul, pilih equals() dan hashCode() . Kemudian pilih medan yang sepatutnya terlibat. Voila! Kaedah dilaksanakan secara automatik. Berikut ialah contoh cara kaedah sama yang dijana secara automatik mencari kelas Cat yang paling mudah dengan dua medan — umur int dan nama String :
@Override
public boolean equals(final Object o) {
   if (this == o) return true;
   if (o == null || this.getClass() != o.getClass()) return false;
   final Cat cat = (Cat) o;
   return this.age == cat.age &&
           Objects.equals(this.name, cat.name);
}
Apabila ia datang kepada enum , tidak ada perbezaan praktikal antara == dan equals() . Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 8 - 2Lagipun, enum menyimpan pemalar, dan walaupun kita membandingkan nilai yang sama menggunakan == , kita akan mendapat true , kerana rujukan yang dibandingkan akan sentiasa menunjuk kepada objek yang sama. Dan menggunakan equals() memberikan kita hasil yang betul juga. Jika anda pergi ke dalam badan kaedah equals untuk Enum , anda akan melihat bahawa kelas Enum mempunyai pelaksanaan berikut: Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 8 - 3Di dalamnya kita boleh melihat perbandingan rujukan lama yang baik! Untuk meringkaskan, untuk enum s, kita boleh membandingkan dengan betul menggunakan kedua-dua == dan equals() . Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 8 - 4

74. Apakah yang dilakukan oleh kaedah ordinal() Enum?

Apabila kita memanggil kaedah int ordinal() pada medan enum , kita mendapat indeks berasaskan sifar medan dalam senarai nilai enum. Mari kita panggil kaedah ini pada medan dalam enum Peranan , yang sebelum ini kita pertimbangkan:
System.out.println(Role.DIRECTOR.ordinal());
Sehubungan itu, konsol memaparkan:
2

75. Bolehkah Enum digunakan dengan TreeSet atau TreeMap dalam Java?

Kita boleh menggunakan jenis enum dalam TreeSet dan TreeMap . Dan kita boleh menulis ini:
TreeSet<Role> treeSet = new TreeSet<>();
treeSet.add(Role.SECURITY_GUARD);
treeSet.add(Role.DIRECTOR);
treeSet.add(Role.TEACHER);
treeSet.add(Role.STUDENT);
treeSet.forEach(System.out::println);
Dan konsol akan memaparkan:
PENGARAH GURU PELAJAR PENGAWAL KESELAMATAN
Kami mendapat output, tetapi tidak mengikut abjad. Intinya ialah jika kita menggunakan medan enum sebagai nilai TreeSet atau sebagai kekunci TreeMap , maka medan diisih mengikut susunan semula jadinya (dalam susunan ia dinyatakan dalam enum ) . Memahami bahawa ini adalah cara ia berfungsi membantu kami menulis kod yang lebih baik.

76. Bagaimanakah kaedah ordinal() dan compareTo() Enum berkaitan?

Seperti yang dinyatakan sebelum ini, ordinal() mengembalikan indeks medan dalam senarai medan enum. Selain itu, dalam pertimbangan kami terhadap soalan sebelumnya, anda melihat bahawa apabila medan enum dimasukkan ke dalam TreeSet (yang merupakan set yang diisih), mereka mengambil urutan di mana ia diisytiharkan dalam enum . Dan seperti yang kita tahu, TreeSet dan TreeMap mengisih item dengan memanggil kaedah compareTo() antara muka Sebanding mereka . Ini memberitahu kami bahawa kelas Enum melaksanakan antara muka Sebanding , yang bermaksud ia melaksanakan kaedah compareTo() , yang secara dalaman menggunakan kaedah ordinal() untuk menentukan susunan isihan. Masuk ke kelas Enum , kami boleh mengesahkan andaian kami: Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 8 - 5Dan berikut ialah badan kaedah itu sendiri: Kaedah Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 8 - 6ordinal () tidak dipanggil di sini. Sebaliknya, pembolehubah ordinal digunakan, iaitu nombor indeks elemen dalam penghitungan. Kaedah ordinal() itu sendiri Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 8 - 7 tidak lebih daripada pengambil untuk pembolehubah ordinal .

77. Tulis satu contoh Enum

Dalam soalan yang dibincangkan di atas, saya telah memberikan contoh enum s. Saya tidak nampak sebab untuk menduplikasi kod di sini. Sebagai contoh, lihat Soalan 72 mengenai pembina dalam enum.

78. Bolehkah Enum digunakan dalam kotak suis?

Ia boleh dan sepatutnya! Melihat pengalaman saya, saya akan perhatikan bahawa salah satu penggunaan enum yang paling biasa adalah dalam binaan logik seperti pernyataan suis . Dalam kes ini, anda boleh menyediakan semua kemungkinan kes — sebaik sahaja anda menulis logik untuk setiap medan enum , anda tidak memerlukan klausa lalai ! Lagipun, jika anda menggunakan String atau nilai angka, seperti int , anda mungkin menerima nilai yang tidak dijangka, tetapi itu adalah mustahil dengan enum . Berikut ialah rupa pernyataan suis untuk contoh di atas:
public void doSomething(Role role) {
   switch (role) {
       case STUDENT:
           // some logic for STUDENT
           break;
       case TEACHER:
           // some logic for TEACHER
           break;
       case DIRECTOR:
           // some logic for DIRECTOR
           break;
       case SECURITY_GUARD:
           // some logic for SECURITY_GUARD
           break;
   }
}

79. Bagaimanakah saya boleh mendapatkan semua kemungkinan nilai Enum?

Jika anda perlu mendapatkan semua nilai enum yang mungkin, terdapat kaedah values() , yang mengembalikan tatasusunan semua nilai yang mungkin untuk enum dalam susunan semula jadinya (iaitu, dalam susunan yang dinyatakan dalam enum ) . Contoh:
Role[] roles = Role.values();
for (Role role : roles) {
   System.out.println(role);
}
Kami akan mempunyai berikut pada konsol:
PENGARAH GURU PELAJAR PENGAWAL KESELAMATAN

API Strim

80. Apakah itu Aliran di Jawa?

Java Stream API ialah cara yang agak baharu untuk berinteraksi dengan aliran data, membolehkan kami memproses data besar dengan lebih mudah dan padat, serta memproses data secara selari antara beberapa strim, yang berpotensi meningkatkan prestasi.

81. Namakan sifat utama urus niaga

Topik di sini ialah API Strim, tetapi persoalannya ialah mengenai transaksi. Hmm... Mula-mula, mari kita fahami apa itu transaksi. Transaksi ialah sekumpulan operasi berurutan pada pangkalan data . Ia mewakili unit kerja yang logik. Sesuatu urus niaga boleh dilaksanakan secara bebas daripada urus niaga serentak lain sama ada sepenuhnya dan berjaya, dengan itu mengekalkan integriti data, atau tidak dilaksanakan sama sekali, dalam hal ini ia tidak mempunyai kesan. Urus niaga mempunyai empat sifat utama, yang boleh kita ingat dengan mudah terima kasih kepada akronim ACID . Mari lihat maksud setiap huruf bagi akronim ini: A adalah singkatan kepada Atomicity . Harta ini menjamin bahawa tiada transaksi dilakukan sebahagiannya dalam sistem. Sama ada semua suboperasinya akan dilaksanakan, atau tiada satu pun daripadanya akan dilaksanakan ( semua atau tiada ). С bermaksud Konsistensi . Harta ini menjamin bahawa setiap transaksi yang berjaya hanya akan menghasilkan hasil yang sah. Dengan kata lain, ini adalah jaminan bahawa jika transaksi berjaya, maka semua peraturan sistem untuk data tertentu akan dipatuhi. Jika transaksi tidak berjaya, maka ia tidak akan dilaksanakan dan data sistem akan kembali ke keadaan sebelumnya. Saya bermaksud Pengasingan . Harta ini bermakna apabila urus niaga dilaksanakan, urus niaga serentak tidak boleh menjejaskan hasilnya. Harta ini intensif sumber, jadi, sebagai peraturan, ia dilaksanakan sebahagiannya, membenarkan tahap pengasingan tertentu yang menyelesaikan masalah pengasingan tertentu. Kami akan membincangkan perkara ini dengan lebih terperinci dalam soalan seterusnya. D bermaksud Ketahanan . Harta ini menjamin bahawa jika pengguna menerima pengesahan bahawa transaksi telah selesai, maka dia boleh yakin bahawa perubahan itu tidak akan dibatalkan kerana beberapa kegagalan. Iaitu, anda boleh yakin bahawa beberapa kegagalan sistem pengendalian tidak akan melakukan apa-apa kepada data anda jika anda telah menerima pengesahan bahawa transaksi anda berjaya diselesaikan.

82. Apakah tahap pengasingan transaksi?

Seperti yang saya katakan sebelum ini, apabila ia berkaitan dengan sifat ACID, memastikan pengasingan adalah proses intensif sumber. Sehubungan itu, harta ini sebahagiannya dilaksanakan. Terdapat tahap pengasingan yang berbeza: lebih tinggi tahap, lebih teruk kesan ke atas prestasi. Sebelum kita beralih ke tahap pengasingan transaksi, kita perlu mempertimbangkan pelbagai masalah yang berlaku disebabkan pengasingan transaksi yang tidak mencukupi :
  • phantom berbunyi : apabila permintaan yang sama, dipanggil lebih daripada sekali dalam satu transaksi, menghasilkan keputusan yang berbeza disebabkan oleh sisipan oleh transaksi lain;

  • nonrepeatable reads : apabila permintaan yang sama, dipanggil lebih daripada sekali dalam satu transaksi, menghasilkan data yang berbeza disebabkan oleh perubahan (kemas kini) dan pemadaman oleh transaksi lain;

  • bacaan kotor : membaca data yang belum dikomitkan yang telah ditambah atau diubah suai oleh transaksi dan kemudiannya digulung semula;

  • kemas kini hilang : apabila satu blok data ditukar secara serentak oleh transaksi yang berbeza, dan semua perubahan kecuali yang terakhir hilang (serupa dengan keadaan perlumbaan dalam multithreading).

Apabila ia berlaku, tahap pengasingan transaksi dicirikan oleh masalah pengasingan yang mereka lindungi. Pertimbangkan jadual tahap pengasingan berikut dan masalah yang dilindungi daripadanya:
Tahap pengasingan Hantu membaca Bacaan tidak boleh diulang Bacaan kotor Kemas kini hilang
BOLEH BERSIRI + + + +
BACA DIULANG - + + +
BACA KOMITED - - + +
BACA TAK KOMITED - - - +
TIADA - - - -
Dan jangan lupa sisi lain: lebih tinggi tahap pengasingan, lebih lama urus niaga mengambil masa untuk diproses (memandangkan pelaksanaan selari berbilang transaksi).

83. Apakah perbezaan antara Penyata dan Penyata Disediakan?

Di sini kami telah menukar peralihan kepada ciri JDBC secara tiba-tiba . Walau apa pun, mari kita fikirkan dahulu apa itu Pernyataan . Ia adalah objek yang digunakan untuk membentuk pertanyaan SQL. JDBC menggunakan tiga jenis: Statement , PreparedStatement , dan CallableStatement . Kami tidak akan mempertimbangkan CallableStatement hari ini. Sebaliknya, kita bercakap tentang perbezaan antara Statement dan PreparedStatement .
  1. Pernyataan digunakan untuk melaksanakan pertanyaan SQL mudah tanpa parameter input masa jalan. PrepareStatement boleh menerima parameter input semasa runtime.

  2. Untuk menetapkan parameter untuk PreparedStatement , parameter input ditulis sebagai tanda soal dalam permintaan, jadi ia boleh digantikan dengan beberapa nilai menggunakan pelbagai setters, seperti setDouble() , setFloat() , setInt() , setTime() ... Ini bermakna anda tidak akan memasukkan jenis data yang salah ke dalam permintaan.

  3. PreparedStatement diprakompil dan menggunakan caching, jadi ia boleh dilaksanakan lebih cepat sedikit daripada permintaan yang dibuat terhadap objek Pernyataan . Akibatnya, penyataan SQL yang kerap dilaksanakan dibuat sebagai objek PreparedStatement untuk meningkatkan prestasi.

  4. Kenyataan terdedah kepada suntikan SQL, tetapi PreparedStatement menghalangnya.

Dan dengan itu, kami akan memanggilnya sehari!
Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi