Berbagi teknologi

Pengalaman wawancara pertama (magang pengembangan Java)

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Pertanyaan pewawancara

  • Saya ingin bertanya apakah Anda pernah mengerjakan proyek apa pun di sini?
  • Bisakah Anda memberi tahu kami tentang proyek yang telah Anda kerjakan, tumpukan teknologi apa yang Anda gunakan, dan konten apa yang menjadi tanggung jawab Anda untuk dikembangkan? (Pengalaman proyek)
  • Apa saja delapan tipe data dasar? (Basis)
  • Bisakah Anda memberi tahu saya apakah tipe panjang dapat dijalankan secara langsung? Pertanyaannya apakah bisa dihitung secara langsung? (Basis)
  • Apakah Anda memahami pola tunggal? Bisakah Anda membicarakannya (Pola Desain)
  • Apa perbedaan antara mode orang malas dan mode orang lapar?
  • Apa ciri-ciri transaksi? (transaksi)
  • Ceritakan tentang pengecualian yang Anda temui saat mengerjakan proyek? (abnormal)
  • Mari kita bahas tentang tiga kategori waktu yang umum digunakan? (Basis)
  • Bicara tentang tiga metode penanggalan?
  • Mari kita bicara tentang siklus hidup sesi. (sidang)
  • Pernahkah Anda mengalami hilangnya presisi floating point saat mengerjakan sebuah proyek? Bagaimana Anda mengatasinya?
  • Lalu kita melakukan penghitungan menggunakan floating point. Tipe data manakah yang akan Anda pilih untuk dihitung?
  • Bisakah Anda memberi tahu saya beberapa anotasi yang umum digunakan? Musim semi? Atau sesuatu yang lain?
  • Tahukah Anda tentang thread?
    • Apa perbedaan antara utas dan proses?
  • Jadi beritahu saya apa itu keamanan thread?
  • Katakan padaku perbedaan antara == dan sama dengan?
  • Jadi apakah Anda pernah menggunakan linux? Bisakah Anda menjelaskan secara singkat tentang beberapa perintah yang umum digunakan?

masalah terpecahkan

- 我想问一下你这边有做过什么项目吗?

Saya pikir Anda bisa memilih satu atau dua proyek yang relatif mahir untuk dibicarakan.

- 你方便讲一下你做过的那些项目吗,用了什么技术栈,包括你负责开发的内容是什么?

Pilih proyek yang paling familiar untuk dibicarakan.

- 八大基本数据类型是什么?

byte, pendek, int, panjang, float, double, char, boolean

- 你说一下long类型能直接运转吗(Saya rasa ini menanyakan apakah data tipe panjang dapat dioperasikan secara langsung)

Data tipe panjang dapat langsung dioperasikan. Saat Anda menggabungkan nilai tipe int dan panjang dalam sebuah ekspresi, nilai tipe int akan secara otomatis dipromosikan ke tipe panjang untuk memastikan bahwa hasil dari keseluruhan ekspresi adalah tipe panjang.

- 你了解单例模式吗?你可以讲一下吗

Pola Singleton adalah pola desain perangkat lunak yang umum digunakan. Tujuannya adalah untuk memastikan bahwa suatu kelas hanya memiliki satu instance dan menyediakan titik akses global untuk mendapatkan instance unik ini. Pola ini berguna ketika Anda perlu mengontrol akses ke sumber daya, atau ketika membuat instance objek membutuhkan banyak sumber daya atau memakan waktu, dan hanya satu dari sumber daya atau instans ini yang diperlukan secara global. Metode implementasi umum mode singleton terutama meliputi: mode malas dan mode lapar.

- 懒汉模式跟饿汉模式有什么区别?

  1. Dapat diperoleh dariWaktu inisialisasi objek, keamanan thread, dan pemanfaatan sumber dayaBandingkan dalam aspek lain:

      1. Waktu inisialisasi
      • modus malas: Mode malas adalah a延迟加载 pola tunggal.Hal ini ditandai dengan第一次使用时创建实例对象 , daripada membuatnya saat kelas dimuat.Pola ini menghindari kebutuhan akan objek misalnya kapan资源浪费, dibuat hanya saat diperlukan.
      • Modus lapar: Mode pria lapar adalah sejenisnya在类加载时就创建实例 pola tunggal. Karakteristiknya adalah objek instance dibuat ketika kelas dimuat, terlepas dari apakah objek tersebut akan digunakan.Metode ini memastikan bahwa objek contoh yang sama dapat diperoleh dalam keadaan apa pun, namun hal ini dapat menyebabkan beberapa性能和资源上的浪费, terutama dalam beberapa kasus objek instance tidak digunakan.
      1. keamanan benang
      • modus malas: Mode malas itu sendiri非线程安全的 , karena ada kemungkinan beberapa thread memanggil metode getInstance() secara bersamaan dan memasukkan pernyataan penilaian pada saat yang sama, sehingga menghasilkan banyak instance.Untuk mencapai keamanan thread, Anda dapat menggunakan metode getInstance()添加synchronized关键字 , namun hal ini akan menyebabkan peningkatan kinerja. Selain itu, Anda juga dapat menggunakan penguncian yang diperiksa ulang (Double-Checked Locking) dan metode lain untuk mengurangi overhead sinkronisasi.
      • Modus lapar: Mode lapar adalah线程安全Ya, karena objek instance telah dibuat saat kelas dimuat, tidak ada masalah persaingan di lingkungan multi-thread.
      1. Pemanfaatan dan Kinerja Sumber Daya
      • modus malas : Mode Malas dapat menghemat sumber daya karena menghindari pemborosan sumber daya saat objek instance tidak diperlukan. Namun, karena perlu diinisialisasi saat pertama kali digunakan, performa mungkin terpengaruh jika proses inisialisasi rumit atau memakan waktu lama.
      • Modus lapar : Mode lapar mungkin tidak sefleksibel mode malas dalam hal pemanfaatan sumber daya, karena mode ini menciptakan objek instan terlepas dari apakah objek tersebut akan digunakan. Namun, karena objek instance sudah dibuat saat kelas dimuat, maka akan lebih cepat pada panggilan pertama karena tidak diperlukan inisialisasi.
  2. Adegan yang berlaku

    • modus malas: Berlaku untukSkenario di mana objek dibuat hanya ketika digunakan untuk pertama kali, dan tidak ada persyaratan keamanan thread yang rumit selama proses inisialisasi objek instance. . Misalnya,manajer fileIni adalah contoh tipikal, karena Anda mungkin tidak perlu membaca dan menulis file segera saat aplikasi dimulai, namun hanya melakukan operasi terkait bila diperlukan.
    • Modus lapar : Cocok untuk sumber daya yang perlu diinisialisasi saat program dimulai dan digunakan sepanjang siklus hidup aplikasi. Misalnya, logger adalah kandidat yang baik untuk Pola Lapar karena fungsionalitas logging biasanya harus siap di awal aplikasi dan mencatat pesan sepanjang runtime aplikasi.
    • Singkatnya, mode orang malas dan mode orang lapar masing-masing memiliki kelebihan dan kekurangannya masing-masing, dan dalam penerapan praktis keduanya harus dipertimbangkan dan dirancang secara komprehensif sesuai dengan skenario tertentu.

- 说一下事务的几种特性?

  1. Transaksi memiliki empat ciri dasar, yang disebut juga sebagaiASAMFitur-fiturnya, secara khusus meliputi:
    • atomisitas : Atomisitas berarti bahwa semua operasi dalam suatu transaksi selesai atau tidak dijalankan. Jika terjadi kesalahan atau kegagalan pada saat pelaksanaan transaksi, maka operasi yang telah dilakukan akan dibatalkan (rolled back), dan seluruh transaksi akan seperti operasi yang tidak pernah terjadi. Fitur ini memastikan integritas dan konsistensi transaksi.
    • Konsistensi : Konsistensi berarti suatu transaksi harus mengubah database dari satu keadaan konsistensi ke keadaan konsistensi lainnya. Sebelum transaksi dimulai dan setelah transaksi berakhir, batasan integritas database (seperti batasan kunci utama, batasan kunci asing, dll.) tidak dimusnahkan, dan semua data mempertahankan konsistensi logis. Jika integritas database terganggu selama pelaksanaan transaksi, transaksi akan dibatalkan dan operasi yang telah dilakukan akan dibatalkan.
    • Isolasi : Isolasi berarti ketika beberapa transaksi dijalankan secara bersamaan, setiap transaksi diisolasi satu sama lain, dan pelaksanaan satu transaksi tidak dapat diintervensi oleh transaksi lainnya. Sistem basis data menyediakan tingkat isolasi tertentu sehingga transaksi yang dijalankan secara bersamaan tidak saling mengganggu, sehingga menjamin kebenaran dan konsistensi data. Isolasi biasanya dicapai melalui mekanisme seperti kunci (seperti kunci baris, kunci tabel, dll.) atau kontrol konkurensi multi-versi (MVCC).
    • Daya tahan : Daya tahan, juga disebut permanensi, berarti bahwa setelah suatu transaksi dilakukan, modifikasinya terhadap database bersifat permanen dan tidak akan hilang bahkan jika sistem gagal. Sistem basis data memastikan ketahanan transaksi melalui log dan mekanisme pemulihan. Bahkan jika terjadi kegagalan sistem, sistem dapat memulihkan modifikasi pada basis data dengan melakukan transaksi melalui log.

- 说一下你在做项目的过程中都遇到过哪些异常吗?(Cukup sebutkan beberapa)

  1. Pengecualian Kode
    • NullPointerException : Dilempar ketika mencoba mengakses atau mengoperasikan objek yang tidak diinisialisasi. Seringkali kita lupa memeriksa apakah objek tersebut null dan menggunakannya secara langsung.
    • Pengecualian array di luar batas (ArrayIndexOutOfBoundsException): Indeks yang tidak valid digunakan saat mengakses array (indeks kurang dari 0 atau lebih besar atau sama dengan ukuran array).
    • Ketik pengecualian konversi (ClassCastException): Saat melakukan casting, objek yang dikonversi bukan merupakan turunan dari tipe target atau subkelasnya.
    • ArithmeticException // dengan nol: Saat melakukan operasi pembagian, pembaginya adalah nol.
  2. Pengecualian Data
    • Kesalahan format data: Misalnya, saat mengurai data JSON atau XML, format datanya tidak memenuhi harapan.
    • Pengecualian integritas data: Jika batasan kunci asing dalam database gagal, aturan integritas data dilanggar saat mencoba memasukkan atau memperbarui data.
    • Data tidak ditemukan pengecualian: Jika data terkait tidak ditemukan sesuai dengan kondisi yang diberikan saat menanyakan database.
  3. Pengecualian Jaringan
    • Batas waktu koneksi habis (ConnectTimeoutException): Saat mencoba membuat koneksi jaringan, waktu permintaan koneksi habis saat menunggu respons.
    • Batas waktu baca habis (SocketTimeoutException): Waktu operasi habis saat membaca data dari koneksi.
    • Jaringan tidak dapat dijangkau (UnknownHostException):tak bisa memunculkan nama pemilik.
    • Koneksi ditolak (ConnectionRefusedError): Mesin target menolak permintaan koneksi.
  4. Pengecualian Sumber Daya Sistem
    • Memori meluap (OutOfMemoryError): JVM tidak memiliki cukup ruang memori saat mencoba mengalokasikan memori.
    • File tidak ada (FileNotFoundException): File atau direktori yang Anda coba akses tidak ada.
    • Izin tidak memadai (SecurityException/AccessDeniedException): Izin tidak memadai untuk melakukan operasi, seperti membaca dan menulis file, mengakses sumber daya jaringan, dll.
  5. Pengecualian Layanan Pihak Ketiga
    • Layanan tidak tersedia (ServiceUnavailableException): Layanan pihak ketiga yang bergantung untuk sementara tidak tersedia.
    • Batas API (RateLimitException): Permintaan ke API pihak ketiga melebihi batasnya (seperti batas frekuensi permintaan).
    • Otentikasi gagal (AuthenticationException): Saat mengakses layanan pihak ketiga, informasi otentikasi tidak valid atau kedaluwarsa.
  6. Pengecualian Logis
    • Kesalahan logika bisnis: Misalnya jumlah pesanan salah dihitung, persediaan tidak mencukupi tetapi pesanan masih diproses, dll.
    • Statusnya tidak konsisten: Keadaan tertentu dari sistem tidak sesuai dengan harapan, sehingga operasi selanjutnya menjadi tidak mungkin dilakukan.

- 说一下时间常用的三个类?

Tanggal Lokal, Waktu Lokal, Waktu Tanggal Lokal. (Cukup sebutkan tiga yang mana saja)

  • Di Java, kelas yang umum digunakan untuk waktu pemrosesan adalah kelas di bawah tiga paket java.util.Date, java.util.Calendar dan java.time yang diperkenalkan di Java 8 (sepertiTanggalSetempat、WaktuSetempat、TanggalWaktuSetempatTunggu)

- 说一下日历的三个方法?

Ketika berbicara tentang operasi yang berhubungan dengan kalender, kita biasanya memikirkan kelas java.util.Calendar, karena ini adalah kelas abstrak yang menyediakan metode untuk mengoperasikan bidang kalender (seperti tahun, bulan, hari, jam, dll.).Mulai dari Java 8, API tanggal dan waktu baru (terletak di bawah paket java.time) diperkenalkan, memberikan kemampuan pemrosesan tanggal dan waktu yang lebih baik.

  • Pengantar metode umum LocalDateTime:
      1. Buat objek LocalDateTime
      • now(): Membuat objek LocalDateTime yang mewakili tanggal dan waktu saat ini.
      • of(): Membuat objek LocalDateTime dengan tahun, bulan, hari, jam, menit, detik yang ditentukan (dan nanodetik opsional). Misalnya: LocalDateTime.of(2023, Bulan.JANUARI, 1, 12, 0, 0).
      1. Dapatkan properti objek LocalDateTime
      • getYear(), getMonth(), getDayOfMonth(), getHour(), getMinute(), getSecond(), dll.: digunakan untuk mendapatkan atribut tahun, bulan, hari, jam, menit, dan detik di masing-masing objek LocalDateTime.
      1. Ubah properti objek LocalDateTime
      • withYear(), withMonth(), withDayOfMonth(), withHour(), withMinute(), withSecond(), dll.: Menyetel properti objek LocalDateTime ke nilai yang ditentukan dan mengembalikan objek LocalDateTime baru. Objek asli tetap tidak berubah .variabel (karena LocalDateTime tidak dapat diubah).
      1. Penambahan dan pengurangan tanggal dan waktu
      • plusYears(), plusMonths(), plusDays(), plusHours(), plusMinutes(), plusSeconds(), dll.: Tambahkan periode waktu yang ditentukan ke objek LocalDateTime dan kembalikan objek LocalDateTime baru. minusYears(), minusMonths(), minusDays(), minusHours(), minusMinutes(), minusSeconds(), dll.: Kurangi periode waktu yang ditentukan dari objek LocalDateTime dan kembalikan objek LocalDateTime baru.
      1. Bandingkan objek LocalDateTime
      • isBefore(LocalDateTime other): Tentukan apakah objek saat ini lebih awal dari objek LocalDateTime yang ditentukan.
      • isAfter(LocalDateTime other): Tentukan apakah objek saat ini lebih lambat dari objek LocalDateTime yang ditentukan.
      1. Format objek LocalDateTime
      • format(DateTimeFormatter formatter): Memformat objek LocalDateTime menjadi string dalam format tanggal dan waktu yang ditentukan. Misalnya: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDateTime = dateTime.format(formatter);.
      1. Hitung perbedaan waktu
      • Meskipun LocalDateTime sendiri tidak menyediakan metode untuk menghitung perbedaan waktu secara langsung, Anda dapat menggunakan kelas Duration atau kelas ChronoUnit untuk menghitung perbedaan waktu antara dua objek LocalDateTime.
      • Gunakan kelas Durasi: Durasi durasi = Durasi.antara(mulai, akhir);, dan kemudian Anda bisa mendapatkan nilai spesifik dari perbedaan waktu, seperti detik, milidetik, dll., melalui objek durasi.
      • Menggunakan kelas ChronoUnit: Anda dapat menentukan unit untuk menghitung perbedaan waktu, seperti tahun, bulan, hari, jam, dll. Misalnya: hari yang panjang = ChronoUnit.DAYS.between(mulai, akhir);.

- 说一下session的生命周期吧。

  1. Pembuatan sesi
    • Waktu penciptaan:Sesi digunakan ketika pengguna pertama kali mengakses server dan meminta JSP, Servlet, dll.动态资源 dibuat kapan.Hanya mengakses HTML, gambar, dll.静态资源 Itu tidak akan memicu pembuatan Sesi. Jika perlu, Anda dapat memaksa pembuatan Sesi dengan memanggil request.getSession(true).
    • lokasi penyimpanan: Sesi disimpan di sisi server, biasanya di memori server untuk akses cepat.
  2. Pemeliharaan sesi
    • Perbarui waktu akses terakhir: Selama pengguna terus mengakses server, server akan memperbarui waktu akses terakhir Sesi dan mempertahankan Sesi untuk setiap permintaan, terlepas dari apakah akan membaca atau menulis Sesi. Hal ini menunjukkan bahwa Sesi pengguna berada dalam keadaan "aktif".
    • keunikan sesi : Setiap pengguna akan memiliki Sesi independen, yang diidentifikasi secara unik berdasarkan ID Sesi. ID Sesi biasanya dikirim ke klien melalui cookie (bernama JSESSIONID) sehingga server dapat mengidentifikasi sesi pengguna yang berbeda.
  3. Penghancuran sesi
    • Hancurkan secara otomatis : Ketika siklus hidup Sesi habis (yaitu, tidak ada aktivitas dalam waktu lama), server akan secara otomatis menghapusnya dari memori. Waktu ini biasanya dapat dikonfigurasi dan defaultnya adalah 30 menit di Tomcat.
    • Penghancuran manual : Pengembang dapat menghancurkan Sesi secara manual dengan memanggil metode invalidate() Sesi. Ini biasanya digunakan untuk skenario seperti logout dan timeout.
  4. Pengaturan siklus hidup sesi
    • Diatur di Servlet: Atur batas waktu Sesi dalam hitungan detik dengan memanggil metode session.setMaxInactiveInterval(int interval).
    • Diatur di web.xml: Di file web.xml aplikasi web,通过