General Flashcards

(48 cards)

1
Q
  1. Что такое компиляция и интерпретация?
A

Компиляция — преобразование исходного кода в машинный код или промежуточное представление до выполнения программы. Интерпретация — выполнение исходного кода построчно с помощью интерпретатора без генерации отдельного бинарника. Go — компилируемый язык, Python — интерпретируемый.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. Чем компиляция Go отличается от компиляции C++ или Java?
A

Go компилируется напрямую в статический бинарник без виртуальной машины и линковки с внешними runtime-библиотеками. Компиляция очень быстрая за счёт простого синтаксиса и отсутствия сложных оптимизаций. В Java компиляция идёт в байткод JVM, а C++ генерирует машинный код, но с более долгим временем сборки.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
  1. Что такое статическая и динамическая типизация?
A

Статическая — тип переменной известен и проверяется на этапе компиляции (Go, C++). Динамическая — тип определяется во время выполнения (Python, JavaScript). Статическая типизация уменьшает количество ошибок на ранних этапах, динамическая — более гибкая.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q
  1. Чем отличается сильная и слабая типизация?
A

Сильная типизация не позволяет неявно преобразовывать типы (Go, Java). Слабая типизация допускает автоматические преобразования (JavaScript, PHP). Пример: в Go нельзя сложить int и string напрямую, а в JS “2” + 2 даст строку “22”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
  1. Что такое стек и куча?
A

Стек — область памяти для локальных переменных и вызовов функций, работает по принципу LIFO, быстрый доступ. Куча — область динамической памяти для объектов, живущих дольше вызова функции; управляется вручную (C++) или сборщиком мусора (Go, Java).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. В чем отличие процесса и потока?
A

Процесс — отдельная программа с собственной памятью и ресурсами. Поток — «лёгкий» поток выполнения внутри процесса, использующий общую память. Между процессами требуется IPC (межпроцессное взаимодействие), а потоки общаются напрямую.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q
  1. Что такое конкурентность и параллелизм?
A

Конкурентность — способность программы управлять несколькими задачами (goroutines в Go), даже если они выполняются на одном ядре. Параллелизм — одновременное выполнение на разных ядрах процессора. Конкурентность ≠ параллельность, но они могут сочетаться.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
  1. Чем отличается многопоточность от асинхронности?
A

Многопоточность использует несколько потоков ОС, может выполняться параллельно. Асинхронность — неблокирующая модель выполнения, где один поток обслуживает несколько задач (через события, колбэки или корутины). Go объединяет оба подхода через goroutines и планировщик.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
  1. Что такое race condition?
A

Состояние гонки возникает, когда несколько потоков/горутин одновременно обращаются к разделяемым данным, и результат зависит от порядка выполнения. В Go такие ошибки можно отлавливать с помощью go run -race.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. Что такое deadlock и как его предотвратить?
A

Deadlock — ситуация, когда несколько потоков или горутин навсегда ждут друг друга (например, два мьютекса захвачены в разном порядке). Предотвращают — соблюдая единый порядок захвата ресурсов, используя таймауты, проверяя проектирование синхронизации.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q
  1. Что такое mutex и зачем он нужен?
A

Mutex (mutual exclusion) — примитив синхронизации, который гарантирует, что только один поток/горутина имеет доступ к ресурсу в момент времени. Используется для защиты разделяемых данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q
  1. Какие существуют модели конкурентности?
A

Основные: модель потоков (shared memory, mutexes), модель акторов (сообщения), модель CSP (communicating sequential processes — каналы и процессы, как в Go), событийная модель (event loop, async/await).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q
  1. Чем модель CSP отличается от потоков?
A

В CSP (Go) горутины общаются через каналы («не делись памятью, а общайся»). В потоковой модели потоки делят память и синхронизируются примитивами (мьютексы, атомики). CSP упрощает проектирование, так как синхронизация встроена в модель.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q
  1. Что такое компилятор и линковщик?
A

Компилятор переводит исходный код в объектные файлы (машинный код). Линковщик связывает эти файлы, подключает библиотеки и формирует финальный бинарник. В Go весь процесс автоматизирован командой go build.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q
  1. Что такое ABI и API?
A

API (Application Programming Interface) — интерфейс вызова функций и структур на уровне исходного кода. ABI (Application Binary Interface) — правила взаимодействия на уровне бинарников: соглашения о вызовах, расположение данных в памяти, формат библиотек.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q
  1. Что такое бинарная совместимость?
A

Способность новой версии библиотеки работать с уже скомпилированными программами без пересборки. Нарушение ABI (изменение структуры памяти, сигнатур функций) ломает бинарную совместимость.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q
  1. Что такое сборщик мусора и зачем он нужен?
A

GC (garbage collector) автоматически освобождает память, на которую больше нет ссылок. Он упрощает разработку (не нужно вручную освобождать память), но может влиять на производительность.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q
  1. Чем отличается сборка мусора в Go от Java?
A

Go использует триколорный, инкрементальный GC с малыми паузами (ориентирован на низкую задержку). Java традиционно имела stop-the-world GC (медленнее, но более предсказуемо для throughput), хотя в новых версиях появились low-latency алгоритмы (G1, ZGC).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q
  1. Какие существуют виды памяти?
A

Основные: стек (локальные переменные), куча (динамическая память), статическая область (глобальные переменные, константы), память кода (инструкции). Также есть кэш-память процессора (L1/L2/L3).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q
  1. Что такое кэш и зачем он нужен?
A

Кэш — быстрая память между CPU и RAM. Хранит недавно используемые данные, чтобы ускорить доступ. Важно при оптимизации: последовательные чтения эффективнее из-за работы кэша.

21
Q
  1. Что такое транзакция в базах данных?
A

Транзакция — группа операций с БД, выполняемых как единое целое: либо все успешно, либо откат. Гарантирует целостность данных.

22
Q
  1. Что такое ACID-свойства?
A

Atomicity — атомарность (всё или ничего). Consistency — согласованность (данные остаются валидными). Isolation — изоляция (транзакции не мешают друг другу). Durability — долговечность (результат сохраняется даже при сбоях).

23
Q
  1. Чем отличается SQL от NoSQL?
A

SQL — реляционные БД с фиксированной схемой и языком SQL (PostgreSQL, MySQL). NoSQL — нереляционные (документы, ключ-значение, графы, колоночные), более гибкие по схеме (MongoDB, Redis).

24
Q
  1. Какие типы индексов бывают в базах данных?
A

B-деревья (наиболее распространённые), хэш-индексы, полнотекстовые индексы, GiST/SP-GiST, R-деревья (для геоданных), bitmap-индексы.

25
25. Что такое нормализация и денормализация?
Нормализация — разделение таблиц для уменьшения дублирования и обеспечения целостности. Денормализация — объединение данных ради ускорения запросов, жертвуя избыточностью.
26
26. Что такое REST API?
REST (Representational State Transfer) — архитектурный стиль для HTTP-сервисов. Использует методы (GET, POST, PUT, DELETE), ресурсы в URL, JSON/XML для передачи данных.
27
27. Чем REST отличается от gRPC?
REST — текстовый (обычно JSON), прост в использовании, совместим с браузерами. gRPC — бинарный (Protobuf), быстрее и компактнее, поддерживает стриминг и строгую типизацию, но сложнее для интеграции.
28
28. Что такое HTTP/1.1, HTTP/2 и HTTP/3?
HTTP/1.1 — последовательные запросы с keep-alive. HTTP/2 — мультиплексирование, бинарный формат, сжатие заголовков. HTTP/3 — работает поверх QUIC (UDP), снижает задержки, улучшает работу через нестабильные сети.
29
29. Чем отличается TCP от UDP?
TCP — надёжный, с подтверждениями, упорядоченной доставкой (подходит для веба, БД). UDP — быстрый, без гарантии доставки (подходит для видео/игр/VoIP).
30
30. Что такое DNS?
Domain Name System — система сопоставления доменных имён с IP-адресами. Работает через иерархию серверов: root → TLD → авторитетные. Поддерживает кеширование и балансировку.
31
31. Что такое хэш-функция и зачем она нужна?
Функция, преобразующая произвольные данные в фиксированное значение (хэш). Используется для проверки целостности, индексов, криптографии, быстрых поисков в структурах данных.
32
32. Чем SHA-256 отличается от MD5?
MD5 — устаревший, быстрый, но небезопасный (коллизии). SHA-256 — современный криптографически стойкий алгоритм с выходом 256 бит, используется в блокчейнах и HTTPS.
33
33. Что такое JWT и зачем он нужен?
JSON Web Token — формат передачи данных для аутентификации и авторизации. Содержит header, payload и подпись. Используется для stateless-авторизации (без хранения сессий на сервере).
34
34. Что такое OAuth 2.0?
Протокол авторизации. Позволяет пользователю давать доступ приложению к своим ресурсам у провайдера (Google, GitHub) без передачи пароля. Использует access token и refresh token.
35
35. Что такое Docker и зачем он нужен?
Платформа контейнеризации: позволяет запускать приложения в изолированных контейнерах с зависимостями. Упрощает доставку, тестирование и деплой.
36
36. Чем контейнер отличается от виртуальной машины?
Контейнер использует ядро хоста и изолирует процессы, лёгкий и быстрый. Виртуальная машина эмулирует ОС полностью с собственным ядром, тяжелее и медленнее.
37
37. Что такое Kubernetes и для чего он используется?
Kubernetes — система оркестрации контейнеров: автоматизирует развёртывание, масштабирование, балансировку и обновления приложений. Позволяет управлять кластерами контейнеров.
38
38. Что такое CI/CD?
CI (Continuous Integration) — автоматическая проверка и сборка кода при изменениях. CD (Continuous Delivery/Deployment) — автоматический деплой в тест/прод окружение. Ускоряет разработку и повышает надёжность.
39
39. Чем тестирование отличается от отладки?
Тестирование — проверка корректности программы заранее (юнит-тесты, интеграционные). Отладка — поиск и исправление ошибок уже при возникновении. Тесты предотвращают баги, отладка устраняет найденные.
40
40. Что такое unit-тесты?
Тесты для отдельных функций/модулей, изолированные от внешних зависимостей. Проверяют поведение маленьких частей программы.
41
41. Что такое интеграционные тесты?
Тесты, которые проверяют взаимодействие нескольких компонентов системы: работу с БД, API, внешними сервисами.
42
42. Чем отличается нагрузочное тестирование от стресс-тестирования?
Нагрузочное — проверка системы при ожидаемой или увеличенной нагрузке. Стресс — проверка «на излом» при экстремальной нагрузке, чтобы понять пределы.
43
43. Что такое TDD?
Test-Driven Development — разработка через тесты. Сначала пишется тест, затем код, проходящий этот тест, потом рефакторинг.
44
44. Что такое SOLID?
Набор принципов проектирования: S — Single Responsibility, O — Open/Closed, L — Liskov Substitution, I — Interface Segregation, D — Dependency Inversion. Помогают писать гибкий и поддерживаемый код.
45
45. Что такое DRY и KISS?
DRY (Don’t Repeat Yourself) — избегать дублирования кода. KISS (Keep It Simple, Stupid) — решения должны быть простыми и понятными. Оба принципа делают код чище и легче поддерживаемым.
46
46. Что такое CAP-теорема?
В распределённых системах одновременно можно гарантировать только два из трёх: Consistency (согласованность), Availability (доступность), Partition tolerance (устойчивость к сетевым разделениям). Обычно выбирают CA, CP или AP в зависимости от требований.
47
47. Чем отличается монолитная архитектура от микросервисной?
Монолит — всё приложение как единый блок. Проще разработать, сложнее масштабировать и обновлять. Микросервисы — приложение разбито на независимые сервисы, каждый можно масштабировать и развёртывать отдельно. Сложнее инфраструктурно, но гибче.
48
48. Что такое message broker и зачем он нужен?
Message broker (RabbitMQ, Kafka, NATS) — посредник для обмена сообщениями между сервисами. Обеспечивает асинхронность, надёжную доставку, буферизацию нагрузки и снижение связности между компонентами.