JavaRush /Java блогу /Random-KY /Java иштеп чыгуучусу үчүн интервьюдан алынган суроолордун...
Константин
Деңгээл

Java иштеп чыгуучусу үчүн интервьюдан алынган суроолордун жана жооптордун анализи. 2 бөлүк

Группада жарыяланган
Баарына дагы бир жолу салам! Биз кенже, орто жана улук иштеп чыгуучулар үчүн 250+ суроолорго жооп издөөнү улантабыз . Суроолор абдан кызыктуу, мен өзүм аларды талдоону жакшы көрөм: мындай учурда теориялык бorмдеги боштуктарды жана эң күтүлбөгөн жерден таба аласыз. Мурунку бөлүгүн ушул макаладанИнтервьюдагы суроолорду жана жоопторду талдоо.  2-1-бөлүк тапса болот . Бирок, биз баштоодон мурун, мен сизге эскертип кетким келет:
  1. Маалыматты дагы бир жолу кайталабоо үчүн ушул макалалар сериясы менен кесorшкен суроолорду өткөрүп жиберем. Мен бул материалдарды окууну сунуштайм, анткени алар эң кеңири тараган (популярдуу) Java Core интервью суроолорун камтыйт.
  2. DOU боюнча суроолор украин тorнде берилген, бирок менде баары орус тorнде болот.
  3. Жооптор кененирээк сүрөттөлсө болот, бирок мен айтпайм, ошондон бери ар бир суроонун жообу бүтүндөй бир макаланы алышы мүмкүн. Жана алар эч кандай интервьюда сизден мынчалык майда-чүйдөсүнө чейин сурашпайт.
Керек болсо, тереңирээк изилдөө үчүн шилтемелерди калтырам. учуп кетели!

11. Object классынын бардык методдорун атаңыз

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

12. Ресурстар менен иштөөдө ресурстар менен аракет кылуу жана акырында аракет кылуунун ортосунда кандай айырма бар?

Адатта, try-catch-finally колдонууда акыркы блок ресурстарды жабуу үчүн колдонулган. Java 7 ресурстарды бошотуу үчүн try-catch-finally аналогу болгон try- with-resources операторунун жаңы түрүн киргизди , бирок кыйла компакттуу жана окула турган. 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ду кайра жазалы, бирок ресурстар менен аракет кылууну колдонуп :
String text = "some text......";
try(BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("someFileName"))) {
   bufferedWriter.write(text);
} catch (IOException e) {
   e.printStackTrace();
}
Бул кандайдыр бир жол менен оңой болуп калды, сиз ойлобойсузбу? Жөнөкөйлөтүүдөн тышкары, бир нече пункттар бар:
  1. Try -with-sources , кашаанын ичинде жарыяланган ресурстар (жабыла турган) AutoCloseable интерфейсин жана анын жападан жалгыз ыкмасын, close() ишке ашырышы керек .

    Close методу кыйыр түрдө аткарылган finally block , антпесе программа берилген ресурсту кантип жабууну так түшүнөт?

    Бирок, балким, сиз сейрек өзүңүздүн ресурстарды ишке ашырууну жана аларды жабуу ыкмасын жазасыз.

  2. Блоктун аткарылышынын ырааттуулугу:

    1. бөгөт коюуга аракет кыл .
    2. Акыры . _
    3. Мурунку кадамдардагы өзгөчө учурларды кармаган кармоо блогу .
    4. Акыры ачык .

    Эреже катары, тизмеде төмөн көрүнгөн өзгөчөлүктөр жогору көрүнгөндөрдү үзөт.

try-catch-finally колдонууда сиздин аракетиңизде өзгөчө жагдай пайда болгон жагдайды элестетиңиз. Демек, белгилүү бир кармоо блогу дароо аткарыла баштайт , анда сиз дагы бир өзгөчөлүктү жазасыз (мисалы, катаны кененирээк сүрөттөгөн билдирүү менен) жана сиз ыкма бул өзгөчөлүктү андан ары ыргытууну каалайсыз. Андан кийин finally блоктун аткарылышы келет жана ага өзгөчө жагдай да киргизилет. Бирок бул башка. Бул эки өзгөчөлүктүн кайсынысын бул ыкма акыры ыргытат? Акыркы блок тарабынан ыргытылган өзгөчөлүк ! Бирок ресурстар менен аракет кылууда дагы бир жагдай бар . Эми ошол эле кырдаалда ресурстар менен аракет кылуунун жүрүм-турумун карап көрөлү . Биз close() методунда ресурстарды жабууга аракет кылганда try блогунда өзгөчө учурду алабыз , башкача айтканда, акырында . Бул өзгөчөлүктөрдүн кайсынысын кармайт ? Бул аракет блогу тарабынан ыргытылган ! Ыкчам акырында ( class() методунан) өзгөчө учур этибарга алынbyte. Бул көңүл бурбоо, ошондой эле өзгөчө кырдаалды басуу деп аталат.

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 тorндеги an objectилер кандай стандарттуу өзгөрүлгүс класстар болуп саналат?

Өзгөрбөс - бул баштапкы параметрлерин өзгөртүүгө жол бербеген an object. Анын сиз өзгөрткүңүз келген параметрлери менен берилген типтеги жаңы an objectтерди кайтаруучу ыкмалары болушу мүмкүн. Кээ бир стандарттуу өзгөрүлгүс an objectтер:
  • Javaдагы эң атактуу өзгөрүлгүс an object бул String;
  • стандарттык түрлөрүн орогон орогуч класстарынын мисалдары: Буль, Символ, Байт, Кыска, Бүтүн, Узун, Кош, Float;
  • адатта өзгөчө УЛУУ сандар үчүн колдонулган an objectтер - BigInteger жана BigDecimal;
  • stacktracesдеги бирдик болгон an object (мисалы, өзгөчө стэктректе) StackTraceElement;
  • File классынын an objectиси - файлдарды өзгөртө алат, бирок ошол эле учурда анын өзү өзгөрүлбөйт;
  • UUID - көбүнчө элементтер үчүн уникалдуу id катары колдонулат;
  • java.time пакетинин бардык класс an objectтери;
  • Locale - географиялык, саясий же маданий аймакты аныктоо үчүн колдонулат.

15. Өзгөрбөс an objectтин кадимки an objectилерден кандай артыкчылыктары бар?

  1. Мындай an objectтер көп жиптүү чөйрөдө колдонулганда коопсуз . Аларды колдонуу менен, жип жарыш шарттарына байланыштуу маалыматтарды жоготуп алуудан коркпоңуз. Кадимки an objectилер менен иштөөдөн айырмаланып: бул учурда абдан кылдаттык менен ойлонуп, параллелдүү чөйрөдө an objectти колдонуу механизмдерин иштеп чыгууга туура келет.
  2. Өзгөрүлгүс an objectтер картада жакшы ачкычтар болуп саналат, анткени сиз өзгөрүлүүчү an objectти колдонсоңуз жана андан кийин an object анын абалын өзгөртсө, HashMap колдонуу башаламандыкка алып келиши мүмкүн: an object дагы эле бар болот, жана эгерде сиз containKey() колдонсоңуз , ал болбой калышы мүмкүн. табылган.
  3. Өзгөрүлбөс an objectтер программа иштеп жатканда эч качан өзгөртүлбөшү керек болгон өзгөрүлгүс (туруктуу) маалыматтарды сактоо үчүн эң сонун.
  4. "Атомдуктун бузулушу" - эгерде өзгөрүлгүс an object өзгөчө учурду таштаса, ал дагы эле керексиз (сынган) абалда калbyte.
  5. Бул класстарды текшерүү оңой.
  6. Көчүрмө конструктор жана клондук ишке ашыруу сыяктуу кошумча механизмдердин кереги жок.

OOP жөнүндө суроолор

Интервьюдагы суроолорду жана жоопторду талдоо.  2-4-бөлүк

16. Процедуралык программалоо менен салыштырганда жалпысынан ООПтун кандай артыкчылыктары бар?

Ошентип, OOP артыкчылыктары:
  1. Процедуралык программалоого караганда татаал тиркемелерди жазуу оңой, анткени баары чакан модулдарга - бири-бири менен өз ара аракеттенүүчү an objectтерге бөлүнөт жана натыйжада программалоо an objectтер ортосундагы мамилелерге келет.
  2. OOP аркылуу жазылган тиркемелерди өзгөртүү оңой (дизайн концепциялары сакталган шартта).
  3. Берorштер жана андагы операциялар бир бүтүндүктү түзгөндүктөн, алар колдонмонун бүткүлүндө булганbyte (бул көбүнчө proceduresалык программалоодо болот).
  4. Маалымат инкапсуляциясы колдонуучудан эң маанилүү маалыматтарды коргойт.
  5. Бир эле codeду ар кандай маалыматтар менен кайра колдонууга болот, анткени класстар көптөгөн an objectтерди түзүүгө мүмкүндүк берет, алардын ар бири өзүнүн атрибут баалуулуктарына ээ.
  6. Мурас жана полиморфизм ошондой эле учурдагы codeду кайра колдонууга жана кеңейтүүгө мүмкүндүк берет (окшош функцияларды кайталоонун ордуна).
  7. Процедуралык ыкмага караганда колдонмонун кеңейиши оңой.
  8. OOP ыкмасы ишке ашыруунун деталдарынан абстракциялоого мүмкүндүк берет.

17. ООПто кандай кемчorктер бар экенин айткыла

Тилекке каршы, алар да бар:
  1. OOP бир нерсени жазуудан мурун өздөштүрүү керек болгон көптөгөн теориялык бorмди талап кылат.Интервьюдагы суроолорду жана жоопторду талдоо.  2-5-бөлүк
  2. OOP идеяларын түшүнүү жана иш жүзүндө колдонуу анчалык деле оңой эмес (сиз бир аз философ болушуңуз керек).
  3. OOP колдонууда программалык камсыздоонун иштеши системанын татаалыраак уюштурулушуна байланыштуу бир аз төмөндөйт.
  4. OOP ыкмасы көбүрөөк эстутумду талап кылат, анткени бардыгы класстардан, интерфейстерден, методдордон турат, алар кадимки өзгөрмөлөргө караганда көбүрөөк эстутумду ээлейт.
  5. Алгачкы талдоо үчүн талап кылынган убакыт proceduresалыкка караганда көбүрөөк.

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

Полиморфизм an objectтердин бир эле класс же интерфейс үчүн өзүн башкача алып жүрүүсүнө мүмкүндүк берет. Полиморфизмдин эки түрү бар, алар эрте жана кеч байланыш деп да белгилүү . Статикалык полиморфизм же мурунку байланыш:
  • компиляция убагында пайда болот (программанын жашоо циклинин башында);
  • компиляция убагында кайсы ыкманы аткарууну чечет;
  • Методду ашыкча жүктөө статикалык полиморфизмдин мисалы болуп саналат;
  • эрте байлоо жеке, статикалык жана терминалдык ыкмаларды камтыйт;
  • мурастоо мөөнөтүнөн мурда түзүүгө катышпайт;
  • Статикалык полиморфизм конкреттүү an objectтерди камтыbyte, бирок түрү өзгөрмө аталышынын сол жагында көрсөтүлгөн класс жөнүндө маалымат.
Динамикалык полиморфизм же кеч байланыш:
  • иштөө убагында пайда болот (программа иштеп жатканда);
  • динамикалык полиморфизм методдун иштөө убагында кандай конкреттүү ишке ашырууну чечет;
  • методду жокко чыгаруу динамикалык полиморфизмдин мисалы болуп саналат;
  • кеч жабдылышы - белгилүү бир an objectтин ыйгаруу, анын түрүнө шилтеме же анын суперклассы;
  • тукум куучулук динамикалык полиморфизм менен байланышкан.
Бул макалада эрте жана кеч байланыштын ортосундагы айырмачылыктар жөнүндө көбүрөөк окуй аласыз .

19. ООПдагы абстракция принцибине аныктама бериңиз

OOPдогу абстракция - бул маанилүү эмес деталдарды кошпогондо, an objectтин маанилүү мүнөздөмөлөрүнүн жыйындысын бөлүп көрсөтүү жолу. Башкача айтканда, программаны OOP ыкмасы менен иштеп чыгууда, сиз аларды ишке ашыруунун деталдарына тереңдеп кирбестен, жалпысынан моделдерге көңүл бурасыз. Java тorнде интерфейстер абстракция үчүн жооптуу . Мисалы, сизде машина бар жана бул интерфейс болот. Жана аны менен болгон ар кандай өз ара аракеттешүүлөр - мисалы, кыймылдаткычты иштетүү, редукторду колдонуу - бул биз ишке ашыруунун деталдарына кирбестен колдоно турган функциялар. Анткени, сиз машина айдап бараткан учурда редуктор кандайча өз максатын так аткарат, же ачкыч моторду кантип иштетет, же руль дөңгөлөктөрүн так кантип айлантат деп ойлобойсуз. Жана бул функциялардын бирин ишке ашыруу алмаштырылса да (мисалы, кыймылдаткыч), сиз аны байкабай калышыңыз мүмкүн. Бул сиз үчүн эч кандай мааниге ээ эмес: сиз ишке ашыруунун деталдарына кирбейсиз. Сиз үчүн бул иш-аракеттердин аткарылышы маанилүү. Чынында, бул ишке ашыруунун деталдарынан абстракция. Бул жерде биз бүгүн токтойбуз: улантуу үчүн!Интервьюдагы суроолорду жана жоопторду талдоо.  2-6-бөлүк
Сериядагы башка материалдар:
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION