CodeGym/Java Blog/Acak/Menjelajahi pertanyaan dan jawaban dari wawancara kerja u...
John Squirrels
Level 41
San Francisco

Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java. Bagian 6

Dipublikasikan di grup Acak
anggota
Halo Dunia! Penting bagi pengembang mana pun untuk tidak pernah berhenti berkembang. Lagi pula, jika Anda berhenti, Anda berisiko kehilangan permintaan dan sepenuhnya keluar dari pasar kerja. Dunia TI terus berkembang dan bergerak maju — Anda harus ikut bergerak bersamanya. Namun pada saat yang sama, Anda tidak bisa selalu mengikuti teknologi terkini agar Anda tidak melupakan "klasik" (topik pengembangan perangkat lunak klasik). Hari ini saya ingin melanjutkan diskusi saya tentang "topik klasik" untuk pengembang Java. Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 6 - 1Saya ingin menekankan bahwa jawaban saya bukanlah keputusan akhir. Itu hanyalah pandangan saya tentang jawaban yang benar — Anda mungkin tidak setuju dengan beberapa di antaranya. Tidak apa-apa, jadi silakan bagikan pendapat Anda di komentar. Anda dapat menemukan tautan ke bagian ulasan sebelumnya di akhir artikel. Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 6 - 2

Perpustakaan dan standar

52. Apa itu Hibernasi? Apa perbedaan antara JPA dan Hibernasi?

Untuk menjawab pertanyaan ini, saya rasa kita perlu memahami terlebih dahulu apa itu JPA. Ini adalah spesifikasi yang menjelaskan pemetaan objek-relasional dari objek Java sederhana dan menyediakan API untuk menyimpan, mengambil, dan memanipulasi objek tersebut. Artinya, database relasional (DB) direpresentasikan sebagai sekumpulan tabel yang saling berhubungan. Dan JPA adalah standar yang diadopsi secara luas yang menjelaskan bagaimana objek dapat berinteraksi dengan database relasional. Seperti yang Anda lihat, JPA adalah sesuatu yang abstrak dan tidak berwujud. Ini seperti ide itu sendiri, pendekatannya. Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 6 - 3Tapi Hibernate adalah perpustakaan khusus yang mengimplementasikan paradigma JPA. Dengan kata lain, Anda bisa menggunakan perpustakaan ini untuk bekerja dengan database relasional melalui objek yang mewakili data dalam database (Entitas). Perpustakaan ini dikatakan sangat dekat dengan cita-cita JPA. Mungkin itulah sebabnya ini menjadi populer. Seperti yang dapat Anda bayangkan, popularitasnya membenarkan pengembangan dan peningkatan lebih lanjut. Selain itu, meluasnya penggunaan berasal dari komunitas luas yang telah mengeksplorasi setiap pertanyaan yang mungkin dan tidak mungkin terkait dengan alat ini. Hibernate telah dipelajari secara menyeluruh, dan ternyata dapat diandalkan. Ada alasan bagus mengapa implementasi JPA yang ideal di Spring umumnya menggunakan Hibernate.

53. Apa itu mengalir? Bagaimana cara menggunakannya di Hibernate?

Seperti yang saya katakan sebelumnya, komunikasi di Hibernate terjadi melalui objek data yang disebut entitas. Entitas ini mewakili tabel tertentu dalam database, dan seperti yang Anda ingat, kelas Java dapat berisi referensi ke kelas lain. Hubungan ini juga tercermin dalam database. Biasanya, ini adalah kunci asing (untuk hubungan OneToOne, OneToMany, ManyToOne) atau tabel perantara (untuk hubungan ManyToMany). Jika entitas Anda memiliki referensi ke entitas terkait lainnya, anotasi ditempatkan di atas referensi ini untuk menunjukkan jenis hubungan: @OneToOne, @OneToMany, @ManyToOne, @ManyToMany. Anda dapat menentukan jenis kaskade untuk hubungan ini di properti kaskade anotasi. JPA memiliki metode khusus untuk berinteraksi dengan entitas (bertahan, menyimpan, menggabungkan ...). Tipe kaskade digunakan untuk memperlihatkan bagaimana seharusnya data terkait berperilaku; metode ini digunakan pada entitas target. Jadi apa saja strategi cascading (tipe cascade)? Standar JPA menyediakan penggunaan enam jenis kaskade:
  • PERSIST — operasi penyimpanan terjadi secara berjenjang (untuk metode save() dan persist() ). Dengan kata lain, jika kita menyimpan suatu entitas yang berasosiasi dengan entitas lain, maka entitas tersebut juga akan tersimpan di database (kalau belum ada)

  • MERGE — operasi pembaruan terjadi secara berjenjang (untuk metode merge() )

  • HAPUS — operasi penghapusan terjadi secara berjenjang ( metode hapus() )

  • ALL — berisi tiga operasi berjenjang sekaligus — PERSISTMERGEREMOVE

JPA memiliki konsep entitas persisten — entitas yang terkait dengan datanya dalam database dan dikendalikan oleh sesi saat ini (koneksi). Jika Anda mengubahnya tanpa menyimpan perubahan ke database, data entitas di database akan tetap berubah.
  • DETACH — entitas terkait tidak dikelola oleh sesi ( metode detach() ). Artinya, ketika data entitas terkait diubah, data dalam database tidak diperbarui secara otomatis — data tersebut diubah dari persisten menjadi terpisah (yaitu entitas tidak dikelola oleh JPA)

  • REFRESH — setiap kali suatu entitas disegarkan dengan data dari database ( refresh() — menyegarkan objek yang terpisah), entitas terkaitnya juga disegarkan. Misalnya, Anda entah bagaimana mengubah data yang diambil dari database, dan Anda ingin mengembalikan nilai aslinya. Dalam hal ini, operasi ini akan berguna bagi Anda.

Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 6 - 4Hibernate mendukung semua operasi cascading standar ini dan juga memperkenalkan tiga operasinya sendiri:
  • REPLICATE — digunakan ketika kita memiliki lebih dari satu sumber data dan kita ingin datanya disinkronkan (metode replikasi Hibernate). Semua entitas harus memiliki pengidentifikasi (id) untuk memastikan bahwa mereka dapat dibuat tanpa masalah (untuk memastikan bahwa entitas yang sama tidak memiliki id yang berbeda untuk database yang berbeda)

  • SAVE_UPDATE — menyimpan/menghapus secara berjenjang (untuk metode saveOrUpdate Hibernate )

  • LOCK — kebalikan dari operasi DETACHED : mengubah entitas yang terlepas kembali ke status persisten, yaitu sesi saat ini akan melacak entitas tersebut sekali lagi

Jika tidak ada jenis kaskade yang dipilih, maka operasi pada entitas tidak akan memengaruhi entitas lain yang terkait dengannya.

54. Bisakah kelas Entitas bersifat abstrak?

Menurut 2.1 Kelas Entitas spesifikasi JPA , " Kelas abstrak dan konkret dapat berupa entitas. " Jadi, jawabannya adalah ya, kelas abstrak dapat menjadi entitas dan dapat ditandai dengan anotasi @Entity.

55. Apa yang dimaksud dengan manajer entitas? Apa tanggung jawabnya?

Pertama-tama, saya ingin mencatat bahwa EntityManager adalah komponen penting dari JPA . Ini digunakan untuk interaksi entitas dengan database. Secara umum, metode interaksi entitas dengan database dipanggil pada entitas (bertahan, menggabungkan, menghapus, melepaskan)... Namun saya juga mencatat bahwa komponen ini biasanya bukan komponen tunggal untuk keseluruhan aplikasi. Seringkali ringan, satu dihapus, dan yang baru dibuat menggunakan EntityManagerFactory . Jika kita menggambar paralel dengan JDBC , di mana EntityManagerFactory dianalogikan dengan DataSource , maka EntityManager dianalogikan dengan Connection . Sebelumnya saya telah menyebutkan bahwa entitas persisten adalah entitas yang dikelola oleh koneksi saat ini. Entitas ini dikelola oleh EntityManager , yang terkait erat dengan koneksi saat ini, dan TransactionManager , yang bertanggung jawab atas pembukaan/penutupan transaksi. Pada gambar di bawah, Anda dapat melihat siklus hidup entitas: Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 6 - 5EntityManager mengelola entitas saat berada dalam tahap Managed (saat entitas persisten, karena memiliki koneksi dengan EntityManager ) . Artinya, itu bukan hal baru dan juga tidak dihapus. Ketika suatu entitas baru atau dihapus, kita dapat mengatakan bahwa entitas tersebut juga terlepas, karena EntityManager tidak mengelolanya. Ada strategi berbeda untuk EntityManager . Anda dapat memiliki singleton EntityManager untuk seluruh aplikasi atau membuat yang baru setiap kali untuk setiap koneksi. Jika Anda menggunakan Spring, pembuatan/penghapusan EntityManager dikelola secara otomatis (tetapi itu tidak berarti Anda tidak dapat menyesuaikannya sendiri ^^). Saya perlu menyebutkan bahwa satu atau lebih EntityManagers membentuk konteks persistensi . Konteks persistensi adalah lingkungan di mana instance entitas disinkronkan dengan entitas serupa di database (seperti yang saya katakan, ini hanya berfungsi untuk entitas persisten). Jika Anda mempelajari JPA lebih dalam (yang sangat saya rekomendasikan), Anda akan sering menjumpai konsep ini.

56. Apa yang dimaksud dengan kelas Assert? Mengapa ini digunakan?

Saya belum pernah mendengar kelas seperti itu di JPA , jadi saya berasumsi bahwa pertanyaan ini merujuk pada kelas yang ditemukan di perpustakaan JUnit yang digunakan untuk pengujian unit. Di perpustakaan ini, kelas Assert digunakan untuk memeriksa hasil eksekusi kode (di sini pernyataan berarti pernyataan bahwa Anda memiliki status/data tertentu di lokasi tertentu dalam kode). Misalnya, Anda sedang menguji metode yang seharusnya membuat kucing. Anda menjalankan metode ini dan Anda mendapatkan beberapa hasil:
Cat resultOfTest = createCat();
Tapi Anda perlu memastikan itu dibuat dengan benar, bukan? Jadi, Anda secara manual membuat cat tertentu ( expectedCat ) dengan parameter persis seperti yang Anda harapkan pada cat yang diperoleh dari metode createCat() . Kemudian Anda menggunakan kelas Assert untuk memverifikasi hasilnya:
Assert.assertEquals(resultOfTest, expectedCat);
Jika kucingnya berbeda, maka AssertionError akan muncul, yang memberi tahu kita bahwa kita tidak mendapatkan hasil yang diharapkan. Kelas Assert memiliki banyak metode berbeda yang mencakup berbagai operasi yang berguna dalam memverifikasi hasil yang diharapkan. Berikut ini beberapa di antaranya:
  • menegaskanTrue(<boolean>) — nilai yang dimasukkan sebagai argumen diharapkan benar

  • menegaskanFalse(<boolean>) — nilai yang dimasukkan sebagai argumen diperkirakan salah

  • menegaskanNotEquals(<object1>, <object2>) — objek yang diteruskan sebagai argumen harus berbeda jika dibandingkan menggunakan sama dengan ( false )

  • menegaskanThrows(<ClassNameOfException>.class, <ExceptionObject>) — argumen kedua diharapkan menjadi pengecualian yang diberikan oleh argumen pertama (yaitu argumen kedua biasanya merupakan pemanggilan metode yang harus memunculkan pengecualian dari tipe yang diperlukan)

Rangkaian

57. Jelaskan kelas String Java

String adalah kelas Java standar yang bertanggung jawab untuk menyimpan dan memanipulasi nilai string (urutan karakter). Ini adalah kelas yang tidak dapat diubah (saya menulis tentang yang tidak dapat diubah sebelumnya di sini ), yaitu, data objek kelas ini tidak dapat diubah setelah dibuat. Saya ingin segera mencatat bahwa kelas StringBuilder dan StringBuffer pada dasarnya identik - satu-satunya perbedaan adalah bahwa salah satunya dimaksudkan untuk digunakan dalam lingkungan multithread ( StringBuffer ). Kelas-kelas ini mirip dengan String , tetapi berbeda karena kelas-kelas ini dapat berubah . Bahkan setelah dibuat, mereka membiarkan Anda memodifikasi string yang diwakilinya, tanpa membuat objek baru. Metode mereka berbeda dari metode String standar dan dirancang untuk manipulasi string (ada alasan mengapa mereka menyebutnya pembangun).

58. Bagaimana cara membuat objek String? Dimana itu dibuat?

Cara paling umum untuk membuat string adalah dengan menentukan nilai yang kita inginkan dalam tanda kutip ganda secara sederhana:
String str = "Hello World!";
Anda juga dapat melakukannya secara eksplisit menggunakan new :
String str = new String("Hello World!");
Anda juga dapat membuat string dari serangkaian karakter:
char[] charArr = {'H','e','l','l','o',' ', 'W','o','r','l','d','!'};
String str = new String(charArr);
Kita dapat melakukannya dengan memanggil metode toString pada beberapa objek:
String str = someObject.toString();
Kita dapat melakukannya dengan memanggil metode lain yang mengembalikan sebuah string. Contoh:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine();
Anda memahami bahwa ada banyak sekali cara untuk membuat string. Saat objek String dibuat, objek tersebut disimpan dalam kumpulan string , yang akan kita bahas lebih detail di salah satu pertanyaan di bawah ini.

59. Bagaimana Anda membandingkan dua string Java, dan bagaimana Anda mengurutkannya?

Java menggunakan tanda sama dengan ganda ( == ) untuk melakukan perbandingan. Jika kita perlu membandingkan nilai sederhana seperti int, kita akan menggunakannya. Tetapi metode ini tidak cocok untuk membandingkan objek secara keseluruhan. Ia hanya akan membandingkan referensi, yaitu apakah referensi tersebut menunjuk pada objek yang sama atau tidak. Artinya jika kita membandingkan dua objek dengan nilai bidang yang sama menggunakan == , kita akan mendapatkan false . Bidang-bidang tersebut memiliki nilai yang sama, tetapi objek-objek itu sendiri menempati lokasi berbeda dalam memori. Objek string , meskipun tampak sederhana, tetaplah objek. Membandingkannya menggunakan == juga tidak tepat (meskipun ada kumpulan string). Solusi yang tepat adalah metode sama dengan standar kelas Object , yang perlu ditimpa agar berfungsi dengan benar (secara default, metode ini menggunakan == untuk perbandingan). Kelas String menimpanya, jadi kita hanya menggunakan implementasinya:
String firstStr = "Hello World!";
String secondStr = "Hello World!";
boolean isEquals = firstStr.equals(secondStr);
Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 6 - 6Kita telah membicarakan tentang perbandingan demi kesetaraan. Sekarang kita akan mengetahui perbandingan untuk penyortiran. Lagi pula, jika kita ingin memilah sesuatu, kita perlu mengetahui prinsip apa yang akan kita gunakan untuk memilahnya. Untuk melakukan ini, Anda dapat menggunakan TreeSet , kumpulan standar yang diurutkan. Struktur data ini bergantung pada algoritma pohon merah-hitam dan mengurutkan kumpulan berdasarkan prinsip pengurutan yang ditentukan. Seperti yang saya katakan sebelumnya, Anda perlu memahami cara mengurutkan objek dengan tipe tertentu. Untuk menetapkan metode perbandingan untuk pengurutan, gunakan pembanding . Anda biasanya perlu mengimplementasikannya untuk kelas yang ingin Anda urutkan, namun dalam kasus String , mereka sudah diimplementasikan. Oleh karena itu, kita cukup menambahkan string kita ke TreeSet , dan itu akan mengurutkannya untuk kita:
TreeSet<String> sortedSet = new TreeSet<>();
sortedSet.add("B");
sortedSet.add("C");
sortedSet.add("A");
sortedSet.forEach(System.out::println);
Keluaran konsol:
ABC

60. Berikan algoritma untuk mengubah string menjadi karakter. Tulis kode yang sesuai

Seperti yang saya katakan sebelumnya, objek String memiliki banyak metode berguna yang berbeda. Salah satunya adalah toCharArray . Metode ini mengubah string menjadi array karakter:
String str = "Hello world";
char[] charArr = str.toCharArray();
Selanjutnya, kita memiliki serangkaian karakter yang dapat kita referensikan berdasarkan indeks:
char firstChar = charArr[0]; // H

61. Bagaimana Anda mengubah string menjadi array byte dan sebaliknya? Tulis kode yang sesuai

Kelas String memiliki metode getBytes , yang mirip dengan metode toCharArray dan mengembalikan string sebagai array byte:
String str = "Hello world";
byte[] byteArr = str.getBytes();
byte firstChar = byteArr[6]; // 119
Kami telah sampai pada kesimpulan logis dari ulasan kami hari ini. Terima kasih sudah membaca!
Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar