KodeGym/Blog Jawa/Acak/Njelajah pitakonan lan jawaban saka wawancara proyek kang...
John Squirrels
tingkat
San Francisco

Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa. Bagian 6

Diterbitake ing grup
Hello, World! Penting kanggo pangembang supaya ora mandheg tuwuh. Sawise kabeh, yen sampeyan mandheg, sampeyan duwe resiko bakal ilang saka panjaluk lan tiba kabeh metu saka pasar kerja. Donya IT terus berkembang lan maju - sampeyan kudu maju. Nanging ing wektu sing padha, sampeyan ora bisa mung muter ing teknologi paling anyar supaya sampeyan ora lali "klasik" (topik pangembangan piranti lunak klasik). Dina iki aku arep nerusake diskusi babagan "topik klasik" kanggo pangembang Java. Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 6 - 1Aku bakal nuduhake yen jawabanku dudu tembung pungkasan. Iki mung minangka panemuku babagan jawaban sing bener - sampeyan bisa uga ora setuju karo sawetara. Iku pancene apik, dadi bebas nuduhake pendapat sampeyan ing komentar. Sampeyan bisa nemokake pranala menyang bagean review sadurunge ing pungkasan artikel. Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 6 - 2

Pustaka lan standar

52. Apa Hibernate? Apa bedane JPA lan Hibernate?

Kanggo njawab pitakonan iki, aku kudu ngerti apa JPA. Iki minangka spesifikasi sing njlèntrèhaké pemetaan obyek-relasional saka obyek Jawa sing prasaja lan nyedhiyakake API kanggo nyimpen, njupuk, lan ngapusi obyek kasebut. Tegese, basis data relasional (DB) diwakili minangka sakumpulan tabel sing saling gegandhengan. Lan JPA minangka standar sing diadopsi sacara luas sing nggambarake carane obyek bisa sesambungan karo database relasional. Kaya sing sampeyan ngerteni, JPA minangka sesuatu sing abstrak lan ora nyata. Iku kaya gagasan dhewe, pendekatan. Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 6 - 3Nanging Hibernate minangka perpustakaan khusus sing ngetrapake paradigma JPA. Ing urutan tembung, sampeyan bisa nggunakake perpustakaan iki kanggo nggarap database hubungan liwat obyek sing makili data ing database (Entity). Perpustakaan iki diarani cedhak banget karo cita-cita JPA. Mulane bisa dadi populer. Kaya sing sampeyan bayangake, popularitas kasebut mbenerake pangembangan lan perbaikan luwih lanjut. Kajaba iku, panggunaan sing nyebar asale saka komunitas sing wis njelajah kabeh pitakonan sing bisa ditindakake lan ora mungkin sing ana gandhengane karo alat iki. Hibernate wis ditliti kanthi tliti, lan ternyata bisa dipercaya. Ana alesan sing apik, sanajan implementasi JPA sing cocog ing Spring umume nggunakake Hibernate ing sangisore hood.

53. Apa sing diarani cascading? Kepiye cara digunakake ing Hibernate?

Kaya sing dakkandhakake sadurunge, komunikasi ing Hibernate dumadi liwat obyek data sing diarani entitas. Entitas iki makili tabel tartamtu ing database, lan sing bakal kelingan, kelas Jawa bisa ngemot referensi kanggo kelas liyane. Hubungan kasebut uga dibayangke ing basis data. Minangka aturan, iku salah siji tombol manca (kanggo OneToOne, OneToMany, ManyToOne sesambetan) utawa intermediate tabel (kanggo ManyToMany sesambetan). Nalika entitas sampeyan duwe referensi menyang entitas liyane sing gegandhengan, anotasi diselehake ing ndhuwur referensi kasebut kanggo nuduhake jinis hubungan: @OneToOne, @OneToMany, @ManyToOne, @ManyToMany. Sampeyan bisa nemtokake jinis kaskade kanggo hubungan iki ing properti kaskade anotasi. JPA duwe cara khusus kanggo sesambungan karo entitas (terus, nyimpen, gabung ...). Jinis kaskade digunakake kanggo nuduhake carane data sing gegandhengan kudu tumindak; cara iki digunakake ing entitas target. Dadi apa strategi cascading (jinis kaskade)? Standar JPA nyedhiyakake panggunaan enem jinis kaskade:
  • PERSIST - operasi nyimpen dumadi ing cascade (kanggo nyimpen () lan persist () cara). Ing tembung liya, yen kita nyimpen entitas sing ana hubungane karo entitas liyane, mula entitas kasebut uga disimpen ing database (yen durung ana)

  • MERGE - operasi nganyari dumadi ing kaskade (kanggo metode gabungan () )

  • Mbusak - mbusak operasi dumadi ing cascade ( mbusak () cara)

  • ALL - ngemot telung operasi cascading bebarengan - PERSIST - MERGE - Mbusak

JPA nduweni konsep entitas sing terus-terusan - entitas sing ana gandhengane karo data ing basis data lan dikontrol dening sesi saiki (sambungan). Yen sampeyan ngganti tanpa nyimpen owah-owahan ing database, data entitas ing database isih bakal diganti.
  • DETACH - entitas sing gegandhengan ora dikelola dening sesi ( metode detach() ). Yaiku, nalika data entitas sing gegandhengan diganti, data ing basis data ora dianyari kanthi otomatis — diowahi saka terus-terusan dadi suwek (yaiku entitas kasebut ora dikelola dening JPA)

  • REFRESH - saben-saben entitas dianyari karo data saka database ( refresh () - refresh obyek suwek), entitas sing gegandhengan uga dianyari. Contone, sampeyan ngganti data sing dijupuk saka database, lan sampeyan pengin mulihake nilai asli. Ing kasus iki, sampeyan bakal nemokake operasi iki migunani.

Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 6 - 4Hibernate ndhukung kabeh operasi cascading standar iki lan uga ngenalake telung operasi dhewe:
  • REPLICATE - digunakake nalika kita duwe luwih saka siji sumber data lan kita pengin data disinkronake (metode replika Hibernate). Kabeh entitas kudu duwe pengenal (id) kanggo mesthekake yen bisa digawe tanpa masalah (kanggo mesthekake yen entitas sing padha ora duwe id sing beda kanggo basis data sing beda)

  • SAVE_UPDATE - nyimpen / mbusak runtun (kanggo metode saveOrUpdate Hibernate )

  • KUNCI - kebalikan saka operasi DETACHED : ngowahi entitas sing dicopot bali menyang negara sing terus-terusan, yaiku, sesi saiki bakal nglacak entitas kasebut maneh

Yen ora ana jinis kaskade sing dipilih, operasi ing entitas kasebut ora bakal mengaruhi entitas liyane sing ana gandhengane.

54. Apa kelas Entitas bisa abstrak?

Miturut 2.1 Kelas Entitas saka spesifikasi JPA , " Kelas abstrak lan konkrit bisa dadi entitas. " Dadi, jawabane ya, kelas abstrak bisa dadi entitas lan bisa ditandhani karo anotasi @Entity.

55. Apa manajer entitas? Apa tanggung jawabe?

Kaping pisanan, aku pengin nyathet yen EntityManager minangka komponen penting JPA . Iki digunakake kanggo interaksi entitas karo database. Umumé, cara kanggo interaksi entitas karo database diarani entitas (terus, gabung, mbusak, copot) ... Nanging aku uga Wigati sing komponen iki biasane ora singleton kanggo kabeh aplikasi. Asring entheng, siji dibusak, lan sing anyar digawe nggunakake EntityManagerFactory . Yen kita nggambar paralel karo JDBC , ing ngendi EntityManagerFactory padha karo DataSource , banjur EntityManager padha karo Connection . Sadurunge, aku nyatakake yen entitas sing terus-terusan minangka entitas sing dikelola dening sambungan saiki. Entitas iki dikelola dening EntityManager , sing ana hubungane karo sambungan saiki, lan TransactionManager , sing tanggung jawab kanggo mbukak / nutup transaksi. Ing gambar ing ngisor iki, sampeyan bisa ndeleng siklus urip entitas: Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 6 - 5EntityManager ngatur entitas kasebut nalika ana ing tahap Ngatur (nalika terus-terusan, amarga ana hubungane karo EntityManager ) . Tegese, iku ora anyar lan uga ora dibusak. Nalika entitas anyar utawa dibusak, kita bisa ngomong sing uga suwek, amarga EntityManager ora ngatur. Ana macem-macem strategi kanggo EntityManager . Sampeyan bisa duwe EntityManager singleton kanggo kabeh aplikasi utawa nggawe anyar saben wektu kanggo saben sambungan. Yen sampeyan nggunakake Spring, nggawe / mbusak EntityManager dikelola kanthi otomatis ing sangisore tutup (nanging ora ateges sampeyan ora bisa ngatur dhewe ^^). Aku kudu nyatakake yen siji utawa luwih EntityManagers mbentuk konteks kegigihan . Konteks kegigihan yaiku lingkungan sing kedadeyan entitas disinkronake karo entitas sing padha ing database (kaya sing dakkandhakake, iki mung bisa digunakake kanggo entitas sing terus-terusan). Yen sampeyan luwih jero babagan JPA (sing dakkarepake banget), sampeyan bakal kerep nemoni konsep iki.

56. Apa kelas Assert? Kenapa digunakake?

Aku wis ora krungu saka kelas kuwi ing JPA , aku bakal nganggep yen pitakonan iki nuduhake kelas ditemokaké ing perpustakaan JUnit sing digunakake kanggo tes unit. Ing perpustakaan iki, kelas Assert digunakake kanggo mriksa asil eksekusi kode (kene negesake tegese pratelan yen sampeyan duwe negara / data tartamtu ing lokasi tartamtu ing kode kasebut). Contone, ayo ngomong sampeyan nyoba cara sing mesthine nggawe kucing. Sampeyan mbukak cara lan sampeyan entuk sawetara asil:
Cat resultOfTest = createCat();
Nanging sampeyan kudu nggawe manawa digawe kanthi bener, ta? Dadi sampeyan kanthi manual nggawe kucing tartamtu ( expectedCat ) kanthi persis paramèter sing dikarepake ing kucing sing dipikolehi saka cara createCat () . Banjur sampeyan nggunakake kelas Assert kanggo verifikasi asil:
Assert.assertEquals(resultOfTest, expectedCat);
Yen kucing beda, banjur AssertionError bakal dibuwang, sing ngandhani yen kita ora entuk asil sing dikarepake. Kelas Assert nduweni macem-macem cara sing nyakup macem-macem operasi sing mbiyantu kanggo verifikasi asil sing dikarepake. Ing ngisor iki sawetara:
  • assertTrue(<boolean>) - nilai sing diterusake minangka argumen dikira bener

  • assertFalse(<boolean>) - nilai sing diterusake minangka argumentasi dianggep palsu

  • assertNotEquals(<object1>, <object2>) — obyek sing dilewati minangka argumen kudu beda yen dibandhingake nggunakake equals ( false )

  • assertThrows(<ClassNameOfException>.class, <exceptionObject>) — argumen kaloro wis samesthine dadi pangecualian sing dibuwang dening argumentasi pisanan (yaiku argumentasi kaloro biasane telpon metode sing kudu mbuwang pengecualian saka jinis sing dibutuhake)

String

57. Nerangake kelas String Jawa

String minangka kelas Java standar sing tanggung jawab kanggo nyimpen lan manipulasi nilai string (urutan karakter). Iku kelas immutable (Aku wrote bab immutable sadurunge kene ), IE, data obyek saka kelas iki ora bisa diganti sawise padha digawe. Aku kaya kanggo Wigati langsung sing kelas StringBuilder lan StringBuffer ateges podho rupo - mung prabédan sing siji saka wong-wong mau dimaksudaké kanggo nggunakake ing lingkungan multithreaded ( StringBuffer ). Kelas iki kaya String , nanging beda amarga bisa diowahi . Sanajan wis digawe, sampeyan ngidini sampeyan ngowahi senar sing diwakili, tanpa nggawe obyek anyar. Cara kasebut beda karo metode String standar lan dirancang kanggo manipulasi senar (ana alesan sing diarani tukang).

58. Apa cara kanggo nggawe obyek String? Ing ngendi iku digawe?

Cara sing paling umum kanggo nggawe senar yaiku nemtokake nilai sing dikarepake ing tandha petik dobel:
String str = "Hello World!";
Sampeyan uga bisa nindakake kanthi eksplisit nggunakake anyar :
String str = new String("Hello World!");
Sampeyan uga bisa nggawe string saka macem-macem karakter:
char[] charArr = {'H','e','l','l','o',' ', 'W','o','r','l','d','!'};
String str = new String(charArr);
Kita bisa nindakake kanthi nelpon metode toString ing sawetara obyek:
String str = someObject.toString();
Kita bisa nindakake kanthi nelpon cara liya sing ngasilake senar. Tuladha:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine();
Sampeyan ngerti manawa ana akeh cara kanggo nggawe senar. Nalika obyek String digawe, disimpen ing blumbang senar , kang bakal kita rembugan luwih rinci ing salah siji pitakonan ing ngisor iki.

59. Kepriye carane mbandhingake rong senar Jawa, lan kepriye anggone ngurutake?

Jawa nggunakake tandha padha ( == ) kanggo nindakake mbandhingake. Yen kita kudu mbandhingake nilai-nilai prasaja kaya ints, kita bakal nggunakake. Nanging cara iki ora cocok kanggo mbandhingake obyek lengkap. Iku mung bakal mbandhingaké referensi, IE apa referensi nuding obyek padha utawa ora. Iki tegese yen kita mbandhingake rong obyek kanthi nilai lapangan sing padha nggunakake == , kita bakal entuk palsu . Kothak kasebut nduweni nilai sing padha, nanging obyek kasebut manggoni lokasi sing beda ing memori. Objek string , sanajan kesederhanaan sing ngapusi, isih dadi obyek. Mbandhingake nggunakake == uga ora cocok (senadyan ana blumbang senar). Solusi sing tepat yaiku metode standar kelas Obyek , sing kudu diganti supaya bisa digunakake kanthi bener (kanthi standar, nggunakake == kanggo mbandhingake). Kelas String ngatasi, mula kita nggunakake implementasine:
String firstStr = "Hello World!";
String secondStr = "Hello World!";
boolean isEquals = firstStr.equals(secondStr);
Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 6 - 6Kita wis ngomong babagan perbandingan kanggo kesetaraan. Saiki kita bakal nemtokake perbandingan kanggo ngurutake. Sawise kabeh, yen kita arep ngurutake, kita kudu ngerti prinsip apa sing bakal digunakake kanggo ngurutake. Kanggo nindakake iki, sampeyan bisa nggunakake TreeSet , set standar sing diurutake. Struktur data iki gumantung ing algoritma wit abang-ireng lan ngurutake set kasebut miturut prinsip pangurutan sing ditemtokake. Kaya sing dakkandhakake sadurunge, sampeyan kudu ngerti carane ngurutake obyek saka jinis tartamtu. Kanggo nemtokake cara mbandhingake kanggo ngurutake, gunakake komparator . Sampeyan biasane kudu ngleksanakake kanggo kelas sing pengin diurutake, nanging ing kasus String , dheweke wis dileksanakake. Mulane, kita mung nambah strings menyang TreeSet , lan bakal ngurutake kanggo kita:
TreeSet<String> sortedSet = new TreeSet<>();
sortedSet.add("B");
sortedSet.add("C");
sortedSet.add("A");
sortedSet.forEach(System.out::println);
Output konsol:
ABC

60. Nyedhiyani algoritma kanggo ngowahi senar kanggo karakter. Tulis kode sing cocog

Kaya sing dakkandhakake sadurunge, obyek String duwe macem-macem cara sing migunani. Salah sijine yaiku toCharArray . Cara iki ngowahi string dadi array karakter:
String str = "Hello world";
char[] charArr = str.toCharArray();
Sabanjure, kita duwe macem-macem karakter sing bisa dirujuk kanthi indeks:
char firstChar = charArr[0]; // H

61. Kepiye carane sampeyan ngowahi string menyang array byte lan bali? Tulis kode sing cocog

Kelas String nduweni metode getBytes , sing padha karo metode toCharArray lan ngasilake string minangka array byte:
String str = "Hello world";
byte[] byteArr = str.getBytes();
byte firstChar = byteArr[6]; // 119
Kita wis teka ing kesimpulan logis saka review kita dina iki. Matur nuwun kanggo maca!
Komentar
  • Popular
  • Anyar
  • lawas
Sampeyan kudu mlebu kanggo ninggalake komentar
Kaca iki durung duwe komentar