• Возможет ли отрицательный хешкод и расширение капасити при плохом хешкоде? А также как соотносится хешкод с адресом?

    @ericcartman Автор вопроса
    Это детали реализации конкретной JVM. Зачем тебе это знать?

    На собеседовании спросили. "Поскольку объект меняет местоположение в памяти, как же дефолтовый хеш код остается неизменным, если он завязан на память"
    2) ничего не будет, там битовая арифметика, -1 валидное значение.
    конкретнее нет информации?
    3) Детали реализации конкретной хэштаблицы, открой исходники и почитай. Там не рокетсайнс.
    Ну для тебя не рокетсайнс, а для других еще пока рокет...
    Вот люблю я наши( не западные всмысле) ресурсы, никогда прямо не скажут ничего, отошлют к первоисточникам. Наверное поэтому там мало литературы написано нашими авторами. У них видимо одно на уме: "ребята, хотите изучить джаву? нет проблем, открываем исходники и читаем. Конец книги."
  • Современные инструменты для анализа sql запросов, какие они ( бренды)?

    @ericcartman Автор вопроса
    Спасибо за ответ.
    explain (analyze,buffers)

    contrib pg_stat_statements

    это команды в postgresql ?
    Подскажите, какую GUI юзаете? Чтобы там эти команды работали красиво
  • Как организовать модель Development, Staging, Production?

    @ericcartman
    ansible ( chef, puppet) это деплоит в дев

    ну точнее в тест деплоит. Дальше что?
  • Как организовать модель Development, Staging, Production?

    @ericcartman
    и умоляю, никаких «заливать по ФТП на продакшен». это обязательно выйдет боком в самый неподходящий момент.

    А чем заливать?
    Ну скажем разрабы кодят, заливают в гитлаб, далее дженкинс это собирает, запускает джобу, ansible ( chef, puppet) это деплоит в дев. Что дальше? Как это попадет в тест, stage, prod ?
  • Отличие спецификации от технического задания?

    @ericcartman Автор вопроса
    awesomer, то есть требования скажем по перфомансу, нагрузке, устойчивости, восстановлению после сбоев + вся функционалка должна быть в ТЗ жестко прописана, с миллисекндами и кол-вом запросов в сек? ( это SLA называется, да? )
    ( я заранее прошу прощения, если все эти вопросы не по адресу)
  • Отличие спецификации от технического задания?

    @ericcartman Автор вопроса
    awesomer, хорошо, ну тогда девелопер скажет магеру: я выполнил ТЗ в соответствии со спецификацией. А магер ему - нет не выполнил, потому что ... {что тут должно быть?}
    Видимо какое-то тестирование? Где это прописывается? То есть какие результаты и на каких тестах должен работать продукт? Какие-то конторы прописывают это в ПиМИ ( программа и методика испытаний) так это часть ТЗ?
  • Отличие спецификации от технического задания?

    @ericcartman Автор вопроса
    Понятно, благодарю...
    Если нетрудно, укажите признаки завершенности спецификации? Ну то есть когда можно сказать, что вот, это хорошая спецификация. Какие части должны обязательно присутствовать?
  • Сервлеты, многопоточность, как устроено?

    @ericcartman Автор вопроса
    Сергей Горностаев, Понятно, спасибо!
    Подскажите еще, вот Вы написали допустим все это на Netty, все учли, все правильно, допустим. А в базу данных идем все равно синхронно? Я понимаю, что это уже офф-топ, но сейчас есть какие то решения для хождения в БД асинхронно? ( ну в самые распространенные бд, MySql, PostgreSQL, Mongo)
    И если они не дают асинхронного доступа, значит все эти асинхронные технологии ( Netty, Node.js, Go) в пользу бедных?
    Или тогда хождение в БД делать отдельным сервисом, и ставить запросы к нему из слоя сервисов в очередь ( типа ActiveMQ, RabbitMQ ну или Kafka для особо замороченных)
    Спасибо
  • Сервлеты, многопоточность, как устроено?

    @ericcartman Автор вопроса
    Сергей Горностаев, а если так:
    Jetty has good support for asynchronous request pr...
    public class AsyncServlet extends HttpServlet {
        private static String HEAVY_RESOURCE 
          = "This is some heavy resource that will be served in an async way";
     
        protected void doGet(
          HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
      
            ByteBuffer content = ByteBuffer.wrap(
              HEAVY_RESOURCE.getBytes(StandardCharsets.UTF_8));
     
            AsyncContext async = request.startAsync();
            ServletOutputStream out = response.getOutputStream();
            out.setWriteListener(new WriteListener() {
                @Override
                public void onWritePossible() throws IOException {
                    while (out.isReady()) {
                        if (!content.hasRemaining()) {
                            response.setStatus(200);
                            async.complete();
                            return;
                        }
                        out.write(content.get());
                    }
                }
     
                @Override
                public void onError(Throwable t) {
                    getServletContext().log("Async Error", t);
                    async.complete();
                }
            });
        }
    }

    Примерно эти трудности Вы имели ввиду, когда говорили:
    Нет, так не бывает. Хочешь обрабатывать множество одновременных соединений, готовься к трудностям.
  • Сервлеты, многопоточность, как устроено?

    @ericcartman Автор вопроса
    Сергей Горностаев,
    асинхронные сервлеты - это просто способ переложить нагрузку с одного пула потоков на другой

    И это такое в сервлетах 3.0 безобразие? Рекламируется, как асинхронный, а на деле просто новый поток стартуют, да? Ну и не разрывают соединение, пока стартанутый поток работает.
  • Сервлеты, многопоточность, как устроено?

    @ericcartman Автор вопроса
    Спасибо, буду рыть WebFlux!
    WebFlux, который работает поверх Netty

    а это не дружба? то есть нет такого удобства, как у MVC с сервлетами, когда поставил @RequestMapping и сам сервлет под капотом где-то, а ты радуешься жизни имея дело только с 1м методом?
    Можно и сервлеты писать в реактивном стиле.

    Это req.startAsync? или что-то другое ( я нагуглю, Вы только скажите в какую сторону гуглить)
    И еще вопрос: тогда получается, в скором времени сервлеты отомрут вообще?
  • Сервлеты, многопоточность, как устроено?

    @ericcartman Автор вопроса
    Какой-то фреймворк их уже подружил? Spring например 5.0 ?

    Я имею ввиду, чтобы поставил аннотацию на метод и вот уже у нас Netty где-то под капотом спринга все делает, принимает запросы асинхронно, а мы имеем дело только с помеченным аннотацией методом
  • Сервлеты, многопоточность, как устроено?

    @ericcartman Автор вопроса
    А вот Netty и Vert.x работают на других принципах и способны обрабатывать 10 000 и более одновременных соединений, но за счёт увеличения сложности.

    Я правильно понимаю, что они устроены по типу Node.js ? То есть реактивное программирование используется?
    Тогда как подружить Netty ( или Vert.x) с веб сервером / сервером приложений? Ну то есть все равно запрос от клиента идет по http, и надо на него ответить статикой / логикой / инфой из БД. Поскольку для клиента все должно быть через http
    Какой-то фреймворк их уже подружил? Spring например 5.0 ?
  • Сервлеты, многопоточность, как устроено?

    @ericcartman Автор вопроса
    обсуждению протокола http. Этот протокол проектировался под взаимодействие в режиме вопрос-ответ без сохранения состояния. Так его желательно и использовать.

    Тогда вопрос: вот это решение:
    https://ynovikov.wordpress.com/tag/%D0%B0%D1%81%D0...
    В частности:
    клиент открывает долгоживущее HTTP-соединение, которое хранится на сервере до того момента, пока сервер не будет готов отослать ответ обратно


    Reverse AJAX избавляет нас от необходимости все время опрашивать сервер — соединение открывается один раз, и потом сервер сам отошлет ответ, когда будет что отсылать. Естесственно, когда с сервера придет ответ, нужно установить соединение заново.

    Как соотносится с протоколом http ? Не очень правильно? Но все юзают это? или это костыль, который надо заменить на Jetty / Netty / Undertow / Vert.x ?
  • Сервлеты, многопоточность, как устроено?

    @ericcartman Автор вопроса
    вот нагуглил:
    Клиент запустил задачу, можно спокойно хранить ссылку на фоновую задачу в самой сессии.

    Это рабочее решение? или это велосипед/костыль?
  • Сервлеты, многопоточность, как устроено?

    @ericcartman Автор вопроса
    Обычно такую проблему решают отправкой тяжёлых заданий в очередь, из которой другой процесс (возможно даже на другом сервере) выбирает задания и выполняет

    А поток, отправивший запрос в очередь, уходит обратно в пул на ожидание следующих клиентских запросов? И забывает про то, что он послал в очередь что-то? Тогда клиенту все же получить данные? Я имею ввиду, кто-то же должен получить / обработать результаты того тяжелого запроса, когда они наконец придут. А поток уже давно в пуле. Как обычно это решается ( я естественно погуглю, только задайте мне направление в какую сторону гуглить)
    Спасибо!
  • Сервлеты, многопоточность, как устроено?

    @ericcartman Автор вопроса
    Благодарю за ответ! Стало чуть яснее, правильно ли:
    1. То есть объект сервлета существует в единственном экземпляре? Получается, если я сделаю поле и сохраню туда инфу, то она сохранится между вызовами?
    2. Если есть тяжелый запрос к БД, то все встанет колом, когда в томкатовском пуле закончатся потоки?Как можно это обойти? Если я буду юзать скажем что-то асинхронное, ну Vert.x скажем, подниму где-нибудь несколько Verticl-ов и буду им асинхронно из сервлета слать сообщения с просьбой законнектиться в БД и вернуть потом результат, это рабочая схема? или это велосипед, и все делается проще и быстрее ( как примерно? в какую сторону смотреть? )

    Спасибо!
  • Java ( с либами ) против Node.js, что выбрать для вебсервиса?

    @ericcartman Автор вопроса
    Ладно вроде ясно все с этой нодой
    libuv has a default thread pool size of 4, and uses a queue to manage access to the thread pool - the upshot is that if you have 5 long-running DB queries all going at the same time, one of them (and any other asynchronous action that relies on the thread pool) will be waiting for those queries to finish before they even get started

    А для I/O libuv юзает нативные функции ОС, которые умеют действительно асинхронно работать. Netty так же работате, поэтому ответ на первоначальный вопрос: берешь Netty ( а значит и Vert.x или AKKA) и Nodejs идет лесом, ибо все остальное( фрейморки и тп) в джаве реализовано так, что никакая нода и рядом не стояла
  • Java ( с либами ) против Node.js, что выбрать для вебсервиса?

    @ericcartman Автор вопроса
    Александр Таратин, Спасибо, разобрался, для I/O операций Нода юзает libuv, которая работает асинхронно. Netty умеет то же самое, что радует ( подробности не скажу, но то ли epoll она использует, то ли ту же самую libuv, если под линуксом запущено).
    Осталось разобраться с запросами к БД. Как я понял у Ноды кроме основного треда, которые реактивно берет запросы от юзера и накидывает их в libuv, есть еще threadpool. Что юзается при запросах к БД ? libuv или как раз потоки из threadpool ( их там 4 вроде), которые уже синхронно обращаются к БД ( и если все 4 повиснут на тяжелых запросах, то Нода перестанет ходить в БД, пока один из них не освободится)
    Так?
    ЗЫ: пул там есть все таки
    ЗЫЫ: ну пусть не в самой Ноде, неважно, важно разобраться, блокнется Нода на тяжелых запросах к БД или нет
    fbcc07ff919de5a4fd4a0f075e1aff32.png
  • Java ( с либами ) против Node.js, что выбрать для вебсервиса?

    @ericcartman Автор вопроса
    InoMono, Да, так и есть. Но уже просто уже взяло зло на эту ноду, хочется разобраться. Неужели на джаве нельзя сделать то же самое, что на Ноде? Нода приняла запрос, допустим там есть запрос к БД. Кому она отдает работу? Потоку из пула потоков своего процесса? Или какое то чудо происходит под капотом? Тут большая разница, потоков не может быть 10К