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

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

Дар гурӯҳ нашр шудааст
Салом! Ҳатто тезтарин киштии бидуни курс танҳо дар мавҷҳо ҳаракат мекунад. Агар шумо ҳоло мақолаи маро хонда истода бошед, шумо бешубҳа ҳадаф доред. Чизи асосӣ ин аст, ки гумроҳ нашавед, балки ба хати худ то охир пайравӣ кунед - таҳиягари Java шавед. Имрӯз ман мехоҳам таҳлor 250+ саволҳои худро барои таҳиягарони Java идома диҳам, ки ба шумо дар пӯшонидани баъзе камбудиҳои назария кӯмак мекунад. Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 11-1

97. Оё ҳангоми аз нав муайян кардани баробарҳо шартҳои азнавтаърифи созишнома муқаррар карда мешаванд?

Усули бекоршуда баробар () бояд ба шартҳои (қоидаҳои) зерин мувофиқат кунад:
  • рефлексивӣ - барои ҳар як арзиши x, ифодаи монанди x.equals(x) бояд ҳамеша ҳақиқиро баргардонад (вақте ки x != null ).

  • симметрия - барои ҳама гуна қимматҳои x ва y, ифодаи шакли x.equals(y) бояд ҳақиқӣ баргардад , агар y.equals(x) ҳақиқӣ баргардад .

  • гузариш - барои ҳама гуна арзишҳои x , y ва z , агар x.equals(y) ҳақиқӣ баргардонад ва y.equals(z) низ ҳақиқиро баргардонад , x.equals(z) бояд ҳақиқӣ баргардад .

  • мувофиқат - барои ҳама гуна арзишҳои x ва y, занги такрорӣ ба x.equals(y) ҳамеша арзиши занги қаблиро ба ин усул бармегардонад, ба шарте ки майдонҳои барои муқоисаи ду an object истифодашуда дар байни зангҳо тағир наёбанд .

  • Муқоисаи нул - барои ҳар як арзиши x, даъват кардани x.equals(null) бардурӯғ бармегардад .

98. Агар шумо Equals ва HashCode-ро бекор накунед, чӣ мешавад?

Дар ин ҳолат, hashCode() рақамеро, ки дар асоси макони хотира, ки дар он an objectи додашуда нигоҳ дошта мешавад, тавлидшуда бармегардонад. Яъне ду an objectи дорои майдонҳои комилан якхела ҳангоми занг задан ба hashCode() ғайримуқаррарӣ арзишҳои гуногун мегиранд (охир, онҳо дар ҷойҳои гуногуни хотира нигоҳ дошта мешаванд). Unverridden equals() истинодҳоро муқоиса мекунад, то бубинад, ки онҳо ба як an object ишора мекунанд ё не. Яъне, муқоиса тавассути == анҷом дода мешавад ва дар мавриди an objectҳое, ки майдонҳои якхела доранд, он ҳамеша false -ро бармегардонад . Дуруст аст, танҳо ҳангоми муқоисаи истинодҳо ба як an object. Баъзан барҳам надодани ин усулҳо мантиқ вуҷуд дорад. Масалан, шумо мехоҳед, ки ҳама an objectҳои як синфи муайян беназир бошанд ва барҳам додани ин усулҳо танҳо мантиқи беназирро вайрон мекунад. Чизи асосй он аст, ки нозукихои усулхои аз байн раф-ташуда ва беэътиборро дарк намуда, вобаста ба вазъият хар ду равишро истифода баред.

99. Чаро симметрия танҳо дар сурати баргардонидани x.equals(y) дуруст аст?

Як саволи аҷиб. Агар an objectи А ба an objectи В баробар бошад, пас an objectи В ба an objectи А баробар аст. Агар В ба an objectи А баробар набошад, пас чӣ гуна баръакс имконпазир аст? Ин мантиқи оддӣ аст. Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 11-2

100. Бархӯрд дар HashCode чист? Бо он чӣ гуна бояд муносибат кард?

Бархӯрди hashCode вазъиятест, ки дар он ду an objectи гуногун арзиши якхелаи hashCode доранд . Ин чӣ гуна имконпазир аст? Далели он аст, ки hashcode ба навъи Integer харита шудааст , ки дар навбати худ аз -2147483648 то 2147483647, яъне тақрибан 4 миллиард ададҳои гуногун дорад. Ин диапазон бузург аст, аммо он беохир нест. Аз ин рӯ, ҳолатҳое имконпазиранд, ки ду an objectи комилан гуногун як рамзи хэш доранд. Ин хеле кам аст, аммо имконпазир аст. Функсияи хэш-и суст иҷрошуда инчунин метавонад басомади рамзҳои якхелаи хешро зиёд кунад, ки масалан, рақамҳоро дар доираи хурд бармегардонад, ки имкони бархӯрдҳоро зиёд мекунад. Барои мубориза бо бархӯрд, шумо бояд усули хуби hashCode дошта бошед , то паҳншавии арзишҳо ҳадди аксар ва имкони такрори арзишҳо ҳадди ақалл бошад.

101. Чӣ мешавад, агар элементе, ки дар шартномаи HashCode иштирок мекунад, арзиши худро тағир диҳад?

Агар элементе, ки дар ҳисобкунии codeи хэш иштирок дорад, тағир дода шуда бошад, пас codeи хэши худи an object тағир дода мешавад (агар функсияи hash хуб бошад). Аз ин рӯ, дар HashMap тавсия дода мешавад, ки an objectҳои тағирнашаванда (тағйирнашаванда) ҳамчун калид истифода шаванд, зеро ҳолати дохorи онҳо (майдонҳо) пас аз офариниш тағир дода намешавад. Мувофиқи он, codeи хэши онҳо низ пас аз офариниш табдил дода намешавад. Агар шумо an objectи тағирёбандаро ҳамчун калид истифода баред, пас вақте ки шумо майдонҳои ин an objectро иваз мекунед, codeи хэши он тағир меёбад ва дар натиҷа шумо метавонед ин ҷуфтро дар HashMap гум кунед . Баъд аз ҳама, он дар сатил барои codeи аслии хэш нигоҳ дошта мешавад ва пас аз тағир додани он дар сатor дигар ҷустуҷӯ карда мешавад. Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 11-3

102. Методҳои Equals ва HashCode-ро барои синфи Student, ки аз номи сатр ва майдонҳои int иборатанд, нависед

public class Student {
int age;
String name;

 @Override
 public boolean equals(final Object o) {
   if (this == o) {
     return true;
   }
   if (o == null || this.getClass() != o.getClass()) {
     return false;
   }

   final Student student = (Student) o;

   if (this.age != student.age) {
     return false;
   }
   return this.name != null ? this.name.equals(student.name) : student.name == null;
 }

 @Override
 public int hashCode() {
   int result = this.age;
   result = 31 * result + (this.name != null ? this.name.hashCode() : 0);
   return result;
 }
}
Баробар:
  • Аввалан, мо пайвандҳоро мустақиман муқоиса мекунем, зеро агар пайвандҳо ба як an object бошанд, пас идома додани чек чӣ маъно дорад? Ба ҳар ҳол ҳама чиз дуруст хоҳад буд .

  • Санҷиши null ва мувофиқати намудҳои синф, зеро агар an object аргументи null ё навъи дигар бошад, ин маънои онро дорад, ки an objectҳо баробар нестанд - false .

  • Гузаронидани an objectи аргумент ба як намуд (агар он an objectи навъи волидайн бошад).

  • Муқоисаи майдони синфи ибтидоӣ (охир, муқоиса тавассути =! барои он кифоя аст ), агар майдон баробар набошад - false .

  • Санҷиши майдони ғайриоддӣ барои нул ва баробар (дар Сатр усул аз байн бурда мешавад ва дуруст муқоиса карда мешавад), агар ҳарду майдонҳо null ё баробар бошанд , пас санҷиш ба охир мерасад ва метод true -ро бармегардонад .

HashCode:
  • Муқаррар кардани арзиши codeи хэш ба синну соли ибтидоии an object .

  • Зарб кардани codeи хэши ҷорӣ ба 31 (барои паҳншавии бештар) ва ба он илова кардани codeи хэши майдони сатри ғайриоддӣ (агар он нул набошад).

  • Баргардонидани натиҷа.

  • Дар натиҷаи ин бекоркунии codeи hash, an objectҳои дорои як ном ва арзишҳои int ҳамеша ҳамон арзишро бармегардонанд.

103. Фарқи байни истифодаи if (obj instanceof Student) ва if (getClass() == obj.getClass()) чист?

Биёед бубинем, ки ҳар як равиш чӣ кор мекунад:
  • instanceof месанҷад, ки истинод ба an object дар тарафи чап намунаи навъи дар тарафи рост буда ё ягон зернавъи он аст.

  • getClass() == ... шахсияти намудро тафтиш мекунад.

Яъне, агар getClass() шахсияти пурраи синфро тафтиш кунад, instanceof ҳақиқиро бармегардонад, ҳатто агар an object танҳо як зернамуд бошад, ки метавонад ҳангоми истифодаи фаъолонаи полиморфизм ба мо чандирии бештар диҳад. Дарвоқеъ, ҳарду равиш хуб аст, агар шумо хусусиятҳои кори онҳоро дарк кунед ва онҳоро дар ҷойҳои лозима татбиқ кунед.

104. Тавсифи мухтасари усули clone()-ро бидонед.

Clone() усули синфи Object мебошад , ки ҳадафи он эҷод ва баргардонидани клони an objectи ҷорӣ (нусхаи an objectи ҷорӣ) мебошад. Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 11-4Барои истифода бурдани он, шумо бояд интерфейси Cloneable marker -ро татбиқ кунед :
Student implements Cloneable
Ва худи усули clone() -ро бекор кунед :
@Override
protected Object clone() throws CloneNotSupportedException {
 return super.clone();
}
Дар ниҳоят, дар синфи Object он муҳофизат карда мешавад, яъне он танҳо дар худи синфи Student намоён хоҳад буд , аммо ба синфҳо аз берун намоён нест.

105. Хусусияти усули clone() кор бо майдонњои an objectи типи истинод дар чист?

Ҳангоми клон кардани an objectҳо танҳо арзишҳои ибтидоӣ ва арзиши истинодҳои an objectӣ нусхабардорӣ карда мешаванд. Ин маънои онро дорад, ки агар an object дар майдони дохorи худ ба an objectи дигар пайванд дошта бошад, он гоҳ танҳо ин пайванд клон карда мешавад, аммо худи ин an objectи дигар клон карда намешавад. Дар асл, ин чизест, ки онҳо клонкунии рӯизаминӣ меноманд. Хуб, чӣ мешавад, агар ба шумо клонизатсияи мукаммал бо клонкунии ҳама an objectҳои лона лозим бошад? Чӣ тавр боварӣ ҳосил кардан мумкин аст, ки инҳо нусхаҳои истинодҳо нестанд, балки клонҳои мукаммали an objectҳо бо дигар ҳуҷайраҳои хотираи ишғолшуда дар теппа мебошанд? Дар асл, ҳама чиз хеле содда аст - барои ин ба шумо лозим аст, ки инчунин усули clone() -ро дар ҳар як синфи ин an objectҳои дохилӣ бекор кунед ва интерфейси маркерро илова кунед - Cloneable . Он гоҳ на истинод ба an objectҳое, ки нусхабардорӣ карда мешаванд, балки худи an objectҳо хоҳанд буд, зеро ҳоло онҳо инчунин қобorяти нусхабардории худро доранд.

Истисноҳо

106. Фарқи байни иштибоҳ ва истисно чист?

Ҳарду истисноҳо ва хатоҳо зерклассҳои синфи Throwable мебошанд . Бо вуҷуди ин, онҳо фарқиятҳои худро доранд. Хатогӣ мушкилотеро нишон медиҳад, ки асосан аз сабаби нокифояи захираҳои система рух медиҳад. Ва аризаи мо набояд ин гуна мушкилотро ошкор кунад. Баъзе аз мисолҳои хатогиҳо суқути система ва хатои аз хотираи корбарӣ мебошанд. Хатогиҳо асосан дар вақти кор рух медиҳанд, зеро онҳо навъи тафтишнашуда мебошанд. Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 11 — 5Истисноҳо мушкилоте мебошанд, ки метавонанд дар вақти иҷро ва дар вақти компилясия рух диҳанд. Одатан, ин дар codeи аз ҷониби таҳиягарон навишташуда рӯй медиҳад. Яъне, истисноҳо бештар пешгӯишавандаанд ва бештар аз мо ҳамчун таҳиягарон вобастаанд. Дар айни замон, хатогиҳо бештар тасодуфӣ ва аз мо мустақилтаранд, балки бештар аз мушкилот бо худи системае, ки дар он замимаи мо кор мекунад, вобаста аст.

107. Тафовут байни санҷидашуда ва бидуни қайд, истисно, партофтан, партофтан чӣ гуна аст.

Тавре ки ман қаблан гуфтам, истисно ин хатогӣ ҳангоми иҷрои барнома ва ҳангоми тартибдиҳӣ дар codeи навиштаи таҳиякунанда рух додааст (бо сабаби баъзе вазъияти ғайримуқаррарӣ). Санҷидашуда як намуди истисно аст, ки бояд ҳамеша бо истифода аз механизми try-catch коркард карда шавад ё ба усулҳои дар боло овардашуда партофта шавад. Throws дар сарлавҳаи метод барои нишон додани истисноҳои эҳтимолии аз ҷониби усул партофташуда истифода мешавад. Яъне, ин механизми "партофтани" истисноҳо ба усулҳои дар боло овардашуда мебошад. Санҷишнашуда як намуди истисноест, ки коркард кардан лозим нест ва маъмулан камтар пешгӯинашаванда аст ва эҳтимоли рух додани он камтар аст. Аммо, агар хоҳед, онҳоро низ коркард кардан мумкин аст. Throw ҳангоми ба таври дастӣ партофтани истисно истифода мешавад, масалан:
throw new Exception();

108.Иерархияи истисноњо чї гуна аст?

Иерархияи истисноҳо хеле калон ва васеъ аст, ҳатто хеле васеъ аст, то ҳама чизро дар ин ҷо бигӯям. Аз ин рӯ, мо танҳо пайвандҳои калидии онро баррасӣ хоҳем кард: Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 11 — 6Дар ин ҷо дар қисми болоии иерархия мо синфро мебинем - Throwable - синфи умумӣ, аҷдоди иерархияи истисноӣ, ки дар навбати худ ба:
  • Хатогӣ - хатогиҳои муҳим, тафтишнашаванда.
  • Истисно - истисноҳои тафтишшуда.
Истисно ба истисноҳои гуногуни вақти тафтишнашуда ва истисноҳои гуногуни тафтишшуда тақсим карда мешавад.

109. Истиснои санљидашуда ва бидуни санљиш чист?

Тавре ки ман қаблан гуфтам:
  • Санҷидашуда - истисноҳое, ки шумо бояд бо ягон роҳ ҳал кунед, яъне ё онҳоро дар блоки try-catch коркард кунед ё онҳоро ба усули дар боло зикршуда "фиристед". Барои ин, дар имзои метод, пас аз номбар кардани аргументҳои метод, шумо бояд калимаи калидии trows -ро истифода баред <навъи истисно> , ки ба корбарони усул нишон медиҳад, ки усул метавонад ин истисноро партояд (чизе ба монанди огоҳӣ) ва интиқоли масъулият барои коркарди истисно ба истифодабарандагони ин усул.

  • Санҷишнашуда - истисноҳое, ки коркард кардан лозим нест, зеро онҳо дар вақти тартибдиҳӣ тафтиш карда намешаванд ва чун қоида, пешгӯинашавандатаранд. Яъне, фарқияти асосӣ аз санҷидашуда дар он аст, ки барои онҳо ин механизмҳои кӯшиши сайд ё партофтан якхела кор мекунанд, аммо онҳо ҳатмӣ нестанд.

101. Мисоли боздоштан ва коркарди истисно дар блоки try-catch-и методро нависед

try{                                                 // начало блока перехвата
 throw new Exception();                             // ручной бросок исключения
} catch (Exception e) {                              // данное исключение и его потомки будут перехватываться
 System.out.println("Упс, что-то пошло не так =("); // вывод некоторого исключения в консоль
}

102. Бо истифода аз истисноҳои худ мисоли сайд ва коркарди истисноро нависед

Аввалан, биёед синфи истисноии худро нависем, ки аз Exception мерос мегирад ва созандаи онро бо паёми хато бекор мекунад:
public class CustomException extends Exception {

 public CustomException(final String message) {
   super(message);
 }
}
Хуб, он гоҳ мо онро дастӣ мепартоем ва онро мисли саволи қаблӣ бозмедорем:
try{
 throw new CustomException("Упс, что-то пошло не так =(");
} catch (CustomException e) {
 System.out.println(e.getMessage());
}
Ва боз, вақте ки шумо онро иҷро мекунед, шумо баромади зеринро ба консол мегиред:
Оҳ, чизе хато кард =(
Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 11 — 7Шумо метавонед дар бораи истисноҳо дар ин ҷо маълумоти бештар гиред . Хуб, ин ҳама барои имрӯз аст! Дар қисми оянда вохӯрем!
Дигар маводҳо дар силсила:
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION