1. Pertanyaan: Jika objek A dan B direferensikan secara melingkar, bisakah mereka menjadi GC?
Jawaban: Ya, mesin virtual saat ini pada dasarnya menggunakan algoritma analisis aksesibilitas untuk menentukan apakah objek bertahan, daripada hanya mengacu pada menghitung objek. Algoritma analisis aksesibilitas menggunakan serangkaian objek "GC Roots" (objek yang dirujuk dalam tumpukan mesin virtual, objek referensi atribut statis) sebagai titik awal. Jalur yang dicari node ini ke bawah disebut rantai referensi. Ketika suatu objek tidak memiliki koneksi rantai referensi ke akar GC, objek terbukti bahwa objek tidak tersedia.
2. Bagaimana memori overflow di java disebabkan?
OutofmemoryError:
(1) Program Space Pergern menggunakan sejumlah besar guci atau kelas, yang membuat mesin virtual Java tidak memuat ruang kelas tidak cukup.
Solusi: Sesuaikan Parameter XX: Permsize dan XX: Maxpermsize, Kurangi Paket JAR, dan kurangi pemuatan duplikat kelas.
(2) Java Heap Space Java Virtual Machine membuat terlalu banyak objek.
Solusi: Sesuaikan Parameter XMS (Ukuran Tumpukan Awal) XMX (Ukuran Tumpukan Maksimum), periksa loop mati atau objek duplikat yang tidak perlu
(3) Tidak dapat membuat utas asli baru JVM membutuhkan terlalu banyak ruang memori, dan membuat utas di JVM juga membutuhkan pembuatan utas dalam sistem operasi.
Solusi: Ubah Ubah Ukiran Benang di JVM.
3. String S = "123"; Berapa banyak objek yang dihasilkan dalam pernyataan ini?
Jika tidak ada "123" di kumpulan string, objek dihasilkan dan ditempatkan di kumpulan konstan. Jika ada "123", 0 objek dihasilkan.
Jika String s = new String("123") , jika tidak ada di kumpulan konstan, buat satu di kumpulan konstan dan kemudian buat satu dalam memori heap.
4. Apa perbedaan antara kesalahan, pengecualian dan runimeException?
Kesalahan dan pengecualian keduanya adalah subclass dari Throwable, dan RuntimeException adalah subclass dari pengecualian.
Kesalahan digunakan untuk menunjukkan bahwa aplikasi yang masuk akal tidak boleh mencoba menangkap kesalahan.
Pengecualian menunjukkan kondisi yang perlu ditangkap oleh aplikasi yang masuk akal. Ini dibagi menjadi pengecualian yang diperiksa dan pengecualian yang tidak terkendali.
RuntimeException adalah pengecualian yang tidak diperiksa, tidak memerlukan mencoba menangkap atau menyatakan pada metode ini. Subkelas utama: nullpointer, aritmatik, arrayIndexoutofbounds, classcast.
5. Apa perbedaan antara pembaca dan inputstream?
Mereka semua adalah kelas abstrak, pembaca digunakan untuk membaca aliran karakter (char atau string), dan inputstream digunakan untuk membaca aliran byte (array byte).
6. Apa peran kode hash?
HashCode terutama digunakan untuk pencarian cepat, seperti dalam struktur hashmap, yang digunakan untuk menemukan lokasi pasangan nilai kunci. Jika dua objek sama, kode hash harus sama, sedangkan objek kode hash dengan kode hash yang sama mungkin tidak sama, yang setara dengan meletakkannya di kotak yang sama.
7. Apa perbedaan antara hashmap dan hashtable?
Keamanan utas, kunci nilai nol, efisiensi, hashmap (iterator fast faging iterator), hashtable (enumerator iterator), dan posisi elemen hashmap akan berubah dari waktu ke waktu
8. Bisakah objek dalam hashmap digunakan sebagai kunci? Apakah ada persyaratan untuk objek yang ditentukan pengguna sebagai kunci?
Ya, tetapi objek utama harus menjadi objek yang tidak dapat diubah. Jika tidak, setelah entri dimasukkan ke dalam peta, mengubah nilai kunci akan menyebabkan nilai kunci saat ini tidak konsisten dengan nilai hash, yaitu, itu tidak cocok dengan indeks array dan tidak akan ditemukan.
9. Haruskah saya menggunakan run () atau start () untuk memulai utas?
Bagaimana menyelesaikan masalah sinkronisasi dan konkurensi dalam multithreading? Apa itu benang daemon? Apa itu benang daemon? Apa metode untuk mengimplementasikan utas daemon (arti thread.setDeamon ()) bagaimana cara menghentikan utas? Jelaskan apa itu keamanan utas? Berikan contoh benang tidak aman. Jelaskan peran kata kunci yang disinkronkan. Ketika utas memasukkan metode yang disinkronkan suatu objek, dapatkah utas lain memasukkan metode lain dari objek ini?
(1) Mulai
(2) mewarisi kelas utas, mengimplementasikan antarmuka runnable, dan menggunakan ExectuorService, Future, dan Callable untuk mengimplementasikan utas yang mengembalikan nilai.
(3) Metode sinkronisasi, blok kode sinkronisasi, kunci
(4) Thread Damon menyediakan layanan untuk pengoperasian utas lain, seperti GC dan Thread. setDeamon (true).
(5) thread.stop () tidak disarankan (sumber daya tidak akan dilepaskan dengan benar), dan interupsi digunakan untuk menghentikan utas.
(6) Ketika beberapa utas mengakses suatu objek, jika penjadwalan dan eksekusi bergantian utas ini di lingkungan runtime tidak diperlukan, sinkronisasi tambahan tidak diperlukan, atau operasi koordinasi lainnya dilakukan pada penelepon, dan hasil yang benar dapat diperoleh dengan memanggil objek ini, maka objek tersebut aman.
(7) Tiket dijual berulang kali.
(8) menyinkronkan kata kunci. Saat memodifikasi metode statis, kelas digunakan sebagai objek kunci, dan hanya satu utas yang dapat mengakses metode statis sinkronisasi semacam ini; Saat memodifikasi metode biasa, objek digunakan sebagai objek kunci, dan hanya satu utas yang dapat mengakses metode sinkronisasi ini; Anda juga dapat menyesuaikan blok kode sinkronisasi objek kunci.
(9) Metode yang disinkronkan tidak dapat dimasukkan, dan tidak disinkronkan dapat dimasukkan.
10. Fitur baru JDK8 apa yang telah Anda pelajari dan jelaskan fitur yang sesuai dengan contoh?
(1) Ekspresi Lambda: Pemrograman Fungsional, Referensi Metode
(2) Stream API
(3) Metode antarmuka default
(4) Peningkatan API Tanggal dan Waktu, Menambahkan Metode DatetImeformatter
11. Apa prinsip untuk mengoptimalkan SQL?
Untuk detailnya, silakan lihat blog di klasifikasi database saya
12. Apa perbedaan antara Serlvet dan CGI dalam siklus hidup servlet?
Siklus hidup: pemuatan kelas, instantiasi (membangun objek), inisialisasi (init), layanan (layanan), dan hancurkan.
CGI: Antarmuka gateway umum, antarmuka gateway umum, ditulis dalam bahasa Perl, membuat objek CGI untuk setiap permintaan.
Servlet: Hanya instantiasi dan inisialisasi yang diperlukan sekali, dan multi-threading.
13. Apa keuntungan dari StringBuffer? Mengapa cepat?
Karena StringBuffer tidak memerlukan pembuatan objek string yang berulang, tetapi ini tidak terjadi.
Misalnya, string s = "a" + "b" + "c" kompiler operasi akan mengoptimalkan dan menjadi string s = "ABC"
Kompiler String S = S1 + S2 + S3 juga akan dioptimalkan dan menjadi operasi Apend StringBuilder. Namun, jika tidak disambung pada satu waktu + operasi, objek string dan objek StringBuilder akan dihasilkan berulang kali, yang akan sangat rendah.
14. Apakah Anda memahami algoritma enkripsi dan dekripsi?
Algoritma abstrak: MD5 (128-bit), SHA1 (160-bit), adalah proses yang tidak dapat diubah. Tidak peduli seberapa besar data, data dengan panjang yang sama akan dihasilkan setelah algoritma Digest. Itu hanya bisa retak melalui kamus.
Algoritma enkripsi simetris: des, aes, kunci rahasia yang sama digunakan saat enkripsi dan dekripting.
Algoritma enkripsi asimetris: RSA, gunakan kunci rahasia yang berbeda saat mengenkripsi dan mendekripsi, dan menggunakan RSA2 saat menghubungkan ke Alipay.
15. Selesaikan konkurensi tinggi dan beban tinggi?
(1) Konsumsi halaman statis minimal, HTML statis sebanyak mungkin, dan sistem penerbitan informasi CMS digunakan untuk secara otomatis menghasilkan halaman statis dalam entri informasi dan data dinamis cache yang tidak sering diubah di ujung depan.
(2) CDN, mendistribusikan sumber daya seperti CSS/JS pada server yang berbeda.
(3) Load Balancing (nginx).
(4) Data cache yang tidak sering diubah (Redis, memcache).
(5) Server gambar dipisahkan dari server aplikasi.
(6) Cluster.
16. Cache Internal Integer?
Ada array integer statis di dalam kelas Integer, yang menyimpan beberapa objek integer yang telah diinisialisasi. Nilai umum adalah (-128 ~ 127). Jika Anda menggunakan == perbandingan, kadang -kadang false akan dikembalikan karena nilainya tidak ada di cache, jadi Anda harus menggunakan sama untuk membandingkan.
17. Apa prinsip arraylist?
(1) ArrayList adalah benang-utas. Jika Anda ingin utas-aman, gunakan CopyOnWritElist.
(2) Lapisan bawah adalah array objek [], dan ada referensi ElementData yang menunjuk ke array di dalamnya. Pada awalnya, itu menunjuk ke array kosong yang di -cache (transient) secara default. Ketika Anda ingin memperluas, array baru dengan ukuran 1,5 kali (x + (x >> 1)) akan menjadi baru, dan kemudian elemen lama akan disalin ke array baru melalui metode System.arraycopy Native Metode.
(3) Kompleksitas algoritma dari metode baca dan tulis acak (get, set) adalah O (1).
(4) Ada dua jenis operasi tambahan. Kompleksitas algoritma ADD (indeks, nilai) adalah O (n), karena perlu dipindahkan melalui penyalinan elemen; sedangkan kompleksitas algoritma operasi ADD (nilai) adalah O (1) (jika ekspansi tidak terjadi).
(5) Kompleksitas waktu dari operasi penghapusan adalah O (n), karena apakah itu dihapus sesuai dengan indeks atau objek, perlu untuk mengimplementasikan operasi pergerakan melalui penyalinan. Setelah dihapus, ukuran array tidak akan berubah, dan panjangnya dipertahankan oleh atribut ukuran. Saat menghapus objek berdasarkan objek, Anda tidak dapat menggunakan objek baru. Anda harus menghapusnya melalui referensi ke objek di ArrayList.
18. Apa prinsip LinkedList?
(1) Lapisan yang mendasarinya adalah daftar ditautkan dua arah, mempertahankan pointer pertama dan penunjuk terakhir.
(2) Kompleksitas waktu membaca dan menulis acak (Get, Set) adalah O (n).
(3) kompleksitas waktu dari operasi penyisipan Tambah (objek) adalah O (1); Kompleksitas waktu add (indeks, objek) adalah O (n).
(4) kompleksitas waktu dari operasi hapus lepas (objek) adalah o (1); Kompleksitas waktu lepas (indeks) adalah O (n).
19. Hal -hal yang perlu diperhatikan saat menggunakan kumpulan utas?
(1) Cegah kebuntuan. Semua utas di kumpulan utas sedang menunggu acara A terjadi, dan tidak ada utas gratis untuk mengeksekusi A.
(2) mencegah sumber daya sistem yang tidak mencukupi. Untuk mengontrol jumlah utas.
(3) Cegah kesalahan bersamaan.
(4) Cegah kebocoran utas. Sebuah utas berakhir secara tidak normal karena runimeexception atau kesalahan tidak ditangkap secara normal, dan kumpulan utas kehilangan utas.
(5) Hindari kelebihan tugas.
20. Apa perbedaan antara @Autowire dan @resource di musim semi?
@Autowire dirakit berdasarkan jenis secara default. Secara default, itu mensyaratkan bahwa objek ketergantungan harus ada. Jika null diizinkan, itu dapat diatur ke false. Jika kita ingin menggunakan rakitan dengan nama, kita dapat menggunakannya bersamaan dengan anotasi @Qualifier;
@Resource dirakit dengan nama secara default. Ketika kacang yang cocok dengan nama tidak dapat ditemukan, itu akan dirakit sesuai dengan jenisnya. Itu dapat ditentukan melalui atribut nama. Jika atribut nama tidak ditentukan, ketika anotasi dianotasi di lapangan, nama bidang diambil secara default sebagai nama kacang untuk menemukan objek dependensi. Ketika anotasi ditandai pada metode setter atribut, nama atribut diambil secara default sebagai nama kacang untuk menemukan objek dependensi.
21. Diagram transfer status utas.
22. Metode kelas objek?
(1) Sama: Tentukan apakah itu sama.
(2) HashCode: Temukan nilai hash. Jika nilai hash dari kedua objek itu sama, itu mungkin tidak sama; Jika sama, nilai hash dari dua objek harus sama.
(3) Tostring: Dapatkan bentuk ekspresi string dari objek, yang umumnya ditulis ulang.
(4) GetClass: Metode refleksi untuk mendapatkan kelas yang dimiliki objek.
(5) Tunggu: Ini hanya dapat digunakan dalam segmen kode yang disinkronkan. Jika parameter waktu tidak termasuk, utas pelaksanaan akan menyebabkan kunci ditinggalkan dan memasuki status menunggu (tunggu pool).
(6) Beri tahu: Ini hanya dapat digunakan dalam segmen kode yang disinkronkan, mengambil utas dari kolam penantian dan memasukkannya ke dalam kumpulan bendera kunci.
(7) NotifyAll: Hanya dapat digunakan dalam segmen kode yang disinkronkan, dan semua utas dikeluarkan dari kolam tunggu dan dimasukkan ke dalam kumpulan bendera kunci.
23. Prinsip yang mendasari serialisasi Java?
Konversi informasi objek menjadi informasi bytecode.
(1) Simpan deskripsi serialisasi. (2) Informasi Deskripsi Kelas Saat Ini. (3) Deskripsi atribut kelas saat ini. (4) Deskripsi Superclass (5) Deskripsi atribut superclass (6) Deskripsi Nilai Atribut Superclass (7) Deskripsi Nilai Atribut Subkelas