Golang
Транзакциялардын изоляция деңгээлдери кандай? Кайсыларыны колдондуңуз?
Өзүңүздүн мурдагы тажрыйбаңыздан бир жагдайды эстеңиз, анда сиз команда жетекчиси же архитектор сунуштаган архитектуралык чечим оптималдуу эмес экенин көрдүңүз. Мындай жагдайда эмне кылдыңыз? Өз көз карашыңызды кандайдыр бир жол менен коргондуңузбу?
REST аркылуу RPC ишке ашырууга болобу жана тескерисинче? Негизги айырма эмнеде?
Капаситети слайс толтурулгандан кийин дагы бир элемент кошулганда эмне болот?
HTTP/1, HTTP/2 жана HTTP/3 кандай айырмаланат?
Сен жана команда жетекчисинен башка кимдер командада болушкан?
Команданын өлчөмү боюнча кимдер кирет?
Сиз үчүн эмне жакын — продукт өнүктүрүү же инфраструктураны өнүктүрүү?
Азыркы учурда издөөнүн активдүүлүгү канчалык? Сиз [компания]дан кетүүнү ойлоп жатасызбы же азырынча кызыктуу сунуштарды карап жатасызбы?
Кагаздардын жаңыртуулары кызматка келет message Document { string Url = 1; // Кагаздын URL, анын уникалдуу идентификатору uint64 PubDate = 2; // жарыяланган убакыт uint64 FetchTime = 3; // бул кагаздын жаңыртуусун алуу убактысы, версия идентификатору катары каралышы мүмкүн. Жуп (Url, FetchTime) уникалдуу. string Text = 4; // кагаздын тексті uint64 FirstFetchTime = 5; // башында жок, толтурулушу керек } Кагаздар каалаган тартипте келип калышы мүмкүн (жаңыртуулар жасалган тартипте эмес), жана дублдик билдирүүлөр болушу мүмкүн. Чыгышта, ошол эле билдирүүлөрдү түзүү керек, бирок төмөнкү эрежелер боюнча оңдолгон талаалар менен (төмөндө көрсөтүлгөндөр, Url талаасы менен бирдей топтогон документтер үчүн): Text жана FetchTime талаалары, азыркыга чейин алынган эң чоң FetchTime менен бирдей болушу керек. PubDate талаасы, эң кичинекей FetchTime менен бирдей болушу керек. FirstFetchTime талаасы, эң кичинекей FetchTime маанисине барабар болушу керек. Башкача айтканда, ар бир учурда FetchTime боюнча сорттолгон биринчи версиядан PubDate жана FirstFetchTime, жана акыркы версиядан Text алынады. Коддогу интерфейс мындайча ишке ашырылышы мүмкүн: type Processor interface { Process(doc *Document) (*Document, error) } Бул код Kafka же окшош кезекчеден билдирүүлөрдү окуган жана натыйжаны дагы кезекке жазган кызматта иштейт. Эгер Process Null кайтарса, эч нерсе кезекке жазылбайт.
Көрсөтүңүз: сез проектка кердегез, анда код еллар буена язылган, күп лигаси бар, тестләр юк, һәм барысы да кысыла-кысыла эшли. Мондый хәлдә яңа функция кертү өчен нәрсәдән башлар идегез?
pprof ар дайым эс тутумдун агып кетишин же чектен ашканын көрсөтөбү?
Өткөн жумуш орундарда эмне менен алектендиңиз жана кандай функцияларды ишке ашырдыңыз, кыскача айтып бериңиз.
[]any жана delta int кабыл алган функцияны ишке ашырыңыз. Тек гана уникалдуу сандар (int) биринчи көрүнүштөрүн deltaга көбөйтүү керек. Башка түрлөрү жана кайталанган сандар өзгөртүлбөйт. Функция жаңыланган тизмени жана 2 санды кайтаруусу керек: updated – канча уникалдуу сан өзгөртүлгөн, duplicates – канча сандык элементтер дублкат болуп чыкты func IncrementUniqueIntsInMixed(xs []any, delta int) ([]any, int, int) { // сиздин кодуңуз } // Мисал: xs := []any{1, "a", 5, "b", 1, 0, 5} u, d, s := IncrementUniqueIntsInMixed(xs, 3) // xs == []any{4, "a", 8, "b", 1, 3, 5} // u == 3 // уникалдуу сандар: 1, 5, 0 // d == 2 // дублкат сандар: экинчи 1, экинчи 5
Коллизиялар учраганда карта менен операциялардын эң начар жагдайдагы татаалдыгы кандай?
Transactional Outbox үлгүсү жөнүндө айтып бериңиз — ал кантип иштейт жана эмне үчүн колдонулат?
Реляциялык маалыматтар базаларында суроолорду оптималдаштыруу боюнча тажрыйбаңыз барбы?
import "fmt" func maxDistants(arr []int) int { maxDist := 0 lastOne := -1 for i := 0; i < len(arr); i++ { if arr[i] == 1 { if lastOne == -1 { maxDist = i } else { dist := (i - lastOne) / 2 if dist > maxDist { maxDist = dist } } lastOne = i } } if arr[len(arr)-1] == 0 { dist := len(arr) - 1 - lastOne if dist > maxDist { maxDist = dist } } return maxDist } func main() { fmt.Println(maxDistants([]int{1, 0, 0, 0, 1})) }
Сиздин маяна күтүүлөрүңүз жана сунуштоо үчүн эң жакшы формат кандай?
Бир машинанын ичинде канча goroutine түзө аласыз? Кантип эсептөө керек?