Warunek Istnieją 3 encje: użytkownik, czat, wiadomość • Użytkownik ma nazwę i datę rejestracji • Czat ma nazwę i datę utworzenia • Wiadomość ma tekst, autora i datę utworzenia • Użytkownik może być jednocześnie w wielu czatach • Wiadomość musi należeć do czatu, nie może należeć do więcej niż jednego czatu jednocześnie • Należy opisać dziedzinę w formie tabel -- rozproszony -- message_count w czatach limit 100 --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 );
Golang
Opowiedz ogólnie o projekcie — co to było dla końcowego użytkownika?
Napisz zapytanie SQL wyświetlające autorów, którzy mają więcej niż 10 książek (tabele: autorzy, książki, relacja wiele-do-wielu)
Jak zabić proces w Linux? Co zrobić, jeśli kill pid nie działa?
Co było najtrudniejsze i najciekawsze podczas przejścia z monolitu na mikroserwisy?
Mamy bazę danych z hasłami użytkowników, hasła są zahashowane (funkcja hashPassword), a także znamy zestaw znaków, które mogą być użyte w hasłach (zmienna alphabet). Naszym zadaniem jest zaimplementować funkcję RecoverPassword tak, aby odtworzyła hasło na podstawie znanego hasza i aby TestRecoverPassword zakończył się sukcesem. Podstawowe wymagania: Dowolna metoda jest dozwolona package main import ( "crypto/md5" "fmt" ) var alphabet = []rune{'a', 'b', 'c', 'd', '1', '2', '3'} func RecoverPassword(h []byte) string { return "" } func hashPassword(in string) []byte { h := md5.Sum([]byte(in)) return h[:] } func main() {
Czym są EXPLAIN i EXPLAIN ANALYZE w PostgreSQL, jaka jest różnica?
Czym jest wyścig (race condition) w Go? Podaj przykład.
Opowiedz o ciekawej lub trudnej technicznej kwestii, którą rozwiązałeś
Istnieją 3 encje: użytkownik, czat, wiadomość • Użytkownik ma imię i datę rejestracji • Czat ma nazwę i datę utworzenia • Wiadomość ma tekst, autora i datę utworzenia • Użytkownik może być jednocześnie w kilku czatach • Wiadomość musi należeć do czatu i nie może należeć do więcej niż jednego czatu jednocześnie • Należy opisać dziedzinę w formie tabel
Z jakimi bazami danych pracowałeś najbliżej?
Z jakim stosikiem najczęściej pracowałeś?
Przegląd kodu: cache w Go z mutexem. Znajdź problemy i zaproponuj ulepszenia. Warunek: obciążenie odczytu/zapisu 80/20.
Jakie metody HTTP istnieją? Które z nich są idempotentne?
pakiet główny import ( "crypto/md5" "fmt" ) var alfabet = []rune{'a', 'b', 'c', 'd', '1', '2', '3'} func OdzyskajHasło(h []byte) string { return "" } func hashHasło(wpis string) []byte { h := md5.Sum([]byte(wpis)) return h[:] } func main() { tests := []string{"a", "12", "abc333d"} ok := true for _, exp := range tests { h := hashHasło(exp) act := OdzyskajHasło(h) if act != exp { fmt.Printf("Błąd: oczekiwano %q, otrzymano %q\n", exp, act) ok = false } } if ok { fmt.Println("Wszystkie testy zakończyły się sukcesem") } }
Opisz strukturę żądania i odpowiedzi HTTP. Jak klasyfikowane są kody odpowiedzi?
package main import ( "crypto/md5" "fmt" ) var alfabet = []rune{'a', 'b', 'c', 'd', '1', '2', '3'} func OdzyskajHaslo(h []byte) string { return "" } func hashHaslo(in string) []byte { h := md5.Sum([]byte(in)) return h[:] } func main() { tests := []string{"a", "12", "abc333d"} ok := true for _, exp := range tests { h := hashHaslo(exp) act := OdzyskajHaslo(h) if act != exp { fmt.Printf("Błąd: oczekiwano %q, otrzymano %q\n", exp, act) ok = false } } if ok { fmt.Println("Wszystkie testy zakończyły się sukcesem") } } Aby poprawnie uruchomić kod: punkt wejścia -- funkcja main w pakiecie main Zadanie: Zaimplementuj funkcję OdzyskajHaslo, która odtwarza oryginalne hasło na podstawie hash MD5, składające się z znaków z podanego alfabetu.
Dlaczego rozważasz nowe oferty? Aktywne czy pasywne poszukiwania?
Jak zaimplementować graceful shutdown usługi Go w Kubernetes podczas wdrażania nowej wersji?
Czego chcesz teraz — jakie masz oczekiwania wobec nowej pracy?