Новый видос!
https://youtu.be/rtoLYuXtLGk?si=6Zfrk7go31scHSku
https://youtu.be/rtoLYuXtLGk?si=6Zfrk7go31scHSku
YouTube
Спидран техсобеса на 400к Backend PHP
В этом видео будет спидран технического собеседования на синьор позицию
В комментариях под прошлыми видео вы говорили, шо на моих собесах какие-то сложные вопросы
Так вот этот собес был самым коротким в моей жизни и пожалуй самым легким.
При этом я просил…
В комментариях под прошлыми видео вы говорили, шо на моих собесах какие-то сложные вопросы
Так вот этот собес был самым коротким в моей жизни и пожалуй самым легким.
При этом я просил…
❤14🫡1
Написал обзор на преимущества zsh над bash, которые я нашел для себя за время использования
Буду рад услышать ваши лайфхаки на эту тему !
Буду рад услышать ваши лайфхаки на эту тему !
Хабр
Что дал переход на zsh мне, как разработчику?
Когда я был еще джуном, старшие разработчики настоятельно советовали мне перейти на zsh. Я помню, что я так и не получил никакой аргументации, чем zsh лучше, чем привычный bash, и...
👍8❤3🤔2🤝1
Используете AAA (arrange-act-assert/given-when-then) при тестировании?
Anonymous Poll
43%
да
19%
нет
38%
не пишу тесты
Итак, по результатам опроса 44% респондентов используют AAA pattern при тестировании
Я обычно отделяю части комментариями, хотя кто-то просто пустыми строками, но периодически сам забываю, периодически команда приносит тесты с несколькими
Поэтому запилил правило для ректора на этот счет, может и вам будет полезно
Я обычно отделяю части комментариями, хотя кто-то просто пустыми строками, но периодически сам забываю, периодически команда приносит тесты с несколькими
act-assertПоэтому запилил правило для ректора на этот счет, может и вам будет полезно
Telegram
msavin
Используете AAA (arrange-act-assert/given-when-then) при тестировании?
да / нет / не пишу тесты
да / нет / не пишу тесты
🔥4❤1
Замутил бэйджик для библиотек, которые оптимизировали свой дистрибутив для скачивания конечным пользователем
Вот инструкция, как добавить его к своему репозиторию
Вот инструкция, как добавить его к своему репозиторию
👍6❤1
Правило для ректора, добавляющее именованные аргументы, теперь умеет убирать дефолтные значения из переданных аргументов, чтобы код был еще выразительнее, пробуйте 🙂
GitHub
GitHub - savinmikhail/AddNamedArgumentsRector: Plugin to rector, that adds named arguments to your codebase
Plugin to rector, that adds named arguments to your codebase - savinmikhail/AddNamedArgumentsRector
🔥10
image_2025-10-18_19-51-45.png
141.6 KB
Мне окончательно надоело, что в симфоневом профайлере нельзя посмотреть тело ответа, только заголовки. Толку то мне от заголовков..
Благо симфа и здесь легко расширяется, поэтому я быстреньконавайбкодил написал бандл, позволяющий смотреть содержимое ответа. Аналогов найти я не смог(
По умолчанию работает для json- и text- подобных mime-типов, и обрезает слишком большие ответы (настраиваемо).
Если разделяете мою боль - велком
Благо симфа и здесь легко расширяется, поэтому я быстренько
По умолчанию работает для json- и text- подобных mime-типов, и обрезает слишком большие ответы (настраиваемо).
Если разделяете мою боль - велком
🔥15
Новый тех на канале!
Было 3 задачи: первая это кодревью php кода, 2 другие - проектирование баз данных
Было 3 задачи: первая это кодревью php кода, 2 другие - проектирование баз данных
YouTube
Собеседование PHP на 275к
Это запись технического собеседования на позицию php разработчика. На собеседовании было 3 задачи - одна на php на code review, 2 - что-то вроде system design, но в основном дизайн именно базы данных
Через 2 часа после собеседования мне скинули оффер
Мой…
Через 2 часа после собеседования мне скинули оффер
Мой…
🔥17❤2
YouTube
Собеседование PHP developer
Техническое собеседование на позицию php разработчика. Вилка - 350к. Было 2 задачи - на кодревью и на проектирование базы данных, затем теоретические вопросы по sql, php, архитектуре, безопасности
По итогам теха прошел на следующий этап
Мой тг - https:/…
По итогам теха прошел на следующий этап
Мой тг - https:/…
Залил видео нового формата - что-то вроде разбора частых ошибок (если ты бородатый симфонист, то скипай). В данном случае - как валидировать реквесты в симфе. Вопрос в целом тривиальный, но постоянно вижу велосипеды, пару из них даж нашел и вставил в видос
Вдобавок закинул тех на ютуб
Была задача на ревью, поинтереснее прошлой, проектирование базы и 2 десятка теоретических вопросов по базам, пхп, архитектуре и безопасности
Вдобавок закинул тех на ютуб
Была задача на ревью, поинтереснее прошлой, проектирование базы и 2 десятка теоретических вопросов по базам, пхп, архитектуре и безопасности
1👍9🔥3❤2
Какие mcp сервера посоветуете? Я пока остановился на ctx и firecrawl, остальные кажутся бесполезными :(
GitHub
GitHub - context-hub/generator: CTX: a tool that solves the context management gap when working with LLMs like ChatGPT or Claude.…
CTX: a tool that solves the context management gap when working with LLMs like ChatGPT or Claude. It helps developers organize and automatically collect information from their codebase into structu...
👍5❤1
Открыл PR в php-src, добавляющий для
RFC пока не делал, подожду реакции от internals
Если тебе кажется удобной такая фича, поставь пж 👍 на мр 🙂
BackedEnum нативный метод values, потому что часто вижу в проектах создают трейт под это делоRFC пока не делал, подожду реакции от internals
Если тебе кажется удобной такая фича, поставь пж 👍 на мр 🙂
GitHub
Add values() Method to BackedEnum by savinmikhail · Pull Request #20398 · php/php-src
Add values() Method to BackedEnum
Summary
Introduce a native BackedEnum::values() static method that returns the list of all backing values (int|string) of a backed enum's cases in declarat...
Summary
Introduce a native BackedEnum::values() static method that returns the list of all backing values (int|string) of a backed enum's cases in declarat...
👍13🔥3❤1
Пока идет обсуждение моего RFC в пыху, узнал, что
А вы знали про такое?
array_column может доставать не только колонки массива, как казалось бы, но и свойства объектов:
enum Status: string {
case Active = 'active';
case Inactive = 'inactive';
case Pending = 'pending';
}
// What does self::cases() return?
var_dump(Status::cases());
// array(3) {
// [0]=> enum(Status::Active) // <- These are OBJECTS
// [1]=> enum(Status::Inactive) // <- Not arrays
// [2]=> enum(Status::Pending)
// }
// Each case object has public readonly properties:
$case = Status::Active;
echo $case->value; // "active" (string - the backing value)
// array_column can extract these properties!
$values = array_column(Status::cases(), 'value');
var_dump($values);
// array(3) {
// [0]=> string(6) "active"
// [1]=> string(8) "inactive"
// [2]=> string(7) "pending"
// }
А вы знали про такое?
👍21💯4
Вы знали, что у php-fpm можно получить вот такую статистику работы, в том числе по пуллам?
URL эндпойнта можно менять в конфиге (и в nginx'е обновлять локейшн), а формат можно менять в query параметрах (json/html/text)
Не то чтобы эта инфа очень мне помогла, но было интересно понаблюдать за своим приложением, может и вам пригодится 🙂
Дока здесь
URL эндпойнта можно менять в конфиге (и в nginx'е обновлять локейшн), а формат можно менять в query параметрах (json/html/text)
Не то чтобы эта инфа очень мне помогла, но было интересно понаблюдать за своим приложением, может и вам пригодится 🙂
Дока здесь
👍12🔥5
Микролайфхак:
Если перемещать файлы обычным
- файл
- новый
История теряет контекст, blame обнуляется, diff выходит огромным
«Это тот же файл, просто теперь он здесь».
И в итоге в diff появляется аккуратное
Справедливости ради шторм так и делает под капотом, а вот при работе в других средах надо иметь ввиду. Ну или сказать llm'ке, чтоб имела ввиду 🙂
git mvЕсли перемещать файлы обычным
mv, git вообще не понимает, что произошло. На примере с картинки он видит это как:- файл
console будто удалили- новый
config/console будто появился из ниоткуда.История теряет контекст, blame обнуляется, diff выходит огромным
git mv делает то же самое перемещение, но еще и сообщает git'у:«Это тот же файл, просто теперь он здесь».
И в итоге в diff появляется аккуратное
renamed, а не двойной дифф, который занимает весь экранСправедливости ради шторм так и делает под капотом, а вот при работе в других средах надо иметь ввиду. Ну или сказать llm'ке, чтоб имела ввиду 🙂
👍25
Топ видос, как вы считаете? Боюсь представить сколько сил потребовалось чтоб снять его)
Forwarded from vysmv
Media is too big
VIEW IN TELEGRAM
Как устроен PHP 🐘: фундаментальное знание для инженеров
В этом видео мы шаг за шагом разберём, как из исходного кода рождается процесс.
Пройдем путь от компиляции к интерпретации, от fork() и execve до php-fpm.
🔹 Подходит тем, кто хочет понять, как реально работает PHP и интерпретируемые языки в Linux.
🔹 Без магии — только системная логика и живая демонстрация в терминале.
Таймкоды:
00:09 Введение.
01:32 Классическая схема. Компилируемые языки.
02:29 Альтернативный подход. Интерпретируемые языки.
04:16 Подведём итог.
04:39 Погружение.
04:54 PHP как язык.
05:19 PHP как интерпретатор.
05:46 SAPI (Server API).
15:28 Ядро (Zend Engine).
16:03 Набор расширений (Extensions).
16:44 Резюме по интерпретатору.
17:38 Практика. Подготовка демонтстрационного стенда.
18:15 CGI и Apache2.
22:19 Принцип запуска программ в терминале.
29:56 Общий принцип работы с вводом и выводом в Unix-подобных системах.
35:39 CLI профиль.
38:54 Возвращаемся к CGI и Apache2.
47:45 Fast CGI.
54:54 Итог.
В этом видео мы шаг за шагом разберём, как из исходного кода рождается процесс.
Пройдем путь от компиляции к интерпретации, от fork() и execve до php-fpm.
🔹 Подходит тем, кто хочет понять, как реально работает PHP и интерпретируемые языки в Linux.
🔹 Без магии — только системная логика и живая демонстрация в терминале.
Таймкоды:
00:09 Введение.
01:32 Классическая схема. Компилируемые языки.
02:29 Альтернативный подход. Интерпретируемые языки.
04:16 Подведём итог.
04:39 Погружение.
04:54 PHP как язык.
05:19 PHP как интерпретатор.
05:46 SAPI (Server API).
15:28 Ядро (Zend Engine).
16:03 Набор расширений (Extensions).
16:44 Резюме по интерпретатору.
17:38 Практика. Подготовка демонтстрационного стенда.
18:15 CGI и Apache2.
22:19 Принцип запуска программ в терминале.
29:56 Общий принцип работы с вводом и выводом в Unix-подобных системах.
35:39 CLI профиль.
38:54 Возвращаемся к CGI и Apache2.
47:45 Fast CGI.
54:54 Итог.
2🔥28❤7👍2👌2
Хотите на собесе рассказать как ускорили запрос в 60 раз?
Недавно впервые споткнулся об JIT в Postgresql:
Был обычный SELECT по партиционированной таблице на ~390млн строк, причем WHERE по индексам
Но на боевой базе жесть как тормозил
Конечно запустил EXPLAIN ANALYZE, а там JIT занимает 16 секунд (!) из 16.2
Видимо из-за фильтров/кастов/количества партиций планировщик насчитал огромную стоимость запроса, хотя на практике это не подтвердилось
Решается это супер просто - достаточно перед запросом прописать SET jit = off;
После этого запрос стал выполнятся за ~250ms
Кстати, можете интерактивно поизучать план этого запроса вот здесь (но я выкинул из плана 388 партиций из 390)
Недавно впервые споткнулся об JIT в Postgresql:
Был обычный SELECT по партиционированной таблице на ~390млн строк, причем WHERE по индексам
Но на боевой базе жесть как тормозил
Конечно запустил EXPLAIN ANALYZE, а там JIT занимает 16 секунд (!) из 16.2
Видимо из-за фильтров/кастов/количества партиций планировщик насчитал огромную стоимость запроса, хотя на практике это не подтвердилось
Решается это супер просто - достаточно перед запросом прописать SET jit = off;
После этого запрос стал выполнятся за ~250ms
Кстати, можете интерактивно поизучать план этого запроса вот здесь (но я выкинул из плана 388 партиций из 390)
🔥19👍5
Замутил репозиторий, демонстрирующий шардирование в стеке PHP, Symfony, Postgresql: https://github.com/savinmikhail/sharding-example
Там есть 2 консольные команды демонстрирующие хэш и directory based шардирование. Соответственно первый вариант полностью прозрачен для приложеньки, а второй вариант - нет, но зато поможет с изоляцией горячих ключей
Координатор - Citus
Кому тема кажется страшной и сложной - велком потыкать руками, чтоб понять как примерно это выглядит
Там есть 2 консольные команды демонстрирующие хэш и directory based шардирование. Соответственно первый вариант полностью прозрачен для приложеньки, а второй вариант - нет, но зато поможет с изоляцией горячих ключей
Координатор - Citus
Кому тема кажется страшной и сложной - велком потыкать руками, чтоб понять как примерно это выглядит
GitHub
GitHub - savinmikhail/sharding-example
Contribute to savinmikhail/sharding-example development by creating an account on GitHub.
🔥20👍2🏆2