• В поиске первой работы програмистом, предлагают бесплатную стажировку. Соглашаться?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Народ тут накинул на вентилятор, попробую раскидать по фактам: Варианта на самом деле 3, но мы сведем к очевидным 2:
    1) Вы ищете первую работу в стеке, из опыта у вас приложение ТуДуЛист и Хеловорлд.
    Такое предложение как минимум подарок, как максимум большая удача. Подарок если вам просто дадут поколупаться в серьезном проекте и покажут как работает команда в целом. Большая удача если при этом у вас будет вменяемый ментор и ревьювер, а кода писать вам дадут много. Для конторы это скорее всего в минус, но если у вас все пойдет норм, то к концу срока вы в любом случае уже будете тянуть на джуна. Даже если после этого вы расстанетесь, опыт штука которая навсегда останется с тобой, в крайнем случае вы в первый месяц можете спокойно свалить, если видите что вам там ничего не светит в плане роста. Короче кейс - "надо брать".

    2) Вы уже работали со стеком, знаете как работать с основными инструментами и работали с проектами посложнее чем в первом варианте.
    Если еще и в конторе с какой-никакой командой, то вообще другой коленкор. В данном случае спокойно отказывайтесь, если вам жалко 3 месяца нахаляву работать. Опять же, неплохо было бы хотя бы узнать что в эти 3 месяца вы будете делать забесплатно, возможно ли перейти сразу к фазе 2 в случае вашей очевидной компетенции и т.д., короче есть смысл разговаривать ртом. Короче кейс - "надо поговорить".

    третий вариант по сути нечто среднее, но опять же сводится к 2 - надо говорить.
    Ответ написан
    3 комментария
  • Как избавляться от ненужных записей в бд?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если использовать такие БД как DymanoDb, CosmosDb, Cassandra или кеш Redis, то там сразу
    можно создавать записть с отметкой TTL и указывать сколько времени запись будет актуальна.
    Впоследствии эту отметку можно продлить или сделать живщуей вечно.

    По поводу реляционок типа Postgres.

    В хранении ненужных записей я не вижу проблемы до тех пор пока вы в состоянии такие
    токены идентифицировать и почистить отдельно с помощью джоба который запускается
    раз в сутки например и просто удяляет их по признаку например "состояние ожидания
    ввода числа из СМС". Трекайте это состояние и все будет ОК.
    Ответ написан
    Комментировать
  • В Windows tomcat подключается к MySQL без проблем. Когда переношу проект на удаленный сервер, под управлением Ubuntu - не работает, почему?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    "База работает" - это значит, что вы на Убунте можете сделать mysql -h 127.0.0.1 -u root -p - и вас пустит в консоль с паролем root?

    Вообще, так как вы, уже не делают. "Локально работает" сто лет как означает, что разработчик запускает тот же самый docker-compose.yaml на своём компе - вот тогда имеет смысл говорить о работоспособности. А когда разные ОС, разные версии библиотек и так далее - это баловство. Причина может быть в ста местах.
    Ответ написан
    2 комментария
  • Как сказать «ничего не делаем» используя условные операторы?

    @nApoBo3
    Continue

    Но вообще считается "дурным" тоном использовать не "основное" поведение внутри if.
    Ответ написан
    Комментировать
  • По какому принципу работает очистка памяти в String Pool?

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

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Если язык совсем не важен, то есть языки более пригодные для мета-программирования, например в Scala есть макросы, с помощью которых можно такое реализовать, а в Clojure и того проще. Если же ориентироваться на указанные в вопросе теги, то в Java можно написать плагин компилятора, который в процессе компиляции может с помощью Compiler API разбирать исходный код в AST, анализировать полученное дерево и на его основе генерировать новый исходный код.
    Ответ написан
    Комментировать
  • Как работают транзакции в 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 делегирует
    гарантии по изоляции к целевой системе.
    Ответ написан
    Комментировать
  • Почему IDEA выделяет красным присутствующие библиотеки?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Попробуйте в идее сделать file -> invalidate caches
    Ответ написан
    1 комментарий
  • Почему не создается файл логирования из артифакта?

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

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

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

    @Everything_is_bad
    что для REST серверов лучше Node не найти
    это твой главный неправильный вывод, лучший будет тот, который написан на технологии, которую лучше всего знает исполнитель.

    Например стриминговый сервер или сервер для чата, он же относится к разряду типичных запрос/ответ
    еще одна большая ошибка, вообще всё смешал в кучу, "стриминговый" это больше про максимальный pull c сервера, "чата" это про полноценный обмен в обе стороны, а "запрос/ответ" это про базовый http и он для этих обоих случаев, очень невыгодная стратегия, поэтому для них в http написаны свои частные протоколы, например, websocket для нормальной реализации чатов.
    Ответ написан
    5 комментариев
  • Разница между Callable и DeferredResult?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Зачем нужен чат-гпт, когда есть документация?

    DeferredResult provides an alternative to using a Callable for asynchronous request processing. While a Callable is executed concurrently on behalf of the application, with a DeferredResult the application can produce the result from a thread of its choice.
    Subclasses can extend this class to easily associate additional data or behavior with the DeferredResult. For example, one might want to associate the user used to create the DeferredResult by extending the class and adding an additional property for the user. In this way, the user could easily be accessed later without the need to use a data structure to do the mapping.
    An example of associating additional behavior to this class might be realized by extending the class to implement an additional interface. For example, one might want to implement Comparable so that when the DeferredResult is added to a PriorityQueue it is handled in the correct order.


    По факту заметил, что с DiferredRestult могу указывать сам пул потоков, а с Callable нет.

    Грубо говоря, да, разница в этом.
    Ответ написан
    Комментировать
  • Как остановить поток?

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

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    А что тут не понятно?
    1. Все потоки быстро запустились, вызвали tryAcquire и, т.к. он не блокирующий, тут же вызывается Thread.Sleep() на всех потоках - поэтому в первом случае в конце видны Thread-x-released (все потоки закончили работу). Время выполнения всего приложения -
    2. Все потоки постепенно захватывают семафор, т.е. ждут пока предыдущий его освободит и только потом засыпают. Уже тут время выполнения - 1с * (кол-во потоков / 2)

    P.S. Не забывай вызывать Thread.join после запуска!
    Ответ написан
    Комментировать
  • Как проинициализировать по умолчанию переменную?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    class Scratch {
    
        public static void main(String[] args) {
            var a1 = new A();
            var a2 = new A(10);
    
    
            System.out.println(a1); // A{a=5}
            System.out.println(a2); // A{a=10}
        }
    }
    
    class A{
        int a = 5; // default
    
        public A(int a) {
            this.a = a;
        }
    
        public A() {
        }
    
        @Override
        public String toString() {
            return "A{" +
                    "a=" + a +
                    '}';
        }
    }
    Ответ написан
    Комментировать
  • Как проинициализировать по умолчанию переменную?

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

    А что поднятие одним файлом всех контейнеров, всех сетей, и всех волюмов, с последующим освобождением всего одновременно уже не является достаточным преимуществом? Да ещё и без конфликта имён
    Ответ написан
    Комментировать
  • Как компилировать jar в exe?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Во-первых, в 2023-м, как и во все предыдущие годы, и во все последующие, делать такого не надо. Если хотите распространять свой софт в виде платформозависимого бинарника, выбирайте соответствующий язык.
    Во-вторых, чтобы можно было без проблем открыть на другом ПК, можно в бинарник не компилировать. Уже лет шесть, как в составе JDK есть утилита jlink, позволяющая собрать приложение вместе с JRE и стартовыми скриптами.
    Ответ написан
    9 комментариев
  • Как POJO влияет на производительность приложения?

    Sputterspark
    @Sputterspark
    Как POJO влияет на производительность приложения?

    POJO - это аббревиатура Plain Old Java Object, то есть в переводе - старый добрый java-объект. А значит ты спрашиваешь "Как язык Java влияет на производительность приложения".

    А поле listCountry при каждом обращении заполняется с файла.

    Вот что влияет. Читать с диска на каждый запрос - это максимально дурацкая идея.

    Чего бы не использовать родные для спринга средства интернационализации?
    Ответ написан
  • Чем собирать метрики API?

    xez
    @xez
    TL Junior Roo
    micrometer/prometheus -> grafana
    Ответ написан
    Комментировать