Сегодня тимлид упомянул очень интересный термин - "гайзенбаг"
Я такое слышал первый раз и полез гуглить. Нашёл на википедии аж целую статью :D
Такой термин не один и у каждого интересное название - https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%B9%D0%B7%D0%B5%D0%BD%D0%B1%D0%B0%D0%B3
Так что если хотите блеснуть умом, когда прод горит синим пламенем, то бегом читать!
Я такое слышал первый раз и полез гуглить. Нашёл на википедии аж целую статью :D
Такой термин не один и у каждого интересное название - https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%B9%D0%B7%D0%B5%D0%BD%D0%B1%D0%B0%D0%B3
Так что если хотите блеснуть умом, когда прод горит синим пламенем, то бегом читать!
Async php?
Я тут недавно наткнулся на доклад по асинхронному пхп - https://youtu.be/w75P9RrVgKg
Очень интересно послушать, а самое главное - я наконец-то понял как это может работать, для чего можно применить генераторы и как организовать кооперативную многозадачность в пхп
Понятно, что язык для других целей совершенно и, возможно, стоит подумать, то ли ты делаешь, если решил к таким методам прибегнуть, но знания крайне полезные
@artemmarenkoff жду фотку твоего лица после просмотра :D
Я тут недавно наткнулся на доклад по асинхронному пхп - https://youtu.be/w75P9RrVgKg
Очень интересно послушать, а самое главное - я наконец-то понял как это может работать, для чего можно применить генераторы и как организовать кооперативную многозадачность в пхп
Понятно, что язык для других целей совершенно и, возможно, стоит подумать, то ли ты делаешь, если решил к таким методам прибегнуть, но знания крайне полезные
@artemmarenkoff жду фотку твоего лица после просмотра :D
YouTube
Aсинхронный PHP / Антон Шабовта (Onliner)
Приглашаем на конференцию Saint HighLoad++ 2024, которая пройдет 24 и 25 июня в Санкт-Петербурге!
Программа, подробности и билеты по ссылке: https://vk.cc/cuyIqx
--------
--------
Презентация и тезисы:
https://phprussia.ru/2019/abstracts/5013
* Разбираемся…
Программа, подробности и билеты по ссылке: https://vk.cc/cuyIqx
--------
--------
Презентация и тезисы:
https://phprussia.ru/2019/abstracts/5013
* Разбираемся…
Я зачем-то начал ходить по собесам
Оправдываю это тем, что надо понимать где какой уровень и что надо прокачать
Тем не менее, иногда вопросы правда ставят в тупик, хотя не должны бы
Один из них - как работает пхп по протоколу cgi и что это вообще за cgi такой
По сему вот статейка - http://xandeadx.ru/blog/php/866
Очень рекомендую как прочтению как стартовая точка для изучения этой темы
Оправдываю это тем, что надо понимать где какой уровень и что надо прокачать
Тем не менее, иногда вопросы правда ставят в тупик, хотя не должны бы
Один из них - как работает пхп по протоколу cgi и что это вообще за cgi такой
По сему вот статейка - http://xandeadx.ru/blog/php/866
Очень рекомендую как прочтению как стартовая точка для изучения этой темы
Подошёл к концу мой период хождения по собесам
Никаких выводов пока не сделал, надо думать что делать дальше
Могу сказать только то, что рынок существенно вырос
Но как оказалось и я тоже вырос, хотя такое ощущение, что полгода хернёй занимался)
Потихоньку буду обмозговывать и выкладывать сюда самые интересные знания, вытянутые из собесов
На сегодня у нас мутационное тестирование - https://www.techtarget.com/searchitoperations/definition/mutation-testing
Штука очень спорная, но от того не менее интересная
Если был у кого-то опыт - буду рад послушать)
Никаких выводов пока не сделал, надо думать что делать дальше
Могу сказать только то, что рынок существенно вырос
Но как оказалось и я тоже вырос, хотя такое ощущение, что полгода хернёй занимался)
Потихоньку буду обмозговывать и выкладывать сюда самые интересные знания, вытянутые из собесов
На сегодня у нас мутационное тестирование - https://www.techtarget.com/searchitoperations/definition/mutation-testing
Штука очень спорная, но от того не менее интересная
Если был у кого-то опыт - буду рад послушать)
IT Operations
mutation testing
This definition explains mutation testing, a form of white box testing designed to test a test suite rather than an application. Testers will change specific pieces in an applications source code t...
Оптимизация
Я увеличил скорость импорта прайсов в 3 раза!
Звучит очень круто, да? А теперь reality check: вместо 480 секунд стало 320 секунд😩
Да, результат всё ещё говно, хотя я за выходные всю голову сломал что ещё можно сделать
Чтобы эти цифры выглядели не совсем плохими, поясню, что в файле импорта 37 тысяч записей, которые надо с кучей правил сложить в базу, при этом при появлении дублей по определённым полям, надо распихать значения в другие таблицы, чтобы их не потерять (так требует бизнес)
Итак, что я пробовал и что выгорело:
1. Группировка мелких запросов на апдейт в базу и отправка одним куском
Это снизило время импорта на 1/6 просто потому что теперь вместо 15 запросов теперь уходил 1
2. При нахождении полных дублей не делать запросов вообще
При первичном кодировании этого функционала такой вариант развитий я не учёл; показания скорости после этого разнятся - где-то импорт ускорился в 3 раза, где упал до 0.9
Что я пробовал и что сделало всё только хуже:
1. Вынос функционала по сохранению дублящихся значений в отдельную команду и вызов через MessageBus
Говно идея, скорость импорта упала в два раза на всех позициях просто хотя бы ввиду постоянного создания объекта
2. Страшные sql-запросы, которые upsert'ят запись и тут же обновляют все другие записи, проставляя служебные поля новым айднишником
Это вообще жуть - прайс, грузившийся за минуту стал грузиться 3 и более; причина простая - common table expression + update оставляют в базу в полнейшем шоке и она начинает тупить
Я увеличил скорость импорта прайсов в 3 раза!
Звучит очень круто, да? А теперь reality check: вместо 480 секунд стало 320 секунд😩
Да, результат всё ещё говно, хотя я за выходные всю голову сломал что ещё можно сделать
Чтобы эти цифры выглядели не совсем плохими, поясню, что в файле импорта 37 тысяч записей, которые надо с кучей правил сложить в базу, при этом при появлении дублей по определённым полям, надо распихать значения в другие таблицы, чтобы их не потерять (так требует бизнес)
Итак, что я пробовал и что выгорело:
1. Группировка мелких запросов на апдейт в базу и отправка одним куском
Это снизило время импорта на 1/6 просто потому что теперь вместо 15 запросов теперь уходил 1
2. При нахождении полных дублей не делать запросов вообще
При первичном кодировании этого функционала такой вариант развитий я не учёл; показания скорости после этого разнятся - где-то импорт ускорился в 3 раза, где упал до 0.9
Что я пробовал и что сделало всё только хуже:
1. Вынос функционала по сохранению дублящихся значений в отдельную команду и вызов через MessageBus
Говно идея, скорость импорта упала в два раза на всех позициях просто хотя бы ввиду постоянного создания объекта
2. Страшные sql-запросы, которые upsert'ят запись и тут же обновляют все другие записи, проставляя служебные поля новым айднишником
Это вообще жуть - прайс, грузившийся за минуту стал грузиться 3 и более; причина простая - common table expression + update оставляют в базу в полнейшем шоке и она начинает тупить
Ура! Вечер прошёл не зря
Перепробовав всё, я решил поставить везде таймеры и измерять суммарное время выполнения разных участков кода
Оказывается, всё это время 95% времени отнимали простые, блин, селекты в базу
Сделал прослойку, которая прелоадит все имеющиеся позиции прайса, чтобы делать выборку из памяти, а не из базы и всё полетело!
Да, первичный импорт, когда в базе пусто, всё ещё не сильно радует, но повторный, с малым количеством изменённых данных - просто ракета!
Можно спать спокойно, а завтра на дейлике кичиться своими достижениями😊
Перепробовав всё, я решил поставить везде таймеры и измерять суммарное время выполнения разных участков кода
Оказывается, всё это время 95% времени отнимали простые, блин, селекты в базу
Сделал прослойку, которая прелоадит все имеющиеся позиции прайса, чтобы делать выборку из памяти, а не из базы и всё полетело!
Да, первичный импорт, когда в базе пусто, всё ещё не сильно радует, но повторный, с малым количеством изменённых данных - просто ракета!
Можно спать спокойно, а завтра на дейлике кичиться своими достижениями😊
🤯2❤1
Ловите подборку статей и видосов по пхп, в которых разбираются углублённые вопросы:
1. Потребление памяти
2. Iterable и их перебор
3. Про сбор мусора (каюсь, сам пока не читал)
4. Школа магии
5. Увеличение скорости работы приложения
6. PHP JIT
1. Потребление памяти
2. Iterable и их перебор
3. Про сбор мусора (каюсь, сам пока не читал)
4. Школа магии
5. Увеличение скорости работы приложения
6. PHP JIT
👍3
Новое начало
Сегодня первый день на новой работе
Ощущения крайне странные, потому что это первый раз, когда весь процесс трудоустройства удалённый - с утра приехал курьер, привёз все доки и ноутбук
Весь день знакомство с командой, различные встречи, выдача доступов
С завтрашнего дня уже начнутся задачи как только доступ в гит выдадут и начнётся веселье
Команда огромная - на дейлике было 25 человек :D
В общем, пока что я прям очень доволен
Вот только когда подписывал доки мельком пробежался по NDA и не уверен, что много могу говорить теперь, вечером договор перечитать бы надо
Сегодня первый день на новой работе
Ощущения крайне странные, потому что это первый раз, когда весь процесс трудоустройства удалённый - с утра приехал курьер, привёз все доки и ноутбук
Весь день знакомство с командой, различные встречи, выдача доступов
С завтрашнего дня уже начнутся задачи как только доступ в гит выдадут и начнётся веселье
Команда огромная - на дейлике было 25 человек :D
В общем, пока что я прям очень доволен
Вот только когда подписывал доки мельком пробежался по NDA и не уверен, что много могу говорить теперь, вечером договор перечитать бы надо
Наконец-то дочитал "книгу" Артура Пантелеева из чата phpGeeks
Книгой это очень сложно, конечно, назвать - это, скорее, компиляция множества тем, которые должен знать и понимать мидл-разработчик
Иногда, там половина объявленых на странице тем вообще не раскрыта, но это очень хорошая отправная точка по бэкенду
Книгой это очень сложно, конечно, назвать - это, скорее, компиляция множества тем, которые должен знать и понимать мидл-разработчик
Иногда, там половина объявленых на странице тем вообще не раскрыта, но это очень хорошая отправная точка по бэкенду
backendinterview.ru
Введение - Backend interview
Книжка для подготовки к собеседованию на должность backend developer
🔥1
Время почитать
1. Книга о внутренностях пхп
2. Зачем изучать основы компиляторов
3. Всё что вы когда-либо напишите станет легаси
4. Практическое применение анонимных классов
5. О работе и преднамеренно наплевательском отношении к ней
6. О разнице ООП и ФП - раз и два
7. Как на самом деле работает форыч в пхп
8. Логирование медленных запросов в пхп
9. Корутины в пхп
10. Точно ли вам нужен graphql?
1. Книга о внутренностях пхп
2. Зачем изучать основы компиляторов
3. Всё что вы когда-либо напишите станет легаси
4. Практическое применение анонимных классов
5. О работе и преднамеренно наплевательском отношении к ней
6. О разнице ООП и ФП - раз и два
7. Как на самом деле работает форыч в пхп
8. Логирование медленных запросов в пхп
9. Корутины в пхп
10. Точно ли вам нужен graphql?
Совершенно случайно наткнулся на практический пример применения Fibers из php8.1
Очень рекомендую к ознакомлению, там достаточно хорошо описано какие именно операции имеет смысл заворачивать в файберы и как это правильно делать
Очень рекомендую к ознакомлению, там достаточно хорошо описано какие именно операции имеет смысл заворачивать в файберы и как это правильно делать
Что такое оптимизация?
Вообще, когда пришла задача по оптимизации на 3 неделе работы в компании, то я сначала дико обрадовался, а потом стало страшно. Такие задачи на самом деле что значат? Что ближайшие 3-4 дня ты проведёшь за исследованием кодовой базы на предмет слабых мест, а затем должен будешь оптимизировать эти слабые места, да ещё и так, чтобы хуже не стало. Это по факту подразумевает глубокое понимание внутренней работы системы, чего у меня пока что нет и что придётся получать в экстренном порядке.
В моём случае оптимизировать надо было ответ от системы на запросы по продвижению ипотечной заявки, при чём не один конкретный эндпоинт, а весь цикл центрального взаимодействия с приложением. Честно скажу - сидел и тупил очень долго. Кропотливо изучал как заявка ходит туда-сюда, какие эндпоинты дёргаются, что в каждом происходит, какие события кидаются, какие подписчики этих событий без надобности выполняются синхронно и так далее.
В итоге после целого дня рефактора получил более-менее вменяемый результат, который завтра надо будет презентовать перед командой, чтобы они хотя бы понимали как ревью проводить, и объяснить выбор своей тактики.
Собственно, мы и подошли к вопросу поста и ответ вроде бы очевиден - снижение нагрузки на систему и снижение времени ответа апишки. Вот только путей достижения этой цели 2:
1. реальная оптимизация - например, минимизация запросов к базе или переписывание целого класса, потому что вся логика помещается в 2 строки
2. мнимая оптимизация - вынос второстепенных синхронных операций в асинх
Мы пока что выбрали второй путь, так как он очевидно проще и его реальный прикладной эффект будет виден пользователям сразу
А вот дальше оказывается на мне уже висят задачи по реальной оптимизации и там я по-полной смогу повес_ел_иться :D
Вообще, когда пришла задача по оптимизации на 3 неделе работы в компании, то я сначала дико обрадовался, а потом стало страшно. Такие задачи на самом деле что значат? Что ближайшие 3-4 дня ты проведёшь за исследованием кодовой базы на предмет слабых мест, а затем должен будешь оптимизировать эти слабые места, да ещё и так, чтобы хуже не стало. Это по факту подразумевает глубокое понимание внутренней работы системы, чего у меня пока что нет и что придётся получать в экстренном порядке.
В моём случае оптимизировать надо было ответ от системы на запросы по продвижению ипотечной заявки, при чём не один конкретный эндпоинт, а весь цикл центрального взаимодействия с приложением. Честно скажу - сидел и тупил очень долго. Кропотливо изучал как заявка ходит туда-сюда, какие эндпоинты дёргаются, что в каждом происходит, какие события кидаются, какие подписчики этих событий без надобности выполняются синхронно и так далее.
В итоге после целого дня рефактора получил более-менее вменяемый результат, который завтра надо будет презентовать перед командой, чтобы они хотя бы понимали как ревью проводить, и объяснить выбор своей тактики.
Собственно, мы и подошли к вопросу поста и ответ вроде бы очевиден - снижение нагрузки на систему и снижение времени ответа апишки. Вот только путей достижения этой цели 2:
1. реальная оптимизация - например, минимизация запросов к базе или переписывание целого класса, потому что вся логика помещается в 2 строки
2. мнимая оптимизация - вынос второстепенных синхронных операций в асинх
Мы пока что выбрали второй путь, так как он очевидно проще и его реальный прикладной эффект будет виден пользователям сразу
А вот дальше оказывается на мне уже висят задачи по реальной оптимизации и там я по-полной смогу повес_ел_иться :D
Время пришло
Последнее время крайне остро встал вопрос нехватки оперативной памяти на моём макбуке. Свободной всегда было 1-2 гига, а своп доходил до 19 гигов из-за докера
Решил наконец-то собрать себе обычную печку и переехать на линукс
Камешек - Ryzen 5 7600, 32 оперативы, OS - PopOS
Посмотрим, как пойдёт полёт в ближайшие пару недель, но пока что меня всё устраивает, всё прям очень плавно и круто
Ну и конечно, куда же без rgb :D
Последнее время крайне остро встал вопрос нехватки оперативной памяти на моём макбуке. Свободной всегда было 1-2 гига, а своп доходил до 19 гигов из-за докера
Решил наконец-то собрать себе обычную печку и переехать на линукс
Камешек - Ryzen 5 7600, 32 оперативы, OS - PopOS
Посмотрим, как пойдёт полёт в ближайшие пару недель, но пока что меня всё устраивает, всё прям очень плавно и круто
Ну и конечно, куда же без rgb :D
Я оказывается совсем забыл, каково это - иметь ПК
Я сегодня весь день провёл, пытаясь оживить абсолютно внезапно умерший bluetooth. Просто вот прихожу с утра и ни мышка, ни клава не подключаются, а в настройках блютус даже включить нельзя - не видит железку.
Я чего только не перепробовал, и биос обновил, и ОС другую накатил, и fastboot вырубил. А знаете как всё решилось? Надо просто было выключить комп, отсоединить питание, ЗАЖАТЬ НА 30 СЕКУНД КНОПКУ ВКЛЮЧЕНИЯ и снова включить комп
Я просто в шоке, честно говоря, после мака, где, сука, всё работает из коробки
Ну ничего, так если в целом посмотреть, то я доволен новым компом :D
Я сегодня весь день провёл, пытаясь оживить абсолютно внезапно умерший bluetooth. Просто вот прихожу с утра и ни мышка, ни клава не подключаются, а в настройках блютус даже включить нельзя - не видит железку.
Я чего только не перепробовал, и биос обновил, и ОС другую накатил, и fastboot вырубил. А знаете как всё решилось? Надо просто было выключить комп, отсоединить питание, ЗАЖАТЬ НА 30 СЕКУНД КНОПКУ ВКЛЮЧЕНИЯ и снова включить комп
Я просто в шоке, честно говоря, после мака, где, сука, всё работает из коробки
Ну ничего, так если в целом посмотреть, то я доволен новым компом :D
На работе задачи никогда не уходят в тестирование, пока их не посмотрит другой разраб (лучше даже не один)
В связи с этим надо как-то благодарить коллег, тратящих своё время на ревью
Не придумал ничего лучше, чем кидать всратые картинки в ответ на апрувы😃
В связи с этим надо как-то благодарить коллег, тратящих своё время на ревью
Не придумал ничего лучше, чем кидать всратые картинки в ответ на апрувы😃
😁5
Отпуск
Съездил в отпуск. Взял за свой счёт, потому что не отдыхал уже 3 года. Вроде как бы круто, море и всё такое, но в следующий раз только вдвоём с женой и не на юг :D
После отпуска пришёл, смотрю - накидана куча задач :( так себе начало работы, НО! Раскидался с ними очень быстро, то есть получается есть абсолютно реальный эффект от отдыха. Кто бы мог подумать :D
В прошлый раз я отдыхал дома, неделю проведя дома за приставкой, как раз ровно 3 года назад. С тех пор и думал, что отпуск бесполезен
В общем, отдыхайте почаще, желательно далеко от дома и от любых дел, которые могут хоть как-то напомнить привычный образ жизни
Съездил в отпуск. Взял за свой счёт, потому что не отдыхал уже 3 года. Вроде как бы круто, море и всё такое, но в следующий раз только вдвоём с женой и не на юг :D
После отпуска пришёл, смотрю - накидана куча задач :( так себе начало работы, НО! Раскидался с ними очень быстро, то есть получается есть абсолютно реальный эффект от отдыха. Кто бы мог подумать :D
В прошлый раз я отдыхал дома, неделю проведя дома за приставкой, как раз ровно 3 года назад. С тех пор и думал, что отпуск бесполезен
В общем, отдыхайте почаще, желательно далеко от дома и от любых дел, которые могут хоть как-то напомнить привычный образ жизни
❤3🔥1
Недавно озадачился своими скиллами, давно ничего не читал и не изучал
В связи с этим нашёл пару ресурсов, с которых начну снова процесс обучения:
1. Роадмап. Очень обширный, от джуна до сеньёра, с кучей ссылок. Есть ещё вот такой, о нём я уже слышал, тоже много ссылок и много тем
2. До этого мне далеко, но Как и куда расти инженеру, если он уже Senior
3. Интервью по System Design
4. У меня большие проблемы с пониманием шифрования, поэтому - КАК РАБОТАЕТ ШИФРОВАНИЕ? С НУЛЯ ЗА ЧАС
5. Разработка и проектирование высоконагруженных систем
6. Как правильно выбирать очередь
Если у кого-то есть полезные ссылки, то делитесь, буду рад
В связи с этим нашёл пару ресурсов, с которых начну снова процесс обучения:
1. Роадмап. Очень обширный, от джуна до сеньёра, с кучей ссылок. Есть ещё вот такой, о нём я уже слышал, тоже много ссылок и много тем
2. До этого мне далеко, но Как и куда расти инженеру, если он уже Senior
3. Интервью по System Design
4. У меня большие проблемы с пониманием шифрования, поэтому - КАК РАБОТАЕТ ШИФРОВАНИЕ? С НУЛЯ ЗА ЧАС
5. Разработка и проектирование высоконагруженных систем
6. Как правильно выбирать очередь
Если у кого-то есть полезные ссылки, то делитесь, буду рад
GitHub
GitHub - bzick/oh-my-backend: Что нужно знать бэкенд-разработчику web-приложений. Backend Roadmap (from Junior to Senior).
Что нужно знать бэкенд-разработчику web-приложений. Backend Roadmap (from Junior to Senior). - bzick/oh-my-backend