JavaRush /Блоги Java /Random-TG /Таҳлили саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари ...

Таҳлили саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java. Қисми 16

Дар гурӯҳ нашр шудааст
Салом, дуст! Барои таҳиякунанда шудан чӣ қадар вақт лозим аст? Ман аз одамони гуногун пурсидам ва ҷавобҳои гуногун шунидам. Барои баъзеҳо ҳатто як моҳ метавонад кофӣ бошад, аммо барои дигарон ҳатто як сол кифоят намекунад. Аммо ман аниқ медонам, ки таҳиягари Java шудан новобаста аз қобorятҳои ибтидоии шумо як роҳи душвор ва тӯлонист. Охир, на он кадар кобorят, якравй ва мехнатдустй мухим аст. Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16-1Аз ин рӯ, имрӯз мо ҳадафмандона таҳлor саволҳои маъмултарини мусоҳибаро барои таҳиягари Java идома медиҳем. Омӯзиши онҳо тадриҷан шуморо ба ҳадафи азизатон наздиктар мекунад. Биёед оғоз кунем!

17. Дар бораи истифодаи муваффақ ва номуваффақи Опсия мисолҳо оред

Фарз мекунем, ки мо як қатор арзишҳо дорем, ки тавассути онҳо мо тавассути ҷараён мегузарем ва дар ниҳоят мо баъзе ихтиёрӣ мегирем :
Optional<String> stringOptional = Stream.of("a", "ab", "abc", "abcd")
   .filter(str -> str.length() >= 3)
   .findAny();
Мо, тавре ки интизор мерафтем, бояд аз ин Опсия арзиш гирем . Танҳо истифодаи get() роҳи бад аст:
String result = stringOptional.get();
Аммо ин усул бояд арзишро аз Опсия гирифта , ба мо баргардонад? Ин, албатта, дуруст аст, аммо агар маъно дошта бошад. Хуб, агар арзишҳо дар ҷараён гуногун бошанд ва дар ниҳоят мо як ихтиёрии холӣ гирифтем, вақте ки мо кӯшиш мекунем аз он бо усули get() арзиш гирем , инҳо партофта мешаванд: Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16-2Ин хуб нест. Дар ин ҳолат, беҳтар аст, ки конструксияҳои зеринро истифода баред:
  1. String result = null;
    if (stringOptional.isPresent()) {
     stringOptional.get();
    }

    Дар ин ҳолат, мо тафтиш мекунем, ки оё элемент дар Опсия аст . Дар акси ҳол, сатри натиҷавӣ арзиши кӯҳнаи худро дорад.

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

    Дар ин ҳолат, мо баъзе арзиши пешфарзро муайян мекунем, ки он ба сатри натиҷавӣ дар ҳолати холӣ Опсия дода мешавад .

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

    Дар ин ҳолат, мо худамон истисно мегузорем, вақте ки Опсия холӣ аст .

Ин метавонад дар барнома қулай бошад, вақте ки масалан, усули Spring JPA истифода мешавад - findById() , ки арзишҳои ихтиёриро бармегардонад. Дар ин ҳолат, бо ин усул мо кӯшиш мекунем, ки арзишро бигирем ва агар он вуҷуд надошта бошад, мо баъзе истисноҳои Runtime -ро мепартоем , ки он дар сатҳи контроллер бо истифода аз ExceptionHandler коркард мешавад ва ба посухи HTTP бо ҳолати 404 - НЕСТ FOUND табдил дода мешавад . Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 3

18. Оё усули асосиро ниҳоӣ эълон кардан мумкин аст?

Бале, албатта, ҳеҷ чиз ба мо халал намерасонад, ки усули main() -ро ҳамчун ниҳоӣ эълон кунем . Компилятор хато намекунад. Аммо бояд дар хотир дошт, ки ҳама гуна усул пас аз эълони ниҳоӣ ба усули охирин табдил меёбад - бекор карда намешавад. Ҳарчанд, кӣ асосиро аз нав муайян мекунад ??? Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 4

19. Оё имкон дорад, ки як баста/классро ду маротиба ворид кунед? Оқибатҳо чӣ гуна буда метавонанд?

Бале шумо метавонед. Оқибатҳо? Мо якчанд воридоти нолозим хоҳем дошт, ки Intelijj IDEA ҳамчун хокистарӣ нишон медиҳад, яъне. истифоданашуда. Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 5Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 6

20. Кастинг чист? Кай мо метавонем ClassCastException гирем?

Кастинг, ё навъи casting , раванди табдил додани як намуди додаҳо ба намуди дигари додаҳо мебошад: дастӣ (кастинги номуайян) ё худкор (кастинги навъи ошкор). Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 7Табдилдиҳии худкор аз ҷониби компилятор ва табдилдиҳии дастӣ аз ҷониби таҳиякунанда иҷро карда мешавад. Навъи кастинг барои ибтидоӣ ва синфҳо то андозае фарқ мекунад, аз ин рӯ мо онҳоро алоҳида баррасӣ хоҳем кард. Намудҳои ибтидоӣ Намунаи рехтани автоматии навъҳои ибтидоӣ:
int value = 17;
double convertedValue = value;
Тавре ки шумо мебинед, дар ин ҷо ба ғайр аз аломати = дигар ҳеҷ гуна амалҳои иловагӣ лозим нест. Намунаи рехтани дастии навъҳои ибтидоӣ:
double value = 17.89;
int convertedValue = (int)value;
Дар ин ҳолат, мо метавонем тарҳи дастиро мушоҳида кунем, ки он бо истифода аз (int) амалӣ карда мешавад , ки дар он қисми пас аз вергул хориҷ карда мешавад ва convertedValue арзиши - 17 хоҳад буд. Дар бораи рехтани намудҳои ибтидоӣ дар ин мақола бештар хонед . Хуб, акнун биёед ба an objectҳо гузарем. Намудҳои истинод Барои навъҳои истинод, резиши автоматӣ барои синфҳои насл ба синфҳои волидайн имконпазир аст. Инро полиморфизм низ меноманд . Фарз мекунем, ки мо синфи Lion дорем , ки аз синфи Cat мерос гирифтааст . Дар ин ҳолат, табдor автоматӣ чунин хоҳад буд:
Cat cat = new Lion();
Аммо бо кастинги возеҳ , ҳама чиз то андозае мураккабтар аст, зеро ягон функсия барои буридани зиёдатӣ вуҷуд надорад, ба монанди примитивҳо. Ва танҳо як табдor возеҳи формаро иҷро кунед:
Lion lion= (Lion)new Cat();
Шумо хато мегиред: Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 8Дарвоқеъ, шумо метавонед усулҳоеро ба синфи насли Lion илова кунед, ки аслан дар синфи Cat набуданд ва сипас кӯшиш кунед, ки онҳоро даъват кунед, зеро навъи an objectи шумо Lion мешавад . Бале, дар ин кор мантиқ нест. Аз ин рӯ, тангкунии намуд танҳо он вақт имконпазир аст, ки an objectи аслӣ аз навъи Lion бошад , вале баъдтар ба синфи волидайн дода шудааст:
Lion lion = new Lion();
Cat cat = lion;
Lion newLion = (Lion)cat;
Инчунин, барои эътимоднокии бештар, сохтори танг кардани an objectҳо бо истифодаи instanceOf construct тавсия дода мешавад :
if (cat instanceof Lion) {
 newLion = (Lion)new Cat();
}
Маълумоти бештарро дар бораи навъҳои истинод дар ин мақола хонед .

21. Чаро чаҳорчӯбаҳои муосир асосан танҳо истисноҳои тафтишнашударо истифода мебаранд?

Ман фикр мекунам, ки ин ҳама аз он сабаб аст, ки коркарди истисноҳои тафтишшуда ҳоло ҳам рамзи спагетти аст, ки дар ҳама ҷо такрор мешавад, аммо дар ҳама ҳолатҳо воқеан лозим нест. Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 9Дар чунин ҳолатҳо, коркардро дар дохor чаҳорчӯба кардан осонтар аст, то бори дигар онро ба дӯши таҳиягарон нагузоранд. Бале, албатта, метавонад вазъияти изтирорӣ ба миён ояд, аммо ин истисноҳои тафтишнашавандаро метавон ба таври қулайтар, бидуни ташвиш бо коркард дар try-catch ва бидуни гузариши минбаъда тавассути усулҳо ҳал кард. Танҳо табдил додани истисно ба баъзе посухи HTTP дар exceptionHandler кифоя аст .

22. Воридоти статикӣ чист?

Ҳангоми истифодаи маълумотҳои статикӣ (методҳо, тағирёбандаҳо) шумо наметавонед худи an objectро эҷод кунед, балки онро бо номи синф иҷро кунед, аммо ҳатто дар ин ҳолат ба мо истинод ба синф лозим аст. Бо он ҳама чиз оддӣ аст: он бо истифодаи воридоти муқаррарӣ илова карда мешавад. Аммо чӣ мешавад, агар мо бе навиштани номи синф усули статикиро истифода барем, гӯё он усули статикии синфи ҷорӣ бошад? Ин бо воридоти статикӣ имконпазир аст! Дар ин ҳолат, мо бояд воридоти статикӣ ва истиноди ин усулро нависед. Мисли ин, масалан, усули статикии синфи Math барои ҳисоб кардани арзиши косинус:
import static java.lang.Math.cos;
Дар натиҷа, мо метавонем усулро бидуни муайян кардани номи синф истифода барем:
double result = cos(60);
Мо инчунин метавонем бо истифода аз воридоти статикӣ ҳама усулҳои статикии синфро якбора бор кунем:
import static java.lang.Math.*;
Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 10

23. Муносибати байни усулҳои hashCode() ва equals() чист?

Мувофиқи Oracle , қоида ин аст: Агар ду an object баробар бошанд (яъне усули equals() true -ро бармегардонад ), онҳо бояд як рамзи хэш дошта бошанд. Дар айни замон, фаромӯш накунед, ки ду an objectи гуногун метавонанд як рамзи хэш дошта бошанд. Барои фаҳмидани он ки чаро equals() ва hashCode() ҳамеша дар ҷуфт бекор карда мешаванд, ҳолатҳои зеринро баррасӣ кунед:
  1. Ҳарду усул бекор карда шудаанд.

    Дар ин ҳолат, ду an objectи мухталифи дорои як ҳолати дохилӣ баробар () - true ро бармегардонанд , дар ҳоле ки hashCode() ҳарду рақами якхеларо бармегардонанд.

    Маълум мешавад, ки хама чиз хуб аст, зеро коида риоя карда мешавад.

  2. Ҳарду усулҳо бекор карда намешаванд.

    Дар ин ҳолат, ду an objectи гуногун бо ҳолати дохилӣ якхела ҳангоми баробар() бардурӯғ бармегарданд , зеро муқоиса бо истинод тавассути оператори == сурат мегирад .

    Усули hashCode () инчунин арзишҳои гуногунро бармегардонад (эҳтимоли зиёд), зеро он арзиши табдилшудаи суроғаи ҷойгиршавии хотираро тавлид мекунад. Аммо барои як an object ин арзиш якхела хоҳад буд, ҳамон тавре ки equals() дар ин ҳолат танҳо вақте ҳақиқиро бармегардонад , ки истинодҳо ба ҳамон an object ишора мекунанд.

    Маълум мешавад, ки дар ин ҳолат ҳама чиз хуб аст ва қоида иҷро мешавад.

  3. Барқароршуда баробар() , нест, hashCode() бекор карда шудааст .

    Дар ин ҳолат, барои ду an objectи гуногун бо ҳолати дохorи якхела, equals() true ро бармегардонад ва hashCode() арзишҳои гуногунро (эҳтимоли зиёд) бармегардонад.

    Ин вайронкунии қоида аст, бинобар ин тавсия дода намешавад, ки ин корро анҷом диҳед.

  4. equals() бекор карда нашудааст , hashCode() бекор карда шудааст .

    Дар ин ҳолат, барои ду an objectи гуногун бо ҳолати дохorи якхела, equals() бардурӯғ ва hashCode() ҳамон арзишҳоро бармегардонад.

    Вайрон кардани коида чой дорад, бинобар ин муносибат нодуруст аст.

Тавре ки шумо мебинед, қоидаро танҳо вақте иҷро кардан мумкин аст, вақте ки equals() ва hashCode() ҳарду бекор карда шудаанд ё ҳарду тамоман бекор карда нашудаанд. Дар ин мақола дар бораи equals() ва hashCode()Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 11 бештар хонед .

24. Синфҳои BufferedInputStream ва BufferedOutputStream кай истифода мешаванд?

InputStream барои хондани byte ба byte маълумот аз баъзе манбаъ истифода мешавад ва OutputStream барои навиштани byte ба byte истифода мешавад. Аммо амалиёти byte-byte метавонад хеле нороҳат бошад ва коркарди иловагиро талаб кунад (барои хондан/навиштани матнҳои муқаррарӣ). Воқеан, барои содда кардани чунин сабтҳои byte, BufferedOutputStream ҷорӣ карда шуд ва BufferedInputStream барои хондан ҷорӣ карда шуд . Ин синфҳо ҷуз буферҳое нестанд, ки маълумотро ҷамъ мекунанд ва ба шумо имкон медиҳанд, ки бо додаҳо на byte ба byte, балки бо тамоми пакетҳои додаҳо (массивҳо) кор кунед. Ҳангоми эҷод, BufferedInputStream ба созандаи худ намунаи навъи InputStream -ро мегирад , ки аз он маълумот хонда мешавад:
BufferedInputStream bufferedInputStream = new BufferedInputStream(System.in);
byte[] arr = new byte[100];
bufferedInputStream.read(arr);
System.in an objectи InputStream аст , ки маълумотро аз консол мехонад. Яъне, бо истифода аз ин an objectи BufferedInputStream , мо метавонем маълумотро аз InputStream бо навиштани он ба массиви гузашта хонем. Ин як навъ бастабандии синфи InputStream мегардад . Массиви arr аз ин мисол массивест, ки маълумотро аз BufferedInputStream мегирад . Ин, дар навбати худ, маълумотро аз InputStream бо массиви дигар мехонад, ки ба таври нобаёнӣ андозаи 2048 byte дорад. Айнан ҳамин чиз барои BufferedOutputStream дуруст аст : намунаи навъи OutputStream бояд ба созанда интиқол дода шавад , ки мо ба он маълумотро дар тамоми массивҳо менависем:
byte[] arr = "Hello world!!!".getBytes();
BufferedOutputStream bufferedInputStream = new BufferedOutputStream(System.out);
bufferedInputStream.write(arr);
bufferedInputStream.flush();
System.out як an objectи OutputStream аст , ки маълумотро ба консол менависад. Усули flush() маълумотро аз BufferedOutputStream ба OutputStream мефиристад ва BufferedOutputStream-ро дар раванд тоза мекунад . Бе ин усул чизе сабт карда намешавад. Ва шабеҳи мисоли қаблӣ: arr массивест, ки аз он маълумот ба BufferedOutputStream навишта мешавад . Аз он ҷо онҳо ба OutputStream дар массиви дигар навишта мешаванд , ки ба таври нобаёнӣ андозаи 512 byte дорад. Дар бораи ин ду синф дар мақола бештар хонед .

25. Фарқи байни синфҳои java.util.Collection ва java.util.Collections чист?

Коллексия интерфейсест, ки сардори иерархияи коллексия мебошад. Он синфҳоро муаррифӣ мекунад, ки ба шумо имкон медиҳанд, ки тамоми гурӯҳҳои an objectҳоро эҷод, дар бар гиранд ва тағир диҳед. Барои ин усулҳои зиёде мавҷуданд, ба монанди add() , remove() , contain() ва ғайра. Интерфейсҳои асосии синфи Коллексия :
  • Маҷмӯа интерфейсест, ки маҷмӯаро тавсиф мекунад, ки дорои унсурҳои беҳамто (такрорнашаванда) мебошад.

  • Рӯйхат интерфейсест, ки сохтори маълумотро тавсиф мекунад, ки пайдарпаии фармоишии an objectҳоро нигоҳ медорад. Ин an objectҳо индекси (рақами) худро мегиранд, ки бо истифода аз он шумо метавонед бо онҳо муошират кунед: гирифтан, нест кардан, тағир додан, аз нав навиштан.

  • Навбат интерфейсест, ки сохтори маълумотро бо нигоҳ доштани унсурҳо дар шакли навбат тавсиф мекунад, ки аз рӯи қоида - FIFO - First In First Out -ро риоя мекунад .

Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 12Муфассалтар дар бораи Коллексия . Коллексияҳо як синфи утorтест, ки усулҳои гуногуни утorтаҳоро таъмин мекунад. Барои намуна:
  • addAll(Collection<? super T> коллексия, T...element) - унсурҳои гузаштаи навъи T- ро ба коллексия илова мекунад .

  • нусхабардорӣ(List<? super T> dest, List<? extends T> src) - ҳамаи унсурҳоро аз рӯйхат src ба рӯйхат дар dest нусхабардорӣ мекунад .

  • emptyList () - рӯйхати холӣ бар мегардонад.

  • max(Collection<? extensions T> collection, Comparator<? super T> comp) - Унсури максималии коллексияи додашударо мувофиқи тартиби муайянкардаи муқоисакунандаи мушаххас бармегардонад.

  • unmodifiableList(Рӯйхат<? рӯйхати T>-ро васеъ мекунад) - намоиши тағирнашавандаи рӯйхати гузаштаро бармегардонад.

Ва дар Коллексияҳо бисёр чунин усулҳои гуногуни қулай мавҷуданд . Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 13Рӯйхати пурраи ин усулҳоро дар вебсайти Oracle пайдо кардан мумкин аст . Бењуда нагуфтам, ки онњо бароҳатанд. Баъд аз ҳама, онҳо ҳама статикӣ мебошанд. Яъне, ба шумо лозим нест, ки ҳар дафъа an objectи ин синфро эҷод кунед, то усули заруриро дар он даъват кунед. Шумо танҳо лозим аст, ки номи синфро ворид кунед, усули дилхоҳро дар он даъват кунед ва ҳама далелҳои заруриро гузаронед. Барои ҷамъбаст, Коллексия интерфейси решаи чаҳорчӯбаи коллексияҳо мебошад. Коллексияҳо як синфи ёрирасон барои коркарди қулайи an objectҳои ба як намуди сохтори коллексияҳо мебошад. Бале, ин ҳама барои имрӯз аст. Ҳамаи Беҳтарин хушиҳо!Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 16 — 14
Дигар маводҳо дар силсила:
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION