🧑‍💻 Публічне інтерв'ю: Java, рефакторинг, логування

Поделиться
HTML-код
  • Опубликовано: 29 сен 2024
  • 👉 Github курсу: github.com/How...
    👉 Канал курсу в телеграмі: t.me/HowProgra...
    👉 NodeUA в телеграмі: t.me/HowProgra...
    👉 Група в телеграмі: t.me/metaedu
    👉 Зміст курсів: github.com/How...

Комментарии • 13

  • @uamaxua
    @uamaxua 21 день назад +1

    Прикольне інтерв'ю, схоже на приємну бесіду, а не екзамен

  • @dmitriybraginets6750
    @dmitriybraginets6750 3 месяца назад +2

    Приємне інтервʼю. Виглядає та відчувається як бесіда двох скілових спеціалістів.

    • @TimurShemsedinov
      @TimurShemsedinov  3 месяца назад +1

      Не знаю, чому багато ставлять дизлайків, бо поруч інтерв'ю дівчини з першого курсу, теж по Java, так воно краше заходить

    • @TimurShemsedinov
      @TimurShemsedinov  3 месяца назад +1

      ruclips.net/video/nQ8I4e3n6CI/видео.html

    • @klirmio21
      @klirmio21 3 месяца назад

      ну, ви не порівнюйте Тимура з цим хлопцем)

  • @nazariceman6109
    @nazariceman6109 3 месяца назад

    стосовно принципів логування: можна немало розказати, що саме, де, як, коли, і з якою деталізацією

  • @artem_travlo
    @artem_travlo Месяц назад

    супер ❤

  • @recycle-bin-camp
    @recycle-bin-camp 3 месяца назад

    35:08 акції банку впадуть коли побачать що там гівнокод (думаю так)

  • @OleksandrKucherenko
    @OleksandrKucherenko 3 месяца назад

    Правила логов:
    - логуем не класс, а датафлоу юзкейсу
    - все записи в логе должны иметь коррялиционный АйДи, по которому легко искать, часто используют айди сессии
    - операции заканчиваются в случае успеха месседжем "Success, ..."
    - операции которые заканчиваются ошибкой, пишутся с месседжем "Error, ..."
    - все експешены должны содержать коррелейшен айди, часто или в тескст ексепшена или отдельным датаполем
    - выделяем две под структуры для лог лайн, одна которая индексуется, вторая которая не индексируется (metadata & payload)
    - используем разные уровни логирования для контроля уровня "вербозити"/спама в логах
    - не допускаем лик персональной и секьюрити информации в логи (маскинг, ексклуды, триминг)
    - строим логи от логики: "а какие метрики мне надо мониторить?", это задает структуру где писать логи и какие именно.
    - логеры еще могут именноваться (известно как таг, категория, тип логера)
    - исключаем из логов любые вычесления, это должен быть максимально простой дата дамп с мессагой
    - используем строки форматеров/шаблонные строки, не занимаемся конкатинацией строк
    - используем враперы/обертки которые инджектят типичные паттерны: вход/выход/валидация/ексепшен хендлинг
    - перехватываем ексепшены, и юзеру показываем только дженерик описание с кодом корреляции

    • @OleksandrKucherenko
      @OleksandrKucherenko 3 месяца назад

      - логов должно быть достаточно для повторения операции юзера в тестовой среде
      - вербозити логи - практически бесполезно, можно использовать только для полного дампа данных
      - логи должны конфигурироваться переменной окружения, которую легко менять в рантайме (без перезапуска инстанса)
      - можно использовать первую мессагу метода для дампа в виде копи/пасте кода для запуска метода... аля нашел строку в логах скопипастил в терминал, запустил - и сразу повторил операцию юзера на своем тестового енвайронменте
      - использовать "ноутбуки" аля юпитера для работы с логами (в датадоге например есть свои ноутбуки), где по-шагово выписываешь логику выгребания из логов полезную информацию
      - если система постоянно меняется, то выгодно иметь "версию" логера (аля хеш, привязанный к гит-коммиту использованного для релиза)
      - из обязательных полей в контексте логов, должен быть идентификатор инстанса (енвайронмент, регион, айди инстанса, айди джоба)
      - ну и конечно не забываем про то что время во всех полях должно быть в одном формате

    • @sergsapov2927
      @sergsapov2927 3 месяца назад

      Еще добавлю:
      - Периодически делайте рефакторинг логов. Смотрите где и как можно сократить количество текста. Это влияет на когнитивную сложность анализа логов. Сокращайте общеупотребимые термины. WRN вместо WARNING, ERR вместо ERROR.
      - Длинные операции должны в конце показывать затраченное время. В моем движке для этого есть методы вида:
      id = log.begin(...)
      ...
      log.end(id, ...).
      Есть отдельный класс который фиксирует переходы между состояниями и показывает длительность:
      30.07.22 18:36:35 [gsm] Start => WaitCreg (4430 ms)
      30.07.22 18:36:44 [gsm] WaitCreg => Setup (9630 ms)
      30.07.22 18:36:45 [gsm] Setup => Started (360 ms)
      - Для фильтрации по подсистемам добавляйте в начало строки лога префикс подсистемы, у меня это выглядит так:
      30.07.22 18:36:30 [eth] WARN: Eth pref.on = 0
      30.07.22 18:36:30 [gsm] Start...

    • @sergsapov2927
      @sergsapov2927 3 месяца назад

      Еще применяю отступы табом для форматирования вложенных операций, например:
      [rule 0] LOOP '{cycle(2) $v2={{$v2}+1}} {cycle(3) $v3={{$v3}+1}}
      [rule 0] '{cycle(2) $v2={{$v2}+1}}'
      [rule 0] '$v2={{$v2}+1}' => '$v2=3'
      [rule 0] '$v2={{$v2}+1}' => '$v2=4'
      [rule 0] '{cycle(3) $v3={{$v3}+1}}'
      [rule 0] '$v3={{$v3}+1}' => '$v3=4'
      [rule 0] '$v3={{$v3}+1}' => '$v3=5'
      [rule 0] '$v3={{$v3}+1}' => '$v3=6'

    • @OleksandrKucherenko
      @OleksandrKucherenko 3 месяца назад

      @@sergsapov2927 это больше к андройду подходит, а для бекенда логи на прямую уже почти никто не смотрит, все через системы аггригации логов, аля кибана/хаоссерч и т.п.
      Потому надо отличать логи локальные от логов серверных. Локальные всегда с большой вербозити, чем серверные