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:
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. Lagipun, 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: Iaitu, dalam - perbandingan lama yang baik dengan rujukan! Untuk meringkaskan: untuk enum , perbandingan kedua-duanya melalui == dan sama adalah betul.
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:
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:
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: Dan badan kaedah itu sendiri: Kaedah ordinal() tidak dipanggil di sini. Sebaliknya, pembolehubah ordinal digunakan - nombor ordinal unsur dalam penghitungan. Kaedah ordinal() itu sendiri tidak lebih 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:
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.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. D - 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 | Bacaan hantu | Bacaan tidak berulang | Bacaan kotor | Kemas kini hilang |
---|---|---|---|---|
BOLEH BERSIRI | + | + | + | + |
BACA DIULANG | - | + | + | + |
BACA KOMITED | - | - | + | + |
BACA TAK KOMITED | - | - | - | + |
TIADA | - | - | - | - |
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 .-
Pernyataan digunakan untuk melaksanakan pertanyaan SQL mudah tanpa parameter masuk, dimasukkan secara dinamik. PrepareStatement digunakan dengan keupayaan untuk memasukkan parameter input secara dinamik.
-
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.
-
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 .
-
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 .
GO TO FULL VERSION