Sobes.tech

Golang

Slayd oynash algoritmida oynani qanday harakatlantirish mumkin?

230

// N uzunligida ikkita butun sonlar massivlari uchun, // 1 dan N gacha bo‘lgan barcha K uchun, K uzunlikdagi prefikslaridagi umumiy sonlar sonini hisoblang. // Massivdagi sonlar takrorlanishi mumkin, kesishma ko‘paytmasini hisobga olmadan hisoblanadi. // A massivining K uzunlikdagi prefiksi A massivining birinchi K elementidir // 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]

230

Arxitekturada WebSocket ulanishi qanday ishlaydi — qachon o'rnatiladi va kim kim bilan muloqot qiladi?

229

// Ikki tartiblangan ketma-ketliklar berilgan, ular ketma-ketliklar tartibida o'sib boradi. // Birinchi ketma-ketlikdagi, ikkinchisida bo'lmagan barcha elementlarni qaytarish kerak. // 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 }

228

Eng murakkab va qiziqarli vazifangiz haqida, ayniqsa arxitektura tajribangiz bilan bog'liq bo'lsa, hikoya qiling.

227

Ishchi (tasksRes[t.id][task{...}]) dagi xaritani yangilashning hozirgi amalga oshirilishida nima muammo bor?

226

Ikki tartiblangan butun sonlar ketma-ketligini qabul qiladigan funksiya. Birinchi ketma-ketlikdagi, ikkinchisida bo'lmagan barcha elementlarni qaytarish kerak. Siz qanday yondashasiz va qanday murakkablikka ega?

226

Hozirgi daromad darajangizni ayta olasizmi?

Junior — Middle
225

Hozirda Moskva shahrida yashayapsizmi? Qaysi shaharni ko'rib chiqayapsiz? Gibrid ish formatini ko'rib chiqayapsizmi? Qaysi bosqichdasiz?

225

Boshqa faol suhbat jarayonlaringiz bormi?

224

Bu metrik ma'lumotlar Grafana'da qanday integratsiya qilinadi va ko'rsatiladi?

Junior — Middle
223

150 million foydalanuvchi, 75 million DAU, 225 million MAU, 1.2 million o'qish / 300k yozish QPS, 5 million bir vaqtning o'zida foydalanayotgan foydalanuvchilar, yillik 60 PB yangi ma'lumotlar, yillik 30% o'sish, P99 <200 ms o'qish uchun, <300 ms yozish uchun, SLA 99.95% ni qo'llab-quvvatlaydigan kengaytiriladigan xabar almashish tizimi loyihalashtirish. KONTEKST WhatsApp ga o'xshash tarqatilgan xabar tizimini loyihalashtirish, 1:1 va guruh chatlarini qo'llab-quvvatlaydigan, xabarlarni yetkazib berishni ta'minlaydigan, foydalanuvchilarning onlayn holatlarini ko'rsatadigan va multimedia fayllarini (foto, video, audio) uzatadigan tizim kerak. Tizim yuqori mavjudlik va past kechikishni ta'minlashi, yuqori parallelizmni qo'llab-quvvatlashi va global miqyosda kengayishi kerak. FUNKTSIONAL TALABLAR - Shaxsiy (1:1) va guruh chatlarini qo'llab-quvvatlash, ishtirokchilarni qo'shish/olib tashlash imkoniyati bilan - Matnli xabarlar va multimedia fayllarini yuborish va qabul qilish Nofunksional talablarga: - Xizmatlar yoki mijozlar darajasida end-to-end shifrlashning aniq amalga oshirilishi yo'q, umumiy yozuvdan tashqari. - chat_id yoki user_id bo'yicha sharding va replikatsiya haqida aniq tavsif yo'q, kengaytirilish va nosozliklarga chidamlilik uchun. - Offline sinxronizatsiya va yetkazib berish qabul qilish uchun aniq komponent yoki mexanizm yo'q. - Yukni taqsimlash qanday amalga oshirilishini, ayniqsa shiddatli yuklamalarda, qanday ta'minlanishini aniqlash qiyin. **E'tibor berilishi kerak bo'lgan muhim nuqtalar:** (Diagramda Load Balancer, API Gateway, Message Queue, Service, Cache, Database, Object Storage va CDN bilan arxitektura ko'rsatilgan)

222

Sizda faol GitHub yoki LinkedIn bormi?

222

So'nggi marta ishlagan jamoangiz tarkibi qanday edi?

Junior — Middle
221

[ism] xotira baholashda nomuvofiqlikni ko'rsatdi: bir narsani aytdi, boshqasini yozdi. Xotira qanday to'g'ri baholanishi kerak?

217

So'nggi loyihangiz haqida gapirib bering — u nima va siz aynan nima bilan shug'ullanasiz?

217

Oldingi ish joylaringizda nima bilan shug'ullanganingiz va qanday funksiyalarni amalga oshirganingiz haqida qisqacha aytib bering.

216

Tarqalgan tizimlar bilan ishlash tajribangiz bormi?

215

150 million foydalanuvchiga mo support qiladigan, 75 million DAU, 225 million MAU, 1.2M o'qish / 300k yozish piki QPS, 5 million bir vaqtning o'zida foydalanayotgan foydalanuvchilar, yillik 60 PB yangi ma'lumotlar, yillik 30% o'sish, SLA 99.95%, p99 <200 ms o'qish uchun, <300 ms yozish uchun, kengaytiriladigan va global miqyosda ishlashga mo'ljallangan skalable xabar yuborish tizimi loyihalashtirish. KONTEKST WhatsApp ga o'xshash, 1:1 va guruh chatlarni qo'llab-quvvatlaydigan, xabarlarni yetkazib berishni ta'minlaydigan, foydalanuvchilarning onlayn holatini ko'rsatadigan va multimedia fayllarini (foto, video, audio) uzatishni ta'minlaydigan tarqatilgan xabar tizimini loyihalashtirish zarur. Tizim yuqori mavjudlik va past kechikishni ta'minlashi, yuqori parallelizmni qo'llab-quvvatlashi va global miqyosda kengayishi kerak. FUNKTSIONAL TALABLAR - Shaxsiy (1:1) va guruh chatlarni qo'llab-quvvatlash, ishtirokchilarni qo'shish/olib tashlash imkoniyati bilan - Matnli xabarlar va multimedia fayllarini yuborish va qabul qilish Xizmatlar yoki mijozlar darajasida end-to-end shifrlash mexanizmining aniq amalga oshirilishi ko'rinmayapti, umumiy yozuvdan tashqari. - chat_id yoki user_id bo'yicha ma'lumotlar bazalarini sharding va replikatsiyasining aniq ta'rifi yo'q, kengaytirilish va nosozlikka chidamlilik uchun. - Offline xabarlar va yetkazib berish qabul qiluvchilarini sinxronlashtirish uchun aniq komponent yoki mexanizm yo'q. - Yuk ortish paytida ma'lumotlar bazalari va xizmatlar o'rtasida yukni taqsimlash qanday amalga oshirilishini aniqlash qiyin. **Muhim nuqtalar:**

215

/* PostgreSQL-ning ikki serveri bor: * PROD - OLTP server, * STATS - uzoq davom etadigan tahliliy so'rovlar uchun server. Hozirgi serverda, prod bazasida, katta (10Tb) jadval mavjud: CREATE TABLE profiles( id SERIAL, data JSONB ) Jadvalda "toshlar" bo'lishi mumkin, ya'ni ba'zi `id`lar o'tkazib yuborilgan bo'lishi mumkin. PROD dan STATS ga profiles jadvalini nusxalash uchun dastur yozish kerak. Quyidagi interfeyslar bilan ishlashni taxmin qilamiz: type Row []interface{} type Database interface { // Database interfeysining implementatsiyasi ulanishlarni qayta o'rnatishi mumkin // SaveRows chaqiruvi idempotent io.Closer GetMaxID(ctx context.Context) (uint64, error) LoadRows(ctx context.Context, minID, maxID uint64) ([]Row, error) // [minID, maxID] SaveRows(ctx context.Context, rows []Row) error } func Connect(ctx context.Context, dbname string) (Database, error) // CopyTable // Agar full=false bo'lsa, avvalgi xatodan qolgan joydan ma'lumotlarni o'tkazishni davom ettirish // Agar full=true bo'lsa, barcha ma'lumotlarni o'tkazish func CopyTable(fromName string, toName string, full bool) error { // ... kodingiz } Agar `full=false` opsiyasi berilsa, dastur avvalgi xatodan qolgan joydan ma'lumotlarni o'tkazishni davom ettirishi kerak. Agar `full=true` bo'lsa, barcha ma'lumotlarni o'tkazishi kerak. **Asosiy daraja**: - ma'lumotlarni bitta oqimda ketma-ket o'tkazish - xatodan keyingi tiklash (opsiya `full=false`) Qo'shimcha ma'lumotlar: - agar kerak bo'lsa, interfeysni o'zingizning metodlaringiz bilan kengaytirishingiz mumkin - agar kerak bo'lsa, to'g'ridan-to'g'ri **database/sql** paketidan foydalanishingiz mumkin

215
/11