H
Идентификатор курса:
Дата прохождедния:
Двоичная система счисления
- Системы счисления
- Из десятичной в двоичную и обратно
- Принцип работы процессора
- Двоичное представление отрицательных чисел
- Сложение и умножение двоичных чисел
- Вычитание двоичных чисел
- Двоичное представление плавающей точки
- Решение задач
Битовые операции
- Размерности величин
- Адресация памяти
- Big & Little Endian
- Примитивные битовые операции
- Классические битовые операции
- Сжатие параметров
- Битовый вектор
- Реализация битового вектора
- Решение задач
Стек и очередь
- Причины создания стека
- Аппаратный стек x86
- Аппаратный стек
- Алгоритм работы процессора с данными
- Визуализация потока данных в компьютере
- Размещение стека в памяти
- Работа с аппаратным стеком
- Что принес стек в программирование
- Переполнение стека
- Трассировка кода
- Раскручивание и скручивание
- Стек и типы данных
- Пример работы кадров стека
- Программный стек
- Очереди
- Решение задач
Кодировки и строки
- ASCII
- Работа с ASCII-строками
- Кодовые страницы
- OEM кодовые страницы
- Mojibake
- ANSI и Microsoft
- Проблема иероглифов
- Single-byte Character Set
- Double-Byte Character Set
- Unicode
- Basic Multilingual Plane
- Хранение символов из кодовых страниц
- Кодировки: USC-2, UFT-8, UTF-16, UTF-32
- Суррогатные пары
- Причина использования UTF-16 в языках программирования
- Типы строк: C-String, P-String, Immutable String
- Проблема конкатенации строк
- Проблема получения подстроки
- StringBuilder
- Решение задач
Рекурсия
- Определение рекурсии в реальном мире
- Виды рекурсивных функций
- Первая рекурсивная функция
- Скелет простейшей рекурсивной функции
- Правило шести
- 7 правил написания рекурсивных функций
- Критичность размера меньшей задачи
- Упрощение рекурсивного кода
- Трассировка рекурсивных функций
- Замечания к правилам написания рекурсивной функции
- Функция с двумя рекурсивными вызовами
- Построение дерева рекурсивных вызовов
- Рекурсия в цикле
- Решение задач
Оценка сложности алгоритмов. Big O
- Причины изучения оценки сложности
- Математическая функция
- Оценка сложности
- Случаи сложности
- Сравнение сложностей
- Сравнение математических функций
- Нотация Big O
- Решение задач
Оценка типичных сложностей
- Оценка типичных сложностей
- Сложение и умножение
- Сложность log N
- Строки и оценка сложности
- Сложность рекурсивных функций
- Амортизационный анализ
- Сложность по памяти
- Решение задач
Основы теории вероятностей и логики
- Множества
- Комбинаторика
- Базовые понятия вероятностей
- Произведение событий
- Сумма событий
- Закон распределения
- Математическое ожидание
- Метод дедукции
- Оптимизация худшего случая
- Решение задач
Массив и связанный список
- Виды и особенности массивов
- Связанный список
- Операции над связанным списком
- Реализация однонаправленного связанного списка
- Реализация двунаправленного связанного списка
- Реализация поиска
- Реализация вставки
- Реализация удаления из односвязного списка
- Реализация удаления из двусвязного списка
- Подход Runner
- Решение задач
Хеш-функция
- Ассоциативный массив
- Хеш-функция
- Метод деления по модулю
- Метод умножения
- Хеш объектов и чисел
- Попытка создания хеш-таблицы
- Проблемы хеш-функций
- Отрицательный хеш
- Проблема хешей и индексов
- Правила вычисления хеша и индекса
Хеш-таблица
- Виды хеш-таблиц
- Метод цепочек
- Коэффициент заполнения
- Реализация метода цепочек
- Оценка сложности метода цепочек
- Линейный поиск
- Реализация линейного поиска
- Квадратичный поиск
- Реализация квадратичного поиска
- Двойное хеширование
- Реализация двойного хеширования
- Сложность открытой адресации
- Сравнение производительности хеш таблиц
- Универсальное хеширование
Поиск с возвратом. Динамическое программирование
- Возврат составного значения из рекурсии
- Поиск с возвратом
- Задача полного перебора
- Процессор, рекурсия и стек
- Риски рекурсивных решений
- Рекурсия в итерацию
- Динамическое программирование
- Оптимальный рюкзак
- Использовать или нет рекурсию
- Головная и хвостовая рекурсия
- Решение задач
Бинарное дерево поиска
- Проблема поиска и сортировки
- Бинарное дерево и бинарное дерево поиска
- Вставка и поиск узла
- Обход бинарного дерева поиска
- Удаление узла
- Реализация вставки и поиска узла
- Реализация обхода бинарного дерева поиска
- Реализация удаления узла
- Решение задач
АВЛ-дерево
- Определение АВЛ-дерева
- Условный алгоритм вставки в АВЛ-дерево
- Поиск места для вставки нового узла
- Балансировка. Высота дерева
- Поиск несбалансированного поддерева
- Баланс фактор
- Повороты дерева
- Количество балансировок после вставки нового узла
- Удаление из АВЛ-дерева
- Реализация АВЛ-дерева
- Решение задач
Красно-черное дерево
- Определение красно-черного дерева
- Виды узлов
- Определения для красно-черного дерева
- Правила работы
- Причина работы
- Вставка
- Удаление
- Реализация
- Решение задач
Полное бинарное дерево, куча, префиксное дерево
- Определение полного бинарного дерева
- Определение бинарной кучи
- Поиск в куче
- Вставка в кучу
- Амортизация при вставке в кучу
- Извлечение корня кучи
- Создание кучи из набора данных
- Хранение кучи в памяти
- Реализация кучи
- Реализация кучи в Java
- Префиксное дерево
- Вставка в префиксное дерево
- Поиск в префиксном дереве
- Удаление из префиксного дерева
- Реализация префиксного дерева
- Решение задач
Базовые сортировки
- Параметры сложности сортировки
- Сортировка пузырьком
- Сортировка выбором
- Сортировка вставками
- Сравнение квадратичных сортировок
- Сортировка слиянием
- Сортировка кучей
- Поразрядная сортировка
- Решение задач
Быстрая сортировка Хоара
- Распутанный массив
- Задача расспутывания массива
- Местоположение опорного элемента
- Варианты расстояний между указателями
- Сокращение функции partition
- Визуализация алгоритма Хоара
- Быстрая сортировка алгоритмом Хоара
- Сложность алгоритма Хоара
- Решение задач
Быстрая сортировка Ломуто. Внешняя Сортировка. Двоичный поиск
- Алгоритм Ломуто
- Реализация алгоритма Ломуто
- Сложность алгоритма Ломуто
- Ускорение быстрой сортировки
- Быстрая сортировка против всех
- Внешняя сортировка
- Реализация внешней сортировки
- Двоичный поиск
- Решение задач
Графы
- Определения и виды графов
- Представления графа
- Реализация графа
- Поиск в глубину
- Реализация поиска в глубину
- Поиск путей в графе
- Поиск циклов в графе
- Топологическая сортировка
- Сложность поиска в глубину
- Поиск в ширину
- Реализация поиска в ширину
- Поиск кратчайшего пути на основе поиска в ширину
- Реализация поиска кратчайшего пути на основе поиска в ширину
- Двунаправленный поиск в ширину
- Реализация двунаправленного поиска в ширину
- Сложность одна и двунаправленного поиска в ширину
- Поиск циклов на основе поиска в ширину
- Алгоритм Дейкстры
- Реализация алгоритма Дейкстры
- Решение задач
Процесс интервью
- Как проходит интервью
- Почему даже лучших кандидатов могут отвергнуть
- Умение решать проблемы важно
- Знание computer science необходимо
- Визуализация мыслей позволяет сосредоточиться на главном
- Как отбираются вопросы для интервью
Детали проведения интервью
- Amazon
- Apple
- Facebook
- Google
- Microsoft
Прежде, чем пройти интервью
- Где взять опыт
- Написание резюме
- Алгоритм подготовки к интервью
Общие вопросы на интервью
- Какие Ваши слабости?
- “Итак, расскажите о себе”
- Как и какие вопросы задавать интервьюеру
- Правильное описание проектов, где Вы участвовали
- Как отвечать на общие вопросы
- Думайте, как могут интерпретировать Ваши слова