Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @easyoffer_adv
Post #2929
67
This post (sticker, poll or similar) has no web preview. Open in Telegram
JA @easy_java_ru
This post (sticker, poll or similar) has no web preview. Open in Telegram
This post (sticker, poll or similar) has no web preview. Open in Telegram
TreeMap поиск элемента по ключу выполняется за O(log n). TreeMap основан на красно-чёрном дереве (Red-Black Tree). log₂(n), поэтому: get(key)) выполняется за O(log n). put(key, value)) тоже O(log n), так как требует балансировки. import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(10, "Ten");
treeMap.put(20, "Twenty");
treeMap.put(30, "Thirty");
System.out.println(treeMap.get(20)); // Поиск за O(log n)
}
}
This post (sticker, poll or similar) has no web preview. Open in Telegram
GET /users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer token123
Content-Type: application/json
{ "userId": 123 }GET-запросы (если сервер поддерживает ETag и Cache-Control). POST, PUT, DELETE – не кэшируются, потому что меняют данные. /users/123 /users/123/orders /orders/456/detailsThis post (sticker, poll or similar) has no web preview. Open in Telegram
CREATE INDEX idx_user_name ON users(name);
SELECT *, так как это нагружает систему избыточными данными. SELECT * FROM users;
SELECT id, name FROM users;
EXPLAIN SELECT * FROM users WHERE name = 'Ivan';
LIMIT, чтобы БД не грузила лишние данные. SELECT * FROM users ORDER BY id LIMIT 10;
JOIN) таблиц может быть дорогостоящим. Вот несколько рекомендаций: JOIN. JOIN на подзапросы (EXISTS, IN). CREATE INDEX idx_orders_user_id ON orders(user_id);
QUERY CACHE в MySQL) или в приложении (Redis, Memcached). SET GLOBAL query_cache_size = 1000000;
JOIN.HashMap не является потокобезопасной. Это означает, что при одновременном доступе к нему из нескольких потоков без должной синхронизации могут возникнуть проблемы, такие как потеря данных, гонки за данные и другие виды состояний гонки. Если один поток изменяет ее структуру (например, добавляя или удаляя элементы), в то время как другой поток итерирует по ней или также пытается внести изменения, результаты могут быть непредсказуемыми.Collections.synchronizedMap(Map)Map<String, String> map = Collections.synchronizedMap(new HashMap<>());
ConcurrentHashMapConcurrentHashMap разработан для высокой конкуренции и эффективности при доступе из множества потоков, обеспечивая лучшую производительность по сравнению с synchronizedMap. ConcurrentHashMap позволяет одновременно читать данные из карты несколькими потоками без блокировки и записывать данные при минимальной блокировке.Map<String, String> concurrentMap = new ConcurrentHashMap<>();
As-If-Serial Semantics – это принцип оптимизации компилятором, при котором код может перестраиваться, но результат его выполнения остаётся таким же, как если бы инструкции выполнялись строго по порядку. int a = 10;
int b = 20;
int c = a + b;
System.out.println(c);
int c = 30;
System.out.println(c);
10 + 20 → 30). int x = 5;
int y = 10;
x = x + 1; // x = 6
System.out.println(y);
y и xint y = 10;
int x = 6;
System.out.println(y);
int x = 10;
int y = x + 5;
x = 20;
System.out.println(y);
x = 20;
int y = x + 5; // ❌ Неверно! y теперь 25, а должно быть 15
volatile boolean ready = false;
int data = 0;
void writer() {
data = 42;
ready = true;
}
void reader() {
if (ready) {
System.out.println(data); // Может напечатать 0 из-за перестановки!
}
}
volatile для readyvolatile boolean ready = false;
ID 1–1000, 1001–2000). int shardNumber = userId % numberOfShards;
java.util.function.Predicate<T> который принимает объект типа T и возвращает значение типа boolean. Вот пример использования:Predicate<String> isNotEmpty = s -> !s.isEmpty();
System.out.println(isNotEmpty.test("Hello")); // Выведет true
System.out.println(isNotEmpty.test("")); // Выведет false@FunctionalInterface. Эта аннотация не обязательна (компилятор может определить функциональный интерфейс и без неё), но она помогает в документировании кода и обеспечивает проверку времени компиляции, гарантируя, что интерфейс содержит только один абстрактный метод.@FunctionalInterface
public interface SimpleFunction {
int apply(int value);
}
// Использование
SimpleFunction triple = value -> value * 3;
System.out.println(triple.apply(5)); // Выведет 15