JavaRush /Blog Java /Random-MS /Analisis soalan dan jawapan daripada temu bual untuk pemb...

Analisis soalan dan jawapan daripada temu bual untuk pembangun Java. Bahagian 3

Diterbitkan dalam kumpulan
hello! Sama seperti mustahil untuk belajar menerbangkan kapal terbang tanpa latihan khas, juga mustahil untuk menjadi pembangun Java tanpa menghabiskan berjam-jam mempelajari asas teori yang diperlukan. Hari ini kami akan mengusahakan perkara ini dengan tepat: kami akan terus menganalisis 250+ soalan temu bual untuk pembangun Java dan, dengan itu, jawapan kepada mereka. Berikut adalah bahagian pertama dan kedua analisis. Ya, sudah tentu, anda boleh menjadi pembangun Java yang baik tanpa semua soalan ini. Walau bagaimanapun, jika anda mempunyai pemahaman yang baik tentang selok-belok bahasa Jawa, ia akan memberi kelebihan kepada anda, menjadikan anda calon yang lebih diingini di mata majikan masa depan anda.Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 3 - 1

20. Apakah unsur bahasa yang bertanggungjawab untuk enkapsulasi?

Seperti yang kita ingat, enkapsulasi menyembunyikan butiran pelaksanaan kelas. Iaitu, apabila kelas kita digunakan secara luaran, kandungan dan logik dalaman tidak jelas. Dan apakah unsur bahasa yang bertanggungjawab untuk ini? Sememangnya, akses pengubahsuai ! Kami menandakan perkara yang perlu kami sembunyikan dengan pengubah suai peribadi . Contohnya, medan peribadi kelas atau beberapa kaedah dalaman yang membantu melaksanakan fungsi dalaman tertentu. Dan kepada perkara yang ingin kami berikan akses luaran, kami menambah pengubah suai akses awam . Sebagai contoh, kaedah yang bertanggungjawab untuk menyediakan beberapa fungsi (di mana banyak kaedah peribadi boleh digunakan) atau pengambil dan penetap yang sama untuk mengakses medan peribadi kelas. Oh, dan kami juga mempunyai pengubah lalai dan dilindungi , yang boleh digunakan untuk konfigurasi akses yang lebih fleksibel dan khusus kepada bahagian terpilih dalam kelas.

21. Unsur bahasa yang manakah bertanggungjawab terhadap pewarisan?

Warisan ialah mekanisme yang membolehkan anda membuat kelas berdasarkan kelas lain. Di Java, kata kunci extends digunakan untuk tujuan ini . Sebagai contoh, kami mempunyai kelas tertentu Cat , dan kami ingin mencipta penggantinya - Lion . Dalam kod ia akan kelihatan seperti ini:
public class Lion extends Cat
Dan ini bermakna bahawa kelas Lion mewarisi semua kaedah dan pembolehubah kelas Cat , kecuali yang statik. Selain itu, unsur bahasa yang bertanggungjawab untuk warisan termasuk super . Ini adalah rujukan yang serupa dengan ini , tetapi sementara ini merujuk kepada objek yang dipanggil, super merujuk kepada objek induk semasa. Biasanya super digunakan:
  1. Untuk memanggil pembina superclass: sebagai contoh, kelas Cat mempunyai nama pembolehubah dalaman yang perlu dimulakan dalam pembina. Dalam pembina kelas Lion ia akan kelihatan seperti ini:

    public Lion(final String name) {
       super(name);
    }
  2. Untuk mengakses medan dan kaedah induk: contohnya, dalam kelas Cat kami mempunyai medan umur yang dimulakan :

    public class Cat {
       int age = 10;
Pada masa yang sama, kami mempunyai medan yang dimulakan yang sama dalam Lion :
public class Lion extends Cat {
   int age = 15;
Dan jika kita ingin mengakses pembolehubah umur objek induk dari objek Lion , kita perlu melakukan ini melalui super :
super.name

22. Unsur bahasa manakah yang bertanggungjawab terhadap polimorfisme?

Polimorfisme ialah keupayaan objek satu tandatangan untuk mengambil pelbagai bentuk (pelbagai pelaksanaan). Kita boleh mengatakan dengan selamat bahawa dalam Java kata kunci pelaksana dan lanjutanAnalisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 3 - 2 bertanggungjawab untuk polimorfisme . implements - apabila kami mencipta antara muka kami, kami melaksanakan salah satu bentuk yang mungkin dalam beberapa kelas, tetapi ia bukan satu-satunya bentuk, bukan? Mari kita ingat bagaimana implementing kelihatan seperti :
public class Cat implements Animal
Dan dalam kelas Cat kita mesti melaksanakan semua kaedah abstrak yang dibentangkan dalam antara muka Haiwan . Perkara yang sama berlaku untuk warisan: dalam kelas keturunan kita boleh mengatasi pelaksanaan kaedah yang sedia ada. Contohnya: beberapa keturunan -> beberapa penggantian berbeza bagi kaedah yang sama. Baiklah, sama ada superclass itu abstrak dan ia mempunyai kaedah tertentu yang perlu dilaksanakan dengan cara yang istimewa untuk setiap keturunannya. Iaitu, kita boleh mengatakan bahawa kaedah itu akan mengambil banyak bentuk. Selain itu, anotasi @Override boleh membantu kami dengan this , yang diletakkan di atas kaedah yang dilaksanakan dan menunjukkan bahawa kami ingin melaksanakan atau mengatasi (jika pelaksanaan sudah wujud dalam superclass) satu atau satu lagi kaedah superclass atau antara muka. Ia adalah pilihan dan digunakan untuk memudahkan pengesanan ralat. Dengan anotasi ini, anda menunjukkan kepada pengkompil bahawa anda ingin mengatasi/melaksanakan kaedah superclass/antara muka, dan ia akan memastikan anda tidak membuat kesilapan dalam tandatangan kaedah.

23. Apakah itu SOLID? Beri contoh

SOLID ialah akronim untuk Lima Prinsip Reka Bentuk Asas untuk OOP, dicipta oleh Robert Martin. S - Prinsip tanggungjawab tunggal - prinsip tanggungjawab tunggal, yang menyatakan bahawa kelas harus mempunyai hanya satu matlamat dan satu tujuan. Iaitu, anda tidak sepatutnya membuat kelas yang melakukan segala-galanya. Dalam kes ini, anda boleh menghasilkan semula anticorak "Objek Ilahi". Jika anda mempunyai objek Cat , ia harus mengandungi kaedah yang hanya berinteraksi dengan kefungsian dalamannya dan bukan logik perniagaan yang tidak berkaitan dengan kejadian ini. Sebagai contoh, beberapa jenis penjimatan objek jenis ini di suatu tempat. Kefungsian luaran ini (berbanding dengan Cat ) perlu dipindahkan ke kelas lain, beberapa perkhidmatan yang tugasnya adalah untuk menyediakan logik perniagaan untuk objek jenis ini. O - Prinsip terbuka-tertutup - prinsip keterbukaan/tertutup. Ini bermakna entiti perisian (kelas, antara muka) harus dibuka untuk sambungan, tetapi ditutup untuk pengubahsuaian. Sebagai contoh, kami memerlukan kefungsian yang serupa dengan kefungsian kelas Cat yang sedia ada , tetapi berbeza sedikit. Daripada menukar kefungsian kelas Cat , memecahkan tempat yang sudah digunakan, kami menggunakan warisan atau gubahan . Hasilnya, kami mencapai matlamat kami dengan kefungsian kelas Cat yang diubah suai , tetapi pada masa yang sama kami tidak mengubahnya atau memecahkan apa-apa. L - Prinsip penggantian Liskov - Prinsip penggantian Barbara Liskov. Prinsip menyatakan bahawa fungsi yang menggunakan jenis asas sepatutnya boleh menggunakan subjenis jenis asas tanpa mengetahuinya. Sebagai contoh, kelas Cat kami harus boleh ditukar ganti dengan mana-mana keturunannya, katakan Lion , tanpa mengubah tingkah laku secara asasnya. Logik umum (tingkah laku) tetap sama, tetapi butiran pelaksanaan fungsi ini atau itu berubah. I - Prinsip pengasingan antara muka - prinsip pengasingan antara muka. Prinsip ini menyatakan bahawa adalah lebih baik untuk mempunyai banyak antara muka khusus (terfokus sempit) daripada satu antara muka universal. Sebagai contoh, pengguna melaksanakan beberapa antara muka, yang mana dia hanya memerlukan kaedah ini, tetapi antara muka ini mempunyai sembilan lagi kaedah yang tidak ada kena mengena dengan logik kaedah yang dikehendaki. Dalam kes ini, pengguna perlu melaksanakan sepuluh kaedah antara muka, sembilan daripadanya tidak diperlukan untuknya! Sebaliknya, adalah lebih baik untuk membuat sepuluh antara muka yang berbeza yang boleh dilaksanakan jika perlu. Nah, atau tidak sepuluh, tetapi beberapa, yang akan mempunyai kaedah yang berkait rapat dengan tujuan umum antara muka. D - Prinsip Penyongsangan Ketergantungan— prinsip penyongsangan kebergantungan. Prinsipnya menyatakan bahawa modul di peringkat yang lebih tinggi tidak boleh bergantung kepada modul di peringkat yang lebih rendah. Prinsip ini juga digambarkan sebagai "abstraksi tidak boleh bergantung pada butiran, butiran harus bergantung pada abstraksi." Iaitu, kita mesti membina logik kita dengan merujuk kepada antara muka, dan hanya kemudian menghantar objek tertentu kepada fungsi ini, kelas yang melaksanakan antara muka yang diperlukan. Contohnya, jika kami mempunyai antara muka Cat dan beberapa pelaksanaannya, katakan, Lion dan HomeCat , kami membina logik interaksi kami secara khusus dengan jenis antara muka Cat , dan hanya kemudian menggantikan pelaksanaan khusus Lion atau HomeCat , tetapi bukan sebaliknya.

24. Apakah kelas, objek, antara muka?

Seperti yang kita ingat, Java ialah bahasa OOP. Iaitu, program Java dibina berdasarkan interaksi antara objek. Ternyata program itu seperti sarang semut, di mana setiap semut adalah objek. Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 3 - 3Objek ialah beberapa data berkumpulan yang mengandungi pelbagai kaedah (fungsi) untuk berinteraksi dengan data dalaman ini. Dan kelas adalah arahan, templat untuk mencipta objek. Iaitu, terdapat banyak objek yang dibina mengikut arahan yang sama, diisi dengan nilai data yang berbeza atau sama. Untuk memberi contoh daripada kehidupan, kita boleh mengatakan bahawa kelas ialah lukisan bangunan, dan objek ialah bangunan yang dicipta khusus berdasarkan lukisan ini. Antara muka adalah analog kelas dengan perbezaan bahawa objek tidak boleh dibuat menggunakannya. Matlamat mereka adalah untuk menambah unsur abstraksi ke Java. Lebih tepat lagi, untuk menambah fleksibiliti dalam hubungan antara kelas dan objek. Dengan fleksibiliti yang kami maksudkan adalah polimorfisme dan abstraksi yang diterangkan sebelum ini, yang seterusnya membuka banyak peluang untuk membina seni bina dalaman aplikasi.

25. Apakah itu kelas POJO? Berikan contoh kelas sedemikian

Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 3 - 4POJO - Objek Java Lama Biasa - objek Java lama yang baik: objek mudah kelas yang tidak diwarisi daripada mana-mana kelas tertentu dan tidak melaksanakan sebarang antara muka perkhidmatan melebihi yang diperlukan untuk model perniagaan. Dalam erti kata lain , kelas POJO hanyalah kelas tanpa keperluan khas. Satu-satunya keperluan ialah ketiadaan pelbagai loceng dan wisel terikat pada rangka kerja tertentu. Sebagai peraturan, kelas sedemikian tidak mewarisi daripada kelas lain (kecuali untuk kelas POJO daripada pakej yang sama), tidak melaksanakan antara muka - kadangkala pengecualian dibuat untuk antara muka penanda daripada perpustakaan standard seperti Serializable atau Cloneable - jangan gunakan anotasi dan tidak bergantung pada perpustakaan pihak ketiga. Tetapi saya perhatikan bahawa POJO boleh mempunyai kaedah dengan logik perniagaan dan pembina dalam apa jua bentuk. Jika anda membenarkan anotasi yang tidak membuat perubahan pada semantik kelas (tanpa tujuan objek dan logik operasinya tidak akan berubah), POJO juga boleh memasukkan entiti Entiti JPA dan objek DTO yang dinyahsiri daripada XML atau JSON , peraturan yang dinyatakan dalam anotasi. Anda juga dinasihatkan untuk mengatasi equals dan hashCode untuk kelas POJO , kerana ini boleh membantu mereka melaksanakan peranan mereka 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. Apakah elemen yang boleh mengandungi kelas?

Kelas mungkin mengandungi elemen berikut:
  • medan kelas;
  • medan kelas statik;
  • blok permulaan;
  • blok permulaan statik;
  • pembina (kosong sentiasa ditakrifkan secara lalai);
  • kaedah;
  • kaedah statik;
  • pelbagai anotasi (yang boleh digantung di atas kelas itu sendiri atau komponennya);
  • generik ;
  • warisan daripada kelas lain ( extends ) atau pelaksanaan daripada antara muka ( implements ).

27. Terangkan pewarisan di Jawa. Apakah faedah menggunakan kata kunci super?

Di atas saya telah bercakap tentang warisan dan kata kunci super di Jawa. Izinkan saya menyebut beberapa perkara penting:
  1. Adalah mungkin untuk mewarisi hanya satu kelas: tidak ada warisan berbilang dalam Java (tetapi dengan kemunculan kaedah lalai dalam Java 8, pernyataan ini akan menjadi sangat kontroversi).
  2. Kaedah dan medan persendirian juga diwarisi, mereka tidak akan mempunyai akses kepada mereka daripada pewaris (tetapi jika kita, sebagai contoh, mempunyai medan persendirian dan terdapat pengambil dan penetap awam atau dilindungi untuknya, medan itu boleh digunakan melalui mereka).
  3. kelas akhir tidak diwarisi.
  4. kaedah akhir tidak ditindih (tetapi ia boleh diwarisi dan terlebih beban).
  5. kaedah statik dan pembolehubah tidak diwarisi (kerana ia tidak terikat pada objek, tetapi pada kelas).
  6. Apabila mewarisi daripada kelas abstrak, pelaksanaan kaedah abstrak mereka diperlukan, atau kelas semasa juga mesti diisytiharkan abstrak.
  7. Jika terdapat pembina bukan lalai dalam induk, ia mesti ditindih dalam kelas anak (tetapi @Override tidak ditulis di atasnya).
  8. Kaedah yang ditindih dalam keturunan boleh dilanjutkan dengan pengubah suai akses: peribadi -> lalai -> dilindungi -> awam .
  9. Kaedah overridden dalam keturunan boleh menyempitkan pengecualian yang ditulis, contohnya: Exception -> IOException -> FileNotFoundException.
Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 3 - 5

28. Apakah tandatangan kaedah? Berikan contoh tandatangan yang betul dan salah

Tandatangan kaedah ialah nama kaedah ditambah jenis parameter masuk (dan susunan parameter penting). Tandatangan kaedah tidak termasuk nilai pulangan atau pengecualian yang dilemparkannya. Contoh tandatangan yang betul:
doSomething(int, double, double)
Contoh tandatangan yang salah:
void doSomething(int firstArg, int secondArg) throws Exception
Tandatangan kaedah, digabungkan dengan jenis pulangan dan senarai pengecualian yang dilemparkan, dipanggil kontrak kaedah . Itu sahaja untuk hari ini. Jumpa lagi!Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 3 - 6
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION