Sobes.tech

Golang

Hangi en büyük veri tabanı projesini uygulamak veya desteklemek zorunda kaldınız?

Junior — Middle
294

Farklı organizasyonlardaki mülakat sürecinin hangi aşamalarında bu soru sıkça sorulur?

Intern — Junior
282

PostgreSQL veritabanına sorgular nasıl gerçekleştirilir?

Junior — Middle
267

Verilere saniyede kaç yazma isteği geliyordu?

253

Hizmet kaç adet örnek/kapsayıcı üzerinde çalışıyordu?

245

Dış hizmetler ve sistemler için müşteriler hangi katmana yerleştirilir?

244

Çok iş parçacıklı ve paralel hesaplamalar kullanan uygulamaların geliştirilmesinde deneyiminiz nedir?

Junior — Middle
235

Have sayacını azaltmak veya artırmak için hangi ilke kullanılır?

234

Hostlar hakkında bilgi verebilir misin? Kaç host ve kaç konteyner çalışıyor?

228

Grafana'da veri bağlantısı ve görüntüleme nasıl yapılır?

Junior — Middle
225

Bir öğenin Map veri yapısında benzersiz olduğunu görsel veya algoritmik olarak nasıl belirlenir?

Junior — Middle
222

Çalıştığınız en uzun süreli proje hangisiydi?

Junior — Middle
222

""" Sinema koltukları tek bir sırada dizilmiştir. Yeni gelen bir izleyici, sıradaki diğer izleyicilerden en uzak olacak şekilde bir koltuk seçer. Yani, seçilen koltuktan en yakın izleyiciye olan mesafe maksimum olmalıdır. Her zaman boş koltuklar olduğu ve en az bir izleyicinin oturduğu garanti edilir. Verilen bir koltuk dizisi (sıfırlar ve birler dizisi) verildiğinde, seçilen koltuktan en yakın izleyiciye olan mesafeyi (koltuklar arasındaki boşluk sayısı) döndüren bir fonksiyon yazın. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

215

İş mantığını gerçekleştiren, dış hizmete (Google) çağrı yapan ve sonucu veritabanına kaydeden bir isteği nasıl mimarize edersiniz? Yukarıdan aşağıya katmanlar halinde açıklayın.

215

/* Bir kaynaktan bir tüketiciye veri aktarmamız gerekiyor. Kaynak, verileri küçük paketler halinde (~on kayıt) verirken, tüketici daha büyük paketlerle daha verimli çalışır. Gerçek bir örnek, Kafka türü kuyruklardan Clickhouse veritabanına veri aktarımıdır. Kaynak: - Neredeyse sonsuz. - Kaynak, bir Next çağrısında hiçbir zaman MaxItems'ten fazla kayıt döndürmez. - Bir "oturum" (bir Pipe fonksiyon çağrısı) içinde, kaynak her Next çağrısında yeni veriler döndürür. - Ancak, yeniden başlatıldıktan sonra, kaynak önceki "onaylanmış" konumdan, cookie ile belirlenen noktadan başlar. Bu nedenle, Next'in döndürdüğü her cookie değeri, veriler alıcıya kaydedildikten sonra, aynı sırayla Commit çağrısı ile onaylanmalıdır. Alıcı: - Aynı anda MaxItems'ten fazla işleyemez. Temel seviye: Gerekli olan, func Pipe(p Producer, c Consumer) error fonksiyonunu uygulamaktır, bu fonksiyon kaynaktan veri okur, bunları MaxItems boyutunda bir tamponda gruplar ve alıcıya kaydeder, ve ardından kaynaktaki ilerlemeyi onaylar. */ const MaxItems = 9999 type Producer interface { // Next,: // - işlenmek üzere öğe paketleri döner // - işleme tamamlandığında onaylanacak cookie // - hata Next() (items []any, cookie int, err error) // Commit, işlenmiş veri paketini işaretlemek için kullanılır Commit(cookie int) error } type Consumer interface { 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 }

214

Son projedeki çalışmanızı değerlendirirken hangi performans göstergelerini kullandınız?

Junior — Middle
204

Şu anda çalışıyor musunuz yoksa değil misiniz, ve hangi formatta: ofis, hibrit, uzaktan mı?

201

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 }

200

/* Bir kaynaktan bir tüketiciye veri aktarmamız gerekiyor. Kaynak, verileri küçük paketler (~on kayıt) halinde sağlar, oysa tüketici büyük paketlerle (~bin kayıt) daha verimli çalışır. Gerçek bir örnek, Kafka türü kuyruklardan alınan verilerin Clickhouse veritabanına aktarılmasıdır. Kaynak: - Neredeyse sonsuz. - Kaynak, bir Next çağrısında hiçbir zaman MaxItems'ten fazla kayıt döndürmez. - Bir "oturum" (bir Pipe fonksiyon çağrısı) içinde, kaynak her Next çağrısında yeni veriler döndürür. - Ancak, yeniden başlatıldıktan sonra, kaynak önceki "onaylanmış" konumdan, cookie ile belirlenen noktadan başlar. Bu nedenle, Next tarafından döndürülen her cookie değeri, veriler alıcıya kaydedildikten sonra, aynı sırayla Commit çağrısı ile onaylanmalıdır. Alıcı: - Aynı anda MaxItems'ten fazla işleyemez. Temel seviye: İşte, p Producer ve c Consumer fonksiyonlarını kullanarak, kaynaktan veri okuyan, bunları MaxItems boyutunu aşmayan bir tamponda toplayan ve alıcıya kaydeden, ve ardından kayıtlardaki ilerlemeyi onaylayan bir fonksiyon uygulaması gerekmektedir. Zorluk: Next, Process ve Commit metodları ağ çağrılarıyla ilgilidir ve oldukça uzun sürebilir. İşlemi hızlandırmak için, okuma, yazma ve ilerleme onay süreçlerini paralelleştirmek gerekir. Böylece, Process veya Commit çağrısı sırasında, kaynak okuma ve yeni tamponun oluşturulması devam eder. */ const MaxItems = 9999 type Producer interface { // Next şu değerleri döner: // - işlenmek üzere bir öğe grubu // - işleme tamamlandığında onaylanacak cookie // - hata Next() (items []any, cookie int, err error) // Commit, işlenmiş veri paketini işaretlemek için kullanılır Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }

196
/11