Пишу на: Java/Kotlin (Spring/Hibernate/Reactor), иногда PHP (Symfony/Doctrine, Yii2)
Знаю, но почти не использую: Javascript/Typescript (React, Vue, jQuery)
БД: Oracle, Postgresql

Инструменты: Gradle, Git, IDEA, Vim
Контакты
Местоположение
Россия

Достижения

Все достижения (24)

Наибольший вклад в теги

Все теги (160)

Лучшие ответы пользователя

Все ответы (346)
  • Компания просит уволиться из текущего места работы перед собеседованием, нормально ли?

    @Akela_wolf
    Extreme Programmer
    То есть вам они ничего не гарантируют, но хотят чтобы вы уже уволились? Скорее всего попытаются прогнуть на условия оплаты или (что вероятнее) на условия работы. Потому что вы уже уволились, работа вам нужна уже сейчас, а значит вы будете сговорчивее. Собственно это сразу показывает отношение к персоналу в данной конторе - нагибать и ставить ультиматумы. Поэтому, лично я бы после такого предложения не раздумывая сказал бы "до свидания. Хотя нет, прощайте"

    Нормальные компании не только не просят увольняться, но и, сделав официальный оффер (то есть пообещав заключить договор, а иногда даже уже заключив договор) согласны ждать 2 недели (а иногда и больше) пока сотрудник завершит дела на текущем месте работы и выйдет к ним. А не так: "вы увольняйтесь, а мы вас собеседуем. Может быть возьмем, может быть не возьмем, ничего не обещаем".
    Ответ написан
    2 комментария
  • Можно ли заряжать макбук зарядкой повышенной мощности?

    @Akela_wolf
    Extreme Programmer
    Мощность блока питания - это максимальная мощность, которую он может выдать. Если подключить к вашему БП (85 Вт) потребителя, который требует 100 Вт - блок питания не справится с такой нагрузкой (как конкретно это проявится - зависит от схемотехники БП)

    Если же к нему подключить 60 Вт (да хоть 5 Вт) - это будет означать только то что БП работает "вполсилы", у него остается запас мощности т.к. не БП определяет сколько он "впихнет" в потребителя, а, наоборот, потребитель определяет сколько он "заберет" у источника питания. Поэтому резерв мощности никогда не может навредить потребителю. Из этого же, кстати, следует что заряжаться макбук быстрее не станет.
    Ответ написан
    4 комментария
  • Разница между if else и try catch?

    @Akela_wolf
    Extreme Programmer
    Есть такой принцип: "если убрать все обработчики исключений, программа должна нормально функционировать при условии ввода корректных данных" (Д.Томас, Э.Хант "Программист-прагматик"). Поэтому вопрос - является ли введенный пользователем нуль корректными данными? Если да - то его надо оборачивать в if. Если же это некорректные с точки зрения программы данные - то можно кидать исключение.

    То есть исключение должно выбрасываться при поступлении на вход программы некорректных данных. А какие именно данные считать некорректными - это определяет разработчик (или заказчик) программы.
    Ответ написан
    5 комментариев
  • Правильно ли я понял принцип инверсии зависимостей?

    @Akela_wolf
    Extreme Programmer
    Главная идея принципа инверсии зависимостей "детали зависят от абстракций, но не абстракции от деталей".
    В приведенном вами примере класс Main зависит от всего: от интерфейса INumberOperation и от обоих классов NumberOperation1, NumberOperation2. То есть тут принцип инверсии зависимостей вообще не работает. Никак.

    Проявляется же он в следующем примере. Пусть у меня есть некая абстрактная логика "прочитай число, выполни над ним операцию, запиши результат". Эта абстрактная логика (потому она и абстрактная) ничего не должна знать ни откуда она читает число, ни какую операцию над ним выполняет, ни куда и как записывает результат. Таким образом, у нас есть модуль, состоящий из
    interface NumberInput {
      int read();
    }
    interface NumberProcessor {
      int process(int a);
    }
    interface NumberOutput {
      void write(int a);
    }
    class Processor {
      private final NumberInput input;  
      private final NumberProcessor processor;
      private final NumberOutput output;
    
      public Processor(NumberInput input, NumberProcessor processor, NumberOutput output) {
        this.input = input;
        this.processor = processor;
        this.output = output;
      }
    
      void process() {
        output.write(processor.process(input.read()));
      }
    }

    Все. Модуль получился очень абстрактным и ни от кого никак не зависящим.
    Затем мы можем сделать реализации этих интерфейсов - они будут зависеть от нашего модуля логики (так как ссылаются на интерфейсы). И это полностью соответствует принципу инверсии зависимостей - детали зависят от абстракций.

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

    Этот принцип очень хорошо объяснен в книге Р.Мартина "Чистая архитектура", по крайней мере у меня все встало на свои места именно после прочтения этой книги.
    Ответ написан
    1 комментарий
  • Как лучше поступить?

    @Akela_wolf
    Extreme Programmer
    Без математики (даже не столько математики, сколько без математического и логического мышления) в программировании делать нечего.
    Ответ написан
    7 комментариев

Лучшие вопросы пользователя

Все вопросы (9)