JavaRush /Java Blogu /Random-AZ /Java tərtibatçısı üçün müsahibələrdən alınan sualların və...

Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili. 3-cü hissə

Qrupda dərc edilmişdir
Salam! Xüsusi təlim olmadan təyyarədə uçmağı öyrənmək mümkün olmadığı kimi, lazımi nəzəri əsasları öyrənmək üçün uzun saatlar sərf etmədən Java proqramçısı olmaq da mümkün deyil. Bu gün biz məhz bunun üzərində işləyəcəyik: Java tərtibatçıları üçün 250+ müsahibə sualını və müvafiq olaraq onlara cavabları təhlil etməyə davam edəcəyik . Budur təhlilin birinciikinci hissələri. Bəli, əlbəttə ki, bütün bu suallar olmadan yaxşı bir Java tərtibatçısı ola bilərsiniz. Bununla belə, Java dilinin incəliklərini yaxşı başa düşsəniz, bu sizə üstünlük verəcək və gələcək işəgötürəninizin gözündə sizi daha arzuolunan namizəd edəcək.Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  Hissə 3 - 1

20. İnkapsulyasiya üçün hansı dil elementləri cavabdehdir?

Xatırladığımız kimi, inkapsulyasiya sinfin icra detallarını gizlədir. Yəni bizim sinfimiz xaricdən istifadə edildikdə daxili məzmun və məntiq gözə dəymir. Dilin hansı elementləri buna cavabdehdir? Təbii ki, modifikatorlara daxil olun ! Şəxsi dəyişdirici ilə gizlətməli olduğumuzu qeyd edirik . Məsələn, bir sinfin şəxsi sahələri və ya müəyyən daxili funksionallığı həyata keçirməyə kömək edən bəzi daxili üsullar. Xarici girişi təmin etmək istədiklərimizə ictimai giriş dəyişdiricisini əlavə edirik . Məsələn, bəzi funksionallığı təmin etmək üçün cavabdeh olan metod (burada bir çox özəl metodlardan istifadə edilə bilər) və ya sinfin şəxsi sahələrinə daxil olmaq üçün eyni alıcılar və təyinedicilər. Oh, həmçinin bizdə standartqorunan modifikatorlarımız var ki, bunlardan sinfin seçilmiş hissələrinə girişin daha çevik və konkret konfiqurasiyası üçün istifadə oluna bilər.

21. Varislik üçün hansı dil elementləri cavabdehdir?

Varislik, başqa sinif əsasında siniflər yaratmağa imkan verən mexanizmdir. Java-da bu məqsədlə extensions açar sözü istifadə olunur . Məsələn, müəyyən bir Pişik sinifimiz var və biz onun varisini - Lion yaratmaq istəyirik . Kodda bu belə görünəcək:
public class Lion extends Cat
Və bu o deməkdir ki, Lion sinfi statik olanlar istisna olmaqla, Cat sinifinin bütün metodlarını və dəyişənlərini miras alır . Həmçinin, mirasdan məsul olan dil elementlərinə super daxildir . Bu, buna bənzər bir istinaddır , lakin bu, çağırıldığı obyektə aid olsa da, super cari əsas obyektə istinad edir. Adətən super istifadə olunur:
  1. Superclass konstruktorunu çağırmaq üçün: Məsələn, Cat sinfinin konstruktorda inisializasiya edilməli olan daxili dəyişən adı var. Lion sinif konstruktorunda bu belə görünür:

    public Lion(final String name) {
       super(name);
    }
  2. Ana sahələrə və metodlara daxil olmaq üçün: məsələn, Cat sinfində bizdə başlanğıc yaş sahəsi var :

    public class Cat {
       int age = 10;
Eyni zamanda, Lion- da eyni işə salınmış sahəyə sahibik :
public class Lion extends Cat {
   int age = 15;
Və əgər biz Lion obyektindən ana obyektin yaş dəyişəninə daxil olmaq istəyiriksə , bunu super vasitəsilə etməliyik :
super.name

22. Polimorfizm üçün hansı dil elementləri cavabdehdir?

Polimorfizm bir imzalı obyektin bir çox forma (birdən çox həyata keçirmə) alması qabiliyyətidir. Əminliklə deyə bilərik ki, Java-da tətbiqlərgenişləndirməJava tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  3-2 hissə açar sözləri polimorfizmdən məsuldur . həyata keçirir - biz interfeysimizi yaratdıqda onun mümkün formalarından birini hansısa sinifdə həyata keçiririk, lakin bu, yeganə forma deyil, elə deyilmi? Tətbiqetmə vasitələrinin necə göründüyünü xatırlayaq :
public class Cat implements Animal
Cat sinfində biz Animal interfeysində təqdim olunan bütün mücərrəd metodları tətbiq etməliyik . Eyni şey vərəsəlik üçün də keçərlidir: nəsil sinfində metodun artıq mövcud tətbiqini ləğv edə bilərik. Məsələn: bir neçə nəsil -> eyni metodun bir neçə fərqli ləğvi. Yaxşı, ya super sinif mücərrəd idi və onun hər bir nəsli üçün xüsusi bir şəkildə həyata keçirilməli olan müəyyən bir metodu var. Yəni metodun bir çox formada olacağını deyə bilərik. Həmçinin @Override annotasiyası bizə bu işdə kömək edə bilər ki , bu, həyata keçirilən metodların üstündə yerləşdirilir və bizim supersinif və ya interfeysin bu və ya digər metodunu həyata keçirmək və ya ləğv etmək istədiyimizi göstərir (əgər tətbiq artıq supersinifdə varsa). Bu isteğe bağlıdır və səhvləri aşkar etməyi asanlaşdırmaq üçün istifadə olunur. Bu annotasiya ilə siz kompilyatora superclass/interfeys metodunu ləğv etmək/tətbiq etmək istədiyinizi bildirirsiniz və bu, metod imzasında səhv etməməyinizi təmin edəcək.

23. SOLID nədir? Nümunələr verin

SOLID, Robert Martin tərəfindən hazırlanmış OOP üçün Beş Əsas Dizayn Prinsiplərinin qısaldılmasıdır. S - Tək cavabdehlik prinsipi - sinfin yalnız bir məqsədi və vahid məqsədi olduğunu bildirən vahid məsuliyyət prinsipi. Yəni hər şeyi edən siniflər yaratmamalısınız. Bu halda, siz “İlahi Obyekt” antipatternini təkrar edə bilərsiniz. Əgər Cat obyektiniz varsa , o, bu instansiyaya aid olmayan biznes məntiqini deyil, yalnız onun daxili funksionallığı ilə qarşılıqlı əlaqədə olan metodları ehtiva etməlidir. Məsələn, bir növ bu tip obyektlərin haradasa saxlanması. Bu xarici funksionallıq ( Cat ilə müqayisədə ) digər siniflərə, vəzifəsi bu tip obyektlər üçün iş məntiqini təmin etmək olan bəzi xidmətlərə köçürülməlidir. O - Açıq-qapalı prinsip - açıqlıq/qapalılıq prinsipi. Bu o deməkdir ki, proqram təminatı obyektləri (siniflər, interfeyslər) uzadılmaq üçün açıq, lakin modifikasiya üçün qapalı olmalıdır. Məsələn, bizə artıq mövcud olan Cat sinifinin funksionallığına bənzər , lakin bir qədər fərqli funksionallıq lazım idi. Cat sinifinin funksionallığını dəyişmək , artıq istifadə olunduğu yerləri pozmaq əvəzinə biz miras və ya kompozisiyadan istifadə edirik . Nəticədə, Cat sinifinin dəyişdirilmiş funksionallığı ilə məqsədimizə çatdıq , lakin eyni zamanda onu dəyişdirmədik və ya heç bir şeyi pozmadıq. L - Liskov əvəzetmə prinsipi - Barbara Liskovun əvəzetmə prinsipi. Prinsip bildirir ki, əsas tipdən istifadə edən funksiya onu bilmədən əsas növün alt tiplərindən istifadə edə bilməlidir. Məsələn, Pişik sinifimiz davranışı əsaslı şəkildə dəyişdirmədən onun nəslindən hər hansı biri ilə, deyək ki, Lion ilə əvəz edilə bilər . Ümumi məntiq (davranış) eyni qalır, lakin bu və ya digər funksionallığın həyata keçirilməsinin təfərrüatları dəyişir. I - Interface segregation prinsipi - interfeysin ayrılması prinsipi. Bu prinsip bildirir ki, bir universal interfeysdən çox ixtisaslaşmış (dar fokuslanmış) interfeyslərə malik olmaq daha yaxşıdır. Məsələn, istifadəçi bəzi interfeysi həyata keçirir, ondan yalnız bu metoda ehtiyacı var, lakin bu interfeysdə arzu olunan metodun məntiqi ilə heç bir əlaqəsi olmayan daha doqquz metod var. Bu halda istifadəçi doqquzu onun üçün lazımsız olan on interfeys metodunu həyata keçirməli olacaq! Bunun əvəzinə, zəruri hallarda həyata keçirilə bilən on fərqli interfeys etmək daha yaxşıdır. Yaxşı, ya on deyil, bir neçəsi, interfeysin ümumi məqsədi ilə sıx əlaqəli üsullara sahib olacaq. D - Asılılığın İnversiya Prinsipi— asılılığın inversiya prinsipi. Prinsip bildirir ki, daha yüksək səviyyələrdə olan modullar aşağı səviyyələrdəki modullardan asılı olmamalıdır. Bu prinsip həm də “abstraksiya təfərrüatlardan asılı olmamalıdır, təfərrüatlar abstraksiyadan asılı olmalıdır” kimi də təsvir edilir. Yəni biz interfeyslərə istinad edərək məntiqimizi qurmalıyıq və yalnız bundan sonra sinifləri tələb olunan interfeysi həyata keçirən konkret obyektləri bu funksionallığa ötürməliyik. Məsələn, əgər bizdə Cat interfeysi və onun bəzi tətbiqləri, məsələn, LionHomeCat varsa , biz qarşılıqlı əlaqə məntiqimizi xüsusi olaraq Cat interfeys növü ilə qururuq və yalnız bundan sonra Lion və ya HomeCat- ın xüsusi tətbiqini əvəz edirik , lakin əksinə deyil.

24. Sinif, obyekt, interfeys nədir?

Xatırladığımız kimi, Java OOP dilidir. Yəni Java proqramları obyektlər arasında qarşılıqlı əlaqə üzərində qurulur. Belə çıxır ki, proqram qarışqa yuvasına bənzəyir, burada hər qarışqa bir obyektdir. Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  3-3-cü hissəObyektlər bu daxili məlumatlarla qarşılıqlı əlaqədə olmaq üçün müxtəlif üsulları (funksiyalar) ehtiva edən bəzi qruplaşdırılmış məlumatlardır. Siniflər isə obyektlərin yaradılması üçün göstərişlər, şablonlardır. Yəni, eyni təlimata uyğun olaraq qurulmuş, müxtəlif və ya eyni məlumat qiymətləri ilə doldurulmuş bir çox obyekt ola bilər. Həyatdan misal gətirmək üçün deyə bilərik ki, sinif binanın rəsmidir, obyekt isə bu rəsm əsasında xüsusi yaradılmış tikilidir. İnterfeyslər siniflərin analoqlarıdır ki, onlardan istifadə etməklə obyektlər yaratmaq mümkün deyil. Onların məqsədi Java-ya abstraksiya elementi əlavə etməkdir. Daha dəqiq desək, siniflər və obyektlər arasında əlaqələrə çeviklik əlavə etmək. Çeviklik dedikdə, daha əvvəl təsvir edilən polimorfizm və abstraksiya nəzərdə tutulur ki, bu da öz növbəsində tətbiqin daxili arxitekturasını qurmaq üçün bir çox imkanlar açır.

25. POJO sinfi nədir? Belə bir sinfə nümunə verin

Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  3-4-cü hissəPOJO - Düz Köhnə Java Obyekti - yaxşı köhnə Java obyekti: hər hansı bir xüsusi sinifdən miras alınmayan və biznes modeli üçün lazım olanlardan başqa heç bir xidmət interfeysi həyata keçirməyən sinifin sadə obyekti. Başqa sözlə , POJO sinfi sadəcə xüsusi tələbləri olmayan bir sinifdir. Yeganə tələb, müəyyən bir çərçivəyə bağlanmış müxtəlif zənglərin və fitlərin olmamasıdır. Bir qayda olaraq, bu cür siniflər digər siniflərdən miras qalmır ( eyni paketdəki POJO sinifləri istisna olmaqla), interfeysləri həyata keçirmir - bəzən Serializable və ya Cloneable kimi standart kitabxanadan marker interfeysləri üçün istisna edilir - annotasiyalardan istifadə etməyin və üçüncü tərəf kitabxanalarından asılı olmayın. Ancaq qeyd edirəm ki, POJO-ların hər cür biznes məntiqi və konstruktorları ilə metodları ola bilər. Sinfin semantikasına dəyişiklik etməyən annotasiyalara icazə versəniz (onsuz obyektin məqsədi və onun işinin məntiqi dəyişməyəcək), POJO-lara həmçinin XML və ya JSON- dan seriyadan çıxarılan JPA Müəssisə obyektləriDTO obyektləri daxil ola bilər , qaydaları annotasiyalarda göstərilmişdir. POJO sinifləri üçün bərabərhashCode-u ləğv etmək də məsləhətdir , çünki bu, onların rolunu daha yaxşı yerinə yetirməsinə kömək edə bilər. Nümunə POJO sinfi:
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. Sinif hansı elementləri ehtiva edə bilər?

Sinifdə aşağıdakı elementlər ola bilər:
  • sinif sahələri;
  • statik sinif sahələri;
  • başlanğıc bloku;
  • statik başlatma bloku;
  • konstruktorlar (boş həmişə standart olaraq müəyyən edilir);
  • üsullar;
  • statik üsullar;
  • müxtəlif annotasiyalar (sinfin özündən və ya onun komponentlərindən yuxarıda ola bilər);
  • generiklər ;
  • digər siniflərdən miras ( genişlənir ) və ya interfeyslərdən ( tətbiqlər ) həyata keçirmə.

27. Java-da varisliyi izah edin. Super açar sözdən istifadə etməyin faydaları nələrdir?

Yuxarıda Java-da miras və super açar söz haqqında danışdım . Daha bir neçə vacib məqamı qeyd edim:
  1. Yalnız bir sinfi miras almaq mümkündür: Java-da çoxsaylı varislik yoxdur (lakin Java 8-də defolt metodların meydana çıxması ilə bu ifadə çox mübahisəli olacaq).
  2. Şəxsi metodlar və sahələr də miras qalır, sadəcə varisdən onlara daxil ola bilməyəcəklər (lakin, məsələn, şəxsi sahəmiz varsa və bunun üçün ictimai və ya qorunan alıcılar və təyinatçılar varsa, sahə ilə işlənə bilər. onların vasitəsilə).
  3. son siniflər miras alınmır.
  4. son üsullar ləğv edilmir (lakin onlar miras alına və həddən artıq yüklənə bilər).
  5. statik metodlar və dəyişənlər miras alınmır (çünki onlar obyektlərə deyil, siniflərə bağlıdır).
  6. Abstrakt siniflərdən miras alındıqda onların mücərrəd metodlarının həyata keçirilməsi tələb olunur və ya cari sinif də mücərrəd elan edilməlidir.
  7. Valideyndə defolt olmayan konstruktorlar varsa, onlar uşaq sinifində ləğv edilməlidir (lakin onların üzərində @Override yazılmayıb).
  8. Nəsildə ləğv edilmiş metodlar giriş dəyişdiricisi ilə genişləndirilə bilər: private -> default -> protected -> public .
  9. Nəsildə ləğv edilmiş üsullar yazılan istisnaları daralda bilər, məsələn: İstisna -> IOException -> FileNotFoundException.
Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  3-5-ci hissə

28. Metod imzası nədir? Düzgün və səhv imzalara nümunələr verin

Metodun imzası metodun adı və daxil olan parametrlərin növləridir (və parametrlərin sırası vacibdir). Metod imzasına qaytarılan dəyər və ya onun atdığı istisnalar daxil deyil. Düzgün imza nümunəsi:
doSomething(int, double, double)
Yanlış imza nümunəsi:
void doSomething(int firstArg, int secondArg) throws Exception
Qaytarma növü və atılan istisnalar siyahısı ilə birləşdirilmiş metod imzası metod müqaviləsi adlanır . Bu gün üçün hamısı budur. Sonra görüşənədək!Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  3-6 hissə
Seriyadakı digər materiallar:
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION