Работа мечты: различия между версиями

Материал из Artem Aleksashkin's Wiki
Перейти к навигации Перейти к поиску
Строка 156: Строка 156:


== Golang ==
== Golang ==
* [https://habr.com/ru/articles/654569/ Собеседование Golang разработчика (теоретические вопросы), Часть I]
** [https://habr.com/ru/companies/nixys/articles/492056/ 4 примера iota-перечислений]
* [https://habr.com/ru/articles/670974/ Собеседование Golang разработчика (теоретические вопросы), Часть II. Что там с конкурентностью?]
** [https://gobyexample.com/waitgroups Go by Example: WaitGroups]
== JavaScript ==
== JavaScript ==
== TypeScript ==
== TypeScript ==

Версия от 14:38, 3 ноября 2023

  • Facebook
  • Amazon
  • Apple
  • Netflix
  • Google
  • Microsoft

Мотивация

Penguin-Falls-Over-Rock.gif

Dream.jpeg

Nu-davay.jpg

Steps-motivation.jpg

Один работник заходит к хозяину и спрашивает:
– А почему ты платишь мне всего рубль в неделю, в то время как Елисею – пятнадцать? Хозяин смотрит в окно и говорит:
– Слышу, кто-то едет. Нам сена на зиму нужно купить. Выйди-ка, посмотри, не сено ли везут.

Вышел работник.
Зашел и говорит:
– Правда, сено.
– А не знаешь, откуда? Может, с Лукьяновских лугов?
– Не знаю.
– Так сходи и спроси.
Пошел тот.
Снова входит:
– Точно, с Лукьяновских.
– А сено какого укоса – первого или второго?
– Не знаю.
– Так сходи, узнай!
Вышел работник.
Возвращается:
– Хозяин! Первого укоса!
– А не знаешь, почем?
– Не знаю.
– Так сходи, узнай.
Сходил.
Вернулся и говорит:
– Хозяин! По двадцать рублей.
– А дешевле не дают?
– Не знаю.
В этот момент входит Елисей и говорит:
– Хозяин! Мимо везли сено с Лукьяновских лугов первого укоса. Просили по 20 рублей. Сторговались по 17 за воз. Я их загнал во двор, сейчас разгружают.
Хозяин поворачивается к первому:
– Теперь ты понял, почему тебе платят 1 рубль, а Елисею – 15?

Evg-sanya.jpg

Full-stack-developer.jpg

Cat-developer-home.jpg

Compensations

Jobs Websites

Подготовка

ООП

  • Инкапсуляция (разделение доступа)
  • Наследование
  • Полиморфизм (полиморфные методы для каждого типа свой метод)

SOLID

  • S - Принцип единственной ответственности (The Single Responsibility Principle)
  • O - Принцип открытости/закрытости (The Open Closed Principle)
  • L - Принцип подстановки Барбары Лисков (The Liskov Substitution Principle)
  • I - Принцип разделения интерфейса (The Interface Segregation Principle)
  • D - Принцип инверсии зависимостей (The Dependency Inversion Principle)

Паттерны проектирования

  • Порождающие паттерны
    • Абстрактная фабрика
    • Одиночка
    • Прототип
    • Строитель
    • Фабричный метод
  • Структурные паттерны
    • Адаптер
    • Декоратор
    • Заместитель
    • Компоновщик
    • Мост
    • Приспособленец
    • Фасад
  • Паттерны поведения
    • Интерпретатор
    • Итератор
    • Команда
    • Наблюдатель
    • Посетитель
    • Посредник
    • Состояние
    • Стратегия
    • Хранитель
    • Цепочка обязанностей
    • Шаблонный метод

ACID

  • Atomicity — Атомарность
  • Consistency — Согласованность
  • Isolation — Изолированность
  • Durability — Долговечность

Алгоритмы

  • Не забываем про рекурсию

Сложность алгоритмов

PHP

Python

Golang

JavaScript

TypeScript

Angular

SQL

Поведенческие вопросы

Решение задач

Дизайн систем

Время отклика систем

Latency.png

Latency Comparison Numbers
--------------------------
L1 cache reference                           0.5 ns
Branch mispredict                            5   ns
L2 cache reference                           7   ns                      14x L1 cache
Mutex lock/unlock                           25   ns
Main memory reference                      100   ns                      20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy            10,000   ns       10 us
Send 1 KB bytes over 1 Gbps network     10,000   ns       10 us
Read 4 KB randomly from SSD*           150,000   ns      150 us          ~1GB/sec SSD
Read 1 MB sequentially from memory     250,000   ns      250 us
Round trip within same datacenter      500,000   ns      500 us
Read 1 MB sequentially from SSD*     1,000,000   ns    1,000 us    1 ms  ~1GB/sec SSD, 4X memory
HDD seek                            10,000,000   ns   10,000 us   10 ms  20x datacenter roundtrip
Read 1 MB sequentially from 1 Gbps  10,000,000   ns   10,000 us   10 ms  40x memory, 10X SSD
Read 1 MB sequentially from HDD     30,000,000   ns   30,000 us   30 ms 120x memory, 30X SSD
Send packet CA->Netherlands->CA    150,000,000   ns  150,000 us  150 ms

Notes
-----
1 ns = 10^-9 seconds
1 us = 10^-6 seconds = 1,000 ns
1 ms = 10^-3 seconds = 1,000 us = 1,000,000 ns
  • https://ping-admin.ru/free_ping/
  • До МСК
    • Европа < 50
    • До Урала < 50
    • Владивосток 100
    • США-Канада 150-250
    • Южная Америка 200-300
    • Азия 200-300
    • Австралия 300

Расположение датацентров в мире

Не функциональные характеристики систем

Availability / Доступность

Доступность % Недоступность в год Недоступность в месяц Недоступность в неделю
90% (1 девяток) 36.5 дней 72 часов 16.8 часов
99% (2 девяток) 3.65 дней 7.20 часов 1.68 часов
99.5% (2 девяток) 1.83 дней 3.60 часов 50.4 минут
99.9% (3 девяток) 8.76 часов 43.8 минут 10.1 минут
99.99% (4 девяток) 52.56 минут 4.32 минут 1.01 минут
99.999% (5 девяток) 5.26 минут 25.9 секунд 6.05 секунд
99.9999% (6 девяток) 31.5 секунд 2.59 секунд 0.605 секунд
99.99999% (7 девяток) 3.15 секунд 0.259 секунд 0.0605 секунд

Reliability / Надежность

Среднее время между отказами (MTBF)

Среднее время отказа (MTTF)

Среднее время восстановления(MTTR)

Scalability / Масштабируемость

  • Вертикальное масштабирование - увеличение мощности узлов (CPU(Frequency, # of cores), MEM(Volume, Frequency), HDD->SSD->NVMe)
  • Горизонтальное масштабирование - увеличение количества узлов

Maintainability / Поддерживаемость

  • Главный параметр - MTTR
  • Легкость кода и прозрачность разработки

Fault Tolerance / Устойчивость к сбоям

  • Отказоустойчивость - способность системы обслуживать запросы даже при отказе ее частей.
  • Можно достичь шардингом и репликацией

Сколько нужно серверов?

Блоки систем

  • DNS
  • Load balancers - Балансировщики
  • Databases - Базы данных
  • KV Storage - Хранилища Ключ Значение
  • CDN - Сеть доставки контента
  • Sequencer - генератор идентификаторов
  • Мониторинг
  • Распределенный кэш
  • Распределенная очередь сообщений
  • Издатель-подписчик
  • Ограничитель нагрузки
  • Файловое хранилище
  • Распределенный поиск
  • Распределенное логгирование
  • Распределенное задачи по расписанию
  • Шардированные счетчики.

Mock интервью

Interview tools

Демотиваторы

Qs-vs-real.png

Nizkoopl-programmist.jpg

Chatgpt-meme.jpeg

Nothing-to-eat.jpg

Suk-sidish.gif

Moskvich-bez-raboty.jpg

Digital-zavod.jpg

Pravki-po-makety.gif

Son-of-owner.jpg