
23 непростых вопроса для JavaScript-собеседования

User
Или как обзавестись красивыми бейджиками для своего проекта за один вечер ненапряжного кодинга
Наверное, у каждого разработчика, имеющего хотя бы один пет-проект, в определённый момент возникает зуд на тему красивых бейджиков со статусами, покрытием кода, версиями пакетов в nuget… И меня этот зуд привёл к написанию этой статьи. В процессе подготовки к её написанию я обзавёлся вот такой красотой в одном из своих проектов:
В статье будет рассмотрена базовая настройка непрерывной интеграции и поставки для проекта библиотеки классов на .Net Core в GitLab, с публикацией документации в GitLab Pages и отправкой собранных пакетов в приватный фид в Azure DevOps.
В качестве среды разработки использовалась VS Code c расширением GitLab Workflow (для валидации файла настроек прямо из среды разработки).
Название ENTRYPOINT
всегда меня смущало. Это название подразумевает, что каждый контейнер должен иметь определенную инструкцию ENTRYPOINT
. Но после прочтения официальной документации я понял, что это не соответствует действительности.
Проекты развиваются, клиентская база увеличивается, базы данных разрастаются, и наступает момент, когда мы начинаем замечать, что некогда простые манипуляции над базами данных требуют более сложных действий, а цена ошибки сильно повышается. Уже нельзя за раз промигрировать данные с одного столбца в другой, индексы лучше накатывать асинхронно, добавлять столбцы с default
значениями теперь нельзя.
Одной из команд, с которой надо быть осторожным на таблицах с большим количеством записей, является добавление not null constraint
на столбец. При добавлении данного constraint
PostgreSQL приобретает access exclusive lock
на таблицу, в результате чего другие сессии не могут временно даже читать таблицу; затем БД проверяет, что в столбце действительно ни одного null
нет, и только после этого вносятся изменения. Под катом я рассмотрю различные варианты, как можно добавить not null constraint
, лоча таблицу на минимально возможное время или даже не лоча ее совсем.
check constraint
на таблицу, а затем "преобразовать" его в not null constraint
для конкретного столбца.pg_attribute
(этот пункт подробно разбирается в статье).Задался вопросом размещением массивов и слайсов на стеке, подобно std::array в C++ и массивам в Си. Про стек хорошо написал Vincent Blanchon в статье Go: How Does the Goroutine Stack Size Evolve?. Винсент рассказывает про изменения стека в горутинах. Резюмируя:
Выясню сколько можно положить на стек и какой оверхед может с собой принести.
Exchange
— обменник или точка обмена. В него отправляются сообщения. Exchange
распределяет сообщение в одну или несколько очередей. Он маршрутизирует сообщения в очередь на основе созданных связей (bindings
) между ним и очередью.
Exchange
не является Erlang-процессом. Из соображений масштабируемости exchange
— это строка (ссылка на модуль с кодом, где лежит логика маршрутизации) во встроенной базе данных mnesia. 1 тысяч обменников будут потреблять всего 1МБ памяти.
На глаза попалась не особо позитивное сравнение Java vs GO. Тестирование большим числом пользователей.
Решил проверить, действительно ли так все не радужно с Go.
Забегая вперед скажу, что при кэшировании в памяти и формировании JSON "на лету" удалось получить до 120 000 [#/sec] на 8 физических ядра.
Базовый сценарий GET запроса:
Под катом результаты тестирования, и код тестового стенда GitHub
Повилась возможность протестировать в облаке Oracle.
Привет, Хабр.
Недавно я поделился опытом о том, какие параметры мы в команде чаще всего используем для Kafka Producer и Consumer, чтобы приблизиться к гарантированной доставке. В этой статье хочу рассказать, как мы организовали повторную обработку события, полученного из Kafka, в результате временной недоступности внешней системы.
Современные приложения работают в очень сложной среде. Бизнес-логика, обернутая в современный технологический стек, работающая в Docker-образе, который управляется оркестратором вроде Kubernetes или OpenShift, и коммуницирующая с другими приложениями или enterprise-решениями через цепочку физических и виртуальных маршрутизаторов. В таком окружении всегда что-то может сломаться, поэтому повторная обработка событий в случае недоступности одной из внешних систем — важная часть наших бизнес-процессов.
Меня зовут Андрей Рыбалка, я участвую в Russian AI Cup под ником lama и я снова расскажу вам, как не выиграть макбук. Благо, я в этом человек опытный — вот этими вот руками не выиграл уже целых 7 штук.
Итак, задачей этого года был платформер/2D-шутер, для которого нужно было написать бота. Выглядела игра вот так:
Бот выглядел так:
Если вам интересно, как картинка #2 играла в картинку #1, прошу под кат.