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 1

Diterbitkan dalam kumpulan
hello! Pelbagai orang berkumpul di JavaRush. Sesetengah daripada kita hanya mahu menjadi pembangun Java, melaburkan banyak masa dan usaha dalam pembangunan, manakala yang lain sudah menjadi pembangun Java. Dalam satu kes atau yang lain, anda perlu bersedia untuk ujian - temuduga teknikal. Ujian ini tidak mudah, dan sebagai tambahan kepada persiapan moral, persiapan teknikal juga diperlukan. Analisis soalan dan jawapan temu bual.  Bahagian 1 - 1Baru-baru ini saya menjumpai senarai besar Soalan Temuduga Pembangun Java di dou. Soalan-soalan ini dibahagikan kepada tahap yang berbeza - Junior, Middle dan Senior. Jangan risau: bukan semua soalan mudah, tetapi soalan yang mempunyai asterisk jarang ditanya. Soalan bagus, tetapi saya ingin cuba menjawab kebanyakannya. Sudah jelas bahawa saya tidak akan masuk ke skop satu artikel; Lagipun, terdapat banyak soalan di sana. Oleh itu, ini akan menjadi satu siri artikel yang menjawab soalan sedemikian. Izinkan saya segera menekankan beberapa perkara:
  1. Terdapat artikel yang sangat baik dengan soalan dan jawapan teratas untuk mereka. Sesetengah soalan bertindih dengan senarai yang dibentangkan di atas (250+), jadi soalan ini akan dilangkau supaya tidak menduplikasi maklumat sekali lagi.

  2. Soalan-soalan dikemukakan dalam bahasa Ukraine, tetapi memandangkan majoriti peserta JavaRush berbahasa Rusia (dan sebahagian besarnya saya juga), jawapannya adalah dalam bahasa Rusia.

  3. Jawapannya akan ringkas, kerana jika anda menulis dengan terperinci, jawapan kepada beberapa soalan mungkin memerlukan artikel yang berasingan. Dan semasa temu bual, jawapan yang terperinci dan banyak tidak diperlukan, kerana penemuduga anda hanya mempunyai satu jam untuk menemu bual anda mengenai topik yang diperlukan (dan, seperti yang anda ingat, itu sudah cukup). Bagi mereka yang suka menggali lebih dalam, saya akan meninggalkan pautan.

Jadi, mari kita mulakan.

Soalan dan Jawapan Peringkat Rendah

Analisis soalan dan jawapan temu bual.  Bahagian 1 - 2

Isu umum

1. Apakah corak reka bentuk yang anda tahu? Beritahu kami tentang dua templat yang anda gunakan dalam kerja anda.

Terdapat pelbagai jenis templat: anda boleh mula berkenalan dengannya dari artikel ini dan ini. Nah, bagi anda yang ingin membiasakan diri dengan mereka secara terperinci, saya syorkan membaca buku “Kepala Didahulukan. Corak Rekaan" . Dengan bantuannya, anda boleh mengkaji corak reka bentuk yang paling asas secara terperinci dan dengan cara yang mudah. Apabila bercakap tentang corak reka bentuk yang boleh anda gunakan sebagai contoh dalam temu bual, beberapa yang terlintas di fikiran ialah:
  • Builder ialah templat yang kerap digunakan, alternatif kepada penciptaan objek klasik;
  • Corak strategi , yang sememangnya mewakili polimorfisme. Iaitu, kami mempunyai satu antara muka, tetapi tingkah laku program akan berubah bergantung pada pelaksanaan khusus antara muka ini yang dipindahkan ke fungsi (kini strategi digunakan secara praktikal di mana-mana dalam aplikasi java).
Jika ini tidak mencukupi untuk anda, perhatikan Spring (jika anda sudah biasa dengannya), kerana ia adalah platform keseluruhan rangka kerja, yang seterusnya dipenuhi dengan corak atas dan bawah. Berikut ialah beberapa contoh perkara yang saya bincangkan:
  • Kilang - dalam ApplicationContext (atau dalam BeanFactory);
  • Singleton - semua kacang adalah singleton secara lalai;
  • Proksi - pada dasarnya semua dalam Spring menggunakan corak ini dalam satu cara atau yang lain, sebagai contoh, AOP;
  • Rantaian tanggungjawab ialah corak berdasarkan konsep yang mana Spring Security berfungsi;
  • Templat - digunakan dalam Spring Jdbc.

Teras Java

Analisis soalan dan jawapan temu bual.  Bahagian 1 - 3

2. Apakah jenis data yang terdapat di Jawa?

Java mempunyai jenis data primitif:
  • bait — integer dalam julat -128 hingga 127, seberat 1 bait;
  • pendek — integer dalam julat -32768 hingga 32767, seberat 2 bait;
  • int — integer -2147483648 hingga 2147483647, seberat 4 bait;
  • panjang — integer dalam julat 9223372036854775808 hingga 9223372036854775807, seberat 8 bait;
  • float — nombor titik terapung dalam julat -3.4E+38 hingga 3.4E+38, seberat 4 bait;
  • double — nombor titik terapung dalam julat -1.7E+308 hingga 1.7E+308, seberat 8 bait;
  • char — aksara tunggal dalam UTF-16, seberat 2 bait;
  • nilai boolean benar/salah , seberat 1 bait.
Dan jenis data rujukan , yang menghala ke objek pada timbunan.

3. Bagaimanakah objek berbeza daripada jenis data primitif?

Perbezaan pertama: jumlah memori yang diduduki: primitif mengambil sangat sedikit, kerana ia hanya mengandungi nilai mereka sendiri, manakala objek boleh mengandungi sangat, sangat banyak nilai yang berbeza: kedua-dua primitif dan rujukan kepada objek lain. Perbezaan kedua: Java ialah bahasa berorientasikan objek, jadi segala-galanya di dalamnya berfungsi melalui interaksi antara objek, dan primitif tidak sesuai dengan baik (sebenarnya, inilah sebabnya Java bukan bahasa berorientasikan objek 100%. Ketiga, mengikuti daripada yang kedua: memandangkan Java memfokuskan pada interaksi antara objek, objek ini mempunyai banyak mekanisme berbeza untuk mengurusnya. Contohnya, pembina, kaedah, pengecualian (yang beroperasi terutamanya pada objek), dsb. Sebenarnya, supaya primitif entah bagaimana boleh terlibat (bekerja) dalam persekitaran berorientasikan objek ini, pembungkus dicipta untuk jenis primitif ( Integer , Character , Double , Boolean ...)

4. Apakah perbezaan antara lulus parameter dengan rujukan dan nilai?

Medan primitif menyimpan nilainya: sebagai contoh, jika kita menetapkan int i = 9; medan i menyimpan nilai 9 . Apabila kita mempunyai rujukan kepada objek, ia bermakna kita mempunyai medan dengan rujukan kepada objek, atau dengan kata lain, dengan nilai alamat objek dalam ingatan.
Cat cat = new Cat();
Ternyata medan dengan rujukan kepada objek juga menyimpan nilai , nilai alamat memori. Iaitu, cat menyimpan nilai alamat objek Cat() baharu dalam ingatan. Apabila kita menghantar parameter kepada kaedah, nilainya disalin. Dalam kes primitif, nilai primitif akan disalin. Sehubungan itu, kaedah ini akan berfungsi dengan salinan, menukar yang tidak akan menjejaskan yang asal. Dalam kes jenis rujukan, nilai alamat memori akan disalin, masing-masing, alamat akan sama dengan objek yang dituju. Dan jika kita menukar objek menggunakan pautan baru ini, ia akan ditukar untuk yang lama (lagipun, kedua-duanya menunjuk ke objek yang sama).

5. Apakah itu JVM, JDK, JRE?

JVM - Mesin Maya Java ialah mesin maya yang menjalankan kod bait Java yang telah dijana oleh pengkompil. JRE - Java Runtime Environment - pada asasnya ialah persekitaran untuk menjalankan aplikasi java, yang mengandungi JVM , perpustakaan standard dan komponen lain untuk menjalankan applet dan aplikasi yang ditulis dalam bahasa pengaturcaraan Java. Dalam erti kata lain , JRE ialah pakej semua yang diperlukan untuk menjalankan program Java yang disusun, tetapi tidak mengandungi alatan dan utiliti seperti penyusun atau penyahpepijat untuk pembangunan aplikasi. JDK - Kit Pembangunan Java - set lanjutan JRE , iaitu persekitaran bukan sahaja untuk pelancaran, tetapi juga untuk membangunkan aplikasi Java. JDK mengandungi semua yang ada dalam JRE, serta pelbagai alatan tambahan - penyusun dan penyahpepijat yang diperlukan untuk mencipta aplikasi dalam Java (juga mengandungi dokumen java).Analisis soalan dan jawapan temu bual.  Bahagian 1 - 4

6. Mengapa menggunakan JVM?

Seperti yang dinyatakan di atas, Mesin Maya Java ialah mesin maya yang menjalankan kod bait Java yang telah dijana oleh pengkompil. Iaitu, JVM tidak memahami kod sumber Java. Oleh itu, pertama, fail .java disusun , yang selepas penyusunan sudah mempunyai sambungan .class dan yang dibentangkan dalam bentuk kod bait yang sama yang JVM fahami. Setiap OS mempunyai JVM sendiri, jadi setelah menerima fail bytecode, JVM melaksanakannya, menyesuaikannya dengan OS di mana ia berlaku. Sebenarnya, disebabkan JVM yang berbeza, versi JDK (atau JRE) berbeza untuk OS yang berbeza (setiap daripadanya memerlukan JVM sendiri). Mari kita ingat bagaimana pembangunan berfungsi dalam bahasa pengaturcaraan lain. Anda membangunkan program, kemudian kodnya disusun menjadi kod mesin untuk OS tertentu, dan kemudian anda boleh menjalankannya. Dengan kata lain, anda perlu menulis versi program yang berbeza untuk setiap sistem. Manakala di Java, terima kasih kepada pemprosesan dwi kod (penyusunan dan pemprosesan bait kod JVM), anda boleh menikmati faedah merentas platform. Kami pernah mencipta kod itu, menyusunnya semula ke dalam bytecode, memindahkannya ke mana-mana OS dan JVM tempatan menjalankan kod tersebut. Ini adalah harta legenda Java - tulis sekali, jalankan di mana-mana sahaja . Analisis soalan dan jawapan temu bual.  Bahagian 1 - 5Baca lebih lanjut mengenai perkara ini dalam artikel " Menyusun dan melaksanakan aplikasi Java di bawah hud ."

7. Apakah itu bytecode?

Seperti yang saya katakan di atas, pengkompil menukar kod Java kepada kod bait perantaraan (fail dengan sambungan .java kepada fail dengan sambungan .class). Bytecode dalam banyak cara serupa dengan kod mesin, cuma ia menggunakan set arahan bukan dari pemproses sebenar, tetapi dari yang maya. Lebih-lebih lagi, ia mungkin termasuk bahagian yang tertumpu pada penggunaan pengkompil JIT, yang mengoptimumkan pelaksanaan arahan untuk pemproses sebenar di mana program dijalankan. Penyusunan JIT, juga dipanggil kompilasi on-the-fly, ialah teknologi yang meningkatkan prestasi program menggunakan bytecode dengan menyusun bytecode ke dalam mesin atau format lain semasa program sedang berjalan. Seperti yang anda mungkin telah meneka, JVM menggunakan pengkompil JIT apabila ia menjalankan bytecode. Mari kita lihat contoh bytecode: Analisis soalan dan jawapan temu bual.  Bahagian 1 - 6Tidak terlalu boleh dibaca, bukan? Nah, ini bukan arahan untuk kami, tetapi untuk JVM. Berikut ialah artikel yang akan membantu anda memahami isu ini dengan lebih baik.

8. Apakah ciri-ciri JavaBean?

JavaBeans ialah kelas Java dengan peraturan tertentu. Berikut adalah beberapa peraturan untuk menulis JavaBean :
  1. Kelas mesti mengandungi pembina akses awam kosong (tiada parameter) dengan pengubah akses awam . Pembina ini memungkinkan untuk mencipta objek kelas ini tanpa masalah yang tidak perlu (supaya tidak ada kekecohan yang tidak perlu dengan parameter).

  2. Medan dalaman kelas diakses melalui kaedah get dan set , yang sepatutnya standard. Sebagai contoh, jika medan adalah name , maka getName dan setName, dsb. Ini seterusnya membolehkan pelbagai alatan (rangka kerja) untuk secara automatik menentukan dan mengemas kini kandungan kacang tanpa komplikasi.

  3. Kelas mesti mengandungi versi ganti kaedah equals() hashCode() dan toString() .

  4. Kelas mesti boleh bersiri, iaitu, ia mesti mempunyai antara muka penanda - Boleh Bersiri atau melaksanakan antara muka Externalizable . Ini adalah perlu supaya keadaan kacang boleh disimpan, disimpan dan dipulihkan dengan pasti.

Analisis soalan dan jawapan temu bual.  Bahagian 1 - 7Anda boleh membaca tentang jenis JavaBeans dalam bahan ini .

9. Apakah OutOfMemoryError?

OutOfMemoryError ialah salah satu ralat masa jalan kritikal yang dikaitkan dengan pengendalian Mesin Maya Java (JVM). Dipanggil apabila JVM tidak dapat memperuntukkan objek kerana memori tidak mencukupi untuknya dan pengumpul sampah tidak dapat memperuntukkan lebih banyak memori. Beberapa jenis OutOfMemoryError :
  • OutOfMemoryError: Ruang timbunan Java - objek tidak boleh diperuntukkan pada timbunan Java kerana memori tidak mencukupi. Ralat mungkin disebabkan oleh kebocoran memori atau kerana saiz timbunan lalai tidak cukup besar untuk aplikasi semasa.

  • OutOfMemoryError: Had Overhed GC melebihi - disebabkan oleh fakta bahawa jumlah data hampir tidak sesuai dengan timbunan, pengumpul sampah berjalan sepanjang masa, dan program Java berjalan sangat perlahan, dan akibatnya, had overhed pengumpul sampah melebihi dan aplikasi ranap dengan ralat ini.

  • OutOfMemoryError: Saiz tatasusunan yang diminta melebihi had VM - menunjukkan bahawa aplikasi cuba memperuntukkan memori untuk tatasusunan yang lebih besar daripada saiz timbunan, yang sekali lagi mungkin disebabkan oleh peruntukan memori lalai yang tidak mencukupi.

  • OutOfMemoryError: Metaspace —timbunan telah kehabisan ruang yang diperuntukkan untuk metadata (metadata ialah arahan untuk kelas dan kaedah).

  • OutOfMemoryError: minta bait saiz atas sebab. Kehabisan ruang swap - beberapa kegagalan berlaku apabila cuba memperuntukkan memori daripada timbunan dan, akibatnya, terdapat kekurangan ingatan dalam timbunan.

10. Apakah surih tindanan? Bagaimana untuk mendapatkannya?

Jejak Tindanan ialah senarai kelas dan kaedah yang telah dipanggil sehingga tahap ini dalam aplikasi. Anda boleh memanggil jejak tindanan pada titik tertentu dalam aplikasi seperti ini:
StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
Dengan cara ini kita akan mendapat tatasusunan elemen surih tindanan yang disusun dalam susunan LIFO - Terakhir Masuk Dahulu Keluar . Analisis soalan dan jawapan temu bual.  Bahagian 1 - 8Di Java, sebagai peraturan, apabila mereka bercakap tentang surih tindanan, mereka maksudkan surih tindanan yang dipaparkan dalam konsol apabila ralat (atau pengecualian) berlaku. Anda boleh mendapatkan jejak timbunan pengecualian seperti ini:
StackTraceElement[] stackTraceElements;
try{
                ...
} catch (Exception e) {
   stackTraceElements = e.getStackTrace();
}
Nah, jika kita bercakap tentang mengeluarkan jejak tindanan pengecualian dalam konsol:
try{
                ...
} catch (Exception e) {
  e.printStackTrace();
}
Selain itu, jika kami mempunyai ralat, pengecualian yang tidak ditanda atau pengecualian yang disemak , yang kami tidak akan memproses, tetapi hanya akan memajukan, maka apabila aplikasi ranap, kami akan menerima surih tindanan pengecualian secara automatik dalam konsol. Contoh kecil pengecualian surih tindanan dalam konsol: Analisis soalan dan jawapan temu bual.  Bahagian 1 - 9Anda boleh membaca lebih lanjut mengenai Surih Tindanan di sini . Kami akan fokus pada isu ini hari ini...Analisis soalan dan jawapan temu bual.  Bahagian 1 - 10
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION