Golang
Shart 3 ta mavjudlik mavjud: foydalanuvchi, chat, xabar • Foydalanuvchining ismi va ro'yxatdan o'tish sanasi bor • Chatning nomi va yaratilgan sanasi bor • Xabar matn, muallif va yaratilgan sana bilan • Foydalanuvchi bir vaqtning o'zida bir nechta chatlarda bo'lishi mumkin • Xabar majburiy ravishda chatga tegishli bo'lishi kerak, u bir vaqtning o'zida bir nechta chatga tegishli bo'lishi mumkin emas • Domenni jadval shaklida tasvirlash kerak -- taqsimlangan -- message_count chatlarda 100 bilan cheklangan --getShard(time zone) -> shard_id -> 1 --getShard(time zone) -> shard_id -> 2 --shard1 [1..100] --shard2 [101..200] CREATE TABLE users ( id int PRIMARY KEY, name varchar(255) NOT NULL, reg_at TIMESTAMP NOT NULL DEFAULT NOW() ); CREATE TABLE chats ( id int PRIMARY KEY, name VARCHAR(255) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW(), message_count int NOT NULL CHECK <= 100 ); CREATE TABLE user_chats ( user_id int not null REFERENCES users(id), chat_id int NOT NULL REFERENCES chats(id), PRIMARY KEY (user_id, chat_id) ); CREATE TABLE messages ( id int PRIMARY KEY, chat_id int NOT NULL REFERENCES chats(id), author_id int NOT NULL REFERENCES users(id), created_at TIMESTAMP NOT NULL DEFAULT NOW(), text TEXT NOT NULL );
Hozirda boshqa suhbatlar yoki takliflaringiz bormi?
Sizga ma'lum bo'lgan barcha HTTP-yo'llarini (fe'llar) nomlang.
Yuklama oldindan ma'lum bo'lmagan holda, kesh uchun shardlar sonini tanlashda nima asos qilib olinishi mumkin?
PostgreSQLni qanday joylashtirdingiz? Barqarorlik va kengaytuvchanlik haqida gapiring.
GPH orqali rasmiylashtirish ishga qabul qilish kitobida aks etmayaptimi?
Kafka iste'molchilarining miqyosini qanday amalga oshirdingiz? Qaysi mezonlarga asoslangan?
asosiy paket import ( "fmt" "sync" ) func main() { for i := 0; i < 5; i++ { go fmt.Println(i) } }
Interfeysni implementatsiya qilish joyida yoki foydalanish joyida aniqlash yaxshiroqmi?
Partitionlash va sharding nima? Ularni ishlatdilarmi?
Xizmat statistik funktsiyasiga 10-chi do'kondan so'ng to'xtab qoldi. Nima qilasiz? Ma'lumotlar bazasini qanday tashxis qilish va optimallashtirish mumkin?
Xarita bilan bir xil hashlar (kollisionlar) bo'lsa nima bo'ladi?
Tinkoffdagi tajribangiz haqida gapiring — qanday ishga qabul qilindingiz va nima bilan shug'ullandingiz?
Jonli kodlash: goroutine'lar bo'yicha vazifa — umumiy ma'lumotlarga konkurent kirish, poyga sharti, mutex orqali yechim. sync.Mutex va sync.RWMutex o'rtasidagi farq.
Bufferli va buffersiz kanallar o'rtasidagi farq nima?
Hozir yangi ish joyingizda o'zingiz uchun nima qidiryapsiz?
Transformator arxitekturasi haqida gapira olasizmi?
Qaysi holatlarda dasturchi AI tomonidan ishlab chiqilgan yechimlarga tayanmasdan, kodni qo'lda yozishi ma'qulroq bo'ladi?
Hujjatlar bo'yicha yangilanishlar xizmatga keladi message Document { string Url = 1; // Hujjat URL, uning noyob identifikatori uint64 PubDate = 2; // e'lon qilingan vaqti uint64 FetchTime = 3; // ushbu hujjat yangilanishining qabul qilish vaqti, versiya identifikatori sifatida qaralishi mumkin. Juftlik (Url, FetchTime) noyob. string Text = 4; // hujjat matni uint64 FirstFetchTime = 5; // dastlab mavjud emas, to'ldirilishi kerak } Hujjatlar istalgan tartibda kelishi mumkin (yangilashlar qachon amalga oshirilganiga qarab emas), shuningdek, takroriy xabarlar bo'lishi mumkin. Chiqishda, shunday xabarlar shakllantirish kerakki, ular bilan bir xil bo'lsa, lekin quyidagi qoidalarga muvofiq tuzatilgan maydonlar bilan (quyida aytilganlar, Url maydoniga mos keladigan hujjatlar guruhiga taalluqlidir): Text va FetchTime maydonlari, hozirgacha olingan eng katta FetchTime bilan bir xil bo'lishi kerak. PubDate maydoni, eng kichik FetchTime bilan bir xil bo'lishi kerak. FirstFetchTime maydoni, eng kichik FetchTime qiymatiga teng bo'lishi kerak. Boshqacha qilib aytganda, har doim FetchTime bo'yicha saralangan birinchi versiyadan PubDate va FirstFetchTime, va oxirgi versiyadan Text olinadi. Kodni quyidagicha amalga oshirish mumkin: type Processor interface { Process(doc *Document) (*Document, error) } Ushbu kod, Kafka yoki shunga o'xshash navbatdan xabarlarni o'qiydigan va natijani ham navbatga yozadigan xizmatda ishlaydi. Agar Process Null qaytarilsa, hech narsa navbatga yozilmaydi.
Linuxni bilasizmi va qaysi darajada?