Перейти к содержимому

Kaspersky / Касперский - 5

Актуальность: 2 кв 2025

  • Что такое gorutine? Для чего используют? go/concurrency
  • Что будет, если вызвать несколько gorutine в main и не ждать их завершения? go/concurrency
  • При обработке гигабайт данных в горутине, где хранятся эти данные? go/concurrency
  • В чем разница между конкурентностью и параллелизмом? go/concurrency
  • Каким образом получается, что горутины выстраиваются в одну очередь выполнения? go/runtime
  • От чего зависит количество очередей? algorithms/data-structures
  • От чего зависит количество потоков? go/runtime
  • Можно ли создать количество потоков больше, чем ядер процессора? linux-os/processes
  • Как можно управлять количеством потоков в Go? go/basics
  • Что такое кэширование? nosql-cache/caching
  • Почему нельзя взять JSON-файл и положить его рядом с приложением, вместо использования механизмов кэширования? При чем здесь вообще кэширование? nosql-cache/caching
  • Расскажите о масштабировании в распределенных системах. Какие есть виды масштабирования? architecture/microservices
  • Как можно масштабировать базы данных? sql/replication-scaling
  • Для чего нужен WAL-журнал в PostgreSQL? sql/replication-scaling
  • Можно ли дважды записать одну и ту же запись в мультимастер? sql/replication-scaling
  • Есть три юзер-сервиса. Перед ними стоит прокси. Как распределить нагрузку на эти три сервиса? network/balancing
type Count int
func (c Count) Increment() {
c++
}
func main() {
var count Count
count.Increment()
fmt.Print(count)
}
func insert(a []int) {
a = append(a, 4)
}
func main() {
a := make([]int, 0, 4)
a = append(a, []int{1, 2, 3}...)
insert(a)
fmt.Println(a)
}

Задача: Что выведет на экран? Что будет, если добавить конструкцию default? go/puzzles

Заголовок раздела «Задача: Что выведет на экран? Что будет, если добавить конструкцию default? go/puzzles»
func main() {
msgchan := make(chan string, 1)
close(msgchan)
stopchan := make(chan struct{})
close(stopchan)
select {
case msgchan <- "msg ":
fmt.Println("msg sent ")
case <-stopchan:
fmt.Println("stop signal received ")
}
}
func main() {
c := make(chan int, 3)
c <- 1
c <- 2
for msg := range c {
fmt.Println(msg)
}
close(c)
}
func main() {
c:=make(chan int, 3)
c<-1
c<-2
c<-3
c<-4
for msg:=range c{
fmt.Println(msg)
}
}
close(c)
var s *string
fmt.Println(s == nil)
var i any
fmt.Println(i == nil)
i = s
fmt.Println(i == nil)
type Speaker interface {
Speak() string
}
type Person struct {
name string
}
func (p Person) Speak() string {
return "Hi, I 'm " + p.name
}
func main() {
var s Speaker
p := Person{name: "Alice "}
s = p
p.name = "Bob "
fmt.Println(s.Speak()) // (1)
{
func() {
s := p
fmt.Println(s.Speak()) // (2)
}()
go func(p Person) {
time.Sleep(10 * time.Millisecond)
fmt.Println(p.Speak()) // (3)
}(p)
p.name = "Charlie "
time.Sleep(20 * time.Millisecond)
}
}

Задача: Необходимо реализовать middleware. Middleware будет отбрасывать n+1 запрос за секунду. Мы не пропускаем больше 100 запросов, например, как у нас здесь на 25 строчке указано, за одну секунду. То есть, если 101 пришел, то мы вернем клиенту ошибку с 429 статусом. Можно доработать конструктор, можно доработать структуру и можно добавить дополнительные приватные методы, если они нужны. Все, что выше комментария, править разрешено, все, что ниже комментария - не править. Как много памяти будет потреблять алгоритм и может ли быть проблема с памятью? Какова алгоритмическая сложность алгоритма? Как можно уменьшить алгоритмическую сложность? go/concurrency

Заголовок раздела «Задача: Необходимо реализовать middleware. Middleware будет отбрасывать n+1 запрос за секунду. Мы не пропускаем больше 100 запросов, например, как у нас здесь на 25 строчке указано, за одну секунду. То есть, если 101 пришел, то мы вернем клиенту ошибку с 429 статусом. Можно доработать конструктор, можно доработать структуру и можно добавить дополнительные приватные методы, если они нужны. Все, что выше комментария, править разрешено, все, что ниже комментария - не править. Как много памяти будет потреблять алгоритм и может ли быть проблема с памятью? Какова алгоритмическая сложность алгоритма? Как можно уменьшить алгоритмическую сложность? go/concurrency»
type RateLimiter struct {
N int
}
func NewRateLimiter(n int) *RateLimiter {
return &RateLimiter{}
}
func (rl *RateLimiter) Middleware(h func(w http.ResponseWriter, r *http.Request)) func(w http.ResponseWriter) {
return h
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Println("REQUEST COMPLETED ")
}
func main() {
rl := NewRateLimiter(100)
http.HandleFunc("/", rl.Middleware(handler))
go func() {
for i := 0; i < 1000; i++ {
time.Sleep(10 * time.Millisecond)
if _, err := http.Get("http://localhost:8080/"); err != nil {
log.Fatal(err)
}
os.Exit(0)
}
}()
}

Задача: Рассматривается создание личного блога. Есть два подхода к хранению статей: sql/schema-design

Заголовок раздела «Задача: Рассматривается создание личного блога. Есть два подхода к хранению статей: sql/schema-design»
  • в Markdown-файлах - файлы лежат локально на сервере, когда пользователь запрашивает статью, бэкенд открывает соответствующий файл и отдает его содержимое;
  • хранение статьи в базе данных.

Вопрос: когда именно понадобится кэширование в такой системе

Заголовок раздела «Вопрос: когда именно понадобится кэширование в такой системе»

Задача: Напишите SQL-запрос, который выводит имя и город каждого человека из таблицы Person. Если для какого-либо personId нет записи в таблице Address, то в столбце city должно быть значение NULL. sql/general

Заголовок раздела «Задача: Напишите SQL-запрос, который выводит имя и город каждого человека из таблицы Person. Если для какого-либо personId нет записи в таблице Address, то в столбце city должно быть значение NULL. sql/general»
| Column Name | Type |
|-------------|---------|
| personId | int |
| Name | varchar |

personId - первичный ключ.

addressId - первичный ключ.