unknown hace 3 días
padre
commit
d12532dbe4

+ 10 - 10
.obsidian/workspace.json

@@ -13,12 +13,12 @@
             "state": {
               "type": "markdown",
               "state": {
-                "file": "ROTEK/bt67xx/common.md",
+                "file": "hardcore web development/11. SQL/Типы данных.md",
                 "mode": "source",
                 "source": false
               },
               "icon": "lucide-file",
-              "title": "common"
+              "title": "Типы данных"
             }
           }
         ]
@@ -92,7 +92,7 @@
       }
     ],
     "direction": "horizontal",
-    "width": 200
+    "width": 227.5
   },
   "right": {
     "id": "cf92ccf43e96a53d",
@@ -153,8 +153,14 @@
   },
   "active": "e6bea62ed1e6a115",
   "lastOpenFiles": [
-    "ROTEK/BT_6714.md",
+    "hardcore web development/11. SQL/SQL настройка.md",
+    "hardcore web development/11. SQL/Комментарии.md",
+    "c/syscalls.md",
+    "c/GDB.md",
+    "c/c common.md",
     "ASM/asm_x64.md",
+    "ROTEK/bt67xx/common.md",
+    "ROTEK/BT_6714.md",
     "ROTEK/allwinner 069 070.md",
     "Greenstar/ethernet stm32.md",
     "todo/Счета.md",
@@ -167,7 +173,6 @@
     "todo/Задачи по направлениям.md",
     "ROTEK/Artery testing.md",
     "ROTEK/Arbiter, artery.md",
-    "ROTEK/bt67xx/common.md",
     "docs/Galleon.pdf",
     "docs/~$alleon.doc",
     "docs/Galleon.doc",
@@ -178,7 +183,6 @@
     "hardcore web development/11. SQL/Создание таблиц.md",
     "todo/common.md",
     "Кодинг.md",
-    "hardcore web development/11. SQL/Комментарии.md",
     "ASM/tools.md",
     "Untitled.md",
     "hardcore web development/11. SQL/quiz_1.sql",
@@ -187,9 +191,6 @@
     "English/img/33-3.jpg",
     "English/img/33-2.jpg",
     "English/img/33-1.jpg",
-    "todo/Разное.md",
-    "English/Theory.md",
-    "proGit.md",
     "hardcore web development/11. SQL/room_1.sql",
     "hardcore web development/11. SQL/bird_1.sql",
     "English/img/32-5.jpg",
@@ -197,7 +198,6 @@
     "English/img/32-3.jpg",
     "English/img/32-2.jpg",
     "English/img/32-1.jpg",
-    "linux/Tmux.md",
     "ASM",
     "STM32/Makefile_template.txt"
   ]

+ 28 - 1
ASM/asm_x64.md

@@ -216,6 +216,33 @@ $ readelf -s main.exe
 .type _start, @function // эта метка ссылается на адрес хранения команды
 ```
 
+~={yellow}Директивы объявления символов=~
+
+```bash
+# Адрес начала строки указан с использованием абсолютной адресации
+str:
+	.ascii "test\n"
+	leaq str %rsi
+
+# Если мы знаем адрес начала строки, то можно создать символ так
+	.equ str, 0x402000
+
+# Можно сделать и так
+	.set str, 0x402000
+
+# Или так. Это директива, а не команда.
+	str = 0x402000
+
+# Запрещает повторное определение символа
+	.equiv str, 0x402000
+```
+
+~={yellow}Директива .rodata=~
+
+Данные под этой директивой не могут изменяться в процессе выполнения программы. Они только для чтения.
+```bash
+	.section .rodata
+```
 
 
-~={green}остановился на начале 22=~
+~={green}остановился на начале 24=~

+ 25 - 4
c/c common.md

@@ -1,8 +1,29 @@
 <h6>Стадии компиляции</h6>
-- препроцессор
-- компилятор
-- ассемблер
-- компоновщик
+- Препроцессорная (предварительная) обработка или препроцессор. На этом этапе выполняются директивы препроцессора. При этом директивы удаляются.
+```bash
+# Выполнить только препроцессорную обработку
+$ gcc main.c -E main_.c
+```
+
+- Преобразование исходного кода на языке с в ассемблерный код или. 
+```bash
+# Это команда выполняет и препроцессорную обработку
+$ gcc -S main_.c -o main.s
+
+# Чтобы сократить ассемблерный код можно убрать отладочные директивы
+$ gcc -S main_.c -o main.s -fno-asynchronous-unwind-table
+```
+
+- Преобразование файла с ассемблерным кодом в объектный файл - ассемблирование. На выходе получится бинарный файл. В линукс это ELF - executable and linkable format, а в windows это PE - portable executable.
+```bash
+$ gcc -c main.s -o main.o
+```
+
+- Компоновка одного или нескольких объектных файлов в исполняемый файл. Это по сути налаживание связей.
+```bash
+$ gcc main.o -o main.exe
+```
+
 ```bash
 $ cc main.c # создаст исполняемый файл main.out
 $ cc -v main.c # тоже, но с выводом информации

+ 2 - 1
c/syscalls.md

@@ -1,4 +1,5 @@
 <h6>Процессы, потоки</h6>
 `fork()` - для родительского процесса вернет PID дочернего процесса,
 а для дочернего вернет 0.
-`wait()` - останавливает работу родителя пока не изменится состояние одного из его потомков. Возвращаяет PID процессе, состояние которого изменилось.
+
+`wait()` - останавливает работу родителя пока не изменится состояние одного из его потомков. Возвращает PID процесса, состояние которого изменилось.

+ 19 - 0
hardcore web development/11. SQL/quiz_1.sql

@@ -99,5 +99,24 @@ drop table if exists something;
 -- Удалить таблицу.
 drop table if exists something cascade;
 
+-- Создание таблицы из данных другой таблицы
+create temp table crows as
+select * from species where genus_id=(
+	select genus_id from genus where genus_name='Ворон');
+
+-- Создание таблицы из данных другой таблицы
+select * into crows from species s where s.genus_id=(
+	select genus_id from genus g where g.genus_name='Ворон'
+);
+
+-- Обновление данных в таблице
+create table smth (a int);
+
+update smth set a = a * 2;
+
+-- -----------------------------------------------------------------
+-- 11.26 Работа со строками
 
+select species_name from species 
+order by length(species_name) desc, species_name limit 5;
 

+ 38 - 0
hardcore web development/11. SQL/Типы данных.md

@@ -79,6 +79,44 @@ SELECT pg_column_size(333::numeric(3)); -- 8
 
 Ну и помимо оптимизации хранения мы также получаем оптимизацию производительности, потому что меньше данных нам надо считывать с диска и так далее. Считать 260 мегабайт значительно быстрее, чем 33 гигабайта.
 
+~={yellow}Строковые типы данных=~
+
+- **varchar** - строковый тип данных с указанием максимальной длины. При сохранении проверяет, что строка не вышла за заданный диапазон длины.
+- **text** - без указания максимальной длины. Нет проверки выхода за диапазон.
+- **char** - строка фиксированной длины. Если данные меньше, то строка будет дополнена пробелами.
+
+```sql
+-- Функция форматирования строк
+select format('замечательный автор %s!', 'Пушкин');
+
+-- Можно вырезать подстроки
+select subsctring('привет' from 1 for 5); -- приве
+select subsctring('привет' from 1); -- привет
+
+-- Можно заменять подстроку на подстроку
+select replace('Саня любит пиво', 'пиво', 'бегать и подтягиваться');
+
+-- Проверка входа подстроки в строку. Функция вернет позицию или 0
+select position('Саня' in 'Саня любит бегать'); -- 1
+
+-- Функции пребразования регистров
+select upper(name) from author;
+select lower(name) from author;
+
+-- Строку можно привести к числу (целому).
+select '123'::int;
+select '123.123'::int; -- ошибка
+
+-- или cast
+select cast('123' as int);
+select cast('hello' as int); -- ошибка
+
+-- Можно разбить строку по символу и взять нужный элемент
+select split_part('2024-06-24', '-', 1); -- 2024
+select split_part('2024-06-24', '-', 2); -- 06
+select split_part('2024-06-24', '-', 3); -- 24
+```
+
 ~={yellow}Перечисления=~
 ```sql
 create type day_of_week as enum (