???Эта статья так популярна? Отложите действительно ценные статьи, попотейте... пошли.
Больше отличных статей.
«Микросервисы — это не все, а лишь подмножество определенного домена».
С таким количеством компонентов мониторинга всегда найдется подходящий для вас
«С Нетти, что мы разрабатываем? 》
«Вероятно, это наиболее подходящая спецификация Redis».
«Портрет программиста, десять лет взлетов и падений»
Самая полезная серия:
«Наиболее часто используемый набор навыков «vim» в производственной среде Linux.
«Наиболее часто используемый набор навыков «Sed» в производственной среде Linux.
«Наиболее часто используемый набор навыков «AWK» в производственной среде Linux.
Линукс из пяти частей и тому подобное.
«Остальная часть необитаемого острова» Linux (1) Подготовка»
«Linux« Остальная часть необитаемого острова »(2) Глава CPU»
«Linux« Остальная часть необитаемого острова »(3) глава памяти»
«Linux« Остальная часть необитаемого острова »(4) глава ввода-вывода»
«Сетевая глава Linux« Оставшаяся жизнь на необитаемом острове »(5)»
Больше, пожалуйста, следуйте. Конечно, вы также можете подписаться на публичный аккаунт.
↓↓↓↓2019.06.11↓↓↓↓↓↓
На самом деле я не ответил ни на один из них. Не потому, что я тупой, а потому, что не могу. С помощью Дахи я теперь могу, пожалуйста, дайте мне еще один шанс.
Разница TreeSet/HashSet
Как следует из названия, во-первых, это разница в структуре.
1. Структура TreeSet — это TreeMap, красно-черное дерево, которое может реализовать автоматическую сортировку. Он сравнивает содержимое с помощью метода equals или метода compareTo.
2. За HashSet стоит HashMap.Ключи неупорядочены и могут быть отсортированы только извне. Поскольку это хэш, методы hashCode и equals объекта должны быть переписаны.
Кроме того, есть небольшая разница, которую можно использовать для установки b:
1. HashSet может принимать нулевые значения, и есть только одно
2. Набор деревьев默认
Нулевые значения неприемлемы, и будет выброшено исключение нулевого указателя напрямую.
В наборе нет повторяющихся данных, и в TreeSet даже ничего нет.
Как HashMap разрешает конфликты и механизм расширения
Плохие уличные вопросы, где спросить, где ответить. Такая вещь - спинка.
Внутренняя структура HashMap на самом деле представляет собой массив + связанный список (если длина больше 8 после java8, он будет преобразован в красно-черное дерево). Когда HashMap инициализируется, по умолчанию их 16.hash槽
.
При сохранении объекта сначала найдите хэш-слот по хэш-коду объекта. Если несколько объектов попадают в один и тот же слот одновременно, для разрешения конфликтов на этом слоте используется связанный список.
При создании HashMap будет коэффициент загрузки. Каждая операция размещения будет проверять, превысит ли текущая емкость пороговое значение (initailCapacity*loadFactor). Если он превышает, расширение будет в два раза больше текущего размера. После расширения данные необходимо повторно хэшировать, т.е.transfer
метод.
Опыт: изменение размера занимает очень много времени, поэтому, если вы можете заранее оценить емкость, вы можете заранее исправить initailCapacity.
Как ConcurrentHashMap обеспечивает высокий параллелизм
Проще говоря, используются сегментные блокировки (разделенные блокировки). Каждая блокировка используется для блокировки части данных в контейнере, что снижает конкуренцию за блокировки между потоками.
Этот вопрос убьет людей, если задать его подробно, пространство ограничено и не многословно.
Как обычно используется пул потоков?
Для обычных сценариев вы можете использовать фабричный класс Executors для их создания. Обычно используются одиночные, фиксированные, кэшированные три.
Чаще для более точного управления класс ThreadPoolExecutor настраивается напрямую. Спецификация Али тоже этого требует (конечно, слизывая), а меня особенно волнует блокирующая очередь и стратегия насыщения.
Конечно, вы можете сказать это только в том случае, если вы знакомы с блокирующими очередями и стратегиями отказа. В противном случае было бы слишком неразумно копать себе яму.
Им нравится, что вы упомянули спецификацию Ali, что заставляет меня думать, что дизайн jdk очень низкий.
Сколько существует реализаций для нескольких потоков, ожидающих определенного узла, а затем равномерно освобождающих их?
Самый классический — CountDownLatch, основной поток блокируется в методе await, и каждый поток вызывает countDown. Некоторые классические проблемы скачек могут быть решены.
Другой вариант — CyclicBarrier. Каждый поток блокируется в методе await и освобождается коллективно при достижении определенного порога.
Кроме того, вы также можете использовать некоторые API более низкого уровня, такие как метод соединения Thread. Метод получения будущего и т. д. Усложнять не рекомендуется.
Вы также можете ответить сон. Есть проблема? Я могу использовать while для ожидания переменной, но зачем мне это делать?
структура индекса базы данных
B+ Tree, структура индекса, созданная для работы с медленными дисками. Должен быть гарантирован запрос по крайнему левому префиксу индекса.
HashКак и в случае с HashMap, для разрешения конфликтов используется связанный список.
В pg больше индексных структур. Почему так странно, что Mysql так мало? Вы хотите, чтобы я ответил на разницу между механизмами хранения?
выберите * из t где a=?и b>?упорядочить по c ограничение 0,100 как добавить индекс
Зная это, можно сделать вывод. => Когда порядок по полю появляется в условии where, индекс будет использоваться без операции сортировки. В других случаях при сортировке по не будет операции сортировки.
Следуя самому левому принципу, я могу создать индекс (a,b) .
Что такое кластеризованные и некластеризованные индексы
Таблица может иметь только один кластеризованный индекс. Основной файл индекса и файл данных — это один и тот же файл.InnoDB по умолчанию поддерживает кластеризованные индексы, а данные на листовом узле дерева B+ — это сами данные.
MyISAM не поддерживает кластерные индексы, а его конечные узлы хранят не сами данные, а адрес, по которому эти данные хранятся. В файловой структуре он будет разделен на индексный файл и файл данных.
Это бесполезно для программирования.
Знаете ли вы CAP?Что такое CAP в Redis?
-
Consistency
последовательность -
Availability
Доступность -
Partition tolerance
Допуск перегородки Как правило, существует компромисс между C и A.
Простой режим master-slave в redis фокусируется наCP
, то есть более высокие требования к согласованности.
redis-кластер, он принадлежитAP
тип, с большим упором на удобство использования
кепка это шапка, зеленая
Как понять идемпотентность Как делается идемпотентность интерфейса в проекте?
Идемпотент означает выполнение несколько раз с одним и тем же эффектом.
Например, для большинства почтовых операций, повторной отправки заказов и т. д. в итоге будет успешно сгенерирован только один заказ. Другой случай — сообщения, так как большинство MQ гарантируетat least once
, поэтому сообщение иногда повторяется.
1. Для запросов на публикацию я обычно принудительно перехожу на другие страницы после успешного выполнения запроса, чтобы не обновлять отправку.
2. Сложные операции обычно реализуются с использованием серийных номеров.
3. Некоторые сообщения без серийных номеров необходимо проверять и проверять несколько раз при их обработке, и даже введена таблица состояния сообщений для обеспечения идемпотентности.
Точно так же, как признание, каждое признание отвергается, потому что я и есть это id!
Объясните оптимистическую блокировку и пессимистическую блокировку.
Пессимистическая блокировка всегда предполагает наихудшую ситуацию.Каждый раз, когда данные обрабатываются, предполагается, что другие будут их изменять, поэтому они блокируются для обеспечения безопасности. Более поздние посетители могут только ждать. Блокировки строк, блокировки таблиц в базе данных и ключевые слова синхронизации в Java — все это пессимистические блокировки.
Оптимистическая блокировка как раз наоборот: она всегда предполагает наилучшую ситуацию и не требует блокировки данных, но добавляется дополнительная операция оценки. Например, большое количество CAS-операций в параллельном пакете, механизм оценки старых и новых номеров версий и т. д.
Пессимистичный замок — жена, и у вас исключительное пользование; оптимистичный замок — друг, и он запланирован по договоренности.
Определяет ли JVM, восстановлен ли объект?
Ответ - корни GC. То есть, начиная с корневого объекта, если на него не ссылается ни один объект, считается, что объект недоступен.
Люди, которых обычно ругают как «сломанных детей и без внуков», являются корнем, подлежащим переработке.
Что есть у GCROOT?
1. Объект, указанный в стеке виртуальной машины (таблица локальных переменных в кадре стека).
2. Объект, на который ссылается JNI (то есть нативный метод в целом) в локальном стеке методов.
3. Объекты, на которые ссылаются статические переменные и константы в области методов.
4. Ссылочный объект активного потока
Так что не позволяйте им размножаться.
Может ли рефлексия получить имя метода в классе, как насчет имени параметра, как насчет типа параметра?
Все будет хорошо.
После java8 получить параметры через класс Parameter名称
. Но есть предпосылки, нужно добавить переключатель компиляции.
javac -parameters
По умолчанию выключено, вперед!
Проблема в том, что все на Луне
Как реализован динамический прокси, в чем разница между прокси CgLib и jdk?
В java динамический прокси реализуется путем реализации интерфейса InvocationHandler, а затем для его инициализации используется Proxy.
Cglib использует собственную среду генерации ASM, которая может проксировать общие классы, но не может проксировать конечные классы, а jdk может проксировать только интерфейсы.
Весной cglib побеждает
Каковы основные реализации распределенных блокировок и в чем разница между блокировками redis и zk?
Обычно делятся на две категории.
Оптимистичная блокировка:Судя по механизму номера версии и реализации CAS, он не имеет ничего общего с хранилищем, в котором хранится номер версии.
Пессимистический замок:1. На основе записей базы данных записывать данные при входе и удалять записи при выходе
2. Блокировка строки базы данных, такая как распределенный кварц, который является эксклюзивной блокировкой.
3. Функция setnx на основе Redis (поскольку большинство из них будут устанавливать тайм-аут, рекомендуется использовать функцию set atomic с px)
4. По словам смотрителя зоопарка
разница:
Получение блокировок Redis — это циклический механизм. После того, как блокировка будет снята, за нее будут бороться несколько вызывающих абонентов, и некоторые задачи могут умереть от голода.
zk — это механизм мониторинга, и об изменениях будет сообщено. В дополнение к несправедливым блокировкам также могут быть реализованы честные блокировки.
С точки зрения элегантности явно выигрывает Redis
Какова роль ThreadLocal?
ThreadLocal используется для изоляции данных. ThreadLocal хранит данные, относящиеся к потокам. Нижний слой фактически является картой. Карта хранимых данных может быть получена через потоки.
Этот метод похож на запрос в сервлете.
Сюда можно поместить некоторые данные, которые необходимо привязать к потоку, например некоторую статистику потока.
Говорят, что это метод синхронизации потоков, но он явно не блокируется.
Есть ли способ оптимизировать ThreadLocal?
Производительность Map в ThreadLocal низкая, и метод линейного обнаружения, принятый Hash, решается.
Netty оптимизировала его, унаследовав класс Thread и внедрив собственный FastThreadLocal. оно использует
Я не понимаю jdk, очевидно, есть карта O (1), поэтому мне нужно самому построить более медленное колесо, почему? Другими словами, этот вопрос просто снова смещен к Марсу.
Какие моменты следует учитывать при проектировании системы seckill?
1. Предварительный нагрев данныхВторое уничтожение — это мгновенная операция, не ждите прихода трафика перед загрузкой данных. Данные можно заранее подогреть, например загрузить в кеш и т.п.
2. КэшВключая кеш CDN и кеш данных. Обеспечьте высокую доступность системы кэширования, и тогда данные будут доставлены.
3. Решите проблему перепроданностиВнедрите MQ, сериализуйте операционный инвентарь, остановите потребление после достижения порога и закройте функцию покупки. Или манипулировать кешем напрямую.
4. Отсечение пиков трафикаВнедрив MQ, трудоемкий бизнес можно ускорить, а потребности пользователей можно будет легко удовлетворить.
5. Предохранитель с ограничением токаАвтоматический выключатель будет отдавать приоритет обеспечению выполнения основной работы. Ограничивайте ток, выявляйте аномальный трафик и блокируйте его, в то же время допуская отказ некоторых запросов.
6. Упругое расширениеРешив, что нагрузка на систему достигает предела, вы можете противостоять пику, увеличив сервер. Необходимо открыть среду эксплуатации и обслуживания и иметь возможность быстрого расширения.
Боюсь немного уловить и просить до конца. Что за секкилл, секкилл Таобао либо недоступен, либо 500!
Забудь, мы тоже не хотим ехать в Ханчжоу. В следующий раз попробуйте худший отдел Али, чтобы увидеть, низкие ли требования и сможете ли вы пройти его.