Контакты
Местоположение
Беларусь, Минская обл., Минск

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

Все теги (8)

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

Все ответы (19)
  • Многопоточность vs асинхронность?

    pazukdev
    @pazukdev
    Java Dev
    Многопоточность vs асинхронность

    Ресторан. Клиент заказал яичницу и гренки. 

    1. Синхронное выполнение: даем задание 1 повару. Он сначала делает яичницу. После того как она готова он приступает к гренкам.

    2. Асинхронное выполнение (многопоточность): даем задание 2 поварам. Они приступают условно одновременно. Один делает яичницу, второй гренки и оба конфликтуют из-за доступа к общим ресурсам (перцу, соли, сковородке).

    3. Асинхронное выполнение (1 поток): даем задание 1 повару. Он ставит на плиту яичницу и ставит таймер. Ставит гренки и тоже ставит таймер. Пока таймеры не сработали, чтобы не терять время, прибирает кухню. После того как сработают оба таймера - отдает заказ.
    Ответ написан
    Комментировать
  • Что такое монада?

    pazukdev
    @pazukdev
    Java Dev
    Монада - это абстракция над цепочкой связанных вычислений. Контейнер, который принимает текущее состояние и функцию, которая принимает это состояние в качестве аргумента и возвращает новое состояние. Этот контейнер инкапсулирует среду (контекст) выполнения вычислений с учетом возможных исключений; на выходе только ожидаемые значения. Вобщем, just a monoid in the category of endofunctors (c).
    Ответ написан
    Комментировать
  • Правильно ли я понимаю работу защищенных протоколов?

    pazukdev
    @pazukdev
    Java Dev
    Вы можете безопасно обмениваться данными с кем-то только в том случае, если у Вас обоих есть общий ключ для их шифровки и расшифровки, о котором больше никто не знает. Проблема в том, как сделать так, чтобы он оказался у вас обоих, но при этом никто его не узнал. Т.е. как передать ключ по открытому каналу не скомпроментировав его. Ассиметричное шифрование как раз вот про это.

    Алгоритм этой операции такой:

    1. Сервер передает клиенту публичный ключ по незащищенному соединению.

    2. На основе публичного ключа сервера клиент создает разделяемый (общий) ключ, сохраняет его у себя.

    3. Клиент шифрует свой разделяемый ключ и в зашифрованном виде передает серверу.

    4. Сервер расшифровывает зашифрованный разделяемый ключ c помощью своего приватного ключа и получает разделяемый ключ у себя.

    Ассиметричное шифрование свою задачу выполнило - handshake состоялось. Далее клиент и сервер имея разделяемый ключ могут обмениваться уже симметрично зашифрованными данными.
    Ответ написан
    Комментировать
  • Как описать в коде, чтобы выбирался нужный кейс по введённому слову в консоль Java?

    pazukdev
    @pazukdev
    Java Dev
    Если фомулировка "чтобы выбирался нужный кейс" предполагает использование именно конструкции switch, то:

    double area;
    try (Scanner sc = new Scanner(System.in)) {
        String command = sc.nextLine();
        switch (command) {
            case "square":
                area = getSquareArea();
                break;
            case ... // дальше сами    
        }
    }
    Ответ написан
    Комментировать
  • Как связаны Thread.join() и InterruptedException?

    pazukdev
    @pazukdev
    Java Dev
    1. Ставить catch блок нужно потому, что метод join() throws InterruptedException
    2. Метод join кидает InterruptedException в случае, если вызывающий его поток interrupted:
    Thread.currentThread().interrupt();
    t.join(); // will throw InterruptedException
    Ответ написан
    Комментировать