Computer Science

CPU

Центральный процессор (CPU, Central Processing Unit) — это основной компонент компьютера, который выполняет вычисления и управляет выполнением программ. Он отвечает за выполнение инструкций программного обеспечения, обрабатывая данные, выполняя арифметические и логические операции и координируя работу других компонентов системы.

Такт процессора

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

RAM

RAM (Random Access Memory) — это оперативная память компьютера, которая используется для временного хранения данных, с которыми работает процессор. Доступ к данным в RAM осуществляется быстро и напрямую (по адресам), но информация в ней хранится только во время работы системы и теряется после отключения питания.

ORM

ORM (Object-Relational Mapping) — это технология, которая позволяет преобразовывать данные между объектами в программном коде и реляционными базами данных. ORM автоматически управляет операциями с базой данных (CRUD) на основе объектных моделей, что упрощает взаимодействие с базой данных, не требуя прямого написания SQL-запросов.

Асинхронность

Концепция программирования, когда события происходят независимо от главного потока и способ взаимодействия не является последовательным, а происходит через коллбэки.

Параллельность

Тип вычислений, когда множество операций выполняются параллельно. Современные процессоры способствуют этому, так как имеют множество ядер.

Псевдопараллельность

Метод выполнения нескольких задач почти одновременно, создавая впечатление параллельного исполнения, хотя на самом деле задачи выполняются поочередно, но с высокой скоростью переключения. Этот подход часто используется в системах с одним процессором или ядром, где параллельная обработка невозможна в физическом смысле.

Синхронизация

Механизм, который используется для управления доступом нескольких потоков к общим ресурсам, чтобы предотвратить конфликты данных. Она гарантирует, что только один поток может изменять или читать общий ресурс в определённый момент времени, таким образом предотвращая такие проблемы, как гонки данных и некорректное обновление состояния.

Потокобезопасность

Thread-safe (потокобезопасность) означает, что код или объект может корректно работать в многопоточной среде, где несколько потоков выполняют его одновременно, без возникновения ошибок, связанных с одновременным доступом к общим данным.

Шифрование

Процесс преобразования данных в зашифрованный формат, чтобы сделать их нечитабельными для посторонних лиц. Основная цель шифрования — защитить конфиденциальную информацию при передаче или хранении.

Симметричное шифрование

Использует один и тот же ключ для шифрования и дешифрования. Быстрое и эффективно для больших объёмов данных, но требует безопасного обмена ключами. Примеры: AES, DES.

Асимметричное шифрование

Использует пару ключей — открытый (для шифрования) и закрытый (для дешифрования). Открытый ключ можно делиться, а закрытый хранится в секрете. Это более безопасно, но медленнее, чем симметричное шифрование. Примеры: RSA, ECC.

Хеширование

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

• Детерминированность: Один и тот же вход всегда дает один и тот же хеш.

• Производительность: Быстрая обработка входных данных.

• Равномерность: Разные входные данные должны давать разные хеши (минимизация коллизий).

• Необратимость: По хешу не должно быть возможно восстановить исходные данные.

SHA-256

SHA-256 (Secure Hash Algorithm 256-bit) — это криптографическая хеш-функция, которая генерирует хеш фиксированной длины (256 бит или 64 шестнадцатеричных символа) из произвольного объема входных данных.

import java.security.MessageDigest

fun sha256(input: String): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hashBytes = digest.digest(input.toByteArray())
    return hashBytes.joinToString("") { String.format("%02x", it) }
}

fun main() {
    val input = "Hello, World!"
    val hash = sha256(input)
    println("SHA-256 Hash: $hash")
}
TCP

TCP (Transmission Control Protocol) — протокол транспортного уровня, который обеспечивает надежную передачу данных в сетях. Он гарантирует, что данные будут доставлены получателю в правильном порядке и без ошибок, используя такие механизмы, как контроль потока, управление перегрузкой, и повторная передача потерянных пакетов. TCP устанавливает соединение между отправителем и получателем с помощью трехэтапного рукопожатия (three-way handshake), что делает передачу данных более устойчивой и надежной.

UDP

UDP (User Datagram Protocol) — протокол транспортного уровня, который обеспечивает быструю, но ненадежную передачу данных в сетях. UDP не устанавливает соединение перед передачей данных и не гарантирует доставку или порядок получения пакетов, что делает его легким и быстрым по сравнению с TCP. Он используется в случаях, когда важна скорость передачи данных, а не их надежность.

Cookies

Это небольшие файлы, которые веб-сайты сохраняют на устройстве пользователя. Они содержат данные, такие как настройки сайта или информацию о сессии, и используются для сохранения состояния между визитами, аутентификации и персонализации контента. Cookies помогают веб-сайтам «запоминать» пользователя при повторных посещениях.

User-Agent

Это строка, которую веб-браузер или другое приложение отправляет на сервер при запросе веб-страницы. Она содержит информацию о браузере, операционной системе и устройстве пользователя, что позволяет серверу адаптировать содержимое под конкретное устройство или браузер.

Вопросы на собесе (11)
  • Хеширование (1)
    1. Что такое хеширование?

      Преобразование данных произвольной длины в фиксированное значение (хеш) с помощью хеш-функции. Используется для обеспечения целостности данных и в безопасности, например, для хранения паролей.

  • Шифрование (4)
    1. Какие существуют типы шифрования?

      Симметричное шифрование: использует один и тот же ключ для шифрования и дешифрования данных (например AES).

      Асимметричное шифрование: использует пару ключей — открытый для шифрования и закрытый для дешифрования (например RSA).

    1. Где используется хеширование?

      Безопасность (хранение паролей).

      Структуры данных (хеш-таблицы).

      Проверка целостности данных (контрольные суммы).

      Криптография (цифровые подписи, блокчейн).

    1. Разница между хешированием и шифрованием?

      Хеширование необратимо и используется для проверки целостности данных, тогда как шифрование обратимо и предназначено для защиты конфиденциальности данных. Хеши имеют фиксированную длину, а зашифрованные данные могут быть переменной длины.

    1. Можно ли расхешировать объект?

      Нет. Хеш-функции являются необратимыми, что означает, что по хешу невозможно восстановить исходные данные.

  • Цифровая подпись (1)
    1. Что такое цифровая подпись?

      Цифровая подпись подтверждает подлинность и целостность сообщения, создавая ее с помощью закрытого ключа отправителя и проверяя с открытым ключом.

  • Асинхронность и параллельность (2)
    1. В чем разница между асинхронностью и параллельностью в потоках?

      Асинхронность — это выполнение задач, которые могут приостанавливаться для выполнения других задач без блокировки основного потока, что позволяет эффективно использовать ресурсы.

      Параллельность — это одновременное выполнение нескольких задач на разных потоках или процессорах, что требует больше вычислительных ресурсов, но ускоряет выполнение.

    1. Есть вагоны от 3 поездов A, B и C: A1, A2, B1, B2, C1, C2. Мы решили по одному туннелю асинхронно пустить вагоны от этих поездов. В каком порядке они приедут, какая закономерность будет соблюдаться?

      Сохранится последовательность вагонов в рамках одного поезда.

  • Другие (3)
    1. Что такое куки?

      Это небольшие файлы с данными, которые веб-сайты сохраняют на устройстве пользователя для хранения информации, например, о сессии или настройках.

    1. Что такое User-Agent?

      Это строка с информацией о браузере и устройстве, которую приложение отправляет серверу для адаптации содержимого под пользователя.

    1. Различие между TCP и UDP?

      TCP — надежный протокол с установлением соединения, гарантирующий доставку и порядок передачи данных, но более медленный из-за проверок и подтверждений. UDP — быстрый и ненадежный протокол без установления соединения, не гарантирующий порядок доставки, но подходящий для приложений, где важна скорость.