Обновить
1
Дмитрий Зворыгин@zvorygin

Пользователь

Отправить сообщение

У нас были настроены и метрики а алёрты и балансировщики нагрузки, а в итоге получилась смешная и страшная ситуация:

  1. Клиент присылает запрос на огромное количество данных.

  2. Сервер падает с OutOfMemoryException, но пишет дамп на диск. Но увы не успевает записать логи из-за буферизации.

  3. Клиент не получает ответ и отправляет запрос снова, который благодаря load balancer кладёт уже другой сервер.

  4. Сервера по очереди поднимаются и регистрируются на load balancer, но клиент продолжает их класть один за другим. Каждый heap dump сжирает 64 гигабайта на диске.

В итоге выгрузили один из дампов памяти, нашли в нём плохой запрос, нашли клиента, попросили его так не делать - потому что других протоколов на тот момент не было.

Ну и как postmortem

  1. Настроили приложение даже не пытаться обрабатывать запросы которые требуют аномально большого объёма памяти

  2. Настроили параметры JVM чтобы дампы памяти писались в один и тот же файл и переписывали друг друга.

В сервисе что сейчас пишу - логи пишутся на отдельный раздел, и в худшем случае останемся без логов на какое-то время.

С одной стороны - хорошо, а с другой стороны - как скоро появятся Microsoft-специфичные PDF-файлы, которые только Edge и умеет отображать?

Например, если брокер обанкротится, потеряет лицензию или будет испытывать финансовые сложности, его клиенты не пострадают – использовать активы клиентов запрещено на законодательном уровне.

Например, если вы напились и заснули на улице, у вас ничего не украдут - воровать запрещено на законодательном уровне.

Очень интересно было читать эту статью сразу после https://habr.com/ru/post/460901/


И я думаю что "на работе" никому никогда не надо было понимать как работают регулярные выражения, и разницу между НКА и ДКА. И многие комментаторы из прошлой статьи на вопрос "как работает сборщик мусора регулярное выражение", обиделись бы и ушли со словами что на работе это не нужно. Но тут компании Cloudflare повезло, что в штате есть люди которые понимают стоимость выражений вида ...=. и считают что программисту полезно это знать.

Ну тогда не стоит удивляться что плохой код можно тестировать только с помощью костылей.

Идеальный вариант (если позволяет время и бюджет) сначала переписать этот код и покрыть тестами, затем добавить флаг и покрыть флаг тестами.

Я думаю что у каждого есть свой говнокод, который без костылей не протестировать. Применять ли тут паттерн «паблик морозов» я не знаю. Стоит ли рассказывать как тестировать говнокод с помощью костылей я тоже не знаю)
Есть мнение что плохой код сложно тестировать. В данном случае код плохой и он был плохим ДО добавления флага.

Почему есть метод Start() но нет метода Stop()? Зачем странно используемый lockObject?

Если всё это исправить(ну и многое другое) и сделать аккуратно и красиво то после 3) вызывается синхронный Stop() после которого проверяются все побочные эффекты
Он отбрасывается, но у него по-прежнему есть parent commit. На него теперь никто не ссылается, но он сам то указывает! И из reflog его всегда можно восстановить.
Отличная статья. Спасибо!
Как я понимаю, в картинке под фразой «Вот как будет выглядеть ваше дерево после soft reset и нового коммита» пропущена стрелочка от зеленого кружка к красному.
Видел несколько раз следующий код с ненужным промежуточным collect. Часто получается в процессе рефакторинга.

List<T> temp = collection.stream().filter(...).map(...).collect(Collectors.toList());
... some unrelated to "temp" stuff...
List<T> result = temp.stream().filter(...).map(...).collect(Collectors.toList());        


Вместо

List<T> result = collection.stream().filter(...).map(...).filter(...).map(...).collect(Collectors.toList());

В свое время, когда надо было отлавливать много всяких событий мыши — mouseover, dragover и т.д., просто запускал свое приложение под отладчиком на виртуальной машине, и подключался к нему снаружи. Тогда было легко ходить по шагам и делать что угодно, при этом приложение думало что мышь не двигается.
Следует уточнить, что для индексов используются не то что понимается под B-tree, а B* или B+ -tree. В обычных B-tree информация может храниться в узлах дерева, а в B+ — только в листьях, что дает некоторый простор для оптимизаций.
Обычно размер узла подбирается так, чтобы он был равен одной странице ввода/вывода(или нескольким 2/4/8).
Есть префиксные деревья, которые могут помочь решить эту задачу.
А почему не хранить все в копейках, а конвертацию в рубли производить только на границе с UI через MoneyFormatter какой нибудь?
А в чем проблема с SHA512? В случае с мытьем посуды — если я каким-то образом добыл NIST private key и умею менять SEED, то я просто перебираю SEED-ы пока не получится нужный мне результат(с вероятностью 50% он будет получаться на каждой итерации).

Если посуду выпало мыть мне — увеличиваем SEED на единицу и пропускаем через мясорубку. Если снова выпало мне — то продолжаем и.т.д.
Для этого необходимо и достаточно чтобы преподаватель информатики в школе заранее озаботился(лась) и позвал(а) кого-нибудь на этакий открытый урок. Не всем везет с «проактивными» учителями информатики.

Впрочем, никто не мешает Вам, прочитав методические пособия на сайте, рассказать все своему ребенку.
Я правильно понимаю, что автор, сейчас, скорее всего — в десятом классе?

А можно узнать, что именно мотивировало «попробовать» свое дело? Далеко не каждый день восьмиклассники начинают бизнес.
Было скучно в школе? Мало денег на карманные расходы? Восхитился чьим-то примером?… Мне кажется, что одной книжки вовремя попавшейся на глаза очень мало.
И что? Я показывал на примере «снежинки», которую вы сейчас привели… задания просто для примера даны были на всех сайтах — можно было и самому что-то делать, но
1) я не был готов настолько заморачиваться,
2) я не был уверен что придумаю, что-то такое же хорошо продуманное и интуитивно понятное для детей.
Я принял участие в «Часе кода» сегодня.

Официальный сайт — code.org/, а www.coderussia.ru/ — просто немного более локализованная версия, как я понимаю(так что грусти за страну я тут ни в коем случае не испытываю). На code.org предлагается несколько упражнений, которые помогут детям средних классов быстро немного «попрограммировать», и там есть не только blockly — на одном из этапов предлагался «Kodu», и другие способы «программирования мышкой».

Мне очень понравилось. Детям понравилось тоже, насколько я мог понять. Времени хватило: 10 — минут немного о том что программирование это круто, и послушать что на взгляд детей нужно знать программисту и чем они занимаются на работе, а остальное — на прохождение упражнений. Некоторые успели пройти все 20 простых упражнений(простые действия + циклы — без переменных и без условных переходов)

Из проблем — стандартные технические — медленные школы, IE старой версии + Windows XP на некоторых компьютерах — в итоге на них не работал игровой тренажер + дефицит внимания(а может просто дети сильно увлеклись).

Из забавного — почти все дети вводят адрес сайта (code.org) не в верхнюю строку, а в строку поиска яндекса/гугла, в зависимости от того, что открылось изначально.

Вот короткое видео — plus.google.com/u/0/+DmitryZvorygin/posts/9sJ3FBSRokZ?pid=6090800450396070818&oid=104646068542741988030

Я очень благодарен 11-й гимназии которая меня пригласила.

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность