Forwarded from C# Short Posts 🔞
Мы с тобой уже довольно сильно углубились в тему деревьев, главное - не забрести в дремучий лес (ба-дум-тсс🥁) . Не переживай, скоро мы выберемся отсюда, а пока что:
🌳 Как B-дерево держит себя ровным и какая у него максимальная высота
⚖️ Balanced — это про что
Если помнишь, одно из толкований буквы B — Balanced, то есть их ещё называют сбалансированными деревьями. Эта сбалансированность заключается в том, что все листья лежат на одной глубине, любой путь от корня до листа одинаковой длины. Нет веток разной глубины, в которые можно надолго провалиться, — поэтому любой спуск к данным стоит одинаково🟰
🤩 А как у других?
В двоичных деревьях (AVL, красно-чёрных) после вставки одна ветка может стать длиннее другой, и дерево «чинит» себя поворотом: берёт перекосившую тройку узлов и локально переставляет их — бывший потомок становится родителем, поддеревья перевешиваются, высоты выравниваются. Делает это сама структура, на каждой вставке и удалении. Поворот — это их способ оставаться ровными 🔁
🪨 Как поддерживается баланс (видео-дикпик 📱 )
B-дерево балансируется без поворотов — делением переполненной страницы (split):
1️⃣ лист наполняется ключами, пока не переполнится;
2️⃣ переполнился — делится надвое (split), а пограничный ключ копируется наверх, к родителю, и становится новым разделителем (по нему потом и выбирают, в какую из половин спускаться);
3️⃣ если переполнился сам корень — он тоже делится на два узла, которые становятся внутренними, потому что сверху над ними встаёт НОВЫЙ корень (появляется новый уровень).
Таким образом дерево не удлиняет отдельные ветки, а растёт вверх равномерно. Возникает резонный вопрос:
📏 Сколько вообще может быть уровней?
Жёсткого лимита в Postgres нет, но из-за большого ветвления высота по int растёт еле-еле:
🔹 2 уровня — до ~100 тыс. строк
🔹 3 — до ~30 млн
🔹 4 — до ~8,5 млрд
🔹 5 — до ~2,4 трлн
А выше упирается в потолок физического хранения таблицы. У каждой строки есть физический адрес: номер блока + слот внутри блока. Номер блока 32-битный, значит блоков максимум ~4,3 млрд (2^32), а в один блок 8 KB влезает примерно 291 строка. Перемножаем 4,3 млрд страниц × 291 запись ≈ 1,2 трлн строк, и больше в таблицу не поместится: для новой строки просто не останется свободного адреса📍
Пятиуровневое дерево может вместить до ~2,4 трлн ключей, а строк в таблице будет не больше ~1,2 трлн. Таблица кончится раньше, чем дерево заполнит пятый уровень и запросит шестой. Поэтому индекс по
🔬 Посмотрим на живом примере (дикпик 1)
Растим таблицу с первичным ключом и смотрим высоту через
Рост в 10 000 раз добавил ровно ОДИН уровень. А точечный поиск всё ещё требует единицы чтений: «корень → ветвь → лист → строка». И столько будет как на тысяче строк, так и на десяти миллионах ✨
🎢 Что это даёт по скорости
Сложность поиска по такому дереву - O(log n), потому что поиск = спуск от корня до листа, то есть ровно столько шагов, сколько в дереве уровней (высота). А высота для дерева с ветвлением f и N записями — это примерно log по основанию f от N.
И в этом весь смысл баланса: если бы split не поддерживал все листья на одной глубине, дерево могло бы выродиться в почти линейную цепочку — и поиск стал бы O(n), то есть потребовались бы миллионы чтений, от которых индекс и спасает 🛟
🅰️ Что унести с собой
🔹 Поиск по индексу — O(log n), потому что большое ветвление держит дерево низким, а split гарантирует одинаковую глубину листьев.
🔹 Это гарантия худшего случая, а не «в среднем»: split держит все листья на одной глубине, поэтому длинных веток просто не бывает.
🔹 Точечный поиск по индексу почти «бесплатный» — что на тысяче строк, что на сотне миллионов это несколько уровней дерева.
Команды, чтобы самому замерить высоту на разных размерах, — в 👉 гисте 👈
🧑💻dp 🥁
#бд #postgresql #инженерныештучки #heavywednesday
🌳 Как B-дерево держит себя ровным и какая у него максимальная высота
⚖️ Balanced — это про что
Если помнишь, одно из толкований буквы B — Balanced, то есть их ещё называют сбалансированными деревьями. Эта сбалансированность заключается в том, что все листья лежат на одной глубине, любой путь от корня до листа одинаковой длины. Нет веток разной глубины, в которые можно надолго провалиться, — поэтому любой спуск к данным стоит одинаково
В двоичных деревьях (AVL, красно-чёрных) после вставки одна ветка может стать длиннее другой, и дерево «чинит» себя поворотом: берёт перекосившую тройку узлов и локально переставляет их — бывший потомок становится родителем, поддеревья перевешиваются, высоты выравниваются. Делает это сама структура, на каждой вставке и удалении. Поворот — это их способ оставаться ровными 🔁
B-дерево балансируется без поворотов — делением переполненной страницы (split):
1️⃣ лист наполняется ключами, пока не переполнится;
2️⃣ переполнился — делится надвое (split), а пограничный ключ копируется наверх, к родителю, и становится новым разделителем (по нему потом и выбирают, в какую из половин спускаться);
3️⃣ если переполнился сам корень — он тоже делится на два узла, которые становятся внутренними, потому что сверху над ними встаёт НОВЫЙ корень (появляется новый уровень).
Таким образом дерево не удлиняет отдельные ветки, а растёт вверх равномерно. Возникает резонный вопрос:
📏 Сколько вообще может быть уровней?
Жёсткого лимита в Postgres нет, но из-за большого ветвления высота по int растёт еле-еле:
🔹 2 уровня — до ~100 тыс. строк
🔹 3 — до ~30 млн
🔹 4 — до ~8,5 млрд
🔹 5 — до ~2,4 трлн
А выше упирается в потолок физического хранения таблицы. У каждой строки есть физический адрес: номер блока + слот внутри блока. Номер блока 32-битный, значит блоков максимум ~4,3 млрд (2^32), а в один блок 8 KB влезает примерно 291 строка. Перемножаем 4,3 млрд страниц × 291 запись ≈ 1,2 трлн строк, и больше в таблицу не поместится: для новой строки просто не останется свободного адреса
Пятиуровневое дерево может вместить до ~2,4 трлн ключей, а строк в таблице будет не больше ~1,2 трлн. Таблица кончится раньше, чем дерево заполнит пятый уровень и запросит шестой. Поэтому индекс по
int на практике — это 2–5 уровней, и выше пяти не вырастет: столько строк в одну таблицу физически не положить 🛑🔬 Посмотрим на живом примере (дикпик 1)
Растим таблицу с первичным ключом и смотрим высоту через
bt_metap.Рост в 10 000 раз добавил ровно ОДИН уровень. А точечный поиск всё ещё требует единицы чтений: «корень → ветвь → лист → строка». И столько будет как на тысяче строк, так и на десяти миллионах ✨
Сложность поиска по такому дереву - O(log n), потому что поиск = спуск от корня до листа, то есть ровно столько шагов, сколько в дереве уровней (высота). А высота для дерева с ветвлением f и N записями — это примерно log по основанию f от N.
И в этом весь смысл баланса: если бы split не поддерживал все листья на одной глубине, дерево могло бы выродиться в почти линейную цепочку — и поиск стал бы O(n), то есть потребовались бы миллионы чтений, от которых индекс и спасает 🛟
🅰️ Что унести с собой
🔹 Поиск по индексу — O(log n), потому что большое ветвление держит дерево низким, а split гарантирует одинаковую глубину листьев.
🔹 Это гарантия худшего случая, а не «в среднем»: split держит все листья на одной глубине, поэтому длинных веток просто не бывает.
🔹 Точечный поиск по индексу почти «бесплатный» — что на тысяче строк, что на сотне миллионов это несколько уровней дерева.
Команды, чтобы самому замерить высоту на разных размерах, — в 👉 гисте 👈
🧑💻dp 🥁
#бд #postgresql #инженерныештучки #heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1
Зацени дофаминовый маркетплейс:
👉https://dofamarket.granstel.ru/👈
Он доставит тебе дофамин от покупок без трат: оплаты и курьеров нет, деньги не списываются🤩
Зачем?
В Корее набирают популярность сайты для «фейкового» шоппинга, пишет The KoreaTimes.
На сайтах по доставке одежды или еды вы добавляете товары в корзину, вбиваете свой адрес и делаете «заказ». Курьер якобы выезжает по вашему адресу, его «передвижения» можно отслеживать на карте. По факту же вам ничего не везут, и деньги с карты тоже не списывают.
Говорят, таким образом можно получить заряд быстрого дофамина и, самое главное, сэкономить деньги💰
Мне понравилась идея, ведь в целом это довольно легко реализовать, и руководствуясь своей мыслью о пет-проектах, решил воплотить её ✨
👉https://dofamarket.granstel.ru/👈
Он доставит тебе дофамин от покупок без трат: оплаты и курьеров нет, деньги не списываются
Зачем?
В Корее набирают популярность сайты для «фейкового» шоппинга, пишет The KoreaTimes.
На сайтах по доставке одежды или еды вы добавляете товары в корзину, вбиваете свой адрес и делаете «заказ». Курьер якобы выезжает по вашему адресу, его «передвижения» можно отслеживать на карте. По факту же вам ничего не везут, и деньги с карты тоже не списывают.
Говорят, таким образом можно получить заряд быстрого дофамина и, самое главное, сэкономить деньги
Мне понравилась идея, ведь в целом это довольно легко реализовать, и руководствуясь своей мыслью о пет-проектах, решил воплотить её ✨
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Этот маркетплейс 👆 был написан агентом, по сути, за пару часов, и был готов к публикации ещё в понедельник, а я опубликовал его только в четверг.
Почему?
Потому что надо было повозиться с хостингом, доменными именами, добавление секретов для автоматизированной публикации, и ещё всякие свои дела делать. Теперь агент сам пишет код и сам может публиковать, но на мне: указания, что надо сделать, а самое сложное - привлечь посетителей. Да, проект на проде, это уже круто (не каждый из них может по-настоящему сказать "Hello, world!"), но без пользователей от него теперь мало толку. Агент может автоматически настроить рекламу и делать рассылки, но для этого надо ещё всё настроить РУКАМИ🤯
Так что это правда👇 мы научились быстрее генерировать код, но ещё учимся быстрее поставлять его без потери качества
Почему?
Потому что надо было повозиться с хостингом, доменными именами, добавление секретов для автоматизированной публикации, и ещё всякие свои дела делать. Теперь агент сам пишет код и сам может публиковать, но на мне: указания, что надо сделать, а самое сложное - привлечь посетителей. Да, проект на проде, это уже круто (не каждый из них может по-настоящему сказать "Hello, world!"), но без пользователей от него теперь мало толку. Агент может автоматически настроить рекламу и делать рассылки, но для этого надо ещё всё настроить РУКАМИ🤯
Так что это правда👇 мы научились быстрее генерировать код, но ещё учимся быстрее поставлять его без потери качества
Forwarded from Нейросети на практике
AI, похоже, реально ускоряет разработчиков. Но не так, как обычно продают в презентациях.
В новой статье от NBER "Writing Code vs. Shipping Code" исследователи посмотрели на 100 000+ GitHub-разработчиков и сравнили разные поколения AI coding tools: автокомплит, интерактивных агентов и автономных агентов.
Да, судя по тексту, AI резко увеличивает количество написанного кода. Автокомплит даёт примерно +40% к числу коммитов. Вместе с интерактивными агентами совокупный прирост доходит до +140%, а с автономными — до +180%. В отдельных местах цифры вообще безумные: sync-агенты дают +741% строк кода.
Но больше кода ≠ больше продукта.
Эти +741% строк превращаются всего в +65% pull requests и примерно в +20% релизов. А общий эффект +180% по commits сжимается до +50% по проектам и до +30% по настоящим релизам.
Почему? Потому что bottleneck переехал.
Раньше узким местом было написание кода. Теперь AI это резко удешевил. Но остались другие этапы: понять, что вообще строить (дискавери), проверить, интегрировать, отревьюить, зарелизить, довести до нужного качества, найти пользователей.
И вот эти этапы всё ещё человеческие, медленные и дорогие.
Самое забавное: авторы проверили 3 крупных marketplace приложений и увидели рост количества новых приложений, но не увидели роста их суммарного использования. То есть приложений стало больше, а внимания пользователей — нет.
По сути, AI сделал производство кода дешевле. Но не сделал дешевле доверие, дистрибуцию этого кода, продуктовый вкус, поддержку и market fit. Так что “AI пишет код” — правда. А вот довезти этот код до пользователей — всё ещё отдельная боль.
В новой статье от NBER "Writing Code vs. Shipping Code" исследователи посмотрели на 100 000+ GitHub-разработчиков и сравнили разные поколения AI coding tools: автокомплит, интерактивных агентов и автономных агентов.
Да, судя по тексту, AI резко увеличивает количество написанного кода. Автокомплит даёт примерно +40% к числу коммитов. Вместе с интерактивными агентами совокупный прирост доходит до +140%, а с автономными — до +180%. В отдельных местах цифры вообще безумные: sync-агенты дают +741% строк кода.
Но больше кода ≠ больше продукта.
Эти +741% строк превращаются всего в +65% pull requests и примерно в +20% релизов. А общий эффект +180% по commits сжимается до +50% по проектам и до +30% по настоящим релизам.
Почему? Потому что bottleneck переехал.
Раньше узким местом было написание кода. Теперь AI это резко удешевил. Но остались другие этапы: понять, что вообще строить (дискавери), проверить, интегрировать, отревьюить, зарелизить, довести до нужного качества, найти пользователей.
И вот эти этапы всё ещё человеческие, медленные и дорогие.
Самое забавное: авторы проверили 3 крупных marketplace приложений и увидели рост количества новых приложений, но не увидели роста их суммарного использования. То есть приложений стало больше, а внимания пользователей — нет.
По сути, AI сделал производство кода дешевле. Но не сделал дешевле доверие, дистрибуцию этого кода, продуктовый вкус, поддержку и market fit. Так что “AI пишет код” — правда. А вот довезти этот код до пользователей — всё ещё отдельная боль.
❤4🔥2
Добавил в #занимательныеистории страшилку, атмосферные звуки и внезапные повороты прилагаются👍
🔥2😁1
Это я перекатился из Додо 🌯 в Юрент 🛴
Сейчас на работе уже⚡
#офисныеистории теперь будут про новую компанию, так что
🟪 🟪 🟪 🟪 🟪
Если интересно, как я менял работу, ставь🤟 , расскажу👇
Сейчас на работе уже
#офисныеистории теперь будут про новую компанию, так что
Если интересно, как я менял работу, ставь
Please open Telegram to view this post
VIEW IN TELEGRAM
Записать всё ✍️
или
Записывай свои рабочие достижения✍️
Поиск работы обычно начинается с резюме. Говорят, сейчас резюме проверяется ИИшницами, а значит и составлять его вроде как надо ИИшницей. Но, в любом случае, чтобы было что написать, нужно вспомнить какие-нибудь интересные задачи, которые тебе доводилось выполнять.
По своему опыту скажу - это не так-то просто. Обычные задачи разработчика у меня как-то не отложились в голове (хотя я делал много прикольных вещей), и было намного проще вспомнить достижения по дополнительным активностям (realtime board, девфорум, музыкальная комната), нежели по основным. Чтобы заполнить своё резюме, мне пришлось восстанавливать историю из своих личных заметок, где я разбирался со сложными задачами🤯
Поэтому рекомендую в течение работы (даже если не планируешь её менять) записывать достижения и результаты по задачкам. Как минимум, это может стать подспорьем на регулярном ревью (после которого обычно пересматривают ЗП), и ты сможешь доказать лиду (и себе), что ты молодец✨
Ну и составить резюме, при необходимости, будет намного проще.
Только не забывай про метрики📈
Просто "Сделал то-то и то-то" могут понять люди внутри твоей компании, потому что они в контексте (и даже им конкретные внутренние метрики интереснее). Снаружи это ничего не значит.
В идеале, представить свои успехи в деньгах: сэкономленных или заработанных компанией, конечно же. Если сложно обосновать прямое влияние, попробуй найти косвенное: экономия на инфраструктуре (стоимость ресурсов) или времени (TTM за счёт ускорения пайплайна), а время - деньги, как говорится🪙
#поиск_работы
или
Записывай свои рабочие достижения
Поиск работы обычно начинается с резюме. Говорят, сейчас резюме проверяется ИИшницами, а значит и составлять его вроде как надо ИИшницей. Но, в любом случае, чтобы было что написать, нужно вспомнить какие-нибудь интересные задачи, которые тебе доводилось выполнять.
По своему опыту скажу - это не так-то просто. Обычные задачи разработчика у меня как-то не отложились в голове (хотя я делал много прикольных вещей), и было намного проще вспомнить достижения по дополнительным активностям (realtime board, девфорум, музыкальная комната), нежели по основным. Чтобы заполнить своё резюме, мне пришлось восстанавливать историю из своих личных заметок, где я разбирался со сложными задачами🤯
Поэтому рекомендую в течение работы (даже если не планируешь её менять) записывать достижения и результаты по задачкам. Как минимум, это может стать подспорьем на регулярном ревью (после которого обычно пересматривают ЗП), и ты сможешь доказать лиду (и себе), что ты молодец
Ну и составить резюме, при необходимости, будет намного проще.
Только не забывай про метрики
Просто "Сделал то-то и то-то" могут понять люди внутри твоей компании, потому что они в контексте (и даже им конкретные внутренние метрики интереснее). Снаружи это ничего не значит.
В идеале, представить свои успехи в деньгах: сэкономленных или заработанных компанией, конечно же. Если сложно обосновать прямое влияние, попробуй найти косвенное: экономия на инфраструктуре (стоимость ресурсов) или времени (TTM за счёт ускорения пайплайна), а время - деньги, как говорится
#поиск_работы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥2💯2
Forwarded from C# Short Posts 🔞
В прошлых постах мы довольно тщательно разобрали структуру индексов, и нам осталось разобраться, откуда происходит чтение как данных, так и индексов: из диска, или из оперативки, или «зависит»?
📚 Несколько кэшей
Представь, что ищешь нужную книгу: она может быть на твоём рабочем столе — прям под рукой, очень близко; или на полке рядом — на шаг дальше; или вообще в книжном шкафу в другой комнате — туда топать дольше всего. Память под страницы у СУБД устроена такими же уровнями, и за страницей она идёт по ним сверху вниз:
1️⃣ shared_buffers — рабочий стол. Собственный кэш СУБД, она сама им рулит. В Postgres по умолчанию всего 128 MB.
2️⃣ кэш ОС (page cache) — полка рядом. Операционка сама держит в RAM файлы, которые недавно читала; СУБД им не управляет, но пользуется.
3️⃣ диск — шкаф в другой комнате.
Глянула 1️⃣ shared_buffers → нет → 2️⃣ спросила ОС, та смотрит, что есть в RAM → нет → идем на 3️⃣ диск Найденную страницу обычно кладём обратно в shared_buffers, чтобы следующий запрос взял её уже оттуда.
🧩 Данные и индексы — в одном кэше
Тут есть контр-интуитивный момент: и куча с данными (heap — страницы, где лежат сами строки таблицы), и индексы (страницы с элементами дерева) лежат в одном shared_buffers, конкурируя за место. Отдельной «памяти под индексы» нет 🤯
🌳 Почему индекс будто всегда в RAM
Верхушка B-дерева (корень и внутренние узлы) — набор страниц, который дёргает каждый поиск. Из-за частых переходов по дереву верхние уровни почти всегда в кэше, так как с них начинается почти любой поиск, поэтому дочитывать чаще приходится только лист и/или саму страницу кучи.
🔬 Пощупаем (дикпик 1)
EXPLAIN (ANALYZE, BUFFERS): секция BUFFERS показывает, сколько страниц нашли в shared_buffers (hit), а сколько пришлось дочитывать (read).
Холодный поиск по PK на таблице в 1 млн строк, у меня в эксперименте: shared read=4 — три страницы индекса плюс одна кучи, всё мимо кэша.
Повтор: shared hit=4 — всё в shared_buffers диск не трогали, время заметно меньше.
Ищем другой далёкий id: hit=1 read=3 — корень уже в кэше с прошлого раза, поэтому он был переиспользован.
⚠️ Тонкость: read ≠ обязательно диск
«read» здесь значит лишь «не было в shared_buffers». Но страница могла прилететь мгновенно от ОС, а не из диска.
Отсюда неочевидное: два запроса с одинаковым read могут идти с разной скоростью — в одном случае страница пришла с диска, в другом уже лежала в кэше ОС.
🧑💻 Как это использовать в работе
1. Первый запрос после рестарта PostgreSQL (или сервера) обычно медленнее: кэш пустой, он наполняется заново. Это так называемый «холодный старт».
2. Index Only Scan (когда всё нужное есть в самом индексе и в кучу за строкой идти не надо) экономит не только чтения, но и кэш: чем меньше heap-страниц тащим в shared_buffers — тем больше места остаётся другим.
Команды из дикпика — в 👉 гисте 👈
Дальше разберём, куда девается оперативка, когда её внезапно «съели» под 99%, и как это диагностировать 👉
🧑💻dp 🥁
#бд #postgresql #инженерныештучки #heavywednesday
📚 Несколько кэшей
Представь, что ищешь нужную книгу: она может быть на твоём рабочем столе — прям под рукой, очень близко; или на полке рядом — на шаг дальше; или вообще в книжном шкафу в другой комнате — туда топать дольше всего. Память под страницы у СУБД устроена такими же уровнями, и за страницей она идёт по ним сверху вниз:
1️⃣ shared_buffers — рабочий стол. Собственный кэш СУБД, она сама им рулит. В Postgres по умолчанию всего 128 MB.
2️⃣ кэш ОС (page cache) — полка рядом. Операционка сама держит в RAM файлы, которые недавно читала; СУБД им не управляет, но пользуется.
3️⃣ диск — шкаф в другой комнате.
Глянула 1️⃣ shared_buffers → нет → 2️⃣ спросила ОС, та смотрит, что есть в RAM → нет → идем на 3️⃣ диск Найденную страницу обычно кладём обратно в shared_buffers, чтобы следующий запрос взял её уже оттуда.
🧩 Данные и индексы — в одном кэше
Тут есть контр-интуитивный момент: и куча с данными (heap — страницы, где лежат сами строки таблицы), и индексы (страницы с элементами дерева) лежат в одном shared_buffers, конкурируя за место. Отдельной «памяти под индексы» нет 🤯
🌳 Почему индекс будто всегда в RAM
Верхушка B-дерева (корень и внутренние узлы) — набор страниц, который дёргает каждый поиск. Из-за частых переходов по дереву верхние уровни почти всегда в кэше, так как с них начинается почти любой поиск, поэтому дочитывать чаще приходится только лист и/или саму страницу кучи.
🔬 Пощупаем (дикпик 1)
EXPLAIN (ANALYZE, BUFFERS): секция BUFFERS показывает, сколько страниц нашли в shared_buffers (hit), а сколько пришлось дочитывать (read).
Холодный поиск по PK на таблице в 1 млн строк, у меня в эксперименте: shared read=4 — три страницы индекса плюс одна кучи, всё мимо кэша.
Повтор: shared hit=4 — всё в shared_buffers диск не трогали, время заметно меньше.
Ищем другой далёкий id: hit=1 read=3 — корень уже в кэше с прошлого раза, поэтому он был переиспользован.
⚠️ Тонкость: read ≠ обязательно диск
«read» здесь значит лишь «не было в shared_buffers». Но страница могла прилететь мгновенно от ОС, а не из диска.
Отсюда неочевидное: два запроса с одинаковым read могут идти с разной скоростью — в одном случае страница пришла с диска, в другом уже лежала в кэше ОС.
🧑💻 Как это использовать в работе
1. Первый запрос после рестарта PostgreSQL (или сервера) обычно медленнее: кэш пустой, он наполняется заново. Это так называемый «холодный старт».
2. Index Only Scan (когда всё нужное есть в самом индексе и в кучу за строкой идти не надо) экономит не только чтения, но и кэш: чем меньше heap-страниц тащим в shared_buffers — тем больше места остаётся другим.
Команды из дикпика — в 👉 гисте 👈
Дальше разберём, куда девается оперативка, когда её внезапно «съели» под 99%, и как это диагностировать 👉
🧑💻dp 🥁
#бд #postgresql #инженерныештучки #heavywednesday
#занимательныеистории пополнились новой историей✨
Напомню: скажи Алисе💜 "Запусти навык занимательные истории", а дальше там понятно))
Напомню: скажи Алисе
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
"Картинка дня"
Чувствуется, что без дополнительных запросов #ИИшница крутится вокруг какой-то одной темы: в прошлый раз за окном тоже был закат над рекой, букет, чашка, и блокнот, но городок был не такой большой
Чувствуется, что без дополнительных запросов #ИИшница крутится вокруг какой-то одной темы: в прошлый раз за окном тоже был закат над рекой, букет, чашка, и блокнот, но городок был не такой большой
🔥4
Media is too big
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Вспомнить всё 🧠
В айтишке для прохождения собеса на высокий грейд надо уметь, помимо прочего, рассказать про множество технических подробностей. В моём случае была сложность в том, что даже если ты их и знаешь, одно дело - рассуждать о решении задачи, глядя через призму этих знаний, другое - словами через рот выдать что-то внятное, структурированное, и понятное. В общем, тяжело, если регулярно в этом не практикуешься. Ещё сложнее, когда что-то изучал, но так редко применяешь это в работе, что эти знания в твоём shared_buffers замещаются более горячими данными (прямо как при чтении данных из БД)🧠
Как быстро освежить знания?
Мне на помощь в этом случае пришла, конечно же, #ИИшница🧠
Ты можешь сказать: "Она же галлюцинирует! Она тебе нагенерирует какой-нибудь ерунды, а ты опростоволосишься на собесе, пересказав эту чушь!". Я немедленно отвечу: да, такое возможно, и, как со всяким инструментом, с ней тоже надо уметь обращаться 🔧
Говорят, что генеративные модели обучены на всём интернете. В том числе, получается, на информации из Stack overflow и хабре, безграничных кладезях знаний, наполняемых людьми.
А люди склонны ошибаться.
То есть, когда я читаю статью, я рискую нарваться на неточную или неполную информацию. В этом случае я могу подумать "WTF, что-то тут не сходится" и... остаться наедине с этой мыслью. С нейронкой, в случае сомнений, я могу задать уточняющий вопрос. Ассистент либо признает неточность, либо разложит по полочкам ещё подробнее.
Ещё информацию из статьи или видоса можно неправильно интерпретировать. В случае с ИИ, я могу уточнить, и получить ответ.
В общем, нейросеть может предстать этаким интерактивным учебником, или очень терпеливым экспертом, который ответит на все твои уточняющие вопросы. И который ещё быстро погуглит, если что-то не знает, сопоставит информацию, и выдаст ровно то, что тебя интересует.
🧐Конечно, всё ещё стоит относиться к информации от ИИ (как и любой информации в интернете, к этому посту тоже) с разумной долей скепсиса, и выявить неточности поможет в том числе практический опыт. То есть, важно не просто всё зубрить и принимать на веру, а пытаться спроцеровать (смаппить, по-нашему) свежие знания на былой опыт. Так и полученная информация лучше закрепится, и на собесе сможешь привести пару интересных примеров про конкурентный доступ к файлу на блобе
#поиск_работы
В айтишке для прохождения собеса на высокий грейд надо уметь, помимо прочего, рассказать про множество технических подробностей. В моём случае была сложность в том, что даже если ты их и знаешь, одно дело - рассуждать о решении задачи, глядя через призму этих знаний, другое - словами через рот выдать что-то внятное, структурированное, и понятное. В общем, тяжело, если регулярно в этом не практикуешься. Ещё сложнее, когда что-то изучал, но так редко применяешь это в работе, что эти знания в твоём shared_buffers замещаются более горячими данными (прямо как при чтении данных из БД)
Как быстро освежить знания?
Мне на помощь в этом случае пришла, конечно же, #ИИшница
Ты можешь сказать: "Она же галлюцинирует! Она тебе нагенерирует какой-нибудь ерунды, а ты опростоволосишься на собесе, пересказав эту чушь!". Я немедленно отвечу: да, такое возможно, и, как со всяким инструментом, с ней тоже надо уметь обращаться 🔧
Говорят, что генеративные модели обучены на всём интернете. В том числе, получается, на информации из Stack overflow и хабре, безграничных кладезях знаний, наполняемых людьми.
А люди склонны ошибаться.
То есть, когда я читаю статью, я рискую нарваться на неточную или неполную информацию. В этом случае я могу подумать "WTF, что-то тут не сходится" и... остаться наедине с этой мыслью. С нейронкой, в случае сомнений, я могу задать уточняющий вопрос. Ассистент либо признает неточность, либо разложит по полочкам ещё подробнее.
Ещё информацию из статьи или видоса можно неправильно интерпретировать. В случае с ИИ, я могу уточнить, и получить ответ.
В общем, нейросеть может предстать этаким интерактивным учебником, или очень терпеливым экспертом, который ответит на все твои уточняющие вопросы. И который ещё быстро погуглит, если что-то не знает, сопоставит информацию, и выдаст ровно то, что тебя интересует.
🧐Конечно, всё ещё стоит относиться к информации от ИИ (как и любой информации в интернете, к этому посту тоже) с разумной долей скепсиса, и выявить неточности поможет в том числе практический опыт. То есть, важно не просто всё зубрить и принимать на веру, а пытаться спроцеровать (смаппить, по-нашему) свежие знания на былой опыт. Так и полученная информация лучше закрепится, и на собесе сможешь привести пару интересных примеров про конкурентный доступ к файлу на блобе
#поиск_работы
Please open Telegram to view this post
VIEW IN TELEGRAM
Казалось бы, ещё вчера #занимательныеистории тестировали на хакатоне, а сегодня им уже 6 лет 🥲
Если интересно, исходники 👉здесь👈
Если интересно, исходники 👉здесь👈
🔥2 1
Рассказать всё 📢 (
от автора "вспомнить всё" и "записать всё")
Как говорил ранее, один из факторов успешного собеседования заключается в умении рассказать о своём опыте и знаниях. Именно рассказать. Вслух!
Помимо освежевания знаний, надо практиковаться в устном ответе на вопросы. Прям вслух проговаривать свой ответ под запись🔴
На первых порах можешь очень сильно удивиться, как много в твоей речи лишних звуков. А ещё во время рассуждений "про себя" мозг работает немного по-другому, и в этом режиме может выдать нужную информацию, а вот "вслух" куда-то вдруг всё пропадает🤔
Тут можно подмечать свои ошибки во время рассказа или при прослушивании записи, а еще её можно транскрибировать и передать полученный текст, конечно же, нейронке, чтобы получить от неё фидбек по твоему ответу. У ChatGPT😺 вообще есть режим созвона, в котором прям в реальном времени она может устроить тебе тех-скрининг, но у меня она в этом режиме как будто чаще ошибалась.
Ну а дальше, уже получив желанный оффер, не останавливайся, продолжай практиковаться в пересказе своих знаний и регулярно освежай их: пиши статьи и посты в канальчик, выступай на внутренних митапах и внешних конференциях, ментори кого-нибудь. Поддерживай этот навык тёплым 🔥, он тебе во многом пригодится и после собеседований.
И записывай это всё в достижения, конечно же🧠
#поиск_работы
от автора "вспомнить всё" и "записать всё")
Как говорил ранее, один из факторов успешного собеседования заключается в умении рассказать о своём опыте и знаниях. Именно рассказать. Вслух!
Помимо освежевания знаний, надо практиковаться в устном ответе на вопросы. Прям вслух проговаривать свой ответ под запись
На первых порах можешь очень сильно удивиться, как много в твоей речи лишних звуков. А ещё во время рассуждений "про себя" мозг работает немного по-другому, и в этом режиме может выдать нужную информацию, а вот "вслух" куда-то вдруг всё пропадает
Тут можно подмечать свои ошибки во время рассказа или при прослушивании записи, а еще её можно транскрибировать и передать полученный текст, конечно же, нейронке, чтобы получить от неё фидбек по твоему ответу. У ChatGPT
Ну а дальше, уже получив желанный оффер, не останавливайся, продолжай практиковаться в пересказе своих знаний и регулярно освежай их: пиши статьи и посты в канальчик, выступай на внутренних митапах и внешних конференциях, ментори кого-нибудь. Поддерживай этот навык тёплым 🔥, он тебе во многом пригодится и после собеседований.
И записывай это всё в достижения, конечно же
#поиск_работы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Forwarded from C# Short Posts 🔞
🗄 Оперативное 1: shared_buffers — личный кэш Postgres
В обзорном посте про оперативку постгресса мы насчитали трёх «едоков» памяти. Начнём с первого: shared_buffers. Разберёмся, что это такое и почему он всегда выглядит занятым.
😂 Что это вообще
Как многие знают, Postgres не бегает на диск в каждом запросе. У него есть свой кэш — кусок оперативки, куда он складывает страницы (напомню, что это кусочки по 8 Kb), которые недавно понадобились, чтобы в следующий раз взять их из памяти. Вот этот кэш и есть shared_buffers.
Слово shared («общий») тут ключевое: буферы общие для всех соединений. Один запрос читает страницу с диска и кладет в shared_buffers, а следующий возьмёт её уже из памяти и диск не тронет.(Напомню, что даже на самых мощных SSD разница скорость чтения 10-20 микросекунд, тогда как из оперативки это 50-60 НАНОсекунд, то есть капец как дешево)
📏 Сколько его
Размер задаёт параметр shared_buffers, и фиксируется он при старте сервера. По умолчанию в Postgres это всего 128 MB — наследство времён, когда памяти было мало. На боевом сервере его обычно поднимают примерно до четверти всей оперативки. Текущее значение покажет команда SHOW shared_buffers;
⚙️ Почему он всегда «занят»
Эти 128 MB (или сколько ты выставил) Postgres резервирует под кэш сразу при запуске и держит за собой всё время работы. Поэтому в мониторинге shared_buffers всегда показывает себя занятой памятью. Это не утечка и не повод хвататься за сердце😰 : память заранее отведена под кэш и работает на тебя.
🔬 Что внутри
Что именно сейчас лежит в shared_buffers, показывает расширение pg_buffercache (его надо один раз подключить командой CREATE EXTENSION pg_buffercache).
На прогретой таблице users из миллиона строк (прогретой — значит по ней уже погоняли запросы, и её страницы успели осесть в кэше) у меня вышло так:
🟢 сама таблица заняла 47 MB
🟢 индекс по email — 39 MB
🟢 индекс первичного ключа — 21 MB.
Два индекса вместе съели больше кэша, чем данные! Это частый сюрприз: спрашиваешь «куда ушла память под базу», а ответ нередко оказывается простым — в индексы.
🅰️ Что унести с собой
🟢 shared_buffers — это собственный кэш Postgres в оперативке, общий для всех соединений.
🟢 Его размер фиксируется при старте: по умолчанию 128 MB, на проде обычно около четверти RAM.
🟢 Он всегда выглядит занятым, и это нормально: память заранее отведена под кэш.
🟢 Индексы живут в том же кэше, что и данные, и порой занимают даже больше места.
#бд #postgresql #инженерныештучки #heavywednesday
В обзорном посте про оперативку постгресса мы насчитали трёх «едоков» памяти. Начнём с первого: shared_buffers. Разберёмся, что это такое и почему он всегда выглядит занятым.
Как многие знают, Postgres не бегает на диск в каждом запросе. У него есть свой кэш — кусок оперативки, куда он складывает страницы (напомню, что это кусочки по 8 Kb), которые недавно понадобились, чтобы в следующий раз взять их из памяти. Вот этот кэш и есть shared_buffers.
Слово shared («общий») тут ключевое: буферы общие для всех соединений. Один запрос читает страницу с диска и кладет в shared_buffers, а следующий возьмёт её уже из памяти и диск не тронет.
📏 Сколько его
Размер задаёт параметр shared_buffers, и фиксируется он при старте сервера. По умолчанию в Postgres это всего 128 MB — наследство времён, когда памяти было мало. На боевом сервере его обычно поднимают примерно до четверти всей оперативки. Текущее значение покажет команда SHOW shared_buffers;
⚙️ Почему он всегда «занят»
Эти 128 MB (или сколько ты выставил) Postgres резервирует под кэш сразу при запуске и держит за собой всё время работы. Поэтому в мониторинге shared_buffers всегда показывает себя занятой памятью. Это не утечка и не повод хвататься за сердце
🔬 Что внутри
Что именно сейчас лежит в shared_buffers, показывает расширение pg_buffercache (его надо один раз подключить командой CREATE EXTENSION pg_buffercache).
На прогретой таблице users из миллиона строк (прогретой — значит по ней уже погоняли запросы, и её страницы успели осесть в кэше) у меня вышло так:
Два индекса вместе съели больше кэша, чем данные! Это частый сюрприз: спрашиваешь «куда ушла память под базу», а ответ нередко оказывается простым — в индексы.
🅰️ Что унести с собой
🟢 shared_buffers — это собственный кэш Postgres в оперативке, общий для всех соединений.
🟢 Его размер фиксируется при старте: по умолчанию 128 MB, на проде обычно около четверти RAM.
🟢 Он всегда выглядит занятым, и это нормально: память заранее отведена под кэш.
🟢 Индексы живут в том же кэше, что и данные, и порой занимают даже больше места.
#бд #postgresql #инженерныештучки #heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2