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

Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa. Bagian 14

Diterbitake ing grup
Kembang api! Jagad tansah obah lan kita tansah obah. Sadurunge, kanggo dadi pangembang Jawa, cukup ngerti sintaksis Jawa sethithik, lan liyane bakal teka. Suwe-suwe, tingkat kawruh sing dibutuhake kanggo dadi pangembang Jawa saya tambah akeh, kaya kompetisi, sing terus-terusan nyurung bar ngisor kawruh sing dibutuhake munggah. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 14 - 1Yen sampeyan pancene pengin dadi pangembang, sampeyan kudu njupuk lan nyiapake kanthi lengkap supaya bisa dadi pemula kaya sampeyan. Apa sing bakal ditindakake saiki, yaiku, kita bakal terus nganalisa luwih saka 250 pitakon . Ing artikel sadurunge, kita nliti kabeh pitakonan tingkat SMP, lan dina iki kita bakal njupuk pitakonan tingkat menengah. Senajan aku nyathet yen iki dudu 100% pitakonan tingkat menengah, sampeyan bisa ketemu paling akeh ing wawancara tingkat junior, amarga ing wawancara kaya ngono, investigasi rinci babagan basis teori sampeyan ditindakake, dene kanggo siswa menengah pitakonan luwih fokus ing probing kang pengalaman . Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 14 - 2Nanging, tanpa ado maneh, ayo miwiti.

agêng

Sing umum

1. Apa kaluwihan lan kekurangan OOP yen dibandhingake karo pemrograman prosedural / fungsional?

Ana pitakonan iki ing analisis pitakonan kanggo Juinior, lan aku wis mangsuli. Golekana pitakonan iki lan jawabane ing bagean artikel iki , pitakonan 16 lan 17.

2. Kepiye carane agregasi beda karo komposisi?

Ing OOP, ana sawetara jinis interaksi antarane obyek, digabungake miturut konsep umum "Has-A Relationship". Sesambetan menika nedahaken bilih satunggaling objek minangka komponen saking objek sanesipun. Ing wektu sing padha, ana rong subtipe saka hubungan iki: Komposisi - siji obyek nggawe obyek liyane lan umur obyek liyane gumantung ing umur pangripta. Agregasi - obyek nampa link (pointer) menyang obyek liyane sajrone proses konstruksi (ing kasus iki, umur obyek liyane ora gumantung ing umur pangripta). Kanggo pangerten sing luwih apik, ayo goleki conto tartamtu. Kita duwe kelas mobil tartamtu - Mobil , sing uga duwe lapangan internal saka jinis - Mesin lan dhaptar penumpang - List<Passenger> , uga duwe cara kanggo miwiti gerakan - startMoving() :
public class Car {

 private Engine engine;
 private List<Passenger> passengers;

 public Car(final List<Passenger> passengers) {
   this.engine = new Engine();
   this.passengers = passengers;
 }

 public void addPassenger(Passenger passenger) {
   passengers.add(passenger);
 }

 public void removePassengerByIndex(Long index) {
   passengers.remove(index);
 }

 public void startMoving() {
   engine.start();
   System.out.println("Машина начала своё движение");
   for (Passenger passenger : passengers) {
     System.out.println("В машине есть пассажир - " + passenger.getName());
   }
 }
}
Ing kasus iki, Komposisi minangka sambungan antarane Mobil lan Mesin , amarga kinerja mobil langsung gumantung ing ngarsane obyek mesin, amarga yen mesin = null , kita bakal nampa NullPointerException . Ing siji, engine ora bisa ana tanpa mesin (kok kita kudu mesin tanpa mesin?) Lan ora bisa dadi kagungane sawetara mesin ing siji titik ing wektu. Iki tegese yen kita mbusak obyek Mobil , ora ana maneh referensi kanggo obyek Engine , lan bakal rauh dibusak dening kolektor Sampah . Kaya sing sampeyan ngerteni, hubungan iki ketat banget (kuwat). Agregasi minangka sambungan antarane Mobil lan Penumpang , amarga kinerja Mobil ora gumantung ing obyek saka jinis Penumpang lan jumlahe. Padha bisa ninggalake mobil - removePassengerByIndex(Long index) utawa ngetik anyar - addPassenger(Passenger penumpang) , senadyan iki, mobil bakal terus dienggo kanthi bener. Sabanjure, obyek Penumpang bisa ana tanpa obyek Mobil . Kaya sing sampeyan ngerteni, iki minangka sambungan sing luwih lemah tinimbang sing kita deleng ing komposisi kasebut. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 14 - 3Nanging ora kabeh, obyek sing disambungake kanthi agregasi menyang liyane uga bisa duwe sambungan tartamtu karo obyek liyane ing wektu sing padha. Contone, sampeyan, minangka siswa Jawa, didaftarake ing kursus Inggris, OOP lan logaritma ing wektu sing padha, nanging ing wektu sing padha, sampeyan ora dadi bagean sing penting banget, tanpa fungsi normal ora mungkin (kayata guru).

3. Apa pola GoF sing wis digunakake ing laku? Menehi conto.

Aku wis mangsuli pitakonan iki sadurunge, supaya aku mung ninggalake link kanggo analisis , ndeleng pitakonan pisanan. Aku uga nemokake artikel lembar cheat sing apik babagan pola desain, sing dakkarepake supaya tetep ana.

4. Apa obyek proxy? Menehi conto

Proxy minangka pola desain struktural sing ngidini sampeyan ngganti obyek pengganti khusus, utawa kanthi tembung liyane, obyek proxy, tinimbang obyek nyata. Obyek proxy iki nyegat panggilan menyang obyek asli, ngidini sawetara logika dilebokake sadurunge utawa sawise telpon diterusake menyang asline. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 14 - 4Conto nggunakake obyek proxy:
  • Minangka proxy remot - digunakake nalika kita butuh obyek remot (obyek ing papan alamat sing beda) sing kudu diwakili sacara lokal. Ing kasus iki, proxy bakal nangani nggawe sambungan, enkoding, dekoding, lan sapiturute, nalika klien bakal nggunakake minangka obyek asli dumunung ing papan lokal.

  • Minangka proxy virtual - digunakake nalika obyek sumber-intensif dibutuhake. Ing kasus iki, obyek proxy dadi kaya gambar obyek nyata sing durung ana. Nalika panyuwunan nyata (panggilan metode) dikirim menyang obyek iki, mung banjur mbukak obyek asli lan cara kasebut dieksekusi. Pendekatan iki uga diarani initialization malas, bisa uga trep banget, amarga ing sawetara kahanan obyek asli bisa uga ora migunani, banjur ora ana biaya kanggo nggawe.

  • Minangka proxy keamanan - digunakake nalika sampeyan kudu ngontrol akses menyang sawetara obyek adhedhasar hak klien. Yaiku, yen klien sing duwe hak akses sing ilang nyoba ngakses obyek asli, proxy bakal nyegat lan ora ngidini.

Ayo goleki conto proxy virtual: Kita duwe sawetara antarmuka handler:
public interface Processor {
 void process();
}
Implementasine nggunakake sumber daya sing akeh banget, nanging ing wektu sing padha bisa uga ora digunakake saben aplikasi diluncurake:
public class HiperDifficultProcessor implements Processor {
 @Override
 public void process() {
   // некоторый сверхсложная обработка данных
 }
}
Kelas proxy:
public class HiperDifficultProcessorProxy implements Processor {
private HiperDifficultProcessor processor;

 @Override
 public void process() {
   if (processor == null) {
     processor = new HiperDifficultProcessor();
   }
   processor.process();
 }
}
Ayo mbukak ing utama :
Processor processor = new HiperDifficultProcessorProxy();
// тут тяжеловсеного оригинального an object, ещё не сущетсвует
// но при этом есть an object, который его представляет и у которого можно вызывать его методы
processor.process(); // лишь теперь, an object оригинал был создан
Aku Wigati sing akeh frameworks nggunakake proxying, lan kanggo Spring iki pola tombol (Spring wis stitched karo nang lan metu). Waca liyane babagan pola iki kene . Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 14 - 5

5. Inovasi apa wae kang wis diumumake ing Jawa 8?

Inovasi kang digawa Jawa 8 yaiku:
  • Antarmuka fungsional wis ditambahake, maca babagan kewan apa sing ana ing kene .

  • Ekspresi Lambda, sing ana hubungane karo antarmuka fungsional, maca liyane babagan panggunaan ing kene .

  • Added Stream API kanggo Processing trep saka koleksi data, maca liyane kene .

  • Nambahake pranala menyang metode .

  • Cara forEach () wis ditambahake menyang antarmuka Iterable .

  • Nambahake tanggal lan wektu API anyar ing paket java.time , analisis rinci ing kene .

  • Apik Concurrent API .

  • Nambahake kelas pambungkus Pilihan , sing digunakake kanggo nangani nilai null kanthi bener, sampeyan bisa nemokake artikel sing apik banget babagan topik iki .

  • Nambahake kemampuan kanggo antarmuka nggunakake cara statis lan standar (sing, ing inti, ndadekke Jawa nyedhaki sawetara warisan), rincian liyane kene .

  • Added cara anyar kanggo Koleksi (removeIf (), spliterator ()) kelas .

  • Minor dandan kanggo Java Core.

Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 14 - 6

6. Apa Kohesi Dhuwur lan Coupling Kurang? Menehi conto.

Kohesi Dhuwur utawa Kohesi Dhuwur yaiku konsep nalika kelas tartamtu ngemot unsur-unsur sing raket lan digabungake kanggo tujuane. Contone, kabeh cara ing kelas Panganggo kudu makili prilaku pangguna. Kelas nduweni kohesi sing kurang yen ngemot unsur sing ora ana hubungane. Contone, kelas Panganggo sing ngemot metode validasi alamat email:
public class User {
private String name;
private String email;

 public String getName() {
   return this.name;
 }

 public void setName(final String name) {
   this.name = name;
 }

 public String getEmail() {
   return this.email;
 }

 public void setEmail(final String email) {
   this.email = email;
 }

 public boolean isValidEmail() {
   // некоторая логика валидации емейла
 }
}
Kelas pangguna bisa uga tanggung jawab kanggo nyimpen alamat email pangguna, nanging ora kanggo validasi utawa ngirim email. Mula, kanggo nggayuh koherensi sing dhuwur, kita mindhah metode validasi menyang kelas sarana sing kapisah:
public class EmailUtil {
 public static boolean isValidEmail(String email) {
   // некоторая логика валидации емейла
 }
}
Lan kita nggunakake yen perlu (contone, sadurunge nyimpen pangguna). Low Coupling utawa Low Coupling minangka konsep sing nggambarake interdependensi kurang antarane modul piranti lunak. Intine, interdependensi yaiku carane ngganti siji mbutuhake ngganti liyane. Loro kelas duwe kopling kuwat (utawa kopling nyenyet) yen padha raket. Contone, rong kelas konkrit sing nyimpen referensi kanggo saben liyane lan nelpon cara saben liyane. Kelas sing digabungake luwih gampang dikembangake lan dijaga. Wiwit padha bebas saka saben liyane, padha bisa dikembangaké lan dites ing podo karo. Kajaba iku, padha bisa diganti lan dianyari tanpa mengaruhi saben liyane. Ayo goleki conto kelas sing digandhengake banget. Kita duwe sawetara kelas siswa:
public class Student {
 private Long id;
 private String name;
 private List<Lesson> lesson;
}
Sing ngemot dhaptar pelajaran:
public class Lesson {
 private Long id;
 private String name;
 private List<Student> students;
}
Saben pawulangan ngemot link kanggo nekani siswa. Genggeman sing luar biasa kuwat, apa ora? Kepiye carane bisa nyuda? Kaping pisanan, ayo priksa manawa siswa ora duwe dhaptar subjek, nanging dhaptar pengenal:
public class Student {
 private Long id;
 private String name;
 private List<Long> lessonIds;
}
Kapindho, kelas pawulangan ora perlu ngerti babagan kabeh siswa, mula ayo mbusak dhaptar kabeh:
public class Lesson {
 private Long id;
 private String name;
}
Dadi dadi luwih gampang, lan sambungan dadi luwih lemah, apa sampeyan mikir? Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 14 - 7

OOP

7. Kepriye caramu ngleksanakake warisan pirang-pirang ing basa Jawa?

Multiple inheritance minangka fitur saka konsep berorientasi obyek ing ngendi kelas bisa marisi properti saka luwih saka siji kelas induk. Masalah muncul nalika ana cara kanthi tandha sing padha ing kelas super lan subkelas. Nalika nelpon cara, compiler ora bisa nemtokake cara kelas kudu disebut, lan malah nalika nelpon cara kelas sing njupuk precedence. Mula, Jawa ora ndhukung warisan pirang-pirang! Nanging ana jinis celah, sing bakal kita pirembagan sabanjure. Kaya sing wis dakcritakake sadurunge, kanthi rilis Java 8, kemampuan kanggo duwe metode standar ditambahake ing antarmuka . Yen kelas sing ngetrapake antarmuka ora ngilangi metode iki, mula implementasine standar iki bakal digunakake (ora perlu ngilangi metode standar, kayata ngleksanakake sing abstrak). Ing kasus iki, iku bisa kanggo ngleksanakake antarmuka beda ing siji kelas lan nggunakake cara standar. Ayo katon ing conto. Kita duwe sawetara antarmuka flyer, kanthi metode fly() standar :
public interface Flyer {
 default void fly() {
   System.out.println("Я лечу!!!");
 }
}
Antarmuka walker, kanthi metode walk () standar :
public interface Walker {
 default void walk() {
   System.out.println("Я хожу!!!");
 }
}
Antarmuka perenang, kanthi metode swim() :
public interface Swimmer {
 default void swim() {
   System.out.println("Я плыву!!!");
 }
}
Saiki ayo dileksanakake kabeh iki ing siji kelas bebek:
public class Duck implements Flyer, Swimmer, Walker {
}
Lan ayo mbukak kabeh cara bebek kita:
Duck donald = new Duck();
donald.walk();
donald.fly();
donald.swim();
Ing console kita bakal nampa:
Aku lunga!!! Aku mabur!!! Aku nglangi!!!
Iki tegese kita wis nggambarake pirang-pirang warisan kanthi bener, sanajan iki dudu. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 14 - 8Aku uga bakal Wigati yen kelas ngleksanakake antarmuka karo cara gawan sing duwe jeneng cara padha lan bantahan padha ing cara iki, compiler bakal wiwiti sambat babagan incompatibility, amarga ora ngerti cara kang pancene kudu digunakake. Ana sawetara cara metu:
  • Ganti jeneng cara ing antarmuka supaya padha beda-beda saka siji liyane.
  • Ngapusi metode kontroversial kasebut ing kelas implementasine.
  • Warisan saka kelas sing ngetrapake metode kontroversial kasebut (banjur kelas sampeyan bakal nggunakake implementasine).

8. Punapa punika prabédan antarane final, pungkasan lan finalize () cara?

final minangka tembung kunci sing digunakake kanggo nyelehake kendala ing kelas, metode, utawa variabel, tegese kendala:
  • Kanggo variabel - sawise inisialisasi awal, variabel kasebut ora bisa ditemtokake maneh.
  • Kanggo metode, metode kasebut ora bisa diganti ing subclass (kelas penerus).
  • Kanggo kelas - kelas ora bisa diwarisake.
pungkasane minangka tembung kunci sadurunge blok kode, digunakake nalika nangani pengecualian, bebarengan karo blok coba , lan bebarengan (utawa bisa diganti) karo blok nyekel. Kode ing pemblokiran iki kaleksanan ing kasus apa wae, preduli saka pangecualian di buwang utawa ora. Ing bagean artikel iki , ing pitakonan 104, kahanan sing luar biasa sing ora bakal ditindakake pemblokiran iki dibahas. finalize () iku sawijining cara saka kelas Obyek , disebut sadurunge saben obyek dibusak dening kolektor uwuh, cara iki bakal disebut (pungkasan), lan digunakake kanggo ngresiki munggah sumber daya dikuwasani. Kanggo informasi luwih lengkap babagan cara kelas Obyek sing saben obyek diwenehi, pirsani pitakonan 11 ing bagean artikel iki . Inggih, ing ngendi kita bakal mungkasi dina iki. Ndeleng sampeyan ing bagean sabanjure! Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 14 - 9
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION