Привет! Меня зовут Диана, и я занимаюсь разработкой с 2013. Здесь пишу просто и понятно про джава бэк
🔥Тот самый курс по многопочке🔥
https://fillthegaps.ru/mt
Комплименты, вопросы, предложения: @utki_letyat
Post #389
5.42K
- 👎 4
- 👍 1
JA @java_fillthegaps
Showing posts older than #390 · Back to latest
ArrayList быстрый доступ по индексу, а в LinkedList легко вставлять элементы в середину списка. Получаешь оффер🙂extends
▫️ В имени часто содержится Abstract, Template, Baseimplements interface Adapter {
default int get() {…}
}
Класс, который реализует интерфейс, переопределяет такой метод при необходимости.interface Collection<Т> {
void add(Т);
Т get();
}
Чтобы добавить, удалить или поменять сигнатуру метода нужно одновременно поменять код и в интерфейсе, и во всех реализациях. Если всё в рамках одного проекта, то проблем нет. Но если мы пишем библиотеку, то задача усложняется. Пользователи могут столкнутся с проблемами совместимости при переходе на новую версию.Comparator
Цепочка из 2 компараторов — это 2 вызова compare и объединение результатов. Логика всегда одинакова, и нет смысла дублировать её в каждом подклассе:default Comparator thenComparing(Comparator) {…};
❓Что если класс реализует 2 интерфейса с методами по умолчанию?
interface Интерфейс {
public void метод();
}
Классы реализуют эти методы под угрозой ошибки компиляции.default void метод() {…};
Конкретный класс переопределяет его при необходимости. Дефолтные методы уместны в трёх случаях, об этом будет статья в среду.static void метод() {…};
Статические методы не наследуются и не переопределяются. Вызвать такой метод можно только через имя интерфейса:Интерфейс.метод()Зачем он нужен?
static E copy() {…};
До java 8 статические методы часто объединяли в утилитный класс с похожим именем. Например, методы binarySearch, copy, min реализованы в классе Collections.private void m() {…};
private static void m() {…};
Эти методы недоступны для классов, реализующих интерфейс.public static. Из-за того, что других вариантов нет, в Intellij IDEA public и static подсвечиваются как избыточные и вместоpublic static int NUM = 1;допустима запись:
int NUM = 1;Такие поля компилируются в статические!
default int get();У приватных, статических и default методов в интерфейсах должна быть реализация.
private int get();
public static int get();
sessionID - { /*info*/ }
Там хранится информация для текущего сеанса."bonus":10Подпись, напомню, вычисляется из хэша данных и приватного ключа сервера.
"bonus sign":"Dfhdy76"
"city":"moscow"3️⃣ Сервер проверяет корректность своим публичным ключом. Если клиент пришлёт "bonus" : 99999, то сервер сразу распознает обман.
"bonus":10
"bonus sign":"Dfhdy76"
{"alg":"HS256", "typ":"JWT"}
▪️ Что-то полезное:{"bonus":10, "status":"vip"}
▪️ ПодписьeyJh.TYDkwI.SflKxwRJSMИ хотя механизм универсальный, чаще всего он используется для авторизации и помогает серверу понять, кто выполняет запрос:
"userId":34563847638🔹 Токен каждый раз передаётся в хэдере HTTP запроса
Objects.hash("пирожок") = 564453454
Результат не зависит от внешних параметров. Объект обратно восстановить нельзя. Самые популярный алгоритм — SHA, иногда используется MD5.+, / и =. Уйдут скобки, кавычки и всё, что может смутить канал передачи или библиотеку получателя.Base64.encode("{"/пирожок"/}") = "TWFuIGlzIGRpc3Rp="
После получения закодированное сообщение приводится к исходному виду:Base64.decode("TWFuIGlzIGRpc3Rp=") = "{"/пирожок"/}"
🔸 Шифрование .sig, который прилагается к сообщению и доказывает его подлинность. java.security.Пирожок → РйспзплПолучатель выполнит обратную операцию и расшифрует сообщение.
символ → символ + k
Параметр (или ключ) вносит больше неопределённости в результат. Ключ может быть одним числом или состоять из нескольких чисел. Злоумышленнику нужно гораздо больше времени, чтобы взломать такой шифр.