71. Агар мо усули toString()-ро барои Enum бекор накунем, чӣ мешавад?
Фарз мекунем, ки мо рақами зерин дорем :public enum Role {
STUDENT,
TEACHER,
DIRECTOR,
SECURITY_GUARD;
}
Биёед донишҷӯро дар консол бо занги toString() ба ӯ нишон диҳем :
System.out.println(Role.STUDENT.toString());
Натиҷа дар консол:
72. Оё дар дохor Enum конструкторро муайян кардан мумкин аст?
Ҳа, албатта. Маҳз тавассути конструктор арзишҳои тағирёбандаҳои дохorи enum муқаррар карда мешаванд. Ба унвони мисол, биёед ду майдонро ба рақами қаблӣ илова кунем - ageFrom ва ageTo - барои нишон додани диапазони синну сол барои ҳар як нақш: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. Фарқи байни == ва баробар() чист?
Ин яке аз маъмултарин саволҳои мусоҳибаи таҳиягарони Java мебошад. Биёед бо он оғоз кунем, ки вақте ки мо арзишҳои оддиро муқоиса мекунем ( int , char , double ...), мо онро бо истифода аз == мекунем , зеро тағирёбандаҳо дорои арзишҳои мушаххас мебошанд ва мо метавонем онҳоро муқоиса кунем. Ва тағирёбандаҳои ибтидоӣ an objectҳои мукаммал нестанд - онҳо аз Object мерос намегиранд ва усули equals() надоранд . Вақте ки мо дар бораи муқоисаи тағирёбандаҳое, ки ба an objectҳо дахл доранд, гап мезанем, == танҳо арзиши истинодҳоро муқоиса мекунад - хоҳ онҳо ба як an object дахл доранд ё не. Ва ҳатто агар як an object ба an objectи дигар шабеҳ бошад ҳам, муқоиса тавассути == натиҷаи манфӣ медиҳад ( false ), зеро ин an objectи дигар аст. Тавре ки шумо фаҳмед, усули equals() барои муқоисаи тағирёбандаҳои истинод истифода мешавад . Ин яке аз усулҳои стандартии синфи Object мебошад , ки барои муқоисаи пурраи an objectҳо зарур аст. Аммо дарҳол равшан кардан лозим аст: барои он ки ин усул дуруст кор кунад, онро бо навиштани маҳз чӣ гуна an objectҳои ин синф муқоиса кардан лозим аст, муайян кардан лозим аст. Агар шумо ин усулро бекор накунед, он ба таври нобаёнӣ an objectҳоро бо == муқоиса мекунад . Дар IntelliJ IDEA , шумо метавонед онро ба таври худкор бекор кунед (бо истифода аз абзорҳои IDEA) -> alt + insert , дар равзанаи пайдошуда, баробар() ва hashCode() -> интихоб кунед, ки кадом майдонҳо бояд иштирок кунанд -> ва voila, татбиқи автоматии усулҳо анҷом дода мешаванд. Дар ин ҷо мисоли он аст, ки усули ба таври худкор тавлидшуда барои синфи оддии Cat бо ду майдон - int age ва String 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);
}
Агар мо дар бораи фарқияти байни == ва баробар барои enums гап занем , он қадар зиёд нест. Дар ниҳоят, enum константаҳоро нигоҳ медорад ва ҳатто ҳангоми муқоисаи арзишҳои шабеҳ бо истифода аз == , мо true -ро мегирем , зеро истинодҳо ҳамеша ба ҳамон an objectҳо хоҳанд буд. Хуб, ҳангоми истифодаи баробар, мо инчунин функсияро дуруст кор мекунем, хусусан агар шумо ба бадани усули баробар барои enum ворид шавед , шумо хоҳед дид, ки дар синфи Enum татбиқи усул чунин аст: Яъне, дар дохor - муқоисаи хуби кӯҳна бо истинод! Барои ҷамъбаст: барои enum , муқоиса ҳам тавассути == ва ҳам баробар дуруст аст.
74. Усули ordinal() дар Enum чї кор мекунад?
Ҳангоми занг задан ба усули int ordinal() дар элементи рақамӣ , мо рақами тартибиро аз сифри ин арзиш дар силсилаи умумии рӯйхатҳо мегирем. Биёед ин усулро дар як унсури рақами қаблии муҳокимашуда истифода барем - Нақш :System.out.println(Role.DIRECTOR.ordinal());
Мувофиқи он, консол нишон медиҳад:
75. Оё Enum-ро бо TreeSet ё TreeMap дар Java истифода бурдан мумкин аст?
Истифодаи намудҳои enum дар TreeSet ва TreeMap қобor қабул аст. Ва мо метавонем нависем: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);
Ва консол нишон медиҳад:
76. Усулҳои ordinal() ва compareTo() дар Enum чӣ гуна алоқаманданд?
Тавре ки қаблан гуфта шуд, ordinal() рақами тартибии арзишро дар рӯйхати барӯйхатгирии умумӣ бармегардонад. Инчунин, ҳангоми таҳлor саволи қаблӣ шумо дидед, ки унсурҳои рӯйхатҳо, як маротиба, масалан, дар TreeSet (маҷмӯи мураттабшуда) тартиби дар enum эълоншударо мегиранд . Ва тавре ки мо медонем, TreeSet ва TreeMap унсурҳоро бо даъват кардани усули муқоисашавандаи худ аз интерфейси муқоисашаванда ҷудо мекунанд . Аз ин рӯ, мо метавонем тахмин кунем, ки синфи Enum интерфейси Муқоисашавандаро амалӣ мекунад ва онро дар усули compareTo() амалӣ мекунад , ки дар дохor он ordinal() барои муқаррар кардани тартиби навъбандӣ истифода мешавад. Пас аз ворид шудан ба синфи Enum , мо тасдиқи инро мебинем: Ва қисми худи метод: Усули ordinal() дар ин ҷо номида намешавад. Ба ҷои ин, тағирёбандаи тартиби истифода мешавад - рақами тартибии элемент дар рӯйхат. Худи усули ordinal() чизе ҷуз як гиреҳ барои тағирёбандаи ordinal .77. Намунаи EnumM нависед
Дар саволҳои дар боло баррасӣшуда, ман аллакай мисолҳои рақамҳоро дода будам ва ман дар такрор кардани code аҳамият надорам (масалан, саволи рақами 72 дар бораи конструктор дар enum).78. Оё Enum-ро дар ҳолати коммутатсионӣ истифода бурдан мумкин аст?
Ин имконпазир ва зарур аст! Ба таҷрибаи худ назар карда, ман қайд мекунам, ки яке аз ҷойҳои маъмултарини истифодаи enum сохторҳои мантиқӣ ба монанди switch мебошад . Дар ин ҳолат, шумо метавонед ҳама вариантҳои имконпазири парвандаро пешниҳод кунед ва пас аз навиштани мантиқ барои ҳамаи арзишҳои enum - ва истифодаи оператори пешфарз шояд ҳатто лозим набошад! Дар ниҳоят, агар шумо String ё арзиши рақамиро истифода баред, масалан, навъи int , шумо метавонед арзиши ғайричашмдошт гиред, ки дар навбати худ бо истифода аз enum ғайриимкон аст . Гузариш барои мисоли дар боло баррасӣшуда чӣ гуна хоҳад буд :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 гирифтан мумкин аст?
Агар ба шумо лозим аст, ки ҳамаи мисолҳои рақамиро гиред, усули values() мавҷуд аст , ки массиви ҳамаи арзишҳои дастраси рақами мушаххасро бо тартиби табиӣ бармегардонад (бо тартиби дар enum муайяншуда ). Мисол:Role[] roles = Role.values();
for (Role role : roles) {
System.out.println(role);
}
Консол баромади зеринро нишон медиҳад:
API Stream
80. Stream дар Java чист?
Java Stream як роҳи нисбатан нави ҳамкорӣ бо ҷараёни додаҳо мебошад, ки дар навбати худ ба шумо имкон медиҳад, ки маълумоти калонро ба осонӣ ва паймон коркард кунед, инчунин коркарди маълумотро дар байни шумораи муайяни риштаҳо параллел созед, ки метавонад дар истифодаи онҳо самаранокии худро баланд бардорад. функсия. Ин мавзӯъро ба таври мухтасар амиқтар баррасӣ кардан мумкин нест, аз ин рӯ ман дар ин ҷо истиноди мақолаеро мегузорам, ки метавонад ба шумо барои ворид шудан ба ин мавзӯъ кӯмак кунад.81. Хусусиятњои асосии муомилот кадомњоянд?
Мавзӯъ Stream API номида мешавад, аммо савол дар бораи транзаксия аст. Хм... Аввалан, биёед бифаҳмем, ки муомилот чист. Амалиёт як гурӯҳи амалиёти пайдарпайи пойгоҳи додаҳо мебошад, ки воҳиди мантиқии кор бо додаҳоро ифода мекунад. Муомилот метавонад пурра ва бомуваффақият анҷом дода шавад, ки тамомияти маълумотро нигоҳ медорад ва новобаста аз дигар амалиётҳои мувозӣ иҷро карда мешавад ё онро тамоман анҷом додан мумкин нест, дар ин ҳолат он таъсир намерасонад. Ҳамин тариқ, транзаксияҳо дорои чаҳор хосияти асосӣ мебошанд, ки онҳоро ба таври кӯтоҳ ACID меноманд . Биёед бубинем, ки ҳар як ҳарфи ин ихтисорот чӣ гуна маъно дорад: A - Atomicity - atomicity - ин амвол кафолат медиҳад, ки ягон транзаксия қисман дар система сабт карда намешавад. Ё ҳамаи зерамалҳои он иҷро мешаванд, ё ҳеҷ кадоме иҷро намешаванд ( ҳама ё ҳеҷ чиз ). C - Пайвастагӣ - мутобиқат моликиятест, ки кафолат медиҳад, ки ҳар як амалиёти муваффақ танҳо натиҷаҳои дурустро сабт мекунад. Яъне, ин кафолати он аст, ки дар сурати анҷоми муомилоти бомуваффақият, ҳама қоидаҳо ва маҳдудиятҳое, ки система ба маълумоти мушаххас мегузорад, риоя мешаванд, вагарна транзаксия анҷом намеёбад ва маълумот дар система ба ҳолати қаблии худ бармегардад. давлат. I - Изолятсия - изолятсия моликиятест, ки мегӯяд, ки ҳангоми иҷрои муомилот амалиёти мувозӣ набояд ба натиҷаи он таъсир расонад. Ин амвол захираҳои серталаб аст, аз ин рӯ он одатан қисман тавассути имкон додани сатҳҳои муайяни изолятсия, ки мушкилоти муайяни изолятсияро ҳал мекунанд, амалӣ карда мешавад. Мо дар ин бора дар саволи навбатӣ муфассалтар сӯҳбат хоҳем кард. D - Давомнокӣ - ин амвол кафолат медиҳад, ки агар корбар аз система тасдиқи анҷоми транзаксияро гирифта бошад, ӯ боварӣ дошта метавонад, ки тағиротҳои воридкардаи ӯ бо сабаби баъзе нокомиҳо бекор карда намешаванд. Яъне, шумо боварӣ дошта метавонед, ки ягон намуди нокомии системаи оператсионӣ ба маълумоти шумо ҳеҷ коре намекунад, агар шумо аллакай тасдиқи анҷоми бомуваффақияти транзаксияро гирифта бошед.82. Сатҳи ҷудошавии транзаксияҳо кадомҳоянд?
Тавре ки ман қаблан гуфтам, таъмини изолятсияи ACID як раванди серталаб аст. Аз ин рӯ, ин амвол қисман конеъ карда мешавад. Дараҷаҳои изолятсия гуногунанд ва ҳар қадаре, ки сатҳ баланд бошад, ба ҳосилнокӣ ҳамон қадар таъсир мерасонад. Пеш аз гузаштан ба сатҳи изолятсияи транзаксия, мо бояд ба мушкилоти гуногуни ҷудокунии нокифояи транзаксия назар кунем :-
хондани фантом - вақте ки як намуна (як дархост) дар доираи як транзаксия такроран даъват карда мешавад, маълумоти гирифташуда фарқ мекунад, ки дар натиҷаи ворид кардани маълумот аз ҷониби транзаксияи дигар ба амал меояд;
-
хониши такрорнашаванда – хангоми дар доираи як амалиёт такроран як намуна (як дархост) даъват карда мешавад, маълумоти гирифташуда фарк мекунад, ки дар натичаи тагйирот (навсозӣ) ва нест кардани маълумот бо амалиёти дигар ба амал меояд;
-
хондани ифлос - раванди хондани маълумот аз ҷониби транзаксия иловашуда ё тағир додашуда, ки баъдан тасдиқ нашудаанд (бозгашт), яъне. хондани маълумоти беэътибор;
-
навсозии гумшуда - вақте ки транзаксияҳои гуногун як маълумотро дар як вақт иваз мекунанд, ҳама тағирот ба истиснои охирин гум мешаванд (мушкилоти "ҳолати нажод" дар муҳити бисёр риштаро ба хотир меорад).
Сатҳи изолятсия | Хониши фантом | Хониши такрорнашаванда | Хониши ифлос | Навсозии гумшуда |
---|---|---|---|---|
СЕРИАЛИСТОН | + | + | + | + |
ХОНДАНИ ТАКРОР | - | + | + | + |
ХОНЕД Ухдадор шуд | - | - | + | + |
БЕХТАРИН ХОНЕД | - | - | - | + |
ҲЕҶ | - | - | - | - |
83. Фарқи байни Изҳорот ва Изҳороти омодашуда чист?
Ва дар ин ҷо гузариши хеле ҳамвор ба хусусиятҳои технологияи JDBC вуҷуд надорад . Пас, аввал биёед бифаҳмем, ки Изҳорот дар асл чист . Ин an objectест, ки барои тавлиди дархостҳои SQL истифода мешавад. JDBC се намудро истифода мебарад - Изҳорот , PreparedStatement ва CallableStatement . Мо имрӯз ба CallableStatement нигоҳ намекунем : биёед дар бораи фарқияти байни Изҳорот ва PreparedStatement сӯҳбат кунем .-
Изҳорот барои иҷро кардани дархостҳои оддии SQL бидуни параметрҳои воридотӣ ва динамикӣ истифода мешавад. PrepareStatement бо қобorяти ба таври динамикӣ ворид кардани параметрҳои вуруд истифода мешавад.
-
Барои гузоштани параметрҳо дар PreparedStatement, параметрҳои воридотӣ дар дархост ҳамчун аломати савол навишта мешаванд, то ки баъдан қимат ба ҷои он бо истифода аз танзимкунандаҳои гуногун, ба мисли setDouble() , setFloat() , setInt() , setTime() ворид карда шавад ... . Дар натиҷа, шумо намуди нодурусти маълумотро ба дархости худ ворид намекунед.
-
PreparedStatement "пешакӣ тартиб дода шудааст" ва кэшро истифода мебарад, бинобар ин иҷрои он метавонад нисбат ба дархост аз an objectҳои Изҳорот каме тезтар бошад . Дар натиҷа, дархостҳои SQL, ки зуд-зуд иҷро мешаванд, ҳамчун an objectҳои PreparedStatement барои беҳтар кардани иҷроиш навишта мешаванд .
-
Изҳорот ба тазриқи SQL осебпазир аст, дар ҳоле ки PreparedStatement онҳоро пешгирӣ мекунад. Дар бораи аз байн бурдани тазриқи SQL ва дигар таҷрибаҳои беҳтарин дар амнияти Java дар ин мақола бештар хонед .
GO TO FULL VERSION