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

Analisis tanya jawab dari wawancara untuk pengembang Java. Bagian 3

Dipublikasikan di grup Random-ID
Halo! Sama seperti tidak mungkin belajar menerbangkan pesawat tanpa pelatihan khusus, juga tidak mungkin menjadi pengembang Java tanpa menghabiskan waktu berjam-jam mempelajari landasan teori yang diperlukan. Hari ini kami akan mengerjakan hal ini: kami akan terus menganalisis 250+ pertanyaan wawancara untuk pengembang Java dan, karenanya, jawabannya. Berikut adalah analisis bagian pertama dan kedua . Ya, tentu saja Anda bisa menjadi pengembang Java yang baik tanpa semua pertanyaan ini. Namun, jika Anda memiliki pemahaman yang baik tentang seluk beluk bahasa Java, ini akan memberi Anda keuntungan, menjadikan Anda kandidat yang lebih diinginkan di mata calon pemberi kerja Anda.Analisis tanya jawab dari wawancara untuk pengembang Java.  Bagian 3 - 1

20. Elemen bahasa apa yang bertanggung jawab atas enkapsulasi?

Seperti yang kita ingat, enkapsulasi menyembunyikan detail implementasi suatu kelas. Artinya, ketika kelas kita digunakan secara eksternal, isi dan logika internalnya tidak jelas. Dan unsur bahasa apa yang menyebabkan hal ini? Tentu saja, akses pengubah ! Kami menandai apa yang perlu kami sembunyikan dengan pengubah pribadi . Misalnya, bidang pribadi suatu kelas atau beberapa metode internal yang membantu mengimplementasikan fungsionalitas internal tertentu. Dan pada apa yang ingin kami berikan akses eksternalnya, kami menambahkan pengubah akses publik . Misalnya, metode yang bertanggung jawab untuk menyediakan beberapa fungsionalitas (di mana banyak metode privat dapat digunakan) atau pengambil dan penyetel yang sama untuk mengakses bidang privat suatu kelas. Oh, dan kami juga memiliki pengubah default dan terlindungi , yang dapat digunakan untuk konfigurasi akses yang lebih fleksibel dan spesifik ke bagian kelas yang dipilih.

21. Unsur bahasa manakah yang bertanggung jawab atas pewarisan?

Warisan adalah mekanisme yang memungkinkan Anda membuat kelas berdasarkan kelas lain. Di Java, kata kunci extends digunakan untuk tujuan ini . Misalnya, kami memiliki kelas tertentu Cat , dan kami ingin membuat penggantinya - Lion . Dalam kodenya akan terlihat seperti ini:
public class Lion extends Cat
Dan ini berarti kelas Lion mewarisi semua metode dan variabel kelas Cat , kecuali yang statis. Selain itu, elemen bahasa yang bertanggung jawab atas pewarisan termasuk super . Ini adalah referensi yang mirip dengan this , tetapi meskipun this merujuk pada objek yang dipanggil, super merujuk pada objek induk saat ini. Biasanya super digunakan:
  1. Untuk memanggil konstruktor superkelas: Misalnya, kelas Cat memiliki nama variabel internal yang perlu diinisialisasi di konstruktor. Di konstruktor kelas Lion akan terlihat seperti ini:

    public Lion(final String name) {
       super(name);
    }
  2. Untuk mengakses field dan metode induk: misalnya, di kelas Cat kita memiliki field age yang diinisialisasi :

    public class Cat {
       int age = 10;
Pada saat yang sama, kami memiliki bidang inisialisasi yang sama di Lion :
public class Lion extends Cat {
   int age = 15;
Dan jika kita ingin mengakses variabel age objek induk dari objek Lion , kita perlu melakukannya melalui super :
super.name

22. Unsur bahasa manakah yang menyebabkan polimorfisme?

Polimorfisme adalah kemampuan suatu objek dengan satu tanda tangan untuk mengambil banyak bentuk (implementasi ganda). Kita dapat dengan aman mengatakan bahwa di Java kata kunci implementasi dan perluasanAnalisis tanya jawab dari wawancara untuk pengembang Java.  Bagian 3 - 2 bertanggung jawab atas polimorfisme . implementasi - saat kita membuat antarmuka, kita mengimplementasikan salah satu bentuk yang mungkin ada di beberapa kelas, tapi itu bukan satu-satunya bentuk, bukan? Mari kita ingat implementasi implementasinya seperti apa :
public class Cat implements Animal
Dan di kelas Cat kita harus mengimplementasikan semua metode abstrak yang disajikan di antarmuka Hewan . Hal yang sama berlaku untuk pewarisan: di kelas turunan kita bisa mengganti implementasi metode yang sudah ada. Misalnya: beberapa keturunan -> beberapa penggantian berbeda dari metode yang sama. Ya, superclass itu abstrak dan memiliki metode tertentu yang perlu diimplementasikan dengan cara khusus untuk setiap turunannya. Artinya, kita dapat mengatakan bahwa metode tersebut akan mempunyai banyak bentuk. Selain itu, anotasi @Override dapat membantu kita dalam hal ini , yang ditempatkan di atas metode yang diterapkan dan menunjukkan bahwa kita ingin menerapkan atau mengganti (jika implementasi sudah ada di superkelas) satu atau beberapa metode superkelas atau antarmuka. Ini opsional dan digunakan untuk memudahkan mendeteksi kesalahan. Dengan anotasi ini, Anda menunjukkan kepada kompiler bahwa Anda ingin mengganti/mengimplementasikan metode superkelas/antarmuka, dan ini akan memastikan bahwa Anda tidak membuat kesalahan dalam tanda tangan metode.

23. Apa itu PADAT? Berikan contoh

SOLID adalah akronim dari Lima Prinsip Desain Dasar untuk OOP, yang diciptakan oleh Robert Martin. S - Prinsip tanggung jawab tunggal - prinsip tanggung jawab tunggal, yang menyatakan bahwa suatu kelas hanya boleh memiliki satu tujuan dan satu tujuan. Artinya, Anda tidak boleh membuat kelas yang melakukan segalanya. Dalam hal ini, Anda dapat mereproduksi antipola “Objek Ilahi”. Jika Anda memiliki objek Cat , objek tersebut harus berisi metode yang hanya berinteraksi dengan fungsi internalnya, dan bukan logika bisnis yang tidak relevan dengan instance ini. Misalnya, semacam penyimpanan objek jenis ini di suatu tempat. Fungsi eksternal ini (relatif terhadap Cat ) perlu ditransfer ke kelas lain, beberapa layanan yang tugasnya menyediakan logika bisnis untuk objek jenis ini. O - Prinsip terbuka-tertutup - prinsip keterbukaan/ketertutupan. Artinya entitas perangkat lunak (kelas, antarmuka) harus terbuka untuk perluasan, namun tertutup untuk modifikasi. Misalnya, kami memerlukan fungsionalitas yang serupa dengan fungsionalitas kelas Cat yang sudah ada , tetapi sedikit berbeda. Daripada mengubah fungsi kelas Cat , memecah tempat yang sudah digunakan, kami menggunakan warisan atau komposisi . Hasilnya, kami mencapai tujuan kami dengan fungsionalitas kelas Cat yang dimodifikasi , tetapi pada saat yang sama kami tidak mengubahnya atau merusak apa pun. L - Prinsip substitusi Liskov - Prinsip substitusi Barbara Liskov. Prinsipnya menyatakan bahwa suatu fungsi yang menggunakan tipe dasar harus dapat menggunakan subtipe dari tipe dasar tanpa menyadarinya. Misalnya, kelas Cat kita harus dapat dipertukarkan dengan turunannya, misalnya Lion , tanpa mengubah perilaku secara mendasar. Logika umum (perilaku) tetap sama, tetapi detail implementasi fungsi tertentu berubah. I - Prinsip segregasi antarmuka - prinsip pemisahan antarmuka. Prinsip ini menyatakan bahwa lebih baik memiliki banyak antarmuka yang terspesialisasi (fokusnya sempit) daripada satu antarmuka universal. Misalnya, pengguna mengimplementasikan beberapa antarmuka, yang mana ia hanya memerlukan metode ini, tetapi antarmuka ini memiliki sembilan metode lagi yang tidak ada hubungannya dengan logika metode yang diinginkan. Dalam hal ini, pengguna perlu menerapkan sepuluh metode antarmuka, sembilan di antaranya tidak diperlukan baginya! Sebaliknya, lebih baik membuat sepuluh antarmuka berbeda yang dapat diimplementasikan jika diperlukan. Ya, atau bukan sepuluh, tetapi beberapa, yang akan memiliki metode yang terkait erat dengan tujuan umum antarmuka. D - Prinsip Pembalikan Ketergantungan— prinsip inversi ketergantungan. Prinsipnya menyatakan bahwa modul di level yang lebih tinggi tidak boleh bergantung pada modul di level yang lebih rendah. Prinsip ini juga digambarkan sebagai “abstraksi tidak boleh bergantung pada detail, detail harus bergantung pada abstraksi.” Artinya, kita harus membangun logika kita dengan mengacu pada antarmuka, dan baru kemudian meneruskan objek tertentu ke fungsi ini, kelas yang mengimplementasikan antarmuka yang diperlukan. Misalnya, jika kita memiliki antarmuka Cat dan beberapa implementasinya, misalnya Lion dan HomeCat , kita membangun logika interaksi secara spesifik dengan tipe antarmuka Cat , dan baru kemudian mengganti implementasi spesifik Lion atau HomeCat , namun tidak sebaliknya.

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

Seperti yang kita ingat, Java adalah bahasa OOP. Artinya, program Java dibangun berdasarkan interaksi antar objek. Ternyata programnya ibarat sarang semut, dimana setiap semut adalah sebuah objek. Analisis tanya jawab dari wawancara untuk pengembang Java.  Bagian 3 - 3Objek adalah beberapa data yang dikelompokkan yang berisi berbagai metode (fungsi) untuk berinteraksi dengan data internal tersebut. Dan kelas adalah instruksi, templat untuk membuat objek. Artinya, terdapat banyak objek yang dibangun berdasarkan instruksi yang sama, diisi dengan nilai data yang berbeda atau identik. Sebagai contoh dari kehidupan, kita dapat mengatakan bahwa kelas adalah gambar sebuah bangunan, dan objek adalah bangunan yang dibuat khusus berdasarkan gambar tersebut. Antarmuka adalah analog dari kelas dengan perbedaan bahwa objek tidak dapat dibuat dengan menggunakannya. Tujuan mereka adalah menambahkan elemen abstraksi ke Java. Lebih tepatnya, untuk menambah fleksibilitas dalam hubungan antar kelas dan objek. Yang kami maksud dengan fleksibilitas adalah polimorfisme dan abstraksi yang dijelaskan sebelumnya, yang pada gilirannya membuka banyak peluang untuk membangun arsitektur internal aplikasi.

25. Apa itu kelas POJO? Berikan contoh kelas tersebut

Analisis tanya jawab dari wawancara untuk pengembang Java.  Bagian 3 - 4POJO - Objek Java Lama Biasa - objek Java lama yang bagus: objek kelas sederhana yang tidak diwarisi dari 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. Biasanya, kelas tersebut tidak mewarisi dari kelas lain (kecuali kelas POJO dari paket yang sama), tidak mengimplementasikan antarmuka - terkadang pengecualian dibuat untuk antarmuka penanda dari perpustakaan standar seperti Serializable atau Cloneable - jangan gunakan anotasi dan tidak bergantung pada perpustakaan pihak ketiga. Namun saya perhatikan bahwa POJO dapat memiliki metode dengan logika bisnis dan konstruktor apa pun. Jika Anda mengizinkan anotasi yang tidak membuat perubahan pada semantik kelas (yang tanpanya tujuan objek dan logika operasinya tidak akan berubah), POJO juga dapat menyertakan entitas Entitas JPA dan objek DTO yang dideserialisasi dari XML atau JSON . aturan yang ditentukan dalam anotasi. Dianjurkan juga untuk mengganti sama dengan dan kode hash untuk kelas POJO , karena ini dapat membantu mereka menjalankan 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?

Kelas mungkin berisi elemen berikut:
  • bidang kelas;
  • bidang kelas statis;
  • blok inisialisasi;
  • blok inisialisasi statis;
  • konstruktor (kosong selalu ditentukan secara default);
  • metode;
  • metode statis;
  • berbagai anotasi (yang dapat digantung di atas kelas itu sendiri atau komponennya);
  • obat generik ;
  • pewarisan dari kelas lain ( extends ) atau implementasi dari antarmuka ( implementes ).

27. Menjelaskan pewarisan sifat di Jawa. Apa keuntungan menggunakan kata kunci super?

Di atas saya sudah membicarakan tentang pewarisan dan kata kunci super di Java. Izinkan saya menyebutkan beberapa poin penting lainnya:
  1. Dimungkinkan untuk mewarisi hanya satu kelas: tidak ada pewarisan berganda di Java (tetapi dengan munculnya metode default di Java 8, pernyataan ini akan menjadi sangat kontroversial).
  2. Metode dan bidang privat juga diwariskan, hanya saja metode dan bidang tersebut tidak dapat diakses oleh ahli warisnya (tetapi jika kita, misalnya, memiliki bidang pribadi dan ada pengambil dan penyetel publik atau yang dilindungi untuk bidang tersebut, maka bidang tersebut dapat dikerjakan dengan melalui mereka).
  3. kelas akhir tidak diwariskan.
  4. metode final tidak ditimpa (tetapi dapat diwariskan dan kelebihan beban).
  5. metode dan variabel statis tidak diwariskan (karena tidak terikat pada objek, tetapi pada kelas).
  6. Saat mewarisi dari kelas abstrak, implementasi metode abstraknya diperlukan, atau kelas saat ini juga harus dinyatakan abstrak.
  7. Jika ada konstruktor non-default di induk, konstruktor tersebut harus diganti di kelas anak (tetapi @Override tidak ditulis di atasnya).
  8. Metode yang diganti di turunan dapat diperluas dengan pengubah akses: private -> default -> protected -> public .
  9. Metode yang ditimpa pada turunan dapat mempersempit pengecualian yang ditulis, misalnya: Exception -> IOException -> FileNotFoundException.
Analisis tanya jawab dari wawancara untuk pengembang Java.  Bagian 3 - 5

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

Tanda tangan suatu metode adalah nama metode ditambah jenis parameter yang masuk (dan urutan parameter itu penting). Tanda tangan metode tidak menyertakan nilai kembalian atau pengecualian yang dilontarkannya. 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 kembalian dan daftar pengecualian yang dilempar, disebut metode contract . Itu saja untuk hari ini. Sampai jumpa lagi!Analisis tanya jawab dari wawancara untuk pengembang Java.  Bagian 3 - 6
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION