71. Apa yang terjadi jika kita tidak mengganti metode toString() untuk Enum?
Katakanlah kita memiliki enum berikut :public enum Role {
STUDENT,
TEACHER,
DIRECTOR,
SECURITY_GUARD;
}
Mari kita tampilkan siswa di konsol dengan memanggil toString() padanya :
System.out.println(Role.STUDENT.toString());
Hasil di konsol:
72. Apakah mungkin untuk menentukan konstruktor di dalam Enum?
Ya tentu. Melalui konstruktor nilai variabel enum internal ditetapkan. Sebagai contoh, mari tambahkan dua kolom ke enum sebelumnya - ageFrom dan ageTo - untuk menunjukkan rentang usia untuk setiap peran: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. Apa perbedaan antara == dan sama dengan()?
Ini adalah salah satu pertanyaan wawancara pengembang Java yang paling umum. Mari kita mulai dengan fakta bahwa ketika kita membandingkan nilai sederhana ( int , char , double ...), kita melakukannya menggunakan == , karena variabel berisi nilai tertentu dan kita dapat membandingkannya. Dan variabel primitif bukanlah objek yang lengkap - mereka tidak mewarisi dari Object dan tidak memiliki metode yang sama dengan() . Ketika kita berbicara tentang membandingkan variabel yang merujuk pada objek, == hanya akan membandingkan nilai referensi - apakah mereka merujuk pada objek yang sama atau tidak. Dan meskipun suatu objek identik dengan objek lainnya, perbandingan melalui == akan memberikan hasil negatif ( false ), karena objek tersebut berbeda. Seperti yang Anda pahami, metode sama dengan() digunakan untuk membandingkan variabel referensi . Ini adalah salah satu metode standar kelas Object , yang diperlukan untuk perbandingan objek secara lengkap. Namun perlu segera diklarifikasi: agar metode ini berfungsi dengan benar, metode ini perlu didefinisikan ulang dengan menulis secara tepat bagaimana objek di kelas ini harus dibandingkan. Kecuali Anda mengganti metode ini, secara default metode ini akan membandingkan objek dengan == . Di IntelliJ IDEA , Anda dapat menimpanya secara otomatis (menggunakan alat IDEA) -> alt + insert , di jendela yang muncul, pilih sama dengan() dan hashCode() -> pilih bidang kelas mana yang harus berpartisipasi -> dan voila, implementasi otomatis metodenya selesai. Berikut adalah contoh tampilan metode sama dengan yang dihasilkan secara otomatis untuk kelas Cat sederhana dengan dua bidang - int age dan String name :@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 berbicara tentang perbedaan antara == dan sama dengan untuk enums , tidak banyak. Lagi pula, enum menyimpan konstanta, dan bahkan ketika membandingkan nilai serupa menggunakan == , kita akan mendapatkan true karena referensi akan selalu mengarah ke objek yang sama. Nah, saat menggunakan yang sama, kita juga akan mengerjakan fungsinya dengan benar, terutama jika Anda masuk ke isi metode sama dengan untuk enum , Anda akan melihat bahwa di kelas Enum implementasi metodenya adalah sebagai berikut: Artinya, di dalam - perbandingan lama yang bagus dengan referensi! Untuk meringkas: untuk enum , perbandingan melalui == dan sama dengan adalah benar.
74. Apa yang dilakukan metode ordinal() di Enum?
Saat memanggil metode int ordinal() pada elemen enum , kita akan mendapatkan nomor urut dari nol dari nilai ini dalam rangkaian enumerasi umum. Mari kita gunakan metode ini pada satu elemen dari enum yang dibahas sebelumnya - Role :System.out.println(Role.DIRECTOR.ordinal());
Oleh karena itu, konsol akan menampilkan:
75. Apakah mungkin menggunakan Enum dengan TreeSet atau TreeMap di Java?
Penggunaan tipe enum di TreeSet dan TreeMap dapat diterima. Dan kita dapat 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 menampilkan:
76. Bagaimana hubungan metode ordinal() dan CompareTo() di Enum?
Seperti yang dinyatakan sebelumnya, ordinal() mengembalikan nomor urut suatu nilai dalam daftar enumerasi umum. Selain itu, dalam analisis pertanyaan sebelumnya, Anda melihat bahwa elemen enumerasi, misalnya, sekali dalam TreeSet (kumpulan yang diurutkan) mengambil urutan deklarasinya dalam enum . Dan seperti yang kita ketahui, TreeSet dan TreeMap mengurutkan elemen dengan memanggil metode CompareTo() dari antarmuka Comparable . Dari sini kita dapat berasumsi bahwa kelas Enum mengimplementasikan antarmuka Sebanding , mengimplementasikannya dalam metode bandingkanTo() , di mana ordinal() digunakan untuk mengatur urutan pengurutan. Setelah memasuki kelas Enum , kita melihat konfirmasi ini: Dan isi dari metode itu sendiri: Metode ordinal() tidak dipanggil di sini. Sebagai gantinya, variabel ordinal digunakan - nomor urut elemen dalam enumerasi. Metode ordinal() sendiri tidak lebih dari pengambil variabel ordinal .77. Tuliskan contoh EnumM
Pada soal-soal yang dibahas di atas, saya sudah memberikan contoh enum dan saya tidak melihat ada gunanya menduplikasi kode (misalnya pertanyaan nomor 72 tentang konstruktor di enum).78. Apakah mungkin untuk menggunakan Enum dalam switch case?
Itu mungkin dan perlu! Melihat kembali praktik saya, saya perhatikan bahwa salah satu tempat paling umum untuk menggunakan enum adalah konstruksi logis seperti switch . Dalam hal ini, Anda dapat memberikan semua kemungkinan variasi case , dan setelah menulis logika untuk semua nilai enum - dan menggunakan operator default bahkan mungkin tidak diperlukan! Lagi pula, jika Anda menggunakan String atau nilai numerik, misalnya, bertipe int , Anda mungkin menerima nilai yang tidak diharapkan, yang pada gilirannya tidak mungkin dilakukan menggunakan enum . Seperti apa tampilan saklar pada contoh yang dibahas sebelumnya: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 cara mendapatkan semua nilai yang tersedia dalam instance Enum?
Jika Anda perlu mendapatkan semua contoh enumerasi, ada metode value() yang mengembalikan array dari semua nilai yang tersedia dari enum tertentu dalam urutan alami (dalam urutan yang ditentukan dalam enum ). Contoh:Role[] roles = Role.values();
for (Role role : roles) {
System.out.println(role);
}
Konsol akan menampilkan output berikut:
Aliran API
80.Apa itu Aliran di Jawa?
Java Stream adalah cara yang relatif baru untuk berinteraksi dengan aliran data, yang pada gilirannya memungkinkan Anda memproses data besar dengan lebih nyaman dan kompak, serta memparalelkan pemrosesan data antara sejumlah thread tertentu, yang dapat memberikan peningkatan kinerja dalam penggunaan. Kegunaan. Topik ini tidak dapat dibahas lebih dalam secara singkat, jadi di sini saya akan meninggalkan tautan ke artikel yang dapat membantu Anda mendalami topik ini.81. Apa saja sifat utama transaksi?
Topiknya disebut Stream API, tetapi pertanyaannya adalah tentang transaksi. Hmm... Pertama, mari kita pahami dulu apa itu transaksi. Transaksi adalah sekelompok operasi database berurutan yang mewakili unit logis bekerja dengan data. Suatu transaksi dapat diselesaikan secara keseluruhan dan berhasil, menjaga integritas data dan independen dari transaksi lain yang berjalan secara paralel, atau transaksi tersebut tidak dapat diselesaikan sama sekali, dalam hal ini transaksi tersebut tidak berpengaruh. Jadi, transaksi memiliki empat sifat utama, yang disingkat ACID . Mari kita lihat singkatan setiap huruf dari singkatan ini: A - Atomicity - atomisitas - properti ini menjamin bahwa tidak ada transaksi yang akan dicatat sebagian dalam sistem. Semua sub-operasinya akan dilakukan, atau tidak ada satu pun yang akan dilakukan ( semua atau tidak sama sekali ). C - Konsistensi - konsistensi adalah properti yang memastikan bahwa setiap transaksi yang berhasil hanya mencatat hasil yang valid. Artinya, ini adalah jaminan bahwa jika transaksi berhasil, semua aturan dan batasan yang diberlakukan sistem pada data tertentu akan terpenuhi, jika tidak, transaksi tidak akan selesai dan data dalam sistem akan kembali ke kondisi sebelumnya. negara. I - Isolasi - isolasi adalah properti yang menyatakan bahwa selama pelaksanaan suatu transaksi, transaksi paralel tidak boleh mempengaruhi hasilnya. Properti ini membutuhkan banyak sumber daya, sehingga biasanya diterapkan sebagian dengan mengizinkan tingkat isolasi tertentu yang memecahkan masalah isolasi tertentu. Kami akan membahas ini lebih detail pada pertanyaan berikutnya. D - Daya Tahan - properti ini memastikan bahwa jika pengguna telah menerima konfirmasi dari sistem bahwa transaksi telah selesai, ia dapat yakin bahwa perubahan yang dilakukannya tidak akan dibatalkan karena suatu kegagalan. Artinya, Anda dapat yakin bahwa beberapa jenis kegagalan sistem operasi tidak akan berdampak apa pun terhadap data Anda jika Anda telah menerima konfirmasi keberhasilan penyelesaian transaksi Anda.82. Berapa tingkat isolasi transaksinya?
Seperti yang saya katakan sebelumnya, menyediakan isolasi ACID adalah proses yang membutuhkan banyak sumber daya. Oleh karena itu, properti ini terpenuhi sebagian. Terdapat berbagai tingkat isolasi, dan semakin tinggi tingkat isolasi, semakin besar dampaknya terhadap produktivitas. Sebelum beralih ke tingkat isolasi transaksi, kita perlu melihat berbagai masalah isolasi transaksi yang tidak mencukupi :-
pembacaan hantu - ketika sampel yang sama (kueri yang sama) dipanggil berulang kali dalam transaksi yang sama, data yang diterima berbeda, yang terjadi karena penyisipan data oleh transaksi lain;
-
pembacaan tidak berulang - ketika sampel yang sama (kueri yang sama) dipanggil berulang kali dalam transaksi yang sama, data yang diterima berbeda, yang terjadi karena perubahan (pembaruan) dan penghapusan data oleh transaksi lain;
-
pembacaan kotor - proses membaca data yang ditambahkan atau diubah oleh suatu transaksi yang kemudian tidak dikonfirmasi (diputar kembali), mis. membaca data yang tidak valid;
-
pembaruan yang hilang - ketika transaksi yang berbeda mengubah data yang sama pada saat yang sama, semua perubahan kecuali yang terakhir akan hilang (mengingatkan pada masalah "kondisi balapan" di lingkungan multi-thread).
Tingkat isolasi | Pembacaan hantu | Membaca tidak berulang-ulang | Bacaan kotor | Pembaruan hilang |
---|---|---|---|---|
DAPAT DISERIALKAN | + | + | + | + |
BACAAN YANG DAPAT DIULANG | - | + | + | + |
BACA BERKOMITMEN | - | - | + | + |
BACA TANPA KOMITMEN | - | - | - | + |
TIDAK ADA | - | - | - | - |
83. Apa perbedaan antara Pernyataan dan Pernyataan yang Disiapkan?
Dan di sini transisi ke fitur teknologi JDBC tidak terlalu mulus . Jadi, pertama-tama, mari kita cari tahu apa sebenarnya Statement itu . Ini adalah objek yang digunakan untuk menghasilkan kueri SQL. JDBC menggunakan tiga tipe - Statement , PreparedStatement dan CallableStatement . Kita tidak akan membahas CallableStatement hari ini: mari kita bahas perbedaan antara Statement dan PreparedStatement .-
Pernyataan digunakan untuk mengeksekusi kueri SQL sederhana tanpa parameter masuk yang dimasukkan secara dinamis. PrepareStatement digunakan dengan kemampuan untuk memasukkan parameter input secara dinamis.
-
Untuk mengatur parameter di PreparedStatement, parameter input dalam permintaan ditulis sebagai tanda tanya, sehingga nilai kemudian dapat dimasukkan menggunakan berbagai setter, seperti setDouble() , setFloat() , setInt() , setTime() ... . Hasilnya, Anda tidak akan memasukkan tipe data yang salah ke dalam kueri Anda.
-
PreparedStatement sudah “dikompilasi” dan menggunakan caching, sehingga eksekusinya bisa sedikit lebih cepat daripada membuat kueri dari objek Statement . Akibatnya, kueri SQL yang sering dieksekusi ditulis sebagai objek PreparedStatement untuk meningkatkan kinerja .
-
Pernyataan rentan terhadap injeksi SQL, sementara PreparedStatement mencegahnya. Baca selengkapnya tentang menghilangkan injeksi SQL dan praktik terbaik lainnya dalam keamanan Java di artikel ini .
GO TO FULL VERSION