JavaRush /Java Blog /Random-TK /Iň gowy 50 Java sorag soraglary we jogaplary. 2-nji bölüm...

Iň gowy 50 Java sorag soraglary we jogaplary. 2-nji bölüm

Toparda çap edildi
Iň gowy 50 Java sorag soraglary we jogaplary. 1-nji bölüm Iň gowy 50 Java sorag soraglary we jogaplary.  2-nji bölüm

Kolleksiýalar

25. Java-daky kolleksiýalar näme diýmek?

Collectionygyndy, obýektleri saklamak we dolandyrmak üçin döredilen çarçuwadyr. Aşakdaky amallary ýerine ýetirmek üçin ulanylýar:
  • gözlemek;
  • sortlamak;
  • manipulýasiýa;
  • goşmak;
  • öçürmek.
Collectionygyndy çarçuwasy üçin ähli synplar we interfeýsler bukjada java.util.

26. Toplama çarçuwasynda haýsy synplar we interfeýsler bar?

Interfeýsler:
  • Collectionygyndy;
  • Sanaw;
  • Set;
  • Karta;
  • Sortirlenen toplum;
  • Saýlanan karta;
  • Nobat.
Sapaklar:
  • Sanawlar:
    1. ArrayList;
    2. LinkedList;
    3. Wektor (könelişen)
  • Sazlaýjylar:
    1. HashSet;
    2. LinkedHashSet;
    3. TreeSet.
  • Kartalar:
    1. HashMap
    2. TreeMap
    3. HashTable (köne)
    4. LinkedHashMap
  • Nobat
    1. Ileri tutulýan nobat.

27. Kolleksiýalarda tertiplemek we sargyt etmek nämäni aňladýar?

Sargyt:

Bu, ýygyndyda saklanýan zatlaryň kolleksiýa goşulan bahalara esaslanýandygyny aňladýar. Şeýlelik bilen, ýygyndydaky bahalary belli bir tertipde gaýtalap bileris. Başga sözler bilen aýdylanda, bu ýygyndy elementleriniň tertipleşdirilişine görä aýratyn tertibi bar diýmekdir. Has gowy düşünmek üçin sargyt edilmedik ýygyndy elementlerini tötänleýin tertipde saklaýar. Mysal üçin, Set.

Sortirlenen:

Bu, elementleriň toparynyň kolleksiýa elementiniň maglumatlaryna esaslanyp kolleksiýa bölünýändigini aňladýar. Onlyagny, ýygyndy diňe bir sargyt edilmän, eýsem elementleriň tertibi hem olaryň gymmatlyklaryna baglydyr. Başga element bahasy boýunça tertipleseňiz, bu sargyt üýtgäp biler.

28. Sanaw interfeýsi bilen haýsy ýygyndylar bar? Sanaw bilen nähili işleýärsiňiz?

Sahypadaky elementleriň bahalary olaryň indeksine esaslanýar - indeks boýunça sargyt edilýär. Elementleriň gaýtalanmagyna rugsat berilýär (ýagny kolleksiýa şol bir obýekti birnäçe gezek goşup bilersiňiz we gowy bolar).

ArrayList:

Iň köp ýaýran ýygyndy. Aslynda, dinamiki taýdan ulalýan ululykdaky massiwdir. Toplumyň ululygyny dolandyrmak işi ýygyndy bilen baglanyşykly. Köp halatlarda munuň ulanmalydygyna düşünmegimiz möhümdir. Aýratynlyklary:
  • çalt gözlemek we çalt indeks gözlemek;
  • ýygyndy indeks boýunça sargyt edilýär, ýöne tertipleşdirilmeýär;
  • RandomAccess interfeýsini amala aşyrýar;
  • ýuwaş-ýuwaşdan sanawyň ortasyna goşýar.
Mysal:
public class A {

   public static void main(String[] args) {
       ArrayList names = new ArrayList<>();
       names.add("John");
       names.add("John");
       names.add("Roman");
       names.add("Ivan");
   }

}
>> çykyş

   [John, John, Roman, Ivan]
Çykyş, bularyň gaýtalanýan elementlerdigini görkezýär. Recordedazga alnan tertipde görkezilýär. Başga näme okamaly? Hawa, köp maglumat bar, hatda JavaRush-dan gitmek hökman däl:

Baglanan sanaw:

Bu, her elementiň öňki we indiki elementlere baglanyşygy bolan ýygyndydyr. Bu baglanyşyklar bir elementden beýlekisine geçmäge mümkinçilik berýär. Bir element goşanyňyzda, öňki we indiki elementlere baglanyşyklar diňe üýtgeýär: Iň gowy 50 Java sorag soraglary we jogaplary.  2-nji bölüm
  • elementler biri-birine bagly, ýagny iki gezek baglanyşdyrylan sanaw ýerine ýetirilýär;
  • umumy iş tizligi ArrayList-den ep-esli pesdir;
  • massiwiň ortasyna köp sanly goýmak we pozmak üçin ajaýyp saýlaw;
  • “nobat” we “Deque” sanaw interfeýslerini ýerine ýetirýär we şonuň üçin işlemek usullary bar.
Mysal:
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("One");
linkedList.add("Two");
linkedList.add("Three");

29. Kartanyň ýygyndysy we ýerine ýetirilişi barada bize aýdyň?

Karta esasy gymmatly ýygyndydyr. Şol gymmata laýyk gelýän özboluşly açar we baha bar. Usullar açaryň özboluşlylygyny kesgitlemek üçin equals()hem ulanylýar .hashcode()

HashMap:

  • tertipleşdirilmedik ýa-da sargyt edilmedik;
  • sargyt we sortlamak möhüm däl bolsa ulanylýar;
  • null açary goldaýar.
Mysal:
public class CollectionExample {

   public static void main(String[] args) {
       HashMap positions = new HashMap<>();
       positions.put("junior", "Ivan");
       positions.put("middle", "Roman");
       positions.put("senior", "Vasily");
       positions.put("team lead", "Anton");
       positions.put("arthitect", "Andrew");
       positions.put("senior", "John");
       System.out.println(positions);
   }
}

// вывод в консоль
// {junior=Ivan, middle=Roman, senior=John, team lead=Anton, arthitect=Andrew}
Düwmeler elmydama üýtgeşik, şonuň üçin diňe bir ýaşuly ýazylýar.

LinkedHashMap:

  • goýmak tertibini saklaýar;
  • HashMap-dan haýal;
  • gaýtalamagyň “HashMap” -dan has çalt bolmagyna garaşylýar.
Mysal:
public class CollectionExample {

   public static void main(String[] args) {
       LinkedHashMap<String, String> positions = new LinkedHashMap<>();
       positions.put("junior", "Ivan");
       positions.put("middle", "Roman");
       positions.put("senior", "Vasily");
       positions.put("team lead", "Anton");
       positions.put("arthitect", "Andrew");
       positions.put("senior", "John");
       System.out.println(positions);
   }
}

// вывод в консоль
// {junior=Ivan, middle=Roman, senior=John, team lead=Anton, arthitect=Andrew}

TreeMap:

Triesazgylary açarlarynyň tebigy tertibi boýunça tertipleşdirýän, ýa-da karta döredilende konstruktorda berlen bolsa, deňeşdiriji ulanyp, kartany durmuşa geçirmek. Mysal:
  1. Deňeşdiriji bolmazdan

    public class CollectionExample {
    
       public static void main(String[] args) {
           TreeMap<Integer, String> positions = new TreeMap<>();
           positions.put(1, "Ivan");
           positions.put(3, "Roman");
           positions.put(2, "Vasily");
           positions.put(10, "Anton");
           positions.put(7, "Andrew");
           positions.put(1, "John");
           System.out.println(positions);
       }
    }
    
    // вывод в консоль
    // {1=John, 2=Vasily, 3=Roman, 7=Andrew, 10=Anton}
  2. Deňeşdiriji bilen

    public class CollectionExample {
    
       public static void main(String[] args) {
           //используем реализацию Strategy Pattern'a и добавим компаратор:
           TreeMap<Integer, String> positions = new TreeMap<>(Comparator.reverseOrder());
           positions.put(1, "Ivan");
           positions.put(3, "Roman");
           positions.put(2, "Vasily");
           positions.put(10, "Anton");
           positions.put(7, "Andrew");
           positions.put(1, "John");
           System.out.println(positions);
       }
    }
    
    // вывод в консоль
    // {10=Anton, 7=Andrew, 3=Roman, 2=Vasily, 1=John}
Asma tertipde tertipleşdirmegiň standart görnüşde ýerine ýetirilendigini görýäris, ýöne konstruktora deňeşdiriji goşmak arkaly üýtgedilip bilner. TreeMap bu ýerde gowy suratlandyrylýar .

30. Toplama ýygyndysy we ýerine ýetirilişi barada bize aýdyň?

Toplum özboluşly elementleriň toplumy we bu onuň esasy aýratynlygy. Setagny, Set şol bir elementleriň gaýtalanmagyna ýol bermeýär. Bu ýerde goşulan obýektleriň ýerine ýetirilen usulynyň bolmagy möhümdir equals .

HashSet:

  • tertipleşdirilmedik ýa-da sargyt edilmedik. Kapotyň aşagynda gymmaty üçin ýer eýesi bolan HashMap bar. Özüňiz görüň;)
  • obýekt goşmak üçin hashCode ulanýar;
  • Üýtgeşik zatlaryň bolmagy zerur bolsa, olaryň tertibi möhüm däl.
Mysal:
public class CollectionExample {

   public static void main(String[] args) {
       HashSet<String> positions = new HashSet<>();
       positions.add("junior");
       positions.add("junior");
       positions.add("middle");
       positions.add("senior");
       positions.add("team lead");
       positions.add("architect");
       System.out.println(positions);
   }
}

// вывод в консоль
// [senior, middle, team lead, architect, junior]
Bu ýerde iki gezek goşulan “kiçi” elementiň diňe bir ýagdaýda bardygyny görüp bilersiňiz. Sargyt goşanyňyzda bolsa birmeňzeş däl.

LinkedHashSet:

  • “HashSet” -iň sargyt edilen görnüşi;
  • ähli elementler üçin iki gezek baglanyşdyrylan sanawy goldaýar;
  • Gaýtalamaňyzda tertip gerek bolsa ulanyň.
Mysal:
public class CollectionExample {

   public static void main(String[] args) {
       LinkedHashSet<String> positions = new LinkedHashSet<>();
       positions.add("junior");
       positions.add("junior");
       positions.add("middle");
       positions.add("senior");
       positions.add("team lead");
       positions.add("architect");
       System.out.println(positions);
   }
}

// вывод в консоль
// [senior, middle, team lead, architect, junior]

TreeSet:

  • iki görnüşli ýygyndydan biri;
  • gyzyl-gara agaç gurluşyny ulanýar we elementleriň ýokarlan tertibinde bolmagyny üpjün edýär;
  • Kapotyň aşagynda, gymmatlyklara ýazylan TreeMap. “TreeSet” -iň elementleri bolsa “TreeMap” -yň açarydyr (şeýle hem seret;).
Mysal:
public class CollectionExample {

   public static void main(String[] args) {
       TreeSet<String> positions = new TreeSet<>();
       positions.add("junior");
       positions.add("junior");
       positions.add("middle");
       positions.add("senior");
       positions.add("team lead");
       positions.add("architect");
       System.out.println(positions);
   }
}

// вывод в консоль
// [architect, junior, middle, senior, team lead]

Kadadan çykmalar

31. Kadadan çykma näme?

Kadadan çykma, iş wagtynda ýüze çykyp bilýän mesele. Bu käbir sebäplere görä ýüze çykýan adatdan daşary ýagdaý. Kadadan çykma miras diagrammasy şuňa meňzeýär (muny ýatdan bilmeli;)): Iň gowy 50 Java sorag soraglary we jogaplary.  2-nji bölümDiagramma, umuman aýdylanda, ähli kadadan çykmalar iki topara bölünýändigini görkezýär - kadadan çykmalar we ýalňyşlyklar. Roralňyşlyk - JVM-ler ýalňyşlary görkezmek üçin ulanylýar, şondan soň programma manysy ýok. Mysal üçin, stakanyň doludygyny we programmanyň indi işläp bilmejekdigini aýdýan StackOverFlowError. Kadadan çykma - kodda programma taýdan döredilen kadadan çykmalar. Dürli kadadan çykmalar bar, barlanylýar we barlanmaýar, ýöne esasy zat olaryň barlygy, tutulyp bilner we programma işlemegini dowam etdirýär. Kadadan çykmalar, öz gezeginde, RuntimeException-dan we Kadadan çykmagyň beýleki nesillerinden miras galanlara bölünýär. Bu mesele boýunça ýeterlik maglumat bar. Aşakda barlanylan / barlanmadyk kadadan çykmalar barada gürleşeris.

32. JVM kadadan çykmalary nädip çözýär?

Bu nähili işleýär? Bir kadadan çykma dessine, iş wagty kadadan çykma obýektini döredýär (ExcObj diýilýär). Iş üçin zerur bolan ähli maglumatlary - zyňylan kadadan çykma we bolup geçen ýeri saklaýar. Dörediş ExcObjwe iş wagtyna geçirmek "kadadan çykma" -dan başga zat däl. ExcObjkadadan çykma ýerine barmak üçin ulanyp boljak usullary öz içine alýar. Bu usullar toplumyna “Call Stack” diýilýär. Ondan soň, iş wagty ulgamy, kadadan çykmalarymyzy dolandyryp bilýän “Call Stack” usulyny gözleýär. Eger degişli işleýjini tapsa, ýagny kadadan çykma görnüşi işleýjiniň görnüşine gabat gelse, hemme zat gowy. Eger tapmasa, iş wagty hemme zady jogap taýýarlaýan we çykýan adaty kadadan çykaryjylara geçirýär. Görnüşi ýaly:
/**
* Пример, в котором показываются две опции — когда находится обработчик для исключения и когда нет.
*/
class ThrowerExceptionExample {

   public static void main(String[] args) throws IllegalAccessException {

       ThrowerExceptionExample example = new ThrowerExceptionExample();

       System.out.println(example.populateString());
   }

   /**
    * Здесь происходит перехват одного из возможных исключений — {@link IOException}.
    * А вот второй будет пробрасываться дальше вверх по вызову.
    */
   private String populateString() throws IllegalAccessException {
       try {
           return randomThrower();
       } catch (IOException e) {
           return "Caught IOException";
       }
   }

   /**
    * Здесь две опции: or бросается {@link IOException} or {@link IllegalAccessException}.
    * Выбирается случайным образом.
    */
   private String randomThrower() throws IOException, IllegalAccessException {
       if (new Random().nextBoolean()) {
           throw new IOException();
       } else {
           throw new IllegalAccessException();
       }
   }
}
Biziň ýagdaýymyzda, CallStack shematiki görnüşde bolar:

randomThrower() => populateString() => main(String[] args)
Iki wariant bar: biri ýa-da beýleki kadadan çykma tötänleýin zyňylar. IOException üçin hemme zat gowy, eger döredilen bolsa, işiň netijesi şeýle bolar : "Caught IOException". Emma işleýjisi bolmadyk ikinji kadadan çykma bar bolsa, programma aşakdaky çykyş bilen bes ediler:

Exception in thread "main" java.lang.IllegalAccessException
  at ThrowerExceptionExample.randomThrower(CollectionExample.java:38)
  at ThrowerExceptionExample.populateString(CollectionExample.java:24)
  at ThrowerExceptionExample.main(CollectionExample.java:15)

33. Programmistler kadadan çykmalary nädip çözýärler?

Aboveokardaky soraglarda kadadan çykmalar bilen işlemek üçin eýýäm käbir açar sözleri ulanýardyk, indi olar hakda has jikme-jik gürleşmeli. Açar sözler näme?
  • synap görüň
  • tutmak
  • zyň
  • zyňýar
  • ahyrynda
Tutmak, zyňmak we zyňmak diňe java.lang.Throwable bilen ulanylyp bilinjekdigini bellemelidiris. Bu başga görnüşler bilen işlemez. Indi synap görmek, tutmak we ahyrynda maslahatlaşarys.
  • try-catch-finallykadadan çykmany dogry tutmaga we dolandyrmaga mümkinçilik berýän gurluşdyr.
  • try- diňe bir gezek bolup biler, şol ýerde logika bolýar;
  • catch- haýsydyr bir kadadan çykma alýan blok, olaryň köpüsi bolup biler. Mysal üçin, synanyşyk bloky biri-biri bilen hiç hili baglanyşygy bolmadyk birnäçe kadadan çykmany atar;
  • finally- "ahyrsoňy" bu blok. Bu, synanyşykda näme edilýändigine garamazdan, islendik ýagdaýda ýerine ýetiriljek blok.
Görnüşi ýaly:
try {
   // сюда передают тот code, который может вызвать исключение.
} catch (IOException e) {
   // первый catch блок, который принимает IOException и все его подтипы(потомки).
   // Например, нет file при чтении, выпадает FileNotFoundException, и мы уже соответствующе
   // обрабатываем это.
} catch (IllegalAccessException e) {
   // если нужно, можно добавить больше одного catch блока, в этом нет проблем.
} catch (OneException | TwoException e) {
   // можно даже объединять несколько в один блок
} catch (Throwable t) {
   // а можно сказать, что мы принимаем ВСЁ))))
} finally {
   // этот блок может быть, а может и не быть.
   // и он точно выполнится.
}
Mysalyň düşündirişini üns bilen okaň we hemme zat düşnükli bolar)

34. Java-a zyňyň we zyňyň

zyň

throwaç-açan täze kadadan çykma zerur bolanda ulanylýar. Customörite kadadan çykmalar döretmek we zyňmak üçin ulanylýar. Mysal üçin, tassyklamak bilen baglanyşykly kadadan çykmalar. Adatça, tassyklamak üçin miras alýarlar RuntimeException. Mysal:
// пример пробрасывания исключения
throw new RuntimeException("because I can :D");
Bu gurluşygyň diňe miras galan bir zat bilen ulanylmagy möhümdir Throwable. Thisagny, muny aýdyp bilmersiňiz:
throw new String("How тебе такое, Илон Маск?");
Ondan soň, sapagyň işi bes edilýär we ony gaýtadan işläp bilýän işleýji gözlemek başlaýar. Tapylmasa, ony çagyran usula geçýär we şeýlelik bilen gözleg degişli işleýjini tapýança ýa-da programmany işleýänçä gözleg jaňlarynyň hataryna çykar. Geliň seredeliň:
// Пример, который демонстрирует работу throw
class ThrowExample {

   void willThrow() throws IOException {
       throw new IOException("Because I Can!");
   }

   void doSomething() {
       System.out.println("Doing something");
       try {
           willThrow();
       } catch (IOException e) {
           System.out.println("IOException was successfully handled.");
       }
   }

   public static void main(String args[]) {
       ThrowExample throwExample = new ThrowExample();
       throwExample.doSomething();
   }
}
Programmany işledýän bolsak, aşakdaky netijäni alarys:

Doing something
IOException was successfully handled.

zyňýar

throws- usulyň bir ýa-da birnäçe kadadan çykmany taşlap bilýän mehanizmi. Olary dykgat bilen bölýärler. Onuň nähili aňsat we ýönekeýdigini göreliň:
private Object willThrow() throws RuntimeException, IOException, FileNotFoundException
Mundan başga-da, barlanylýan we barlanmadyk kadadan çykmalar bolup biljekdigini bellemek möhümdir. Elbetde, barlanmadyk kadadan çykmalar goşulyp bilinmez throws, ýöne edep-terbiýe başgaça aýdýar. Bular barlanylýan bolsa, olary döredýän usuldan peýdalanyp, ony nädip gaýtadan işlemeli. Iki wariant bar:
  1. try-catchDegişli we ýokardaky miras kadasy bilen ýazyň .
  2. throwsBaşga biriniň bu meseläni başdan geçirmegi üçin edil şol bir görnüşde ulanyň : D.

35. Java-da barlanan we barlanmadyk kadadan çykmalar

Java-da kadadan çykmagyň iki görnüşi bar - barlanýar we barlanmaýar.

Barlanylan kadadan çykmalar:

Bular düzüliş wagtynda barlanylýan kadadan çykmalar. Usuldaky käbir kod kadadan çykma wagtynda barlanylan kadadan çykma bolsa, usul ony ulanmaly ýa-da try-catchhasam öňe sürmeli. Mysal üçin, "/users/romankh3/image.png" ýolundan şekili okaýan, ony täzeleýär. haýsydyr bir usul bilen (biziň üçin bu möhüm däl) we ony yzyna tygşytlaýar.
class CheckedImageExample {
   public static void main(String[] args) {
       File imageFile = new File("/users/romankh3/image.png");
       BufferedImage image = ImageIO.read(imageFile);
       updateAndSaveImage(image, imageFile);
   }

   private static void updateAndSaveImage(BufferedImage image, File imageFile) {
       ImageIO.write(image, "png", imageFile);
   }
}
Şeýle kod düzülmez, sebäbi statiki usullar IOException ImageIO.read()atýar ImageIO.write(), barlanýar we şoňa görä işlenmeli. Bu ýerde ýokarda ara alyp maslahatlaşan iki wariantymyz bar: ulanyň try-catchýa-da öňe sürüň. Has gowy assimilýasiýa üçin muny we şuny ederis. .Agny, updateAndSaveony diňe usul bilen ugradarys we soňra esasy usulda ulanarys try-catch:
class CheckedImageExample {
   public static void main(String[] args) {
       File imageFile = new File("/users/romankh3/image.png");
       try {
           BufferedImage image = ImageIO.read(imageFile);
           updateAndSaveImage(image, imageFile);
       } catch (IOException e) {
           e.printStackTrace();
       }
   }

   private static void updateAndSaveImage(BufferedImage image, File imageFile) throws IOException {
       ImageIO.write(image, "png", imageFile);
   }
}

Barlanmadyk kadadan çykmalar:

Bular düzme tapgyrynda barlanmaýan kadadan çykmalar. .Agny, bir usul “RuntimeException” döredip biler, ýöne düzüji size nädip işlemelidigiňizi ýatlatmaz. Aşakda görkezilişi ýaly, RuntimeException-dan miras galan ähli zat bar we Error barlanmady. Iň gowy 50 Java sorag soraglary we jogaplary.  2-nji bölümAşakdaky Java programmasyna serediň. Kod gowy düzülýär, ýöne işledilende kadadan çykma bolýar ArrayIndexOutOfBoundsException. Düzediji, düzülmäge mümkinçilik berýär, sebäbi ArrayIndexOutOfBoundsExceptionbarlanmadyk kadadan çykma. Bir massiw bilen umumy ýagdaý, bolup biler:
class CheckedImageExample {
   public static void main(String[] args) {
       int[] array = new int[3];
       array[5] = 12;
   }
}
Netije şeýle bolar:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
  at main(CheckedImageExample.java:12)
Theeri gelende aýtsak, Java-da hiç kimiň gysga at bermeýändigini eýýäm gördüňizmi? Uly bolsa, şonça gowy. Ol, “Bahar çarçuwasy” bu işde gaty üstünlik gazandy: diňe BeanFactoryPostProcessor synpyny alyň)))

36. Synag çeşmeleri näme?

Bu, ähli çeşmeleri dogry ýapmaly mehanizmdir. Näme-de bolsa düşnükli däl, şeýlemi?) Ilki bilen çeşme näme ... Resurs obýekt, ony işledeniňizden soň ýapmaly, ýagny jaň ediň close(). Çeşme, interfeýsi amala aşyrýan ähli obýektlere AutoClosabledegişlidir Closeable. InputStreamHemme zadyň çeşme bolup OutpuStream, dogry we üstünlikli çykarylmalydygyna düşünmek möhümdir . try-with-resourceGurluşy ulanmagyň hut şu sebäbidir . Görnüşi:
private void unzipFile(File zipFile) throws IOException {
   try(ZipInputStream zipOutputStream = new ZipInputStream(new FileInputStream(zipFile))) {
       ZipEntry zipEntry = zipOutputStream.getNextEntry();
       while (zipEntry != null) {

       }
   }
}

private void saveZipEntry(ZipEntry zipEntry) {
   // логика сохранения
}
Bu mysalda, çeşme ZipInputStream, işläniňizden soň ony ýapmaly bolarsyňyz. Usuly çagyrmak hakda pikir etmezlik üçin close(), bu üýtgeýjini mysalda görkezilişi ýaly synag blokynda kesgitleýäris we bu blokyň içinde zerur zatlary edýäris. Mysal näme edýär? Zip arhiwini açar. Munuň üçin 'om' ulanmaly InputStream. Birden köp üýtgeýjini kesgitläp bilersiňiz, olar nokatly nokat bilen bölünýär. Mesele näme? Aöne bir blok ulanyp bilersiňiz finally, aýdyp bilersiňiz. Ine, şu çemeleşmedäki kynçylyklary jikme-jik beýan edýän makala . Şeýle hem bu dizaýny ulanmagy äsgermezlik eden adamyň başyna gelip biljek şowsuzlyklaryň sanawyny beýan edýär. Okamagy maslahat berýärin;) Iň soňky bölüminde Köp okamak mowzugynda soraglar / jogaplar bar. GitHub profilim
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION