Golang
Ինչպե՞ս են իրականացվում տվյալների բազայի կառավարման համակարգի մակարդակով գործառնությունների առանձնացման մակարդակների սահմանափակման մեխանիզմները։
Ի՞նչ բացասական կարող է լինել բայթների հատվածը տող դարձնելիս։
Եթե հաղորդակցման ալիքի միջոցով փոխանցված տվյալները չկարդացվեն, ինչ հետևանքներ կլինեն?
Ի՞նչ է goroutine-ների առավելությունը threads-ների նկատմամբ արդյունավետության և օգտագործման հարմարավետության առումով։
Ի՞նչ պարամետրեր կարելի է կարգավորել առաջադրանքների պլանավորողի աշխատանքի համար։
Ինչ միջոցներով կարելի է ապահովել Kafka-ի մշակումը մինչև 100 հազար հաղորդագրություն մեկ վայրկյանում?
Ինչպե՞ս եք ընկալում իրավիճակը, երբ կոդում հստակ նշված չէ ինտերֆեյսի օգտագործումը։
Պատմիր ինձ ընթացիկ նախագծի մասին, որի վրա դու աշխատում ես կամ աշխատել ես վերջերս
Ի՞նչ գործողություններ կան Go-ում slices-ի վրա։
Ինչ է կոչվում տարրերի տեղափոխման գործընթացը մեկ Map-ից մյուսը:
/* Մեզ անհրաժեշտ է տվյալներ փոխանցել որոշ աղբյուրից որոշ սպառողի: Աղբյուրը տվյալները տալիս է փոքր խմբաքանակներով (~տասը գրառում), մինչդեռ սպառողը ավելի արդյունավետ է աշխատում մեծ խմբաքանակներով (~հազար գրառում): Իրական օրինակ է Kafka տիպի հերթերից տվյալների փոխանցումը Clickhouse տվյալաբազա: Աղբյուր: - Հասկանալիորեն անսահմանափակ: - Աղբյուրը երբեք չի վերադարձնի ավելի քան MaxItems գրանցում մեկ Next կանչում: - Մի «սեսիայում» (մեկ Pipe ֆունկցիայի կանչում) աղբյուրը յուրաքանչյուր Next կանչում նոր տվյալներ է վերադարձնում: - Սակայն, վերագործարկումից հետո, աղբյուրը սկսում է նախորդ «հաստատված» դիրքից, որը նշվում է cookie-ով: Այդ պատճառով, յուրաքանչյուր cookie արժեք, որը Next-ը վերադարձնում է, տվյալները պահելուց հետո, պետք է հաստատվի Commit կանչով, նույն հերթականությամբ, ինչպես դրանք վերադարձվել էին Next-ով: Սպառող: - Չի կարող միաժամանակ ավելի քան MaxItems մշակել: Հիմնական մակարդակ: Պետք է իրականացնել func Pipe(p Producer, c Consumer) error ֆունկցիան, որը կարդում է տվյալները աղբյուրից, խմբավորում դրանք ոչ մեծ, MaxItems-ից ոչ ավելի մեծ բուֆերներում և պահում է սպառողում, հետո հաստատում է առաջընթացը աղբյուրում: Ավելորդ բարդություն: Next, Process և Commit մեթոդները կապված են ցանցային կանչերի հետ և կարող են բավական երկար տևել: Արագացման համար անհրաժեշտ է հոսքերը հորիզոնականացնել՝ ընթերցում, գրառում և առաջընթացի հաստատում: Որպեսզի, Process կամ Commit կանչի ժամանակ, ընթերցումը աղբյուրից և նոր բուֆերի ձևավորումը շարունակվի: */ const MaxItems = 9999 type Producer interface { // Next վերադարձնում է: // - մի խմբաքանակ տարրեր՝ մշակման համար // - cookie՝ հաստատելու համար, երբ մշակումը ավարտվի // - սխալ Next() (items []any, cookie int, err error) // Commit օգտագործվում է նշելու տվյալների խմբաքանակը որպես մշակված Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Ինչպե՞ս է իրականցված select գործողությունը Go լեզվում և ինչպես է այն աշխատում ալիքների հետ։
Կարո՞ղ է գորուտինայի կատարմանը դադարեցնել այնպես, որ այն բլոկավորվի կոնկրետ համակարգային թելում:
Go լեզուն ունի ինտեգրված աջակցություն զանգվածների համար:
Որո՞նք են Go լեզվի ամփոփման մեխանիզմները, որոնք նախատեսված են նշանների կամ տոքենների ներկայացման համար։
Ի՞նչ է նշանակում զրո արժեքը կտրվածքի համար ծրագրավորման լեզվում։
Ինչպես է իրականացվում Tasks-ների հոսքային և հաջորդական մշակումը Go լեզվում?
Որ տվյալների տեսակները հարմար են Map տվյալների կառուցվածքում որպես բանալի:
Կարող եք բացատրել օպերացիոն համակարգում առաջադրանքների պլանավորողի գործառնական մեխանիզմը?
Կարող եք բացատրել հեշ աղյուսակի ներքին կառուցվածքը և աշխատանքը?