- Laktawan ko ang mga tanong na bumabagtas sa seryeng ito ng mga artikulo upang hindi na muling madoble ang impormasyon. Inirerekomenda kong basahin ang mga materyal na ito, dahil naglalaman ang mga ito ng pinakakaraniwang (sikat) na mga tanong sa panayam ng Java Core.
- Ang mga tanong sa DOU ay iniharap sa Ukrainian, ngunit makukuha ko ang lahat dito sa Russian.
- Ang mga sagot ay maaaring ilarawan nang mas detalyado, ngunit hindi ko gagawin, mula noon ang sagot sa bawat tanong ay maaaring tumagal ng isang buong artikulo. At hindi ka nila tatanungin nang detalyado sa anumang panayam.
11. Pangalanan ang lahat ng mga pamamaraan ng klase ng Bagay
Ang klase ng Bagay ay may 11 pamamaraan:- Class<?> getClass() — pagkuha ng klase ng kasalukuyang object;
- int hashCode() — pagkuha ng hash code ng kasalukuyang object;
- boolean equals(Object obj) - paghahambing ng kasalukuyang bagay sa isa pa;
- Object clone() - paglikha at pagbabalik ng kopya ng kasalukuyang bagay;
- String toString() — pagkuha ng string na representasyon ng isang bagay;
- void notify() - paggising ng isang thread na naghihintay sa monitor ng bagay na ito (ang pagpili ng thread ay random);
- void notifyAll() - ginigising ang lahat ng mga thread na naghihintay sa monitor ng bagay na ito;
- void wait() - inililipat ang kasalukuyang thread sa standby mode (nai-freeze ito) sa kasalukuyang monitor, gumagana lamang sa isang naka-synchronize na bloke hanggang sa abisuhan o ipaalam ng ilan ang lahat ng thread;
- void wait(long timeout) - nag-freeze din sa kasalukuyang thread sa kasalukuyang monitor (sa kasalukuyang naka-synchronize), ngunit may timer para lumabas sa estadong ito (o muli: hanggang sa ma-notify o ma-notifyAll wakes up);
- void wait(mahabang timeout, int nanos) - isang paraan na katulad ng inilarawan sa itaas, ngunit may mas tumpak na mga timer para sa pag-alis sa pagyeyelo;
- void finalize() - bago tanggalin ang bagay na ito, tinawag ng tagakolekta ng basura ang pamamaraang ito (sa wakas). Ito ay ginagamit upang linisin ang mga pinagkukunang yaman.
12. Ano ang pagkakaiba ng try-with-resources at try-catch-finally kapag nakikitungo sa resources?
Karaniwan, kapag gumagamit ng try-catch-finally, ginamit ang panghuling bloke upang isara ang mga mapagkukunan. Ipinakilala ng Java 7 ang isang bagong uri ng operator try-with-resources , isang analogue ng try-catch-finally para sa pagpapalaya ng mga mapagkukunan, ngunit mas compact at nababasa. Tandaan natin kung ano ang hitsura ng try-catch-finally :String text = "some text......";
BufferedWriter bufferedWriter = null;
try {
bufferedWriter = new BufferedWriter(new FileWriter("someFileName"));
bufferedWriter.write(text);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Ngayon ay muling isulat natin ang code na ito, ngunit gamit ang try-with-resources :
String text = "some text......";
try(BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("someFileName"))) {
bufferedWriter.write(text);
} catch (IOException e) {
e.printStackTrace();
}
Ito ay kahit papaano ay naging mas madali, hindi ba? Bilang karagdagan sa pagpapasimple, mayroong ilang mga puntos:
-
Sa try-with-resources , ang mga mapagkukunang ipinahayag sa mga panaklong (na isasara) ay dapat ipatupad ang AutoCloseable na interface at ang tanging paraan nito, close() .
Ang malapit na pamamaraan ay isinasagawa sa isang implicit finally block , kung hindi, paano maiintindihan ng program ang eksaktong paraan kung paano isara ang isang ibinigay na mapagkukunan?
Ngunit, malamang, bihira mong isulat ang iyong sariling mga pagpapatupad ng mga mapagkukunan at ang kanilang paraan ng pagsasara.
-
Sequence ng block execution:
- subukan mong i-block .
- Implicit sa wakas .
- Isang catch block na nakakakuha ng mga exception sa mga nakaraang hakbang.
- Tahasang sa wakas .
Bilang isang panuntunan, ang mga pagbubukod na lumalabas na mas mababa sa listahan ay nakakaabala sa mga lumalabas na mas mataas.
13. Ano ang mga bitwise na operasyon?
Ang mga pagpapatakbo ng bitwise ay mga pagpapatakbo sa mga bit string na kinabibilangan ng mga lohikal na operasyon at mga pagbabago sa bitwise. Mga lohikal na operasyon:-
bitwise AND - inihahambing ang mga bit value, at sa proseso, ang anumang bit na nakatakda sa 0 (false) ay nagtatakda ng katumbas na bit sa resulta bilang 0. Iyon ay, kung sa parehong mga halaga ay inihambing ang bit ay 1 (true), ang magiging 1 din ang resulta.
Tinutukoy bilang - AT , &
Halimbawa: 10111101 at 01100111 = 00100101
-
bitwise OR ay ang kabaligtaran na operasyon ng nauna. Ang anumang bit na nakatakda sa 1 ay nagtatakda ng kaparehong bit sa resulta bilang 1. At ayon dito, kung ang bit ay 0 sa parehong pinaghahambing na mga halaga, ang resultang bit ay magiging 0 din.
Tinutukoy bilang - O , |
Halimbawa: 10100101 | 01100011 = 11100111
-
bitwise NOT - inilapat sa isang halaga, flips (inverts) ang bits. Iyon ay, ang mga bit na 1 ay magiging 0; at ang mga naging 0 ay magiging 1.
Tinutukoy bilang - HINDI , ~
Halimbawa: ~10100101 = 01011010
bitwise exclusive OR - naghahambing ng mga bit na halaga, at kung sa parehong mga halaga ang bit ay katumbas ng 1, kung gayon ang resulta ay magiging 0, at kung sa parehong mga halaga ang bit ay 0, ang resulta ay magiging 0. Iyon ay, para ang resulta ay katumbas ng 1, isa lamang sa mga bit ay dapat na katumbas ng 1, at ang pangalawa ay katumbas ng 0. Tinutukoy bilang - XOR , ^
Halimbawa: 10100101 ^ 01100011 = 11000110
- 01100011 >> 4 = 00000110
- 01100011 << 3 = 00011000
14. Anong mga karaniwang hindi nababagong klase ang mga bagay sa Java?
Ang hindi nababago ay isang bagay na hindi pinapayagan ang mga orihinal na parameter nito na mabago. Maaaring mayroon itong mga pamamaraan na nagbabalik ng mga bagong bagay ng isang partikular na uri, na may mga parameter na gusto mong baguhin. Ilang karaniwang hindi nababagong bagay:- Sa ngayon, ang pinakatanyag na hindi nababagong bagay sa Java ay String;
- mga pagkakataon ng mga klase ng wrapper na bumabalot ng mga karaniwang uri: Boolean, Character, Byte, Short, Integer, Long, Double, Float;
- mga bagay na karaniwang ginagamit para lalo na sa MALAKING numero - BigInteger at BigDecimal;
- isang bagay na isang yunit sa stacktraces (halimbawa, sa isang exception stacktrace) StackTraceElement;
- isang bagay ng klase ng File - maaaring magbago ng mga file, ngunit sa parehong oras ito mismo ay hindi nababago;
- UUID - na kadalasang ginagamit bilang isang natatanging id para sa mga elemento;
- lahat ng class object ng java.time package;
- Lokal - ginagamit upang tukuyin ang isang heograpiko, pulitikal, o kultural na rehiyon.
15. Ano ang mga pakinabang ng isang hindi nababagong bagay kaysa sa mga regular na bagay?
- Ang mga naturang bagay ay ligtas kapag ginamit sa isang multi-threaded na kapaligiran . Sa paggamit ng mga ito, hindi mo kailangang mag-alala tungkol sa pagkawala ng data dahil sa mga kundisyon ng thread race. Hindi tulad ng pagtatrabaho sa mga ordinaryong bagay: sa kasong ito, kailangan mong mag-isip nang mabuti at magsagawa ng mga mekanismo para sa paggamit ng bagay sa isang parallel na kapaligiran.
- Ang mga hindi nababagong bagay ay mahusay na mga susi sa isang mapa, dahil kung gumamit ka ng nababagong bagay at pagkatapos ay binago ng object ang estado nito, maaari itong maging nakalilito kapag gumagamit ng HashMap: ang bagay ay naroroon pa rin, at kung gagamit ka ng containsKey() maaaring hindi ito matagpuan.
- Ang mga hindi nababagong bagay ay mahusay para sa pag-iimbak ng hindi nababago (pare-pareho) na data na hindi dapat baguhin habang tumatakbo ang programa.
- "Atomicity to failure" - kung ang isang hindi nababagong bagay ay naghagis ng eksepsiyon, hindi pa rin ito mananatili sa isang hindi ginustong (sirang) estado.
- Ang mga klase na ito ay madaling subukan.
- Ang mga karagdagang mekanismo tulad ng isang copy constructor at clone na pagpapatupad ay hindi kailangan.
Mga tanong tungkol sa OOP
16. Ano ang mga pakinabang ng OOP sa pangkalahatan at kumpara sa procedural programming?
Kaya, ang mga pakinabang ng OOP:- Ang mga kumplikadong application ay mas madaling magsulat kaysa sa procedural programming, dahil ang lahat ay nahahati sa maliliit na module - mga bagay na nakikipag-ugnayan sa isa't isa - at bilang isang resulta, ang programming ay bumaba sa mga relasyon sa pagitan ng mga bagay.
- Ang mga application na nakasulat gamit ang OOP ay mas madaling baguhin (hangga't ang mga konsepto ng disenyo ay sinusunod).
- Dahil ang data at mga operasyon dito ay bumubuo ng isang solong entity, ang mga ito ay hindi smeared sa buong application (na kadalasang nangyayari sa procedural programming).
- Pinoprotektahan ng encapsulation ng impormasyon ang pinakamahalagang data mula sa user.
- Posibleng muling gamitin ang parehong code na may iba't ibang data, dahil pinapayagan ka ng mga klase na lumikha ng maraming mga bagay, na ang bawat isa ay may sariling mga halaga ng katangian.
- Binibigyang-daan ka rin ng inheritance at polymorphism na muling gamitin at palawigin ang umiiral na code (sa halip na duplicate ang katulad na functionality).
- Mas madaling pagpapalawak ng aplikasyon kaysa sa pamamaraang pamamaraan.
- Ginagawang posible ng diskarte sa OOP na mag-abstract mula sa mga detalye ng pagpapatupad.
17. Sabihin sa amin kung anong mga pagkukulang ang mayroon sa OOP
Sa kasamaang palad, naroroon din sila:- Ang OOP ay nangangailangan ng maraming teoretikal na kaalaman na kailangang ma-master bago ka makapagsulat ng anuman.
- Ang mga ideya ng OOP ay hindi napakadaling maunawaan at mailapat sa pagsasanay (kailangan mong maging isang pilosopo sa puso).
- Kapag gumagamit ng OOP, bahagyang nababawasan ang pagganap ng software dahil sa mas kumplikadong organisasyon ng system.
- Ang diskarte sa OOP ay nangangailangan ng higit na memorya, dahil ang lahat ay binubuo ng mga klase, interface, pamamaraan, na kumukuha ng mas maraming memorya kaysa sa mga ordinaryong variable.
- Ang oras na kinakailangan para sa paunang pagsusuri ay mas malaki kaysa para sa pamamaraan.
18. Ano ang static at dynamic polymorphism
Ang polymorphism ay nagpapahintulot sa mga bagay na kumilos nang naiiba para sa parehong klase o interface. Mayroong dalawang uri ng polymorphism, na kilala rin bilang early- at late-binding . Static polymorphism, o mas maagang pagbubuklod:- nangyayari sa oras ng pag-compile (maaga sa ikot ng buhay ng programa);
- nagpapasya kung aling paraan ang isasagawa sa oras ng pag-compile;
- Ang paraan ng overloading ay isang halimbawa ng static polymorphism;
- Ang maagang pagbubuklod ay kinabibilangan ng pribado, static, at mga pamamaraan ng terminal;
- ang mana ay hindi kasama sa maagang pagbubuklod;
- Ang static na polymorphism ay hindi nagsasangkot ng mga partikular na bagay, ngunit ang impormasyon tungkol sa klase, ang uri nito ay kinakatawan sa kaliwa ng variable na pangalan.
- nangyayari sa runtime (habang tumatakbo ang programa);
- ang dynamic na polymorphism ay nagpapasya kung anong partikular na pagpapatupad ang magkakaroon ng paraan sa runtime;
- paraan overriding ay isang halimbawa ng dynamic polymorphism;
- ang late binding ay ang pagtatalaga ng isang partikular na bagay, isang sanggunian ng uri nito, o superclass nito;
- Ang pamana ay nauugnay sa dynamic na polymorphism.
GO TO FULL VERSION