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

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

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

  2. Сұрақтар украин тілінде берілген, бірақ JavaRush қатысушыларының көпшілігі орыстілді болғандықтан (және көбіне мен де), жауаптар орыс тілінде болады.

  3. Жауаптар қысқа болады, өйткені сіз егжей-тегжейлі жазсаңыз, кейбір сұрақтарға жауаптар бөлек мақаланы қажет етуі мүмкін. Сұхбат кезінде мұндай егжей-тегжейлі және көлемді жауаптардың қажеті жоқ, өйткені сұхбат берушіде сізден қажетті тақырыптар бойынша сұхбат алу үшін бар болғаны бір сағат уақыт бар (және есіңізде болса, бұл жеткілікті). Тереңірек қазуды ұнататындар үшін сілтемелер қалдырамын.

Сонымен, бастайық.

Кіші деңгейдегі сұрақтар мен жауаптар

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

Жалпы мәселелер

1. Қандай дизайн үлгілерін білесіңдер? Жұмысыңызда пайдаланған екі үлгі туралы айтып беріңіз.

Үлгілердің алуан түрлілігі бар: олармен осы және осы мақаладан танысуға болады . Олармен егжей-тегжейлі танысқысы келетіндер үшін мен «Алдымен бас. Дизайн үлгілері» . Оның көмегімен сіз ең негізгі дизайн үлгілерін егжей-тегжейлі және оңай зерттей аласыз. Сұхбатта мысал ретінде пайдалануға болатын дизайн үлгілері туралы айтатын болсақ, кейбіреулері еске түседі:
  • Builder – жиі қолданылатын үлгі, классикалық an object құруға балама;
  • Полиморфизмді білдіретін стратегия үлгісі . Яғни, бізде бір интерфейс бар, бірақ бағдарламаның әрекеті осы интерфейстің функционалдылыққа қандай нақты іске асырылғанына байланысты өзгереді (қазір стратегия java қолданбаларында іс жүзінде барлық жерде қолданылады).
Егер бұл сізге жеткіліксіз болса, көктемге назар аударыңыз (егер сіз онымен бұрыннан таныс болсаңыз), өйткені бұл өз кезегінде жоғары және төмен өрнектермен толтырылған рамалардың тұтас платформасы. Міне, мен айтып отырған нәрсенің бірнеше мысалы:
  • Зауыттық - ApplicationContext (немесе BeanFactory-де);
  • Singleton - барлық бұршақтар әдепкі бойынша синглтондар болып табылады;
  • Прокси - іс жүзінде көктемдегі барлық нәрсе осы үлгіні бір немесе басқа жолмен пайдаланады, мысалы, AOP;
  • Жауапкершілік тізбегі - Spring Security жұмыс істейтін тұжырымдамаға негізделген үлгі;
  • Үлгі - Spring Jdbc-де қолданылады.

Java ядросы

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

2. Java тілінде қандай деректер типтері бар?

Java-да қарапайым деректер түрлері бар:
  • byte — -128-ден 127-ге дейінгі аралықтағы бүтін сандар, салмағы 1 byte;
  • қысқа — -32768-ден 32767-ге дейінгі диапазондағы бүтін сандар, салмағы 2 byte;
  • int — бүтін сандар -2147483648-ден 2147483647-ге дейін, салмағы 4 byte;
  • ұзын — 9223372036854775808-ден 9223372036854775807-ге дейінгі диапазондағы бүтін сандар, салмағы 8 byte;
  • float — өзгермелі нүктелі сандар -3,4E+38-ден 3,4E+38 аралығында, салмағы 4 byte;
  • double — -1,7E+308 ден 1,7E+308 аралығындағы өзгермелі нүктелі сандар, салмағы 8 byte;
  • char — UTF-16-дағы жалғыз таңбалар, салмағы 2 byte;
  • логикалық мәндер true/false , салмағы 1 byte.
Үймедегі нысандарды көрсететін сілтеме деректер түрлері .

3. Объектінің қарапайым деректер түрлерінен айырмашылығы неде?

Бірінші айырмашылық: алатын жады көлемі: примитивтер өте аз орын алады, өйткені оларда тек өз мәні бар, ал нысандарда өте, өте көп әртүрлі мәндер болуы мүмкін: қарабайырлар да, басқа an objectілерге сілтемелер де. Екінші айырмашылық: Java - an objectіге бағытталған тіл, сондықтан ондағы барлық нәрсе an objectілер арасындағы өзара әрекеттесу арқылы жұмыс істейді, ал примитивтер өте жақсы сәйкес келмейді (шын мәнінде Java 100% an objectіге бағытталған тіл емес). Үшіншіден, екіншісінен кейін: Java нысандар арасындағы өзара әрекеттесуге бағытталғандықтан, бұл нысандарда оларды басқарудың көптеген әртүрлі механизмдері бар. Мысалы, конструкторлар, әдістер, ерекшеліктер (негізінен an objectілерде жұмыс істейтін) т.б. Шындығында, примитивтер осы нысанға бағытталған ортаға қандай да бір түрде араласуы (жұмыс істеуі) үшін орауыштар қарабайыр түрлер үшін ойлап табылды ( Integer , Character , Double , Boolean ...)

4. Параметрлерді сілтеме бойынша және мән бойынша берудің айырмашылығы неде?

Қарапайым өрістер олардың мәнін сақтайды: мысалы, егер біз int i = 9 орнатсақ; i өрісінде 9 мәні сақталады . Бізде нысанға сілтеме болған кезде, бұл бізде нысанға сілтемесі бар немесе басқаша айтқанда, жадтағы нысан мекенжайының мәні бар өріс бар екенін білдіреді.
Cat cat = new Cat();
Нысанға сілтеме жасайтын өрістер мәндерді , жад мекенжайларының мәндерін де сақтайды . Яғни, cat жадта жаңа Cat() нысанының мекенжай мәнін сақтайды . Параметрді әдіске бергенде оның мәні көшіріледі. Қарапайым жағдайда, қарабайырдың мәні көшіріледі. Тиісінше, әдіс көшірмемен жұмыс істейді, өзгерту түпнұсқаға әсер етпейді. Сілтеме типі жағдайында жад мекенжайының мәні көшіріледі, сәйкесінше мекенжай ол көрсететін an objectімен бірдей болады. Ал егер осы жаңа сілтемені пайдаланып нысанды өзгертетін болсақ, ол ескіге өзгертіледі (егер екеуі бір нысанды көрсетеді).

5. JVM, JDK, JRE дегеніміз не?

JVM - Java виртуалды машинасы компилятор арқылы алдын ала жасалған Java byte codeымен жұмыс істейтін виртуалды машина. JRE – Java Runtime Environment – ​​бұл негізінен JVM , стандартты кітапханалар және Java бағдарламалау тілінде жазылған апплеттерді және қолданбаларды іске қосуға арналған басқа компоненттерді қамтитын java қолданбаларын іске қосу ортасы . Басқаша айтқанда , JRE компиляцияланған Java бағдарламасын іске қосу үшін қажетті барлық нәрсенің пакеті болып табылады, бірақ қолданбаларды әзірлеуге арналған компиляторлар немесе жөндеушілер сияқты құралдар мен утorталарды қамтымайды. JDK - Java Development Kit - JRE кеңейтілген жиынтығы , яғни іске қосу үшін ғана емес, сонымен қатар Java қосымшаларын әзірлеу үшін де орта. JDK JRE-дегі барлық нәрселерді, сонымен қатар Java-да қолданбаларды жасау үшін қажет әртүрлі қосымша құралдарды - компиляторларды және жөндеушілерді қамтиды (сонымен қатар java құжаттары бар).Сұхбат сұрақтары мен жауаптарын талдау.  1-4 бөлім

6. JVM не үшін қолданылады?

Жоғарыда айтылғандай, Java виртуалды машинасы компилятор алдын ала жасалған Java byte codeын іске қосатын виртуалды машина болып табылады. Яғни, JVM Java бастапқы codeын түсінбейді. Сондықтан, алдымен .java файлдары құрастырылады , олар компиляциядан кейін .class кеңейтімі бар және JVM түсінетін бірдей byte codeы түрінде ұсынылған. Әрбір ОЖ-де өзінің JVM бар, сондықтан byte-code файлдарын алған JVM оны орындайтын операциялық жүйеге бейімдеп орындайды. Шындығында, әртүрлі JVM-ге байланысты JDK (немесе JRE) нұсқалары әртүрлі ОЖ үшін ерекшеленеді (олардың әрқайсысына жеке JVM қажет). Басқа бағдарламалау тілдерінде әзірлеудің қалай жұмыс істейтінін еске түсірейік. Сіз бағдарламаны жасайсыз, содан кейін оның codeы белгілі бір ОЖ үшін машиналық codeқа жинақталады, содан кейін оны іске қосуға болады. Басқаша айтқанда, әр жүйе үшін бағдарламаның әртүрлі нұсқаларын жазу керек. Ал Java-да қосарлы codeты өңдеудің (JVM code byteтарын құрастыру және өңдеу) арқасында сіз кросс-платформаның артықшылықтарын пайдалана аласыз. Біз бір рет codeты жасадық, оны byte codeқа қайта құрастырдық, оны кез келген ОЖ-ға жібердік және жергілікті JVM codeты іске қосады. Бұл Java тілінің аңызға айналған қасиеті - бір рет жазыңыз, кез келген жерде іске қосыңыз . Сұхбат сұрақтары мен жауаптарын талдау.  1 - 5 бөлімБұл туралы толығырақ мақалада оқыңыз « Java қосымшаларын қаптама астында құрастыру және орындау ».

7. Байт-code дегеніміз не?

Жоғарыда айтқанымдай, компилятор Java codeын аралық byte codeқа (.java кеңейтімі бар файлдарды .class кеңейтімі бар файлдарға) түрлендіреді. Байтcode көп жағынан машиналық codeқа ұқсас, тек ол нақты процессордан емес, виртуалдыдан алынған нұсқаулар жинағын пайдаланады. Сонымен қатар, ол бағдарлама жұмыс істейтін нақты процессор үшін командалардың орындалуын оңтайландыратын JIT компиляторын пайдалануға бағытталған бөлімдерді қамтуы мүмкін. JIT компиляциясы, сонымен қатар жедел компиляция деп те аталады, бұл бағдарлама жұмыс істеп тұрған кезде byte codeты машинаға немесе басқа форматқа компиляциялау арқылы byte-codeты пайдаланатын бағдарламаның өнімділігін арттыратын технология. Сіз болжағандай, JVM byte codeты іске қосқан кезде JIT компиляторын пайдаланады. Байт-code мысалын қарастырайық: Сұхбат сұрақтары мен жауаптарын талдау.  1-6 бөлімТым оқылмайды, солай ма? Бұл біз үшін емес, JVM үшін нұсқау. Бұл мәселені жақсырақ түсінуге көмектесетін мақала .

8. JavaBean бағдарламасының сипаттамалары қандай?

JavaBeans - белгілі бір ережелері бар Java класы. Мұнда JavaBean жазудың кейбір ережелері берілген :
  1. Сыныпта жалпы қолжетімділік модификаторы бар бос (параметрлері жоқ) жалпыға қолжетімді конструктор болуы керек . Бұл конструктор осы сыныптың an objectісін қажетсіз проблемаларсыз жасауға мүмкіндік береді (параметрлермен қажетсіз әбігер болмас үшін).

  2. Сыныптың ішкі өрістеріне стандартты болуы керек get және set әдістері арқылы қол жеткізіледі. Мысалы, өріс атауы болса , getName және setName және т.б.. Бұл өз кезегінде әртүрлі құралдарға (жақтауларға) бұршақтың мазмұнын асқынусыз автоматты түрде анықтауға және жаңартуға мүмкіндік береді.

  3. Сыныпта equals() hashCode() және toString() әдістерінің қайта анықталған нұсқалары болуы керек .

  4. Класс серияланатын болуы керек, яғни оның маркерлік интерфейсі болуы керек - Серияланатын немесе Externalizable интерфейсін жүзеге асыру . Бұл бұршақтың күйін сенімді түрде сақтау, сақтау және қалпына келтіру үшін қажет.

Сұхбат сұрақтары мен жауаптарын талдау.  1-7 бөлімJavaBeans түрлері туралы осы материалдан оқуға болады .

9. OutOfMemoryError дегеніміз не?

OutOfMemoryError — Java виртуалды машинасының (JVM) жұмысымен байланысты маңызды орындалу қателерінің бірі. JVM an objectіні бөле алмаған кезде шақырылады, себебі ол үшін қол жетімді жад жеткіліксіз және қоқыс жинағыш қосымша жадты бөле алмайды. OutOfMemoryError кейбір түрлері :
  • OutOfMemoryError: Java үйме кеңістігі - жад жеткіліксіз болғандықтан нысанды Java үймесінде бөлу мүмкін емес. Қате жадтың ағып кетуінен немесе әдепкі үйме өлшемі ағымдағы қолданба үшін жеткілікті үлкен емес болғандықтан туындауы мүмкін.

  • OutOfMemoryError: GC Overhead шегінен асып кетті - деректер көлемі үйіндіге әрең сыйғандықтан, қоқыс жинағыш үнемі жұмыс істейді, ал Java бағдарламасы өте баяу жұмыс істейді, нәтижесінде қоқыс жинағыштың үстеме шығыны шегінен асып кетті. асып кетті және қолданба осы қатемен бұзылады.

  • OutOfMemoryError: Сұралған жиым өлшемі VM шегінен асып кетті - қолданбаның үйме өлшемінен үлкенірек массив үшін жадты бөлуге әрекет жасағанын көрсетеді, бұл тағы да әдепкі жадтың жеткіліксіз бөлінуіне байланысты болуы мүмкін.

  • OutOfMemoryError: метакеңістік — үймеде метадеректерге бөлінген бос орын таусылды (метадеректер – сыныптар мен әдістерге арналған нұсқаулар).

  • OutOfMemoryError: себеп бойынша өлшем byteтарын сұрау. Своп кеңістігі жоқ - үймеден жадты бөлу әрекеті кезінде кейбір сәтсіздік орын алды және нәтижесінде үймеде жад жетіспеді.

10. Стек ізі дегеніміз не? Оны қалай алуға болады?

Stack Trace – қолданбаның осы нүктесіне дейін шақырылған сыныптар мен әдістердің тізімі. Стек ізін қолданбаның белгілі бір нүктесінде келесідей шақыруға болады:
StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
Осылайша біз LIFO реті бойынша реттелген стек микроэлементтерінің жиынын аламыз - Last In First Out . Сұхбат сұрақтары мен жауаптарын талдау.  1-8 бөлімJava тілінде, әдетте, стек ізі туралы айтқанда, олар қате (немесе ерекше жағдай) орын алған кезде консольде көрсетілетін стек ізін білдіреді. Сіз келесідей ерекше жағдайлардың стек ізін ала аласыз:
StackTraceElement[] stackTraceElements;
try{
                ...
} catch (Exception e) {
   stackTraceElements = e.getStackTrace();
}
Ал, егер біз консольдегі ерекшелік стек ізін шығару туралы айтатын болсақ:
try{
                ...
} catch (Exception e) {
  e.printStackTrace();
}
Сондай-ақ, егер бізде қате, тексерілмеген ерекшелік немесе тексерілген ерекшелік болса, біз оны өңдемейміз, бірақ тек қайта жібереміз, онда қолданба бұзылған кезде біз консольдегі ерекшеліктердің стек ізін автоматты түрде аламыз. Консольдегі стек ізіне ерекше жағдайдың шағын мысалы: Stack Trace туралы қосымша ақпаратты мына жерденСұхбат сұрақтары мен жауаптарын талдау.  1 - 9 бөлім оқи аласыз . Біз бүгін осы мәселеге тоқталамыз...Сұхбат сұрақтары мен жауаптарын талдау.  1-10 бөлім
Сериядағы басқа материалдар:
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION