Ответы пользователя по тегу Java
  • Где выучить Spring Framework?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Сильно зависит от background. Если автор заходит в Spring с улицы - то ему придется учить все в том числе SQL, ORM, Web, MQ. Это очень плохо и это ставит под сомнения обучение Spring.

    Если автор уже имеет опыт разработки веба к примеру, то хороший старт - брать старые приложения и адаптировать их под Spring.
    Ответ написан
    Комментировать
  • Регулярное выражение (RegExp): как сделать проверку на корректность введённой суммы?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Не нужно все задачи сваливать на регулярку. Регулярка видит семантику символьной последовательности.
    Арифметческие смыслы - такие как диапазон, больше или меньше, это все - мимо кассы. Это задача для
    целых и вещественных чисел а не для символов.
    Ответ написан
  • Как глубже вникнуть или систематизировать знания по java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Расскажи какие вещи ты уже делал на Java в реальных задача.
    Любое обучение или систематизацию всегда лучше привязать к живым а не искусственным задачам.
    К примеру если ты писал авто-тесты и есть задача - ускорить их финал - то тут можно изучать многопоточку
    принительно к авто-тестам.

    Изучение многопоточности например на выдуманных задачах обычно не приносит никакой пользы. Ученики все равно не поймут для чего нужны секции синхронизаии и атомики и все равно не поймут в каких случаях использовать то или это.
    Ответ написан
    Комментировать
  • Могу ли я параллельно изучать языки программирования?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Можно. Я так делал.
    Ответ написан
    Комментировать
  • Почему не могу обратится к методу?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    А зачем сделал static?
    Ответ написан
  • Верное регулярное выражение для полинома. Как образом?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Воспользуйся онлайн чекером здесь https://regex101.com/
    Ответ написан
  • Как определить простое число для решения задачи из проекта Эйлера?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Эффективно циклами определяются лишь небольшие числа. До мильярдов. Полным перебором. Криптография обычно берет вероятностные тесты наподобие Миллера-Рабина. Они работают очень быстро и тестируют сверх-длинную арифметику (по 256-512 бит) но дают ответ как-бы с очень большой вероятностью. 99.99... %. Но тем-не менее такие числа вроде-бы пригодны для алгоритмов ЭЦП.

    Тоесть я-бы спросил - а что будет дальше с этим числом. Куда оно пойдет?
    Ответ написан
    Комментировать
  • В чем проблема не корректного исполнения запроса ROOM?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    А так?

    public class Stages {
        ......
        public int ID;
        public String DESC;
    
        @Override
        public String toString() {
            return "Stages{" +
                    "ID=" + ID +
                    ", DESC='" + DESC + '\'' +
                    '}';
        }
    }
    Ответ написан
    8 комментариев
  • Каким образом можно найти отрицательные чиссла в массиве Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Это задачка из всяких коде-варс и литкодов. И ее иногда спрашивают на собесах.
    Ее можно решать многими способами, но наиболее наглядный - это сортировать массив
    и далее искать шагая слева и справа одновременно и сравнивая значения.
    Ответ написан
    Комментировать
  • Как дублировать элемент внутреннего массива в двумерном массиве?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Масствы в Java - достаточно статичные и жесткие чтобы их растягивать. Обычно создают новый массив нужного размера (в твоём случае это удвоенный размер) и старые данные копируют с удвоением.
    Ответ написан
    Комментировать
  • Имеется ли разница в мобильном Java приложении между double и int в JSON ответе?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Вобщем вики пишет по поводу самого стандарта JSON:
    Number: a signed decimal number that may contain a fractional part and may use exponential E notation, but cannot include non-numbers such as NaN. The format makes no distinction between integer and floating-point. JavaScript uses IEEE-754 double-precision floating-point format for all its numeric values (until later also supports BigInt[24]), but other languages implementing JSON may encode numbers differently.


    Вобщем получается что стандарту пофиг. И интерпретацию числа он отдает на откуп программным средствам.
    И мне кажется что Андроид здесь вообще не при делах. Это слишком общее понятие. Гораздо важнее какой JSON-парсер вы используете в коде. Всего парсеров - огромный вагон. Но я вот регулярно использую 2 из них.
    - Google GSON.
    - Jackson
    Вот попробуйте распарсить ваш документ с использованием г-сона и джаксона и посмотрите что будет на выходе. Там почти всегда рекурсивное дерево из таких шаблонов LinkedHashmap[String,Object] где вместо обжекта будет стоять то что вы ищете.
    Ответ написан
    4 комментария
  • В чем разница между HttpServer и HttpServlet?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Сервлет это Java-аналог cgi-скрипта. Сервлет - архаизм. Древний и достаточно бесполезный. Хотя в стеке технологий веба вы еще часто можете его видеть везде где есть такие контейнеры как JBoss, Tomcat, Web-Sphere. Все они понимают сервлет как актор который может обслуживать GET/POST/PUT запросы и что-то возвращать.

    В современных технологиях шаблонизаторов сервлет уже является ненужным звеном и его можно выбросить. Для асинхронного веб-сервера netty ЕМНИП сервлет тоже не нужен.
    Ответ написан
  • Существует ли какая- та тула, плагин или просто сервис который бы помогал улучшить код.?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Я полностью поддерживаю использование УЛУЧШАТОРОВ типа SonarQube, PMD и прочие которые просто позволяют указать мне на явные ошибки типа potenrial null pointer de-referencing.

    Но вот в части - написать по другому - я-бы сказал что это открытый вопрос. Ставить ТЗ нельзя так чтобы "сделать на выходе хоть что-нибудь". При таких критериях мы получим просто рандомный шум который тем не менее компилируется. Типа "бей посуду - я плачу". Но автору такое не надо.

    Тогда давайте зададим вопрос. А что собсно надо автору? Приведу пример который я часто использую. Решения задач на codewars. Они разные. Но обычно в топе висят 2-3 штуки которые поражают своей краткостью и различностью парадигм. Например в топе висит одно решение с хвостовой рекурсией а другое с циклом. И я не могу решить которое мне больше нравится. Нравятся оба. Но скорее всего при разработке code beautifier я-бы не стал вообще копать 2 направления. Достаточно было-бы просто поставить задачу сделать код меньше. Я думаю что все согласятся что меньше строк - меньше надо будет скроллить вниз. Особенно эти дело любят Джависты. Как накидают своих бинов с геттерами-сеттерами ойойой. 80% кода - нечитаемый шлак. Ну да ладно. А насколько меньше? Есть обфускация. Это сознательне выпиливание смыслов из всех идентификаторов. Вобщем переменные можно называть $1,$2 e.t.c. и это тоже работает. Но ... согласитесь это путь в никуда.

    Поэтому. Чтобы улучшать мы должны САМИ задать вектор улучшения. Парадигмы например. Мы хотим код тяготеющий к функциям или к объектам с методами? Мы хотим код с детальным дебагом (каждый оператор в своей строчке) или нам пойдет исходник как у Джона Кармака. Весь С++ исходник в 1 длинную строку. Мы хотим код на конечных автоматах? Или на комбинаторах? Мы хотим больше перформанс но хуже читаемость (вспоминаем знаменитую Кривую Шипилёва) или наоборот?

    Вобщем думайте над вектором улучшения.
    Ответ написан
    Комментировать
  • Какой смысл команды dup в JVM байт коде? И что за индексы локальных переменных?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Какой смысл команды dup в JVM байт коде?

    Жаль что ты не программировал на калькуляторе МК 60. Это целая эпоха.

    Значит есть разные пути к вычислению арифметики. Например если тебе надо возвести в квадрат число 5 на регистровой машине - то ты должен загрузить регистр R1 числом. Потом регистр R2. И потом найти такую команду умножения которая свяжет регистры R1 и R2 и перемножит и сохранит еще где-то результат. В силу современного зоопарка процессоров практически нереально создать такой абстрактный байткод который бы эффективно отображался на опкоды разных железяк. Поэтому решили забить на регистровую машину. И использовать стек как хранилище операндов для операций. Разумеется в JVM есть и аналоги регистров но с ними не выполняются операции. ЕМНИП. Если хошь что-то сложить или вызвать функцию - то положи на стек и там-же получи результат. И если вернуться к возведению числа 5 в квадрат это может быть так

    положить 5 на стек.
    дублировать
    вызвать функцию умножения


    На каком-нибудь языке Forth это было-бы тремя командами
    5 DUP * .
    Результат - на вершине стека.

    Это кратко записывается. Но это несет абсолютно ту-же смысловую нагрузку для арифметики.

    Почему их только 256 может быть?

    А чорт его знает. Так решили. Решили что 256 регистров это капец какой максимум для процедуры или функции. Послушай ради интереса видосы про процессор Эльбрус. Там тоже интересно с регистрами сделано.

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

    Я думаю что твое предположение о том какой код соберет JIT не совсем верное.
    Вместо спора я предлагаю взять какой-то тестовый сценарий и подсмотреть какой
    будет собран код. Я знаю что скептики Java обычно после изучения вопроса глубже
    меняют свою точку зрения. Ну по крайней мере перестают считать Java
    "медленным покемоном". Java действительно была слоупоком во времена Jdk 1.1.
    Но щас это не так.

    Несколько лет назад я мерял производительность floating-point вычислений на приложении
    которое рендерит зеркальные шары. И разница между С++ и Java была не сильно большая.
    10 секунд на сях и 12 секунд на втором языке соотв. Хотя этот тест узкий и он просто
    показывает частный случай.
    Ответ написан
    4 комментария
  • Возможно ли загрузить .jar файл в реальном времени с помощью JNI?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Автор посмотри системные переменные. System.getProperties() там полно всякой информации по текущему процессу. В том числе текущий директорий, и много другой полезной информации. Это поможет ответить на вопрос где лежит твой бинарник. А именно полный физический путь к файлу.

    Как скачать это - целая цепочка вопросов и ответов например КУДА качать и ОТКУДА. Ведь по вопросу непонятно где ты сам находишся в этом стеке технологий. Поэтому когда задаешь вопрос - дай хотя-бы обзор твоей технологии. Графическое приложение AWT/Swing/SWT/JavaFx. Веб-приложение. Stand-alone процесс. Апплет ( :)).
    Ответ написан
    Комментировать
  • Что случится после смерти кэша?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Я хочу закэшировать на 50 минут.

    Неправильно. Не ты определяешь это время. Если это JWT-токет то ты можешь просмотреть его тело. Парсеры есть. Там внутри будет указано точное время когда он сдохнет. Обычно за несколько минут до смерти ты снова дёргаешь сервер токенов и просишь новый токен.

    С guava cache я не работал. Но это не имеет значения. Основной flow не меняется. Хранить его в базе тыщу лет или убивать сразу - дело хозяйское. Для протокола не имеет значения что ты делаешь со старыми трупами токенов. Тут главное новый получить.
    Ответ написан
  • Какой язык или технологию осваить после Java Spring framework?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Имеет смысл расти вширь. Тоесть изучать технологии виртуализации Docker/Kubernetes, сети, протоколы и особенности ОС linux (на которой я предполагаю все что ты пишешь будет работать). Имеет смысл понимать как работает тонкая диагностика linux чтобы решать performance issues. Я убежден что большинству Java-разрабов этого знания не хватает.

    Kotlin изучать я считаю не имеет смысла. JSP процессы улучшают Java язык таким образом что Kotlin не сильно будет отличаться в будущем.

    Scala - язык с очень высоким порогом входа и вряд-ли для микро-сервисов тебе что-то новое принесет. Это - скорее к BigData или к специфичным фреймворкам (Play). Ну ... или нужно быть очень сильным фанатом ФП чтобы разрабатывать на Scala то что вобщем-то и так прекрасно разрабатывается на Java.
    Ответ написан
    Комментировать
  • Что значит описать встретившуюся геометрическую фигуру и определить положение точки в этой фигуре?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Задача решается довольно просто. Это булевы операции над углами и окружностями.
    В данной задаче сложностью является следующие вопросы
    1) Как ЗАДАНА окружность?
    2) Как задан угол?
    3) Как задан квадрант? Или прямая. Или полу-плоскость.
    После того как мы узнаем это - сможем легко описать цветовую область. Например голубой сегмент окружности описывается как:
    - пересечение окружности с полу-плоскостью
    или
    - пересечение двух полу-плоскостей
    Ответ написан
  • Стоит ли читать Философия Java в переводе на русский язык?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Если это Брюс Эккель - то я читал ее в 2013 году. Тогда хорошо зашла. Но я не знаю насколько книга актуальна для современной Java. После того как сообщество перешло на такой бешеный темп создания релизов - то книги стали устаревать быстрее.
    Ответ написан
    6 комментариев
  • Как написать метод который принимает строку, преобразует ее и возвращет строку?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В задаче есть 2 смысла. Первое это собственно алгоритмизация. Показать преподавателю как вы умеете декомпозировать задачу на примитивные шаги. И показать оптимизации. StringBuilder к примеру. И второй смысл - просто решить задачу например используя JavaStreams. Это будет красивее. Компактнее. Но показать алгоритмизацию будет неудобно.
    Ответ написан
    3 комментария