JavaRush /Java блогы /Random-KK /Java әзірлеушісіне арналған сұхбаттардағы сұрақтар мен жа...
Константин
Деңгей

Java әзірлеушісіне арналған сұхбаттардағы сұрақтар мен жауаптарды талдау. 2-бөлім

Топта жарияланған
Барлығына тағы да сәлем! Біз кіші, орта және аға әзірлеушілерге арналған 250+ сұраққа жауап іздеуді жалғастырамыз . Сұрақтар өте қызықты, мен өзім оларды талдауды ұнатамын: мұндай сәттерде сіз теориялық білімдегі олқылықтарды және ең күтпеген жерден таба аласыз. Алдыңғы бөлімді осы мақаладанСұхбат сұрақтары мен жауаптарын талдау.  2 - 1 бөлім табуға болады . Бірақ біз бастамас бұрын мен сізге мынаны еске салғым келеді:
  1. Ақпаратты қайталамау үшін осы мақалалар сериясымен қиылысатын сұрақтарды өткізіп жіберемін. Мен бұл материалдарды оқуды ұсынамын, өйткені оларда Java Core сұхбатының ең кең тараған (танымал) сұрақтары бар.
  2. DOU сұрақтары украин тілінде берілген, бірақ менде бәрі орыс тілінде болады.
  3. Жауаптарды егжей-тегжейлі сипаттауға болады, бірақ мен айтпаймын, содан бері әрбір сұраққа жауап тұтас мақаланы алуы мүмкін. Олар кез келген сұхбатта сізден егжей-тегжейлі сұрамайды.
Қажет болса, тереңірек зерттеу үшін сілтемелер қалдырамын. Ұшайық!

11. Object класының барлық әдістерін атаңыз

Object класында 11 әдіс бар:
  • Class<?> getClass() — ағымдағы an objectінің класын алу;
  • int hashCode() — ағымдағы an objectінің хэш codeын алу;
  • boolean equals​(Object obj) – ағымдағы нысанды басқасымен салыстыру;
  • Object clone() – ағымдағы an objectінің көшірмесін жасау және қайтару;
  • String toString() — нысанның жолдық көрінісін алу;
  • void notify() – осы нысанның мониторында күтіп тұрған бір ағынды ояту (ағынды таңдау кездейсоқ);
  • void notifyAll() – осы нысанның мониторында күтіп тұрған барлық ағындарды оятады;
  • void wait() – ағымдағы ағынды ағымдағы мониторда күту режиміне ауыстырады (оны қатырады), кейбірі notify немесе notifyAll ағынды оятпайынша, тек синхрондалған блокта жұмыс істейді;
  • void күту(ұзақ күту уақыты) - ағымдағы монитордағы (ағымдағы синхрондалған) ағымдағы ағынды да тоқтатады, бірақ осы күйден шығуға арналған таймермен (немесе қайтадан: хабарландыру немесе notifyAll оянғанша);
  • void wait(ұзақ күту уақыты, int nanos) - жоғарыда сипатталғанға ұқсас әдіс, бірақ қатып қалудан шығу үшін дәлірек таймерлері бар;
  • void finalize() - бұл нысанды жоймас бұрын, қоқыс жинаушы бұл әдісті шақырады (соңында). Ол басып алынған ресурстарды тазарту үшін қолданылады.
hashCode , equals​ , clone , toString және finalize әдістерін дұрыс пайдалану үшін олар ағымдағы тапсырма мен жағдайларды ескере отырып, қайта анықталуы керек.

12. Ресурстармен жұмыс істеу кезінде сынап көру және ресурспен жұмыс істеу арасындағы айырмашылық неде?

Әдетте try-catch-finally пайдалану кезінде соңғы блок ресурстарды жабу үшін пайдаланылды. Java 7 ресурстарды босатуға арналған try-catch-finally аналогы болып табылатын try-with- resours операторының жаңа түрін енгізді , бірақ ықшам әрі оқылатын. 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();
   }
}
Енді осы codeты қайта жазайық, бірақ try-with-resources арқылы :
String text = "some text......";
try(BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("someFileName"))) {
   bufferedWriter.write(text);
} catch (IOException e) {
   e.printStackTrace();
}
Қалай ойлайсыз, бұл оңайырақ болды, солай емес пе? Жеңілдетуден басқа, бірнеше тармақ бар:
  1. Resources әрекетінде жақша ішінде жарияланған ресурстар (жабылатын) AutoCloseable интерфейсін және оның жалғыз әдісін, close() іске асыруы керек .

    Close әдісі жасырын finally блокта орындалады , әйтпесе бағдарлама берілген ресурсты қалай жабу керектігін қалай түсінеді?

    Бірақ, ең алдымен, сіз өзіңіздің ресурстарды іске асыруды және оларды жабу әдісін сирек жазасыз.

  2. Блоктың орындалу реті:

    1. блоктауға тырысыңыз .
    2. Ақырында жасырын .
    3. Алдыңғы қадамдардағы ерекше жағдайларды ұстайтын catch блогы .
    4. Ақырында анық .

    Әдетте, тізімде төменірек көрінетін ерекшеліктер жоғарырақ көрінетіндерді үзеді.

try-catch-finally пайдалану кезінде try ішінде ерекше жағдай орын алатын жағдайды елестетіп көріңіз . Сәйкесінше, нақты ұстау блогы бірден орындай бастайды , онда сіз басқа ерекше жағдайды жазасыз (мысалы, қатені егжей-тегжейлі сипаттайтын хабарламамен) және әдіс осы ерекшелікті одан әрі шығаруды қалайсыз. Әрі қарай finally блогының орындалуы келеді және оған ерекше жағдай да жіберіледі. Бірақ бұл басқаша. Бұл әдіс ақыр соңында осы екі ерекшеліктің қайсысын шығарады? Соңғы блок тастаған ерекше жағдай ! Бірақ ресурстармен жұмыс істеудің бір нүктесі бар . Енді сол жағдайдағы ресурстармен әрекеттесу әрекетін қарастырайық . Біз close() әдісінде ресурстарды жабуға тырысқанда try блогында ерекше жағдайды аламыз , яғни жасырын финалда . Осы ерекшеліктердің қайсысы болады ? Тренинг блогы лақтырған ! Жанама ақыр соңында ( close() әдісінен ) ерекшелік еленбейді. Бұл елемеу ерекше жағдайды басу деп те аталады.

13. Биттік амалдар дегеніміз не?

Биттік операциялар - бұл логикалық операциялар мен разрядтық жылжуларды қамтитын разрядтық жолдардағы операциялар. Логикалық операциялар:
  • биттік ЖӘНЕ - бит мәндерін салыстырады және процесте 0 (жалған) мәніне орнатылған кез келген бит нәтижедегі сәйкес битті 0 етіп орнатады. Яғни, салыстырылатын екі мәнде де бит 1 (шын) болса, нәтиже де 1 болады.

    - ЖӘНЕ , & ретінде белгіленеді

    Мысалы: 10111101 & 01100111 = 00100101

  • биттік НЕМЕСЕ алдыңғыға кері операция. 1 мәніне орнатылған кез келген бит нәтижедегі ұқсас битті 1 ретінде орнатады. Сәйкесінше, салыстырылған екі мәнде де бит 0 болса, нәтиже бит де 0 болады.

    - НЕМЕСЕ , | ретінде белгіленеді

    Мысалы: 10100101 | 01100011 = 11100111

  • биттік ЕМЕС – бір мәнге қолданылады, биттерді аударады (инверттейді). Яғни, 1 болған биттер 0-ге айналады; ал 0 болғандар 1 болады.

    - ЕМЕС , ~ деп белгіленеді

    Мысалы: ~10100101 = 01011010

  • биттік эксклюзивті НЕМЕСЕ - бит мәндерін салыстырады және екі мәнде де бит 1-ге тең болса, нәтиже 0 болады, ал екі мәнде де бит 0 болса, нәтиже 0 болады. Яғни, нәтиже 1-ге тең болуы үшін биттердің тек біреуі 1-ге, ал екіншісі 0-ге тең болуы керек.

    - XOR , ^ ретінде белгіленеді

    Мысалы: 10100101 ^ 01100011 = 11000110

Биттік жылжытулар - >> немесе << мәннің биттерін көрсетілген бағытта, көрсетілген сан бойынша жылжытады. Бос орындар нөлдермен толтырылады. Мысалы:
  1. 01100011 >> 4 = 00000110
  2. 01100011 << 3 = 00011000
Теріс санды оңға жылжыту кезінде де ерекшелік бар. Естеріңізде болса, бірінші бит таңбаға жауапты, ал егер бұл бит 1-ге тең болса, онда сан теріс болады. Теріс санды жылжытсаңыз, бос орындар енді нөлдермен емес, бірлермен толтырылады, өйткені белгі битін сақтау қажет. Мысалы: 10100010 >> 2 = 11101000 Сонымен қатар, Java-да қосымша таңбасыз оңға жылжыту операторы бар >>> Бұл оператор >> аналогы болып табылады, ауыстыру кезінде бос орындар 0-мен толтырылады. саны теріс немесе оң. Мысалы: 10100010 >>> 2 = 00101000 Биттік әрекеттер туралы толығырақ осы жерден оқыңыз . Сұхбат сұрақтары мен жауаптарын талдау.  2 - 2 бөлімJava тіліндегі разрядтық жылжуларды қолдану мысалдары ретінде кілт үшін арнайы ішкі хэш codeын анықтау үшін пайдаланылатын HashMap картасының hash()Сұхбат сұрақтары мен жауаптарын талдау.  2 - 3 бөлім әдісін беруге болады: Бұл әдіс деректерді азайту үшін HashMap жүйесінде біркелкі таратуға мүмкіндік береді. соқтығыстардың саны.

14. Java тіліндегі an objectілер қандай стандартты өзгермейтін класстар болып табылады?

Өзгермейтін – оның бастапқы параметрлерін өзгертуге мүмкіндік бермейтін an object. Оның өзгерткіңіз келетін параметрлері бар берілген түрдегі жаңа нысандарды қайтаратын әдістер болуы мүмкін. Кейбір стандартты өзгермейтін нысандар:
  • Java тіліндегі ең танымал өзгермейтін нысан – String;
  • стандартты типтерді орайтын орауыш сыныптарының даналары: логикалық, таңба, byte, қысқа, бүтін, ұзын, қос, қалқымалы;
  • әдетте ерекше үлкен сандар үшін қолданылатын нысандар - BigInteger және BigDecimal;
  • стектректердегі бірлік болып табылатын нысан (мысалы, ерекшелік стектрегі) StackTraceElement;
  • File класының an objectісі - файлдарды өзгерте алады, бірақ сонымен бірге оның өзі өзгермейді;
  • UUID - элементтер үшін бірегей идентификатор ретінде жиі пайдаланылады;
  • java.time пакетінің барлық класс an objectілері;
  • Жергілікті жер – географиялық, саяси немесе мәдени аймақты анықтау үшін қолданылады.

15. Тұрақты an objectілерден өзгермейтін an objectінің артықшылығы неде?

  1. Мұндай нысандар көп ағынды ортада пайдаланылған кезде қауіпсіз . Оларды пайдалану арқылы сіз ағындық жарыс жағдайларына байланысты деректерді жоғалту туралы алаңдамайсыз. Қарапайым an objectілермен жұмыс істеуден айырмашылығы: бұл жағдайда өте мұқият ойластырып, an objectіні параллельді ортада пайдалану механизмдерін пысықтауға тура келеді.
  2. Өзгермейтін нысандар картадағы жақсы кілттер болып табылады, өйткені өзгермелі нысанды пайдалансаңыз, содан кейін нысан оның күйін өзгертсе, ол HashMap пайдалану кезінде түсініксіз болуы мүмкін: нысан әлі де болады, ал егер сіз containKey() пайдалансаңыз , ол болмауы мүмкін. табылуы.
  3. Өзгермейтін нысандар бағдарлама жұмыс істеп тұрған кезде ешқашан өзгертілмейтін өзгермейтін (тұрақты) деректерді сақтау үшін тамаша.
  4. «Сәтсіздікке дейін атомдық» - егер өзгермейтін an object ерекше жағдайды шығарса, ол әлі де қажетсіз (бұзылған) күйде қалмайды.
  5. Бұл сабақтарды тексеру оңай.
  6. Көшіру конструкторы және клонды жүзеге асыру сияқты қосымша механизмдер қажет емес.

OOP туралы сұрақтар

Сұхбат сұрақтары мен жауаптарын талдау.  2 - 4 бөлім

16. Жалпы және proceduresалық бағдарламалаумен салыстырғанда OOP артықшылығы қандай?

Сонымен, OOP артықшылықтары:
  1. Процедуралық бағдарламалауға қарағанда күрделі қолданбаларды жазу оңай, өйткені барлығы шағын модульдерге - бір-бірімен әрекеттесетін an objectілерге бөлінеді және нәтижесінде бағдарламалау an objectілер арасындағы қатынастарға түседі.
  2. OOP көмегімен жазылған қолданбаларды өзгерту оңайырақ (дизайн тұжырымдамалары сақталған кезде).
  3. Деректер мен ондағы операциялар біртұтас нысанды құрайтындықтан, олар қолданбаның бүкіл бойына жағылмайды (бұл көбінесе proceduresалық бағдарламалауда болады).
  4. Ақпаратты инкапсуляциялау пайдаланушыдан ең маңызды деректерді қорғайды.
  5. Бір codeты әртүрлі деректермен қайта пайдалануға болады, өйткені класстар әрқайсысының өзіндік атрибут мәндері бар көптеген an objectілерді жасауға мүмкіндік береді.
  6. Мұрагерлік және полиморфизм сонымен қатар бар codeты қайта пайдалануға және кеңейтуге мүмкіндік береді (ұқсас функционалдылықты қайталаудың орнына).
  7. Процедуралық тәсілге қарағанда қолданбаның кеңеюі оңайырақ.
  8. OOP тәсілі іске асыру мәліметтерінен абстракциялауға мүмкіндік береді.

17. OOP-та қандай кемшіліктер бар екенін айтыңыз

Өкінішке орай, олар да бар:
  1. OOP бірдеңе жаза алмас бұрын меңгеру қажет көптеген теориялық білімді талап етеді.Сұхбат сұрақтары мен жауаптарын талдау.  2 - 5 бөлім
  2. OOP идеяларын түсіну және іс жүзінде қолдану оңай емес (сіз жүрегіңізде аздап философ болуыңыз керек).
  3. OOP пайдаланған кезде бағдарламалық қамтамасыз етудің өнімділігі жүйенің неғұрлым күрделі ұйымдастырылуына байланысты аздап төмендейді.
  4. OOP тәсілі көбірек жадты қажет етеді, өйткені барлығы класстардан, интерфейстерден, әдістерден тұрады, олар қарапайым айнымалыларға қарағанда әлдеқайда көп жадты алады.
  5. Бастапқы талдауға қажетті уақыт proceduresалық талдауға қарағанда көбірек.

18. Статикалық және динамикалық полиморфизм дегеніміз не

Полиморфизм an objectілерге бір сынып немесе интерфейс үшін басқаша әрекет етуге мүмкіндік береді. Полиморфизмнің екі түрі бар, олар ерте және кеш байланыстыру деп те аталады . Статикалық полиморфизм немесе ертерек байланыстыру:
  • компиляция уақытында (бағдарламаның өмірлік циклінің басында) орын алады;
  • компиляция уақытында қандай әдісті орындау керектігін шешеді;
  • Әдістің шамадан тыс жүктелуі статикалық полиморфизмнің мысалы болып табылады;
  • ерте байланыстыру жеке, статикалық және терминалдық әдістерді қамтиды;
  • мұрагерлік ерте байланыстыруға қатыспайды;
  • Статикалық полиморфизм нақты an objectілерді қамтымайды, бірақ типі айнымалы атының сол жағында көрсетілген класс туралы ақпаратты қамтиды.
Динамикалық полиморфизм немесе кеш байланыстыру:
  • орындалу уақытында пайда болады (бағдарлама жұмыс істеп тұрғанда);
  • динамикалық полиморфизм әдістің орындалу уақытында қандай нақты іске асыруға ие болатынын шешеді;
  • әдісті қайта анықтау динамикалық полиморфизмнің мысалы болып табылады;
  • кеш байлау – белгілі бір an objectіні, оның түрінің сілтемесін немесе оның суперсыныбын тағайындау;
  • тұқым қуалаушылық динамикалық полиморфизммен байланысты.
Ерте және кеш байлау арасындағы айырмашылықтар туралы толығырақ осы мақаладан оқи аласыз .

19. ООП-та абстракция принципін анықтаңыз

OOP-тағы абстракция - маңызды емес бөлшектерді қоспағанда, an objectінің маңызды сипаттамаларының жиынтығын бөлектеу тәсілі. Яғни, OOP тәсілі бар бағдарламаны құрастыру кезінде сіз олардың орындалуының егжей-тегжейіне терең бойлай алмай, жалпы үлгілерге назар аударасыз. Java тілінде интерфейстер абстракцияға жауап береді . Мысалы, сізде машина бар және бұл интерфейс болады. Және онымен әртүрлі өзара әрекеттесулер - мысалы, қозғалтқышты іске қосу, беріліс қорабын пайдалану - бұл біз іске асыру туралы егжей-тегжейлерге бармай-ақ қолданатын функциялар. Өйткені, сіз көлікті басқаратын сәтте сіз беріліс қорабы өз мақсатын қалай орындайтыны немесе кілт қозғалтқышты қалай іске қосатыны немесе руль дөңгелегі дөңгелектерді қалай бұратыны туралы ойланбайсыз. Және бұл функцияның біреуін жүзеге асыру ауыстырылса да (мысалы, қозғалтқыш), сіз оны байқамауыңыз мүмкін. Бұл сізге маңызды емес: сіз іске асырудың егжей-тегжейіне кірмейсіз. Сіз үшін әрекеттің орындалғаны маңызды. Шын мәнінде, бұл іске асыру мәліметтерінен абстракциялау. Міне, біз бүгін тоқталамыз: жалғасы!Сұхбат сұрақтары мен жауаптарын талдау.  2 - 6 бөлім
Сериядағы басқа материалдар:
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION