JavaRush /Блоги Java /Random-TG /Java Core. Саволҳо барои мусоҳиба, қисми 3
Vadim625
Сатҳи

Java Core. Саволҳо барои мусоҳиба, қисми 3

Дар гурӯҳ нашр шудааст
Дар ду мақолаи қаблӣ мо баъзе саволҳои муҳимеро баррасӣ кардем, ки дар мусоҳибаҳо ба шумо аксар вақт дода мешаванд. Вақти он расидааст, ки ба саволҳои боқимонда нигаред.
Java Core.  Саволҳои мусоҳиба, қисми 3 - 1

Нусхабардории амиқ ва нусхабардории камёфт

Нусхаи дақиқи аслӣ клони он аст. Дар Java ин маънои онро дорад, ки қобorяти сохтани an objectи дорои сохтори шабеҳ ба an objectи аслӣ мебошад. Усул clone()ин функсияро таъмин мекунад. Нусхаҳои на он қадар кам маълумотро нусхабардорӣ кунед. Бо нобаёнӣ, клонизатсия дар Java суст аст, яъне. Object classдар бораи сохтори синфе, ки нусхабардорӣ мекунад, намедонад. Ҳангоми клонкунӣ, JVM амалҳои зеринро иҷро мекунад:
  1. Агар синф танҳо аъзои намудҳои ибтидоӣ дошта бошад, пас нусхаи комилан нави an object сохта мешавад ва истинод ба он an object баргардонида мешавад.
  2. Агар синф на танҳо аъзои навъҳои ибтидоӣ, балки аъзои ҳама гуна навъи синфҳоро дар бар гирад, он гоҳ истинод ба an objectҳои ин синфҳо нусхабардорӣ карда мешавад. Аз ин рӯ, ҳарду an objectҳо истинодҳои якхела доранд.
Нусхабардории амиқ ҳама чизро такрор мекунад. Нусхабардории амиқ ин ду маҷмӯа аст, ки яке аз онҳо ҳама унсурҳои коллексияи аслиро такрор мекунад. Мо мехоҳем нусхабардорӣ кунем, ки ворид кардани тағирот ба ягон унсури нусха ба коллексияи аслӣ таъсир нарасонад. Клонизатсияи амиқ қоидаҳои зеринро талаб мекунад:
  1. Алоҳида нусхабардории маълумоти ибтидоӣ лозим нест;
  2. Ҳама синфҳои аъзо дар синфи аслӣ бояд клонкуниро дастгирӣ кунанд. Барои ҳар як узви синф, бояд super.clone()ҳангоми бекор кардани метод даъват карда шавад clone();
  3. Агар ягон узви синф клонкуниро дастгирӣ накунад, пас дар усули клон, шумо бояд як мисоли нави он синфро эҷод кунед ва ҳар як аъзои онро бо тамоми атрибутҳо ба an objectи синфи нав як-як нусхабардорӣ кунед.
Маълумоти бештарро дар бораи клонкунӣ дар ин ҷо пайдо кунед

Синхронизатсия чист? Қулфбандии сатҳи an object ва қулфкунии сатҳи синф?

Синхронизатсия ба чанд ришта дахл дорад. Блоки ҳамоҳангшудаи code метавонад дар як вақт танҳо аз ҷониби як ришта иҷро карда шавад. Java ба шумо имкон медиҳад, ки дар як вақт якчанд риштаҳоро коркард кунед. Ин метавонад боиси он гардад, ки ду ё зиёда риштаҳо мехоҳанд ба як майдон дастрасӣ пайдо кунанд. Ҳамоҳангсозӣ барои пешгирӣ кардани хатогиҳои хотира, ки ҳангоми истифодаи нодурусти захираҳои хотира рух медиҳанд, кӯмак мекунад. Вақте ки усул ҳамчун ҳамоҳангшуда эълон карда мешавад, ришта монитори худро нигоҳ медорад. Агар риштаи дигар дар айни замон кӯшиш кунад, ки ба усули ҳамоҳангшуда дастрасӣ пайдо кунад, ришта баста мешавад ва интизор мешавад, ки монитор озод шавад. Синхронизатсия дар Java бо калимаи махсуси ҳамоҳангшуда анҷом дода мешавад . Шумо метавонед блокҳо ё усулҳои алоҳидаро дар синфи худ бо ин роҳ қайд кунед. Калимаи калидии ҳамоҳангшуда наметавонад дар якҷоягӣ бо тағирёбандаҳои синф ё атрибутҳо истифода шавад. Қулфкунии сатҳи an object механизмест, ки вақте шумо мехоҳед усули ғайристатикӣ ё блоки ғайристатикии codeро ҳамоҳанг созед, то танҳо як ришта блоки codeро дар мисоли додаи синф иҷро кунад. Ин бояд ҳамеша анҷом дода шавад, то риштаи мисоли синф бехатар бошад. Қулфбандии сатҳи синф риштаҳои сершуморро аз ворид шудан ба блоки ҳамоҳангшуда барои ҳамаи мисолҳои дастраси синф пешгирӣ мекунад. Масалан, агар 100 мисоли синфи DemoClass мавҷуд бошад, он гоҳ танҳо 1 ришта метавонад demoMethod() -ро бо истифода аз яке аз тағирёбандаҳо дар вақти муайян иҷро кунад. Ин бояд ҳамеша барои таъмини бехатарии риштаи статикӣ анҷом дода шавад. Дар ин ҷо дар бораи ҳамоҳангсозӣ бештар маълумот гиред.

Фарқи байни хоб () ва интизорӣ () чист?

Sleep()усулест, ки барои чанд сония ба таъхир андохтани раванд истифода мешавад. Дар ҳолати wait(), ришта дар ҳолати интизорӣ қарор дорад, то даме ки мо усули notify()ёро даъват кунем notifyAll(). Фарқияти асосӣ дар он аст, ки wait()он қулфи мониторро озод мекунад, дар ҳоле ки он sleep()қулфро озод намекунад. Wait()барои барномаҳои чанд ришта истифода мешавад ва sleep()танҳо барои таваққуфи иҷрои ришта истифода мешавад. Thread.sleep()риштаи ҷориро дар ҳолати "Иҷрошаванда" дар муддати муайян мегузорад. Ришта ҳолати мониторро, ки пеш аз даъват кардани ин усул буд, захира мекунад. Агар риштаи дигаре занг занад t.interrupt(), риштае, ки "хоб рафтааст" бедор мешавад. Дар хотир доред, ки ин sleep()усули статикӣ аст, яъне он ҳамеша ба риштаи ҷорӣ таъсир мерасонад (яке, ки методро иҷро мекунад sleep()). Хатогии маъмул ин занг задан t.sleep()дар куҷост tриштаи дигар; ҳатто вақте ки риштаи ҷорӣ, ки методро номидааст, ришта sleep()нест . риштаи ҷориро барои муддате ба ҳолати "Иҷронашаванда" мефиристад, мисли , аммо бо баъзе нозукиҳо. ба an object даъват карда мешавад, на ришта; мо ин an objectро "an objectи қулф" меномем. Пеш аз занг задан риштаи ҷорӣ бояд бо "an objectи қулф" ҳамоҳанг карда шавад; пас аз ин, он ин қулфро мебарорад ва риштаро ба "рӯйхати интизорӣ" -и марбут ба ин қулф илова мекунад. Баъдтар, риштаи дигар метавонад бо ҳамон an objectи қулф ҳамоҳанг созад ва . Ин усул риштаи аслиро, ки ҳанӯз интизор аст, "бедор" мекунад. Аслан, / ро бо / муқоиса кардан мумкин аст , танҳо риштаи фаъол ба нишондиҳандаи мустақим ба риштаи хоб ниёз надорад, он танҳо бояд an objectи қулфи муштаракро донад. Тафовути муфассалро дар ин ҷо хонед.tObject.wait()sleep()Wait()lock.wait()wait()lock.notify()wait()notify()sleep()interrupt()

Оё имкон дорад, ки ба ин тағирёбандаи истинод нул таъин карда шавад?

Не, шумо наметавонед. Дар Java тарафи чапи оператори таъинот бояд тағирёбанда бошад. "Ин" калимаи махсусест, ки ҳамеша намунаи ҷории синфро медиҳад. Ин танҳо як тағирёбанда нест. Ба ҳамин монанд, null наметавонад ба тағирёбанда бо истифода аз калимаи калидии "супер" ё ягон калимаи дигари шабеҳ таъин карда шавад.

Фарқи байни && ва & чист?

&- бит ва &&- мантиқӣ.
  1. &хар ду тарафи амалиётро бахо медихад;
  2. &&тарафи чапи амалиётро баҳо медиҳад. Агар дуруст бошад, он баҳодиҳии тарафи ростро идома медиҳад.
Барои фаҳмиши амиқтар дар ин ҷо нигаред.

Чӣ тавр усулҳои equals() ва hachCode()-ро бекор кардан мумкин аст?

hashCode()ва equals()усулҳо дар синф муайян карда шудаанд Object, ки синфи волидайн барои an objectҳои Java мебошад. Аз ин сабаб, ҳама an objectҳои Java татбиқи пешфарзро барои усулҳо мерос мегиранд. Ин усул hashCode()барои ба даст овардани адади ягонаи an objectи додашуда истифода мешавад. Ин адад барои муайян кардани ҷойгиршавии an object, вақте ки ин an object бояд захира карда шавад, истифода мешавад, масалан HashTable. Бо нобаёнӣ, тасвири суроғаи макони хотираро, ки an object нигоҳ дошта мешавад, hashCode()бармегардонад . integerУсули equls(), тавре ки аз номаш бармеояд, барои санҷиши баробар будани ду an object истифода мешавад. Татбиқи пешфарз истинодҳои an objectро месанҷад, то бубинад, ки онҳо баробаранд. Дар зер дастурҳои муҳим барои дубора боркунии ин усулҳо мавҷуданд:
  1. Ҳамеша як атрибутҳои an objectро ҳангоми тавлид hashCode()ва equals();
  2. Симметрия. Онхое. xагар он барои баъзе an objectҳо ҳақиқӣ баргардад y x.equals(y), пас он y.equals(x)бояд ҳақиқӣ баргардад;
  3. Рефлексия. Барои ҳар як an object x x.equals(x)бояд ҳақиқӣ баргардад;
  4. Мутобиқати. Барои ҳама гуна an objectҳо xва y x.equals(y)ҳамон чизеро бармегардонад, агар маълумоти дар муқоиса истифодашуда тағир наёбад;
  5. Гузариш. Барои ҳама an objectҳои x, yва z, агар x.equals(y)он ҳақиқӣ баргардад ва y.equals(z)ҳақиқӣ баргардад, он x.equals(z)бояд true баргардад;
  6. Ҳар вақте ки метод дар як an object ҳангоми иҷрои барнома даъват мешавад, он бояд ҳамон рақамро баргардонад, агар маълумоти истифодашуда тағир наёбад. hashCodeметавонад арзишҳои гуногунро барои an objectҳои якхела дар мисолҳои гуногуни барнома баргардонад;
  7. Агар ду an object мувофиқи , баробар бошанд equals, онҳо hashCodeбояд арзишҳои якхеларо баргардонанд;
  8. Талаботи муқобил ихтиёрӣ аст. Ду an objectи нобаробар метавонанд ҳамон hashCode-ро баргардонанд. Аммо, барои беҳтар кардани кор, беҳтар аст, ки an objectҳои гуногун рамзҳои гуногунро баргардонанд.
Дар ин ҷо далелҳои ҷолибро дар бораи ин усулҳо хонед.

Дар бораи тағирдиҳандаҳои дастрасӣ ба мо бигӯед

Синфҳо, майдонҳо, конструкторҳо ва усулҳои Java метавонанд яке аз чаҳор тағирдиҳандаи дастрасии гуногун дошта бошанд: хусусӣ Агар усул ё тағирёбанда хусусӣ қайд карда шуда бошад , танҳо code дар дохor як синф метавонад ба тағирёбанда дастрасӣ пайдо кунад ё методро даъват кунад. Код дар дохor зерклассҳо наметавонад ба тағирёбанда ё усул дастрасӣ пайдо кунад ва на он аз ягон синфи дигар дастрас шавад. Тағирдиҳандаи дастрасии хусусӣ бештар барои созандаҳо, усулҳо ва тағирёбандаҳо истифода мешавад. пешфарз Тағйирдиҳандаи дастрасии пешфарз эълон карда мешавад, агар тағирдиҳанда умуман муайян карда нашавад. Ин тағирдиҳанда маънои онро дорад, ки дастрасӣ ба майдонҳо, конструкторҳо ва усулҳои синфи додашударо тавассути code дар дохor худи синф, code дар дохor синфҳо дар як баста ба даст овардан мумкин аст. Зерсинфҳо наметавонанд ба усулҳо ва тағирёбандаҳои аъзои суперсинф дастрасӣ пайдо кунанд, агар онҳо ҳамчун пешфарз эълон карда шаванд , ба шарте ки зерсинфҳо дар як баста бо суперсинф набошад. protected Тағирдиҳандаи муҳофизатшуда ҳамон тавре кор мекунад default , ба истиснои ин ки зерсинфҳо инчунин метавонанд ба усулҳои ҳифзшуда ва тағирёбандаҳои суперкласс дастрасӣ пайдо кунанд. Ин изҳорот дуруст аст, ҳатто агар зерсинф дар як баста бо суперкласс набошад. public Тағйирдиҳандаи дастрасии ҷамъиятӣ маънои онро дорад, ки ҳама codeҳо метавонанд ба синф, тағирёбандаҳо, конструкторҳо ё усулҳои он, новобаста аз он, ки ин code ҷойгир аст, дастрасӣ пайдо кунад. Java Core.  Саволҳо барои мусоҳиба, қисми 3 - 2

Ҷамъоварии партов чист? Оё мо метавонем ба ӯ занг занем?

Ҷамъоварии партовҳо як хусусияти идоракунии автоматии хотира дар бисёр забонҳои барномасозии муосир, аз қабor Java ва забонҳо дар NET.Framework мебошад. Забонҳое, ки ҷамъоварии ахлотро истифода мебаранд, аксар вақт ҷамъоварии ахлотро дар мошини виртуалӣ ба монанди JVM шарҳ медиҳанд. Ҷамъоварии партовҳо ду ҳадаф дорад: ҳама гуна хотираи истифоданашуда бояд озод карда шавад ва хотира набояд озод карда шавад, агар барнома аз он истифода кунад. Оё шумо метавонед ҷамъоварии партовҳоро дастӣ иҷро кунед? Не, System.gc()он ба шумо то ҳадди имкон дастрасии бештар медиҳад. Беҳтарин вариант занг задан ба метод аст System.gc(), ки ба коллектори ахлот ишора мекунад, ки бояд кор кунад. Ягон роҳи фавран ба кор андохтани он вуҷуд надорад, зеро коллектори партовҳо муайянкунанда нест. Илова бар ин, тибқи ҳуҷҷатҳо, OutOfMemoryErrorагар мошини виртуалӣ пас аз ҷамъоварии пурраи партовҳо хотираро холӣ карда натавонад, он интиқол дода намешавад. Дар ин ҷо дар бораи коллекторҳои партов маълумоти бештар гиред.

Калимаи калидии ватанӣ чӣ маъно дорад? Ба таври муфассал шарҳ диҳед

Калимаи калидии аслӣ барои нишон додани он истифода мешавад, ки усул дар забони барномасозӣ ғайр аз файли Java амалӣ карда мешавад. Дар гузашта усулҳои ватанӣ истифода мешуданд. Дар versionҳои кунунии Java ин камтар лозим аст. Дар айни замон, усулҳои ватанӣ заруранд, вақте ки:
  1. Шумо бояд китобхонаеро аз Java даъват кунед, ки бо забони дигар навишта шудааст.
  2. Ба шумо дастрасӣ ба захираҳои система ё сахтафзор лозим аст, ки онҳоро танҳо бо истифода аз забони дигар дастрас кардан мумкин аст (одатан C). Дарвоқеъ, бисёр вазифаҳои системаро, ки бо компютери воқеӣ мутақобила мекунанд (ба монанди дискҳо ё маълумоти шабакавӣ) танҳо бо усули аслӣ даъват карда мешаванд.
Камбудиҳои истифодаи китобхонаҳои усули ватанӣ низ назаррасанд:
  1. JNI/JNA метавонад JVM-ро ноустувор созад, хусусан агар шумо кӯшиш кунед, ки ягон чизи мураккабро иҷро кунед. Агар усули аслии шумо ягон кори нодуруст кунад, эҳтимолияти суқути JVM вуҷуд дорад. Инчунин, чизҳои бад метавонанд рӯй диҳанд, агар усули аслии шумо аз якчанд ришта даъват карда шавад. Ва ғайра.
  2. Бартараф кардани барнома бо рамзи аслӣ мушкилтар аст .
  3. Рамзи аслӣ сохтани чаҳорчӯбаи алоҳидаро талаб мекунад, ки метавонад ҳангоми интиқол ба платформаҳои дигар мушкилот эҷод кунад.

Сериализатсия чист?

Дар илми информатика, дар заминаи нигоҳдорӣ ва интиқоли додаҳо, сериализатсия раванди тарҷумаи сохтори додаҳо ё ҳолати an object ба форматест, ки онро дар муҳити дигари компютерӣ нигоҳ доштан ва баъдтар дарёфт кардан мумкин аст. Пас аз гирифтани як қатор битҳо, онҳо мувофиқи формати сериализатсия дубора ҳисоб карда мешаванд ва метавонанд барои сохтани як клони семантикии an objectи аслӣ истифода шаванд. Java сериализатсияи автоматиро таъмин мекунад, ки an objectро барои татбиқи интерфейс талаб мекунад java.io.Serializable. Амалисозии интерфейс синфро ҳамчун "сериализатсияшаванда" қайд мекунад. Интерфейси java.io.Serializable усулҳои сериализатсия надорад, аммо синфи serializable ихтиёрӣ метавонад усулҳоеро муайян кунад, ки ҳамчун як қисми раванди силсиласозӣ/дисериализатсия номида мешаванд. Ҳангоми ворид кардани тағирот ба синфҳо, шумо бояд ба назар гиред, ки кадоме аз онҳо бо сериализатсия мувофиқат мекунанд ва нахоҳанд буд. Шумо метавонед дастурҳои пурраро дар ин ҷо хонед. Ман нуктаҳои муҳимтаринро медиҳам: Тағироти номувофиқ:
  1. Майдонро нест кунед;
  2. Синфро дар иерархия ба боло ё поён ҳаракат кунед;
  3. Тағир додани майдони ғайристатикӣ ба статикӣ ё ғайригузаранда ба муваққатӣ;
  4. Тағир додани навъи маълумоти ибтидоии эълоншуда;
  5. Тағир додани усул WriteObjectё ReadObjectба тавре ки онҳо дигар майдонҳоро ба таври нобаёнӣ наменависанд ё намехонад;
  6. Тағир додани синф Serializableба Externalizableё баръакс;
  7. Тағир додани синфи рақамӣ ба рақами номбаршуда ё баръакс;
  8. Хориҷ кардан Serializableё Externalizable;
  9. Илова кардани writeReplaceусул readResolveба синф.
Тағироти мувофиқ:
  1. Илова кардани майдонҳо;
  2. Илова / хориҷ кардани синфҳо;
  3. Илова кардани усулҳо WriteObject/ReadObject[методҳо defaultReadObjectё defaultWriteObjectбояд дар ибтидо даъват карда шаванд];
  4. усулҳои бартараф WriteObject/ReadObject;
  5. Илова java.io.Serializable;
  6. Тағир додани дастрасии майдон;
  7. Тағир додани майдони статикӣ ба ғайристатикӣ ё муваққатӣ ба ғайригузаранда .
Пайвандҳо ба қисмҳои қаблӣ: Java Core. Саволҳои мусоҳиба, қисми 1 Java Core. Саволҳои мусоҳиба, қисми 2 Мақолаи аслӣ Таҳсил муборак!
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION