JavaRush /Java Blog /Random-TK /Java Core. Söhbetdeşlik üçin soraglar, 3-nji bölüm
Vadim625
Dereje

Java Core. Söhbetdeşlik üçin soraglar, 3-nji bölüm

Toparda çap edildi
Öňki iki makalada, söhbetdeşliklerde köplenç soralýan käbir möhüm soraglary ara alyp maslahatlaşdyk. Dowam etmegiň we galan soraglara seretmegiň wagty geldi.
Java Core.  Söhbetdeşlik soraglary, 3-nji bölüm

Çuňňur göçürmek we çuňňur göçürmek

Asyl nusgasynyň takyk nusgasy onuň klonydyr. Java-da bu, asyl obýekte meňzeş gurluşly bir obýekt döredip bilmek diýmekdir. Usul clone()bu funksiýany üpjün edýär. Göçürmeleri mümkin boldugyça az göçüriň. Düzgüne görä, Java-da klonlaşdyrmak çuňňur, ýagny Object classgöçürýän synpynyň gurluşy hakda bilmeýär. Klonlaşdyrylanda JVM aşakdakylary edýär:
  1. Bir synpda diňe başlangyç görnüşleriň agzalary bar bolsa, obýektiň düýbünden täze nusgasy dörediler we şol obýekte salgylanma yzyna berler.
  2. Bir synpda diňe bir başlangyç görnüşleriň agzalary däl, eýsem beýleki synp görnüşleriniň agzalary hem bar bolsa, bu synplaryň obýektlerine salgylanmalar göçürilýär. Şonuň üçin iki obýektiň hem salgylanmalary bolar.
Çuňňur göçürmek hemme zady gaýtalaýar. Çuňňur göçürmek iki ýygyndy bolup, olaryň biri asyl kolleksiýanyň ähli elementlerini köpeldýär. Göçürmäniň islendik elementine üýtgeşmeler girizmek asyl kolleksiýa täsir etmez ýaly bir nusga etmek isleýäris. Çuň klonlaşdyrmak aşakdaky düzgünleri talap edýär:
  1. Ilkinji maglumatlary aýratyn göçürmegiň zerurlygy ýok;
  2. Asyl synpdaky ähli agza synplary klonirlemegi goldamalydyr. super.clone()Her synp agzasy üçin usul ýok bolanda çagyrylmaly clone();
  3. Bir synpyň agzasy klonirlemegi goldamaýan bolsa, onda klon usulynda, şol synpyň täze mysalyny döretmeli we agzalarynyň her birini täze synp obýektine ähli atributlary bilen göçürmeli.
Klonirlemek barada has giňişleýin maglumaty şu ýerden öwreniň

Sinhronizasiýa näme? Obýekt derejesindäki gulplama we synp derejeli gulplama?

Sinhronizasiýa köp okalmagy aňladýar. Sinhronlaşdyrylan kod bloky diňe bir sapak bilen ýerine ýetirilip bilner. Java bir wagtda birnäçe sapaklary gaýtadan işlemäge mümkinçilik berýär. Bu, bir meýdana girmek isleýän iki ýa-da has köp sapagyň döremegine sebäp bolup biler. Sinhronizasiýa, ýat çeşmeleri nädogry ulanylanda ýüze çykýan ýat ýalňyşlyklaryndan gaça durmaga kömek edýär. Haçan-da bir usul sinhronlaşdyrylan diýlip yglan edilende, sapak monitory saklaýar. Başga bir sapak şu wagt sinhronlaşdyrylan usula girmäge synanyşsa, sapak petiklenýär we monitoryň erkin bolmagyna garaşýar. Java-da sinhronizasiýa ýörite sinhronlaşdyrylan açar söz bilen ýerine ýetirilýär . Synpyňyzda aýratyn bloklary ýa-da usullary şeýle belläp bilersiňiz. Sinhronlaşdyrylan açar söz synp üýtgeýjileri ýa-da atributlary bilen bilelikde ulanylyp bilinmez. Obýekt derejesindäki gulplama, statiki däl usuly ýa-da statik däl kod blokyny sinhronlamak isleýän wagtyňyz mehanizm bolup, synpyň belli bir mysalynda diňe bir sapak kod blokuny ýerine ýetirip biler. Bu mydama synp mysaly sapagyny ygtybarly etmek üçin edilmelidir. Synp derejesindäki gulplama, sapaklaryň bar bolan ýagdaýlary üçin köp sapaklaryň sinhron blokda girmeginiň öňüni alýar. Mysal üçin, “DemoClass” synpynyň 100 mysaly bar bolsa, belli bir wagtda üýtgeýänleriň birini ulanyp, diňe 1 sapak demoMethod () ýerine ýetirip biler. Bu hemişe statiki sapaklaryň howpsuzlygyny üpjün etmek üçin edilmelidir. Sinhronizasiýa barada has giňişleýin öwreniň.

Uky () bilen garaşmak () arasynda näme tapawut bar?

Sleep()prosesi birnäçe sekunt gijikdirmek üçin ulanylýan usuldyr. Şeýle ýagdaýda , ýa-da usuly wait()çagyrýançak, sapak garaşýar . Esasy tapawut, gulpy boşatman, monitor gulpuny goýberýär . köp sapakly programmalar üçin ulanylýar, diňe sapagyň ýerine ýetirilmegini duruzmak üçin ulanylýar. häzirki sapagy belli bir wagt üçin "Işläp bolmaýar" ýagdaýyna salýar. Threadüp, bu usul çagyrylmazdan ozal monitoryň ýagdaýyny tygşytlaýar. Başga bir sapak jaň etse , “uklap galan” sapak oýanar. Munuň statiki usuldygyna üns beriň, bu hemişe häzirki sapaga täsir edýär (usuly ýerine ýetirýän ). Adaty ýalňyşlyk, başga bir sapagyň nirededigini çagyrmak ; usuly diýýän häzirki sapak sapak bolmasa -da. häzirki sapagy edil bolşy ýaly, ýöne birneme nuans bilen "Işläp bolmajak" ýagdaýyna iberýär. sapak däl-de, bir obýekte çagyryldy; bu obýekti “gulplama obýekti” diýip atlandyrýarys. Jaň etmezden ozal häzirki sapak “gulp obýekti” bilen sinhronlanmalydyr; şondan soň bu gulpy boşadýar we bu gulp bilen baglanyşykly "garaşmak sanawyna" sapak goşýar. Soň bolsa, başga bir sapak şol bir gulp obýekti bilen sinhronlaşyp, jaň edip biler . Bu usul henizem garaşýan asyl sapagy "oýarar". Aslynda, / bilen deňeşdirip bolar , diňe işjeň sapak uklaýan sapaga göni görkeziji gerek däl, diňe umumy gulp obýektini bilmeli. Jikme-jik tapawudy şu ýerden okaň.notify()notifyAll()wait()sleep()Wait()sleep()Thread.sleep()t.interrupt()sleep()sleep()t.sleep()tsleep()tObject.wait()sleep()Wait()lock.wait()wait()lock.notify()wait()notify()sleep()interrupt()

Muňa salgylanma üýtgeýjisine null bellemek mümkinmi?

Nook. Java-da, ýumuş operatorynyň çep tarapy üýtgeýän bolmaly. "Bu", synpyň häzirki mysalyny berýän aýratyn açar söz. Diňe üýtgeýän däl. Şonuň ýaly-da, “super” açar söz ýa-da başga bir şuňa meňzeş açar söz ulanyp, üýtgeýjä null belläp bolmaz.

&& bilen & arasynda näme tapawut bar?

&- birneme we &&- logiki taýdan.
  1. &amalyň iki tarapyna baha berýär;
  2. &&amalyň çep tarapyna baha berýär. Çyn bolsa, sag tarapyna baha bermegi dowam etdirýär.
Has çuňňur düşünmek üçin şu ýere serediň.

Deňdir () we hachCode () usullaryny nädip ýok etmeli?

hashCode()we usullar Java obýektleri üçin esasy synp bolan equals()synpda kesgitlenýär . ObjectŞol sebäpli ähli Java obýektleri usullar üçin deslapky ýerine ýetiriş miras alýarlar. Bu usul, hashCode()berlen obýekt üçin özboluşly bitewi san almak üçin ulanylýar. Bu bitewi san, obýekt saklanmaly bolanda obýektiň ýerleşýän ýerini kesgitlemek üçin ulanylýar HashTable. Düzgüne görä, obýekt saklanýan ýadyň ýerleşýän ýeriniň salgysyny görkezýär hashCode(). integerBu usul equls(), adyndan görnüşi ýaly, iki obýektiň deňdigini ýa-da ýokdugyny barlamak üçin ulanylýar. Adaty ýerine ýetiriş, obýektleriň salgylanmalarynyň deňdigini ýa-da ýokdugyny barlaýar. Aşakda bu usullary täzeden ýüklemek üçin möhüm görkezmeler bar:
  1. Döredilende elmydama şol bir obýekt atributlaryny ulanyň hashCode()we equals();
  2. Simmetriýa. Bular. käbir obýektler üçin hakykata gaýdyp xgelse y x.equals(y), y.equals(x)hakykata gaýdyp gelmeli;
  3. Reflekslilik. Islendik obýekt x x.equals(x)hakykata gaýdyp gelmeli;
  4. Yzygiderlilik. Islendik obýekt üçin xwe y x.equals(y)deňeşdirmelerde ulanylýan maglumatlar üýtgemese şol bir zady yzyna gaýtaryp berýär;
  5. Geçiş. Islendik obýekt üçin x, ywe hakykata gaýdyp gelse z, hakykata gaýdyp gelse;x.equals(y)y.equals(z)x.equals(z)
  6. Programma ýerine ýetirilende şol bir obýektde haýsydyr bir usul çagyrylsa, ulanylan maglumatlar üýtgemese, şol bir belgini yzyna gaýtarmaly. hashCodedürli amaly ýagdaýlarda birmeňzeş obýektler üçin dürli bahalary yzyna gaýtaryp biler;
  7. Iki jisim deň bolsa, şoňa görä şol bir bahalary yzyna gaýtarmaly equals;hashCode
  8. Munuň tersi islege bagly däl. Iki sany deň däl obýekt şol bir hashCode-ny yzyna gaýtaryp biler. Şeýle-de bolsa, öndürijiligi gowulandyrmak üçin dürli obýektleriň dürli kodlary yzyna gaýtarmagy has gowudyr.
Bu usullar barada gyzykly maglumatlary şu ýerden okaň.

Giriş üýtgedijileri barada bize aýdyň

Java synplary, meýdanlary, konstruktorlary we usullary dört dürli giriş üýtgedijisinden birine eýe bolup biler: hususy Eger bir usul ýa-da üýtgeýji şahsy bellenen bolsa , üýtgeýjä diňe bir synpyň içindäki kod girip biler ýa-da usula jaň edip biler. Klassikleriň içindäki kod üýtgeýjä ýa-da usula girip bilmez, ýa-da başga synpdan girip bilmez. Şahsy giriş modifikatory köplenç konstruktorlar, usullar we üýtgeýjiler üçin ulanylýar. default Üýtgediji düýbünden görkezilmedik bolsa, deslapky giriş üýtgediji yglan edilýär . Bu üýtgediji, berlen synpyň meýdanlaryna, konstruktorlaryna we usullaryna synpyň içindäki kod, şol bir paketdäki synplaryň içindäki kod arkaly girip boljakdygyny aňladýar. Kiçi klasslar superklass bilen birmeňzeş paketde bolmasa, adaty diýlip yglan edilse, superklasyň usullaryna we agza üýtgeýjilerine girip bilmez . goralýan Gorag modifikatory deslapky ýaly işleýär , kiçi klasslar goralýan usullara we superklassanyň üýtgeýjilerine hem girip biler. Bu sözlem, kiçi klas superklass bilen bir paketde bolmasa-da dogry. köpçülige açyk giriş modifikatory, şol koduň nirede ýerleşýändigine garamazdan, ähli kodlaryň synpa, üýtgeýänlere, konstruktorlara ýa-da usullara girip biljekdigini aňladýar. Java Core.  Söhbetdeşlik üçin soraglar, 3 - 2 bölüm

Zibil ýygnaýjy näme? Biz oňa jaň edip bilerismi?

Zibil ýygnamak, häzirki zaman programmirleme dillerinde Java we NET.Framework dilleri ýaly awtomatiki ýady dolandyrmagyň aýratynlygydyr. Zibil ýygnamagy ulanýan diller, köplenç JVM ýaly wirtual maşynda zibil ýygnamagy düşündirýär. Zibil ýygnamagyň iki maksady bar: islendik ulanylmadyk ýat boşadylmaly we programma henizem ulanýan bolsa ýat boşadylmaly däldir. Zibil ýygnamagy el bilen işledip bilersiňizmi? .Ok, System.gc()mümkin boldugyça size mümkinçilik berýär. System.gc()Iň oňat wariant , zibil ýygnaýjynyň işlemelidigini görkezýän usuly çagyrmakdyr . Zibil ýygnaýjy kesgitleme bermeýänligi sebäpli, ony derrew işletmäge ýol ýok. Mundan başga-da, resminamalara görä, OutOfMemoryErrorwirtual maşyn doly zibil ýygnanandan soň ýady boşadyp bilmese, ugradylmaz. Zibil ýygnaýjy hakda has giňişleýin öwreniň.

Keyerli açar söz nämäni aňladýar? Jikme-jik düşündiriň

Açar söz, usulyň Java faýlyndan başga programmirleme dilinde ýerine ýetirilendigini görkezmek üçin ulanylýar. Usuallyerli usullar geçmişde ulanylypdyr. Java-yň häzirki wersiýalarynda bu ýygy-ýygydan zerur däl. Häzirki wagtda ýerli usullar zerur:
  1. Java-dan başga dilde ýazylan kitaphana çagyrmaly.
  2. Diňe başga bir dil (köplenç C) ulanyp bolýan ulgam ýa-da enjam çeşmelerine girmek zerur. Aslynda, hakyky kompýuter (diskler ýa-da tor maglumatlary ýaly) bilen täsirleşýän köp sanly ulgam funksiýasyny diňe ýerli usul bilen atlandyryp bolar.
Nativeerli usul kitaphanalaryny ulanmagyň kemçilikleri hem möhümdir:
  1. JNI / JNA, esasanam çylşyrymly bir zat etjek bolsaňyz, JVM-ni durnuksyzlaşdyryp biler. Nativeerli usulyňyz nädogry bir zat etse, JVM-iň ýykylmagy ähtimal. Mundan başga-da, ýerli usulyňyz birnäçe sapakdan çagyrylsa, erbet zatlar bolup biler. We ş.m.
  2. Nativeerli kod bilen programmany düzetmek has kyn .
  3. Codeerli kody beýleki platformalara daşamakda kynçylyk döredip biljek çarçuwalaryň aýratyn gurluşygyny talap edýär.

Seriýalaşdyrmak näme?

Informatika, maglumatlary saklamak we geçirmek nukdaýnazaryndan seriýalaşdyrmak, maglumat gurluşyny ýa-da obýektiň ýagdaýyny başga bir hasaplaýyş gurşawynda saklanyp we alyp boljak formata terjime etmekdir. Birnäçe bit alandan soň, seriýalaşma formatyna görä täzeden hasaplanýar we asyl obýektiň semantiki taýdan birmeňzeş klonyny döretmek üçin ulanylyp bilner. Java obýektiň interfeýsi amala aşyrmagyny talap edýän awtomatiki seriallaşdyrmagy üpjün edýär java.io.Serializable. Interfeýsiň ýerine ýetirilişi synpy "serializable" diýip belleýär. Java.io.Serializable interfeýsinde seriallaşdyrma usullary ýok, ýöne serializasiýa synpy serializasiýa / diserializasiýa prosesiniň bir bölegi hökmünde atlandyryljak usullary kesgitläp biler. Sapaklara üýtgeşmeler girizeniňizde, haýsysynyň seriallaşdyrma bilen laýyk gelmejekdigini we laýyk gelmejekdigini göz öňünde tutmaly. Doly görkezmeleri şu ýerden okap bilersiňiz. Iň möhüm nokatlary bererin: Gabat gelmeýän üýtgeşmeler:
  1. Bir meýdany pozuň;
  2. Ierarhiýada bir synpy ýokary ýa-da aşak süýşüriň;
  3. Statik däl meýdany statiki ýa-da wagtlaýyn däl üýtgetmek;
  4. Yglan edilen başlangyç maglumat görnüşini üýtgetmek;
  5. Usuly üýtgetmek, WriteObjectýa-da ReadObjectindi meýdanlary ýazmazlyk ýa-da okamazlyk üçin;
  6. Synpy üýtgetmek ýa-da Serializabletersine Externalizable;
  7. Enum synpyny enum däl ýa-da tersine üýtgetmek ;
  8. Aýyrmak Serializableýa-da Externalizable;
  9. Bir klasa usul writeReplacegoşmak .readResolve
Gabat gelýän üýtgeşmeler:
  1. Meýdan goşmak;
  2. Sapaklary goşmak / aýyrmak;
  3. Usullary goşmak WriteObject/ReadObject[usullary defaultReadObjectýa-da defaultWriteObjectbaşynda çagyrylmaly];
  4. Usullary aýyrmak WriteObject/ReadObject;
  5. Goşmak java.io.Serializable;
  6. Meýdana girişi üýtgetmek;
  7. Statik meýdany statik däl ýa- da wagtlaýyn däl üýtgetmek .
Öňki böleklere baglanyşyklar: Java Core. Söhbetdeşlik soraglary, 1-nji bölüm Java Core. Söhbetdeşlik soraglary, 2-nji bölüm Asyl makala Okuwyňyz gutly bolsun!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION