JavaRush /Java Blog /Random-TK /Java dörediji üçin geçirilen söhbetdeşliklerden soraglary...

Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi. 14-nji bölüm

Toparda çap edildi
Feýerwerk! Dünýä yzygiderli hereket edýär we biz hemişe hereket edýäris. Ozal Java dörediji bolmak üçin biraz Java sintaksisini bilmek ýeterlikdi, galanlary gelerdi. Wagtyň geçmegi bilen, Java döredijisi bolmak üçin zerur bilim derejesi, zerur bilimleriň aşaky setirini ýokaryk galdyrmagy dowam etdirýän bäsdeşlik ýaly ep-esli ösdi. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  14-nji bölümEger hakykatdanam işläp düzüji bolmak isleýän bolsaňyz, muny kabul etmeli däl we siz ýaly täze öwrenýänleriň arasynda tapawutlanmak üçin düýpli taýýarlanmalysyňyz. Bu gün näme ederis, ýagny 250+ soragy derňemegi dowam etdireris . Öňki makalalarda kiçi derejeli soraglaryň hemmesini gözden geçirdik we bu gün orta derejeli soraglary alarys. Bularyň 100% orta derejeli sorag däldigini bellesem-de, olaryň köpüsine kiçi derejeli söhbetdeşlikde duşup bilersiňiz, sebäbi hut şeýle söhbetdeşliklerde teoretiki binýadyňyzy jikme-jik gözden geçirýär, orta okuwçy üçin bolsa soraglary onuň tejribesini barlamaga has köp gönükdirilendir. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  14-nji bölümFurtheröne, goşmaça sözlemän başlalyň.

Orta

Adatydyr

1. Prosessual / funksional programmirleme bilen deňeşdirilende OOP-nyň artykmaçlyklary we kemçilikleri haýsylar?

Juinior üçin soraglaryň derňewinde bu sorag ýüze çykdy we şoňa görä-de eýýäm jogap berdim. Bu soragy we jogabyny makalanyň şu bölüminde, 16 we 17-nji soraglarda gözläň .

2. Toplum kompozisiýadan nähili tapawutlanýar?

OOP-da, "Has-A gatnaşyk" düşünjesine laýyklykda birleşdirilen obýektleriň arasynda özara täsiriň birnäçe görnüşi bar. Bu gatnaşyk bir obýektiň başga bir obýektiň bir bölegidigini görkezýär. Şol bir wagtyň özünde bu gatnaşyklaryň iki görnüşi bar: Kompozisiýa - bir obýekt başga bir obýekt döredýär we başga bir obýektiň ömri döredijiniň ömrüne baglydyr. Agregasiýa - bir gurluşyk döwründe başga bir obýekt bilen baglanyşyk (görkeziji) alýar (bu ýagdaýda beýleki obýektiň ömri döredijiniň ömrüne bagly däldir). Has gowy düşünmek üçin, belli bir mysala seredeliň. Bizde belli bir awtoulag synpy bar - Awtoulag , öz gezeginde görnüşiň içerki meýdanlary - Dwigatel we ýolagçylaryň sanawy - <Passenger> sanawy , şeýle hem hereketi başlamagyň usuly bar - 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());
   }
 }
}
Bu ýagdaýda Kompozisiýa Awtoulag bilen Dwigateliň arasyndaky baglanyşykdyr , sebäbi awtoulagyň öndürijiligi hereketlendirijiniň obýektiniň barlygyna gönüden-göni baglydyr, sebäbi hereketlendiriji = null bolsa, NullPointerException alarys . Öz gezeginde dwigatel maşynsyz bolup bilmez (näme üçin bize maşynsyz hereketlendiriji gerek?) We bir wagtyň özünde birnäçe maşyna degişli bolup bilmez. Diýmek, Awtoulag obýektini pozsak, Dwigatel obýektine salgylanma bolmaz we ýakyn wagtda zibil ýygnaýjy tarapyndan ýok ediler . Görşüňiz ýaly, bu gatnaşyk gaty berk (güýçli). Agregasiýa Awtoulag bilen engerolagçynyň arasyndaky baglanyşykdyr , sebäbi Awtoulagyň öndürijiligi hiç hili ýolagçy görnüşindäki obýektlere we olaryň sanyna bagly däldir. Eithera-da awtoulagdan çykyp bilerler --PassengerByIndex (Uzyn indeks) aýyryp ýa-da täzelerine girip bilerler - addPassenger (engerolagçy ýolagçysy) , muňa garamazdan, awtoulag kadaly işlemegini dowam etdirer. Öz gezeginde ýolagçy obýektleri Awtoulag obýekti bolmazdan bolup biler . Düşünşiňiz ýaly, bu kompozisiýada görşümizden has gowşak baglanyşyk. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  14-nji bölümThat'söne bularyň hemmesi däl, jemlemek bilen başga birine birikdirilen bir wagtyň özünde beýleki obýektler bilen belli bir baglanyşyk bolup biler. Mysal üçin, siz Java talyby hökmünde bir wagtyň özünde iňlis, OOP we logarifm kurslaryna ýazylýarsyňyz, ýöne şol bir wagtyň özünde-de olaryň kadaly işlemegi mümkin däl (meselem, adaty işlemek mümkin däl) mugallym).

3. Iş ýüzünde haýsy GoF nagyşlaryny ulandyňyz? Mysal beriň.

Bu soraga öňem jogap berdim, şonuň üçin diňe analiz üçin baglanyşyk goýaryn , birinji soraga serediň. Şeýle hem, dizaýn nagyşlary barada ajaýyp aldaw sahypasyny tapdym , elimde saklamagy maslahat berýärin.

4. Proksi obýekt näme? Mysal beriň

Proksi, ýörite çalyşýan obýektleri ýa-da başga bir söz bilen aýdylanda, hakyky obýektleriň ýerine proksi obýektlerini çalyşmaga mümkinçilik berýän gurluş dizaýn nagşydyr. Bu proksi obýektler jaňlary asyl obýekte geçirýär, bu jaň asyl nusgasyna geçmezden ozal ýa-da soň käbir logikany girizmäge mümkinçilik berýär. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  14-nji bölümProksi obýekti ulanmagyň mysallary:
  • Uzakdan proksi hökmünde - ýerli görnüşde görkezilmeli uzakdaky obýekt (başga bir salgy giňişligindäki obýekt) gerek bolanda ulanylýar. Bu ýagdaýda proksi baglanyşyk döretmek, kodlamak, kodlamak we ş.m. bilen meşgullanar, müşderi bolsa ýerli giňişlikde ýerleşýän asyl obýekt ýaly ulanar.

  • Wirtual proksi hökmünde - serişde talap edýän obýekt zerur bolanda ulanylýar. Bu ýagdaýda proksi obýekti entek ýok bolan hakyky obýektiň şekili ýaly bir zat bolup hyzmat edýär. Bu obýekte hakyky haýyş (usul jaňy) iberilende, diňe asyl obýekt ýüklenýär we usul ýerine ýetirilýär. Bu çemeleşmä gijikdirilen başlangyç diýilýär, bu gaty amatly bolup biler, sebäbi käbir ýagdaýlarda asyl obýektiň peýdasyz bolup biler we soň ony döretmek üçin çykdajy bolmaz.

  • Howpsuzlyk wekili hökmünde - müşderiniň hukuklaryna esaslanýan käbir obýektlere girişi gözegçilikde saklamaly wagtyňyz ulanylýar. Accessagny, giriş hukugy ýok müşderi asyl obýekte girmäge synanyşsa, proksi ony saklar we rugsat bermez.

Wirtual proksi mysalyna seredeliň: Bizde işleýän interfeýs bar:
public interface Processor {
 void process();
}
Munuň ýerine ýetirilmegi gaty köp serişdäni ulanýar, ýöne şol bir wagtyň özünde her gezek programma açylanda ulanylyp bilinmez:
public class HiperDifficultProcessor implements Processor {
 @Override
 public void process() {
   // некоторый сверхсложная обработка данных
 }
}
Proksi synpy:
public class HiperDifficultProcessorProxy implements Processor {
private HiperDifficultProcessor processor;

 @Override
 public void process() {
   if (processor == null) {
     processor = new HiperDifficultProcessor();
   }
   processor.process();
 }
}
Esasy işledeliň :
Processor processor = new HiperDifficultProcessorProxy();
// тут тяжеловсеного оригинального an object, ещё не сущетсвует
// но при этом есть an object, который его представляет и у которого можно вызывать его методы
processor.process(); // лишь теперь, an object оригинал был создан
Köp çarçuwalaryň proksi ulanýandygyny belläp geçýärin, Bahar üçin bu esasy nagyşdyr (Bahar içerde we daşy bilen tikilýär). Bu nagyş hakda has giňişleýin maglumaty şu ýerden okaň . Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  14-5-nji bölüm

5. Java 8-de haýsy täzelikler yglan edildi?

Java 8 tarapyndan getirilen täzelikler aşakdakylar:
  • Funksiýa interfeýsleri goşuldy, bu ýerde haýsy haýwanyň bardygyny okaň .

  • Funksiýa interfeýsleri bilen ýakyndan baglanyşykly Lambda aňlatmalary, ulanylyşy barada şu ýerde has köp okaň .

  • Maglumat ýygyndylaryny amatly gaýtadan işlemek üçin Stream API goşuldy , şu ýerde has giňişleýin okaň .

  • Usullara baglanyşyk goşuldy .

  • ForEach () usuly Iterable interfeýsine goşuldy .

  • Java.time bukjasyna täze sene we wagt API goşuldy, bu ýerde jikme-jik derňew .

  • Kämilleşdirilen API .

  • Nul bahalary dogry dolandyrmak üçin ulanylýan Goşmaça örtük synpyny goşmak bilen , bu mowzukda ajaýyp makala tapyp bilersiňiz .

  • Interfeýsleriň statiki we adaty usullary ulanmak ukybyny goşmak (aslynda Java-ny köp mirasa ýakynlaşdyrýar), has giňişleýin maglumat .

  • Toplama (removeIf (), spliterator ()) synpyna täze usullar goşuldy .

  • Java Core-de ownuk gowulaşmalar.

Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  14-6-njy bölüm

6. Highokary jebislik we pes jübütlik näme? Mysal beriň.

Highokary jebislik ýa-da ýokary jebislik , belli bir synpda biri-biri bilen ýakyn baglanyşykly we maksatlary üçin birleşdirilen elementleri öz içine alýan düşünje. Mysal üçin, Ulanyjy synpyndaky ähli usullar ulanyjynyň özüni alyp barşyny görkezmeli. Bir synpda baglanyşyksyz elementler bar bolsa pes birleşýär. Mysal üçin, e-poçta salgysyny tassyklamak usuly bolan Ulanyjy synpy:
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() {
   // некоторая логика валидации емейла
 }
}
Ulanyjy synpy, ulanyjynyň e-poçta salgysyny saklamak üçin jogapkär bolup biler, ýöne ony tassyklamak ýa-da e-poçta ibermek üçin däl. Şonuň üçin ýokary utgaşyklygy gazanmak üçin tassyklama usulyny aýratyn peýdaly synplara geçirýäris:
public class EmailUtil {
 public static boolean isValidEmail(String email) {
   // некоторая логика валидации емейла
 }
}
Ony zerur bolanda ulanýarys (mysal üçin, ulanyjyny halas etmezden ozal). Pes jübütlemek ýa-da pes jübütlemek , programma üpjünçiliginiň modullarynyň arasynda pes garaşlylygy beýan edýän düşünje. Aslynda, biri-birine baglylyk, birini üýtgetmegiň beýlekisini üýtgetmegi talap edýär. Iki synpda ýakyn baglanyşykly bolsa güýçli birikdirme (ýa-da berk birikdirme) bar. Mysal üçin, biri-birine salgylanmalary saklaýan we biri-biriniň usullaryny çagyrýan iki sany anyk synp. Gaty birleşdirilen synplary ösdürmek we goldamak has aňsat. Biri-birinden garaşsyz bolansoň, paralel ösdürilip we synagdan geçirilip bilner. Mundan başga-da, biri-birine täsir etmezden üýtgedilip we täzelenip bilner. Güýçli birleşdirilen synplaryň mysalyna seredeliň. Bizde käbir talyplar synpy bar:
public class Student {
 private Long id;
 private String name;
 private List<Lesson> lesson;
}
Sapaklaryň sanawyny öz içine alýan:
public class Lesson {
 private Long id;
 private String name;
 private List<Student> students;
}
Her sapakda okuwçylara gatnaşmak üçin baglanyşyk bar. Ajaýyp güýçli tutmak, şeýlemi? Nädip azaldyp bilersiňiz? Ilki bilen, okuwçylaryň dersleriň sanawy däl-de, eýsem kesgitleýjileriniň sanawy barlygyna göz ýetireliň:
public class Student {
 private Long id;
 private String name;
 private List<Long> lessonIds;
}
Ikinjiden, sapak synpy ähli okuwçylar hakda bilmeli däl, geliň olaryň sanawyny düýbünden ýok edeliň:
public class Lesson {
 private Long id;
 private String name;
}
Şeýlelik bilen has aňsatlaşdy we baglanyşyk has gowşady, şeýlemi? Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  14-7-nji bölüm

OOP

7. Java-da birnäçe mirasy nädip durmuşa geçirip bilersiňiz?

Birnäçe miras, obýekte gönükdirilen düşünjäniň aýratynlygy bolup, onda bir synp birden köp ene synpyndan häsiýetleri miras alyp biler. Super synpda-da, kiçi synpda-da birmeňzeş golly usullar bar bolsa mesele ýüze çykýar. Usul çagyrylanda, düzüji haýsy synp usulyna çagyrylmalydygyny, hatda birinji orunda durýan synp usulyna jaň edeninde-de kesgitläp bilmeýär. Şonuň üçin Java köp mirasy goldamaýar! Nextöne indiki hakda gürleşjek bir hili kemçilik bar. Öň hem belläp geçişim ýaly, Java 8-iň çykmagy bilen interfeýslere deslapky usullara eýe bolmak ukyby goşuldy . Eger interfeýsi amala aşyrýan synp bu usuly ýok etmese, bu başlangyç ýerine ýetiriş ulanylar (abstrakt usuly ýerine ýetirmek ýaly deslapky usuly ýok etmek hökman däl). Bu ýagdaýda bir synpda dürli interfeýsleri amala aşyrmak we deslapky usullaryny ulanmak mümkin. Bir mysala seredeliň. Adaty uçuş () usuly bilen birneme uçuş interfeýsi bar :
public interface Flyer {
 default void fly() {
   System.out.println("Я лечу!!!");
 }
}
Walkörite gezelenç () usuly bilen gezelenç interfeýsi :
public interface Walker {
 default void walk() {
   System.out.println("Я хожу!!!");
 }
}
Swimüzmek () usuly bilen ýüzmek interfeýsi :
public interface Swimmer {
 default void swim() {
   System.out.println("Я плыву!!!");
 }
}
Indi, bularyň hemmesini bir ördek synpynda durmuşa geçireliň:
public class Duck implements Flyer, Swimmer, Walker {
}
Ördekimiziň ähli usullaryny işledeliň:
Duck donald = new Duck();
donald.walk();
donald.fly();
donald.swim();
Konsolda alarys:
Men gidýän!!! Uçýaryn !!! Mingüzýärin !!!
Diýmek, bu miras bolmasa-da, köp mirasy dogry suratlandyrdyk. Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 14 - 8Şeýle hem, bir synp bu usullarda birmeňzeş usul atlary we şol bir argumentler bolan deslapky usullar bilen interfeýsleri amala aşyrsa, düzüjiniň haýsy usulyň hakykatdanam ulanylmalydygyna düşünmeýändigi sebäpli gabat gelmeýänliginden zeýrenip başlar. Çykmagyň birnäçe ýoly bar:
  • Usullaryň biri-birinden tapawutlanmagy üçin adyny üýtgediň.
  • Durmuş synpynda şeýle jedelli usullary ýok ediň.
  • Bu jedelli usullary durmuşa geçirýän synpdan miras alyň (şonda synpyňyz ýerine ýetirişini doly ulanar).

8. Jemleýji, ahyrky we gutarnykly () usullaryň arasynda näme tapawut bar?

jemleýji synp, usul ýa-da üýtgeýän, çäklendiriji manyda çäklendirme goýmak üçin ulanylýan açar söz:
  • Üýtgeýji üçin - başlangyç başlangyçdan soň üýtgeýjini täzeden kesgitläp bolmaz.
  • Usul üçin bu usuly kiçi klasda (mirasdüşer synpy) ýok edip bolmaz.
  • Bir synp üçin - synp miras bolup bilmez.
ahyrsoňy, kadadan çykmalar ulanylanda, synag bloky bilen bilelikde we tutuş blok bilen bilelikde (ýa-da çalşylýar) ulanylýan kod blokynyň öňündäki açar söz. Bu blokdaky kod, kadadan çykma ýa-da atylmaýandygyna garamazdan islendik ýagdaýda ýerine ýetirilýär. Makalanyň bu bölüminde , 104-nji soragda, bu blokyň ýerine ýetirilmejek aýratyn ýagdaýlary ara alnyp maslahatlaşylýar. finalize () Obýekt synpynyň usuly bolup , her bir zat zibil ýygnaýjy tarapyndan ýok edilmezden ozal çagyrylýar, bu usul (iň soňky) diýlip atlandyrylar we basyp alnan çeşmeleri arassalamak üçin ulanylýar. Her bir obýektiň miras alýan Obýekt synpynyň usullary barada has giňişleýin maglumat üçin makalanyň şu böleginde 11-nji soraga serediň. Ine, şu gün gutararys. Indiki bölümde görüşeris! Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 14 - 9
Tapgyryň beýleki materiallary:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION