Скрининг на middle-senior Golang Developer в ****

Доступно с премиум-подпиской

Оформите премиум-подписку, чтобы получить доступ к:

  • Фильтрации по компаниям
  • Названиям компаний в интервью
  • Видеозаписям собеседований в категории Golang Developer

Посмотреть видео в категории

(2024-12-16)

— Была задача по 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
}