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

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

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

20. Инкапсуляцияға қандай тіл элементтері жауап береді?

Біздің есімізде, инкапсуляция сыныптың іске асыру мәліметтерін жасырады. Яғни, біздің сынып сырттай қолданылғанда, ішкі мазмұны мен логикасы анық емес. Ал бұған тілдің қандай элементтері жауапты? Әрине, модификаторларға қол жеткізіңіз ! Жеке модификатормен жасыру керек нәрсені белгілейміз . Мысалы, сыныптың жеке өрістері немесе белгілі бір ішкі функцияларды жүзеге асыруға көмектесетін кейбір ішкі әдістер. Біз сыртқы қатынасты қамтамасыз еткіміз келетін нәрсеге біз жалпы қолжетімділік модификаторын қосамыз . Мысалы, кейбір функционалдылықты қамтамасыз етуге жауапты әдіс (оның ішінде көптеген жеке әдістерді қолдануға болады) немесе сыныптың жеке өрістеріне қатынасу үшін бірдей қабылдағыштар мен орнатушылар. О, сонымен қатар бізде әдепкі және қорғалған модификаторлар бар , оларды сыныптың таңдалған бөліктеріне қол жеткізудің икемді және нақты конфигурациясында қолдануға болады.

21. Қай тіл элементтері тұқым қуалаушылыққа жауап береді?

Мұрагерлік – басқа класс негізінде класстар құруға мүмкіндік беретін механизм. Java тілінде кеңейтілген кілт сөзі осы мақсат үшін пайдаланылады . Мысалы, бізде белгілі бір Cat класы бар және біз оның мұрагерін жасағымыз келеді - Lion . Кодта ол келесідей болады:
public class Lion extends Cat
Және бұл Lion класы статикалық әдістерден басқа Cat класының барлық әдістері мен айнымалыларын иеленетінін білдіреді . Сондай-ақ мұраға жауапты тіл элементтеріне super кіреді . Бұл осыған ұқсас сілтеме , бірақ ол шақырылған нысанға қатысты болса, super ағымдағы негізгі нысанға сілтеме жасайды. Әдетте super пайдаланылады:
  1. Суперкласс конструкторын шақыру үшін: мысалы, Cat класында конструкторда инициализациялау қажет ішкі айнымалы атауы бар. Lion класының конструкторында ол келесідей болады:

    public Lion(final String name) {
       super(name);
    }
  2. Ата-аналық өрістер мен әдістерге қол жеткізу үшін: мысалы, Cat сыныбында бізде инициализацияланған жас өрісі бар :

    public class Cat {
       int age = 10;
Сонымен қатар, бізде Lion ішінде бірдей инициализацияланған өріс бар :
public class Lion extends Cat {
   int age = 15;
Ал егер біз Lion нысанынан ата-аналық нысанның жас айнымалысына қол жеткізгіміз келсе , мұны super арқылы орындауымыз керек :
super.name

22. Полиморфизмге қандай тіл элементтері жауап береді?

Полиморфизм – бір қолтаңбаның an objectінің көптеген формаларды (бірнеше іске асыру) қабылдау қабілеті. Java әзірлеушісіне арналған сұхбаттардағы сұрақтар мен жауаптарды талдау.  3 - 2 бөлімБіз Java-да полиморфизмге амалдар мен кеңейтілген кілт сөздер жауап береді деп сенімді түрде айта аламыз . жүзеге асырады - интерфейсті жасаған кезде біз оның мүмкін болатын формаларының бірін қандай да бір сыныпта жүзеге асырамыз, бірақ бұл жалғыз пішін емес, солай емес пе? Іске асыру құралдарының қандай болатынын еске түсірейік :
public class Cat implements Animal
Ал Cat класында біз Animal интерфейсінде ұсынылған барлық абстрактілі әдістерді енгізуіміз керек . Дәл сол мұраға қатысты: ұрпақ сыныбында әдістің бұрыннан бар іске асырылуын жоққа шығаруға болады. Мысалы: бірнеше ұрпақ -> бір әдістің бірнеше түрлі қайта анықтаулары. Немесе суперкласс дерексіз болды және оның әрбір ұрпағы үшін ерекше түрде жүзеге асырылуы керек белгілі бір әдісі бар. Яғни, әдіс көптеген формада болады деп айта аламыз. Сондай-ақ, @Override annotationсы бізге осыған көмектесе алады , ол енгізілген әдістердің үстіне орналастырылады және біздің суперкласстың немесе интерфейстің бір немесе басқа әдісін (егер іске асыру суперкласста бұрыннан бар болса) жүзеге асырғымыз келетінін көрсетеді. Бұл міндетті емес және қателерді анықтауды жеңілдету үшін қолданылады. Бұл annotationмен сіз компиляторға суперкласс/интерфейс әдісін қайта анықтағыңыз/жүзеге асырғыңыз келетінін көрсетесіз және ол әдіс қолтаңбасында қателіктер жібермеуіңізді қамтамасыз етеді.

23. SOLID дегеніміз не? Мысалдар келтіріңіз

SOLID — Роберт Мартин ойлап тапқан OOP үшін бес негізгі дизайн қағидаттарының аббревиатурасы. S – Бірыңғай жауапкершілік принципі – біртұтас жауапкершілік принципі, онда сыныптың бір ғана мақсаты және бір мақсаты болуы керек. Яғни, бәрін жасайтын сыныптарды жасамау керек. Бұл жағдайда сіз «Құдайдың нысаны» антипаттернін қайта жасай аласыз. Егер сізде Cat нысаны болса , онда осы данаға қатысы жоқ бизнес логикасы емес, оның ішкі функционалдығымен ғана әрекеттесетін әдістер болуы керек. Мысалы, осы түрдегі an objectілерді бір жерде сақтаудың қандай да бір түрі. Бұл сыртқы функционалдылықты ( Cat ға қатысты ) басқа сыныптарға, кейбір қызметтерге ауыстыру қажет, олардың міндеті осы түрдегі нысандар үшін бизнес логикасын қамтамасыз ету болып табылады. О - Ашық-жабық принцип - ашықтық/жабық принципі. Бұл бағдарламалық жасақтама нысандары (сыныптар, интерфейстер) кеңейту үшін ашық, бірақ өзгерту үшін жабық болуы керек дегенді білдіреді. Мысалы, бізге бұрыннан бар Cat класының функционалдығына ұқсас функция қажет болды , бірақ сәл басқаша. Cat класының функционалдығын өзгертудің , ол бұрыннан қолданылған жерлерді бұзудың орнына, біз мұра немесе композицияны қолданамыз . Нәтижесінде, біз Cat класының өзгертілген функционалдығымен мақсатымызға жеттік , бірақ сонымен бірге біз оны өзгертпедік немесе ештеңені бұзбадық. Л - Лисков алмастыру принципі - Барбара Лисковтың алмастыру принципі. Бұл принцип негізгі типті пайдаланатын функция оны білмей, негізгі түрдің ішкі түрлерін пайдалана алуы керектігін айтады. Мысалы, біздің Cat класы мінез-құлықты түбегейлі өзгертпестен, оның ұрпақтарының кез келгенімен, айталық, Lionмен алмастырылуы керек . Жалпы логика (мінез-құлық) өзгеріссіз қалады, бірақ осы немесе басқа функционалдылықты жүзеге асырудың егжей-тегжейлері өзгереді. I – интерфейсті бөлу принципі – интерфейсті бөлу принципі. Бұл принцип бір әмбебап интерфейстен гөрі көптеген мамандандырылған (тар бағытталған) интерфейстердің болуы жақсы екенін айтады. Мысалы, пайдаланушы кейбір интерфейсті жүзеге асырады, оның ішінде оған тек осы әдіс қажет, бірақ бұл интерфейсте қалаған әдіс логикасына еш қатысы жоқ тағы тоғыз әдіс бар. Бұл жағдайда пайдаланушыға он интерфейс әдісін енгізу қажет болады, оның тоғызы оған қажет емес! Оның орнына қажет болған жағдайда жүзеге асырылатын он түрлі интерфейс жасаған дұрыс. Жақсы, он емес, бірнеше, олар интерфейстің ортақ мақсатымен тығыз байланысты әдістерге ие болады. D – Тәуелділіктің инversion принципі— тәуелділік инversion принципі. Бұл принцип жоғары деңгейлердегі модульдер төменгі деңгейлердегі модульдерге тәуелді болмауы керек екенін айтады. Бұл принцип «абстракция бөлшектерге тәуелді болмауы керек, бөлшектер абстракцияға тәуелді болуы керек» деп те сипатталады. Яғни, интерфейстерге сілтеме жасау арқылы логикамызды құруымыз керек, содан кейін ғана осы функционалдылыққа нақты an objectілерді беруіміз керек, олардың кластары қажетті интерфейсті жүзеге асырады. Мысалы, егер бізде Cat интерфейсі және оның кейбір іске асырулары, айталық, Lion және HomeCat болса , біз өзара әрекеттесу логикасын арнайы Cat интерфейс түрімен құрастырамыз, содан кейін ғана Lion немесе HomeCat нақты іске асыруын ауыстырамыз , бірақ керісінше емес.

24. Класс, an object, интерфейс дегеніміз не?

Біздің есімізде Java - OOP тілі. Яғни, Java бағдарламалары an objectілер арасындағы өзара әрекеттесу негізінде құрылады. Бағдарлама құмырсқаның илеуіне ұқсайды, мұнда әр құмырсқа an object болып табылады. Java әзірлеушісіне арналған сұхбаттардағы сұрақтар мен жауаптарды талдау.  3 - 3 бөлімОбъектілер – бұл ішкі деректермен әрекеттесу үшін әртүрлі әдістерді (функцияларды) қамтитын кейбір топтастырылған деректер. Ал сыныптар – an objectілерді құруға арналған нұсқаулар, шаблондар. Яғни, әртүрлі немесе бірдей деректер мәндерімен толтырылған бір нұсқауға сәйкес құрастырылған көптеген нысандар болуы мүмкін. Өмірден мысал келтіретін болсақ, сыныпты ғимараттың сызбасы, ал нысанды осы сызба бойынша арнайы жасалған ғимарат деп айта аламыз. Интерфейс - бұл сыныптардың аналогтары, олардың көмегімен an objectілерді құру мүмкін емес. Олардың мақсаты - Java-ға абстракция элементін қосу. Дәлірек айтқанда, сыныптар мен нысандар арасындағы қарым-қатынастарға икемділік қосу. Икемділік деп біз бұрын сипатталған полиморфизм мен абстракцияны айтамыз, бұл өз кезегінде қолданбаның ішкі архитектурасын құру үшін көптеген мүмкіндіктерді ашады.

25. POJO класы дегеніміз не? Мұндай сыныпқа мысал келтіріңіз

Java әзірлеушісіне арналған сұхбаттардағы сұрақтар мен жауаптарды талдау.  3 - 4 бөлімPOJO - қарапайым ескі Java нысаны - жақсы ескі Java нысаны: кез келген белгілі бір сыныптан мұраланбаған және бизнес-модельге қажеттілерден басқа ешқандай қызмет көрсету интерфейстерін іске асырмайтын класстың қарапайым нысаны. Басқаша айтқанда , POJO класы - бұл арнайы талаптары жоқ класс. Жалғыз талап - белгілі бір шеңберге байланған әртүрлі қоңыраулар мен ысқырықтардың болмауы. Әдетте, мұндай сыныптар басқа сыныптардан мұраға алынбайды ( сол пакеттегі POJO сыныптарынан басқа ), интерфейстерді жүзеге асырмайды - кейде стандартты кітапханадан маркер интерфейстері үшін ерекшелік жасалады, мысалы, Serializable немесе Cloneable - annotationларды пайдаланбаңыз. және үшінші тарап кітапханаларына тәуелді емес. Бірақ мен POJO-да бизнес логикасы және кез келген түрдегі конструкторлары бар әдістер болуы мүмкін екенін ескеремін. Сыныптың семантикасына өзгерістер енгізбейтін annotationларға рұқсат етсеңіз (онсыз нысанның мақсаты және оның жұмысының логикасы өзгермейді), POJOs JPA Entity нысандарын және XML немесе JSON сериясынан жойылған DTO нысандарын да қамтуы мүмкін . ережелері annotationларда көрсетілген. Сондай-ақ POJO сыныптары үшін тең және hashCode мәндерін қайта анықтау ұсынылады , себебі бұл олардың рөлін жақсырақ орындауға көмектесуі мүмкін. POJO класының мысалы :
public class User {
   private Long id;
   private String firstName;
   private String lastName;
   private Long age;

   public User(final Long id, final String firstName, final String lastName, final long age) {
       this.id = id;
       this.firstName = firstName;
       this.lastName = lastName;
       this.age = age;
   }

   public Long getId() {
       return this.id;
   }

   public String getFirstName() {
       return this.firstName;
   }

   public String getLastName() {
       return this.lastName;
   }

   public Long getAge() {
       return this.age;
   }

   @Override
   public boolean equals(final Object o) {
       if (this == o) return true;
       if (o == null || this.getClass() != o.getClass()) return false;
       final User user = (User) o;
       return Objects.equals(this.id, user.id) &&
               Objects.equals(this.firstName, user.firstName) &&
               Objects.equals(this.lastName, user.lastName) &&
               Objects.equals(this.age, user.age);
   }

   @Override
   public int hashCode() {
       return Objects.hash(this.id, this.firstName, this.lastName, this.age);
   }
}

26. Класта қандай элементтер болуы мүмкін?

Класта келесі элементтер болуы мүмкін:
  • класс өрістері;
  • статикалық класс өрістері;
  • инициализация блогы;
  • статикалық инициализация блогы;
  • конструкторлар (бос әрқашан әдепкі бойынша анықталады);
  • әдістер;
  • статикалық әдістер;
  • әртүрлі annotationлар (олар сыныптың өзінен немесе оның құрамдас бөліктерінен жоғары тұруы мүмкін);
  • генериктер ;
  • басқа сыныптардан мұра ( кеңейтеді ) немесе интерфейстерден ( инструкциялардан ) жүзеге асыру.

27. Java тіліндегі мұраны түсіндіріңіз. Super кілт сөзін пайдаланудың қандай пайдасы бар?

Жоғарыда мен Java тіліндегі мұра және супер кілт сөз туралы айттым. Тағы бірнеше маңызды жайттарды айта кетейін:
  1. Тек бір классты мұраға алуға болады: Java-да көп мұра жоқ (бірақ Java 8-де әдепкі әдістердің пайда болуымен бұл мәлімдеме өте даулы болады).
  2. Жеке әдістер мен өрістер де мұраланған, олар мұрагерден оларға қол жеткізе алмайды (бірақ егер бізде, мысалы, жеке өріс болса және ол үшін жалпыға ортақ немесе қорғалған алушылар мен орнатушылар болса, өріспен жұмыс істеуге болады. олар арқылы).
  3. қорытынды сыныптар мұраға берілмейді.
  4. соңғы әдістер қайта анықталмайды (бірақ олар тұқым қуалауы және шамадан тыс жүктелуі мүмкін).
  5. статикалық әдістер мен айнымалылар мұраланбайды (өйткені олар an objectілерге емес, сыныптарға байланысты).
  6. Абстрактілі сыныптардан мұра алған кезде олардың абстрактілі әдістерін жүзеге асыру қажет немесе ағымдағы класс да абстрактілі деп жариялануы керек.
  7. Егер ата-анада әдепкі емес конструкторлар болса, олар еншілес сыныпта қайта белгіленуі керек (бірақ олардың үстіне @Override жазылмаған).
  8. Ұрпақтағы қайта анықталған әдістерді қатынас модификаторымен кеңейтуге болады: private -> default -> protected -> public .
  9. Ұрпақтағы қайта анықталған әдістер жазылған ерекшеліктерді тарылта алады, мысалы: Ерекшелік -> IOException -> FileNotFoundException.
Java әзірлеушісіне арналған сұхбаттардағы сұрақтар мен жауаптарды талдау.  3 - 5 бөлім

28. Әдіс қолтаңбасы дегеніміз не? Дұрыс және бұрыс қол қоюға мысалдар келтіріңіз

Әдістің қолтаңбасы - әдістің атауы және кіріс параметрлердің түрлері (және параметрлердің реті маңызды). Әдіс қолтаңбасы қайтару мәнін немесе ол шығаратын ерекше жағдайларды қамтымайды. Дұрыс қолтаңбаның мысалы:
doSomething(int, double, double)
Қате қолтаңбаның мысалы:
void doSomething(int firstArg, int secondArg) throws Exception
Қайтару түрімен және шығарылатын ерекшеліктер тізімімен біріктірілген әдіс қолтаңбасы әдіс келісімі деп аталады . Бүгінгі күннің бәрі осы. Кейінірек кездесеміз!Java әзірлеушісіне арналған сұхбаттардағы сұрақтар мен жауаптарды талдау.  3 - 6 бөлім
Сериядағы басқа материалдар:
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION