JavaRush /Blog Jawa /Random-JV /Inti Jawa. Pitakonan kanggo wawancara, part 3
Vadim625
tingkat

Inti Jawa. Pitakonan kanggo wawancara, part 3

Diterbitake ing grup
Ing rong artikel sadurunge, kita ngrembug sawetara pitakonan penting sing paling kerep ditakoni nalika wawancara. Wektu kanggo nerusake lan ndeleng pitakonan liyane.
Inti Jawa.  Pitakonan wawancara, bagean 3-1

Nyalin jero lan nyalin cethek

Salinan sing tepat saka asline yaiku kloning. Ing Jawa, iki tegese bisa nggawe obyek kanthi struktur sing padha karo obyek asli. Cara kasebut clone()nyedhiyakake fungsi kasebut. Nyalin salinan cethek minangka informasi sethithik. Kanthi gawan, kloning ing Jawa iku cethek, i.e. Object classora ngerti babagan struktur kelas sing disalin. Nalika kloning, JVM nindakake ing ngisor iki:
  1. Yen kelas mung nduweni anggota saka jinis primitif, banjur salinan obyek anyar bakal digawe lan referensi kanggo obyek bakal bali.
  2. Yen kelas ngemot ora mung anggota saka jinis primitif, nanging uga sembarang jinis kelas liyane, banjur referensi kanggo obyek saka kelas iki disalin. Mulane, loro obyek bakal duwe referensi sing padha.
Nyalin jero duplikat kabeh. Nyalin jero yaiku rong koleksi, salah sijine duplikat kabeh unsur koleksi asli. Kita pengin nggawe salinan supaya owah-owahan ing unsur apa wae saka salinan kasebut ora bakal mengaruhi koleksi asli. Kloning jero mbutuhake aturan ing ngisor iki:
  1. Ora perlu nyalin data primitif kanthi kapisah;
  2. Kabeh kelas anggota ing kelas asli kudu ndhukung kloning. Kanggo saben anggota kelas, kudu disebut super.clone()nalika cara wis overridden clone();
  3. Yen ana anggota kelas sing ora ndhukung kloning, banjur ing metode kloning, sampeyan kudu nggawe conto anyar saka kelas kasebut lan nyalin saben anggota kanthi kabeh atribut menyang obyek kelas anyar, siji-sijine.
Temokake luwih lengkap babagan kloning ing kene

Apa sinkronisasi? Ngunci tingkat obyek lan ngunci tingkat kelas?

Sinkronisasi nuduhake multithreading. Blok kode sing disinkronake mung bisa dieksekusi dening siji utas sekaligus. Java ngidini sampeyan ngolah pirang-pirang thread bebarengan. Iki bisa nyebabake loro utawa luwih utas sing pengin ngakses lapangan sing padha. Sinkronisasi mbantu ngindhari kesalahan memori sing kedadeyan nalika sumber memori digunakake kanthi ora bener. Nalika cara diumumake minangka sinkronisasi, benang kasebut terus monitor. Yen thread liyane nyoba ngakses cara sing disinkronake ing wektu iki, thread bakal diblokir lan ngenteni monitor dadi gratis. Sinkronisasi ing Jawa ditindakake kanthi tembung kunci khusus sing disinkronake . Sampeyan bisa menehi tandha blok utawa metode individu ing kelas kanthi cara iki. Tembung kunci sing disinkronake ora bisa digunakake bebarengan karo variabel kelas utawa atribut. Ngunci tingkat obyek minangka mekanisme nalika sampeyan pengin nyinkronake cara non-statis utawa blok kode non-statis supaya mung siji thread sing bisa nglakokake blok kode ing conto tartamtu saka kelas. Iki kudu tansah rampung kanggo nggawe thread conto kelas aman. Ngunci tingkat kelas ngalangi pirang-pirang benang mlebu blok sing disinkronake kanggo kabeh kedadeyan kelas sing kasedhiya. Contone, yen ana 100 kedadean saka kelas DemoClass, banjur mung 1 thread bakal bisa nglakokaké demoMethod () nggunakake salah siji saka variabel ing wektu tartamtu. Iki kudu tansah rampung kanggo njamin safety thread statis. Sinau luwih lengkap babagan sinkronisasi ing kene.

Apa bedane turu () lan ngenteni ()?

Sleep()iku cara sing digunakake kanggo tundha proses kanggo sawetara detik. Ing kasus wait(), Utas ana ing negara nunggu nganti kita nelpon notify()utawa cara notifyAll(). Bentenane utama yaiku wait()ngeculake kunci monitor nalika sleep()ora ngeculake kunci. Wait()digunakake kanggo aplikasi multi-Utas, sleep()digunakake mung kanggo ngaso eksekusi thread. Thread.sleep()nempatno thread saiki ing "Ora Runnable" negara kanggo wektu tartamtu. Utas nyimpen kahanan monitor sing sadurunge cara iki diarani. Yen thread liyane nelpon t.interrupt(), thread sing "tiba turu" bakal tangi. Elinga yen iki sleep()cara statis, tegese tansah mengaruhi utas saiki (sing nglakokaké cara sleep()). A kesalahan umum kanggo nelpon t.sleep()ngendi tthread liyane; sanajan benang saiki sing diarani metode kasebut sleep()dudu tbenang. Object.wait()ngirim thread saiki menyang "Ora Runnable" negara kanggo nalika, kaya sleep(), nanging karo sawetara nuansa. Wait()diarani obyek, dudu benang; kita nelpon obyek iki "obyek kunci". Sadurunge nelpon lock.wait(), thread saiki kudu disinkronake karo "obyek kunci"; wait()sawise iku, ngrilis kunci iki, lan nambah thread kanggo "dhaftar ngenteni" gadhah kunci iki. Mengko, thread liyane bisa nyinkronake karo obyek kunci padha lan nelpon lock.notify(). Cara iki bakal "tangi" utas asli, sing isih nunggu. Ing asas, wait()/ notify()bisa dibandhingake karo sleep()/ interrupt(), mung Utas aktif ora perlu pointer langsung menyang Utas turu, iku mung perlu ngerti obyek kunci sambungan. Waca prabédan rinci kene.

Iku bisa kanggo nemtokake null kanggo variabel referensi?

Ora sampeyan ora bisa. Ing Jawa, sisih kiwa operator penugasan kudu dadi variabel. "Iki" minangka tembung kunci khusus sing tansah menehi conto kelas saiki. Iku ora mung sembarang variabel. Kajaba iku, null ora bisa ditugasake menyang variabel nggunakake tembung kunci "super" utawa tembung kunci liyane sing padha.

Apa bedane antarane && lan &?

&- bitwise lan &&- logis.
  1. &ngevaluasi loro-lorone saka operasi;
  2. &&ngevaluasi sisih kiwa operasi. Yen bener, terus ngevaluasi sisih tengen.
Deleng kene kanggo pangerten sing luwih jero.

Carane override padha () lan hachCode () cara?

hashCode()lan equals()cara ditetepake ing kelas Object, yaiku kelas induk kanggo obyek Jawa. Mulane, kabeh obyek Jawa diwenehi implementasine standar kanggo metode. Cara iki hashCode()digunakake kanggo njupuk integer unik kanggo obyek tartamtu. Integer iki digunakake kanggo nemtokake lokasi obyek nalika obyek kudu disimpen, contone kanggo HashTable. Kanthi gawan, hashCode()ngasilake integerperwakilan alamat lokasi memori ing ngendi obyek kasebut disimpen. Cara kasebut equls(), kaya jenenge, digunakake kanggo nguji manawa rong obyek padha. Implementasi standar mriksa referensi obyek kanggo ndeleng yen padha. Ing ngisor iki minangka pedoman penting kanggo ngisi maneh metode kasebut:
  1. Tansah nggunakake atribut obyek sing padha nalika ngasilake hashCode()lan equals();
  2. simetri. Sing. xyen bali bener kanggo sawetara obyek y x.equals(y), banjur y.equals(x)kudu bali bener;
  3. Refleksivity. Kanggo sembarang obyek x x.equals(x)kudu bali bener;
  4. Konsistensi. Kanggo sembarang obyek xlan y x.equals(y)ngasilake bab sing padha yen informasi digunakake ing comparison ora ngganti;
  5. Transitivity. Kanggo sembarang obyek x, ylan z, yen x.equals(y)bali bener lan y.equals(z)bali bener, banjur x.equals(z)kudu bali bener;
  6. Saben cara diarani obyek sing padha sajrone eksekusi aplikasi, kudu ngasilake nomer sing padha kajaba informasi sing digunakake diganti. hashCodebisa ngasilake nilai sing beda kanggo obyek sing padha ing macem-macem aplikasi;
  7. Yen rong obyek padha, miturut equals, banjur padha hashCodekudu ngasilake nilai sing padha;
  8. Syarat ngelawan iku opsional. Loro obyek sing ora padha bisa ngasilake kode hash sing padha. Nanging, kanggo nambah kinerja, iku luwih apik kanggo duwe obyek beda bali kode beda.
Waca fakta menarik babagan metode kasebut ing kene.

Marang kita bab akses modifiers

Kelas, lapangan, konstruktor, lan metode Java bisa duwe salah siji saka patang modifier akses sing beda: pribadi Yen metode utawa variabel ditandhani pribadi , banjur mung kode ing kelas sing padha bisa ngakses variabel kasebut, utawa nelpon metode kasebut. Kode ing subkelas ora bisa ngakses variabel utawa metode, lan uga ora bisa ngakses saka kelas liyane. Modifier akses pribadi paling asring digunakake kanggo konstruktor, metode, lan variabel. standar Modifier akses standar diumumake yen modifier ora ditemtokake ing kabeh. Modifier iki tegese akses menyang lapangan, konstruktor lan cara saka kelas tartamtu bisa diduweni dening kode nang kelas dhewe, kode nang kelas ing paket padha. Subclass ora bisa ngakses metode lan variabel anggota saka superclass yen diumumake minangka standar , kajaba subclass kasebut ana ing paket sing padha karo superclass. dilindhungi Modifier dilindhungi dianggo padha standar , kajaba subclasses uga bisa ngakses cara dilindhungi lan variabel saka superclass. Pernyataan iki bener sanajan subclass ora ana ing paket sing padha karo superclass. public Modifier akses umum tegese kabeh kode bisa ngakses kelas, variabel, konstruktor, utawa metode, preduli saka ngendi kode kasebut. Inti Jawa.  Pitakonan kanggo wawancara, bagean 3 - 2

Apa sing diarani tukang sampah? Apa kita bisa nelpon dheweke?

Koleksi sampah minangka fitur manajemen memori otomatis ing pirang-pirang basa pemrograman modern, kayata Jawa lan basa ing NET.Framework. Basa sing nggunakake koleksi sampah asring napsirake koleksi sampah ing mesin virtual kayata JVM. Ngumpulake sampah duwe rong tujuan: memori sing ora digunakake kudu dibebasake, lan memori ora kudu dibebasake yen program isih nggunakake. Apa sampeyan bisa mbukak sampah kanthi manual? Ora, System.gc()iku menehi sampeyan minangka akeh akses sabisa. Pilihan sing paling apik yaiku nelpon metode kasebut System.gc(), sing bakal menehi tandha marang pengumpul sampah sing kudu ditindakake. Ora ana cara kanggo mbukak langsung amarga tukang sampah ora nemtokake. Kajaba iku, miturut dokumentasi, OutOfMemoryErrorora bakal diterusake yen mesin virtual gagal mbebasake memori sawise koleksi sampah lengkap. Sinau luwih lengkap babagan tukang sampah ing kene.

Apa tegese tembung kunci asli? Nerangake kanthi rinci

Tembung kunci asli digunakake kanggo nunjukake yen metode kasebut dileksanakake ing basa pamrograman saliyane file Jawa. Cara asli wis digunakake ing jaman kepungkur. Ing versi Jawa saiki, iki luwih jarang dibutuhake. Saiki, cara asli dibutuhake nalika:
  1. Sampeyan kudu nelpon perpustakaan saka Jawa sing ditulis ing basa liya.
  2. Sampeyan mbutuhake akses menyang sumber daya sistem utawa hardware sing mung bisa diakses nggunakake basa liya (biasane C). Nyatane, akeh fungsi sistem sing sesambungan karo komputer nyata (kayata disk utawa data jaringan) mung bisa diarani kanthi cara asli.
Kerugian nggunakake perpustakaan metode asli uga penting:
  1. JNI / JNA bisa destabilize JVM, utamané yen sampeyan nyoba kanggo nindakake soko Komplek. Yen cara asli sampeyan nindakake kesalahan, ana kemungkinan JVM nabrak. Uga, kedadeyan ala bisa kedadeyan yen metode asli sampeyan diarani saka pirang-pirang utas. Lan sateruse.
  2. Luwih angel debug program nganggo kode asli .
  3. Kode asli mbutuhake konstruksi kerangka sing kapisah, sing bisa nggawe masalah karo porting menyang platform liyane.

Apa serialisasi?

Ing ilmu komputer, ing konteks panyimpenan lan transmisi data, serialisasi minangka proses nerjemahake struktur data utawa kahanan obyek menyang format sing bisa disimpen lan dijupuk maneh ing lingkungan komputasi liyane. Sawise nampa seri bit, padha recalculated miturut format serialization, lan bisa digunakake kanggo nggawe Klone semantically podho rupo saka obyek asli. Jawa nyedhiyakake serialisasi otomatis, sing mbutuhake obyek kanggo ngleksanakake antarmuka java.io.Serializable. Implementasi antarmuka menehi tandha kelas minangka "serializable". Antarmuka java.io.Serializable ora duwe cara serialization, nanging kelas serializable opsional bisa nemtokake cara sing bakal disebut minangka bagéan saka serialization / proses diserialization. Nalika nggawe owahan kanggo kelas, sampeyan kudu nimbang kang bakal lan ora bakal kompatibel karo serialization. Sampeyan bisa maca pandhuan lengkap ing kene. Aku bakal menehi poin sing paling penting: Owah-owahan sing ora kompatibel:
  1. Mbusak lapangan;
  2. Pindhah kelas munggah utawa mudhun ing hirarki;
  3. Ngganti kolom non-statis dadi statis utawa non-transien dadi transien;
  4. Ngganti jinis data primitif sing diumumake;
  5. Ngganti cara WriteObjectsupaya ReadObjectora nulis utawa maca lapangan kanthi standar;
  6. Ngganti kelas Serializableutawa Externalizablekosok balene;
  7. Ngganti kelas enum menyang non-enum utawa kosok balene;
  8. Mbusak Serializableutawa Externalizable;
  9. Nambahake writeReplacemetode readResolvemenyang kelas.
Owah-owahan sing cocog:
  1. Nambah lapangan;
  2. Nambah / mbusak kelas;
  3. Nambah cara WriteObject/ReadObject[cara defaultReadObjectutawa defaultWriteObjectkudu disebut ing wiwitan];
  4. Cara mbusak WriteObject/ReadObject;
  5. Tambahan java.io.Serializable;
  6. Ngganti akses lapangan;
  7. Ngganti kolom statis dadi non-statis utawa transient menyang non-transient .
Pranala menyang bagean sadurunge: Java Core. Soal Wawancara, Bagian 1 Inti Jawa. Pitakonan wawancara, part 2 Artikel asli Sugeng sinau!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION