Алгоритмнің уақыт пен жад бойынша күрделілігі қандай?
Golang
Қазіргі уақытта жұмыс істейсіз бе, жоқ па, және қандай форматта — кеңсе, гибрид, қашықтан?
Соңғы жобаны бағалау үшін қандай тиімділік көрсеткіштерін қолдандыңыз?
/** Бізге деректерді кейбір көзден кейбір тұтынушыға жеткізу керек. Осы кезде көз шағын топтамалармен береді (~ онша көп емес жазбалар), ал тұтынушы ірі батчтармен жұмыс істеуді тиімді көреді. Шынайы мысал - Kafka сияқты кезектерден деректерді Clickhouse базасына жеткізу. Көз: - Шартты түрде шексіз. - Көз әр шақыруда MaxItems-ден көп емес жазбаны қайтармайды. - Бір "сессия" (бір Pipe функциясының шақырылуы) ішінде көз әр шақыруда жаңа деректерді қайтарады. - Алайда, қайта іске қосқан кезде көз өткен "расталған" позициядан, cookie арқылы анықталған, бастайды. Сондықтан, әрбір cookie мәні, Next шақыруы қайтарғаннан кейін, деректер қабылдағышта сақталған соң, Commit шақыруымен нақты белгіленуі керек, және оларды қайтару тәртібімен дәл сол тәртіпте орындалуы керек. Қабылдағыш: - MaxItems-ден көп емес деректерді бір рет өңдей алады. Негізгі деңгей: Талап етілгені - func Pipe(p Producer, c Consumer) error функциясын жүзеге асыру, ол деректер көзінен оқиды, оларды MaxItems-ке дейінгі буферге топтастырады және қабылдағышқа сақтайды, сонан соң көзде прогресті бекітеді. */ const MaxItems = 9999 // Producer интерфейсі { // Next қайтаруы керек: // - өңделетін топтама // - өңдеу аяқталған соң бекіту үшін cookie // - қате // Next() (items []any, cookie int, err error) // Commit() деректер топтамасын өңделген деп белгілеу үшін // Commit() error // } // Consumer интерфейсі { // Process() топтаманы өңдеу // Process(items []any) error // } // func Pipe(p Producer, c Consumer) error { // var buf []any // var cookies []int // // for { // items, cookie, err := p.Next() // if err != nil { // return err // } // buf = append(buf, items...) // cookies = append(cookies, cookie) // // if len(buf) >= MaxItems { // if err := c.Process(buf); err != nil { // return err // } // for _, c := range cookies { // if err := p.Commit(c); err != nil { // return err // } // } // buf = buf[:0] // cookies = nil // } // } // // if len(buf) > 0 { // if err := c.Process(buf); err != nil { // return err // } // for _, c := range cookies { // if err := p.Commit(c); err != nil { // return err // } // } // } // return nil // }
Аутентификация және авторизация жүйелерін іске асыру және конфигурациялау тәжірибеңіз қандай?
func countSubs(s string) int { result := 0 left := 0 hm := make(map[rune]int) n := len(s) for right := 0; right < n; right++ { hm[s[right]]++ for hm[s[right]] > 1 { hm[s[left]]-- if hm[s[left]] == 0 { delete(hm, s[left]) } left++ } result += (right - left + 1) } return result }
L4 жүктеме теңгергіші L7 жүктеме теңгергішінен қалай ерекшеленеді?
""" Кинотеатртағы орындар бір қатарда орналасқан. Жаңа келген көрермен орын таңдайды, басқалардан мүмкіндігінше алыс отырғысы келеді. Яғни, орыннан жақын көрерменге дейінгі қашықтық максималды болуы керек. Кез келген қатарда бос орындар бар екені және кемінде бір көрермен отырғаны кепілденген. Берілген орындар қатарын (нөлдер мен бірліктерден тұратын массив) ескере отырып, таңдалған орын мен ең жақын көрермен арасындағы қашықтықты (орындар арасындағы аралықтар саны) қайтаратын функция жазыңыз. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 [0, 0, 0, 1] [1, 0, 0, 0] place = ((оң жақ - сол жақ) / 2) """ func maxPlaces(arr []int) int { }
""" Кинотеатрдағы орындар қатармен орналасқан. Жаңа келген көрермен орын таңдайды, ол басқа көрермендерден мүмкіндігінше алыс болсын. Яғни, таңдалған орын мен ең жақын көрермен арасындағы қашықтық максималды болуы керек. Кез келген уақытта бос орындар бар және кемінде бір көрермен отырғызылғанына кепілдік беріледі. Функцияны жазыңыз, ол орындар қатарын (нөлдер мен бірліктердің массиві) қабылдап, таңдалған орын мен ең жақын көрермен арасындағы қашықтықты (орындар арасындағы аралықтар саны) қайтарады. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
/* * Берілген бүтін сандар массиві және X саны, * ең ұзын бос емес қосалқы массивті табыңыз, оның минимумы X-ке тең. * Мұндай қосалқы массивтің ұзындығын қайтарыңыз немесе егер жоқ болса -1.
Техникалық сұхбатқа қандай жобаны таңдау керек және оны қалай сипаттау керек?
Мәліметтер құрылымында Map кілтімен элемент қосу уақыты қалай анықталады?
Неліктен екі тексеру бар: if (79-ші жолда және buf==MaxItems болған жолда), біреуі жеткіліксіз бе?
Карта құрылымында элементтің бірегейлігін визуалды немесе алгоритмдік түрде қалай анықтауға болады?
Деректерді жазу кезінде қандай сұрау жиілігі секундқа жетті?
// Екі бүтін сан массиві үшін ұзындығы N, // барлық K үшін 1-ден N-ге дейін, K ұзындығындағы префикстердегі жалпы сандардың санын есептеңіз. // Массив ішіндегі сандар қайталануы мүмкін, қиылысу қайталануды ескермей есептеледі. // A массивінің ұзындығы K префиксі – A массивінің алғашқы K элементі // A [1, 1] => [1], [1, 1] // B [1, 1] => [1], [1, 1] // R [1, 1] // [1, 2, 5] => [1], [1, 2], [1, 2, 5] // [1, 5, 4] => [1], [1, 5], [1, 5, 4] // [1, 1, 2]
[аты] көрсетті: 20-шы жолда uniq бірегей таңбалардың санын емес, басқа нәрсені қамтиды. Нақты не?
// Екі реттелген тізім берілген, олар өсу ретімен сұрыпталған. // Екінші тізімде жоқ бірінші тізімнің барлық элементтерін қайтару керек. // 0 <= N <= 10^6 // -10^9 <= a[i] <= 10^9 // [1] // [2, 3, 4, 5, 6] // [1] // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ...] // [1] // [2, 3, 4, 5, 6, 7, 8] func filter(first []int, second []int) []int { res := make([]int, 0, len(first)) i, j := 0, 0 for i < len(first) && j < len(second) { if first[i] < second[j] { result = append(result, first[i]) i++ } else if first[i] > second[j] { j++ } else { i++ j++ } } for i < len(first) { result = append(result, first[i]) i++ } return result }
Ең күрделі және қызықты шешкен мәселе туралы айтыңыз, әсіресе архитектуралық тәжірибе туралы.
Жалюды терезесін sliding window алгоритмінде қалай жылжытуға болады?