JavaRush /Java блогу /Random-KY /Javaдагы Enumга байланыштуу 15 Иштеп чыгуучунун интервью ...
Treefeed
Деңгээл

Javaдагы Enumга байланыштуу 15 Иштеп чыгуучунун интервью суроолору (жооптор менен!)

Группада жарыяланган
Санактоо ( Enum ) Java 5те киргизилген жана ошондон бери ал Java иштеп чыгуучулары арасында абдан популярдуу болуп калды. Ал ар кандай Java колдонмолорунда кеңири колдонулат. Javaдагы Enum C же C++ тилдерине караганда алда канча ар тараптуу болгондуктан, ал ошондой эле көптөгөн кызыктуу колдонуу учурларын сунуштайт, алардын бир нечесин Java'да Enum колдонуунун 10 жолдору макаласында көргөнсүз . Бирок бул популярдуулугуна карабастан, көптөгөн Java программисттери дагы эле Enum тарабынан берилген функцияларды жана Java codeунда Enumду колдонуунун татаалдыктарын бorшпейт. Бул, мисалы, Энумдун Java-да интерфейсти ишке ашыруу мүмкүнчүлүгү жөнүндө же эмне үчүн биз Enum-дан тышкаркы энумдарды ишке киргизе албайбыз деп сураган бир нече окурмандардан айкын болду , алар интервьюда бул жөнүндө сурашканын белгилешти. Бул бизге Java Enum тorнде көп берилүүчү суроолордун тизмесин түзүүгө шыктандырды , алар сизге интервьюларда ийгorкке жетүүгө гана жардам бербестен, окуунун жаңы жолдорун ачат. Озал айдылышы ялы, йыгы-йыгыдан интервью берйэн соваллар сизи теманы хас дуйпли кабул этмэге межбур эдйэр, мунун ези болса ярамаз зат дэлдир, енумиц гуйжи ве пейдалылыгы назарда тутулса, сиз енумиц уссады болмага вагт етди. Төмөндө Энумдун ар кандай функцияларына жана касиеттерине негизделген суроолордун тизмеси. Сиз аны интервьюга даярдоо материалы же жөн гана санап чыгуу үчүн колдонмо катары колдоно аласыз. Эгер сиз Java үчүн жаңы болсоңуз, сиз Enum жөнүндө көптөгөн жаңы жана пайдалуу нерселерди биле аласыз. 1) Enum Java интерфейсин ишке ашыра алабы? Ооба, Enum интерфейстерди мурастай алат . Enum түрү класска жана интерфейске окшош болгондуктан , ал интерфейсти мурастай алат. Бул кээ бир учурларда көнүмүш ишке ашыруу катары Enum колдонууда укмуштуудай ийкемдүүлүктү берет. Бу ерде енумчorгиц шу гуйжи билен уланмагыц говы мысалыдыр. 2) Enum классты мурастай алабы (кеңейтет)? Жок, ал алbyte! Күтүлбөгөн нерсе, анткени мурда Enum түрү Javaдагы класска же интерфейске окшош деп айтылган. Ооба, бул суроонун мурунку суроодон кийин эле берorшинин негизги себеби. Enum java.lang.Enum абстракттуу классынан мурунтан эле мурастап калгандыктан , башка класс мурастай албасы анык, анткени Java бир нече класс мурасын колдобойт. Java.lang.Enum'дан мурастоо менен , бардык эсептердин ordinal() , values() же valueOf() ыкмалары бар . 3) Объект инстанциялары жок Enum кантип түзүлөт? Бул компиляция катасысыз мүмкүнбү? Бул интервью алуучулар жакшы көргөн татаал суроолордун бири . Энум жуманын күндөрү же жылдын айлары сыяктуу белгилүү бир сандагы an objectтердин жыйындысы катары каралып жаткандыктан, эч нерсесиз өндүрүштү алуу шектүү көрүнөт. Бирок ооба, мисалы, утorта классын түзүү менен инстанцияларсыз Enum түзө аласыз . Бул Enum колдонуунун дагы бир инновациялык жолу: 4) Enum үчүн toString() ыкмасын жокко чыгара алабызбы? Биз жокко чыгарбасак эмне болот? Албетте, сиз Enum'тун toString() ыкмасын жокко чыгара аласыз, анткени сиз java.lang.Object мураска ээ болгон жана toString() методу бар каалаган классты жокко чыгара аласыз жана андай болбосоңуз да, сиз эч нерсе жоготпойсуз, анткени абстракт Enum классынын базасы муну сиз үчүн кылат жана Enum инстанциясынын аты болгон атын кайтарат. Бул жерде Enum классындагы toString() методунун codeу : аталышы компилятор Enum классынын өзүндө инстанция түзүүгө жооп катары enum түзүү үчүн codeду бөлгөндө, ошондой эле конструктордо ординал түзүүдө көрсөтүлөт. java.lang.Enum классы : Бул программадагы Enum декларациясына жооп катары компилятор тарабынан чакырылган enum түзүү үчүн жалгыз конструктор . 5) Биз энумдан дашары энум дередйэрисми? Эмнеге жок? Сиз енумиц чэклеринден дашары энум дередип билмезсиниз, себэби енумиц умумыхалк пейдасы ёк. public enum MessageUtil{ ; // required to avoid compiler error, also signifies no instance public static boolean isValid() { throw new UnsupportedOperationException("Not supported yet."); } } public String toString() { return name; } protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } конструктор жана компилятор мындай конструкторду киргизүүгө жол бербейт. Компилятор Enum түрү декларациясына жооп катары көпчүлүк codeду жаратып жаткандыктан, ал Enum ичиндеги коомдук конструкторлорго уруксат бербей, Enum инстанцияларын ички түрдө жарыялоого мажбурлайт. 6) Enum ичиндеги конструкторду көрсөтө алабызбы? Бул суроо көбүнчө мурункусунан кийин келет. Ооба, мүмкүн, бирок бул жеке же пакеттик жеке конструкторлор менен гана мүмкүн экенин унутпаңыз. Коомдук жана корголгон конструкторлорго ендуруште жол берилбейт. Бул жерде сиз бир мисал көрө аласыз. 7) == же equals() ыкмасын колдонуп Enum салыштыруунун ортосунда кандай айырма бар? Бул жерде майда-чүйдөсүнө чейин камтылган абдан кенен жана татаал маселе болуп саналат . 8) Enumда ordinal() методу эмне кылат? ordinal() методу Enum инстанцияларынын Enum ичинде белгиленген тартибин кайтарат. Мисалы, DayOfWeek Enum ичинде күндөрдү ирети менен белгилей аласыз: жана биз DayOfWeek.MONDAY.ordinal() public enum DayOfWeek{ MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; } ыкмасын чакырсак , ал 0 кайтарат - бул биринчи инстанцияны билдирет. Бул ыкма нерселердин чыныгы абалына жараша тартипти камсыз кылуу үчүн абдан пайдалуу: башкача айтканда, ШЕЙШЕМБИ (Шейшемби) ДҮЙШӨМБҮ (дүйшөмбү) кийин жана ШАРШЕМБИден (шаршемби) чейин келерин көрсөтүүдө. Ошо сыяктуу эле, жылдын айларын көрсөтүү үчүн санак колдонсоңуз болот, мында февраль январдан кийин келет, бирок мартка чейин келет. Бардык ыңгайлаштырылган санактар ​​бул ыкманы абстракттуу java.lang.Enum классынан мурастайт жана алар компилятор тарабынан java.lang.Enum дарегинде корголгон конструкторду чакырып орнотулат , ал ат менен катарды алат. 9) Java'да TreeSet же TreeMap менен Enum колдонууга болобу? Бу хакыкатдан-да гызыклы енумчorк совалыдыр ве адамлар ез бorмлерини сынаг этмек ислейэр. Java.lang.Enum codeун карамайынча , сиз Enum TreeSet жана TreeMap сыяктуу иреттелген коллекцияларда колдонуу үчүн негизги талап болгон Салыштырылуучу интерфейсти мурастаарын билбей каласыз . Enum демейки боюнча Comparable интерфейсин мурастап алгандыктан, аны TreeSet жана TreeMap менен колдонсо болот . 10) Enumдагы ordinal() менен compareTo() ортосунда кандай айырма бар? Бул түздөн-түз мурунку суроодон келип чыгат: чындыгында, compareTo() ыкма менен берилген тартипти окшоштурот ordinal() , бул өндүрүштүн табигый тартиби. Кыскасы, енум салыш-тырууну алар жарыялоо иретинде чектейт. Ошондой эле, бул константаларды бир типтеги башка константалар менен гана салыштырууга болоорун эстен чыгарбоо керек - ар кандай типтеги константаларды салыштыруу компилятордук катага алып келиши мүмкүн. 11) Enumду коммутатор корпусунда колдонуу мүмкүнбү? Ооба сиз кыла аласыз. Мундан башга-да, мунун ези енуми уланмагыц эсасы устунликлериниц биридир. Enum инстанциялары убактылуу константага компиляциялангандыктан, сиз аларды коопсуз түрдө case ичине сайып, которуштурууга болот . Бул жерде жуманын күндөрү менен codeдун мисалы келтирилген: public void developerState(DayOfWeek today){ switch(today){ case MONDAY: System.out.println("Hmmmmmmmm"); break; case TUESDAY: System.out.println("Hmmmm"); break; case FRIDAY : System.out.println("Yeahhhhhh"); break; } } Enum жана Switch бири-бирин жакшы толуктап турат, айрыкча Enum аз сандагы туруктуу константаларды камтыса, мисалы, жуманын жети күнү, жылдын 12 айы ж.б. Enum менен swith кейпин колдонуунун башка мисалдары . 12) Бүтүндөй Enum инстанциясын кантип итерациялоо керек? Эгер сиз java.lang.Enum ачкан болсоңуз , анда values() ыкмасы бардык Enum константаларынын массивин кайтарарын билесиз . Ар бир enum java.lang.Enum мурастагандыктан , аларда values() ыкмасы бар . Аны колдонуу менен, сиз белгилүү бир түрдөгү санауунун бардык константаларын кайталай аласыз. Мунун мисалдарын foreach цикли жана values() методу менен караңыз . 13) Энумду синглтон катары колдонуунун кандай жакшы жана жаман жактары бар? Enum синглтон үлгүсүн ишке ашыруу үчүн тез жарлыкты камсыз кылат жана ал Effective Java китебинде камтылгандыктан, бул популярдуу тандоо. Бир караганда, Enum синглтон келечектүү жана абдан ыңгайлуу, мисалы, инстанциялоону көзөмөлдөйт, коопсуз сериялаштырылат жана баарынан мурда Enum аркылуу жип менен коопсуз синглтонду түзүү оңой. Сиз мындан ары өзгөрмөлөрдүн өзгөрмөлүүлүгүн эки жолу текшерүү жөнүндө тынчсыздануунун кереги жок. Бул ыкманы колдонуунун жакшы жана жаман жактары тууралуу кененирээк бул жерден окуңуз . 14) Int санауу жана String санауу үлгүлөрүнүн ордуна Enum колдонуунун кандай пайдасы бар? Эгерде сиз 5 жылдан ашык программалоочу болсоңуз жана дагы эле JDK 1.3 же 1.4 болсо, сиз String жана int санауу үлгүлөрү менен тааныш болосуз , алар жалпыга белгилүү болгон статикалык акыркы туруктуу префиксти колдонушат. Аптанын күндөрү сыяктуу нерселердин саны . Бул жерде көптөгөн көйгөйлөр бар: сизде Enum түрүнүн көз карандысыздыгы жок, анткени жуманын күнүнө жооптуу String өзгөрмөсү каалагандай мааниге ээ болушу мүмкүн. Ошо сыяктуу эле, санап чыгуучу int ар кандай мааниге ээ болушу мүмкүн жана компилятор аны кубаныч менен жутат. Жана колдонуу Enum , сиз компилятор сиз үчүн текшерген коопсуздук түрүн аласыз. Бардык Java иштеп чыгуучулары үчүн окуу сунушталган Effective Java программасында бул тема боюнча кызыктуу ойлор бар. 15) Стрин кантип Enumга айландырса болот? Бул Java тиркемелерин иштеп чыгууда String жана Enum колдонуу популярдуулугунан улам келип чыккан күнүмдүк суроо . Энумду сапка айландыруунун эң жакшы жолу - бул Enumдун өзүндө String аргументтерин алып, аны Enum катары кайтара турган заводдук ыкманы аныктоо . Сиз ошондой эле ишти четке кагууну кааласаңыз болот. Төмөндө саптарды тизмекке айландыруунун кээ бир мисалдары келтирилген . Бу бизи енумчorк барада 15 совалыц ( ве жогапларыц ) ахырына гетирйэр . Бирок эсиңизде болсун: үйрөнүү үчүн окуу жетиштүү эмес, бул биринчи кадам гана . Эсептөөлөрдөн пайда алуу үчүн, долбооруңузда Enumду кайсы жерде колдоно ала турганыңызды табууга аракет кылыңыз - бул сизге чыныгы тажрыйбаны берет жана бул тажрыйба менен сиз мисалдардан көбүрөөк үйрөнөсүз, анткени сиз дагы чече ала турган көйгөйлөргө туш болосуз. татаал жана деталдуу жолдору.талаптар. Енум хакындакы шу соваллар ез бorмицизи сынаг учин унс бермелидир, айратын-да сиз интервью алмак учин шашып жат-саныз ве енумчorк дунйэси билен жикме-жик чалт-ланмага вагт ёк болса.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION