- 73
- 270 306
devmark_ru
Russia
Приєднався 25 вер 2020
Данный канал является частью проекта devmark.ru, который посвящён вопросам разработки программного обеспечения. Здесь вы найдёте полезные материалы по server-side разработке. Прежде всего по Java, Kotlin и Spring.
31a2fa6d-4149-4d01-ba08-f4cc00c0b11b
31a2fa6d-4149-4d01-ba08-f4cc00c0b11b
GraphQL в Spring Boot: обработка ошибок
#devmark #graphql #kotlin #spring Продолжаем цикл статей про работу с GraphQL в проекте, написанном на Kotlin и Spring Boot. Ранее мы создали проект, который возвращает информацию о книгах и их авторах. Затем мы научились менять данные. Теперь рассмотрим как можно обрабатывать ошибки в GraphQL и менять их формат.
Статья по теме: devmark.ru/article/spring-boot-graphql-custom-exception
Пример: github.com/devmarkru/spring-boot-graphql-example
Все новости проекта: t.me/devmark_ru
Статья по теме: devmark.ru/article/spring-boot-graphql-custom-exception
Пример: github.com/devmarkru/spring-boot-graphql-example
Все новости проекта: t.me/devmark_ru
Переглядів: 191
Відео
GraphQL в Spring Boot: изменение данных с помощью мутаций
Переглядів 1654 місяці тому
#devmark #graphql #kotlin #spring Для изменения данных в GraphQL используются так называемые "мутации". По сути это обычные методы со входными и выходными параметрами, доступные через протокол взаимодействия GraphQL. Статья по теме: devmark.ru/article/spring-boot-graphql-mutation Пример: github.com/devmarkru/spring-boot-graphql-example Все новости проекта: t.me/devmark_ru
GraphQL в Spring Boot: проблема N + 1, кастомные типы данных
Переглядів 3714 місяці тому
#devmark #graphql #kotlin #spring GraphQL - это стандарт клиент-серверного взаимодействия, который позволяет довольно гибко запрашивать данные с сервера. Основное отличие от традиционных REST-запросов состоит в том, что клиент сам выбирает, какие поля он будет запрашивать у сервера, тогда как REST предполагает заранее определённый фиксированный формат. При этом сервер будет подгружать из хранил...
Алгоритм поиска чисел Фибоначчи на Java
Переглядів 2214 місяці тому
#алгоритмы #java Рассмотрим реализацию поиска чисел из последовательности Фибоначчи на Java. Каждое следующее число в последовательности равно сумме двух предыдущих. Последовательность начинается с 0 и 1: 0, 1, 1, 2, 3, 5, 8, ... . В этой последовательности числа растут очень быстро, поэтому результат будем возвращать в типе long. Всего мы можем вернуть первые 92 числа этой последовательности. ...
Интерфейсы Comparable и Comparator в Java
Переглядів 5015 місяців тому
Интерфейс Comparable задаёт правила сортировки по умолчанию. Объекты, реализующие этот интерфейс, уже могут сравниваться с помощью стандартных методов сортировки, поиска минимума и максимума. Такие коллекции как TreeMap и TreeSet требуют реализацию интерфейса Comparable, т.к. автоматически сортируют элементы. Если вам нужно поддерживать несколько различных вариантов сортировки, используйте инте...
Подсчёт количества строк в текстовом файле на Java
Переглядів 4819 місяців тому
#devmark #java #file Во многих редакторах при работе с текстовым документом вы можете видеть, сколько всего строк содержится в этом файле. Строки между собой разделяются символом перевода строки, который в каждой операционной системе (Windows, Unix, Mac) свой. Давайте разберёмся, как быстро подсчитать количество строк в текстовом файле независимо от той ОС, в котором выполняется наш код. Более ...
Как прочитать большой текстовый файл на Java наиболее оптимальным образом
Переглядів 5199 місяців тому
#devmark #java #file Давайте научимся читать большой текстовый файл построчно. При этом каждую строку будем как-то обрабатывать. Например, будем искать наибольшую длину строки. Поскольку размер файла больше 100 МБ, его чтение происходит с небольшой задержкой. Мы рассмотрим три варианта реализации такого чтения и выберем наиболее быстрый из них. Статья по теме: devmark.ru/article/read-file-line-...
Как сохранить большой текстовый файл на Java наиболее оптимальным образом
Переглядів 6979 місяців тому
#devmark #java #file Давайте сгенерируем строку из случайных символов на Java и затем сохраним её в текстовый файл. Строка должна быть очень большой (более 100 миллионов символов), чтобы мы могли легко заметить разницу во времени, которое требуется на сохранение файла. Рассмотрим 3 варианта: обычный FileWriter, FileWriter с буферизацией и неблокирующее сохранение файла с помощью пакета java.nio...
Как скомпилировать исходники java вручную
Переглядів 6329 місяців тому
#java #гайд #jdk В повседневной работе никто из нас не компилирует исходники Java вручную. За нас это делают такие инструменты как maven, gradle или интегрированная среда разработки типа Idea. Но для понимания процессов, которые происходят при каждом тестовом запуске вашего приложения, имеет смысл хотя бы один попробовать это сделать самостоятельно прямо из консоли. Статья по теме: devmark.ru/a...
Интерфейсы Iterator и Iterable в Java
Переглядів 1,8 тис.9 місяців тому
Интерфейсы Iterator и Iterable в Java
SequencedCollection и SequencedSet в Java 21
Переглядів 52510 місяців тому
SequencedCollection и SequencedSet в Java 21
Алгоритм инвертирования двусвязного списка
Переглядів 493Рік тому
Алгоритм инвертирования двусвязного списка
Интерфейс RowMapper и его реализации в Spring JDBC API
Переглядів 916Рік тому
Интерфейс RowMapper и его реализации в Spring JDBC API
Аудит изменений данных в Spring Data JPA
Переглядів 1,7 тис.Рік тому
Аудит изменений данных в Spring Data JPA
Разбор и вычисление арифметических выражений на Java
Переглядів 1,8 тис.Рік тому
Разбор и вычисление арифметических выражений на Java
Алгоритм инвертирования массива на Java
Переглядів 747Рік тому
Алгоритм инвертирования массива на Java
Как быстро экспортировать и импортировать данные с помощью Datagrip
Переглядів 5 тис.2 роки тому
Как быстро экспортировать и импортировать данные с помощью Datagrip
Алгоритмы: проверка слов и предложений на палиндром
Переглядів 2 тис.2 роки тому
Алгоритмы: проверка слов и предложений на палиндром
Поддержка мультиязычности в приложениях на Spring Boot
Переглядів 9932 роки тому
Поддержка мультиязычности в приложениях на Spring Boot
Алгоритмы: поиск простых чисел с помощью "решета Эратосфена"
Переглядів 1,5 тис.2 роки тому
Алгоритмы: поиск простых чисел с помощью "решета Эратосфена"
Алгоритмы: бинарный поиск на отсортированном массиве (реализация на Java)
Переглядів 2,6 тис.2 роки тому
Алгоритмы: бинарный поиск на отсортированном массиве (реализация на Java)
Подключение Springdoc для автоматизации документирования REST API
Переглядів 4,3 тис.2 роки тому
Подключение Springdoc для автоматизации документирования REST API
Полезные советы по работе с BigDecimal в Java
Переглядів 2,9 тис.2 роки тому
Полезные советы по работе с BigDecimal в Java
Алгоритмы: поиск простых чисел на Java
Переглядів 4,4 тис.2 роки тому
Алгоритмы: поиск простых чисел на Java
Спасибо за видео)
Спасибо, полезный материал
Почему в метод maskPassword лучше передавать Password , а не String?
Чтобы быть точно уверенными, что это не какая-то строка, а именно пароль.
Супер топ, спасибо!
Удивляюсь комментариям а-ля "Самое понятное за долгое время разъяснение". По сути ведь вообще ничего не объяснил, просто озвучил свои действия, но совсем не рассказал принцип действия. Это очередное объяснение, понятное, для тех, кто это уже знает и понимает, а для новичков вообще не ясно зачем там union, почему path каждый раз дополняется новыми данными, где и как происходят итерации. В очередной раз убеждаюсь, что между "понимать" и "уметь объяснить" огромная пропасть.
Сожалею, что видео оказалось недостаточно информативным. Вы можете ещё прочитать статью devmark.ru/article/postgres-recursive-query - может так понятнее станет.
@devmark сожалею, что мой комментарий оказался недостаточно информативным и вы не уловили его посыл. Я понимаю, как работает рекурсия в sql, но если бы не понимал, то ваш ролик не принёс бы понимания. Улавливаете?
Привет.А можешь подсказать с этим ботом батарейку за сколько высасывает телефон ?Он работает с погашенным дисплеем на телефоне ?
Батарейка к этому боту никакого отношения не имеет. Само приложение крутится на сервере, а не на телефоне. Единственное, что может влиять на заряд телефона - это само приложение телеги.
Здравствуйте, я создал новый проект и через postman просто hello world хотел получить, на новых проектах что то не исправлено что ли не работает Java 17or 21 sprint boot 3.3.4, а ваших проектах в github работает. Методы даже в Actuator и Mapping не добавляеться
Видимо пора актулизировать примеры) Постараюсь сделать.
Может быть, я прослушал, но где плюсы и минусы?
Применение рекурсии в этом алгоритме позволяет сделать код более компактным. Но если рекурсию применять неправильно - можно существенно потерять в производительности. Также в теории для очень большой вложенности рекурсии можно получить переполнение стека (StackOverflowException). Тогда как вариант с циклом лишён этих недостатков, но кода будет чуть больше.
О, хорошо. Самая свежая инфа
Хороший видос, как раз по этой теме работаю сейчас, лайк сразу. Только такой вопрос остался, как я могу через питон добавить в БД данные из json файла ( работаю с библиотекой psycopg2). Пока что выходит через костыли и ф строкой.Может есть какие то фичи. Буду признателен за ответ
Спасибо за лайк) Но по питону не подскажу, я специализируюсь на java и kotlin.
а если мне нужны поля только для дат, без инфы кто внес изменения, то мне не нужен AuditConfig? Но куда мне тогда вешать аннотацию @EnableJpaAuditing?
Спасибо!
Итеребл. Ударение на первый слог. Как и Нулебл например. Не нулЭйбл и итерЭйбл. Да, есть слово дизЭйбл, но это совсем другое :)
Ок, буду иметь в виду)
Большое спасибо автору! Лаконично и познавательно)
как я понял. Hashset. Основан hashMap. на хеш таблицах ключ значение. только Ключ это Объект(в данном случае String). а значение object(заглушка). только почему не у упорядоченном порядке? LinkedHashSet HashSet только со ссылками на предыдущий и следующий элемент. а TreeSet на дереве завязан и сортировка происходит с помощью компоратора. который видимо по умолчанию стринг сортирует от а до я. Скорее всего его можно переопределить и сортировку сделать наоборот. Я правильно всё написал?
Да, вы все абсолютно верно написали! HashSet не гарантирует порядок, т.к. оптимизирован под быстрый поиск значений. Вернее, порядок у него какой то есть, но не очевидный, поэтому можно считать, что порядка нету)
я запрещаю вам использовать postgres (с) Json Стэтхэм
СПАСИБО ТЕБЕ ОГРОМНОЕ!!! 🙏🙏🙏
спасибо
Спасибо огромное) Очень помогли.
объяснил круто, но музыка такая, будто в секс шоп попал xd
@@4illent542 интересная ассоциация))
Спасибо большое!
как вычислить вот такое выражение sin(2*(-5+1.5*4)+28)
в вашем выражении присутствуют как минимум два оператора, про которые я не рассказывал. Это функция (sin) и унарный минус (-5). Для вычисления подобных выражений используется подобный подход, но реализация будет чуть сложнее, чем та, которую я привёл. Также надо добавить поддержку чисел с десятичной точкой (т.е. парсинг чисел также надо доработать).
Также меня озадачил момент что проверяя в Postman localhost:8080/report и localhost:8080/report?id=9 возвращается одно и то же, все возможные report. Почему? В контроллере вот так: @GetMapping fun getLastReports( ): List<ReportDto> = reportService.getLastReports() @GetMapping("/{id}") fun findReportById( @RequestParam("id") id: Int, ): ReportDto = reportService.findReportById(id)
Всё понял. На один эндпойнт нельзя вешать два метода, ещё и с возвратом разных данных. Разделил по разным путям - localhost:8080/report и localhost:8080/report/id/9. Спасибо!
Если я захочу обращаться и по localhost:8080/cargo и по localhost:8080/cargo?page=1 , то значит я должен реализовать getAll() и getAll(pageIndex)? Я попробовал и возникло: Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'cargoController' method com.example.cargo.controller.CargoController#getAll(int) to {GET [/cargo]}: There is already 'cargoController' bean method com.example.cargo.controller.CargoController#getAll() mapped.
Нет, можно обойтись одним методом с опциональным параметром. (аннотация RequestParam с параметром required = false)
@@devmark всё равно технические моменты не ясны. Вот я прописал в reportController: @GetMapping fun getLastReports( @RequestParam(value ="page", required = false) pageIndex: Int, ): List<ReportDto> = reportService.getLastReports() А дальше как это обработать в reportService и reportRepository? У меня тут явно указано что reportService.getLastReports() не принимает параметров, а как привязать ещё и reportService.getLastReports(pageIndex) ?
@@devmark Сделал так @GetMapping fun getLastReports( @RequestParam(value ="page", required = false) pageIndex: Int?, ): List<ReportDto> = if (pageIndex == null) reportService.getLastReports() else reportService.getLastReports(pageIndex) Отлично работает, может кому полезно будет. Благодарю.
Можно так, а можно по дефолту индекс ставить в 0 и какой-нибудь заведомо большой размер страницы.
Жаль, что так мало видео по postgres, видео нереально расслабляющие.
В конечном счете дело в точности, но в неочевидном ее аспекте. Дело не числе разрядов, а в системе счисления. Финансисты имеют дело с десятичными дробями, а в двоичном представлении, например 5 или 10 копеек -- бесконечные дроби.
я бы обсудил с командой какой формат использовать - yaml или xml. Поскольку ямл в связи со своей развернутостью становится очень нечитабельным с объемом датасетов. XML в результате намного компактнее как оказалось
Ctrl+Y для быстрого удаления текущей строки или выделенных строк
практически совершенное видео
Также в TreeMap можно задать свой порядок сортировки с помощью интерфесов Comparable или Comparator
Верно, спасибо за дополнение!
Друг, у тебя не все IDE видно
Да, ещё не до конца освоился с форматом shorts так как записываю с ноута.
Супер!
Супер!
Что означает var document :Document ? у моего document нет никаких методов ((
Это просто сокращение от Document document. Проверьте, что вы импортируете класс именно из библиотеки jsoup.
@@devmark удалил :Document - заработало. По сути обычный html , но не интуитивно понятно по синтаксису
Понравилось как автор преподносит материал, просто и понятно
круто! делай еще, жаль, что нельзя дополнителмный лайк поставить за хорошую музыку на фоне
Спасибо! Любые комментарии под видео также приветствуются)
Я правильно понимаю, что если не добавлять кастомные типы, а в схеме указать price: String!, birthDate: String!, то запрос тоже отработает корректно?
В принципе большинство типов данных можно передавать строкой. Но тогда потребуется делать дополнительный парсинг. А в варианте с кастомными типами все работает автоматически.
@@devmark Это я к тому, что если нужно просто на фронте показать пользователю результат как есть, то технически можно всё, кроме id и объектов, объявлять в схеме String, а GraphQL уже под капотом сам сделает что-то типа toString() для полей, не являющихся строкой. А вот если нужно получить данные и что-то с ними сделать, то кастомные типы - must have.
Спасибо! Ты ТОП!
красавчик
Вот это возвращение неожиданное ) Я хоть и все что было в видно давно знаю, но все равно было интересно посмотреть, спасибо
Да я вроде никуда и не уходил)
Дружище, я наткнулся на тебя как-то случайно и подписался. У тебя очень хороший канал. Не бросай его только.
Спасибо!
Спасибо, хорошо преподнесли инфу.
Ты ТОП! Благодарю!
Интересно почему TreeSet типизированный типом без имплементации Comparable выдает ошибку только в рантайме? Это же жутко не удобно и опасно.
У меня такой же вопрос возник, когда я изучал эту тему)
классное видео, спс)
С первого раза всё понял! Подача очень хорошая
почему у меня нет выбора spring initialiser? У меня только spring boot... Как сделать?
А какая у вас версия Idea? Community или Ultimate?
Блестательное объяснение. Я правильно понял, что: 1) left & right мы могли бы назвать first & last? 2) Если у нас дан массив {1 2 3 4 5 6 7 8 9}, то left = 1, right = 9, а middle = 5. И когда мы двигаем границу диапазона вправо или влево, то мы переходим от 1 к 2 и от 2 к 3 если сдвигаем границу вправо, и наоборот, от 9 к 8 и от 8 к 7 если сдвигаем границу влево?
1) да 2) когда мы двигаем границу, то мы всегда отталкиваемся от middle, т.е. от 5 в вашем примере. и если искомое число меньше 5, то ставим right = 4. если искомое число больше 5, то ставим left = 6. То есть всегда выбираем ту половину, где потенциально может быть искомое число, т.к. массив отсортирован.
@@devmark спасибо.
Крутое видео! Благодарю! Жду новые видео по Java
Спасибо)