• Что такое обратный вызов в программировании?

    andreydobrin
    @andreydobrin
    Сложно , но это пока
    Все очень просто:
    Вы правильно сказали, что это функция, передающаяся как аргумент в другую функцию:
    пример с js
    function  first(callbak){
    ----здесь пишем код функции----
    ---- здесь можно записать код "функции обратного вызова" 
    и она сработает тогда, когда выполнится функция first()----
    }

    Простым языком - есть одна функция и у нее в параметре другая. Сперва выполнится сама функция, а потом та, которая является аргументом этой функции.
    Ответ написан
    Комментировать
  • Callback и listener?

    zagayevskiy
    @zagayevskiy Куратор тега Kotlin
    Android developer at Yandex
    Listener(слушатель) это callback(обратный вызов), ждущий наступления некоего события. То что ты используешь лямбду вообще никаким образом не связано с потоками, с тем, кто перед кем вызовется. Когда вызовешь, тогда и будет.
    Listener и Observer это вопрос терминологии и наименования. Слушатель и обозреватель. По сути одно и тоже.
    Ответ написан
    Комментировать
  • Почему потоки в Java ведут себя так неочевидно?

    EugeneP2
    @EugeneP2
    Java Dev
    Для создание потока нужно определенное время и для его работы должно быть выделено процессорное время.

    Метод Thread.start() не ждет создание потока, а сразу же отпускает поток вызвавший его.

    Основной поток Main уже создан и выполняется, потому он срабатывает быстрее.

    Egg - не демон-поток, потому джава будет ждать его завершения, т.е. вывода на экран "EGG !"
    Ответ написан
    Комментировать
  • Как запускать 10+ потоков в java без повторяемости кода?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Как-то так....
    ArrayList<Thread> mythreads = new ArrayList<Thread>();
    int tcount = 1000;
    for(int i=0; i< tcount; i++) {
         Thread thr = new myThread();
         mythreads.add(thr);
         thr.start();
    }
    for (Thread thr : mythreads) {
         thr.joint();
    }

    или по модному
    ExecutorService es = Executors.newCachedThreadPool();
    for(int i=0;i<5000;i++)
        es.execute(new Runnable() { /*  your task */ });
    es.shutdown();
    boolean finshed = es.awaitTermination(1, TimeUnit.MINUTES);
    Ответ написан
    Комментировать
  • Как работают потоки в Java?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    join() блокирует родительский поток до тех пор, пока не завершится поток для которого вызван join(). Собственно, именно потому, что после вызова join() родитель не идёт дальше, он и не завершится раньше.
    Для иллюстрации попробуйте в вашем Calculate вставить бесконечный цикл, а после thread.join(); - System. out.println("joined");

    На тему кода - всё ок, кроме того, что не учтён InterruptedException, который может выбросить join
    Ответ написан
    5 комментариев
  • Приведение к типу интерфейса: какой смысл?

    Вы не понимаете механику полиморфизма и виртуальных вызовов.

    Интерфейс - это окно, через которое вы смотрите на реальный объект. Механизм позднего связывания, а именно - виртуальных функций - позволяет вам иметь ссылку типа ISome, которая, тем не менее, ссылается на РЕАЛЬНЫЙ объект с РЕАЛИЗАЦИЯМИ методов интфейса ISome, и вызывать эти методы через интерфейс.

    Обратите внимание - компилятор не позволит вам написать new ISome; (можете попробовать), т.к. невозможно инстанциировать интерфейс. Это всего лишь договор о взаимодействии, и для того, чтобы взаимодействие произошло, нужно чтобы этому договору подчинялись какие-либо реальные объекты.

    Когда вы приводите тип ссылки от SomeObject к ISome, сама ссылка НЕ МЕНЯЕТСЯ (по кр. мере вы этого не увидите), переменная нового типа ссылается на ТОТ ЖЕ САМЫЙ объект, а не на "блок методов". Ссылки всегда указывают на конкретные объекты, невозможно сослаться на "блок методов", не имеющий реализации, язык так не работает. Суть интерфейсов в том, что они соединяют в себе идею позднего связывания и строгую типизацию одновременно. Используя ссылку типа ISome вместо SomeObject, вы как бы смотрите на тот же объект через другое "окно", и видите у него другой набор методов. Это важнейший этап в процедуре абстрагирования - найти у объектов похожие черты, и реализовать ряд алгоритмов на этой основе. Как вы и сами уже заметили - единообразно работать с объектами разных типов.
    Ответ написан
    1 комментарий
  • Новости с категориями, нужна вторая нормальная форма SQL?

    flapflapjack
    @flapflapjack
    на треть я прав
    Есть новости. У новостей есть категории.


    Просто создайте столбец category_id в таблице с новостями и всё. Зачем еще одна таблица?

    P.S.

    Третья таблица имеет смысл, только если одной новости может быть назначено сразу несколько категорий, по аналогии с тегами на тостере.
    Ответ написан
    1 комментарий
  • Нормализация БД. Зло или добро?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все зависит от контекста высказывания (задачи разные бывают). Бросаться в крайности это глупо (только ситхи все возводят в абсолют (с) Оби)

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

    p.s. уточните о чем был проект или скиньте ссылку, любопытно посмотреть на безумца или понять его хотя бы.
    Ответ написан
    Комментировать
  • В чем принципиальное отличие второй нормальной формы от третьей?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вторая форма ликвидирует зависимости неключевых полей от части ключа.
    Третья нормальная форма исключает зависимость неключевых полей от других неключевых полей.
    Ответ написан
    Комментировать
  • Чем отличается вторая форма нормализации от третьей?

    Третья нормальная форма не допускает наличия транзитивных зависимостей.

    Допустим, у нас есть БД автосалона. Имеется отношение Автомобиль(СерийныйНомер, Модель, Цена). Имеется зависимость СерийныйНомер -> Модель (т.е. для каждого авто мы всегда точно знаем модель этого авто). Также, так как у нас фирменный автосалон, а не продажа подержаных авто, цена автомобиля зависит только от его модели (т.е. все новые авто одной и той же модели будут стоить одинаково, всякие комплектации в расчёт не берем). Т.е. имеется зависимость Модель -> Цена.

    Т.к. по серийному номеру мы можем определить модель, а по модели - цену, то цена также зависит от серийного номера: СерийныйНомер -> Цена. Однако эта зависимость транзитивная: цена зависит не непосредственно (!) от СерийногоНомера, а от Модели. Следовательно, это отношение не находится в третьей нормальной форме (хотя находится во второй). Для приведения отношения в 3НФ его нужно разбить на два - МодельАвтомобиля(СерийныйНомер, Модель) и ЦенаМодели(Модель, Цена).

    Следует заметить, что если бы предметная область определяла бы иные зависимости, то и рассмотренное отношение могло быть в другой НФ. Например, если бы у нас все-таки продавались подержаные автомобили, и цену на каждый из них мы бы устанавливали отдельно, то зависимости Модель -> Цена уже б не было, а была бы прямая (нетранзитивная зависимость) СерийныйНомер -> Цена, и отношение подходило под критерии третьей нормальной формы.
    Ответ написан
    Комментировать
  • Что такое нормализация базы данных простыми словами?

    sarapinit
    @sarapinit
    Точу водой камень
    БД нужна чтобы хранить утверждения о состоянии информационной системы.
    Ситуацию в которой утверждений о состоянии какой-то части системы больше чем одно мы считаем дублированием информации. (У вас эта ситуация называется "избыточность").
    Если есть дублирование информации, то возможна ситуация когда утверждения могут противоречить друг другу. В этом случае БД неконсистентна и информационная система может работать некорректна.
    Нормализация БД - устранение дублирования информации в БД с целью достижения консистентности, в первую очередь. Нормальные формы - это шаги которые нужно пройти на пути к консистентности (делай раз, делай два ...)
    Побочным эффектом нормализации является уменьшение размера БД.
    В случаях когда производительность важнее консистентности, выполняют денормализацию БД (внесение избыточности) под определённые запросы, чтобы избежать объединений таблиц (JOIN).
    Ответ написан
    2 комментария
  • Зачем нужны функциональные интерфейсы в java?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Для лямбд - это правильный ответ.
    Создатели джавы не осилили(постеснялись/посчитали ненужным/etc) сделать отдельный кусок синтаксиса для нормального описания функциональных типов, вместо этого сделали так, что интерфейс можно смаппить в лямбду, если у него(интерфейса) ровно один абстрактный метод. Собственно, все эти BiFunction, Predicate, ToLongBiFunction и прочие вырвиглазности - это костыли, чтобы ты мог лямбды передавать куда-то. Их, конечно, не хватит, и придется объявлять свои костыли с подходящей сигнатурой.
    Всё это обвесили аннотацией @FunctionalInterface, чтобы компилятор мог ругаться, что ты делаешь ошибки при объявлении функционального интерфейса. Правда, здорово?(нет).
    Ответ написан
    Комментировать
  • Зачем нужны функциональные интерфейсы в java?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Функциональный интерфейс - это не что-то техническое, что реализуется в языке или виртуальной машине. Это просто абстракция, которая была в Java всегда.

    Java задумывалась как исключительно объектно ориентированный язык, поэтому функций в ней никогда не было и нет. Всё поведение располагается в методах. Но для обработчиков событий, например, нужно только поведение, но не состояние, поэтому объект "оборачивающий" метод бесполезен. Обычно обработчик выглядел так:
    someButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            someTextField.setText("Кнопка нажата");
        }
    });

    ActionListener имеет функциональный интерфейс. То есть интерфейс с одним методом, как бы заявляющий "я не класс, я функция".

    В Java 8 просто появились способы более удобно работать с функциональными интерфейсами - в языке появились лямбды, у виртуальной машины появились средства, позволяющие генерировать из лямбд классы с функциональным интерфейсом, а в стандартной библиотеке появился пакет java.util.function, содержащий набор универсальных функциональных интерфейсов, позволяющих передавать и возвращать лямбды между методами в коде разных разработчиков.
    Ответ написан
    1 комментарий
  • Есть ли где-то современный туториал по Spring?

    piatachki
    @piatachki
    Спринг содержит столько проектов, что одним туториалом не обойдёшься. Если автор только начинает осваивать Spring, то рекомендую обратиться к старому циклу вебинаров Евгения Борисова, начать со спринг-потрошителя, там базовая инфа о жизненном цикле бинов и принципах работы контейнера. дальше ютьюб подскажет. Концепции с тех не поменялись. А одного туториала, как следует охватывающего весь фреймворк быть не может. Инфа - 146%.

    Ну и официальная документация. Без неё никуда.
    Ответ написан
    2 комментария
  • Есть ли где-то современный туториал по Spring?

    Chvalov
    @Chvalov
    Из русскоязычного YouTube вот что нашел:
    В основном все каналы новые, популярностью не блещут, по возможности поддержите лайком чтобы у автора появилось желание продолжать ;)

    Разработка REST сервиса уроки будут пополнятся

    Разработка веб сайта с использованием Spring Boot ...

    Spring MVC уроки

    GrabDuck! - Spring Boot

    Микросервис на Kotlin, Spring Boot и Docker

    Devcolibri - S4AA - Сервер для Android приложения
    Ответ написан
    Комментировать
  • Хронология изучения spring и в частности boot и rest. Для чего используют Spring Boot?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Boot - это просто автоконфигуратор и запускалка, позволяющий не писать конфигурацию контекста вручную и не разворачивать приложение на сервере приложений.
    Ответ написан
    Комментировать
  • Какие хэш-функции сейчас наиболее часто применяются?

    SagePtr
    @SagePtr
    Еда - это святое
    MD5 - скомпрометирован
    SHA1 - безопасен, но есть атаки, позволяющие создать несколько документов с одинаковым хэшем, отличающиеся только одним блоком посерёдке
    SHA256 - пока что безопасный, TLS-сертификаты нынче используют его в качестве хэш-функции (раньше использовался SHA1)
    Ответ написан
    2 комментария
  • Логика кодирования Base64?

    @Karpion
    Base64 кодирует каждые три байта (24 бита) исходного файла в четыре символа из числа тех, которые проходят текстовую обработку заведомо корректно; количество таких символов, очевидно, равно 64 (шесть бит).

    Автор функции пользуется тем, что некоторые символы идут непрерывно. Если бы интервалов непрерывности было больше, то проще было бы сделать табличное преобразование.
    Ответ написан
    Комментировать
  • Не понимаю паттерн MVC. Что почитать/посмотреть?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как всегда, набежало "специалистов"-попугаев, повторяющих заученные фразы, но так и не понявших ни что такое сам паттерн, ни вопроса, который был задан.

    Хотя ответ очень простой и первый вопрос автора даёт очень простую подсказку.

    Вся суть эмвэцэ в том, что это всего лишь интерфейс. Штепсель. Розетка, через которую твое приложение подключается к веб. Веб-интерфейс твоего приложения.

    То есть к самому приложению, если подумать, отношения не имеет.

    И из понимания этого простого факта становится ясно, зачем нужен контроллер - в нем и происходит это самое соединение. Веб запросы транслируются в обращения к модели. А ответ модели - в красивые веб странички, в чем помогает Вью

    При этом модель - это не убогий интерфейс к таблице в бд, как думают все попугаи. А собственно все приложение и есть. Это ещё называется бизнес-логикой.

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

    Ответ с картинками и видео с ютюбе https://qna.habr.com/answer?answer_id=1475989#answ...
    Ответ написан
    1 комментарий
  • Шаблоны проектирования - с чего начать знакомство?

    Compolomus
    @Compolomus
    Комполом-быдлокодер
    Ответ написан
    Комментировать