JavaRush /Blog Jawa /Random-JV /Analisis pitakonan lan wangsulan saka wawancara kanggo pa...

Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa. Bagean 15

Diterbitake ing grup
Hi Hi! Pinten pangembang Java kudu ngerti? Sampeyan bisa mbantah nganti suwe babagan masalah iki, nanging sejatine ing wawancara sampeyan bakal didorong kanthi teori. Malah ing wilayah kawruh sing sampeyan ora bakal duwe kesempatan kanggo nggunakake ing karya. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 15 - 1Ya, yen sampeyan pamula, kawruh teoretis sampeyan bakal ditindakake kanthi serius. Amarga durung ana pengalaman lan prestasi sing apik, sing isih ana yaiku mriksa kekuwatan basis pengetahuan. Dina iki kita bakal terus nguatake basis iki kanthi mriksa pitakonan wawancara sing paling populer kanggo pangembang Jawa. Ayo mabur!

Inti Jawa

9. Apa bedane ikatan statis lan dinamis ing basa Jawa?

Aku wis mangsuli pitakon iki ing artikel iki ing pitakonan 18 babagan polimorfisme statis lan dinamis, aku menehi saran supaya maca.

10. Apa bisa nggunakake variabel pribadi utawa dilindhungi ing antarmuka?

Ora sampeyan ora bisa. Amarga nalika sampeyan ngumumake antarmuka, kompiler Java kanthi otomatis nambahake tembung kunci umum lan abstrak sadurunge metode antarmuka lan tembung kunci umum , statis lan pungkasan sadurunge anggota data. Bener, yen sampeyan nambah pribadi utawa dilindhungi , konflik bakal muncul, lan kompiler bakal sambat babagan modifier akses kanthi pesen: "Modifier '<modifiers dipilih>' ora diidini ing kene." Apa kompiler nambah public , static lan final variabel ing antarmuka? Ayo dipikirake:
  • publik - antarmuka ngidini klien kanggo sesambungan karo obyek. Yen variabel kasebut ora umum, klien ora bakal bisa ngakses.
  • statis - antarmuka ora bisa digawe (utawa luwih, obyek sing), supaya variabel punika statis.
  • final - wiwit antarmuka digunakake kanggo entuk 100% abstraksi, variabel duwe wangun final (lan ora bakal diganti).

11. Apa iku Classloader lan kanggo apa?

Classloader - utawa Class Loader - nyedhiyakake loading kelas Java. Luwih tepat, loading dijamin dening turunane - loaders kelas tartamtu, amarga ClassLoader dhewe abstrak. Saben-saben file .class dimuat, contone,, sawise nelpon konstruktor utawa cara statis saka kelas cocog, tumindak iki dileksanakake dening salah siji turunane kelas ClassLoader . Ana telung jinis ahli waris:
  1. Bootstrap ClassLoader punika loader dhasar, dipun ginakaken ing tingkat JVM lan ora ana saran saka lingkungan runtime, awit iku bagéan saka kernel JVM lan ditulis ing kode native. Loader iki dadi induk saka kabeh kedadeyan ClassLoader liyane.

    Utamane tanggung jawab kanggo mbukak kelas internal JDK, biasane rt.jar lan perpustakaan inti liyane sing ana ing direktori $ JAVA_HOME / jre / lib . Platform sing beda-beda bisa uga duwe implementasine beda saka loader kelas iki.

  2. Extension Classloader minangka extension loader, turunan saka kelas base loader. Ngurusi loading extension saka kelas basa Jawa standar. Dimuat saka direktori ekstensi JDK, biasane $ JAVA_HOME / lib / ext utawa direktori liyane sing kasebut ing properti sistem java.ext.dirs (pilihan iki bisa digunakake kanggo ngontrol muatan ekstensi).

  3. System ClassLoader punika loader sistem dipun ginakaken ing tingkat JRE sing njupuk care saka loading kabeh kelas aplikasi-tingkat menyang JVM. Iki ngemot file sing ditemokake ing variabel lingkungan kelas -classpath utawa -cp pilihan baris perintah.

Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 15 - 2Loader kelas minangka bagéan saka runtime Java. Wayahe JVM njaluk kelas, loader kelas nyoba golek kelas lan mbukak definisi kelas menyang runtime nggunakake jeneng qualified kelas. Cara java.lang.ClassLoader.loadClass () tanggung jawab kanggo mbukak definisi kelas nalika runtime. Iku nyoba kanggo mbukak kelas adhedhasar jeneng lengkap. Yen kelas durung dimuat, delegasi panjalukan kanggo loader kelas induk. Proses iki dumadi sacara rekursif lan katon kaya iki:
  1. System Classloader nyoba nemokake kelas ing cache.

    • 1.1. Yen kelas ditemokake, loading wis rampung kanthi sukses.

    • 1.2. Yen kelas ora ditemokake, loading didelegasikan menyang Extension Classloader.

  2. Extension Classloader nyoba nemokake kelas ing cache dhewe.

    • 2.1. Yen kelas ditemokake, iku rampung kasil.

    • 2.2. Yen kelas ora ditemokake, loading didelegasikan menyang Bootstrap Classloader.

  3. Bootstrap Classloader nyoba nemokake kelas ing cache dhewe.

    • 3.1. Yen kelas ditemokake, loading wis rampung kanthi sukses.

    • 3.2. Yen kelas ora ditemokake, Bootstrap Classloader sing ndasari bakal nyoba mbukak.

  4. Yen dimuat:

    • 4.1. Sukses - loading kelas wis rampung.

    • 4.2. Yen gagal, kontrol ditransfer menyang Extension Classloader.

  5. 5. Extension Classloader nyoba kanggo mbukak kelas, lan yen loading:

    • 5.1. Sukses - loading kelas wis rampung.

    • 5.2. Yen gagal, kontrol ditransfer menyang System Classloader.

  6. 6. System Classloader nyoba kanggo mbukak kelas, lan yen loading:

    • 6.1. Sukses - loading kelas wis rampung.

    • 6.2. Ora lulus kanthi sukses - pangecualian digawe - ClassNotFoundException.

Topik loader kelas akeh banget lan ora kudu dilalekake. Kanggo ngerteni luwih rinci, aku menehi saran supaya maca artikel iki , lan kita ora bakal suwe lan terus maju.

12. Apa Area Data Run-Time?

Run-Time Data Ares - area data runtime JVM. JVM nemtokake sawetara area data runtime sing dibutuhake sajrone eksekusi program. Sawetara wong digawe nalika JVM diwiwiti. Liyane iku thread-lokal lan digawe mung nalika thread digawe (lan numpes nalika thread wis numpes). Area data runtime JVM katon kaya iki: Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 15 - 3
  • PC Register lokal kanggo saben thread lan ngemot alamat instruksi JVM sing saiki dieksekusi thread.

  • JVM Stack minangka area memori sing digunakake minangka panyimpenan kanggo variabel lokal lan asil sementara. Saben utas duwe tumpukan kapisah dhewe: sanalika benang rampung, tumpukan iki uga bakal dirusak. Wigati dicathet yen kauntungan saka tumpukan liwat tumpukan yaiku kinerja, dene tumpukan mesthi duwe kauntungan ing ukuran panyimpenan.

  • Native Method Stack - Area data per-thread sing nyimpen unsur data, padha karo tumpukan JVM, kanggo nglakokake metode asli (non-Jawa).

  • Heap - digunakake dening kabeh Utas minangka panyimpenan sing ngemot obyek, metadata kelas, larik, etc., kang digawe ing runtime. Wilayah iki digawe nalika JVM diwiwiti lan dirusak nalika dipateni.

  • Area metode - Area runtime iki umum kanggo kabeh thread lan digawe nalika JVM diwiwiti. Iki nyimpen struktur kanggo saben kelas, kayata Runtime Constant Pool, kode kanggo konstruktor lan metode, data metode, lsp.

13. Apa sing diarani obyek sing ora owah?

Ing bagean artikel iki, ing pitakonan 14 lan 15, wis ana jawaban kanggo pitakonan iki, mula delengen tanpa mbuwang wektu.

14. Apa khusus babagan kelas String?

Sadurungé ing analisis, kita bola-bali ngomong babagan fitur String tartamtu (ana bagean kapisah kanggo iki). Saiki ayo ngringkes fitur String :
  1. Iki minangka obyek sing paling populer ing Jawa lan digunakake kanggo macem-macem tujuan. Ing babagan frekuensi panggunaan, ora kalah karo jinis primitif.

  2. Objek saka kelas iki bisa digawe tanpa nggunakake tembung kunci anyar - langsung liwat kuotasi String str = "string"; .

  3. String minangka kelas sing ora bisa diganti : nalika nggawe obyek saka kelas iki, data kasebut ora bisa diganti (nalika sampeyan nambah + "senar liyane" menyang senar tartamtu, minangka asil sampeyan bakal entuk senar katelu anyar). Immutability saka kelas String ndadekake thread aman.

  4. Kelas String wis dirampungake (duwe modifier pungkasan ), saengga ora bisa diwarisake.

  5. String duwe kolam senar dhewe, area memori ing tumpukan sing nyimpen nilai senar sing digawe. Ing bagean saka seri iki , ing pitakonan 62, Aku diterangake blumbang senar.

  6. Jawa nduweni analog saka String , uga dirancang kanggo nggarap senar - StringBuilder lan StringBuffer , nanging kanthi bedane bisa diowahi. Sampeyan bisa maca liyane babagan iki ing artikel iki .

Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 15 - 4

15. Apa jinis kovarian?

Kanggo mangerteni kovarian, kita bakal ndeleng conto. Ayo kita duwe kelas kewan:
public class Animal {
 void voice() {
   System.out.println("*тишина*");
 }
}
Lan sawetara kelas asu ngluwihi :
public class Dog extends Animal {

 @Override
 public void voice() {
   System.out.println("Гав, гав, гав!!!");
 }
}
Nalika kita ngelingi, kita bisa kanthi gampang nemtokake obyek saka jinis pewaris menyang jinis wong tuwa:
Animal animal = new Dog();
Iki bakal ora luwih saka polimorfisme. Nyaman, fleksibel ora? Lha, apa daftar kewan? Apa kita bisa menehi dhaptar karo Kewan umum dhaptar karo obyek Dog ?
List<Dog> dogs = new ArrayList<>();
List<Animal> animals = dogs;
Ing kasus iki, baris kanggo nemtokake dhaptar asu menyang dhaptar kewan bakal digarisi abang, i.e. compiler ora bakal pass kode iki. Senadyan kasunyatan sing assignment iki misale jek cukup logis (sawise kabeh, kita bisa nemtokake obyek Dog kanggo variabel saka jinis Animal ), iku ora bisa rampung. Iki amarga yen diijini, kita bakal bisa sijine obyek Animal menyang dhaftar sing Originally dimaksudaké kanggo dadi Dog , nalika mikir sing kita mung duwe Dogs ing dhaftar . Banjur, contone,, kita bakal nggunakake cara njaluk () kanggo njupuk obyek saka dhaftar asu sing , mikir sing asu, lan nelpon sawetara cara saka obyek Dog ing, kang Animal ora duwe . Lan sing sampeyan ngerti, iki ora mungkin - kesalahan bakal kedadeyan. Nanging, Begjanipun, compiler ora kantun kesalahan logis iki karo nemtokake dhaftar turunan kanggo dhaftar tuwane (lan kosok balene). Ing Jawa, sampeyan mung bisa nemtokake obyek dhaptar kanggo dhaptar variabel kanthi generik sing cocog. Iki diarani invariasi. Yen bisa nindakake iki, bakal kasebut lan diarani kovarian. Yaiku, kovarian yen kita bisa nyetel obyek saka jinis ArrayList<Dog> menyang variabel jinis List<Animal> . Pranyata kovarian ora didhukung ing Jawa? Ora ketompo carane iku! Nanging iki ditindakake kanthi cara khusus dhewe. Apa desain digunakake kanggo ? ngluwihi Animal . Iki diselehake karo generik saka variabel sing pengin disetel obyek dhaptar, kanthi turunan generik. Konstruksi umum iki tegese jinis apa wae sing bakal ditindakake minangka turunan saka jinis Animal (lan jinis Animal uga kalebu ing generalisasi iki). Sabanjure, Animal bisa ora mung kelas, nanging uga antarmuka (aja diapusi tembung kunci ngluwihi ). Kita bisa nindakake tugas sadurunge kaya iki: Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 15 - 5
List<Dog> dogs = new ArrayList<>();
List<? extends Animal> animals = dogs;
Akibaté, sampeyan bakal weruh ing IDE sing compiler ora bakal sambat babagan construction iki. Ayo dipriksa fungsi desain iki. Ayo kita duwe cara sing nyebabake kabeh kewan sing dilewati kanggo nggawe swara:
public static void animalsVoice(List<? extends Animal> animals) {
 for (Animal animal : animals) {
   animal.voice();
 }
}
Ayo menehi dhaptar asu:
List<Dog> dogs = new ArrayList<>();
dogs.add(new Dog());
dogs.add(new Dog());
dogs.add(new Dog());
animalsVoice(dogs);
Ing console kita bakal weruh output ing ngisor iki:
Wuh Wuh Wuh!!! Wuh Wuh Wuh!!! Wuh Wuh Wuh!!!
Iki tegese pendekatan kovarian iki sukses. Ayo kula Wigati sing generik iki kalebu ing dhaftar ? ngluwihi Animal kita ora bisa nglebokake data anyar saka sembarang tipe: ora jinis Dog , utawa malah jinis Animal :
List<Dog> dogs = new ArrayList<>();
List<? extends Animal> animals = dogs;
animals.add(new Dog());
dogs.add(new Animal());
Bener, ing rong baris pungkasan kompiler bakal nyorot sisipan obyek kanthi warna abang. Iki amarga kasunyatan manawa kita ora bisa yakin seratus persen manawa dhaptar obyek saka jinis apa sing bakal ditugasake ing dhaptar kanthi data kanthi generik <? ngluwihi Animal> . Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 15 - 6Aku uga kaya kanggo pirembagan bab contravariance , wiwit biasane konsep iki tansah bebarengan karo kovarian, lan minangka aturan padha takon bab mau bebarengan. Konsep iki rada ngelawan saka kovarian, amarga konstruksi iki nggunakake jinis pewaris. Ayo dadi ngomong kita pengin dhaftar sing bisa diutus dhaftar jinis obyek sing ora leluhur saka obyek Dog . Nanging, kita ora ngerti sadurunge bakal dadi jinis tartamtu. Ing kasus iki, a construction saka wangun ? Super Dog , sing kabeh jinis cocok - leluhur saka kelas Dog :
List<Animal> animals = new ArrayList<>();
List<? super Dog> dogs = animals;
dogs.add(new Dog());
dogs.add(new Dog());
Kita bisa kanthi aman nambah obyek saka jinis Dog menyang dhaptar kanthi generik kaya ngono , amarga ing kasus apa wae, kabeh cara sing ditindakake saka leluhure. Nanging kita ora bakal bisa nambah obyek saka jinis Animal , amarga ora ana kepastian sing bakal ana obyek saka jinis iki nang, lan ora, contone, Dog . Sawise kabeh, kita bisa njaluk saka unsur dhaftar iki cara saka kelas Dog , kang Animal ora bakal duwe . Ing kasus iki, kesalahan kompilasi bakal kedadeyan. Uga, yen kita pengin ngetrapake cara sadurunge, nanging kanthi umum iki:
public static void animalsVoice(List<? super Dog> dogs) {
 for (Dog dog : dogs) {
   dog.voice();
 }
}
kita bakal entuk kesalahan kompilasi ing daur ulang , amarga kita ora bisa yakin manawa dhaptar bali ngemot obyek saka jinis Dog lan bebas nggunakake metode kasebut. Yen kita nelpon cara dogs.get (0) ing dhaftar iki . - kita bakal entuk obyek saka jinis Obyek . Yaiku, kanggo cara animalsVoice() bisa digunakake , paling ora kita kudu nambah manipulasi cilik kanthi nyepetake data jinis:
public static void animalsVoice(List<? super Dog> dogs) {
 for (Object obj : dogs) {
   if (obj instanceof Dog) {
     Dog dog = (Dog) obj;
     dog.voice();
   }
 }
}
Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 15 - 7

16. Kepiye cara ana ing kelas Obyek?

Ing bagean seri iki, ing paragraf 11, aku wis mangsuli pitakon iki, mula aku menehi saran supaya sampeyan maca yen durung rampung. Ing kana kita bakal mungkasi dina iki. Ndeleng sampeyan ing bagean sabanjure! Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 15 - 8
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION