Задать вопрос
Ответы пользователя по тегу Java
  • Какой курс Java выбрать новичку с нуля?

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

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    С помощью Java

    ProcessBuilder.start()

    ты можешь вызывать скрипт операционной системы (bash или Windows CMD) и если
    у текущего пользователя хватит прав то ты можешь увидеть результат работы df например
    $ df
    Filesystem      1K-blocks      Used Available Use% Mounted on
    none              8061940         4   8061936   1% /mnt/wsl
    .....

    потом забрать этот результат через stdout и далее парсить результат в Java.
    Ответ написан
    5 комментариев
  • В каком контексте значение класса String является неизменяемым в отличии от StringBuilder?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Почему все методы StringBuilderнельзя было поместить в класс String, чтобы не плодить классы строк?

    Главный поинт при создании immutable String - безопасность кода. Когда компиллятор точно
    знает что value строки не изменится - то он может доказать много кейсов и гарантировать что
    разделяемая память не будет сломана. Особенно это важно для мультипоточки. Когда
    разные потоки владеют строкой и здесь сам вопрос доказательства вдруг становится очень важным.

    Язык С++ например такой защитой не обладает и для него строка как фундаментальный тип
    может иногда мутировать. Тоесть если вы старались писать правильно то она конечно не мутирует.
    Но в этом есть большая разница между C++ и Java. На уровне платформы гарантировано отсуствие
    какого-то класса ошибок.

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

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

    Immutable строки - это гениальное изобретение. Оно реализовано во многих языках и платформах
    и оно практически спасает разработчика бизнес-приложений от трудно уловимых ошибок.
    Ответ написан
    2 комментария
  • Как работают транзакции в Spring?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Не все режимы изоляции поддерживаются целевой DBMS.
    DEFAULT(-1),
        READ_UNCOMMITTED(1),
        READ_COMMITTED(2),
        REPEATABLE_READ(4),
        SERIALIZABLE(8);

    Перечисление Isolation взято из умных теоретических книжек. Но Oracle к примеру поддерживает
    только READ_COMMITED и SEAIALIZABLE.

    И что ему делать если вы заказали READ_UNCOMMITED ? Поэтому я-бы сказал что Spring делегирует
    гарантии по изоляции к целевой системе.
    Ответ написан
    Комментировать
  • Как правильно обрабатывать SQLException?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Скорее всего коды SQL ошибок зависят от DBMS. Например я по старой памяти помню что если
    в коде вы видите ORA-00001 то вы скорее всего используете Oracle и ваша ошибка
    связана с нарушением Primary KEY во время INSERT/UPDATE.

    Другие DBMS (Postgres/MySQL) будут иметь другие коды ошибок.
    Ответ написан
    3 комментария
  • Как перевести этот блок if в математическую функцию?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В математике есть разные способы задания функций.
    Можно задать таблично. Например явно перечислить

    x   |  y
    ..  | ...
    8   | 30
    9   | 30
    10  | 50
    11  | 50
    ...

    Это используется в криптографии для внутренних замен внутри раунда в шифрах.

    Можно описать функцию как набор булевых функций и минимизировать их по Карно или Квайну
    для достижения какой-то минимальной формы. Это - тоже вполне себе метод.

    x1,x2.....x32   |  y1...y32
    ----------------|------------
     00 1010        | 01 1110
      .....         | 11 0010
                    | 11 0010


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

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Релизная сборка (jar/war/ear) может отличаться по составу файлов от того что видит IDE. Может конфиг собрался не туда.

    Сделай
    <configuration debug="true">
    и процесс инициализации Logback станет более подробным и смотри что он напишет.
    Ответ написан
    6 комментариев
  • Почему C# не кроссплатформенный?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Если почитать обучающий портал A tour of the C# language
    https://learn.microsoft.com/en-us/dotnet/csharp/to...
    то там вообще нигде не пишут про кросс-платформенность.

    Мне кажется что этот миф пошел из обсуждения что платформа .Net создавалась MS в противовес
    Java чтобы иметь конкурентное преимуществое для чисто своей Windows-разработки но при этом
    обеспечить удобства (Managed Memory, CLR e.t.c).
    Ответ написан
  • Почему пропускатеся return в одном из методов Enum-класса?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Предположительно идет на вход не та кодировка. Попробуй заменить на "male" / "female" и все будет ОК
    Ответ написан
    Комментировать
  • Какая зависимость в Java приложении к подключению БД?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    1. Java (JDK/JRE) не содержит в себе драйверов доступа к БД вообще. В ней определен только базовый
    интерфейс java.sql.* и существует некий стандарт на то как драйверы должны работать. Например когда мы делаем ResultSet::close, или Statement::close, драйвер может ничего и не делать в этот момент. Все зависит от того
    как производитель (Oracle, MSSQL) реализовал под капотом работу драйвера. Поэтому как работает внутри драйвер это - тайна.

    2. Обычно если в приложении тебе часто и много нужно создавать объектов Connection, то используют пулы коннектов (Hikari Connection pool, DBCP, C3PO). Почитай в этом направлении. Пулы экономят сессионные
    объекты на стороне БД и создают новые коннекты быстрее за счет переиспользования сущесвтующих коннектов.
    В обычном (прямом режиме) работы с БД процесс установки соединения может занимать несколько секунд.
    Это может быть запредельно медленно для некоторых алгоритмов.

    3. В сложных ent. приложениях используются фреймворки типа Spring которые декларируют зависимости одник
    компонент от других
    и также обеспечивают ленивую инициализацию и работу синглтона. Всем новичкам
    нужно знать что такое синглтон и уметь им пользоваться. И лучше уметь это сначала без фреймворка
    чтобы понимать уже как это делает фреймворк.
    Ответ написан
  • Как изменить программу во время выполнения?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Переключение функционала с одного на другой обеспечивается с помощью ООП шаблонов
    например RCWP (Replace Condition With Polymorphism).

    А если нужно на ходу обновлять версию - то посмотри в документацию по ClassLoader и почитай
    еще про технологию OSGI.
    Ответ написан
    Комментировать
  • Java. Преобразователь артефакта. Как очистить проект от module-info.class?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    На самом последнем stage (я думаю gradle это позволяет) тебе надо просто добавить еще один
    шаг - очистка артифакта от Java9 modules. Я-бы это сделал в простом случае просто распаковкой
    артифакта во временный фолдер. Удалением файлов модулей и упаковкой обратно.

    Что то вроде.
    jar x .... -d target/temp  
    find -type f -name module-info.class -delete
    jar c ....
    Ответ написан
    6 комментариев
  • Как компилировать jar в exe?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Есть проект GraalVM. В нет большая часть этих задач решена. И я для себя делал утилиты на java которые
    работают в data pipelines. Но проект GraalVM имеет спектр ограничений. Почитай. Возможно не любой
    код он сможет правильно собрать.

    Использовали мы также graal для сборки AWS Lambda. Но это был сложный опыт. Я никому не советую повторять.

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

    Короче это не панацея.
    Ответ написан
    1 комментарий
  • Как генерировать случайное число типа double с двумя символами после запятой?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Можно генерить случайное целое число с запасом в 2 разряда. А потом кастить в double и делить на 100.

    Но ты должен помнить что double - это сложный формат и он не мапится на десятичную систему 1:1
    Обычно многие это забывают и ловят артефакты.
    Ответ написан
    Комментировать
  • Как отвечать на данные вопросы на собеседовании?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Почему Map не реализует интерфейс Collection? Я сказал что у Collection сигнатура методов не подходит для мапы, на что получил еще один вопрос "Так почему бы, например, вместо put(key, value) не использовать add(new Entry(key, value))?

    Я не знаю кто-ж такие вопросы задает. Это вобщем не инженерные а философские вопросы.
    Можно предположить что добавление в Map - возвращает булевый результат. И мы
    по логике правильного программирование не имеем права его игнорировать.

    Про отпуск - вообще непонятно. Ну скажи дексыть всегда готов. Когда выходить. Нужна сменка? Флюрография?
    Ответ написан
    Комментировать
  • Как POJO влияет на производительность приложения?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Сделай listDataRu, listDataEng синглтоном и ничего не будет нагружать.
    Ответ написан
    3 комментария
  • Как сделать методы класса доступными только для одного класса?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Когда тебе хочется странного, то нужно заново пересмотреть дизайн этого UserService и DAO
    с точки зрения SOLID. Если этот DAO нигде не существует то может быть он вообще не нужен
    как сущность. Сделай композицию или рефакторинг чтобы у тебя был только UserService.
    Ответ написан
  • Как правильно создать БД в одном execute?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Обычно БД создается во время процессов CD/CD через технологии liqubase/flyway.
    Таблицы тоже. В этом есть смысл потому что БД и таблицы это такие долго-живущие объекты
    и кроме того не лежащие в плоскости транзакций. Они - выше транзакций и их надо логически
    отделять от прочего java кода. А в java коде - оставить insert/update/delete.
    Ответ написан
    5 комментариев
  • Где найти org.hibernate.boot.MetadataSources jar file?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Подключай зависимости из проекта Hibernate отсюда https://mvnrepository.com/search?q=hibernate
    до тех пор пока зависимость не будет удовлетворена.
    Ответ написан
    Комментировать