JavaRush /Blog Jawa /Random-JV /Analisis pitakonan lan wangsulan saka wawancara kanggo pa...

Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa. Bagian 16

Diterbitake ing grup
Halo, kanca! Suwene suwene dadi pangembang? Aku takon akeh wong sing beda-beda lan krungu akeh jawaban sing beda-beda. Kanggo sawetara wong malah sasi bisa uga cukup, nanging kanggo wong malah setahun ora cukup. Nanging aku ngerti manawa dadi pangembang Jawa minangka dalan sing angel lan dawa, preduli saka kabisan wiwitan. Sawise kabeh, ora akeh kemampuan sing penting tinimbang wangkal lan kerja keras. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 1Mula, dina iki kita terus nganalisis pitakonan wawancara sing paling populer kanggo pangembang Jawa. Sinau kanthi bertahap bakal nggawa sampeyan luwih cedhak karo tujuan sing ditresnani. Ayo dadi miwiti!

17. Menehi conto sukses lan ora sukses nggunakake Opsional

Upaminipun kita duwe seri tartamtu saka nilai liwat kang liwat stream, lan ing pungkasan kita njaluk sawetara opsional minangka asil:
Optional<String> stringOptional = Stream.of("a", "ab", "abc", "abcd")
   .filter(str -> str.length() >= 3)
   .findAny();
Kita, kaya sing dikarepake, kudu entuk nilai saka Opsional iki . Mung nggunakake get() iku cara sing ala:
String result = stringOptional.get();
Nanging cara iki mesthine entuk nilai saka Opsional lan bali menyang kita? Iki, mesthi, bener, nanging yen ana makna. Inggih, yen nilai ing stream padha beda, lan ing pungkasan kita nampa kosong Pilihan , nalika kita nyoba kanggo njupuk Nilai saka iku nggunakake cara njaluk () , ing ngisor iki bakal di buwang: Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 2Kang ora apik. Ing kasus iki, luwih becik nggunakake konstruksi ing ngisor iki:
  1. String result = null;
    if (stringOptional.isPresent()) {
     stringOptional.get();
    }

    Ing kasus iki, kita mriksa manawa unsur kasebut ana ing Opsional . Yen ora, string sing diasilake nduweni nilai lawas.

  2. String result = stringOptional.orElse("default value");

    Ing kasus iki, kita nemtokake sawetara nilai gawan, kang bakal diwenehi kanggo senar asil ing cilik saka Opsional kosong .

  3. String result = stringOptional.orElseThrow(() -> new CustomException());

    Ing kasus iki, kita dhewe mbuwang pangecualian nalika Opsional kosong .

Iki bisa trep ing aplikasi nalika, contone, cara Spring JPA digunakake - findById () , kang ngasilake Nilai Opsional . Ing kasus iki, karo cara iki kita nyoba kanggo njupuk Nilai, lan yen ora ana, kita uncalan sawetara pangecualian Runtime , kang diproses ing tingkat controller nggunakake ExceptionHandler lan diowahi dadi respon HTTP karo status 404 - NOT FOUND . Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 3

18. Apa bisa nyatakake metode utama minangka final?

Ya, mesthi, ora ana sing ngalangi kita nyatakake metode utama () minangka final . Compiler ora bakal ngasilake kesalahan. Nanging kudu dieling-eling manawa metode apa wae sawise nyatakake minangka final bakal dadi cara pungkasan - ora ditimpa. Senajan, sing bakal redefine utama ??? Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 4

19. Apa bisa ngimpor paket / kelas sing padha kaping pindho? Apa akibate?

Ya sampeyan bisa. Akibate? Kita bakal duwe sawetara impor sing ora perlu sing bakal ditampilake Intelijj IDEA minangka werna abu-abu, yaiku. ora dienggo. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 5Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 6

20. Apa Casting? Nalika kita bisa entuk ClassCastException?

Casting, utawa jinis casting , yaiku proses ngowahi siji jinis data menyang jinis data liyane: kanthi manual (casting implisit) utawa kanthi otomatis (casting jinis eksplisit). Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 7Konversi otomatis ditindakake dening compiler, lan konversi manual ditindakake dening pangembang. Tipe casting kanggo primitif lan kelas rada beda, mula kita bakal nimbang kanthi kapisah. Jinis primitif Conto casting otomatis saka jinis primitif:
int value = 17;
double convertedValue = value;
Kaya sing sampeyan ngerteni, ora ana manipulasi tambahan kajaba tandha = sing dibutuhake ing kene. Tuladha casting manual saka jinis primitif:
double value = 17.89;
int convertedValue = (int)value;
Ing kasus iki, kita bisa mirsani cast manual, kang dipun ginakaken nggunakake (int) , kang bagean sawise koma bakal dibuwak lan convertedValue bakal duwe nilai - 17. Waca liyane babagan casting jinis primitif ing artikel iki . Saiki ayo pindhah menyang obyek. Jinis referensi Kanggo jinis referensi, casting otomatis bisa kanggo kelas turunan kanggo kelas tiyang sepah. Iki uga diarani polimorfisme . Contone, kita duwe kelas Singa sing entuk warisan saka kelas Kucing . Ing kasus iki, konversi otomatis bakal katon kaya iki:
Cat cat = new Lion();
Nanging kanthi cast eksplisit , kabeh luwih rumit, amarga ora ana fungsi kanggo ngilangi keluwihan, kaya primitif. Lan mung nindakake konversi eksplisit saka formulir:
Lion lion= (Lion)new Cat();
Sampeyan bakal entuk kesalahan: Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 8Nyatane, sampeyan bisa nambah cara menyang kelas turunan Singa sing ora asli ing kelas Cat , banjur nyoba nelpon, amarga jinis obyek sampeyan bakal dadi Lion . Nah, ora ana logika ing babagan iki. Mulane, penyempitan jinis mung bisa ditindakake nalika obyek asli saka jinis Lion nanging banjur dibuwang menyang kelas induk:
Lion lion = new Lion();
Cat cat = lion;
Lion newLion = (Lion)cat;
Uga, kanggo linuwih luwih, cast narrowing kanggo obyek dianjurake nggunakake instanceOf construct :
if (cat instanceof Lion) {
 newLion = (Lion)new Cat();
}
Waca liyane babagan jinis referensi cast ing artikel iki .

21. Yagene kerangka modern utamane mung nggunakake pangecualian sing ora dicenthang?

Aku iki kabeh amarga nangani istiméwa dicenthang isih kode spageti sing bola nang endi wae, nanging ora nemen needed ing kabeh kasus. Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 9Ing kasus kaya mengkono, luwih gampang kanggo nindakake pangolahan ing framework, supaya ora kanggo sepisan maneh mindhah iki menyang pundak pangembang. Ya, mesthi, kahanan darurat bisa uga muncul, nanging pangecualian sing ora dicenthang sing padha bisa ditangani kanthi cara sing luwih trep, tanpa ngganggu proses kanthi nyoba-nyoba lan tanpa ngliwati metode kasebut. Cukup mung kanggo ngowahi pangecualian dadi sawetara respon HTTP ing exceptionHandler .

22. Apa impor statis?

Nalika nggunakake data statis (metode, variabel), sampeyan ora bisa nggawe obyek dhewe, nanging nindakaken kanthi jeneng kelas, nanging malah ing kasus iki kita kudu referensi kanggo kelas. Kabeh iku prasaja: ditambahake nggunakake impor biasa. Nanging apa yen kita nggunakake cara statis tanpa nulis jeneng kelas, kaya-kaya cara statis saka kelas saiki? Iki bisa ditindakake kanthi ngimpor statis! Ing kasus iki, kita kudu nulis impor statis lan pranala menyang cara kasebut. Kaya iki, contone, cara statis saka kelas Math kanggo ngitung nilai kosinus:
import static java.lang.Math.cos;
Akibaté, kita bisa nggunakake cara tanpa nemtokake jeneng kelas:
double result = cos(60);
Kita uga bisa mbukak kabeh metode statis saka kelas bebarengan nggunakake impor statis:
import static java.lang.Math.*;
Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 10

23. Apa hubungan antarane metode hashCode () lan padha ()?

Miturut Oracle , aturan kasebut: Yen rong obyek padha (i.e. metode sing padha () ngasilake bener ), kudu duwe kode hash sing padha. Ing wektu sing padha, aja lali yen rong obyek sing beda bisa duwe kode hash sing padha. Kanggo mangerteni kenapa padha () lan hashCode () tansah ditindhes ing pasangan, nimbang kasus ing ngisor iki:
  1. Loro-lorone cara ditindhes.

    Ing kasus iki, loro obyek beda karo negara internal padha bakal bali witjaksono () - bener , nalika hashCode () bakal bali nomer padha.

    Pranyata kabeh ora apa-apa, amarga aturan kasebut ditindakake.

  2. Loro-lorone cara ora diganti.

    Ing kasus iki, loro obyek beda karo negara internal padha bakal bali palsu nalika padha () , wiwit comparison dening referensi liwat operator == .

    Metode hashCode () uga bakal ngasilake nilai sing beda-beda (kemungkinan) amarga ngasilake nilai sing diowahi saka alamat lokasi memori. Nanging kanggo obyek padha Nilai iki bakal padha, kaya witjaksono () ing kasus iki bakal bali bener mung nalika referensi nuduhake obyek padha.

    Pranyata ing kasus iki kabeh ok lan aturan wis kawujud.

  3. Ditimpa padha karo () , ora ditimpa hashCode () .

    Ing kasus iki, kanggo rong obyek beda karo negara internal padha, padha () bakal bali bener , lan hashCode () bakal bali (paling kamungkinan) nilai beda.

    Iki nglanggar aturan, mula ora dianjurake kanggo nindakake iki.

  4. padha () ora ditimpa , hashCode () ditimpa .

    Ing kasus iki, kanggo rong obyek beda karo negara internal padha, padha () bakal bali palsu lan hashCode () bakal ngasilake nilai sing padha.

    Ana sing nglanggar aturan, mula pendekatan kasebut ora bener.

Nalika sampeyan bisa ndeleng, aturan mung bisa kaleksanan nalika witjaksono () lan hashCode () loro overridden utawa loro-lorone ora overridden ing kabeh. Waca Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Pérangan 16 - 11liyane babagan padha () lan hashCode () ing artikel iki .

24. Nalika kelas BufferedInputStream lan BufferedOutputStream digunakake?

InputStream digunakake kanggo maca data byte-by-byte saka sawetara sumber, lan OutputStream digunakake kanggo nulis data byte-byte. Nanging operasi byte-by-byte bisa banget ora trep lan mbutuhake pangolahan tambahan (supaya bisa maca / nulis teks kanthi normal). Bener, kanggo nyederhanakake cathetan bait kasebut, BufferedOutputStream dienalake , lan BufferedInputStream dikenalake kanggo maca . Kelas-kelas iki ora luwih saka buffer sing nglumpukake data, ngidini sampeyan nggarap data ora bita dening bait, nanging kabeh paket data (array). Nalika digawe, BufferedInputStream njupuk conto saka jinis InputStream ing konstruktor , saka ngendi data diwaca:
BufferedInputStream bufferedInputStream = new BufferedInputStream(System.in);
byte[] arr = new byte[100];
bufferedInputStream.read(arr);
System.in minangka obyek InputStream sing maca data saka konsol. Yaiku, nggunakake obyek BufferedInputStream iki , kita bisa maca data saka InputStream kanthi nulis menyang larik sing dilewati. Iki dadi jinis pambungkus saka kelas InputStream . Array arr saka conto iki yaiku array sing nampa data saka BufferedInputStream . Sing, banjur maca data saka InputStream karo larik liyane, sing kanthi standar ukurane 2048 bita. Semono uga kanggo BufferedOutputStream : conto saka jinis OutputStream kudu diterusake menyang konstruktor , ing ngendi kita bakal nulis data ing kabeh susunan:
byte[] arr = "Hello world!!!".getBytes();
BufferedOutputStream bufferedInputStream = new BufferedOutputStream(System.out);
bufferedInputStream.write(arr);
bufferedInputStream.flush();
System.out minangka obyek OutputStream sing nulis data menyang console. Cara flush () ngirim data saka BufferedOutputStream menyang OutputStream , flushing BufferedOutputStream ing proses . Tanpa metode iki, ora ana sing bakal direkam. Lan padha karo conto sadurunge: arr minangka array saka data sing ditulis menyang BufferedOutputStream . Saka ing kono padha ditulis kanggo OutputStream ing Uploaded beda, kang minangka standar ukuran 512 bita. Waca liyane babagan rong kelas kasebut ing artikel kasebut .

25. Apa bedane kelas java.util.Collection lan java.util.Collections?

Koleksi minangka antarmuka sing dadi kepala hirarki koleksi. Iki ngenalake kelas sing ngidini sampeyan nggawe, ngemot, lan ngowahi kabeh klompok obyek. Ana akeh cara sing kasedhiya kanggo iki, kaya nambah () , mbusak () , ngemot () lan liya-liyane. Antarmuka utama kelas Koleksi :
  • Set minangka antarmuka sing njlèntrèhaké sawijining set sing ngemot unsur unik (ora diulang).

  • Dhaptar minangka antarmuka sing nggambarake struktur data sing nyimpen urutan obyek sing diurutake. Obyek iki nampa indeks dhewe (nomer), nggunakake sing bisa sesambungan karo wong-wong mau: njupuk, mbusak, ngganti, nimpa.

  • Antrian minangka antarmuka sing njlèntrèhaké struktur data kanthi unsur nyimpen ing wangun antrian sing ngetutake aturan - FIFO - First In First Out .

Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 12Waca liyane babagan Koleksi . Koleksi minangka kelas sarana sing nyedhiyakake macem-macem cara utilitas. Tuladhane:
  • addAll(Koleksi<? super T> koleksi, T...elemen) - nambah unsur liwati jinis T kanggo koleksi .

  • copy(Daftar<? super T> dest, List<? ngluwihi T> src) - nyalin kabeh unsur saka dhaftar src menyang dhaptar ing dest .

  • emptyList () - ngasilake dhaftar kosong.

  • max (Koleksi<? ngluwihi T> koleksi, Comparator<? super T> comp) - Ngasilake unsur maksimum koleksi diwenehi miturut urutan kasebut dening comparator kasebut.

  • unmodifiableList(List<? ngluwihi T> dhaftar) - ngasilake perwakilan unmodifiable saka dhaftar liwati.

Lan ana macem-macem cara sing trep ing Koleksi . Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Pérangan 16 - 13Dhaptar lengkap cara kasebut bisa ditemokake ing situs web Oracle . Iku ora kanggo apa-apa aku ngandika sing padha nyaman. Sawise kabeh, kabeh iku statis. Tegese, sampeyan ora perlu nggawe obyek saka kelas iki saben wektu kanggo nelpon cara sing perlu. Sampeyan mung kudu ngetik jeneng kelas, nelpon cara sing dipengini lan pass kabeh bantahan sing dibutuhake. Kanggo ngringkes, Koleksi minangka antarmuka root saka kerangka koleksi. Koleksi minangka kelas pembantu kanggo ngolah obyek sing luwih trep saka jinis saka struktur koleksi. Nah, iku kabeh kanggo dina iki. Kabeh sing paling apik!Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 16 - 14
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION