Ответы пользователя по тегу Java
  • Почему появляется такая ошибка?

    @red-barbarian
    Потому что бывает когда все равны
    Ответ написан
    Комментировать
  • Что плохого в моем коде тестового задания на java?

    @red-barbarian
    Навскидку с телефона.
    Пользуйтесь интерфейсом когда нужно описать правила взаимодействия с объектом. Абстрактным классом когда можно выделить некие общие моменты из классов.
    Т. Е конденсатор это интерфейс. Как там храниться значение в цифрах это вопрос реализации. Хоть в текстовом поле. Но это может меняться и поэтому должно быть отделено.
    Т. Е. Наследование лучше от интерфейса.
    2. Дублирование кода
    Если случайное число =...
    init
    set
    add
    Иначе
    init
    set
    add
    ...
    INIT отличается, но set add одни и те же.
    На то и обьктное наследование чтобы это выделять.
    Ответ написан
    Комментировать
  • Как можно оптимизировать данный код сортировки в Java?

    @red-barbarian
    У Вас есть в Компараторах две части
    1. сравнение с нул
    2. сравнение неких полей.
    сравнение с нул дублируется. это уже плохо. нужно выносить за пределы этих двух классов.
    сравнение двух полей однотипно. т.е. взяли некое поле и сравнили его компареТу. тоже похоже дублируются.

    Можно сделать свой компаратор, но с параметром -
    будет примерно так
    sort(new MyDeviceComparatorOn(Device::getIn))
    Ответ написан
    5 комментариев
  • Как прокачать навык разработки архитектуры информационной системы?

    @red-barbarian
    Получить знания можно из книг. Получить навыки только из опыта.
    В частности, сделать архитектуру, получить рабочую модель. Затем внести изменение. Понять сколько времени и сил стоит это изменение. Понять как малейшее изменение может вызвать каскад по всей программе. Понять как изменение в чём-то ломает все на другом конце программы. Почитать что написал через три месяца. Понять почему важно разбивать на модули и правильно наименовать.
    Показать другим, понять что писать нужно максимально просто как для человека с топором.
    Ну потом можно почитать про SOLID и гибкую разработку. Про TDD. Прочитать шаблоны и зачем они. Если начинать с книг, то риск что шаблоны только усложнят систему.

    Архитектура не бывает правильной. Первая цель что бы работала. Вторая легко сопровождалась.
    Ответ написан
    Комментировать
  • Как перемножить 2 потока (Stream API)?

    @red-barbarian
    Посмотрите flatMap.
    Внутри его сделайте перемножение строки на второй стрим
    Ответ написан
    Комментировать
  • Подключение библиотек в java?

    @red-barbarian
    У каждой библиотеки должн быть одинаковый интерфейс. Наследоваться от единого интерфейса.
    Загружать библиотеку по имени
    getClass().forName(name)
    Имя можно брать из настроек.
    Смотрите в сторону
    Рефлексии и проч.
    Ответ написан
  • Лучше хранить результаты запроса в оперативной памяти, или каждый раз заново делать запрос к БД?

    @red-barbarian
    для начала, есть части системы
    Вьюхи
    Контроллеры
    Бизнеслогика (какая-никакая)
    База данных.
    По теме: жесткая связь бизнес логики и базы данных всегда чревато. Желательно разделить их прослойкой. Например неким репозиторием. Объект(ы) который будет давать те данные которые нужны.

    Далее. Для вьюх в FX нужны ObservableList. Это листы и Observable. Т.е. с наименьшими затратами по работе. Мы будем работать с листами в памяти. Такую модель и строим.
    В прикидку приложение fx занимает 40мб. Ну база для примера столько же. Вполне нормально.

    Далее. Если база меняется. Мы меняем только репозиторий и то что относиться к базе. Логика и вьюхи не меняется.
    Если база настолько огромная что не помещается. То мы делаем свой класс с интерфейсом interface ObservableList extends java.util.List, Observable. Который будет динамически лазить в базу.
    Или меняем представление так, что бы работать с кусками данных, а не с целыми таблицами.

    Т.е. прослойка позволяет отложить вопрос об эффективности использовании памяти на потом. С минимальными затратами.

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

    @red-barbarian
    У Головача есть хорошие лекции. Одна по такой теме.
    https://youtu.be/j0Ad02f95eE?list=PLwcDaxeEINadGe-...
    Ответ написан
  • Как правильно сделать выборку из листа?

    @red-barbarian
    map = list. stream().collect(groupingBy(Db::getForm)) ;
    Если на 8 уже.
    Ответ написан
    4 комментария
  • Как вывести текст с кириллицей из файла?

    @red-barbarian
    new InputStreamReader( new FileInputStream(filename), "cp1251"))
    Явное указание кодировки.
    Ответ написан
    Комментировать
  • Что такое JUnit тесты и с чем они проводятся?

    @red-barbarian
    Просто поучительный пример.
    Вам нужно протестировать класс. Что это значит? Протестировать его поведение, хотя бы основное. Т.е. желательно все методы которые могут использовать. Как у черного ящика. (скрытые не тестируем и можно не тестировать getter&setter).
    Как это сделать?
    Вы добавили один метод getFurst(). Вероятно, для тестирования. Но первым элементов не должна ограничиваться проверка. Поэтому нужен скорее метод getItem(int); Это приводит к изменению интерфейса вашего класса (замена не нужного метода нужным)
    Сделали изменения, протестировали. Ок.
    Далее пишете тест на insert. Несколько. И в конце у вас выскакивает исключение. Индекс превышает размер массива. Опа. Вы должны либо явно описать этот случай в документации (генерацию исключения), либо что-то еще сделать. Указать пользователю на этот скользкий случай.

    Далее. Есть метод display
    Как его протестировать автоматически? Никак. Это наводит на мысль "что-то не так". Не так, скорее потому, что этот метод не должен быть в этом классе. класс занимается сортировкой. Выводом на экран должен заниматься другой класс. Если вдруг понадобиться поменять вывод, то вам придется ковырять класс который уже работает и протестирован. И вы будете лапать снова весь код, с риском дернуть что-то что скрыто поменяет корректную работу.
    Дисплей в другой класс.
    итак. убрали getFirst. display. добавили getItem.
    класс хорошо тестируется. и более удобный интерфейс.
    Т.е. вывод из всего: Тестируемость класса зависит от хорошего интерфейса. Требует этого.
    Пригодный к тестированию класс практически всегда (чаще всего) это класс который будет легко использовать. Класс который трудно протестировать, чаще всего трудно будет использовать.
    Примерно так.
    Конкретно по теме.
    Просто по коду тестов, вопросов нет. Вопрос про тестирование класса.
    Ответ написан
    6 комментариев
  • Можно ли получить термин слова с помощью wikipedia api?

    @red-barbarian
    https://en.wikipedia.org/wiki/Special:ApiSandbox#...
    https://en.wikipedia.org/wiki/Special:ApiSandbox#action=query&format=json&prop=revisions&titles=java&rvprop=content

    action=query
    titles=java
    Ответ написан
    Комментировать
  • Как решить задачу?

    @red-barbarian
    если интересует алгоритм, то можно сделать конечным автоматом.
    Ответ написан
  • Есть ли хорошая краткая книга по JavaFX?

    @red-barbarian
    если есть английский, то мне понравилась Kishori Sharan - Learn JavaFX 8 (The Expert's Voice in Java)
    Ответ написан
    Комментировать
  • Какой java framework посоветуете для gui?

    @red-barbarian
    если не напрягаясь и из коробки, то javafx.
    ваш вопрос слишком общий. Для чего?
    например если нужна нативность, то говорят swt. (но разработка чревата депрессивными приступами))))
    Ответ написан
    Комментировать
  • Обрабатывает ли ExecuterService потоки на нескольких ядрах?

    @red-barbarian
    посмотрите https://youtu.be/W82D9eUn6q8?list=LLmQvzzT2ZgTt1MZ...
    возможно, оно для начинающего сложное, но интересное.
    По вашему вопросу:
    там были разные подходы к построению параллельных вычислений (с разными классами)
    все они дали примерно одни и те же результаты (почти все )))
    результат такой на n-ядерном процессоре скорость вычисления растет с количеством потоков вычисления до количества n. затем останавливается.
    Это говорит, что все реализации (классы потоков, экзекьютеров и проч) используют много ядерность. Кстати повторить эти опыты можете сами. Это довольно легко.
    Конечно это зависит от виртуальной машины (jvm), но думаю почти все они используют многоядерность.
    Ответ написан
    Комментировать
  • Почему выводится не то что нужно (Ввод вывод данных)?

    @red-barbarian
    записываем int, bool, str
    читаем str, byte
    надо что-то такое
    @Override
        public Person readPerson() throws IOException {
            int age = src.readInt();
            boolean notNull = src.readBoolean();
            String name = null;
            if (notNull) name = src.readUTF();
            return new Person(name, age);
        }
    Ответ написан
    Комментировать
  • Актуальная книга по паттернам проектирования для джависта?

    @red-barbarian
    вообще, рекомендации ставшие стандартом
    Эрик Фримен, Элизабет Фримен - Паттерны проектирования (Head First O'Reilly)
    - простая, веселая книга. Настолько, что ее часто за это ругают.
    Гранд М. - Шаблоны проектирования в Java
    - книга для java- программистов.
    Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования.
    GoF, Банда четырех. называют. Это библия. Цитата из нее это Истина в последней инстанции. Эталон. Главный и окончательный довод. ))) Но она с текстами на c++. Самая тяжелая. Смахивает на научную работу.
    Если получается, то читать Gof. Если туго, то java. Если нет, то HF.
    Ответ написан
    Комментировать
  • Знание многих ЯП или профессионализм в одной разработке?

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