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. 6-njy bölüm

Toparda çap edildi
Salam, Dünýä! Ösmegi dowam etdirmek islendik dörediji üçin gaty möhümdir. Galyberse-de, dursaňyz, talap edilmezlik we bazardan doly uçmak howpy bar: IT dünýäsi yzygiderli ösýär we öňe barýar, siz hem onuň bilen hereket etmeli. Evenöne şol bir wagtyň özünde-de, klassikler (nusgawy temalar) hakda ýatdan çykarmazlyk üçin diňe täze we täze tehnologiýalara ünsi jemläp bolmaz. Bu gün Java dörediji üçin “klassiki” mowzuklardaky soraglara derňewimi dowam etdirmek isleýärin. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  6-njy bölümJogaplarymyň ahyrky ygtyýar däldigini belläp geçýärin - ine şu soraglara dogry jogaplary görşüm ýaly, käbirleri bilen ylalaşman bilersiňiz. Bu gaty adaty bir zat, teswirlerde öz pikiriňizi paýlaşyp bilersiňiz. Derňewiň böleklerine baglanyşyklar makalanyň ahyrynda.Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  6-njy bölüm

Kitaphanalar we ülňüler

52. Gibernate näme? JPA bilen Gibernate arasynda näme tapawut bar?

Bu soraga jogap bermek üçin ilki bilen JPA- nyň nämedigine düşünmeli . JPA , ýönekeý Java obýektleriniň obýekt-baglanyşyk kartasyny suratlandyrýan we şular ýaly obýektleri saklamak, almak we dolandyrmak üçin API üpjün edýän spesifikasiýa. .Agny, ýatda saklaýşymyz ýaly, baglanyşyk bazalary (DB) köp baglanyşykly tablisalar görnüşinde görkezilýär. JPA obýektleriň baglanyşyk bazalary bilen nähili täsirleşip biljekdigini giňden kabul edilen standartdyr. Görşüňiz ýaly, JPA abstrakt we maddy däl bir zat. Bu pikiriň özi, çemeleşme ýaly. Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  6-njy bölümŞol bir wagtyň özünde, Gibernate JPA paradigmalaryny durmuşa geçirýän aýratyn kitaphanadyr . Thisagny, bu kitaphananyň kömegi bilen maglumatlar bazasyndan (Entity) maglumatlary görkezýän obýektleriň üsti bilen baglanyşyk bazasy bilen işläp bilersiňiz. Olaryň aýdyşy ýaly, bu kitaphana JPA- nyň ideallaryna gaty ýakyn we belki şonuň üçinem meşhur boldy. Düşünşiňiz ýaly, ulanmagyň meşhurlygy mundan beýläk ösüş we gowulaşmak üçin gowy argumentdir. Mundan başga-da, ýygy-ýygydan ulanmagyň aňyrsynda bu gural bilen baglanyşykly mümkin we mümkin bolmadyk soraglary eýýäm çözen ägirt uly jemgyýet bar. Ine, bu tehnologiýanyň ähli garaňky burçlaryny jikme-jik öwrenýän kitabyň mysaly . Hibagny, Gibernate mümkin boldugyça öwrenildi we netijede ygtybarly. Aslynda, JPA-nyň Bahar tarapynda iň oňat durmuşa geçirilmegi, adatça kapotyň aşagynda Gibernate ulanmagy hiç zat üçin däl.

53. Kaskad näme? Gibernatda nähili ulanylýar?

Öň hem aýdyşym ýaly, Gibernate aragatnaşygy subýektler diýilýän maglumatlar obýektleri arkaly amala aşyrylýar . Bu guramalar maglumatlar bazasyndaky käbir aýratyn tablisalary görkezýär we ýadyňyzda bolsa, Java synplarynda beýleki synplara salgylanmalar bolup biler. Bu gatnaşyklar maglumatlar bazasynda öz beýanyny tapdy. Maglumatlar bazasynda, adatça, bular daşary ýurt açarlary (OneToOne, OneToMany, ManyToOne üçin) ýa-da aralyk tablisalar (ManyToMany üçin). Bu makalada subýektleriň arasyndaky gatnaşyklar barada has giňişleýin maglumat alyp bilersiňiz . Haçan-da guramaňyzyň beýleki baglanyşykly guramalar bilen baglanyşyklary bar bolsa, baglanyşygyň görnüşini görkezmek üçin düşündirişler şu baglanyşyklaryň üstünde goýulýar: @OneToOne, @OneToMany, @ManyToOne, @ManyToMane, parametrlerinde emlägiň bahasyny kesgitläp bilersiňiz - kaskad - the bu baglanyşyk üçin kaskadyň görnüşi. JPA-nyň subýektler bilen aragatnaşyk saklamagyň aýratyn usullary bar (dowam et, tygşytla, birleşdir ...) . Kaskad görnüşleri, bu usullar maksatly guramada ulanylanda baglanyşykly maglumatlaryň özüni alyp barşyny görkezmek üçin takyk ulanylýar. Onda, kaskad strategiýalary (kaskad görnüşleri) haýsylar? JPA standarty kaskad görnüşiniň alty görnüşini ulanmagy göz öňünde tutýar:
  • PERSIST - tygşytlamak amallary kaskadda ( tygşytlamak () we dowam etmek () usullary üçin) bolar . Otheragny, beýleki guramalar bilen baglanyşykly bir guramany halas etsek, olar hem maglumatlar bazasynda saklanýar (eger olar eýýäm ýok bolsa)

  • MERGE - täzeleniş amallary kaskadda bolar ( birleşdirmek () usuly üçin )

  • AEMYRMAK - aýyrmak amallary kaskadda ( aýyrmak () usulynda ) bolup geçýär

  • HEMMESI - birbada üç sany kaskad amalyny öz içine alýar - PERSIST - MERGE - AEMYRMAK

JPA- da dowamly birlik düşünjesi bar - häzirki sessiýa (birikme) tarapyndan dolandyrylýan maglumatlar bazasyndaky maglumatlar bilen baglanyşykly gurama . Üýtgetseňiz, ýöne maglumatlar bazasyndaky üýtgeşmeleri ýatda saklamasaňyz, maglumatlar bazasyndaky maglumatlar henizem üýtgediler.
  • DETACH - baglanyşykly guramalar sessiýa ( detach () usuly) bilen dolandyrylmaz . Changeagny, üýtgänlerinde maglumatlar bazasyndaky maglumatlarda awtomatiki üýtgeşiklik bolmaz - olar tutanýerlilik ýagdaýyndan aýratynlyga (JPA tarapyndan dolandyrylmaýan bir gurama) geçirilýär.

  • REFRESH - her gezek bir maglumat bazasyndan maglumatlar täzelenende ( täzelen () - aýry-aýry obýektleri täzeleýär), degişli guramalar hem edil şonuň ýaly täzelenýär. Mysal üçin, maglumatlar bazasyndan alnan maglumatlary nädip üýtgetdiňiz we asyl bahalaryny yzyna gaýtarmak islediňiz. Bu ýagdaýda bu amal size peýdaly bolar.

Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  6-njy bölümGibernate bu adaty kaskad amallarynyň hemmesini goldaýar, şeýle hem üçüsini hödürleýär:
  • Gaýtarmak - Birden köp maglumat çeşmesi bolanda ulanylýar we maglumatlaryň sinhronlanmagyny isleýäris (Gibernate usuly - köpeltmek). Entirehli guramalaryň nesillerinde hiç hili kynçylyk ýüze çykmazlygy üçin kesgitleýjileri (id) bolmaly (şol bir guramanyň dürli maglumat bazalary üçin dürli ID-leri bolmazlygy üçin);

  • SAVE_UPDATE - kaskad saklamak / pozmak (Gibernate usuly üçin - saveOrUpdate )

  • LOKK - DETACHED -iň ters operasiýasy : ol aýry-aýry guramany tutanýerlilik ýagdaýyna geçirýär . edara häzirki sessiýa bilen ýene yzarlanar

Kaskad görnüşi saýlanmasa, haýsydyr bir guramanyň işi onuň bilen baglanyşykly beýleki guramalara täsir edip bilmez.

54. Bir kärhana synpy abstrakt bolup bilermi?

2.1- nji bölümdäki JPA spesifikasiýasynda “ Entity Class ” -da bir setir bar: “ Abstrakt we anyk synplar hem subýekt bolup biler .” Şonuň üçin jogap hawa, abstrakt synp bir birlik bolup biler we @Entity bilen düşündirilip bilner.

55. Edaranyň dolandyryjysy näme? Ol näme üçin jogapkär?

Ilki bilen, EntityManager-iň JPA-nyň esasy komponentlerinden biri bolup , subýektleri maglumatlar bazasy bilen täsirleşmek üçin ulanylýar. Umuman aýdanyňda, edara bilen maglumat bazasynyň arasyndaky täsirleşme usullaryny çagyrýar (dowam etdiriň, birleşdiriň, aýyryň, aýryň) ... alsoöne bu komponentiň, adatça, tutuş programma üçin bir däldigini belläp geçerin: köplenç ýeňil we köplenç aýrylýar we EntityManagerFactory ulanyp täze döredilýär . JDBC bilen parallel çyzsak , EntityManagerFactory DataSource-yň meňzeşi boljak bolsa, EntityManager hem öz gezeginde Connection- yň meňzeşi bolar . Öň baglanyşyk bilen dolandyrylýan bir gurama hökmünde tutanýerlilik hakda aýdypdym . Şeýlelik bilen: bu gurama häzirki baglanyşyk we amallary açmak / ýapmak üçin jogapkär bolan TransactionManager bilen ýakyndan baglanyşykly bolan EntityManager tarapyndan takyk dolandyrylýar . Mundan başga-da aşakdaky suratda bir guramanyň ýaşaýyş siklini görüp bilersiňiz: EntityManager Dolandyryş tapgyrynda bolanda (bu wagt dowam edýär, sebäbi EntityManager bilen baglanyşygy bar). .Agny, indi täze däl we entek aýrylmady. Haýsydyr bir gurama täze ýa-da aýrylanda, ol hem aýrylýar diýip bileris, sebäbi EntityManager tarapyndan dolandyrylmaýar. EntityManager üçin dürli strategiýalar bar. .Agny, tutuş programma üçin ýekeje “EntityManager” bolup biler ýa-da her baglanyşyk üçin her gezek täze döredilip bilner. Bahary ulanýan bolsaňyz, “EntityManager” -iň döredilmegi / öçürilmegi kapotyň aşagynda awtomatiki dolandyrylýar (ýöne bu ony özüňiz düzüp bilmejekdigiňizi aňlatmaýar ^^). Bir ýa-da birnäçe EntityManagers- iň tutanýerlilik kontekstini emele getirýändigini aýtmak gerek . Dowamlylyk konteksti , maglumatlar bazasyndaky şuňa meňzeş guramalar bilen sinhronlaşdyrylan gurşawdyr (aýdyşym ýaly, bu diňe dowamly guramalar üçin işleýär). JPA- ny has içgin öwrenseňiz (gaty maslahat berýärin), bu düşünjelere ýygy-ýygydan duşarsyňyz.Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 6 - 5

56. Assert synpy näme? Näme üçin ulanmaly?

JPA -da beýle synp hakda eşitmedim, şonuň üçin koduň birligi barlamak üçin ulanylýan kitaphananyň JUnit synpyna degişlidigini çaklaýaryn . Bu kitaphananyň synpy, Assert , kod ýerine ýetirilişiniň netijelerini barlamak üçin ulanylýar ( tassyklamak , belli bir ýerde belli bir döwletiň / maglumatyňyzyň bardygyny görkezýär). Mysal üçin, pişigi döretmeli usuly synap görýärsiňiz. Bir usuly işledýärsiňiz we birneme netije alýarsyňyz:
Cat resultOfTest = createCat();
Itöne onuň dogry döredilendigine göz ýetirmeli, şeýlemi? Şol sebäpden, createCat () usulyndan alnan pişikden garaşýan parametrleriňiz bilen el bilen belli bir pişigi - garaşylýanCat döredipdiňiz . Ondan soň, netijeleri barlamak üçin Assert synpyny ulanýarsyňyz :
Assert.assertEquals(resultOfTest, expectedCat);
Pişikler başga bolsa, garaşylýan netijeleriň birleşmeýändigini aýdýan AssertionError kadasy atylar. Assert synpynda garaşylýan netijeleri barlamak meseleleriniň köpüsini öz içine alýan dürli usullar bar. Ine, olaryň käbiri:
  • assertTrue (<boolean>) - argument hökmünde alnan garaşylýan baha dogry bolmaly

  • assertFalse (<boolean>) - argument hökmünde alnan garaşylýan baha ýalňyş bolmaly

  • assertNotEquals (<object1>, <object2>) - argument hökmünde alnan obýektler deň ( ýalan ) ulanylanda tapawutlanmalydyr.

  • assertThrows (<ClassNameOfException> .class, <exceptionObject>) - ikinji argumentiň birinji argumentde görkezilen synpdan başga bolmagyna garaşylýar (meselem, adatça, ikinji argumentiň ýerine, şeýle usul diýilýär) zerur görnüşden başga zatlary taşlaň)

Setir

57. Java-da setiri häsiýetlendiriň

Setir Java-da adaty synp bolup, setir bahalaryny (nyşanlaryň yzygiderliligi) saklamak we dolandyrmak üçin jogapkärdir, üýtgewsiz synpdyr ( üýtgewsiz hakda öň ýazypdym ), ýagny. Bu synpyň obýektleriniň maglumatlary döredilenden soň üýtgedilip bilinmez. “StringBuilder” we “StringBuffer” synplarynyň iki meňzeş synpdygyny, ýeke-täk tapawudynyň biri köp sapakly gurşawda (StringBuffer) ulanmak üçin niýetlenendigini bellemek isleýärin . Bu synplar Stringe meňzeýär , ýöne ondan tapawutlylykda üýtgeýär . .Agny, bir gezek döredilen obýektler, täze obýekt döretmezden, görkezýän setirini üýtgetmäge mümkinçilik berýär. Aslynda, usullar adaty String usullaryndan tapawutlanýar we setiri üýtgetmegiň zerurlyklaryny kanagatlandyrmaga gönükdirilendir (olaryň gurluşykçy diýmegi hiç zat däl). String , StringBuffer we StringBuilder hakda has giňişleýin okaň .

58. Setir obýektini döretmegiň dürli ýollary haýsylar? Ol nirede döredildi?

Setir döretmegiň iň ýaýran usuly, goşa ýaýyň içinde zerur bahany kesgitlemekdir:
String str = "Hello World!";
Şeýle hem muny gönüden-göni täze arkaly edip bilersiňiz :
String str = new String("Hello World!");
Nyşanlaryň toplumyndan başlap setir döredip bilersiňiz:
char[] charArr = {'H','e','l','l','o',' ', 'W','o','r','l','d','!'};
String str = new String(charArr);
Käbir obýektde işleýän toString usulynyň netijesinde :
String str = someObject.toString();
Beýleki usullaryň netijesi ýaly, setir görnüşini görkezýär. Mysal üçin:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str =  reader.readLine();
Düşünşiňiz ýaly, setir döretmegiň gaty köp usuly bolup biler. Setir obýekti döredilende , aşakdaky soraglaryň birinde has jikme-jik gürleşip boljak setir howuzda saklanýar .

59. Java-da iki setiri nädip deňeşdirmeli we olary nädip tertipleşdirmeli?

Java-daky bahalary deňeşdirmek üçin goşa deň belgi == ulanylýar . Int ýaly käbir ýönekeý bahalary deňeşdirmek zerur bolsa , ulanardyk. Emma bu usul doly hukukly zatlary deňeşdirmek üçin ulanylmaýar. Bu ýagdaýda diňe salgylanmalary deňeşdirmek bolar - şol bir obýekti görkezýändiklerine ýa-da ýokdugyna garamazdan. Twoagny, iki obýekti içerki meýdanlaryň birmeňzeş bahalary bilen deňeşdireniňde, == bilen deňeşdirmek netijäni ýalňyş berer : obýektleriň birmeňzeş meýdanlaryna garamazdan, obýektleriň özi dürli ýat öýjüklerini eýeleýär. Setir synpynyň obýektleri , aldawly ýönekeýligine garamazdan, henizem zatlar. == arkaly deňeşdirmek hem olar üçin ulanylmaýar (hatda simli howuzyň bardygyna garamazdan). Bu ýerde Obýekt synpynyň adaty usuly güýje girýär - dogry işlemegi üçin synpda ýok edilmeli deňdir (başgaça, adaty ýagdaýda == ulanmagy deňeşdirýär ). String synpynda ýokaşdyryldy , şonuň üçin ony alyp ulanýarys:
String firstStr = "Hello World!";
String secondStr = "Hello World!";
boolean isEquals = firstStr.equals(secondStr);
Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 6 - 6Gabat gelýän deňeşdirmeler hakda gürleşdik, indi deňeşdirmeleri tertipleşdirmäge seredeliň. Galyberse-de, haýsy prinsip boýunça saýlamalydygymyzy bilmeli. Munuň üçin adaty tertipli toplum - TreeSet ulanyp bilersiňiz . Java-daky dürli ýygyndylar barada has giňişleýin maglumaty şu makalada okap bilersiňiz . Bu sanaw gyzyl-gara agaç algoritmine esaslanýar we toplumy görkezilen sortlaşdyryş ýörelgesine laýyklykda tertipleýär. Öň hem aýdyşym ýaly, belli bir görnüşdäki zatlary nädip tertipleşdirmelidigine düşünmeli. Deňeşdirmek , deňeşdirmek usulyny kesgitlemek üçin ulanylýar . Adatça bulary tertiplemek isleýän sapaklaryňyz üçin durmuşa geçirmeli, ýöne String ýagdaýynda olar eýýäm ýerine ýetirilýär. Şonuň üçin “TreeSet” -e zerur hatarlary goşýarys we olary tertipleşdirer:
TreeSet<String> sortedSet = new TreeSet<>();
sortedSet.add("B");
sortedSet.add("C");
sortedSet.add("A");
sortedSet.forEach(System.out::println);
Konsol çykyşy:
A B C.

60. Setiri nyşana öwürmek üçin algoritm beriň. Degişli kod ýazyň

Öň hem aýdyşym ýaly, String synpynyň obýektlerinde köp dürli peýdaly usullar bar. Bularyň biri “CharArray” . Bu usul bir setiri simwol massiwine öwürýär:
String str = "Hello world";
char[] charArr = str.toCharArray();
Ondan soň indeks boýunça jaň edip boljak bir topar nyşan bar:
char firstChar = charArr[0]; // H

61. Setiri baýt massiwine we arka nädip öwürmeli? Degişli kod ýazyň

ToCharArray usulyna meňzeşlikde , String synpynda setiň baýt massiwini yzyna getirýän getBytes usuly bar :
String str = "Hello world";
byte[] byteArr = str.getBytes();
byte firstChar = byteArr[6]; // 119
Derňewiň şu günki bölümi logiki netijä geldi. Üns bereniňiz üçin sag boluň!Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 6 - 7
Tapgyryň beýleki materiallary:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION