JavaRush /Java Blog /Random-ID /Analisis tanya jawab dari wawancara untuk pengembang Java...

Analisis tanya jawab dari wawancara untuk pengembang Java. Bagian 1

Dipublikasikan di grup Random-ID
Halo! Berbagai orang berkumpul di JavaRush. Beberapa dari kita hanya ingin menjadi pengembang Java, menginvestasikan banyak waktu dan tenaga dalam pengembangan, sementara yang lain sudah menjadi pengembang Java. Dalam satu atau lain kasus, Anda perlu bersiap untuk tes - wawancara teknis. Ujian ini tidak mudah, selain persiapan moral juga diperlukan persiapan teknis. Analisis pertanyaan dan jawaban wawancara.  Bagian 1 - 1Saya baru-baru ini menemukan daftar besar Pertanyaan Wawancara Pengembang Java di dou. Pertanyaan-pertanyaan ini dibagi menjadi beberapa tingkatan - Junior, Menengah dan Senior. Jangan khawatir: tidak semua pertanyaan itu mudah, tetapi pertanyaan yang diberi tanda bintang jarang ditanyakan. Pertanyaannya bagus, tetapi saya ingin mencoba menjawab sebagian besar pertanyaan tersebut. Jelas saya tidak akan membahas satu artikel saja, lagipula banyak pertanyaan di sana. Oleh karena itu, ini akan menjadi rangkaian artikel yang menjawab pertanyaan-pertanyaan tersebut. Izinkan saya segera menekankan beberapa poin:
  1. Ada artikel bagus dengan pertanyaan dan jawaban teratas untuk mereka. Beberapa pertanyaan tumpang tindih dengan daftar yang disajikan di atas (250+), sehingga pertanyaan-pertanyaan ini akan dilewati agar tidak menduplikasi informasi lagi.

  2. Pertanyaan disajikan dalam bahasa Ukraina, tetapi karena sebagian besar peserta JavaRush berbahasa Rusia (dan sebagian besar saya juga), jawabannya akan dalam bahasa Rusia.

  3. Jawabannya akan singkat, karena jika Anda menulis dengan sangat rinci, jawaban atas beberapa pertanyaan mungkin memerlukan artikel tersendiri. Dan selama wawancara, jawaban yang mendetail dan banyak seperti itu tidak diperlukan, karena pewawancara Anda hanya memiliki waktu satu jam untuk mewawancarai Anda tentang topik yang diperlukan (dan, seingat Anda, itu sudah cukup). Bagi yang ingin menggali lebih dalam, saya akan meninggalkan linknya.

Jadi, mari kita mulai.

Soal dan Jawaban Tingkat Junior

Analisis pertanyaan dan jawaban wawancara.  Bagian 1 - 2

Masalah umum

1. Pola desain apa yang Anda ketahui? Ceritakan kepada kami tentang dua templat yang Anda gunakan dalam pekerjaan Anda.

Ada berbagai macam templat: Anda dapat mulai mengenalnya dari ini dan artikel ini. Nah, bagi Anda yang ingin mengenalnya secara detail, saya sarankan membaca buku “Head First. Pola desain" . Dengan bantuannya, Anda dapat mempelajari pola desain paling dasar secara detail dan mudah. Mengenai pola desain yang bisa Anda jadikan contoh dalam wawancara, beberapa yang terlintas di benak Anda adalah:
  • Builder adalah template yang sering digunakan, sebuah alternatif untuk pembuatan objek klasik;
  • Pola strategi , yang secara inheren mewakili polimorfisme. Artinya, kami memiliki satu antarmuka, tetapi perilaku program akan berubah tergantung pada implementasi spesifik antarmuka ini yang ditransfer ke fungsionalitas (sekarang strategi ini praktis digunakan di mana-mana dalam aplikasi Java).
Jika ini belum cukup bagi Anda, perhatikan Spring (jika Anda sudah familiar dengannya), karena ini adalah keseluruhan platform kerangka kerja, yang pada gilirannya penuh dengan pola naik dan turun. Berikut adalah beberapa contoh dari apa yang saya bicarakan:
  • Pabrik - di ApplicationContext (atau di BeanFactory);
  • Singleton - semua kacang adalah singleton secara default;
  • Proxy - pada dasarnya semua yang ada di Spring menggunakan pola ini dalam satu atau lain cara, misalnya, AOP;
  • Rantai tanggung jawab adalah pola yang didasarkan pada konsep kerja Spring Security;
  • Templat - digunakan di Spring Jdbc.

Inti Java

Analisis pertanyaan dan jawaban wawancara.  Bagian 1 - 3

2. Tipe data apa yang ada di Java?

Java memiliki tipe data primitif:
  • byte — bilangan bulat dalam kisaran -128 hingga 127, berbobot 1 byte;
  • pendek — bilangan bulat dalam kisaran -32768 hingga 32767, berbobot 2 byte;
  • int — bilangan bulat -2147483648 hingga 2147483647, beratnya 4 byte;
  • panjang — bilangan bulat dalam kisaran 9223372036854775808 hingga 9223372036854775807, beratnya 8 byte;
  • float — angka floating point dalam rentang -3.4E+38 hingga 3.4E+38, berbobot 4 byte;
  • double — angka floating point dalam kisaran -1.7E+308 hingga 1.7E+308, berbobot 8 byte;
  • char — karakter tunggal dalam UTF-16, beratnya 2 byte;
  • nilai boolean true/false , berbobot 1 byte.
Dan tipe data referensi , yang menunjuk ke objek di heap.

3. Apa perbedaan objek dengan tipe data primitif?

Perbedaan pertama: jumlah memori yang ditempati: primitif memakan waktu sangat sedikit, karena hanya berisi nilainya sendiri, sedangkan objek dapat berisi sangat, sangat banyak nilai berbeda: baik primitif maupun referensi ke objek lain. Perbedaan kedua: Java adalah bahasa berorientasi objek, jadi semua yang ada di dalamnya bekerja melalui interaksi antar objek, dan primitif tidak cocok (sebenarnya, inilah sebabnya Java bukan bahasa berorientasi objek 100%). Ketiga, melanjutkan dari yang kedua: karena Java berfokus pada interaksi antar objek, objek-objek ini memiliki banyak mekanisme berbeda untuk mengelolanya. Misalnya, konstruktor, metode, pengecualian (yang beroperasi terutama pada objek), dll. Sebenarnya, agar primitif dapat terlibat (bekerja) dalam lingkungan berorientasi objek ini, pembungkus diciptakan untuk tipe primitif ( Integer , Character , Double , Boolean ...)

4. Apa perbedaan antara meneruskan parameter berdasarkan referensi dan nilai?

Bidang primitif menyimpan nilainya: misalnya, jika kita menetapkan int i = 9; bidang i menyimpan nilai 9 . Ketika kita memiliki referensi ke suatu objek, berarti kita memiliki field dengan referensi ke objek tersebut, atau dengan kata lain dengan nilai alamat objek tersebut di memori.
Cat cat = new Cat();
Ternyata bidang dengan referensi ke suatu objek juga menyimpan nilai , nilai alamat memori. Artinya, cat menyimpan nilai alamat objek Cat() baru di memori. Saat kita meneruskan parameter ke suatu metode, nilainya disalin. Dalam kasus primitif, nilai primitif akan disalin. Oleh karena itu, metode ini akan bekerja dengan salinan, perubahan yang tidak akan mempengaruhi aslinya. Dalam hal tipe referensi, nilai alamat memori akan disalin, masing-masing, alamatnya akan sama dengan objek yang ditunjuknya. Dan jika kita mengubah objek menggunakan link baru ini, maka akan diubah untuk yang lama (toh keduanya menunjuk ke objek yang sama).

5. Apa itu JVM, JDK, JRE?

JVM - Java Virtual Machine adalah mesin virtual yang menjalankan bytecode Java yang dibuat sebelumnya oleh kompiler. JRE - Java Runtime Environment - pada dasarnya adalah lingkungan untuk menjalankan aplikasi java, yang berisi JVM , pustaka standar, dan komponen lain untuk menjalankan applet dan aplikasi yang ditulis dalam bahasa pemrograman Java. Dengan kata lain , JRE adalah paket segala sesuatu yang diperlukan untuk menjalankan program Java yang dikompilasi, namun tidak berisi alat dan utilitas seperti kompiler atau debugger untuk pengembangan aplikasi. JDK - Java Development Kit - rangkaian JRE yang diperluas , yaitu lingkungan tidak hanya untuk meluncurkan, tetapi juga untuk mengembangkan aplikasi Java. JDK berisi semua yang ada di JRE, ditambah berbagai alat tambahan - compiler dan debugger yang diperlukan untuk membuat aplikasi di Java (juga berisi java docs).Analisis pertanyaan dan jawaban wawancara.  Bagian 1 - 4

6. Mengapa menggunakan JVM?

Seperti disebutkan di atas, Java Virtual Machine adalah mesin virtual yang menjalankan bytecode Java yang dibuat sebelumnya oleh kompiler. Artinya, JVM tidak memahami kode sumber Java. Oleh karena itu, pertama-tama, file .java dikompilasi , yang setelah kompilasi sudah memiliki ekstensi .class dan disajikan dalam bentuk kode byte yang sama dengan yang dipahami JVM. Setiap OS memiliki JVM sendiri, jadi setelah menerima file bytecode, JVM mengeksekusinya, mengadaptasinya ke OS tempat file tersebut terjadi. Sebenarnya, karena JVM yang berbeda, versi JDK (atau JRE) berbeda untuk OS yang berbeda (masing-masing memerlukan JVM sendiri). Mari kita ingat cara kerja pengembangan dalam bahasa pemrograman lain. Anda mengembangkan sebuah program, kemudian kodenya dikompilasi menjadi kode mesin untuk OS tertentu, dan kemudian Anda dapat menjalankannya. Dengan kata lain, Anda perlu menulis versi program yang berbeda untuk setiap sistem. Sedangkan di Java, berkat pemrosesan kode ganda (kompilasi dan pemrosesan byte kode JVM), Anda dapat menikmati manfaat lintas platform. Kami pernah membuat kode, mengkompilasi ulang menjadi bytecode, mentransfernya ke OS apa pun, dan JVM lokal menjalankan kode tersebut. Ini adalah properti legendaris Java - tulis sekali, jalankan di mana saja . Analisis pertanyaan dan jawaban wawancara.  Bagian 1 - 5Baca lebih lanjut tentang ini di artikel “ Mengompilasi dan menjalankan aplikasi Java di balik terpal .”

7. Apa itu bytecode?

Seperti yang saya katakan di atas, kompiler mengubah kode Java menjadi bytecode perantara (file dengan ekstensi .java menjadi file dengan ekstensi .class). Bytecode dalam banyak hal mirip dengan kode mesin, hanya saja ia menggunakan serangkaian instruksi bukan dari prosesor nyata, tetapi dari prosesor virtual. Selain itu, ini mungkin mencakup bagian yang berfokus pada penggunaan kompiler JIT, yang mengoptimalkan eksekusi perintah untuk prosesor sebenarnya tempat program dijalankan. Kompilasi JIT, juga disebut kompilasi on-the-fly, adalah teknologi yang meningkatkan kinerja suatu program menggunakan bytecode dengan mengkompilasi bytecode ke dalam mesin atau format lain saat program sedang berjalan. Seperti yang sudah Anda duga, JVM menggunakan kompiler JIT saat menjalankan bytecode. Mari kita lihat contoh bytecode: Analisis pertanyaan dan jawaban wawancara.  Bagian 1 - 6Tidak terlalu mudah dibaca, bukan? Ini bukan instruksi untuk kami, tapi untuk JVM. Berikut adalah artikel yang akan membantu Anda memahami masalah ini dengan lebih baik.

8. Apa saja karakteristik JavaBean?

JavaBeans adalah kelas Java dengan aturan tertentu. Berikut adalah beberapa aturan untuk menulis JavaBean :
  1. Kelas harus berisi konstruktor akses publik yang kosong (tanpa parameter) dengan pengubah akses publik . Konstruktor ini memungkinkan untuk membuat objek kelas ini tanpa masalah yang tidak perlu (sehingga tidak ada keributan yang tidak perlu dengan parameter).

  2. Bidang internal suatu kelas diakses melalui metode get dan set , yang seharusnya menjadi standar. Misalnya, jika bidangnya adalah name , lalu getName dan setName, dll. Hal ini, pada gilirannya, memungkinkan berbagai alat (kerangka kerja) untuk secara otomatis menentukan dan memperbarui konten kacang tanpa komplikasi.

  3. Kelas harus berisi versi metode sama dengan() hashCode() dan toString() yang diganti .

  4. Kelas harus dapat serial, yaitu harus memiliki antarmuka penanda - Serializable atau mengimplementasikan antarmuka Externalizable . Hal ini diperlukan agar kondisi kacang dapat disimpan, disimpan, dan dipulihkan dengan andal.

Analisis pertanyaan dan jawaban wawancara.  Bagian 1 - 7Anda dapat membaca tentang jenis-jenis JavaBeans pada materi ini .

9. Apa itu OutOfMemoryError?

OutOfMemoryError adalah salah satu kesalahan runtime kritis yang terkait dengan pengoperasian Java Virtual Machine (JVM). Dipanggil ketika JVM tidak dapat mengalokasikan suatu objek karena tidak tersedia cukup memori untuk objek tersebut dan pengumpul sampah tidak dapat mengalokasikan lebih banyak memori. Beberapa jenis OutOfMemoryError :
  • OutOfMemoryError: Ruang heap Java - objek tidak dapat dialokasikan di heap Java karena memori tidak mencukupi. Kesalahan ini dapat disebabkan oleh kebocoran memori atau karena ukuran heap default tidak cukup besar untuk aplikasi saat ini.

  • OutOfMemoryError: Batas Overhead GC terlampaui - karena jumlah data hampir tidak muat di tumpukan, pengumpul sampah berjalan sepanjang waktu, dan program Java berjalan sangat lambat, dan akibatnya, batas overhead pengumpul sampah terlampaui dan aplikasi mogok karena kesalahan ini.

  • OutOfMemoryError: Ukuran array yang diminta melebihi batas VM - menunjukkan bahwa aplikasi mencoba mengalokasikan memori untuk array yang lebih besar dari ukuran heap, yang sekali lagi mungkin disebabkan oleh alokasi memori default yang tidak mencukupi.

  • OutOfMemoryError: Metaspace —heap kehabisan ruang yang dialokasikan untuk metadata (metadata adalah instruksi untuk kelas dan metode).

  • OutOfMemoryError: meminta ukuran byte karena alasan. Kehabisan ruang swap - terjadi kegagalan saat mencoba mengalokasikan memori dari heap dan, akibatnya, terjadi kekurangan memori di heap.

10. Apa yang dimaksud dengan pelacakan tumpukan? Bagaimana cara mendapatkannya?

Stack Trace adalah daftar kelas dan metode yang telah dipanggil hingga saat ini dalam aplikasi. Anda dapat memanggil pelacakan tumpukan pada titik tertentu dalam aplikasi seperti ini:
StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
Dengan cara ini kita akan mendapatkan array elemen jejak tumpukan yang disusun dalam urutan LIFO - Last In First Out . Analisis pertanyaan dan jawaban wawancara.  Bagian 1 - 8Di Java, sebagai suatu peraturan, ketika mereka berbicara tentang pelacakan tumpukan, yang mereka maksud adalah jejak tumpukan yang ditampilkan di konsol ketika terjadi kesalahan (atau pengecualian). Anda bisa mendapatkan jejak tumpukan pengecualian seperti ini:
StackTraceElement[] stackTraceElements;
try{
                ...
} catch (Exception e) {
   stackTraceElements = e.getStackTrace();
}
Nah, jika kita berbicara tentang mengeluarkan jejak tumpukan pengecualian di konsol:
try{
                ...
} catch (Exception e) {
  e.printStackTrace();
}
Juga, jika kita memiliki kesalahan, pengecualian yang tidak dicentang atau pengecualian yang dicentang , yang tidak akan kita proses, tetapi hanya akan meneruskannya, maka ketika aplikasi mogok kita akan secara otomatis menerima tumpukan jejak pengecualian di konsol. Contoh kecil pengecualian pelacakan tumpukan di konsol: Analisis pertanyaan dan jawaban wawancara.  Bagian 1 - 9Anda dapat membaca lebih lanjut tentang Stack Trace di sini . Kami akan fokus pada masalah ini hari ini...Analisis pertanyaan dan jawaban wawancara.  Bagian 1 - 10
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION