• Почему нельзя/можно писать бизнес-логику в sql?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    У каждого из подходов есть свои преимущества и недостатки.
    К недостаткам можно отнести:
    • Сложность отладки и тестирования
    • Затрудненная версионность
    • Зависимость от конкретной СУБД
    • Ограниченные возможности языка
    • Сложности с масштабированием
    • Возможные side-эффекты

    К преимуществам:
    • Уменьшение трафика
    • Цетрализованная логика
    • Безопасность данных
    Ответ написан
    9 комментариев
  • Не выводится ничего в VS code на Java?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Наверно, лучше всего сначала поискать. Например, по запросу system.out.println vscode первое, что мне вернул поисковик - это.
    Мне кажется, вы должны были уже попробовать всё это и затем прийти с вопросом: «я пробовал и так и эдак, результат такой; что я делаю не так?»
    Ответ написан
    1 комментарий
  • Не запускается Spring - приложение?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Вы используете spring-boot.
    Не нужно указывать версии hibernate. Совместимая версия уже указана в пэрент-поме спрингбута.

    hibernate-core версии 4.3.11.Final вышел в далеком 2015м во времена восьмой джавы.
    java 20 вышла в этом году.
    Вряд-ли они вместе заработают.

    Удалите эту зависимость:
    <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-core</artifactId>
          <version>4.3.11.Final</version>
        </dependency>
    Ответ написан
  • Как исправить ошибку подключения?

    hint000
    @hint000
    у админа три руки
    якобы много устройств законнектилось, куда копать?
    копать в сторону выяснения:
    1. правда ли, что соединений так много;
    2. если правда, то кто создаёт много подключений.
    (посмотреть открытые соединения на 192.168.1.14; их количество; все ли они с сервера 1С;
    посмотреть на сервере 1С соединения в сторону 192.168.1.14; их количество; какими процессами открыты соединения; если все улики показывают, что убийца - дворецкий названная программа резервного копирования, то обратиться в их техподдержку, т.к. это коммерческий софт).

    Upd. Ну ещё проверить вручную доступность FTPS, так как много соединений может быть и потому, что программа создаёт соединение, что-то оказывается недоступно, соединение не закрывается (глюк), но делается другая попытка, т.е. создаётся ещё одно соединение и т.д. Но это только версия.
    Ответ написан
    Комментировать
  • Что быстрее SQL или Javascript?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Вопрос задан как пальцем в небо.
    Быстрее будет не отдельно взятый постгрес или сайт на js, а машина, на которой это все будет считаться.
    JS где - у пользователя в браузе, или это nodejs на сервере?
    постгрес крутится на той же машине, или на другой? Какой там процессор, сколько, сколько памяти?

    Не забывать, что если данные лежат в базе, а считать вы будете в JS, то к расчетам еще добавить время на передачу данных, поэтому чисто теоретически наверное выполнить все на постгресе должно быть быстрее.

    Но вам никто не ответит на вопрос точно. Гораздо проще провести перформанс тесты и посмотреть живые ответы.
    Ответ написан
    3 комментария
  • Что быстрее SQL или Javascript?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В общем, чтобы не издеваться над девушкой, объясним на пальцах.

    Во-первых, заголовок у вопроса чудовищно некорректный. Это все равно что спросить, "что быстрее - пылесос или стиральная машина?"
    Во-вторых, ответ на вопрос "производить ли обработку данных в БД или же запросить все данные в клиентское приложение и обрабатывать там" совершенно очевиден: обработку данных следует производить в общем случае только в БД. Она для этого и придумана. Чтобы обрабатывать значительные объемы данных.

    Да, js тоже "может" обрабатывать большие объемы данных.
    Но чтобы значительный объем данных обработать, его сначала надо передать, полностью забив канал между сайтом и базой
    Чтобы значительный объем данных обработать, его надо сначала проиндексировать. Причем делать это каждый раз, а не использовать уже имеющийся набор индексов
    Чтобы значительный объем данных обработать, надо иметь значительный объем памяти или упасть из-за её недостатка
    Чтобы значительный объем данных обработать в многопоточном режиме (а сайт как раз является многопоточной системой), все вышеперечисленное надо умножить на количество посетителей сайта - при каждом запросе перегонять весь массив данных, выделять память, индексировать, считать. Если же вы оставляете все данные в памяти приложения, то их тогда надо как-то синхронизировать с БД. То есть вы себе собираете кучу проблем на пустом месте.

    Несомненно, из любого правила есть исключения. И бывают ситуации, когда приходится считать в приложении.
    Но на вопрос в общем виде ответ будет совершенно однозначный. Не "может так, может сяк", а только в БД.
    Ответ написан
    9 комментариев
  • Может ли Раст полноценно заменить Джаву в сфере финансовых технологий?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    На сколько я знаю, на сегодняшний день у раста проблемы с интеграциями. Брошеные либы, зависимости от версии и платформы и вот это все... (я рад бы ошибаться, возможно, г-н Василий Банников меня поправит).
    В джаве же есть спринг-бут, который умеет интегрировться хоть с чертом лысым, при этом поддерживается, развивается, выходят новые версиии...
    В большом энтерпрайзе это важно.

    Ну и у джавы, нерешаемых проблем довольно мало, чтобы от нее отказываться. На рынке есть много персонала разной квалификации, JVM - прекрасная, развивающяяся платформа.
    На расте же писать никто не умеет (по сравнению с джавой), не понятно какие у технологии перспективы, есть вышеуказанные проблемы. Чем он может заинтересоваться большой бизнес?
    Производительностью? Так и jvm достаточно производительна, во-первых, а во вторых, есть куча приложений, для которых никакой хай-лоад и никакое лоу-латенси не предусмотренно...
    Ответ написан
  • Что мешает заполнять контейнер с обобщением, если его перекинуть в параметрах метода?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    List.of(...) создает неизменяемый (иммутабельный, unmodifiable) список.
    В него нельзя ничего добавить, а вы в методе Consumer в первой же строке пытаетесь это сделать.

    Если бы вы приложили в вопрос еще и сообщение об ошибке - это было бы очевидно.
    Ответ написан
    1 комментарий
  • Что такое end-to-end тестирование?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Понятие еnd-to-end обозначает всего-навсего классификацию тестов по уровню, на котором тестируется система, и, само по себе, ничего не говорит ни о том, какие конкретно должны быть эти тесты, ни о том, какую роль они играют в общей стратегии обеспечения/проверки качества и, также, не является методикой тестирования. (Методика - это совсем другое понятие.)

    Для понимания сути этого понятия хорошо сравнить его с модульным ("нижний" уровень) и интеграционным ("средний") тестированием на каком-нибудь конкретном примере. Давайте рассмотрим некий сферический webshop в вакууме. Предположим, в нем есть 50 классов и для большинства из них написаны модульные тесты. Они проверяют исключительно функционал конкретного модуля (чаще всего, класса), т.е. тот, что зависит только от самого модуля и ни от чего чего более. Потом есть интеграционные тесты. Они проверяют корректность работы отдельных "модулей", если их собрать вместе согласно архитектурe. Например, работает ли правильно "Корзина", состоящая, в свою очередь, из 10 классов (предварительно проверенных модульными тестами), или "Корзина", подключенная к "Вебморде" и т.д. Где-то повыше в этой иерархии есть такие интеграционные тесты, которые проверяют конкретный функционал всей системы. Например, отправляется ли юзеру мейлом копия оплаченного заказа...

    И вот тут начинается самое интересное для понимания того, что такое end-to-end тестирование! Можно представить себе тест, проверяющий, что соответствующий мейл генерируется и сбрасывается SMTP серверу. Если SMTP сервер не рассматривать, как часть разрабатываемой системы, то этот тест вполне можно назвать end-to-end тестом (послали кучку HTTP запросов через "Вебморду" и проверили сброс мыла на SMTP - все зашибись!). Однако, если настройки и эксплуатация SMTP сервера - часть проекта (например, заказана разработка webshop "под ключ"), может оказаться, что это мыло будет отфильтровано каким-нибудь спам-фильтром, превысит лимит почтового ящика пользователя... короче, не дойдет до него. Тогда этот же самый тест уже нельзя считать end-to-end, а нужно бы было написать тест, проверяющий приход мыла в POP3/IMAP ящик. (Опять же, если это действительно нужно! Ибо, в зависимости от конкретных функциональных и нефункциональных требований, архитектор и QA инженер вполне могут найти возможность обеспечить адекватный контроль качества и без такого теста.)

    Таким образом, end-to-end тесты, это такие интеграционные тесты, которые воздействуют на систему через ее самые внешние интерфейсы и проверяют ожидаемую реакцию системы через эти же интерфейсы. Почему именно интеграционные? Потому, что это единственное, что можно о них сказать наверняка: они по определению не могут быть модульными тестами. А все остальное: являются ли они одновременно приемочными, нагрузочными или еще какими - зависит только от общих плана/стратегии тестирования и той роли, которые эти тесты в них играют.
    Ответ написан
    Комментировать
  • Почему Android клиент не подключается к серверу?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Лучше всего прочитать любой учебник по программированию в Android или документацию, но можно и погуглить исключение хотя бы.
    Ответ написан
    3 комментария
  • Для чего нужна аннотация @Serializable в либах Java/Kotlin?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    С точки зрения Java language, аннотации ничего не делают. Они - как каменты в коде. Но они могут быть подсказками для фреймворков которые в compile time, classloader или runtime могут что-то выполнить над кодом. 99%
    это какие-то ORM/JSon подказки которые разъясняют фреймворку что делать. Например @Table(name="emp")
    подсказка JPA то класс относится к таблице emp.

    Ваш вопрос про либы Java/Kotlin слишком общий. Ничего конкретного нельзя сказать. Но по отношению к
    Serializable, можно предположить что это гарантия что класс можно сериализовать во внешнюю память
    (оперативная или диск) и это не нарушит никакой бизнес логики. Например это DTO которая полностью
    самодостаточная. Не все сущности вообще реально сохранить. Некоторые сущности - как орграф опутывают
    всю память Java и сохранять их накладно. Как корневой объект хипа. Дешевле дампнуть всю память чем
    сохранять такие объекты поштучно. Некоторые - имеют связи с внешними ресурсами Files/Sockets и вне контекста они не имеют смысла. Есть ключевые слова языка (transient) которые запрещают сериализацию для полей.
    Есть также проблема версионности для Serializable. Сохраненная структура не трекает ваши изменения
    по коду уже после того как вы что-то сохранили. Грубо говоря это не JSON. Если вставили новое поле - можете
    старый файл и не прочитать. В качестве маркера проблемы там заводят специальное поле типа versionId или
    что-то такое. Просто для детектирования.

    Если вы хотите иметь тотальный контроль над сохранением - то определяйте Externalizable и там будут 2
    метода в которых вы контролируете Output/Input streams и сами пишете что сохранять и читать. А еще
    лучше брать библиотеки Kryo/Protobuf/Avro e.t.c. У них еще и есть оптимизации по скорости и по сжатию.
    Вы к этому придете эволюционным путем если будете писать систему где сохранение во вне - важно.

    Сериализация во внешнюю память это огромная проблема когда мы пытаемся подружить разные
    технологии (32-64 бит целые числа или разный порядок байт в машинном слове). Даже простое
    сохранение даты или строки может быть ошибочным если вы сохранили в Java а пытаетесь читать в C++.
    Нужна 100% бинарная совместимость всех структур. Вот библиотеки Протобуф и Авро
    как раз для этого создавались.
    Ответ написан
    Комментировать
  • Как делать периодические запросы без Thread.sleep?

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

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Похоже, у вас версия java до 17 :

    ...
    
        /**
         * The modifier {@code sealed}
         * @since 17
         */
        SEALED,
    
    
    ...
    Ответ написан
    2 комментария
  • Как сделать, чтобы приложение Java с классом Robot работало в проекте STALCRAFT?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Очень легко.
    Пишете код, тестируете его, отлаживаете, исправляете ошибки.
    Обычно все работает.
    Ответ написан
    Комментировать
  • Как исправить долгое открытие формы предпросмотра чека в 1С?

    fosihas
    @fosihas
    Автоматизации учета на 1С.
    Отладчик в помощь.
    Ответ написан
    Комментировать
  • Онлайн-школа или личный ментор?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    На обучение денег не жалко, главное, чтобы был результат.


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

    Тем более, что вы уже делали какие-то попытки и начнете не с нуля.
    Пишешь много кода, парралельно читаешь что-нибудь системное (один учебник).
    И нет смысла искать самый-самый лучший. Ну вот вообще.
    Если бы был какой-то самый лучший учебник, он бы уже был единственным путем в мир разработчиков.
    А на деле - можно научиться разными способами.

    Лучше за то же время прочитать два любых из гугловского топ-10 и написать кучу кода своими руками.
    Ответ написан
    Комментировать
  • Как изменить ширину кнопки?

    roswell
    @roswell
    и швец, и жнец, и на дуде игрец
    Проблема в BorderLayout. Если стоит задача позиционировать компоненты произвольным образом, нужно обходиться без LayoutManager вовсе.
    Ответ написан
    Комментировать
  • Какой пет проект можно реализовать на Java?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Я не представляю как можно спрашиваьт у кого-то какой пет проект себе сделать.
    Все равно что спросиьт "каким хобби мне увлечься" и прослушать лекцию что ролики круче прыжков с парашютом, а настолки мастер оф гезеринг и Д&Д вообще разные вселенные.

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

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    1. Убери эту хренову портянку под спойлер.
    2. Это называется root-доступ. Для его получения - на 4PDA, в тему телефона.
    3. Для получения рута в современных телефонах всегда нужен сброс к заводу для разлочки загрузчика. Разлочка загрузчика нужна, чтобы отключить проверку контрольных сумм разделов - иначе получишь кирпич. Если что-то пойдет не так - получишь кирпич. Если зашьешь не ту прошивку - получишь кирпич.

    (Для старых версий андроида была возможность зашить boot.img с патчем magisk, пока не начали сверять контрольные суммы)

    Сначала подумай - а оно тебе надо? Восстановить кирпич можно - через сервис. Самостоятельно в теории тоже - если иметь прямые руки, паяльник и умение делать все те вещи, которые придется найти в тырнете.
    Ответ написан
    Комментировать
  • Какой пет проект можно реализовать на Java?

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