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. 12-nji bölüm

Toparda çap edildi
Salam! Bilim güýçdir. Ilkinji söhbetdeşlikden öň näçe köp bilim alsaňyz, şonça-da ynamly bolarsyňyz. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  12-nji bölümBilimleriň köp mukdary bilen bulaşdyrmak kyn bolar we şol bir wagtyň özünde söhbetdeşiňizi ýakymly geň galdyryp bilersiňiz. Şol sebäpden, bu gün, Java sözleýjisi üçin 250+ soragy gözden geçirip, teoretiki binýadyňyzy berkitmäge dowam ederis . Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  12-nji bölüm

103. Mirasdaky kadadan çykmalary barlamagyň düzgünleri haýsylar?

Soraga dogry düşünýän bolsam, miras döwründe kadadan çykmalar bilen işlemegiň düzgünleri barada soraýarlar we olar aşakdakylar:
  • Nesil / durmuşa geçirmekde artykmaç ýa-da ýerine ýetirilen usul, iýerarhiýada superklass / interfeýs usulyndaky kadadan çykmalardan has ýokary barlanylan kadadan çykmalary atyp bilmez.
Iagny, IOException-y taşlaýan usul bilen belli bir haýwan interfeýsi bar bolsa :
public  interface Animal {
   void voice() throws IOException;
}
Bu interfeýsi durmuşa geçirenimizde, has umumy atylan kadadan çykmany atyp bilmeris (mysal üçin, Kadadan çykma , Zyňylýan ), ýöne FileNotFoundException ýaly nesil kadasy bilen çalşyp bileris :
public class Cat implements Animal {
   @Override
   public void voice() throws FileNotFoundException {
// некоторая реализация
   }
}
  • Kiçi konstruktor, obýekt döredilende çagyrylýan superklass konstruktor tarapyndan atylan ähli kadadan çykma synplaryny öz içine alýar.
Haýwan synpynyň konstruktory köp kadadan çykma diýsek :
public class Animal {
  public Animal() throws ArithmeticException, NullPointerException, IOException {
  }
Soňra synp mirasdüşeri olary konstruktorda görkezmeli:
public class Cat extends Animal {
   public Cat() throws ArithmeticException, NullPointerException, IOException {
       super();
   }
Methodsa-da usullardaky ýaly, şol bir kadadan çykmalary däl-de, has umumylaryny kesgitläp bilersiňiz. Biziň ýagdaýymyzda has umumy kadadan çykmany kesgitlemek ýeterlik bolar - Kadadan çykma , sebäbi bu üç kadadan çykmagyň üçüsiniň umumy atasy:
public class Cat extends Animal {
   public Cat() throws Exception {
       super();
   }

104. Iň soňky blok haçan ýerine ýetirilmejekdigi üçin kod ýazyp bilersiňizmi?

Ilki bilen, ahyrsoňy nämedigini ýada salalyň . Ozal kadadan çykmalary tutmagyň mehanizmine seredýärdik: synanyşyk bloky tutýan ýerini görkezýär, tutuş blok (lar) belli bir kadadan çykma wagtynda işleýän kod. Ahyrynda tutmak bilen çalşylýan, ýöne biri-birine bagly bolmadyk üçünji blok kody . Bu blokyň düýp manysy, içindäki kod, synagyň ýa-da tutmagyň netijesine garamazdan (kadadan çykma ýa-da atylmaýandygyna garamazdan) elmydama işleýär. Şowsuzlyk ýagdaýlary gaty seýrek we adaty däl. Şowsuzlygyň iň ýönekeý ýagdaýy, ýokardaky kodda System.exit (0) usuly çagyrylanda , programmany bes edýän (ony öçürýär):
try {
   throw new IOException();
} catch (IOException e) {
   System.exit(0);
} finally {
   System.out.println("Данное сообщение не будет выведенно в консоль");
}
Ahyrynda işlemejek käbir beýleki ýagdaýlaram bar :
  • Kritiki ulgam problemalary sebäpli ýüze çykan programmanyň adatdan daşary ýatyrylmagy ýa-da programmany “ýykjak” käbir säwlikleriň ýykylmagy (ýalňyşlygyň mysaly, ýadyň dolmagy bilen ýüze çykýan şol bir StackOwerflowError bolup biler).
  • Deamon sapagy ry-den geçende ... ahyrsoňy blokirläň we şonuň bilen bilelikde programma gutarýar. Galyberse-de, deamon sapagy fon hereketleri üçin sapakdyr, ýagny ileri tutulýan we hökmany däl we programma işiniň gutarmagyna garaşmaz.
  • Iň ýaýran çäksiz aýlaw, synap görüň ýa-da tutuň , bir gezek akym şol ýerde galar:

    try {
       while (true) {
       }
    } finally {
       System.out.println("Данное сообщение не будет выведенно в консоль");
    }

Bu sorag täze doglan çagalar üçin geçirilen söhbetdeşliklerde gaty meşhur, şonuň üçin bu ajaýyp ýagdaýlaryň birnäçesini ýatda saklamaly. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  12 - 3 bölüm

105. Bir tutuş blokda birnäçe kadadan çykma meselesini ýazyň

1) Belki sorag nädogry berlen bolsa gerek. Meniň düşünişime görä, bu sorag bir synanyşyk üçin birnäçe tutmagy aňladýar :
try {
  throw new FileNotFoundException();
} catch (FileNotFoundException e) {
   System.out.print("Упс, у вас упало исключение - " + e);
} catch (IOException e) {
   System.out.print("Упс, у вас упало исключение - " + e);
} catch (Exception e) {
   System.out.print("Упс, у вас упало исключение - " + e);
}
Synag blokynda kadadan çykma ýüze çyksa , tutmak bloklary ony ýokardan aşak tutmaga synanyşýarlar. Belli bir tutmak bloky üstünlik gazansa, kadadan çykma hukugyny alýar, aşakdaky bloklaryň galan bölegi indi bolmaz tutmaga we öz görnüşinde gaýtadan işlemäge ukyply. Şonuň üçin has dar kadadan çykmalar tutuş blok zynjyrynda has ýokary we has giň kadadan çykmalar has pes ýerde goýulýar. Mysal üçin, ilkinji tutulýan blokymyzda “Kadadan çykma” synpyndan başga bir kadadan çykma bar bolsa , barlanan kadadan çykmalar galan bloklara girip bilmez (“ Expression” nesilleri bilen galan bloklar düýbünden peýdasyz bolar). 2) Sorag dogry berildi.Bu ýagdaýda biziň işleýşimiz aşakdaky ýaly bolar:
try {
  throw new NullPointerException();
} catch (Exception e) {
   if (e instanceof FileNotFoundException) {
       // некоторая обработка с сужением типа (FileNotFoundException)e
   } else if (e instanceof ArithmeticException) {
       // некоторая обработка с сужением типа (ArithmeticException)e
   } else if(e instanceof NullPointerException) {
       // некоторая обработка с сужением типа (NullPointerException)e
   }
Tutmak arkaly kadadan çykma alanymyzdan soň , haýsydyr bir obýektiň belli bir görnüşe degişlidigini ýa-da ýokdugyny barlamak üçin ulanylýan mysal usuly arkaly anyk görnüşini tapmaga synanyşýarys , soň bolsa negatiw netijeler bolmazdan bu görnüşe çenli kiçeldip bileris. Göz öňünde tutulan çemeleşmeleriň ikisi-de şol bir ýagdaýda ulanylyp bilner, ýöne soragyň nädogrydygyny aýtdym, sebäbi ikinji warianty gowy diýip atlandyrmaýaryn we tejribämde hiç haçan görmedim, şol bir wagtyň özünde köp adamly ilkinji usul giňden ýaýrady ýaýramak. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  12 - 4 bölüm

106. Haýsy operator kadadan çykmaga mejbur etmäge mümkinçilik berýär? Mysal ýazyň

Men eýýäm ýokarda birnäçe gezek ulanypdym, ýöne şonda-da bu açar sözi gaýtalaýaryn - zyň . Mysal ulanylyşy (kadadan çykmaga mejbur etmek):
throw new NullPointerException();

107. Esasy usul zyňmak kadasyny taşlap bilermi? Şeýle bolsa, nirä geçiriler?

Ilki bilen, esasy zadyň adaty usuldan başga zat däldigini belläsim gelýär , hawa, programmany ýerine ýetirip başlamak üçin wirtual maşyn tarapyndan çagyrylýar, ýöne bulardan başga islendik koddan hem çagyrylyp bilner. .Agny, zyňylandan soň barlanylan kadadan çykmalary kesgitlemek üçin adaty düzgünlere-de tabyn :
public static void main(String[] args) throws IOException {
Şoňa laýyklykda kadadan çykmalar hem bolup biler. Esasy usul haýsydyr bir usul bilen çagyrylmadyk bolsa , ýöne programmanyň başlangyç nokady hökmünde başlanan bolsa, onda taşlanan kadadan çykma .UncaughtExceptionHandler interfeýsi tarapyndan dolandyrylar . Bu işleýji sapak üçin birdir (ýagny her sapakda bir işleýji). Zerur bolsa, öz işleýjiňizi döredip, mowzuk obýektine çagyrylan setDefaultUncaughtExceptionHandler usuly bilen sazlap bilersiňiz .

Köp okamak

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

108. Köp okamak bilen işlemek üçin haýsy gurallary bilýärsiňiz?

Java-da köp okalmagy ulanmak üçin esasy / esasy gurallar:
  • Sinhronlaşdyrylan, beýleki sapaklardan bir sapak girende usuly / blokirlemegi ýapmagyň (blokirlemegiň) mehanizmidir.
  • Üýtgäp durýan , dürli sapaklar boýunça üýtgeýjä yzygiderli girmegi üpjün etmegiň mehanizmi, ýagny üýtgeýjide bu üýtgeýjiniň bolmagy bilen, ähli tabşyryk we okamak amallary atom bolmaly. Başgaça aýdylanda, sapaklar bu üýtgeýjini ýerli ýadyna göçürmez we üýtgetmez, asyl bahasyny üýtgeder.
Üýtgeýän hakda has giňişleýin maglumaty şu ýerden okaň .
  • Işläp bolýan , belli bir synpda durmuşa geçirilip bilinjek interfeýsdir (esasanam, işleýiş usuly):
public class CustomRunnable implements Runnable {
   @Override
   public void run() {
       // некоторая логика
   }
}
Bu synpyň obýektini döredeniňizden soň, bu obýekti täze mowzuk obýektiniň konstruktoryna goýup we onuň başlangyç () usulyna jaň edip , täze sapak başlap bilersiňiz :
Runnable runnable = new CustomRunnable();
new Thread(runnable).start();
Başlangyç usuly ýerine ýetirilen run () usulyny aýratyn sapakda işleýär .
  • Sapak , oňa miras galan synpdyr ( usulyny ýok edende ):
public class CustomThread extends Thread {
   @Override
   public void run() {
       // некоторая логика
   }
}
Bu synpyň obýektini döretmek we başlangyç () usuly bilen işe girizmek bilen , täze sapak açarys:
new CustomThread().start();
  • “Concurrency” köp sapakly gurşawda işlemek üçin gurallar bilen bukjadyr.
Ol aşakdakylardan ybarat:
  • Bilelikdäki ýygyndylar - köp sapakly gurşawda işlemek üçin ýöriteleşdirilen ýygyndylar toplumy.
  • Nobatlar - köp sapakly gurşaw üçin ýöriteleşdirilen nobatlar (blokirlemek we blokirlemezlik).
  • Sinhronizatorlar köp sapakly gurşawda işlemek üçin ýöriteleşdirilen kömekçi enjamlardyr.
  • Ecutorerine ýetirijiler sapak howuzlaryny döretmegiň mehanizmleridir.
  • Gulplar - sapaklary sinhronlamak mehanizmleri (standartlardan has çeýe - sinhronlaşdyrylan, garaşyň, habar beriň, hemmesine habar beriň).
  • Atomlar köp sapakly ýerine ýetiriş üçin optimallaşdyrylan synplar; her amal atom.
Bilelikdäki paket hakda has giňişleýin maglumaty şu ýerden öwreniň .

109. Saplaryň arasynda sinhronizasiýa barada gürleşiň. Garaşmak (), habar bermek () - habar bermekAll () goşulmak () usullary haýsylar?

Soraga düşünişime görä, sapaklaryň arasyndaky sinhronizasiýa esasy üýtgediji - sinhronlaşdyrylan . Bu üýtgediji gönüden-göni blokuň gapdalynda ýerleşdirilip bilner:
synchronized (Main.class) {
   // некоторая логика
}
Ora-da göni usul golunda:
public synchronized void move() {
   // некоторая логика}
Öň hem aýdyşym ýaly, sinhronlaşdyrylan bir sapak eýýäm bir sapak gireninde beýleki sapaklardan blok / usuly ýapmaga mümkinçilik berýän mehanizmdir. Blok / usuly otag hökmünde pikir ediň. Käbir akym, oňa gelip, gulplanar, beýleki akymlar, otaga gelip, ýapykdygyny görüp, erkin bolýança garaşarlar. Işini bitirensoň, birinji sapak otagdan çykýar we açary goýberýär. Açar hakda yzygiderli gürleşýänim hiç zat däldi, sebäbi hakykatdanam bar. Bu, meşgul / erkin ýagdaýy bolan aýratyn obýekt. Bu obýekt her Java obýektine birikdirilýär, şonuň üçin sinhron blok ulanylanda, muteeksiň gapyny ýapmak isleýän obýektimizi gabygyň içinde görkezmeli:
Cat cat = new Cat();
synchronized (cat) {
   // некоторая логика
}
Şeýle hem, birinji mysalda ( Main.class ) edişim ýaly synp muteeksini ulanyp bilersiňiz. Sinhronlaşdyrylan usul bilen ulananymyzda , ýapmak isleýän obýektimizi görkezmeýäris, şeýlemi? Bu ýagdaýda, statik däl usul üçin, bu obýektiň muteeksinde , ýagny bu synpyň häzirki obýektinde ýapylar. Statik häzirki synpyň muteeksinde ýapylar ( this.getClass (); ). Mutex hakda has giňişleýin maglumaty şu ýerden okap bilersiňiz . Sinhronlaşdyrylan hakda şu ýerde okaň . Garaşmak () muteeks goýberýän we häzirki sapagy häzirki monitora dakylýan ýaly (labyr ýaly bir zat) garaşma tertibine salýan usuldyr. Şol sebäpli bu usuly diňe sinhronlaşdyrylan blokdan ýa-da usuldan çagyryp bolar (başgaça, nämäni boşatmaly we nämä garaşmaly). Şeýle hem munuň Obýekt synpynyň usulydygyna üns beriň . Has takygy, bir däl, hatda üçüsi:
  • Garaşyň () - häzirki sapagy garaşmak re intoimine goýýar, başga bir sapak bu obýekt üçin bildiriş () ýa-da notifyAll () usulyny çagyrýança (bu usullar barada soňrak gürleşeris).

  • Garaşmak (uzak wagt gutarmak) - häzirki sapagy bu obýektdäki habarnamany () ýa-da notifyAll () usulyny çagyrýança ýa-da görkezilen möhlet gutarýança garaşmak tertibine goýýar .

  • Garaşyň (uzak wagt gutarmagy, int nanos) - öňküsine meňzeş, diňe nanos size nanosekuntlary kesgitlemäge mümkinçilik berýär (has takyk wagt sazlamasy).

  • Notify () häzirki sinhronizasiýa blokynyň bir tötänleýin sapagyny oýarmaga mümkinçilik berýän usuldyr. Againene-de ony diňe sinhronlaşdyrylan blokda ýa-da usulda çagyryp bolar (ahyrsoňy, başga ýerlerde doňdurjak adam bolmaz).

  • “NotifyAll” () häzirki monitordaky ähli garaşma sapaklaryny oýarýan usuldyr (diňe sinhronlaşdyrylan blokda ýa-da usulda ulanylýar).

110. Akymy nädip togtatmaly?

Ilki bilen aýdyljak zat, run () usuly doly ýerine ýetirilende , sapak awtomatiki ýok edilýär. Sometimesöne käwagt bu usul gutarmanka ony öňünden öldürmeli bolarsyňyz. Onda näme etmeli? Belki, mowzuk obýektinde stop () usuly bolmaly ? Nähili bolsa-da! Bu usul köne hasaplanýar we ulgamyň çökmegine sebäp bolup biler. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  12-6-njy bölümOnda näme? Muny etmegiň iki ýoly bar: birinjisi , içerki baýdagyňyzy ulanmak. Bir mysala seredeliň. Ekranda belli bir sözlemi doly durýança görkezmeli bir sapak bar.
public class CustomThread extends Thread {
private boolean isActive;

   public CustomThread() {
       this.isActive = true;
   }

   @Override
   public void run() {
       {
           while (isActive) {
               System.out.println("Поток выполняет некую логику...");
           }
           System.out.println("Поток остановлен!");
       }
   }

   public void stopRunningThread() {
       isActive = false;
   }
}
StopRunning () usuly ulanylanda içerki baýdak ýalňyş bolýar we usuly işlemegini bes edýär. Esasy ýagdaýda işledeliň :
System.out.println("Начало выполнения программы");
CustomThread thread = new CustomThread();
thread.start();
Thread.sleep(3);
// пока наш основной поток спит, вспомогательный  CustomThread работает и выводит в коноль своё сообщение
thread.stopRunningThread();
System.out.println("Конец выполнения программы");
Netijede, konsolda şuňa meňzeş bir zady göreris:
Programmanyň ýerine ýetirilişiniň başlangyjy Sap käbir logikany ýerine ýetirýär ... Sap käbir logikany ýerine ýetirýär ... Sap käbir logikany ýerine ýetirýär ... Sap käbir logikany ýerine ýetirýär ... Sap käbir logikany ýerine ýetirýär ... The sapak käbir logikany ýerine ýetirýär ... Programmanyň ýerine ýetirilişiniň soňy!
Diýmek, sapagymyz işledi, konsola belli bir mukdarda habar çykardy we üstünlikli togtadyldy. Habar çykyşlarynyň sanynyň ylgaýyşdan üýtgäp biljekdigini belläp geçýärin, käwagt goşmaça sapak hatda hiç zat çykarmaýar. Üns berşim ýaly, bu esasy sapagyň uky wagtyna baglydyr, näçe uzyn bolsa, goşmaça sapagyň hiç zat çykarmazlygy şonça-da azdyr. 1ms uky wagty bilen habarlar hiç haçan çykmaýar diýen ýaly, ýöne 20m-e sazlasaňyz, hemişe diýen ýaly işleýär. Perhapshtimal, wagt gysga bolanda, sapagyň başlamaga we başlamaga wagty ýok we derrew togtadylýar. Ikinji ýol, içerki kesiş baýdagynyň (bu baýdak adaty ýagdaýda ýalňyş ) we bu baýdagy hakykata öwürýän beýleki kesmek () usulyny yzyna gaýtaryp berýän sapak obýektinde kesilen ( ) usulyny ulanmakdyr. baýdak dogry , sapak işini bes etmeli). Bir mysala seredeliň:
public class CustomThread extends Thread {

   @Override
   public void run() {
       {
           while (!Thread.interrupted()) {
               System.out.println("Поток выполняет некую логику...");
           }
           System.out.println("Поток остановлен!");
       }
   }
}
Esasy işlediň :
System.out.println("Начало выполнения программы");
Thread thread = new CustomThread();
thread.start();
Thread.sleep(3);
thread.interrupt();
System.out.println("Конец выполнения программы");
Executionerine ýetirişiň netijesi birinji ýagdaýdaky ýaly bolar, ýöne men bu çemeleşmäni has gowy görýärin: az kod ýazýarys we has taýýar, adaty işleýäris. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  12-7-nji bölümIne, şu gün durarys.Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  12 - 8-nji bölüm
Tapgyryň beýleki materiallary:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION