🔢 Дані: bit, byte, binary, signed/unsigned
[ ДАНІ В КОМП'ЮТЕРІ ]
|
|-- bit -> 0 або 1
|-- byte -> 8 bit
|
|-- binary number -> запис числа у системі 0/1
| приклад: 10110₂ = 16 + 4 + 2 = 22₁₀
|
|-- unsigned byte -> 0..255
|-- signed byte -> -128..127
🔬 Науково: n бітів дають 2^n різних комбінацій. Якщо число беззнакове, усі комбінації йдуть на невід'ємні значення. Якщо зі знаком, частина діапазону відведена під від'ємні.
🏠 Приклад: 8 бітів: 2^8 = 256. Unsigned: 00000000=0, 11111111=255. Signed: 01111111=127, 10000000=-128, 11111111=-1.
🧩 Як не плутати signed і unsigned
[ 8 однакових бітів: 11111111 ]
|
|-- якщо тип unsigned -> усі біти є числом
| 128+64+32+16+8+4+2+1 = 255
|
|-- якщо тип signed -> перший біт зліва є знаком
1....... означає "мінус", тому 11111111 = -1
Науково: біти самі не мають “плюса” чи “мінуса”. Значення задає тип даних у програмі. Той самий байт можна прочитати як 255 або як -1, якщо програма дивиться на нього різними “окулярами”.
Аналогія: запис 01.02 може бути датою “1 лютого” або часом “1 хвилина 2 секунди”. Символи ті самі, контекст інший. Так само 11111111 залежить від signed/unsigned.
🔁 Two's complement: чому -10 = 11110110
+10 = 00001010
крок 1: інверсія бітів -> 11110101
крок 2: додати 1 справа -> 11110110
перевірка:
00001010
+ 11110110
-----------
1 00000000 <- дев'ятий біт не влазить, лишається 00000000
Чому +1 додається справа? Бо це звичайне число 1, найменший розряд. Як у десятковій системі 153 + 1 додає одиницю під останню цифру, так у binary одиниця заходить справа і переноситься лівіше, якщо зустрічає 1+1=10.
🌍 Реальний приклад: ліміт 32-bit integer став помітним, коли лічильник переглядів YouTube для “Gangnam Style” перетнув 2 147 483 647. Це максимум для signed 32-bit integer:
2^31 - 1.
Було:
signed 32-bit integer
діапазон: -2 147 483 648 .. 2 147 483 647
для переглядів фактично корисна верхня межа: 2 147 483 647
Стало:
signed 64-bit integer / 64-bit counter
верхня межа: 2^63 - 1
= 9 223 372 036 854 775 807
Що саме змінили: не “магічну формулу”, а тип/розмір поля, у якому зберігався лічильник: з 32 бітів пам'яті для числа на 64 біти. Тобто для одного значення стало доступно вдвічі більше бітів, але кількість можливих значень виросла не вдвічі, а експоненційно: з приблизно 2,1 млрд до приблизно 9,22 квінтильйона.
Чому signed, якщо перегляди не бувають від'ємними? У багатьох мовах, базах даних і API стандартний “великий integer” часто є signed int64 / BIGINT. Для лічильника можна було б теоретично взяти unsigned 64-bit, тоді максимум був би 2^64 - 1 = 18 446 744 073 709 551 615, але публічно YouTube згадував саме 64-bit integer із межею 2^63/2^63 - 1, тобто по суті signed 64-bit.
Альтернатива ще більша: для зовсім необмежених чисел у деяких системах використовують arbitrary precision / BigInt, але для лічильника переглядів 64-bit достатньо з величезним запасом.
⚠️ Обережно з легендами: історію про “Nuclear Gandhi” часто розповідають як приклад unsigned overflow 1 - 2 -> 255, але для оригінальної Civilization це радше відома ігрова легенда, а не надійно підтверджений факт. Для іспиту важлива сама механіка: якщо unsigned-лічильник не має мінусів, віднімання нижче нуля може “перекинути” значення до максимуму.
⚠️ Пастка: 101₂ не читаємо як “сто один”. Нижній індекс показує систему числення. 1 byte = 8 bits, а не 10.
🧪 Міні-дріл: Переведи 33₁₀: 32 входить, лишається 1, отже 100001₂.
🧾 Програма: compiler, interpreter, linker
[ КОД ]
|
|-- compiler -> перекладає програму в машинний/об'єктний код
|-- interpreter -> виконує поступово, без окремого exe
|-- linker -> збирає об'єктні модулі в один виконуваний файл
|-- lexer -> ріже текст на токени
🔬 Науково: Компіляція, інтерпретація, компонування і лексичний аналіз - це різні етапи обробки програми.
🏠 Приклад: C/C++: .c -> compiler -> .o -> linker -> exe. Python: інтерпретатор читає й виконує інструкції.
⚠️ Пастка: Якщо в умові “приймає об'єктні модулі і збирає виконуваний модуль” - це linker/компонувальник, не компілятор.
🧪 Міні-дріл: Маркер для linker: багато object modules -> один executable.
🧱 ООП: class, object, encapsulation, inheritance, polymorphism
[ OOP ]
|
|-- class -> креслення / тип
|-- object -> конкретний екземпляр
|-- encapsulation -> дані + методи сховані за інтерфейсом
|-- inheritance -> клас-нащадок отримує властивості базового
|-- polymorphism -> один інтерфейс, різна поведінка
🔬 Науково: ООП моделює систему як набір об'єктів зі станом і поведінкою. Наслідування повторно використовує спільне, поліморфізм дозволяє підміняти реалізації.
🏠 Приклад: Кнопка гучності: інтерфейс один - натиснути volume up. Телефон, ноутбук і плеєр реагують по-своєму. Це поліморфізм.
⚠️ Пастка: Class не є object. Наслідування не те саме, що композиція: “is-a” проти “has-a”.
🧪 Міні-дріл: Dog is Animal -> inheritance. Car has Engine -> composition.
📈 Алгоритми: масив, стек, черга, дерево, складність
[ DATA STRUCTURES ]
|
|-- array -> індексований доступ
|-- stack -> LIFO: останній зайшов, перший вийшов
|-- queue -> FIFO: перший зайшов, перший вийшов
|-- tree -> ієрархія
|-- hash -> швидкий пошук за ключем
[ COMPLEXITY ]
O(1) < O(log n) < O(n) < O(n log n) < O(n^2)
🔬 Науково: Структура даних визначає, які операції дешеві або дорогі. Складність описує, як росте час/пам'ять при збільшенні n.
🏠 Приклад: Черга в банку - FIFO. Стос тарілок - LIFO. Телефонна книга навпіл - binary search O(log n).
⚠️ Пастка: Binary search працює тільки на відсортованих даних. Binary system і binary search - різні поняття.
🧪 Міні-дріл: Якщо масив не sorted, binary search не гарантує правильний результат.
🗄️ SQL і моделі даних
[ DATA MODEL ]
conceptual -> сутності бізнесу
logical -> таблиці, ключі, зв'язки
physical -> як зберігається в СУБД
[ SQL ]
SELECT -> читати
WHERE -> фільтр рядків
GROUP BY -> групування
HAVING -> фільтр груп
JOIN -> об'єднання таблиць
GRANT -> права доступу
🔬 Науково: Модель даних проходить шлях від сенсу предметної області до фізичного зберігання. SQL розділяє читання, зміну даних і керування доступом.
🏠 Приклад: Студент-Курс-Оплата: conceptual. Таблиці students/courses/payments з PK/FK: logical. Індекси, типи, сторінки: physical.
⚠️ Пастка: Нормалізація стосується логічної моделі таблиць, не ER-діаграми як картинки. GRANT - права, не вибірка.
🧪 Міні-дріл: WHERE до GROUP BY; HAVING після GROUP BY.
🌐 Мережі: packet, switch, router, DNS, DHCP, TCP/UDP
[ NETWORK ]
user -> browser -> DNS -> IP
-> TCP/UDP -> packets -> router -> server
[ DEVICES ]
switch -> всередині локальної мережі, MAC
router -> між мережами, IP
[ PROTOCOLS ]
DNS -> name to IP
DHCP -> видає IP-налаштування
TCP -> порядок і доставка
UDP -> швидко, без гарантій
🔬 Науково: Мережа ділить дані на пакети, доставляє їх через пристрої і протоколи. Рівні моделі розділяють відповідальність.
🏠 Приклад: DNS - телефонна книга. DHCP - адміністратор офісу, що видає адресу. TCP - доставка з підписом. UDP - швидке повідомлення без гарантії.
⚠️ Пастка: Switch не замінює router. TCP не “швидший UDP”; TCP надійніший, але має накладні витрати.
🧪 Міні-дріл: HTTP працює поверх TCP; IP відповідає за адресацію між мережами.
🔐 Безпека: hash, encryption, signature, symmetric/asymmetric
[ CRYPTO ]
hash -> відбиток, не розшифровується
encryption -> можна розшифрувати ключем
signature -> підтверджує автора і цілісність
[ KEYS ]
symmetric -> один спільний ключ
asymmetric -> public/private key pair
🔬 Науково: Геш-функція стискає повідомлення в фіксований відбиток. Шифрування приховує зміст. Підпис доводить, що дані не змінені й походять від власника ключа.
🏠 Приклад: Пароль не зберігають відкритим: зберігають hash. AES/Rijndael шифрує. Купина - українська геш-функція.
⚠️ Пастка: Hash не можна “розшифрувати”. AES/Rijndael - шифр, не геш-функція.
🧪 Міні-дріл: Якщо питають криптографічну геш-функцію серед ДСТУ - шукай Купина.
🤖 ML: supervised, unsupervised, classification, SVM
[ MACHINE LEARNING ]
supervised -> є правильні відповіді в train data
unsupervised -> шукаємо структуру без labels
classification -> клас
regression -> число
clustering -> групи
SVM -> шукає гіперплощину з найбільшим margin
🔬 Науково: Модель вчиться знаходити закономірність у даних. У класифікації відповідь - категорія, у регресії - числове значення.
🏠 Приклад: Email spam/not spam - classification. Ціна квартири - regression. Групи клієнтів без labels - clustering.
⚠️ Пастка: SVM не зменшує розмірність; він розділяє класи гіперплощиною, максимізуючи margin.
🧪 Міні-дріл: PCA зменшує розмірність; SVM класифікує.