— Была задача по SQL, потом написать функцию, которая определяет монотонный ли слайс и 3 задача код-ревью. — Так же были общие вопросы по Go (интерфейсы, примитивы синхронизации, хэш мапа). — В конце был микро систем дизайн, надо было придумать как будет работать сервис отслеживания курьера (можно реализовать через вебсокеты)
Есть база с такой схемой данных — // documents — таблица поступивших в обработку документов id | filename | created_at ——————————- 1 | a.txt | 2024-12-02 2 | b.txt | 2024-12-03 3 | c.txt | 2024-12-01 4 | d.txt | 2024-12-01
// statuses — таблица движения статусов документов documentid | status | createdat ————————————— 1 | New | 2024-12-04 1 | Confirmed | 2024-12-05 1 | Done | 2024-12-06 2 | New | 2024-12-04 2 | Denied | 2024-12-04 3 | New | 2024-12-03 3 | Confirmed | 2024-12-04 3 | Done | 2024-12-04 4 | New | 2024-12-04
// statuses — таблица движения статусов документов documentid | status | createdat ————————————— 1 | New | 2024-12-04 1 | Confirmed | 2024-12-05 1 | Done | 2024-12-06 2 | New | 2024-12-04 2 | Denied | 2024-12-04 3 | New | 2024-12-03 3 | Confirmed | 2024-12-04 3 | Done | 2024-12-04 4 | New | 2024-12-04
Статус Done — обработка документа закончена.
1. Вывести имена файлов, обработка которых ещё не закончена. Вывести последние 5 записей отсортированных по created_at.
2. Посчитать количество документов в статусе Confirmed.
3)
package main
import (
"fmt"
"sync"
)
func main() {
fmt.Println(GetOrCreate("hello", "world"))
fmt.Println(Get("hello"))
}
var cache = make(map[string]string)
// GetOrCreate проверяет существование ключа key
// Если такого нет, то создает новое значение
func GetOrCreate(key, value string) string {
var m sync.Mutex
m.Lock()
value = cache[key]
m.Unlock()
if value != "" {
return value
}
m.Lock()
cache[key] = value
m.Unlock()
return value
}
func Get(key string) string {
var m sync.Mutex
m.Lock()
v := cache[key]
m.Unlock()
return v
}