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 1

Dipublikasikan di grup Acak
Hai! CodeGym telah menyatukan berbagai kelompok orang. Beberapa dari kita hanya ingin menjadi pengembang Java, dan kita menginvestasikan banyak waktu dan tenaga untuk pengembangan. Lainnya sudah menjadi pengembang Java. Bagaimanapun, Anda harus siap untuk diuji dalam wawancara teknis. Ini tidak mudah. Mereka membutuhkan persiapan emosional dan teknis. Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 1 - 1Baru-baru ini saya menemukan beberapa daftar besar pertanyaan wawancara untuk posisi developer Java. Pertanyaan dibagi menjadi beberapa tingkatan: junior, menengah, dan senior. Jangan khawatir: tidak semua pertanyaannya mudah, tetapi yang bertanda bintang jarang ditanyakan. Pertanyaannya bagus, dan saya ingin mencoba menjawab sebagian besar. Jelas, ini tidak semua cocok dalam satu artikel. Lagipula, ada banyak pertanyaan di sana. Itu berarti akan ada serangkaian artikel dengan jawaban atas pertanyaan wawancara ini. Izinkan saya segera menekankan beberapa poin: jawabannya akan singkat, karena jawaban yang ditulis dengan sangat rinci dapat ditarik ke dalam artikel terpisah. Selain itu, saat wawancara, jawaban yang sangat detail dan banyak tidak diinginkan, karena pewawancara Anda hanya memiliki waktu satu jam untuk mewawancarai Anda tentang topik-topik penting (dan,

T&J untuk posisi pengembang junior

Pertanyaan umum

1. Pola desain apa yang Anda ketahui? Ceritakan tentang dua pola desain yang telah Anda gunakan dalam pekerjaan Anda.

Ada berbagai macam pola. Bagi Anda yang ingin mengenal pola desain secara menyeluruh, saya sarankan untuk membaca buku "Head First. Design Patterns". Ini akan membantu Anda dengan mudah mempelajari detail pola desain paling dasar. Dalam hal pola desain yang bisa Anda sebutkan dalam wawancara kerja, berikut ini yang terlintas dalam pikiran:
  • Builder — template yang sering digunakan, sebuah alternatif dari pendekatan klasik untuk pembuatan objek;
  • Strategi — pola yang pada dasarnya mewakili polimorfisme. Yaitu, kami memiliki satu antarmuka, tetapi perilaku program berubah tergantung pada implementasi antarmuka spesifik yang diteruskan ke fungsi (pola strategi sekarang digunakan di hampir semua aplikasi Java).
Jika itu tidak cukup untuk Anda, perhatikan Spring (jika Anda sudah terbiasa dengannya), karena ini adalah keseluruhan platform kerangka kerja, yang, pada gilirannya, diresapi dengan pola dari awal hingga akhir. Berikut adalah beberapa contoh dari apa yang saya bicarakan:
  • Pabrik — pola ini dapat ditemukan di ApplicationContext (atau di BeanFactory);
  • Singleton — semua kacang adalah singleton secara default;
  • Proxy — pada dasarnya, semua yang ada di Spring menggunakan pola ini dengan satu atau lain cara, misalnya, AOP;
  • Rantai tanggung jawab — sebuah pola yang mendasari Keamanan Musim Semi;
  • Template — digunakan di Spring JDBC.

Inti Jawa

Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 1 - 2

2. Tipe data apa yang ada di Jawa?

Java memiliki tipe data primitif berikut:
  • byte — bilangan bulat mulai dari -128 hingga 127, membutuhkan 1 byte;
  • pendek — bilangan bulat mulai dari -32768 hingga 32767, membutuhkan 2 byte;
  • int — bilangan bulat mulai dari -2147483648 hingga 2147483647, membutuhkan 4 byte;
  • panjang — bilangan bulat mulai dari 9223372036854775808 hingga 9223372036854775807, membutuhkan 8 byte;
  • float — bilangan floating point mulai dari -3.4E+38 hingga 3.4E+38, membutuhkan 4 byte;
  • double — bilangan floating point mulai dari -1.7E+308 hingga 1.7E+308, membutuhkan 8 byte;
  • char — karakter tunggal dalam UTF-16, membutuhkan 2 byte;
  • nilai benar/salah boolean , membutuhkan 1 byte.
Dan ada tipe data referensi yang mengarah ke objek di heap.

3. Bagaimana suatu objek berbeda dari tipe data primitif?

Perbedaan pertama adalah jumlah memori yang ditempati: primitif mengambil sangat sedikit karena hanya berisi nilainya sendiri, tetapi objek dapat berisi banyak nilai berbeda - baik primitif maupun referensi ke objek lain. Perbedaan kedua adalah ini: Java adalah bahasa berorientasi objek, jadi semua yang ada di Java bekerja adalah interaksi antar objek. Primitif tidak cocok di sini. Faktanya, itu sebabnya Java bukanlah bahasa berorientasi objek 100%. Perbedaan ketiga, yang mengikuti dari yang kedua adalah karena Java berfokus pada interaksi objek, ada banyak mekanisme berbeda untuk mengelola objek. Misalnya, konstruktor, metode, pengecualian (yang bekerja terutama dengan objek), dll. Dan untuk memungkinkan primitif entah bagaimana bekerja di lingkungan berorientasi objek ini, pencipta Java datang denganpembungkus untuk tipe primitif ( Integer , Character , Double , Boolean ...)

4. Apa perbedaan antara menyampaikan argumen berdasarkan referensi dan berdasarkan nilai?

Bidang primitif menyimpan nilainya: misalnya, jika kita menyetel int i = 9; , maka field i menyimpan nilai 9. Ketika kita memiliki referensi ke suatu objek, itu berarti kita memiliki field dengan referensi ke objek tersebut. Dengan kata lain, kami memiliki bidang yang menyimpan alamat objek di memori.

Cat cat = new Cat();
Ini berarti bahwa bidang dengan referensi ke objek juga menyimpan nilai . Nilainya adalah alamat memori. Yaitu, cat menyimpan alamat memori dari objek Cat() yang baru . Saat kami meneruskan argumen ke suatu metode, nilainya disalin. Dalam kasus primitif, nilai primitif disalin. Karenanya, metode ini berfungsi dengan salinan. Saat salinan diubah, aslinya tidak terpengaruh. Dalam kasus tipe referensi, nilai alamat memori disalin. Dengan demikian, kedua variabel referensi akan menyimpan alamat yang menunjuk ke objek yang sama. Dan jika kita menggunakan referensi baru ini untuk mengubah objek, maka kita akan menemukan bahwa itu juga berubah untuk referensi lama. Bagaimanapun, keduanya menunjuk ke objek yang sama.

5. Apa itu JVM, JDK, dan JRE?

JVM adalah singkatan dari Java Virtual Machine , yang menjalankan bytecode Java yang dibuat sebelumnya oleh kompiler. JRE adalah singkatan dari Java Runtime Environment . Pada dasarnya, ini adalah lingkungan untuk menjalankan aplikasi Java. Ini termasuk JVM, pustaka standar, dan komponen lain untuk menjalankan applet dan aplikasi yang ditulis dalam bahasa pemrograman Java. Dengan kata lain, JRE adalah paket dari semua yang diperlukan untuk menjalankan program Java yang dikompilasi, tetapi tidak termasuk alat dan utilitas seperti kompiler atau debugger untuk mengembangkan aplikasi. JDK adalah singkatan dari Java Development Kit , yang merupakan perpanjangan dari JRE. Artinya, ini adalah lingkungan tidak hanya untuk menjalankan aplikasi Java, tetapi juga untuk mengembangkannya. JDK berisi semua yang ada di JRE, ditambah berbagai alat tambahan — kompiler dan debugger — diperlukan untuk membuat aplikasi Java (termasuk dokumen Java). Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 1 - 3

6. Mengapa menggunakan JVM?

Seperti disebutkan di atas, Java Virtual Machine adalah mesin virtual yang menjalankan bytecode Java yang telah dibuat sebelumnya oleh kompiler. Ini berarti JVM tidak memahami kode sumber Java. Jadi, pertama-tama kita mengkompilasi file .java . File yang dikompilasi memiliki .classekstensi dan sekarang dalam bentuk bytecode, yang dipahami oleh JVM. JVM berbeda untuk setiap OS. Saat JVM menjalankan file bytecode, JVM menyesuaikannya untuk OS yang menjalankannya. Faktanya, karena ada JVM yang berbeda, JDK (atau JRE) juga berbeda untuk OS yang berbeda (setiap versi membutuhkan JVM sendiri). Mari kita ingat bagaimana pengembangan bekerja dalam bahasa pemrograman lain. Anda menulis 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 platform. Tetapi pemrosesan kode ganda Java (kompilasi kode sumber menjadi bytecode, dan kemudian pemrosesan bytecode oleh JVM) memungkinkan Anda menikmati manfaat dari solusi lintas platform. Kami membuat kode sekali dan mengkompilasinya menjadi bytecode. Kemudian kita dapat membawanya ke OS apa pun, dan JVM asli dapat menjalankannya. Dan ini justru Jawa yang melegendatulis sekali, jalankan fitur di mana saja. Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 1 - 4

7. Apa itu bytecode?

Seperti yang saya katakan di atas, kompiler mengubah kode Java menjadi bytecode perantara (kita beralih dari file dengan ekstensi .java ke file dengan ekstensi .class). Dalam banyak hal, bytecode mirip dengan kode mesin, kecuali set instruksinya bukan untuk prosesor nyata, tetapi untuk prosesor virtual. Yang mengatakan, itu dapat mencakup bagian yang dirancang untuk kompiler JIT, yang mengoptimalkan eksekusi perintah untuk prosesor aktual yang menjalankan program. Kompilasi JIT, juga disebut kompilasi on-the-fly, adalah teknologi yang meningkatkan kinerja program bytecode dengan mengkompilasi bytecode ke dalam kode mesin atau format lain saat program sedang berjalan. Seperti yang mungkin sudah Anda duga, JVM menggunakan kompiler JIT saat menjalankan bytecode. Mari kita lihat beberapa contoh bytecode: Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 1 - 5Tidak terlalu enak dibaca, ya? Kabar baiknya adalah instruksi ini tidak dimaksudkan untuk kita. Ini untuk JVM.

8. Apa saja fitur dari JavaBean?

JavaBean adalah kelas Java yang mengikuti aturan tertentu . Berikut adalah beberapa aturan untuk menulis JavaBean :
  1. Kelas harus berisi konstruktor kosong (tanpa argumen) dengan pengubah akses publik . Konstruktor ini memungkinkan untuk membuat objek kelas tanpa masalah yang tidak perlu (sehingga tidak perlu mengutak-atik argumen).

  2. Bidang internal diakses melalui metode get and set instance, yang harus memiliki implementasi standar. Misalnya, jika kita memiliki bidang nama , maka kita harus memiliki getName dan setName , dll. Ini memungkinkan berbagai alat (kerangka kerja) untuk mendapatkan dan mengatur konten kacang secara otomatis tanpa kesulitan apa pun.

  3. Kelas harus mengganti metode equals() , hashCode() , dan toString() .

  4. Kelas harus serializable. Artinya, itu harus memiliki antarmuka penanda Serializable atau mengimplementasikan antarmuka Externalizable . Ini agar status kacang dapat disimpan, disimpan, dan dipulihkan dengan andal.

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

9. Apa itu OutOfMemoryError?

OutOfMemoryError adalah kesalahan runtime kritis yang terkait dengan Java Virtual Machine (JVM). Galat ini terjadi saat JVM tidak dapat mengalokasikan objek karena tidak ada cukup memori untuk itu, dan pengumpul sampah tidak dapat mengalokasikan lebih banyak memori. Beberapa jenis OutOfMemoryError :
  • OutOfMemoryError: Java heap space — objek tidak dapat dialokasikan di Java heap karena memori tidak mencukupi. Kesalahan ini dapat disebabkan oleh kebocoran memori atau ukuran heap default yang terlalu kecil untuk aplikasi saat ini.

  • OutOfMemoryError: Batas Overhead GC terlampaui — karena data aplikasi hampir tidak pas di heap, pengumpul sampah terus berjalan, menyebabkan program Java berjalan sangat lambat. Akibatnya, batas overhead pengumpul sampah terlampaui dan aplikasi lumpuh karena kesalahan ini.

  • OutOfMemoryError: Ukuran larik yang diminta melebihi batas VM — ini menunjukkan bahwa aplikasi mencoba mengalokasikan memori untuk larik yang melebihi ukuran heap. Sekali lagi, ini mungkin berarti bahwa memori yang dialokasikan tidak mencukupi secara default.

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

  • OutOfMemoryError: meminta ukuran byte karena alasan. Out of swap space — beberapa kesalahan terjadi saat mencoba mengalokasikan memori dari heap, dan akibatnya, heap tidak memiliki cukup ruang.

10. Apa itu pelacakan tumpukan? Bagaimana cara mendapatkannya?

Pelacakan tumpukan adalah daftar kelas dan metode yang telah dipanggil hingga saat ini dalam eksekusi aplikasi. Anda bisa mendapatkan pelacakan tumpukan pada titik tertentu dalam aplikasi dengan melakukan ini:

StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
Ini memberi kita array StackTraceElements yang diatur dalam urutan Last In First Out (LIFO) . Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 1 - 7Di Java, ketika orang berbicara tentang pelacakan tumpukan, biasanya yang mereka maksud adalah pelacakan tumpukan yang ditampilkan di konsol saat terjadi kesalahan (atau pengecualian). Anda bisa mendapatkan jejak tumpukan dari pengecualian seperti ini:

StackTraceElement[] stackTraceElements;
try{
                ...
} catch (Exception e) {
   stackTraceElements = e.getStackTrace();
}
Dan jika kami ingin menampilkan jejak tumpukan pengecualian di konsol:

try{
                ...
} catch (Exception e) {
  e.printStackTrace();
}
Selain itu, jika terjadi kesalahan, pengecualian yang tidak dicentang , atau pengecualian yang tidak diperiksa yang tidak ditangani , maka kami secara otomatis mendapatkan pelacakan tumpukan pengecualian di konsol saat aplikasi mogok. Berikut adalah contoh kecil pelacakan tumpukan di konsol: Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 1 - 8Dan pada catatan itu, kita akan mengakhiri diskusi kita tentang topik ini hari ini.Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 1 - 9
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION