CodeGym /Blog Java /rawak /Meneroka soalan dan jawapan daripada temu duga kerja untu...
John Squirrels
Tahap
San Francisco

Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java. Bahagian 1

Diterbitkan dalam kumpulan
Hai! CodeGym telah mengumpulkan kumpulan orang yang pelbagai. Sesetengah daripada kami mahu tidak lebih daripada menjadi pembangun Java, dan kami melaburkan banyak masa dan usaha ke dalam pembangunan. Yang lain sudah menjadi pembangun Java. Dalam kedua-dua kes, anda perlu bersedia untuk diuji dalam temu duga teknikal. Ini tidak mudah. Mereka memerlukan persediaan emosi dan teknikal. Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 1 - 1Saya baru-baru ini menemui beberapa senarai besar soalan temu duga untuk jawatan pembangun Java. Soalan dibahagikan kepada peringkat yang berbeza: junior, pertengahan dan senior. Jangan risau: bukan semua soalan mudah, tetapi soalan yang mempunyai asterisk jarang ditanya. Soalan-soalannya bagus, dan saya ingin cuba menjawab kebanyakannya. Jelas sekali, ini tidak semua muat dalam satu artikel. Lagipun, terdapat banyak soalan di sana. Ini bermakna akan ada satu siri artikel dengan jawapan kepada soalan temu bual ini. Izinkan saya menekankan beberapa perkara dengan segera: jawapannya akan pendek, kerana jawapan yang ditulis dengan terperinci mungkin dikeluarkan ke dalam artikel yang berasingan. Juga, pada temu bual jawapan yang sangat terperinci dan banyak tidak dikehendaki, kerana penemuduga anda hanya mempunyai satu jam untuk menemu bual anda mengenai topik penting (dan,

Soal Jawab untuk jawatan pembangun junior

Soalan umum

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

Terdapat pelbagai jenis corak. Bagi anda yang ingin membiasakan diri secara menyeluruh dengan corak reka bentuk, saya syorkan membaca buku "Kepala Dahulu. Corak Rekaan". Ia akan membantu anda mempelajari butiran corak reka bentuk yang paling asas dengan mudah. Dari segi corak reka bentuk yang boleh anda sebutkan dalam temu duga kerja, perkara berikut terlintas di fikiran:
  • Builder — templat yang kerap digunakan, alternatif kepada pendekatan klasik untuk penciptaan objek;
  • Strategi — corak yang pada asasnya mewakili polimorfisme. Iaitu, kami mempunyai satu antara muka, tetapi tingkah laku program berubah bergantung pada pelaksanaan antara muka khusus yang diserahkan kepada fungsi (corak strategi kini digunakan hampir di mana-mana dalam aplikasi Java).
Jika itu tidak mencukupi untuk anda, beri perhatian kepada Spring (jika anda sudah biasa dengannya), kerana ia adalah platform keseluruhan rangka kerja, yang seterusnya, diserap dengan corak dari awal hingga akhir. Berikut ialah beberapa contoh perkara yang saya bincangkan:
  • Kilang — corak ini boleh didapati dalam ApplicationContext (atau dalam BeanFactory);
  • Singleton — semua kacang adalah singleton secara lalai;
  • Proksi — pada asasnya, semua dalam Spring menggunakan corak ini dalam satu cara atau yang lain, sebagai contoh, AOP;
  • Rantaian tanggungjawab — corak yang menyokong Keselamatan Musim Bunga;
  • Templat — digunakan dalam Spring JDBC.

Teras Java

Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 1 - 2

2. Apakah jenis data yang terdapat di Jawa?

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

3. Bagaimanakah objek berbeza daripada jenis data primitif?

Perbezaan pertama ialah jumlah memori yang diduduki: primitif mengambil sangat sedikit kerana ia hanya mengandungi nilainya sendiri, tetapi objek boleh mengandungi banyak nilai yang berbeza — kedua-dua primitif dan rujukan kepada objek lain. Perbezaan kedua ialah ini: Java ialah bahasa berorientasikan objek, jadi segala-galanya dalam Java berfungsi adalah interaksi antara objek. Primitif tidak sesuai di sini. Sebenarnya, itulah sebabnya Java bukan bahasa berorientasikan objek 100%. Perbezaan ketiga, yang berikut dari yang kedua ialah kerana Java memfokuskan pada interaksi objek, terdapat banyak mekanisme yang berbeza untuk mengurus objek. Sebagai contoh, pembina, kaedah, pengecualian (yang berfungsi terutamanya dengan objek), dsb. Dan untuk membenarkan primitif entah bagaimana berfungsi dalam persekitaran berorientasikan objek ini, pencipta Java menghasilkanpembalut untuk jenis primitif ( Integer , Character , Double , Boolean ...)

4. Apakah perbezaan antara menghantar hujah dengan rujukan dan dengan nilai?

Medan primitif menyimpan nilainya: sebagai contoh, jika kita menetapkan int i = 9; , maka medan i menyimpan nilai 9. Apabila kita mempunyai rujukan kepada objek, itu bermakna kita mempunyai medan dengan rujukan kepada objek. Dalam erti kata lain, kita mempunyai medan yang menyimpan alamat objek dalam ingatan.

Cat cat = new Cat();
Ini bermakna medan dengan rujukan kepada objek juga menyimpan nilai . Nilai mereka adalah alamat memori. Iaitu, cat menyimpan alamat memori objek Cat() baharu . Apabila kita menyampaikan hujah kepada kaedah, nilainya disalin. Dalam kes primitif, nilai primitif disalin. Sehubungan itu, kaedah ini berfungsi dengan salinan. Apabila salinan ditukar, yang asal tidak terjejas. Dalam kes jenis rujukan, nilai alamat memori disalin. Sehubungan itu, kedua-dua pembolehubah rujukan akan menyimpan alamat yang menunjuk ke objek yang sama. Dan jika kita menggunakan rujukan baru ini untuk menukar objek, maka kita akan mendapati ia juga ditukar untuk rujukan lama. Lagipun, mereka berdua menunjuk objek yang sama.

5. Apakah itu JVM, JDK dan JRE?

JVM adalah singkatan dari Java Virtual Machine , yang menjalankan Java bytecode yang dipra-jana oleh pengkompil. JRE bermaksud Java Runtime Environment . Pada asasnya, ia adalah persekitaran untuk menjalankan aplikasi Java. Ia termasuk 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 ia tidak termasuk alat dan utiliti seperti penyusun atau penyahpepijat untuk membangunkan aplikasi. JDK bermaksud Java Development Kit , yang merupakan lanjutan daripada JRE. Iaitu, ia adalah persekitaran bukan sahaja untuk menjalankan aplikasi Java, tetapi juga untuk membangunkannya. JDK mengandungi segala-galanya dalam JRE, serta pelbagai alatan tambahan — penyusun dan penyahpepijat — diperlukan untuk mencipta aplikasi Java (termasuk dokumen Java). Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 1 - 3

6. Mengapa menggunakan JVM?

Seperti yang dinyatakan di atas, Mesin Maya Java ialah mesin maya yang menjalankan kod bait Java yang telah dijana terlebih dahulu oleh pengkompil. Ini bermakna JVM tidak memahami kod sumber Java. Jadi, pertama, kami menyusun fail .java . Fail yang disusun mempunyai .classsambungan dan kini dalam bentuk bytecode, yang JVM faham. JVM adalah berbeza untuk setiap OS. Apabila JVM menjalankan fail bytecode, ia menyesuaikannya untuk OS yang ia berjalan. Malah, kerana terdapat JVM yang berbeza, JDK (atau JRE) juga berbeza untuk OS yang berbeza (setiap versi memerlukan JVM sendiri). Mari kita ingat bagaimana pembangunan berfungsi dalam bahasa pengaturcaraan lain. Anda menulis 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 platform. Tetapi pemprosesan kod berganda Java (kompilasi kod sumber menjadi kod bait, dan kemudian pemprosesan kod bait oleh JVM) membolehkan anda menikmati faedah penyelesaian merentas platform. Kami mencipta kod sekali dan menyusunnya ke dalam bytecode. Kemudian kita boleh membawanya ke mana-mana OS, dan JVM asli dapat menjalankannya. Dan ini betul-betul legenda Javatulis sekali, jalankan di mana-mana ciri. Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 1 - 4

7. Apakah itu bytecode?

Seperti yang saya katakan di atas, pengkompil menukar kod Java kepada kod bait perantaraan (kita pergi daripada fail dengan sambungan .java kepada fail dengan sambungan .class). Dalam banyak cara, bytecode adalah serupa dengan kod mesin, kecuali set arahannya bukan untuk pemproses sebenar, tetapi maya. Walau bagaimanapun, ia boleh memasukkan bahagian yang direka untuk pengkompil JIT, yang mengoptimumkan pelaksanaan arahan untuk pemproses sebenar yang sedang dijalankan oleh program. Penyusunan JIT, juga dipanggil kompilasi on-the-fly, ialah teknologi yang meningkatkan prestasi program bytecode dengan menyusun bytecode ke dalam kod 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 beberapa contoh bytecode: Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 1 - 5Tidak terlalu boleh dibaca, eh? Berita baiknya ialah arahan ini tidak ditujukan untuk kita. Ia untuk JVM.

8. Apakah ciri-ciri JavaBean?

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

  2. Medan dalaman diakses melalui kaedah dapatkan dan tetapkan contoh, yang sepatutnya mempunyai pelaksanaan standard. Sebagai contoh, jika kita mempunyai medan nama , maka kita sepatutnya mempunyai getName dan setName , dsb. Ini membolehkan pelbagai alat (rangka kerja) mendapatkan dan menetapkan kandungan kacang secara automatik tanpa sebarang kesulitan.

  3. Kelas mesti mengatasi kaedah equals() , hashCode() dan toString() .

  4. Kelas mestilah boleh bersiri. Iaitu, ia mesti mempunyai antara muka penanda Serializable atau melaksanakan antara muka Externalizable . Ini supaya keadaan kacang boleh disimpan, disimpan dan dipulihkan dengan pasti.

Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 1 - 6

9. Apakah itu OutOfMemoryError?

OutOfMemoryError ialah ralat masa jalan kritikal yang berkaitan dengan Mesin Maya Java (JVM). Ralat ini berlaku apabila JVM tidak boleh memperuntukkan objek kerana memori tidak mencukupi untuknya dan pengumpul sampah tidak boleh memperuntukkan lebih banyak memori. Beberapa jenis OutOfMemoryError :
  • OutOfMemoryError: Ruang timbunan Java — objek tidak boleh diperuntukkan pada timbunan Java kerana memori tidak mencukupi. Ralat ini boleh disebabkan oleh kebocoran memori atau saiz timbunan lalai yang terlalu kecil untuk aplikasi semasa.

  • OutOfMemoryError: Had Overhed GC melebihi — kerana data aplikasi hampir tidak muat dalam timbunan, pengumpul sampah berjalan sepanjang masa, menyebabkan program Java berjalan sangat perlahan. Akibatnya, had overhed pemungut sampah melebihi dan aplikasi ranap dengan ralat ini.

  • OutOfMemoryError: Saiz tatasusunan yang diminta melebihi had VM — ini menunjukkan bahawa aplikasi cuba memperuntukkan memori untuk tatasusunan yang melebihi saiz timbunan. Sekali lagi, ini mungkin bermakna bahawa memori yang tidak mencukupi telah diperuntukkan secara lalai.

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

  • OutOfMemoryError: minta bait saiz atas sebab. Kehabisan ruang swap — beberapa ralat berlaku semasa cuba memperuntukkan memori daripada timbunan, dan akibatnya, timbunan kekurangan ruang yang mencukupi.

10. Apakah surih tindanan? Bagaimana saya boleh mendapatkannya?

Jejak tindanan ialah senarai kelas dan kaedah yang telah dipanggil sehingga tahap ini dalam pelaksanaan aplikasi. Anda boleh mendapatkan jejak tindanan pada titik tertentu dalam aplikasi dengan melakukan ini:

StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
Ini memberi kita susunan StackTraceElements yang disusun dalam susunan Terakhir Masuk Dahulu (LIFO) . Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 1 - 7Di Jawa, apabila orang bercakap tentang surih tindanan, mereka biasanya bermaksud surih tindanan yang dipaparkan pada konsol apabila ralat (atau pengecualian) berlaku. Anda boleh mendapatkan surih tindanan daripada pengecualian seperti ini:

StackTraceElement[] stackTraceElements;
try{
                ...
} catch (Exception e) {
   stackTraceElements = e.getStackTrace();
}
Dan jika kita ingin memaparkan surih tindanan pengecualian pada konsol:

try{
                ...
} catch (Exception e) {
  e.printStackTrace();
}
Selain itu, jika ralat, pengecualian yang tidak ditanda atau pengecualian yang disemak yang tidak dikendalikan berlaku, maka kami secara automatik mendapat surih tindanan pengecualian pada konsol apabila aplikasi ranap. Berikut ialah contoh kecil surih tindanan pada konsol: Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 1 - 8Dan pada nota itu, kami akan menyimpulkan perbincangan kami tentang topik ini hari ini.Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 1 - 9
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION