JavaRush /Blog Java /Random-MS /Analisis soalan dan jawapan daripada temu bual untuk pemb...

Analisis soalan dan jawapan daripada temu bual untuk pembangun Java. Bahagian 8

Diterbitkan dalam kumpulan
Amalan atau teori? Apa yang lebih penting? Ramai yang akan mengatakan bahawa, sudah tentu, amalan lebih penting. Suka, berlatih sekeras mungkin dan anda akan gembira. Saya berani tidak bersetuju dengan ini. Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 8 - 1Semasa temu duga, tiada siapa yang akan tahu sejauh mana anda berlatih. Anda akan ditanya dengan panjang lebar dengan tepat mengikut teori. Dan hanya selepas itu, apabila anda melalui semua pusingan temu duga dan masuk ke dalam projek, anda akan menggunakan kemahiran praktikal anda. Anda boleh membantah: kadangkala mereka memberi anda tugasan ujian dan latihan masih diperlukan. Saya tidak membantah, mereka kadang-kadang diberikan, tetapi hakikatnya KADANG-KADANG, tetapi temu bual teori SENTIASA berlaku. Adakah anda merasakan perbezaannya? Oleh itu, anda mesti mempunyai asas teori yang kukuh di bawah kaki anda, yang akan terus kami perkukuhkan hari ini. Iaitu, kami akan terus menganalisis soalan yang sering ditanya semasa temuduga.

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

Katakan kita mempunyai enum berikut :
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD;
}
Mari paparkan pelajar dalam konsol dengan memanggil toString() padanya :
System.out.println(Role.STUDENT.toString());
Keputusan dalam konsol:
PELAJAR
Iaitu, secara lalai, toString() untuk enum ialah nama pemalar itu sendiri.

72. Adakah mungkin untuk menentukan pembina di dalam Enum?

Ya pasti. Ia adalah melalui pembina bahawa nilai pembolehubah enum dalaman ditetapkan. Sebagai contoh, mari tambahkan 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 pembangun Java yang paling biasa. Mari kita mulakan dengan fakta bahawa apabila kita membandingkan nilai mudah ( int , char , double ...), kita melakukannya menggunakan == , kerana pembolehubah mengandungi nilai tertentu dan kita boleh membandingkannya. Dan pembolehubah primitif bukan objek sepenuhnya - mereka tidak mewarisi daripada Object dan tidak mempunyai kaedah equals() . Apabila kita bercakap tentang membandingkan pembolehubah yang merujuk kepada objek, == hanya akan membandingkan nilai rujukan - sama ada merujuk kepada objek yang sama atau tidak. Dan walaupun satu objek adalah sama dengan yang lain, perbandingan melalui == akan memberikan hasil negatif ( false ), kerana ini adalah objek yang berbeza. Seperti yang anda fahami, kaedah equals() digunakan untuk membandingkan pembolehubah rujukan . Ini adalah salah satu kaedah standard kelas Objek , yang diperlukan untuk perbandingan lengkap objek. Tetapi ia patut dijelaskan dengan segera: untuk kaedah ini berfungsi dengan betul, ia perlu ditakrifkan semula dengan menulis dengan tepat bagaimana objek kelas ini harus dibandingkan. Melainkan anda mengatasi kaedah tersebut, secara lalai ia akan membandingkan objek dengan == . Dalam IntelliJ IDEA , anda boleh mengatasinya secara automatik (menggunakan alat IDEA) -> alt + insert , dalam tetingkap yang muncul, pilih equals() dan hashCode() -> pilih medan kelas mana yang patut sertai -> dan voila, pelaksanaan automatik kaedah selesai. Berikut ialah contoh kaedah sama yang dijana secara automatik untuk kelas Cat 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);
}
Jika kita bercakap tentang perbezaan antara == dan sama dengan enums , tidak banyak. Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 8 - 2Lagipun, enum menyimpan pemalar, dan walaupun membandingkan nilai yang serupa menggunakan == , kami akan menerima true , kerana rujukan akan sentiasa kepada objek yang sama. Nah, apabila menggunakan equals, kami juga akan menjalankan fungsi dengan betul, terutamanya jika anda pergi ke dalam badan kaedah equals untuk enum , anda akan melihat bahawa dalam kelas Enum pelaksanaan kaedah adalah seperti berikut: Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 8 - 3Iaitu, dalam - perbandingan lama yang baik dengan rujukan! Untuk meringkaskan: untuk enum , perbandingan kedua-duanya melalui == dan sama adalah betul.Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 8 - 4

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

Apabila memanggil kaedah int ordinal() pada elemen enum , kita akan mendapat nombor ordinal daripada sifar nilai ini dalam siri umum penghitungan. Mari kita gunakan kaedah ini pada satu elemen dari enum sebelumnya yang dibincangkan - Peranan :
System.out.println(Role.DIRECTOR.ordinal());
Sehubungan itu, konsol akan memaparkan:
2

75. Adakah mungkin untuk menggunakan Enum dengan TreeSet atau TreeMap dalam Java?

Penggunaan jenis enum dalam TreeSet dan TreeMap boleh diterima. Dan kita boleh menulis:
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 menerima output bukan dalam susunan abjad. Intinya ialah jika kita menggunakan elemen enum untuk nilai TreeSet ​​atau sebagai kunci untuk TreeMap , unsur-unsur tersebut diisih mengikut susunan semula jadinya (urutan di mana ia dinyatakan dalam enum ). Memahami ciri ini membantu kami menulis kod yang lebih baik.Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 8 - 5

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

Seperti yang dinyatakan sebelum ini, ordinal() mengembalikan nombor ordinal nilai dalam senarai penghitungan umum. Juga, dalam analisis soalan sebelumnya, anda melihat bahawa unsur-unsur penghitungan, sekali, sebagai contoh, dalam TreeSet (set diisih) mengambil susunan di mana ia diisytiharkan dalam enum . Dan seperti yang kita tahu, TreeSet dan TreeMap menyusun elemen dengan memanggil kaedah compareTo() mereka bagi antara muka Sebanding . Daripada ini, kita boleh menganggap bahawa kelas Enum melaksanakan antara muka Sebanding , melaksanakannya dalam kaedah compareTo() , di mana ordinal() digunakan untuk menetapkan susunan isihan. Setelah memasuki kelas Enum , kita melihat pengesahan ini: Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 8 - 6Dan badan kaedah itu sendiri: Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 8 - 7Kaedah ordinal() tidak dipanggil di sini. Sebaliknya, pembolehubah ordinal digunakan - nombor ordinal unsur dalam penghitungan. Kaedah ordinal() itu sendiri tidak Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 8 - 8lebih daripada pengambil untuk pembolehubah ordinal .

77. Tulis satu contoh EnumM

Dalam soalan yang dibincangkan di atas, saya sudah memberikan contoh enum dan saya tidak nampak gunanya menduplikasi kod (contohnya, soalan nombor 72 tentang pembina dalam enum).

78. Adakah mungkin untuk menggunakan Enum dalam bekas suis?

Ia mungkin dan perlu! Melihat kembali amalan saya, saya perhatikan bahawa salah satu tempat yang paling biasa untuk menggunakan enum ialah binaan logik seperti switch . Dalam kes ini, anda boleh menyediakan semua kemungkinan variasi kes , dan selepas menulis logik untuk semua nilai enum - dan menggunakan operator lalai mungkin tidak diperlukan! Lagipun, jika anda menggunakan String atau nilai angka, sebagai contoh, jenis int , anda mungkin menerima nilai yang tidak dijangka, yang seterusnya adalah mustahil menggunakan enum . Apakah rupa suis untuk contoh yang dibincangkan sebelum ini:
public void doSomething(Role role) {
   switch (role) {
       case STUDENT:
           // некая логика для STUDENT
           break;
       case TEACHER:
           // некая логика для TEACHER
           break;
       case DIRECTOR:
           // некая логика для DIRECTOR
           break;
       case SECURITY_GUARD:
           // некая логика для SECURITY_GUARD
           break;
   }
}

79. Bagaimana untuk mendapatkan semua nilai yang tersedia dalam contoh Enum?

Jika anda perlu mendapatkan semua contoh penghitungan, terdapat kaedah values() yang mengembalikan tatasusunan semua nilai yang tersedia bagi enum tertentu dalam susunan semula jadi (dalam susunan yang dinyatakan dalam enum ). Contoh:
Role[] roles = Role.values();
for (Role role : roles) {
   System.out.println(role);
}
Konsol akan memaparkan output berikut:
PENGARAH GURU PELAJAR PENGAWAL KESELAMATAN

API Strim

80.Apakah itu Stream dalam Java?

Java Stream ialah cara yang agak baharu untuk berinteraksi dengan strim data, yang seterusnya membolehkan anda memproses data yang besar dengan lebih mudah dan padat, serta menyelaraskan pemprosesan data antara beberapa utas, yang boleh meningkatkan prestasi dalam penggunaan kefungsian. Topik ini tidak boleh dibincangkan dengan lebih mendalam secara ringkas, jadi saya akan meninggalkan di sini pautan ke artikel yang boleh membantu anda menyelami topik ini.Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 8 - 9

81. Apakah sifat utama urus niaga?

Topik ini dipanggil Stream API, tetapi persoalannya adalah mengenai transaksi. Hmm... Mula-mula, mari kita fikirkan apa itu urus niaga. Transaksi ialah sekumpulan operasi pangkalan data berjujukan yang mewakili unit logik bekerja dengan data. Sesuatu urus niaga boleh diselesaikan sama ada sepenuhnya dan berjaya, mengekalkan integriti data dan bebas daripada transaksi lain yang berjalan selari, atau ia tidak boleh diselesaikan sama sekali, dalam hal ini ia tidak mempunyai kesan. Jadi, urus niaga mempunyai empat sifat utama, yang dipanggil ACID untuk jangka pendek . Mari lihat bagaimana setiap huruf singkatan ini bermaksud: A - Atomicity - atomicity - sifat ini menjamin bahawa tiada transaksi akan direkodkan sebahagiannya dalam sistem. Sama ada semua sub-operasinya akan dilakukan, atau tiada satu pun akan dilakukan ( semua atau tiada ). C - Konsistensi - konsistensi ialah sifat yang memastikan setiap transaksi yang berjaya merekodkan hasil yang sah sahaja. Iaitu, ini adalah jaminan bahawa sekiranya transaksi berjaya, semua peraturan dan sekatan yang dikenakan oleh sistem pada data tertentu akan dipenuhi, jika tidak, transaksi tidak akan selesai dan data dalam sistem akan kembali ke sebelumnya. negeri. I - Pengasingan - pengasingan ialah harta yang mengatakan bahawa semasa pelaksanaan transaksi, transaksi selari tidak boleh menjejaskan keputusannya. Sifat ini intensif sumber, jadi ia biasanya dilaksanakan sebahagiannya dengan membenarkan tahap penebat tertentu yang menyelesaikan masalah penebat tertentu. Kami akan membincangkan perkara ini dengan lebih terperinci dalam soalan seterusnya. Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 8 - 10D - Ketahanan - sifat ini memastikan bahawa jika pengguna telah menerima pengesahan daripada sistem bahawa transaksi telah selesai, dia boleh memastikan bahawa perubahan yang telah dibuatnya tidak akan dibatalkan kerana beberapa kegagalan. Iaitu, anda boleh yakin bahawa beberapa jenis kegagalan sistem pengendalian tidak akan melakukan apa-apa kepada data anda jika anda telah menerima pengesahan kejayaan menyelesaikan transaksi anda.

82. Apakah tahap pengasingan transaksi?

Seperti yang saya katakan sebelum ini, menyediakan pengasingan ACID adalah proses intensif sumber. Oleh itu, harta ini sebahagiannya berpuas hati. Terdapat tahap pengasingan yang berbeza, dan semakin tinggi tahap tersebut, semakin besar kesannya terhadap produktiviti. Sebelum beralih ke tahap pengasingan transaksi, kita perlu melihat pelbagai masalah pengasingan transaksi yang tidak mencukupi :
  • bacaan hantu - apabila sampel yang sama (pertanyaan yang sama) dipanggil berulang kali dalam transaksi yang sama, data yang diterima berbeza, yang berlaku disebabkan oleh sisipan data oleh transaksi lain;

  • bacaan tidak berulang - apabila sampel yang sama (pertanyaan yang sama) dipanggil berulang kali dalam transaksi yang sama, data yang diterima berbeza, yang berlaku disebabkan oleh perubahan (kemas kini) dan pemadaman data oleh transaksi lain;

  • bacaan kotor - proses membaca data ditambah atau diubah oleh transaksi yang kemudiannya tidak disahkan (digulung semula), i.e. membaca data tidak sah;

  • kemas kini hilang - apabila transaksi berbeza menukar data yang sama pada masa yang sama, semua perubahan kecuali yang terakhir hilang (mengingati masalah "keadaan perlumbaan" dalam persekitaran berbilang benang).

Tahap pengasingan transaksi dicirikan oleh masalah pengasingan yang mereka lindungi. Mari kita pertimbangkan dalam bentuk jadual tahap penebat dan masalah apa yang mereka lindungi:
Tahap pengasingan Bacaan hantu Bacaan tidak berulang Bacaan kotor Kemas kini hilang
BOLEH BERSIRI + + + +
BACA DIULANG - + + +
BACA KOMITED - - + +
BACA TAK KOMITED - - - +
TIADA - - - -
Dan jangan lupa sisi lain syiling: semakin tinggi tahap pengasingan, lebih lama urus niaga akan diambil untuk diproses (jika beberapa urus niaga dilaksanakan secara selari). Jika anda ingin mendalami topik ini, berikut ialah artikel yang bagus untuk anda bermula.

83. Apakah perbezaan antara Penyata dan Penyata Disediakan?

Dan di sini peralihan kepada ciri teknologi JDBC tidak begitu lancar . Jadi, mula-mula, mari kita fikirkan apakah Penyata sebenarnya . Ini adalah objek yang digunakan untuk menjana pertanyaan SQL. JDBC menggunakan tiga jenis - Statement , PreparedStatement dan CallableStatement . Kami tidak akan melihat CallableStatement hari ini: mari kita bincangkan tentang perbezaan antara Statement dan PreparedStatement .
  1. Pernyataan digunakan untuk melaksanakan pertanyaan SQL mudah tanpa parameter masuk, dimasukkan secara dinamik. PrepareStatement digunakan dengan keupayaan untuk memasukkan parameter input secara dinamik.

  2. Untuk menetapkan parameter dalam PreparedStatement, parameter input dalam permintaan ditulis sebagai tanda soal, untuk kemudian memasukkan beberapa nilai dan bukannya mereka menggunakan pelbagai setters, seperti setDouble() , setFloat() , setInt() , setTime() .. .. Akibatnya, anda tidak akan memasukkan jenis data yang salah ke dalam pertanyaan anda.

  3. PreparedStatement adalah "precompiled" dan menggunakan caching, jadi pelaksanaannya boleh lebih cepat sedikit daripada pertanyaan daripada Statement objects . Akibatnya, pertanyaan SQL yang kerap dilaksanakan ditulis sebagai objek PreparedStatement untuk meningkatkan prestasi .

  4. Kenyataan terdedah kepada suntikan SQL, manakala PreparedStatement menghalangnya. Baca lebih lanjut mengenai menghapuskan suntikan SQL dan amalan terbaik lain dalam keselamatan Java dalam artikel ini .

Jika anda mula mempelajari teknologi untuk menyambungkan aplikasi Java ke Pangkalan Data - JDBC, saya menasihati anda untuk memulakan dengan artikel ini . Nah, pada ketika ini kita akan berhenti hari ini.Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 11
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION