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

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

Дар гурӯҳ нашр шудааст
Эй ҳама! Барномасозӣ пур аз домҳост. Ва амалан ягон мавзӯъе нест, ки дар он шумо пешпо нахӯред ва зарба назанед. Ин махсусан барои шурӯъкунандагон дуруст аст. Ягона роҳи кам кардани ин омӯзиш аст. Махсусан, ин ба тахлor муфассали мавзуъхои асосй дахл дорад. Имрӯз ман таҳлor 250+ саволҳоро аз мусоҳибаҳои таҳиягарони Java идома медиҳам, ки мавзӯъҳои асосиро хуб дар бар мегиранд. Мехоҳам қайд намоям, ки дар рӯйхат инчунин якчанд саволҳои ғайристандартӣ мавҷуданд, ки ба шумо имкон медиҳанд, ки ба мавзӯъҳои умумӣ аз як паҳлӯи дигар назар андозед.Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 7-1

62. Ҳавзи сатрӣ чист ва барои чӣ он зарур аст?

Дар хотираи Java (Heap, ки мо дар бораи он баъдтар сӯҳбат хоҳем кард) як майдон мавҷуд аст - String pool ё string pool. Он барои нигоҳ доштани арзишҳои сатр пешбинӣ шудааст. Ба ибораи дигар, вақте ки шумо як сатри муайян эҷод мекунед, масалан тавассути нохунакҳои дукарата:
String str = "Hello world";
тафтиш карда мешавад, то бубинад, ки оё ҳавзи сатр арзиши додашуда дорад. Агар ин тавр бошад, ба тағирёбандаи str истинод ба он арзиш дар ҳавз таъин карда мешавад. Агар ин тавр нашавад, дар ҳавз арзиши нав эҷод карда мешавад ва истинод ба он ба тағирёбандаи str таъин карда мешавад . Биёед як мисолро дида бароем:
String firstStr = "Hello world";
String secondStr = "Hello world";
System.out.println(firstStr == secondStr);
true дар экран нишон дода мешавад . Мо дар хотир дорем, ки == истинодҳоро муқоиса мекунад - маънои ин ду истинод ба як арзиши ҳавзи сатр ишора мекунад. Ин барои он анҷом дода мешавад, ки дар хотира бисёр an objectҳои якхелаи навъи String тавлид нашаванд, зеро тавре ки мо дар ёд дорем, String синфи тағирнопазир аст ва агар мо ба як арзиш истинодҳои зиёде дошта бошем, дар ин кор ҳеҷ бадӣ нест. Дигар имконнопазир аст, ки вазъияте, ки тағир додани арзиш дар як ҷо якбора боиси тағирёбии якчанд пайвандҳои дигар мегардад. Аммо ба ҳар ҳол, агар мо бо истифода аз new сатр эҷод кунем :
String str = new String("Hello world");
дар хотира an objectи алоҳида эҷод карда мешавад, ки ин арзиши сатрро нигоҳ медорад (ва муҳим нест, ки мо аллакай дар ҳавзи сатр чунин арзиш дорем). Ҳамчун тасдиқ:
String firstStr = new String("Hello world");
String secondStr = "Hello world";
String thirdStr = new String("Hello world");
System.out.println(firstStr == secondStr);
System.out.println(firstStr == thirdStr);
Мо ду арзиши бардурӯғ мегирем , ки ин маънои онро дорад, ки мо дар ин ҷо се арзиши гуногун дорем, ки истинод карда мешаванд. Воқеан, аз ин рӯ тавсия дода мешавад, ки сатрҳоро танҳо бо истифода аз нохунакҳои дукарата эҷод кунед. Бо вуҷуди ин, шумо метавонед ҳангоми сохтани an object бо истифода аз new арзишҳоро ба ҳавзи сатр илова кунед (ё истинод ба онҳо гиред) . Барои ин мо усули синфи string - intern() -ро истифода мебарем . Ин усул маҷбуран арзишро дар ҳавзи сатр эҷод мекунад ё ба он пайванд мегирад, агар он аллакай дар он ҷо нигоҳ дошта шуда бошад. Инак як мисол:
String firstStr = new String("Hello world").intern();
String secondStr = "Hello world";
String thirdStr = new String("Hello world").intern();
System.out.println(firstStr == secondStr);
System.out.println(firstStr == thirdStr);
System.out.println(secondStr == thirdStr);
Дар натиҷа, мо дар консол се арзиши ҳақиқиро мегирем , ки ин маънои онро дорад, ки ҳар се тағирёбанда ба як сатр ишора мекунанд.Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 7-2

63. Дар ҳавзи сатр кадом намунаҳои GOF истифода мешаванд?

Намунаи GOF дар ҳавзи сатр ба таври равшан намоён аст - flyweight , дар акси ҳол setler номида мешавад. Агар шумо дар ин ҷо як қолаби дигарро бинед, онро дар шарҳҳо мубодила кунед. Хуб, биёед дар бораи қолаби сабук сӯҳбат кунем. Вазни сабук як намунаи тарроҳии сохторӣ мебошад, ки дар он an objectе, ки худро дар ҷойҳои гуногуни барнома ҳамчун намунаи беназир муаррифӣ мекунад, дар асл чунин нест. Вазни сабук хотираро тавассути мубодилаи ҳолати муштараки an objectҳо ба ҷои нигоҳ доштани як маълумот дар ҳар як an object сарфа мекунад. Барои фаҳмидани моҳият, биёед соддатарин мисолро дида бароем. Фарз мекунем, ки мо интерфейси корманд дорем:
public interface Employee {
   void work();
}
Ва баъзе татбиқҳо мавҷуданд, масалан, ҳуқуқшинос:
public class Lawyer implements Employee {

   public Lawyer() {
       System.out.println("Юрист взят в штат.");
   }

   @Override
   public void work() {
       System.out.println("Решение юридических вопросов...");
   }
}
Ва муҳосиб:
public class Accountant implements Employee{

   public Accountant() {
       System.out.println("Бухгалтер взят в штат.");
   }

   @Override
   public void work() {
       System.out.println("Ведение бухгалтерского отчёта....");
   }
}
Усулҳо хеле шартӣ мебошанд: мо бояд танҳо бубинем, ки онҳо иҷро карда мешаванд. Айнан хамин ахвол ба конструктор низ дахл дорад. Бо шарофати баромади консол, мо мебинем, ки вақте an objectҳои нав сохта мешаванд. Мо инчунин шуъбаи коркунон дорем, ки вазифааш додани коргари дархостшуда аст ва агар дар он ҷо набошад, ӯро ба кор қабул карда, дар посух ба дархост пешниҳод кунед:
public class StaffDepartment {
   private Map<String, Employee> currentEmployees = new HashMap<>();

   public Employee receiveEmployee(String type) throws Exception {
       Employee result;
       if (currentEmployees.containsKey(type)) {
           result = currentEmployees.get(type);
       } else {
           switch (type) {
               case "Бухгалтер":
                   result = new Accountant();
                   currentEmployees.put(type, result);
                   break;
               case "Юрист":
                   result = new Lawyer();
                   currentEmployees.put(type, result);
                   break;
               default:
                   throw new Exception("Данный сотрудник в штате не предусмотрен!");
           }
       }
       return result;
   }
}
Яъне, мантиқ оддӣ аст: агар воҳиди додашуда мавҷуд бошад, онро баргардонед, агар набошад, онро эҷод кунед, дар анбор ҷойгир кунед (чизе ба монанди кэш) ва онро баргардонед. Акнун биёед бубинем, ки ин ҳама чӣ гуна кор мекунад:
public static void main(String[] args) throws Exception {
   StaffDepartment staffDepartment = new StaffDepartment();
   Employee empl1  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl2  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl3  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl4  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl5  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl6  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl7  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl8  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl9  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl10  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
}
Ва дар консол, мувофиқан, натиҷае хоҳад буд:
Адвокат ба кор гирифта шудааст. Халли масъалахои хукукй... Бухгалтер ба кор кабул карда шудааст. Пешниҳоди ҳисоботи баҳисобгирии муҳосибӣ.... Ҳалли масъалаҳои ҳуқуқӣ... Пешниҳоди ҳисоботи баҳисобгирии муҳосибӣ.... Ҳалли масъалаҳои ҳуқуқӣ... Пешниҳоди ҳисоботи баҳисобгирӣ.... Ҳалли масъалаҳои ҳуқуқӣ... Пешбурди ҳисоботи муҳосибӣ.... Ҳалли масъалаҳои ҳуқуқӣ ... Пешбурди ҳисоботи муҳосибӣ ...
Тавре ки шумо мебинед, танҳо ду an object офарида шудааст, ки борҳо такроран истифода шудаанд. Мисол хеле содда аст, аммо он равшан нишон медиҳад, ки чӣ тавр истифода бурдани ин қолаб метавонад захираҳои моро сарфа кунад. Хуб, тавре ки шумо пай бурдед, мантиқи ин қолаб ба мантиқи ҳавзи суғурта хеле монанд аст. Шумо метавонед дар бораи намудҳои намунаҳои GOF бештар дар ин мақола хонед .Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 7-3

64. Сатрро чї тавр ба ќисмњо људо кардан мумкин аст? Лутфан намунаи рамзи мувофиқро пешниҳод кунед

Аён аст, ки ин савол дар бораи усули тақсимкунӣ аст . Синфи String ду варианти ин усул дорад:
String split(String regex);
Ва
String split(String regex);
regex ҷудокунандаи сатр аст - баъзе ифодаи муқаррарӣ, ки сатрро ба массиви сатрҳо тақсим мекунад, масалан:
String str = "Hello, world it's Amigo!";
String[] arr = str.split("\\s");
for (String s : arr) {
  System.out.println(s);
}
Инҳо ба консол бароварда мешаванд:
Салом, ҷаҳон ин Амиго аст!
Яъне, арзиши сатри мо ба массиви сатр тақсим шуда буд ва ҷудокунанда фосила буд (барои ҷудокунӣ мо метавонем ифодаи муқаррарии ғайрифазоӣ "\\s" ва танҳо ифодаи сатри " " истифода кунем ). Усули дуюм, аз ҳад зиёд дорои далели иловагӣ - limit . лимити - арзиши ҳадди иҷозатдодашудаи массиви натиҷа. Яъне, вақте ки сатр аллакай ба шумораи максималии иҷозатдодашудаи зерсатрҳо тақсим шудааст, тақсимоти минбаъда вуҷуд нахоҳад дошт ва унсури охирин "боқимонда"-и сатри эҳтимолан камтар ҷудошуда хоҳад дошт. Мисол:
String str = "Hello, world it's Amigo!";
String[] arr = str.split(" ", 2);
for (String s : arr) {
  System.out.println(s);
}
Натиҷаи консол:
Салом, ҷаҳон ин Амиго аст!
Тавре ки мо мебинем, агар он барои limit = 2 constraint намебуд , унсури охирини массивро метавон ба се зерсатр тақсим кард.Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 7-4

65. Чаро массиви аломатҳо барои нигоҳ доштани парол аз сатр беҳтар аст?

Якчанд сабабҳо барои бартарӣ додани массив ба сатр ҳангоми нигоҳдории парол вуҷуд доранд: 1. Ҳавзи сатр ва тағирнопазирии сатр. Ҳангоми истифодаи массив ( char [] ), мо метавонем маълумотро пас аз анҷоми он тоза кунем. Инчунин, мо метавонем массивро ба қадри ки мо мехоҳем, аз нав нависем ва пароли дуруст дар ҳеҷ ҷое дар система нахоҳад буд, ҳатто пеш аз ҷамъоварии ахлот (барои иваз кардани якчанд ячейкаҳо ба арзишҳои нодуруст кифоя аст). Дар айни замон, String синфи тағирнопазир аст. Яъне, агар мо хоҳем, ки арзиши онро тағир диҳем, мо арзиши навро мегирем, дар ҳоле ки кӯҳна дар ҳавзи сатр боқӣ мемонад. Агар мо хоҳем, ки арзиши сатри паролро нест кунем, ин метавонад кори хеле душвор бошад, зеро ба мо коллектори ахлот лозим аст, то арзишро аз ҳавзи сатр хориҷ кунад ва эҳтимоли зиёд вуҷуд дорад, ки ин арзиши Сатр дар он ҷо то як сол боқӣ монад. муддати дароз. Яъне, дар ин ҳолат, String аз ҷиҳати амнияти нигоҳдории маълумот аз массиви char пасттар аст. 2. Агар арзиши Сатр тасодуфан ба консол (ё гузоришҳо) бароварда шавад, худи арзиш нишон дода мешавад:
String password = "password";
System.out.println("Пароль - " + password);
Натиҷаи консол:
Рамз
Дар айни замон, агар шумо тасодуфан массивро ба консол бароварда бошед:
char[] arr = new char[]{'p','a','s','s','w','o','r','d'};
System.out.println("Пароль - " + arr);
Дар консол як gobbledygook нофаҳмо хоҳад буд:
Рамз - [C@7f31245a
Дар асл на gobbledygook, аммо: [C номи синф массиви char аст , @ ҷудокунанда аст ва пас аз 7f31245a хэшcodeи шонздаҳӣ аст. 3. Ҳуҷҷати расмӣ, Дастури меъмории криптографияи Java, ба таври возеҳ нигоҳ доштани паролҳоро дар char[] ба ҷои String зикр мекунад : “Ҷамъоварӣ ва нигоҳ доштани парол дар an objectи навъи java.lang.String мантиқӣ мебуд . Аммо, дар ин ҷо як огоҳӣ вуҷуд дорад: Объектҳои сатр тағирнопазиранд, яъне ҳеҷ гуна усулҳое вуҷуд надоранд, ки имкони тағир додани мундариҷаи an objectи Stringро пас аз истифода тағир додан (аз нав навиштан) ё бекор карданро доранд. Ин хусусият an objectҳои String- ро барои нигоҳ доштани маълумоти ҳассос ба монанди паролҳои корбар номувофиқ месозад. Ба ҷои ин, шумо бояд ҳамеша маълумоти ҳассоси амниятро дар массиви аломатҳо ҷамъоварӣ ва нигоҳ доред."Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 7 — 5

Enum

66. Тавсифи мухтасари Enum дар Java

Enum номбаркунӣ, маҷмӯи доимии сатрест, ки бо як намуди умумӣ муттаҳид шудаанд. Ба воситаи калимаи калидӣ - enum эълон карда мешавад . Ин аст як мисол бо enum - нақшҳои дуруст дар мактаби муайян:
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD
}
Калимаҳое, ки бо ҳарфҳои калон навишта шудаанд, ҳамон константаҳои номбаршуда мебошанд, ки бидуни истифодаи оператори new ба таври содда эълон карда мешаванд . Истифодаи рӯйхатҳо ҳаётро хеле осон мекунад, зеро онҳо барои пешгирӣ кардани хатогиҳо ва нофаҳмиҳо дар номгузорӣ кӯмак мекунанд (зеро танҳо рӯйхати муайяни арзишҳо вуҷуд доранд). Шахсан, ман онҳоро ҳангоми истифода дар тарҳи мантиқии Switch хеле қулай мебинам .

67. Оё Enum интерфейсҳоро амалӣ карда метавонад?

Бале. Дар ниҳоят, рӯйхатҳо бояд на танҳо коллексияҳои ғайрифаъолро (масалан, нақшҳо) намояндагӣ кунанд. Дар Java, онҳо метавонанд an objectҳои мураккабтарро бо баъзе вазифаҳо намояндагӣ кунанд, бинобар ин ба шумо лозим меояд, ки ба онҳо функсияҳои иловагӣ илова кунед. Ин инчунин ба шумо имкон медиҳад, ки имкониятҳои полиморфизмро тавассути иваз кардани арзиши enum дар ҷойҳое истифода баред, ки намуди интерфейси амалӣ лозим аст.

68. Оё Enum синфро васеъ карда метавонад?

Не, ин наметавонад, зеро enum зерсинфи пешфарзии синфи умумии Enum <T> мебошад , ки дар он T намуди умумии enum-ро ифода мекунад. Ин ҷуз як синфи асосии умумӣ барои ҳама намудҳои enum забони Java чизе нест. Табдил додани enum ба синф аз ҷониби компилятори Java дар вақти компиляция анҷом дода мешавад. Ин васеъкунӣ дар code ба таври возеҳ нишон дода нашудааст, аммо ҳамеша ба таври ноаён мавҷуд аст.

69. Оё бе мисолҳои an objectӣ Enum эҷод кардан мумкин аст?

Ман бошам, савол каме аҷиб аст, ё ман онро пурра нафаҳмидам. Ман ду тафсир дорам: 1. Оё рақами бе арзиш вуҷуд дорад - ҳа, албатта, он чизе монанди синфи холӣ хоҳад буд - бемаънӣ:
public enum Role {
}
Ва занг зада:
var s = Role.values();
System.out.println(s);
Мо дар консол мегирем:
[Lflyweight.Role;@9f70c54
(массиви холии арзишҳои нақш ) 2. Оё бе оператори нав рақам эҷод кардан мумкин аст - ҳа, албатта. Тавре ки ман дар боло гуфтам, ба шумо лозим нест, ки оператори навро барои арзишҳои рақамӣ (шумораҳо) истифода баред , зеро ин арзишҳои статикӣ мебошанд.

70. Оё мо метавонем усули toString()-ро барои Enum бекор кунем?

Бале, албатта шумо метавонед усули toString()- ро бекор кунед , то роҳи мушаххаси намоиши рақами худро ҳангоми занг задан ба усули toString муайян кунед (ҳангоми тарҷумаи enum ба сатри муқаррарӣ, масалан, барои баромад ба консол ё гузоришҳо).
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD;

   @Override
   public String toString() {
       return "Выбрана роль - " + super.toString();
   }
}
Ин ҳама барои имрӯз аст, то қисми оянда!Таҳлor саволҳо ва ҷавобҳо аз мусоҳибаҳо барои таҳиягари Java.  Кисми 7-6
Дигар маводҳо дар силсила:
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION