• Как сохраненить сессии между rest-запросами в spring boot?

    @Akela_wolf
    Extreme Programmer
    Сессии работают следующим образом: при создании сессии сервер отсылает заголовок Set-Cookie браузеру в котором сохраняет значение идентификатора сессии (JSESSIONID). При последующих запросах браузер посылает "печеньку" обратно серверу и тот, получив идентификатор, может восстановить сессию из своего хранилища. Если "печеньки" заблокированы, то возможно передать jsessionid как query param запроса. Но это уже требует дополнительных телодвижений на стороне клиента.

    Так как вы упоминаете REST, то предположу использование XmlHttpRequest в браузере (напрямую или опосредованно через какую-то библиотеку), который не посылает заголовок Cookie по умолчанию.

    Поэтому вариантом решения может быть отправка идентификатора сессии явным образом как query param с именем jsessionid.

    Однако, использование сессии в REST запросах - в целом не очень хорошая практика, так как REST предполагается быть stateless. А в случае сессии у вас появляется состояние на стороне сервера. Если сессия нужна только для аутентификации клиента, то посмотрите на использование токенов, таких как JWT, которые позволяют решить эту проблему без наличия сессии на стороне сервера.
    Ответ написан
    Комментировать
  • Как распространять сообщение в сети независимых агентов?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Это называется Delay Tolerant Networking.

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

    Можно ещё просто объединить эти комиты через rebase:
    git rebase -i HEAD~2

    И пометить один из комитов на squash.
    В данном случае это ничем не лучше чем reset --soft, просто более гибкий инструмент.
    Ответ написан
    Комментировать
  • Верно ли это утверждение?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Добавлю к пессимизму.
    Верно ли это утверждение? 59 минут назад
    Сломался WordPress Кто поможет? 14 окт.
    Почему так произошло Опенкарт? 06 июл.
    Стоит ли учить Python по книгам? более года назад
    Как двигаться в гейм дев? более года назад
    Как начать путь в сферу game дизайна? более года назад
    Не получается верстать самостоятельно. Как преодолеть это? более года назад


    Этот список говорит нам открытым текстом, что увлекаетесь вы не программированием, а "вайти".
    Ой, геймдев! Ой нет, Питон! А, нет - вёрстка! Ну и понятное дело что всё кончилось вордпрессом.

    Люди, которые действительно увлекаются программированием, не задают вопросов, "стоит ли учиться по книгам". и "как войти вайти". Они учатся. И входят.

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

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Правильнее конечно же через геттеры-сеттреры, так как изначально предполагалось, что есть только одна точка контроля - геттер/сеттер.
    С другой стороны - все на усмотрение разработчика, можно и напрямую к полю.
    Ответ написан
    3 комментария
  • Существует ли граф на 9 вершинах, степени которых равны 1, 1, 1, 1, 1, 2, 4, 5, 6?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Теорема Эрдёша — Галлаи
    1. 8 ≥ 6 ≥ 5 ≥ 4 ≥ 2 ≥ 1 ≥ 1 ≥ 1 ≥ 1 ≥ 1
    2. 6 + 5 + 4 + 2 + 1 + 1 + 1 + 1 + 1 = 22
    Данная последовательность является правильной.
    k = 1, 6 ≤ (0 + 8), выполняется,
    k = 2, 11 ≤ (2 + 9), выполняется,
    k = 3, 15 ≤ (6 + 7), не выполняется.
    Значит данная последовательность не является графической, по ней нельзя построить простой граф.
    Ответ написан
    2 комментария
  • Проблемы с гитом. Что делать?

    karabanov
    @karabanov
    Системный администратор
    Переведи сообщение на русский и сделай то, что он тебя просит.
    Ответ написан
    Комментировать
  • Как работают интерпретаторы компилирующего типа?

    @Mercury13
    Программист на «си с крестами» и не только
    1) То есть считал строку, скомпилировал - получил двоичный код. Выполнил этот двоичный код.

    НЕТ. Считал — выполнил. Выполняется машинный код интерпретатора, а не программы.

    3) Байт-код понятен среде/виртуальной машине (.NET, Java), которая компилирует байт-код в двоичный код

    В ЧИСТОМ СЛУЧАЕ — НЕТ. Считал команду байт-кода — выполнил. Точно так же выполняется машинный код интерпретатора, а не программы. Что-то вроде:
    switch (opcode) {
    case OP_ADD: {
           auto res = stack.pop() + stack.pop();
           stack.push(res);
       }
    .....
    }


    Байт-код используется по нескольким причинам.
    1. 3 быстрее 1.
    2. С расширением языка мы меняем только компиляцию в байт-код. Оптимизация байт-кода, интерпретатор — остаются.

    А компиляция в машинный код в 1 и 3 — это так называемая JIT-компиляция. Она может выполняться не всегда. Одни команды могут быть в машинном коде, а другие — интерпретироваться.

    Кроме того, байт-код часто используется и в классических компиляторах 2-го типа! Это позволяет делать многоплатформенные коллекции компиляторов — все frontend’ы компилируют в байт-код, затем с байт-кодом делаем какую-то магию вроде оптимизации, отдаём его backend’у, и тот готовит OBJ-файл для нужного процессора.
    Ответ написан
    Комментировать
  • Как склеить два коммита, расположенных не подряд?

    Это может быть не просто. Оцените необходимость этой операции прежде чем действовать, можно сильно навредить репозиторию / коду.

    Задачу можно выполнить через интерактивный rebase. В процессе с высокой вероятностью возникнут конфликты. Я бы делал в 2 этапа. Первым делом расположил бы коммиты в нужном порядке

    git rebase -i хеш_коммита_3^
    В открывшемся редакторе можно выставить коммиты в нужном порядке.
    После сохранения файла, вероятнее всего появится сообщение о неразрешенных конфликтах - их все необходмио разрешить, добавить в индекс и продолжить rebase через git rebase --continue

    После успеха, можно повторить интерактивный rebase с целью сделать squash.
    Ответ написан
    Комментировать
  • Как располагаются в памяти элементы массива обьектов класса?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Объекты в C++ имеют постоянный размер, известный на этапе компиляции и равный sizeof(экземпляр)

    Утверждение:
    объект класса может содержать и вектор ... а значит разные элементы массива(объекты класса) могут занимать разное количество байт в памяти.

    неверно, так как вектор хранит свои данные не в своем экземпляре, а туда, куда их засунет аллокатор (обычно засовывает на кучу).

    Утверждение:
    [объект класса] и шаблонным может быть ... а значит разные элементы массива(объекты класса) могут занимать разное количество байт в памяти.

    неверно, так как все шаблоны конкретизируются на этапе компиляции.

    Следовательно, объекты класса сидят в массиве друг за дружкой, имеют фиксированный размер, и по ним можно ползать указателем, сдвигая его на этот размер.
    Ответ написан
    Комментировать
  • Почему в C++ всё именно так?

    @res2001
    Developer, ex-admin
    Показался интересным 7 вопрос.
    Дело в том, что вы можете создать экземпляр пустого объекта и можете взять его адрес.
    Но если размер объекта будет 0, то адрес будет взять не возможно (объект не занимает места в памяти, соответственно нет и адреса), что противоречит правилам языка.
    Поэтому пустые объекты на самом деле не пустые и занимают в памяти 1 байт.
    Ответ написан
    1 комментарий
  • Какой тип данных/структуру использовать для быстрой обработки промежутков?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Простой в реализации метод: держите отрезки в каждом элементе отсортированными и непересекающимеся (если два отрезка пересекаются - объедените их).

    Далее при запросе пройдитесь по списку и для каждого элемента бинпоиском найдите самый правый отрезок, начало которого левее запроса. Проверьте, лежит ли запрос в отрезке. Это будет чуть быстрее наивного метода, но все-равно пройдется по многим элементам списка зря.

    Если же список очень длинный, а ответ ожидается маленький, то есть более быстрый метод. Но он сложный в реализации. Нужно реализовать персистентное дерево поиска. Можно его реализовать на основе персистентного дерева отрезков. Это такая структура, в которую можно добавлять элементы, и удалять их за O(log n). Также можно обходить все элементы за O(log n + (их количество)). Кроме того, сохраняются все версии дерева после каждой операции и общее количество памяти будет O(к log n), где к - количество операций.

    Эта структура будет использоватся для хранения предподсчитанных ответов. Если все ваши отрезки нарисовать на одной прямой, то она разобъется на O(n) отрезков, все точки которого будут давать один и тот же ответ при запросе. Мы эти все ответы компактно сохраним.

    Используем метод сканирующей прямой. Нанесите все границы всех отрезков на одну прямую, пометив их как начало или конец (и какому элементу списка они соответствуют). Если пройтись по этой прямой слева на право, то будут происходить события - отрезки откроются (новый элемент добавляется в ответ) или отрезки закроются (элемент из ответа удалится). Поддерживая текущий ответ в персистентной структуре мы сильно экономим память. Удобно в качестве начал отрезка брать их координаты, а в качестве конца - координаты концов+1. В таком виде все границы отрезков будут точками, а не числами.

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

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

    Это решение требует O(n log n) памяти (где n - количество всех отрезков) и O(n log n) времени на предподсчет и O( log n + (ответ)) времени на обработку ответа.

    Более простое решение, где ответы считаются так же сканирующей прямой, но сохраняются просто в виде списков, а не версий персистентного дерева, может требовать O(n^2) памяти. Но будет работать быстрее, конечно.
    Ответ написан
    1 комментарий
  • Почему возникает ошибка компиляции?

    Сreating games

    С нужно заменить на С

    (Первая -кириллическая, вторая - латинская)
    3 дня...
    Ответ написан
    1 комментарий
  • Реально ли в Qt получить доступ к элементам виндовс вне программы?

    Adamos
    @Adamos
    Qt - кроссплатформенная библиотека. Ее логика - как раз в том, чтобы ты вообще не обращал внимания, какая ОС снаружи.
    Но Qt - это просто библиотека C++. Она никак не мешает тебе заодно подключить заголовки WinAPI и корчиться с ним, если понадобилось.
    Ответ написан
    Комментировать
  • Как поднять эффективность обучения?

    @mkone112
    Начинающий питонист.
    "Скажи, о сенсей, как поднять эффективность обучения?" - спросил кохай.
    "Перестань строчить тупые вопросы на тостере, и иди учись!" - ответил сенсей.
    Cтарый анекдот.
    Ответ написан
    Комментировать
  • Почему LinearLayoutManager не принимает параметр this?

    iLLuzor
    @iLLuzor
    Java, Kotlin, Android Developer
    Но почему-то при создании LinearLayoutManager() параметр this либо this@NotesFragment подчеркивается красным

    Не почему-то, а по определённой причине, которая будет отображена при наведении курсора.
    Параметр не this. У параметра есть тип, в данном случае это Context. Собственно, контекст и надо передавать.
    Ответ написан
    Комментировать
  • Как работает следующий фрагмент кода?

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

    iLLuzor
    @iLLuzor
    Java, Kotlin, Android Developer
    Никакие
    Ответ написан
    Комментировать
  • Реализицая обратной польской нотации, как быть с унарным минусом?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Если обратная нотация, то знак ± должен, как и бинарные операции, идти после операндов. Тогда -(-1 + 2) становится 1 ± 2 + ±. По ± надо менять знак числа на верхушке стека.

    Соответственно в парсере, если видите унарный минус перед скобками, то переводите скобки в нотацию, а потом дописываете ±.
    Ответ написан
    3 комментария
  • Правильно ли составлен путь к становлению android разработчиком?

    TonyHunt
    @TonyHunt
    Part-time developer – full-time geek.
    Котлин можно начать изучать без Джавы в качестве первого языка.
    Когда необходимо будет залезать "под капот" подтяните знания.
    Например, я не знаю Джаву, но без проблем смотрел курс по Javalin, ведущий писал код на Джаве, я все тоже самое писал на Котлин.

    Верстка, фронтенд на Андройд в значительной степени отличается от верстки, фронтенда веба.
    На Андройде она "стандартизирована", интереснее, в какой-то степени проще и понятнее, нагляднее (так как ты видишь все элементы, как они и куда перемещаются). В отличии от всего хауса, что творится в вебе с версткой.

    Чат для новичков в Kotlin https://t.me/kotlin_start
    Бесплатный курс https://rs.school/android/
    На Ютуб полно курсов, примеров на Котлин.

    Боевой набор джуна

    - Kotlin.
    - Android Jetpack: ViewModel and LiveData, Room, MVVM, Repository pattern, Retrofit, RxJava / Coroutines, REST / JSON API и Gson, Glide, Dagger, Dependency injection.
    - Git.

    В Андройде как и в Вебе есть разделение на Фронтенд и Бэкенд.
    Ответ написан
    Комментировать