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 3

Dipublikasikan di grup Acak
Hai! Sama seperti mustahil mempelajari cara menerbangkan pesawat tanpa pelatihan khusus, Anda juga tidak bisa menjadi pengembang Java tanpa menghabiskan waktu berjam-jam mempelajari landasan teori yang diperlukan. Dan itulah tepatnya yang akan kami kerjakan hari ini: kami akan terus mengeksplorasi pertanyaan-pertanyaan yang ditemui selama wawancara kerja untuk pengembang Java, dan, tentu saja, kami akan melihat jawabannya. Berikut adalah bagian pertama dan kedua dari ikhtisar ini. Tidak ada keraguan Anda bisa menjadi pengembang Java yang baik tanpa semua pertanyaan ini. Meskipun demikian, jika Anda memiliki pemahaman yang baik tentang semua seluk-beluk Java, Anda pasti akan mendapat keuntungan dan akan terlihat lebih menarik di mata calon atasan Anda. Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 3 - 1

20. Elemen bahasa apa yang memungkinkan enkapsulasi?

Mari kita ingat bahwa enkapsulasi adalah tentang menyembunyikan detail implementasi suatu kelas. Dengan kata lain, ketika kelas kita digunakan, bagian dalam dan logika internalnya tidak terlihat jelas oleh orang luar. Dan unsur bahasa apa yang menyebabkan hal ini? Akses pengubah , tentu saja! Apa pun yang perlu kami sembunyikan, kami tandai dengan pengubah pribadi . Misalnya, bidang privat kelas atau beberapa metode internal yang membantu mengimplementasikan beberapa fungsi internal. Dan untuk apa pun yang ingin kami berikan akses eksternalnya, kami menambahkan pengubah akses publik . Misalnya, metode yang mengimplementasikan beberapa fungsi (yang mungkin secara internal menggunakan banyak metode privat) atau, tentu saja, pengambil dan penyetel untuk mengakses kolom privat kelas. Kami belum menyebutkan pengubah default dan terproteksi , yang dapat digunakan lebih fleksibel dan secara khusus menyesuaikan akses ke bagian kelas tertentu.

21. Elemen bahasa apa yang memungkinkan pewarisan?

Warisan adalah mekanisme yang memungkinkan Anda membuat kelas berdasarkan kelas lain. Java memiliki kata kunci extends untuk ini. Misalnya, kita mempunyai kelas Cat , dan kita ingin membuat kelas anak Lion . Dalam kodenya, akan terlihat seperti ini:

public class Lion extends Cat
Ini berarti kelas Lion mewarisi semua metode dan variabel kelas Cat kecuali variabel statis. Elemen bahasa lain yang bertanggung jawab atas pewarisan adalah super . Ini adalah referensi yang mirip dengan ini . Kata kunci this mengacu pada objek yang dirujuk. Kata kunci super mengacu pada induk dari objek saat ini. Biasanya super digunakan:
  1. Untuk memanggil konstruktor superclass. Misalnya, kelas Cat memiliki variabel nama internal yang harus diinisialisasi di konstruktor. Di konstruktor kelas Lion , akan terlihat seperti ini:

    
    public Lion(final String name) {
       super(name);
    }

  2. Untuk merujuk ke bidang dan metode induk. Misalnya, di kelas Cat , kami memiliki bidang usia yang diinisialisasi :

    
    public class Cat {
       int age = 10;

Tapi kami memiliki bidang inisialisasi yang sama di Lion :

public class Lion extends Cat {
   int age = 15;
Dan jika pada objek Lion kita ingin merujuk pada variabel age dari objek induk, maka kita harus melakukannya melalui super :

super.name

22. Unsur bahasa apa yang menyebabkan polimorfisme?

Polimorfisme adalah kemampuan suatu objek dengan satu tanda tangan untuk mengambil banyak bentuk (banyak implementasi). Kami dapat dengan yakin menyatakan bahwa kata kunci implementasi dan perluasanMenjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 3 - 2 Java bertanggung jawab atas polimorfisme. Saat kita memiliki antarmuka, implementasi memungkinkan kita menyediakan satu kemungkinan implementasi, namun itu tidak harus menjadi satu-satunya implementasi, bukan? Mari kita lihat kembali seperti apa penggunaan implementasi :

public class Cat implements Animal
Kemudian di kelas Cat , kita harus mengimplementasikan semua metode abstrak di antarmuka Hewan . Warisan juga: di kelas anak, kita bisa mengganti implementasi metode yang sudah ada. Ini berarti bahwa dengan beberapa kelas anak, kita dapat melakukan beberapa penggantian berbeda untuk metode yang sama. Atau superclass bisa bersifat abstrak dan mempunyai metode tertentu yang harus diimplementasikan dengan cara khusus di setiap kelas turunannya. Dengan kata lain, metode ini akan mempunyai banyak implementasi yang berbeda. Anotasi @Override juga dapat membantu kami dalam hal ini. Itu ditempatkan di atas metode yang diimplementasikan dan menunjukkan bahwa kita ingin mengimplementasikan atau mengganti (jika implementasi sudah ada di superclass) metode tertentu dari superclass atau antarmuka. Ini opsional dan membantu mendeteksi kesalahan dengan lebih mudah. Anda menggunakan anotasi ini untuk memberi tahu kompiler bahwa Anda ingin mengganti/mengimplementasikan metode superkelas/antarmuka. Kompiler kemudian akan memastikan bahwa Anda tidak membuat kesalahan dalam tanda tangan metode.

23. Apa itu PADAT? Berikan contoh

SOLID adalah akronim dari lima prinsip dasar desain OOP Robert Martin. S (Prinsip tanggung jawab tunggal) : menyatakan bahwa suatu kelas hanya boleh mempunyai satu tujuan/tanggung jawab. Dengan kata lain, Anda tidak boleh membuat kelas yang melakukan segalanya. Jika ya, Anda dapat mereproduksi anti-pola "Objek Tuhan". Jika Anda memiliki objek Cat , objek tersebut harus memiliki metode hanya untuk berinteraksi dengan fungsi internalnya, namun tidak boleh berisi logika bisnis apa pun yang tidak terkait dengan instance tersebut. Misalnya beberapa mekanisme untuk menyimpan objek jenis ini. Fungsionalitas ini (di luar entitas Cat ) harus dipindahkan ke kelas atau layanan lain, yang tugasnya menyediakan logika bisnis untuk objek terkait. O (Prinsip terbuka-tertutup) : Prinsip ini dijelaskan sebagai berikut: entitas perangkat lunak (kelas, modul, fungsi, dll.) harus terbuka untuk perluasan tetapi tertutup untuk modifikasi. Misalnya, kita memerlukan fungsionalitas yang serupa tetapi sedikit berbeda dari fungsionalitas kelas Cat yang ada . Daripada mengubah fungsionalitas kelas Cat dan dengan demikian merusak kode di semua tempat yang sudah digunakan, kita dapat menggunakan warisan atau komposisi . Dengan demikian, kami mencapai tujuan kami untuk memodifikasi fungsionalitas kelas Cat , dan kami melakukannya tanpa mengubah kelas itu sendiri atau merusak apa pun. L (Prinsip Substitusi Liskov) : ini adalah prinsip substitusi Barbara Liskov. Prinsipnya mengatakan bahwa suatu fungsi yang menggunakan tipe dasar harus dapat menggunakan subtipe dari tipe dasar tersebut tanpa mengetahui apa yang terjadi. Misalnya, kelas Cat kita harus dapat digantikan oleh turunannya, misalnya Lion , tanpa mengubah perilakunya secara mendasar. Logika umum (perilaku) tetap sama, tetapi detail implementasi fungsi tertentu berubah. I (Prinsip segregasi antarmuka) : prinsip ini menyatakan bahwa lebih baik memiliki banyak antarmuka yang terspesialisasi (fokusnya sempit) daripada satu antarmuka universal. Misalnya, seorang pengembang mengimplementasikan beberapa antarmuka. Mereka hanya memerlukan salah satu metodenya, tetapi antarmuka memiliki sembilan metode lagi yang tidak berhubungan dengan logika metode yang diperlukan. Dalam hal ini, pengembang perlu mengimplementasikan sepuluh metode antarmuka, sembilan di antaranya tidak berguna! Sebaliknya, lebih baik membuat sepuluh antarmuka berbeda yang dapat Anda implementasikan sesuai kebutuhan. Ya, jika bukan sepuluh, maka beberapa, masing-masing dengan metode yang terkait erat dengan tujuan tunggal antarmuka. D (Prinsip inversi ketergantungan): Prinsipnya mengatakan bahwa modul tingkat yang lebih tinggi tidak boleh bergantung pada modul tingkat yang lebih rendah. Prinsip ini juga menyatakan, "Abstraksi tidak boleh bergantung pada detail. Detail harus bergantung pada abstraksi." Kita harus membangun logika kita dengan mengacu pada antarmuka dan menyebarkan objek konkrit dari kelas yang mengimplementasikan antarmuka yang diperlukan. Misalnya, kita memiliki antarmuka Cat dan beberapa implementasi, misalnya Lion dan HouseCat . Kami membangun logika kami secara khusus untuk berinteraksi dengan antarmuka Cat . Kami hanya mengganti antarmuka dengan implementasi tertentu ( Lion atau HouseCat ), bukan sebaliknya.

24. Apa yang dimaksud dengan kelas, objek, dan antarmuka?

Kita ingat bahwa Java adalah bahasa OOP. Artinya, program Java dibangun berdasarkan interaksi antar objek. Suatu program ibarat sarang semut, yang setiap semutnya adalah sebuah objek. Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 3 - 3Objek adalah kumpulan data yang mencakup berbagai metode (fungsi) untuk berinteraksi dengan data internal tersebut. Kelas adalah instruksi atau templat untuk membuat objek. Artinya kita dapat membuat banyak objek yang dibangun berdasarkan instruksi yang sama namun diisi dengan data yang berbeda (atau sama). Mengambil contoh dari kehidupan nyata, kita dapat mengatakan bahwa kelas adalah cetak biru sebuah bangunan, dan objek adalah bangunan yang dibangun secara spesifik sesuai dengan cetak biru tersebut. Antarmuka mirip dengan kelas, tetapi kita tidak dapat menggunakannya untuk membuat objek. Tujuannya adalah untuk menambahkan abstraksi ke Java. Lebih tepatnya, mereka menambah fleksibilitas pada hubungan antara kelas dan objek. Yang kami maksud dengan fleksibilitas adalah polimorfisme dan abstraksi yang dijelaskan sebelumnya, yang menciptakan banyak peluang untuk membangun arsitektur internal aplikasi.

25. Apa itu kelas POJO? Berikan contoh kelas tersebut

Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 3 - 4POJO (Plain Old Java Object) adalah objek kelas sederhana yang tidak mewarisi kelas tertentu dan tidak mengimplementasikan antarmuka layanan apa pun selain yang diperlukan untuk model bisnis. Dengan kata lain kelas POJO hanyalah kelas yang tidak memerlukan persyaratan khusus. Satu-satunya persyaratan adalah tidak adanya berbagai lonceng dan peluit yang terikat pada kerangka kerja tertentu. Sebagai aturan, kelas-kelas ini tidak mewarisi kelas lain (kecuali kelas POJO dalam paket yang sama), tidak mengimplementasikan antarmuka (terkadang pengecualian dibuat untuk antarmuka penanda dari perpustakaan standar seperti Serializable atau Cloneable ), tidak menggunakan anotasi , dan tidak bergantung pada perpustakaan pihak ketiga. Perhatikan bahwa POJO dapat memiliki metode yang berisi logika bisnis dan konstruktor apa pun. Jika kita mengizinkan anotasi yang tidak mengubah semantik kelas (yaitu anotasi yang ketidakhadirannya tidak mengubah tujuan atau logika objek), maka POJO juga dapat menyertakan entitas JPA dan objek DTO yang dideserialisasi dari XML atau JSON , yang aturannya adalah ditentukan dalam anotasi. Hal lain yang perlu diingat mengenai kelas POJO adalah sebaiknya mengganti metode sama dengan dan kode hash karena ini dapat membantu mereka memenuhi perannya dengan lebih baik. Contoh kelas POJO :

public class User {
   private Long id;
   private String firstName;
   private String lastName;
   private Long age;
 
   public User(final Long id, final String firstName, final String lastName, final long age) {
       this.id = id;
       this.firstName = firstName;
       this.lastName = lastName;
       this.age = age;
   }
 
   public Long getId() {
       return this.id;
   }
 
   public String getFirstName() {
       return this.firstName;
   }
 
   public String getLastName() {
       return this.lastName;
   }
 
   public Long getAge() {
       return this.age;
   }
 
   @Override
   public boolean equals(final Object o) {
       if (this == o) return true;
       if (o == null || this.getClass() != o.getClass()) return false;
       final User user = (User) o;
       return Objects.equals(this.id, user.id) &&
               Objects.equals(this.firstName, user.firstName) &&
               Objects.equals(this.lastName, user.lastName) &&
               Objects.equals(this.age, user.age);
   }
 
   @Override
   public int hashCode() {
       return Objects.hash(this.id, this.firstName, this.lastName, this.age);
   }
}

26. Elemen apa saja yang dapat dikandung suatu kelas?

Sebuah kelas dapat berisi elemen-elemen berikut:
  • bidang contoh;
  • bidang statis;
  • blok inisialisasi;
  • blok inisialisasi statis;
  • konstruktor (konstruktor kosong selalu dideklarasikan secara default);
  • metode;
  • metode statis;
  • berbagai anotasi (yang dapat diterapkan pada kelas itu sendiri atau bagian-bagian penyusunnya);
  • obat generik ;
  • pewarisan kelas lain ( extends ) atau implementasi antarmuka ( implement ).

27. Ceritakan tentang pewarisan di Jawa. Apa spesifik dari kata kunci super?

Di atas, saya sebelumnya berbicara tentang pewarisan dan kata kunci super di Java. Saya akan menyebutkan beberapa poin penting lagi:
  1. Kita hanya dapat mewarisi satu kelas: Java tidak memiliki banyak warisan di Java. Dengan munculnya metode default di Java 8, pernyataan ini akan menjadi sangat kontroversial.
  2. Metode dan bidang pribadi juga diwariskan. Mereka tidak bisa diakses dari kelas anak (tetapi jika kita, misalnya, memiliki bidang pribadi dan memiliki pengambil dan penyetel publik atau dilindungi , maka kita dapat menggunakannya untuk mengakses bidang tersebut).
  3. kelas akhir tidak dapat diwariskan.
  4. metode final tidak dapat ditimpa (tetapi dapat diwariskan dan kelebihan beban).
  5. metode dan variabel statis tidak diwariskan (karena melekat pada kelas, bukan objek).
  6. Saat mewarisi kelas abstrak, metode abstraknya harus diimplementasikan, atau kelas turunannya juga harus dinyatakan abstrak.
  7. Jika ada konstruktor non-default di induk, konstruktor tersebut harus ditimpa di kelas anak (tetapi @Override tidak ditulis di atasnya).
  8. Anda dapat memperluas pengubah akses ke metode yang diganti di kelas anak: private -> default -> protected -> public .
  9. Metode yang ditimpa di kelas anak dapat memunculkan pengecualian yang lebih sempit, misalnya: Exception -> IOException -> FileNotFoundException.
Menjelajahi pertanyaan dan jawaban dari wawancara kerja untuk posisi pengembang Java.  Bagian 3 - 5

28. Apa yang dimaksud dengan tanda tangan metode? Berikan contoh tanda tangan yang benar dan salah

Tanda tangan metode adalah nama metode ditambah jenis parameter masukan (urutan parameter penting). Tanda tangan metode tidak menyertakan nilai kembalian atau pengecualian yang diberikan metode. Contoh tanda tangan yang benar:

doSomething(int, double, double)
Contoh tanda tangan yang salah:

void doSomething(int firstArg, int secondArg) throws Exception
Tanda tangan metode, dikombinasikan dengan tipe pengembalian dan daftar pengecualian yang diberikan, disebut metode contract . Itu saja untuk hari ini! Sampai jumpa lagi!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION