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. 8-ci hissə

Qrupda dərc edilmişdir
Təcrübə yoxsa nəzəriyyə? Daha vacib nədir? Çoxları deyəcək ki, əlbəttə ki, təcrübə daha vacibdir. Məsələn, bacardığınız qədər məşq edin və xoşbəxt olacaqsınız. Mən bununla razılaşmamağa cəsarət edirəm. Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  Hissə 8 - 1Müsahibələr zamanı heç kim sizin təcrübədə nə qədər yaxşı olduğunuzu bilməyəcək. Sizdən tam olaraq nəzəriyyəyə uyğun olaraq soruşulacaq. Və yalnız bundan sonra müsahibələrin bütün mərhələlərindən keçib layihəyə daxil olanda praktiki bacarıqlarınızdan istifadə edəcəksiniz. Etiraz edə bilərsiniz: bəzən sizə test tapşırığı verirlər və hələ də təcrübə tələb olunur. Mübahisə etmirəm, hərdən verilir, amma məsələ odur ki, BƏZƏN, amma nəzəri müsahibə HƏMİŞƏ baş verir. Fərqi hiss edirsiniz? Ona görə də ayağınızın altında möhkəm nəzəri bünövrə olmalıdır ki, biz onu bu gün də gücləndirəcəyik. Məhz, müsahibələr zamanı tez-tez verilən sualları təhlil etməyə davam edəcəyik .

71. Enum üçün toString() metodunu ləğv etməsək nə baş verir?

Tutaq ki, bizdə aşağıdakı nömrə var :
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD;
}
Gəlin tələbəyə toString() zəng edərək konsolda göstərək :
System.out.println(Role.STUDENT.toString());
Konsolda nəticə:
TƏLƏBƏ
Yəni, standart olaraq, enum üçün toString() sabitin özünün adıdır.

72. Enum daxilində konstruktoru təyin etmək olarmı?

Bəli əminəm. Daxili enum dəyişənlərinin dəyərləri konstruktor vasitəsilə təyin olunur. Nümunə olaraq, hər rol üçün yaş aralığını göstərmək üçün əvvəlki siyahıya iki sahə əlavə edək - ageFromageTo -:
public enum Role {
   STUDENT(5,18),
   TEACHER(20,60),
   DIRECTOR(40,70),
   SECURITY_GUARD(18,50);

   int ageFrom;
   int ageTo;

   Role(int ageFrom, int ageTo) {
       this.ageFrom = ageFrom;
       this.ageTo = ageTo;
   }
}

73. == və equals() arasında fərq nədir?

Bu, Java tərtibatçılarının ən çox yayılmış müsahibə suallarından biridir. Gəlin ondan başlayaq ki, sadə dəyərləri ( int , char , double ...) müqayisə edərkən bunu == istifadə edərək edirik , çünki dəyişənlər xüsusi dəyərləri ehtiva edir və biz onları müqayisə edə bilərik. Və ibtidai dəyişənlər tam hüquqlu obyektlər deyil - onlar Obyektdən miras alınmır və bərabər() metoduna malik deyillər . Obyektlərə istinad edən dəyişənlərin müqayisəsi haqqında danışarkən, == yalnız istinadların dəyərini müqayisə edəcək - onların eyni obyektə aid olub-olmamasından asılı olmayaraq. Hətta bir obyekt digəri ilə eyni olsa belə, == vasitəsilə müqayisə mənfi nəticə verəcək ( false ), çünki bu fərqli obyektdir. Anladığınız kimi, istinad dəyişənlərini müqayisə etmək üçün equals() metodundan istifadə olunur . Bu , obyektlərin tam müqayisəsi üçün lazım olan Obyekt sinifinin standart metodlarından biridir . Ancaq dərhal aydınlaşdırmağa dəyər: bu metodun düzgün işləməsi üçün bu sinfin obyektlərinin necə müqayisə edilməli olduğunu yazmaqla onu yenidən təyin etmək lazımdır. Siz metodu ləğv etməsəniz, o, obyektləri == ilə müqayisə edəcək . IntelliJ IDEA -da siz onu avtomatik olaraq ləğv edə bilərsiniz (IDEA alətlərindən istifadə etməklə) -> alt + insert , görünən pəncərədə equals() və hashCode() seçin -> hansı sinif sahələrinin iştirak edəcəyini seçin -> və voila, avtomatik icrası üsulları tamamlanır. Budur, avtomatik yaradılan bərabər metodun iki sahəli sadə Cat sinfi üçün necə görünəcəyinə dair bir nümunə - int ageString name :
@Override
public boolean equals(final Object o) {
   if (this == o) return true;
   if (o == null || this.getClass() != o.getClass()) return false;
   final Cat cat = (Cat) o;
   return this.age == cat.age &&
           Objects.equals(this.name, cat.name);
}
Enumlar üçün ==bərabərlik arasındakı fərqdən danışsaq , bunun çoxu yoxdur. Axı, enum sabitləri saxlayır və hətta == istifadə edərək oxşar dəyərləri müqayisə edərkən belə, biz true alacağıq , çünki istinadlar həmişə eyni obyektlərə olacaqdır. Yaxşı, bərabərlərdən istifadə edərkən biz funksionallığı da düzgün işləyəcəyik, xüsusən bir enum üçün bərabər metodun gövdəsinə daxil olsanız, Enum sinfində metodun həyata keçirilməsinin aşağıdakı kimi olduğunu görəcəksiniz : Yəni, içəridə - istinadla yaxşı köhnə müqayisə! Xülasə etmək üçün: enum üçün ==bərabər vasitəsilə müqayisə düzgündür.Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  8-2 hissəJava tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  8-3-cü hissəJava tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  8-4-cü hissə

74. Enum-da ordinal() metodu nə edir?

Enum elementində int ordinal() metodunu çağırarkən , ümumi sıralamalar seriyasında bu dəyərin sıfırdan sıra nömrəsini alacağıq. Gəlin bu metodu müzakirə olunan əvvəlki siyahıdan bir elementdə istifadə edək - Rol :
System.out.println(Role.DIRECTOR.ordinal());
Müvafiq olaraq, konsol göstərəcək:
2

75. Java-da TreeSet və ya TreeMap ilə Enum-dan istifadə etmək mümkündürmü?

TreeSetTreeMap -da enum növlərinin istifadəsi məqbuldur. Və yaza bilərik:
TreeSet<Role> treeSet = new TreeSet<>();
treeSet.add(Role.SECURITY_GUARD);
treeSet.add(Role.DIRECTOR);
treeSet.add(Role.TEACHER);
treeSet.add(Role.STUDENT);
treeSet.forEach(System.out::println);
Və konsol göstərəcək:
TƏLƏBƏ MÜƏLLİM DİREKTOR TƏHLÜKƏSİZLİK_MÜHAFİZƏSİ
Çıxışı əlifba sırası ilə deyil, aldıq. Məsələ ondadır ki, TreeSet dəyərləri üçün enum elementlərini və ya TreeMap üçün açarlar kimi istifadə etsək , elementlər təbii qaydada ( enumda göstərilmə ardıcıllığı ) sıralanır. Bu xüsusiyyətləri anlamaq bizə daha yaxşı kod yazmağa kömək edir.Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  8-5-ci hissə

76. Enum-da ordinal() və compareTo() metodları necə əlaqəlidir?

Daha əvvəl qeyd edildiyi kimi, ordinal() ümumi siyahı siyahısında dəyərin sıra nömrəsini qaytarır. Həmçinin, əvvəlki sualın təhlili zamanı siz gördünüz ki, sadalama elementləri bir dəfə, məsələn, TreeSet- də (çeşidlənmiş dəst) enum -da elan olunduğu sıranı alır . Bildiyimiz kimi, TreeSetTreeMap elementləri müqayisə edilə bilən interfeysin compareTo() metodunu çağıraraq çeşidləyir . Buradan güman edə bilərik ki, Enum sinfi Müqayisəli interfeysi həyata keçirir , onu compareTo() metodunda həyata keçirir və onun daxilində sıralama qaydasını təyin etmək üçün ordinal() istifadə olunur. Enum sinfinə daxil olaraq bunun təsdiqini görürük: Və metodun özü: ordinal() metodu burada çağırılmır. Əvəzində sıra dəyişəni istifadə olunur - sadalamada elementin sıra nömrəsi. ordinal() metodunun özü ordinal dəyişəni üçün alıcıdan başqa bir şey deyil .Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  8-6 hissəJava tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  8-7 hissəJava tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  8-8 hissə

77. EnumM nümunəsini yazın

Yuxarıda müzakirə olunan suallarda mən artıq sayma nümunələri verdim və kodun təkrarlanmasında məqsəd görmürəm (məsələn, enumdakı konstruktor haqqında 72 nömrəli sual).

78. Enum-dan keçid qutusunda istifadə etmək mümkündürmü?

Bu mümkündür və lazımdır! Təcrübəmə nəzər saldıqda qeyd edirəm ki, enum istifadə etmək üçün ən ümumi yerlərdən biri switch kimi məntiqi konstruksiyalardır . Bu vəziyyətdə, bütün mümkün variantları təmin edə bilərsiniz və bütün enum dəyərləri üçün məntiqi yazdıqdan sonra - və standart operatordan istifadə etmək lazım olmaya bilər! Bütün bunlardan sonra, məsələn, int tipli bir String və ya rəqəmsal dəyərdən istifadə etsəniz , gözlənilməz bir dəyər ala bilərsiniz, bu da öz növbəsində enum istifadə etmək mümkün deyil . Daha əvvəl müzakirə edilən nümunə üçün keçid necə görünəcək:
public void doSomething(Role role) {
   switch (role) {
       case STUDENT:
           // некая логика для STUDENT
           break;
       case TEACHER:
           // некая логика для TEACHER
           break;
       case DIRECTOR:
           // некая логика для DIRECTOR
           break;
       case SECURITY_GUARD:
           // некая логика для SECURITY_GUARD
           break;
   }
}

79. Enum instansiyasında bütün mövcud dəyərləri necə əldə etmək olar?

Bir nömrənin bütün nümunələrini əldə etmək lazımdırsa, müəyyən bir nömrənin bütün mövcud dəyərlərinin massivini təbii qaydada qaytaran values() metodu var ( enumda göstərilən ardıcıllıqla ). Misal:
Role[] roles = Role.values();
for (Role role : roles) {
   System.out.println(role);
}
Konsol aşağıdakı çıxışı göstərəcək:
TƏLƏBƏ MÜƏLLİM DİREKTOR TƏHLÜKƏSİZLİK_MÜHAFİZƏSİ

Stream API

80. Java-da Stream nədir?

Java Stream məlumat axını ilə qarşılıqlı əlaqənin nisbətən yeni üsuludur ki, bu da öz növbəsində böyük verilənləri daha rahat və kompakt şəkildə emal etməyə, həmçinin müəyyən sayda iplər arasında məlumatların işlənməsini paralelləşdirməyə imkan verir ki, bu da istifadə zamanı performansı artıra bilər. funksionallıq. Bu mövzu qısaca olaraq daha dərindən müzakirə edilə bilməz, buna görə də bu mövzuya dalmağınıza kömək edə biləcək bir məqalənin linkini burada buraxacağam .Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  8-9-cu hissə

81. Əməliyyatların əsas xassələri hansılardır?

Mövzu Stream API adlanır, lakin sual əməliyyat haqqındadır. Hmm... Əvvəlcə əməliyyatın nə olduğunu anlayaq. Tranzaksiya verilənlərlə işləməyin məntiqi vahidini təmsil edən ardıcıl verilənlər bazası əməliyyatları qrupudur. Tranzaksiya ya tam və uğurla başa çatdırıla bilər, məlumatların bütövlüyü qorunur və paralel olaraq həyata keçirilən digər əməliyyatlardan asılı olmayaraq, ya da heç bir təsiri yoxdur. Beləliklə, əməliyyatlar qısaca ACID adlanan dörd əsas xüsusiyyətə malikdir . Bu abbreviaturanın hər hərfinin necə ifadə edildiyinə baxaq: A - Atomicity - atomicity - bu xüsusiyyət heç bir əməliyyatın sistemdə qismən qeyd olunmayacağına zəmanət verir. Ya onun bütün alt əməliyyatları yerinə yetiriləcək, ya da heç biri yerinə yetirilməyəcək ( hamısı və ya heç nə ). C - Ardıcıllıq - ardıcıllıq hər bir uğurlu əməliyyatın yalnız etibarlı nəticələri qeyd etməsini təmin edən xüsusiyyətdir. Yəni, bu, uğurlu əməliyyat baş verərsə, sistemin konkret məlumatlara tətbiq etdiyi bütün qayda və məhdudiyyətlərin yerinə yetiriləcəyinə, əks halda əməliyyatın tamamlanmayacağına və sistemdəki məlumatların əvvəlki vəziyyətinə qayıdacağına zəmanətdir. dövlət. I - İzolyasiya - təcrid əməliyyatın icrası zamanı paralel əməliyyatların onun nəticəsinə təsir etməməli olduğunu söyləyən bir xüsusiyyətdir. Bu əmlak resurs tələb edir, buna görə də adətən müəyyən izolyasiya problemlərini həll edən müəyyən səviyyəli izolyasiyaya icazə verməklə qismən həyata keçirilir. Bu barədə növbəti sualda daha ətraflı danışacağıq. Java tərtibatçısı üçün müsahibələrdən alınan sualların və cavabların təhlili.  8-10-cu hissəD - Davamlılıq - bu xassə təmin edir ki, əgər istifadəçi sistemdən tranzaksiyanın tamamlandığına dair təsdiq almışsa, onun etdiyi dəyişikliklərin hansısa uğursuzluq səbəbindən ləğv olunmayacağına əmin ola bilər. Yəni, əməliyyatınızın uğurla başa çatmasının təsdiqini artıq almısınızsa, əməliyyat sisteminin bir növ nasazlığının məlumatlarınıza heç nə etməyəcəyinə əmin ola bilərsiniz.

82. Əməliyyatın təcrid səviyyələri hansılardır?

Daha əvvəl dediyim kimi, ACID izolyasiyasının təmin edilməsi resurs tələb edən bir prosesdir. Buna görə də bu əmlak qismən təmin olunur. İzolyasiyanın müxtəlif səviyyələri var və səviyyə nə qədər yüksəkdirsə, məhsuldarlığa bir o qədər çox təsir göstərir. Əməliyyat təcrid səviyyələrinə keçməzdən əvvəl qeyri-kafi əməliyyat izolyasiyasının müxtəlif problemlərinə baxmalıyıq :
  • fantom oxu - eyni nümunə (eyni sorğu) eyni tranzaksiya çərçivəsində dəfələrlə çağırıldıqda, digər əməliyyat tərəfindən məlumatların daxil edilməsi səbəbindən baş verən alınan məlumatlar fərqlənir;

  • təkrarsız oxunuş - eyni sövdələşmə çərçivəsində eyni nümunə (eyni sorğu) dəfələrlə çağırıldıqda, digər əməliyyat tərəfindən məlumatların dəyişdirilməsi (yenilənməsi) və silinməsi nəticəsində baş verən alınan məlumatlar fərqlənir;

  • çirkli oxumaq - sonradan təsdiqlənməyən (geri yuvarlanan) bir əməliyyat tərəfindən əlavə edilmiş və ya dəyişdirilmiş məlumatların oxunması prosesi, yəni. etibarsız məlumatları oxumaq;

  • itirilmiş yeniləmə - müxtəlif əməliyyatlar eyni məlumatları eyni anda dəyişdirdikdə, sonuncudan başqa bütün dəyişikliklər itirilir (çox yivli mühitdə "yarış vəziyyəti" problemini xatırladır).

Tranzaksiya təcrid səviyyələri hansı izolyasiya problemlərindən qorunduğu ilə xarakterizə olunur. İzolyasiya səviyyələrini və hansı problemlərdən qoruduğunu cədvəl şəklində nəzərdən keçirək:
İzolyasiya səviyyəsi Fantom oxu Təkrarlanmayan oxu Çirkli oxu İtirilmiş yeniləmə
SERİYALANABİLƏN + + + +
TƏKRAR OXUYUN - + + +
OXUYUN - - + +
TƏHLÜKƏSİZ OXUYUN - - - +
YOX - - - -
Və sikkənin digər tərəfini də unutmayın: izolyasiya səviyyəsi nə qədər yüksək olarsa, əməliyyatlar bir o qədər uzun sürəcək (əgər bir neçə əməliyyat paralel olaraq həyata keçirilirsə). Bu mövzunu daha dərindən araşdırmaq istəyirsinizsə, burada sizə başlamaq üçün əla məqalə var.

83. Bəyanat və Hazırlanmış Bəyanat arasında fərq nədir?

Və burada JDBC texnologiyasının xüsusiyyətlərinə çox hamar bir keçid yoxdur . Beləliklə, əvvəlcə Bəyanatın əslində nə olduğunu anlayaq . Bu, SQL sorğuları yaratmaq üçün istifadə olunan bir obyektdir. JDBC üç növdən istifadə edir - Statement , PreparedStatementCallableStatement . Bu gün CallableStatement- ə baxmayacağıq : Gəlin StatementPreparedStatement arasındakı fərq haqqında danışaq .
  1. İfadə , daxil olan, dinamik olaraq daxil edilmiş parametrlər olmadan sadə SQL sorğularını yerinə yetirmək üçün istifadə olunur. PrepareStatement giriş parametrlərini dinamik şəkildə daxil etmək imkanı ilə istifadə olunur.

  2. PreparedStatement- də parametrləri təyin etmək üçün sorğudakı giriş parametrləri sual işarələri kimi yazılır, beləliklə, dəyər daha sonra setDouble() , setFloat() , setInt() , setTime() kimi müxtəlif təyinedicilərdən istifadə etməklə daxil edilə bilər ... . Nəticədə, siz sorğunuza yanlış məlumat növü daxil etməyəcəksiniz.

  3. PreparedStatement “əvvəlcədən tərtib edilmişdir” və keşləmədən istifadə edir, ona görə də onun icrası Statement obyektlərindən sorğudan bir qədər sürətli ola bilər . Nəticədə, tez-tez yerinə yetirilən SQL sorğuları performansı yaxşılaşdırmaq üçün PreparedStatement obyektləri kimi yazılır .

  4. Bəyanat SQL inyeksiyalarına qarşı həssasdır, PreparedStatement isə onların qarşısını alır. Bu məqalədə Java təhlükəsizliyində SQL inyeksiyalarının və digər ən yaxşı təcrübələrin aradan qaldırılması haqqında ətraflı oxuyun .

Java proqramını verilənlər bazasına - JDBC-yə qoşmaq texnologiyasını öyrənməyə başlayırsınızsa, sizə bu məqalə ilə başlamağı məsləhət görürəm . Yaxşı, bu nöqtədə bu gün dayanacağıq.Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 11
Seriyadakı digər materiallar:
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION