Последнее обновление 20180502
- структура данных
- Общие алгоритмы
- параллелизм
- Операционная система
- Шаблоны проектирования
- Эксплуатация, статистика и техническая поддержка
- промежуточное ПО
- Интернет
- база данных
- поисковый движок
- представление
- Большие данные
- Безопасность
- Распространенные фреймворки с открытым исходным кодом
- распределенный дизайн
- Дизайн-мышление и режим разработки
- управление проектом
- Общие деловые термины
- Технологические тенденции
- политики и правила
- Качество архитектора
- Управление командой
- Информация
- технические ресурсы
(Toc созданsimple-php-github-toc)
структура данных
очередь
-
"очередь java - подробный анализ очереди"
- Неблокирующая очередь: ConcurrentLinkedQueue (безопасность неограниченного потока), использующая механизм CAS (атомарная операция compareAndSwapObject).
- Очередь блокировки: ArrayBlockingQueue (ограниченная), LinkedBlockingQueue (неограниченная), DelayQueue, PriorityBlockingQueue, с использованием механизма блокировки; используйте блокировку ReentrantLock.
-
«Сравнительный анализ LinkedList, ConcurrentLinkedQueue, LinkedBlockingQueue»
собирать
связанный список, массив
Словарь, ассоциативный массив
куча
- «Проектирование стека и реализация структур данных и алгоритмов Java»
- «Класс стека Java»
-
"Подробный анализ реализации стека Java"
- Стек является потокобезопасным.
- Внутренне используйте массив для сохранения данных, удваивайте, когда недостаточно.
Дерево
бинарное дерево
Каждый узел имеет не более двух листовых узлов.
полное бинарное дерево
-
«Полное бинарное дерево»
- Листовые узлы могут появляться только в самом нижнем слое и следующем нижнем слое, а узлы самого нижнего слоя сосредоточены в бинарном дереве из нескольких позиций в крайнем левом слое.
Сбалансированное бинарное дерево
Абсолютное значение разницы высот между левым и правым поддеревьями не превышает 1, а левое и правое поддеревья оба являются сбалансированным бинарным деревом.
- «О структуре данных — сбалансированное двоичное дерево»
- «Об алгоритмах и структурах данных: восемь сбалансированных деревьев поиска, 2-3 дерева»
Двоичное дерево поиска (BST)
Двоичное дерево поиска, также известное как упорядоченное двоичное дерево, отсортированное двоичное дерево.
красно-черное дерево
-
«Легче всего понять красно-черное дерево»
- После фазы добавления поверните влево или вправо, чтобы снова достичь равновесия.
- «Об алгоритмах и структурах данных: девять красно-черных деревьев сбалансированных деревьев поиска»
B-, B+, B* дерево
MySQL основан на таблице организации кластеризованного индекса дерева B+.
- "Дерево B, дерево B+, дерево B*, подробное объяснение"
-
"Сравнение преимуществ и недостатков B-дерева, дерева B+ и дерева B*"
- По сравнению с B-деревом, структура связанного списка листовых узлов дерева B+ проще для сканирования библиотеки и поиска в диапазоне.
LSM-дерево
По сравнению с деревом B+, LSM (логарифмически структурированные деревья слияния) жертвует частью производительности чтения в обмен на производительность записи (посредством пакетной записи) для достижения промежуточного результата между чтением и записью. Hbase, LevelDB, Tair (Long DB) и nessDB используют древовидную структуру LSM. LSM может быстро создавать индексы.
-
- Дерево B+ имеет хорошую производительность чтения, но из-за необходимости упорядоченной структуры, когда ключи разбросаны, поиск по диску происходит часто, что приводит к производительности записи.
- LSM состоит в том, чтобы разбить большое дерево на N маленьких деревьев, сначала записать в память (нет проблем с поиском, высокая производительность) и построить в памяти упорядоченное маленькое дерево (упорядоченное дерево).Чем больше размер, тем меньше будет дерево памяти. сброшен на диск. При чтении, поскольку вы не знаете, в каком маленьком дереве находятся данные, вы должны пройти (бинарный поиск) все маленькие деревья, но данные упорядочены внутри каждого маленького дерева.
-
"Механизм хранения LSM-дерева (Log-Structured Merge Tree)"
- В экстремальных условиях производительность записи HBase на основе LSM-дерева на порядок выше, чем у MySQL, а производительность чтения на порядок ниже.
- Метод оптимизации: фильтр Блума заменяет бинарный поиск; компактное дерево десятичных разрядов для повышения производительности запросов.
- В Hbase после того, как память достигает определенного порога, все сбрасывается на диск для формирования файла (номер B+).HDFS не поддерживает операцию обновления, поэтому Hbase выполняет общий сброс вместо обновления слиянием. Маленькие деревья, сброшенные на диск, периодически сливаются в большое дерево.
BitSet
Часто используется для проверки дедупликации крупномасштабных данных.
Общие алгоритмы
Алгоритм сортировки, поиска
сортировка выбором
-
«Классические алгоритмы сортировки выбором Java (SelectionSort)»
- Каждый проход выбирает наименьший элемент из записей, подлежащих сортировке, и помещает его в конец отсортированной последовательности до тех пор, пока не будут отсортированы все записи.
Пузырьковая сортировка
-
«2 способа написать пузырьковую сортировку»
- Соседние элементы меняются местами, а самый большой идет последним.
- Сложность времени O (n²)
Сортировка вставками
быстрая сортировка
-
«Садись на унитаз и смотри алгоритм: быстрая сортировка»
- Одна сторона больше или меньше другой.
Сортировка слиянием
-
«Графический алгоритм сортировки (4) Сортировка слиянием»
- Разделяй и властвуй, разбирай на мелкие части и сливай (перестраивай новое пространство для копирования).
Сортировка холмов
TODO
сортировка кучей
-
«Графический алгоритм сортировки (3) сортировка кучей»
- Процесс сортировки — это процесс построения наибольшей кучи, самой большой кучи: значение каждого узла больше или равно значению его левого и правого дочерних узлов, а верхний элемент кучи является наибольшим значением.
сортировка по подсчету
-
«Сортировка подсчетом и сортировка ведра»
- Подобно процессу сортировки ведер, разница заключается в количестве ведер.
сортировка ведра
- "【Ага! Алгоритм] Самая быстрая и простая сортировка — сортировка ведром»
-
Алгоритм сортировки (3): сортировка подсчетом и сортировка сегментом
- Сортировка ведра делит интервал [0,1) на n подынтервалов одинакового размера, которые называются ведрами.
- Каждый проход сортируется индивидуально, а затем проходится каждый ковш.
сортировка по основанию
Расположите в порядке единиц, десятков, сотен и так далее.
бинарный поиск
-
"Двоичный поиск (реализация Java)"
- Требует, чтобы последовательность для поиска была упорядочена.
- Временная сложность O(logN).
-
«Java реализует бинарный поиск — двумя способами»
- в то время как + рекурсия.
Инструмент сортировки в Java
-
"Анализ принципа реализации Arrays.sort и Collections.sort"
- Алгоритм Collections.sort вызывает сортировку слиянием.
- Arrays.sort() использует 2 алгоритма сортировки: быструю сортировку для данных базового типа и сортировку слиянием для массивов объектов.
Фильтр Блума
Он часто используется для сортировки больших данных, таких как электронная почта, URL-адреса и т. д. Основной принцип: вычисление каждого фрагмента данных для создания отпечатка (один байт или более байтов, но он должен быть намного меньше, чем исходные данные), каждый из которых получается случайным вычислением после сопоставления отпечатка с большим побитовым значением. пространство для хранения. Примечание. Будет определенная частота ошибок. Преимущества: высокая эффективность использования пространства и времени. Недостаток: по мере увеличения количества хранимых элементов увеличивается частота просчетов.
- «Фильтры Блума — компактные структуры данных»
- Дедупликация больших объемов данных: Bitmap и фильтр Блума (Bloom Filter)
-
«Реализация фильтра Блума на основе Redis»
- Структура данных Bitmap на основе Redis.
-
«Веб-краулер: использование фильтра Блума (BloomFilter) в стратегии дедупликации URL-адресов»
- Использование класса BitSet в Java и алгоритма хеширования взвешенной суммы.
сравнение строк
Алгоритм КМП
KMP: Алгоритм Кнута-Морриса-Пратта (сокращенно KMP) Основной принцип заключается в использовании «таблицы частичного соответствия» для пропуска элементов, которые уже были сопоставлены.
Сначала в глубину, сначала в ширину
как дела
алгоритм поиска с возвратом
Алгоритм обрезки
динамическое программирование
- «Подробное объяснение динамического программирования — Цзоу Бо рассказывает о динамическом программировании»
- «Личное понимание алгоритмов динамического программирования»
Наивный Байес
-
«Познакомьте вас с алгоритмом классификации Наивного Байеса»
- P(B|A)=P(A|B)P(B)/P(A)
Алгоритм рекомендаций
Алгоритм минимального связующего дерева
алгоритм кратчайшего пути
параллелизм
Многопоточность
потокобезопасность
согласованность, транзакция
Свойства ACID транзакции
уровень изоляции транзакций
-
Незафиксированное чтение: транзакция может прочитать другие незафиксированные данные, которые подвержены грязному чтению.
-
Фиксация чтения: одна транзакция ожидает фиксации другой транзакции, прежде чем она сможет прочитать данные, но будут неповторяющиеся операции чтения (несоответствующие данные, считанные несколько раз), и в процессе чтения будет много операций UPDATE. (Уровень по умолчанию для большинства баз данных — RC, таких как SQL Server, Oracle), который нельзя изменить при чтении.
-
Повторяемое чтение: в одной и той же транзакции гарантирует получение одних и тех же данных при каждом чтении, но не гарантирует, что исходные данные будут обновлены другими транзакциями (фантомное чтение).Mysql InnoDB — это уровень.
-
Сериализация: все обрабатывается последовательно (в ущерб эффективности)
-
Четыре характеристики транзакций базы данных и уровни изоляции транзакций
-
«Проблема фантомного чтения MySQL InnoDB»
- Пример фантомного чтения очень нагляден.
- Решено с помощью ВЫБЕРИТЕ... ДЛЯ ОБНОВЛЕНИЯ.
-
«Статья поможет вам понять MySQL и InnoDB»
- Проиллюстрированы грязные чтения, неповторяемые чтения и фантомные чтения.
MVCC
-
"[mysql] Некоторое понимание MVCC в innodb"
- MVCC используется на уровне изоляции Repeatable-Read в innodb.
- MVCC может вызвать проблемы с фантомным чтением (исключение при обновлении).
-
«Легкое понимание механизма реализации MYSQL MVCC»
- Управление MVCC реализовано путем скрытия столбца версии, в одном столбце записывается время создания, в другом столбце записывается время удаления, здесь время
- Работайте только со строками, которые меньше (или равны) текущей версии за раз.
Замок
Блокировки и классы синхронизации в Java
-
«Блокировать классификацию в Java»
- В основном включают синхронизированный, ReentrantLock и ReadWriteLock.
-
- с контролем количества
- Используйте «приобрести», чтобы подать заявку, и «блокировать», если вы не подаете заявку; используйте «выпуск» для «выпуска».
-
«Мьютекс против семафора в разработке Java»
- Проще говоря, Mutex является эксклюзивным, и можно получить только один ресурс.Семафор также является эксклюзивным, но может быть определено несколько объектов, которые могут получать ресурсы.
Справедливая блокировка и нечестная блокировка
Роль справедливых блокировок заключается в том, чтобы выполняться в строгом соответствии с порядком запуска потоков, при этом другим потокам не разрешается вскакивать в очередь на выполнение; нечестные блокировки допускают вставку в очередь.
-
«Честный замок и несправедливый замок»
- И ReentrantLock, и synchronized по умолчанию являются несправедливыми блокировками. ReentrantLock может быть установлен как справедливая блокировка.
пессимистический замок
Если пессимистическая блокировка используется неправильно (слишком много блокировок), это приведет к тому, что служба будет ждать в большой области. Рекомендуется использовать оптимистическую блокировку + сначала повторить попытку.
-
«[MySQL] Пессимистическая блокировка и оптимистичная блокировка»
- Оптимистичный метод блокировки: номер версии + метод повторной попытки
- Пессимистическая блокировка: блокировка строки через выбор... для обновления (нечитаемая, недоступная для записи, общая блокировка, доступная для чтения и записи).
-
- Хотя практическая блокировка механизма хранения MySQL innodb является блокировкой строки, она внутренне блокирует индекс.
- Различные условия индексирования, блокирующие одни и те же данные, могут привести к взаимоблокировкам.
Оптимистичная блокировка и CAS
-
"Реализация оптимистической блокировки - CAS"
- Подобно оптимистической блокировке MySQL, но при сравнении с исходным значением.
АВА-проблема
Из-за высокого параллелизма в CAS этот A может не совпадать с другим A после обновления. Это можно решить по номеру версии, подобно оптимистической блокировке, упомянутой выше в Mysql.
- «Проблемы Java CAS и ABA»
-
«Проблемы ABA и их предотвращение в Java»
- AtomicStampedReference и AtomicStampedReference.
Контейнер CopyOnWrite
Контейнер CopyOnWrite можно читать одновременно без блокировки. Параллельные контейнеры CopyOnWrite используются для одновременных сценариев с большим количеством операций чтения и меньшим количеством операций записи. Например, белые и черные списки, а также сценарии доступа и обновления товарных категорий не подходят для сценариев, требующих строгой согласованности данных.
-
«Реализация карты копирования при записи в JAVA»
- Чтобы добиться разделения чтения и записи, чтение происходит с исходными данными, а запись — с репликой.
- Согласованность достигается за счет возможной согласованности без блокировки.
-
«Разговор о параллелизме — контейнер копирования при записи в Java»
RingBuffer
Блокировки с повторным входом и блокировки без повторного входа
-
"Реентерабельные и нереентерабельные блокировки"
- Проиллюстрируйте повторные и неповторные блокировки на простых примерах кода.
- Повторно входящая блокировка означает, что тот же поток может снова получить ранее полученную блокировку.
- Повторно входящие блокировки позволяют пользователям избегать взаимоблокировок.
- Реентерабельные блокировки в Java: синхронизированные и java.util.concurrent.locks.ReentrantLock
-
Резюме «Реентерабельная блокировка ReenTrantLock (отличие от синхронизированной)»
- Synchronized прост в использовании, и компилятор блокирует его, что является несправедливой блокировкой.
- ReenTrantLock является гибким в использовании, и честность блокировки можно настроить.
- В том же сценарии блокировки рекомендуется синхронизированный.
Мьютекс и общий замок
Мьютекс: только один поток может одновременно получить блокировку. Например, ReentrantLock — это мьютекс, а блокировка записи в ReadWriteLock — это мьютекс. Общая блокировка: Блокировка, которая может иметь несколько потоков одновременно или. Например, Semaphore и CountDownLatch являются общими блокировками, а блокировки чтения в ReadWriteLock — общими блокировками.
тупик
-
«Разумное объяснение четырех необходимых условий «тупика»
- Взаимоисключающее, притяжательное, неотчуждаемое, неотчуждаемое.
-
Как Java просматривает взаимоблокировки?
- JConsole может выявлять взаимоблокировки.
-
Многопоточность в Java: взаимоблокировка и обнаружение
- jstack может показывать взаимоблокировки.
Операционная система
компьютерные принципы
CPU
многоуровневый кэш
Типичный ЦП имеет кэш-память L3, и чем ближе он к ядру, тем он быстрее и тем меньше места. L1 обычно составляет 32 КБ, L2 обычно составляет 256 КБ, а L3 обычно составляет 12 МБ. Требуется 200 тактов ЦП для скорости памяти и 1 цикл ЦП для кэша ЦП.
процесс
TODO
нить
сопрограмма
-
«Завершение сопрограмм python — реализация от yield до модели актора»
- За планирование потоков отвечает операционная система, а за планирование сопрограмм отвечает сама программа.
- По сравнению с потоками сопрограммы уменьшают ненужное переключение ОС.
- На самом деле более целесообразно переключаться при обнаружении операции ввода-вывода (поскольку операция ввода-вывода не занимает ЦП), если операция ввода-вывода не обнаружена, переключаться в соответствии с интервалом времени.
Linux
Шаблоны проектирования
Шесть принципов шаблонов проектирования
-
Шесть принципов шаблонов проектирования
- Принцип открытости-закрытости: открыт для расширения, закрыт для модификации и использует абстрактные классы и интерфейсы.
- Принцип замещения Лискова: базовые классы могут быть заменены подклассами, используя наследование абстрактного класса вместо наследования конкретного класса.
- Принцип инверсии зависимостей: полагайтесь на абстракцию, а не на конкретность, программа для интерфейса, а не для реализации.
- Принцип изоляции интерфейса: лучше использовать несколько изолированных интерфейсов, чем использовать один интерфейс и установить наименьший интерфейс.
- Закон Деметры: Программная сущность должна как можно меньше взаимодействовать с другими сущностями, устанавливая связи через промежуточные классы.
- Принцип повторного использования композиции: попробуйте использовать композицию/агрегацию вместо наследования.
23 распространенных шаблона проектирования
Сценарии применения
-
«Подсчет шаблонов проектирования в JDK»
-
Структурные модели:
- Адаптер: используется для преобразования одного интерфейса в другой, например java.util.Arrays#asList().
- Режим моста: этот режим разделяет абстракцию и реализацию абстрактной операции, так что абстракцию и реализацию можно изменять независимо друг от друга, например JDBC;
- Режим композиции: один объект и композиция объектов кажутся клиенту эквивалентными. Другими словами, метод определенного типа также принимает в качестве параметра собственный тип, например Map.putAll, List.addAll, Set.addAll.
- Шаблон декоратора: динамическое добавление дополнительных функций к объекту, что также является альтернативой созданию подклассов, например java.util.Collections#checkedList|Map|Set|SortedSet|SortedMap.
- Шаблон легковеса: используйте кеш, чтобы ускорить время доступа к большому количеству небольших объектов, таких как valueOf(int).
- Режим прокси: режим прокси заключается в замене сложного или трудоемкого объекта простым объектом, например java.lang.reflect.Proxy.
-
Режим создания:
- Шаблон абстрактной фабрики. Шаблон абстрактной фабрики предоставляет протокол для создания ряда связанных или независимых объектов без указания типа конкретных объектов, например java.util.Calendar#getInstance().
- Режим построения (Builder): Определен новый класс для создания экземпляра другого класса, чтобы упростить создание сложных объектов, таких как: java.lang.StringBuilder#append().
- Заводской метод: простовозвращение* Методы, возвращающие определенные объекты, а не несколько, например java.lang.Object#toString(), java.lang.Class#newInstance().
- Шаблон прототипа: позволяет экземплярам классов создавать копии самих себя, например: java.lang.Object#clone().
- Режим Singleton: в глобальном масштабе существует только один экземпляр, например java.lang.Runtime#getRuntime().
-
модель поведения:
- Шаблон цепочки ответственности: разделяйте объекты, передавая запросы от одного объекта к следующему объекту в цепочке, пока запрос не будет обработан. Например, javax.servlet.Filter#doFilter().
- Командный режим: инкапсулируйте операции в объекты для хранения, доставки и возврата, например: java.lang.Runnable.
- Режим интерпретатора: определяет грамматику языка, а затем анализирует операторы соответствующей грамматики, такие как java.text.Format, java.text.Normalizer.
- Шаблон итератора: обеспечивает согласованный способ последовательного доступа к объектам в коллекции, например java.util.Iterator.
- Шаблон посредника: использование промежуточного объекта для распространения сообщений и уменьшения прямых зависимостей между классами, java.lang.reflect.Method#invoke().
- Режим пустого объекта: например, java.util.Collections#emptyList().
- Шаблон наблюдателя: он позволяет объекту гибко отправлять сообщения заинтересованным объектам, таким как java.util.EventListener.
- Шаблон метода шаблона: позволяет подклассам переопределять часть метода вместо всего метода, например java.util.Collections#sort().
-
одноэлементный шаблон
- «Три реализации одноэлементного шаблона и их соответствующие преимущества и недостатки»
-
«Singleton Mode — Reflection — предотвращение разрушения одноэлементного режима сериализацией»
- Используйте типы перечисления.
Модель цепочки ответственности
TODO
MVC
-
«Шаблон MVC»
- Модель — Вид — Контроллер
IOC
- «Понимание МОК»
-
Понимание и интерпретация МОК
- Форвардное управление: Традиционный способ прохождения нового. Реверсивный контроль, ввод объектов через контейнер.
- Роль: используется для развязки модуля.
- DI: Dependency Injection, то есть внедрение зависимостей, заботится только об использовании ресурсов, а не об их источнике.
AOP
- «Легкое понимание АОП (аспектно-ориентированное программирование)»
- "Детали весеннего АОП"
-
«Принцип реализации Spring АОП»
- Spring AOP использует два основных способа динамического прокси: динамический прокси JDK и динамический прокси CGLIB.
-
«Принцип реализации Spring AOP и приложение CGLIB»
- Принцип обработки среды Spring AOP для прокси-классов AOP: если класс реализации целевого объекта реализует интерфейс, Spring AOP будет использовать динамический прокси-сервер JDK для создания прокси-класса AOP; если класс реализации целевого объекта реализует не реализовывать интерфейс, Spring AOP будет использовать CGLIB для создания прокси-классов AOP
UML
Микросервисное мышление
- «Проектирование микросервисной архитектуры»
- «Руководство по выбору стека технологий микросервисной архитектуры»
Закон Конвея
-
«Теоретические основы микросервисной архитектуры — закон Конвея»
- Закон 1. Способ организационной коммуникации будет выражаться в системном дизайне, то есть схема архитектуры будет аналогична организационной структуре.
- Закон 2: Сколько бы ни было времени, невозможно сделать что-то одно идеально, но всегда есть время, чтобы закончить одно дело. Если вы не можете съесть жир за один раз, вы можете сделать это первым.
- Закон 3. Линейные системы и линейные организационные структуры потенциально неоднородны и гомоморфны. Посадка дынь пожинает дыни, создавая независимые и автономные подсистемы для снижения затрат на связь.
- Закон 4. Крупные системные организации всегда более склонны к декомпозиции, чем небольшие системы. Когда они вместе долгое время, их надо разделить.Разделяй и властвуй.
Эксплуатация, статистика и техническая поддержка
рутинный мониторинг
-
«Путь развития системы мониторинга бизнес-систем Tencent»
- Методы мониторинга: активный, пассивный, обходной (например, мониторинг общественного мнения)
- Тип мониторинга: базовый мониторинг, мониторинг сервера, мониторинг клиента, мониторинг, мониторинг клиента
- Цели мониторинга: полный, блок, точный
- Основные показатели: объем запросов, показатель успешности, затраты времени
-
- Zabbix, Nagios, Ganglia, Zenoss, Open-falcon, мониторинг сокровищ, мониторинг сервисов веб-сайтов 360, облачный мониторинг Alibaba, облачное наблюдение Baidu, мониторинг веб-сайтов малых пчел и т. д.
-
"Опыт строительства и вторичной разработки систем мониторинга и сигнализации"
средство мониторинга командной строки
-
«Общие инструменты мониторинга командной строки»
- топ, сар, царь, нлоад
-
«20 инструментов командной строки для мониторинга производительности системы Linux»
APM
APM — управление производительностью приложений
-
Dapper — система трассировки для крупномасштабных распределенных систем.
-
Лучшее программное обеспечение с открытым исходным кодом в алфавитном порядке
-
«Выбор технологии APM с открытым исходным кодом и реальный бой»
- В основном основан на идее Google Dapper (система отслеживания для крупномасштабных распределенных систем).
Статистический анализ
-
«Основы статистики дорожного движения: закопанные точки»
- Общие показатели: посещения и посетители, время пребывания, показатель отказов, показатель выхода, коэффициент конверсии, вовлеченность.
-
- Сторонняя статистика: Youmeng, Baidu Mobile, Кубик Рубика, App Annie, данные о разговорах, данные Shence и т. д.
-
«Практика бесследного встраивания в интерфейс Meituan Review»
- Так называемая бесследность означает, что узел сбора настраивается с помощью визуального инструмента, конфигурация автоматически анализируется во внешнем интерфейсе, а данные о скрытых точках сообщаются вместо жесткого кодирования.
Непрерывная интеграция (CI/CD)
Jenkins
разделение окружающей среды
Разделение сред разработки, тестирования и производства.
Автоматизированная эксплуатация и техническое обслуживание
Ansible
- «Авторитетное китайское руководство Ansible»
- «Базовая конфигурация Ansible и практический пример проекта корпоративного уровня»
puppet
chef
контрольная работа
Теория TDD
-
«Глубокая интерпретация — TDD (разработка через тестирование)»
- Кодирование функционального кода на основе тестовых случаев, основной практики XP (экстремального программирования).
- Преимущества: Сосредоточьтесь на одном моменте, уменьшая нагрузку на размышления, адаптируясь к изменениям в требованиях или улучшая структуру кода, заранее уточняя требования, быстрая обратная связь и т. д.
модульный тест
- "Глава JUnit модульного тестирования Java"
-
JUnit 4 против TestNG
- TestNG охватывает функциональность JUnit для более сложных сценариев.
-
«Основные тестовые функциональные точки модульного тестирования»
- Тестирование интерфейса модуля, тестирование локальной структуры данных, тестирование путей, тестирование обработки ошибок, тестирование граничных условий.
испытание давлением
- Руководство пользователя Apache ab test
- "Стресс-тест большого сайта и план оптимизации"
- «Рекомендуемые 10 лучших основных инструментов тестирования нагрузки/нагрузки/производительности»
- "Анализ приложения tcpcopy для измерения реального трафика"
- «Учебное пособие по простому использованию nGrinder»
Стресс-тест полной ссылки
- «JD 618: Модернизируйте полнофункциональное решение для стресс-тестирования, чтобы создать робота для военных учений ForceBot»
- «Ele.me Исследование и практика полносвязного стресс-теста»
- «Четыре языка, восемь платформ | Решение для полносвязного стресс-теста Didi»
- «Полный опыт стресс-тестирования»
A/B, оттенки серого, сине-зеленый тест
Виртуализация
KVM
- «Подробное объяснение KVM, слишком подробное и глубокое, классическое»
- «[Графика] Сведения об установке виртуальной машины KVM»
Xen
OpenVZ
контейнерная технология
Docker
- "Несколько картинок, которые помогут понять основные принципы и быстрый запуск докера"
- «Основная технология Docker и принцип реализации»
- Учебник по докеру
Облачные технологии
OpenStack
DevOps
управление документами
- Платная система документооборота Confluence
- GitLab?
- Wiki
промежуточное ПО
Web Server
Nginx
-
«Основы изучения Nginx — сравнение многопроцессорности и Apache»
- Nginx обеспечивает высокий уровень параллелизма благодаря асинхронному неблокирующему механизму обработки событий. Apache занимает один поток на запрос, что очень сильно потребляет системные ресурсы.
- Управление событиями подходит для служб с интенсивным вводом-выводом (Nginx), а несколько процессов или потоков подходят для служб с интенсивным использованием ЦП (Apache), поэтому Nginx подходит для обратного проксирования, а не для использования веб-сервера.
-
«Сравнение nginx и Apache, их преимущества и недостатки»
- nginx подходит только для статических и обратных прокси, не подходит для обработки динамических запросов.
OpenResty
- Официальный сайт
-
«На ОпенРести»
- Разработка на Nginx возможна через модули Lua.
Apache Httpd
Tomcat
Принципы архитектуры
-
Архитектура системы Tomcat и шаблоны проектирования, часть 1: как это работает
-
«Четыре изображения помогут вам понять архитектуру системы Tomcat»
-
JBoss против Tomcat: выбор сервера приложений Java
- Tomcat — это облегченный контейнер serverlet, который не реализует все функции JEE (такие как сохраняемость и обработка транзакций), но может быть заменен другими компонентами, такими как Srping.
- Jboss реализует все функции JEE, программное обеспечение с открытым исходным кодом бесплатно, а документация платная.
План настройки
-
- Запустите режим NIO (или APR), настройте пул потоков, отключите коннектор AJP (архитектура Nginx+tomcat, AJP не требуется);
-
«Сравнение и анализ AJP и HTTP»
- Протокол AJP (порт 8009) используется для уменьшения количества соединений (внешних) с внешним сервером (например, Apache и должен поддерживать протокол AJP) и повышения производительности за счет длинных соединений.
- Когда параллелизм высок, протокол AJP лучше, чем протокол HTTP.
Jetty
- Как работает Jetty и чем он отличается от Tomcat
-
«Сравнение преимуществ причала и кота»
- Сравнение архитектуры: архитектура Jetty проще, чем у Tomcat.
- Сравнение производительности: у Jetty и Tomcat небольшая разница в производительности. Jetty по умолчанию использует NIO для обработки запросов ввода-вывода, а Tomcat по умолчанию использует BIO для обработки запросов ввода-вывода. Tomcat подходит для обработки нескольких очень загруженных каналов и обработки статических данных. ресурсы, производительность низкая.
- Другие аспекты: приложение Jetty работает быстрее, его модификация проста, а поддержка новой спецификации сервлетов лучше; Tomcat имеет более полную поддержку JEE и Servlet.
тайник
локальный кеш
-
- Кэш L3 в куче, вне кучи и на диске.
- Его можно установить в соответствии с емкостью кэш-памяти.
- Стратегии истечения, такие как время и количество раз.
-
- Простой и легкий, без кучи, дискового кеша.
-
"Pagespeed - ленивый инструмент, ускорение на стороне сервера"
Кэш клиента
-
«Кэширование на стороне браузера»
- В основном с использованием параметра Cache-Control.
-
«Анализ и практика использования механизма кэширования H5 и Mobile WebView»
кеш сервера
Memcached
-
«Глубокое понимание принципа Memcached»
- Используйте технологию мультиплексирования для улучшения параллелизма.
- Алгоритм выделения slab: memcached выделяет память slab, по умолчанию 1 МБ. После выделения в slab, slab разбивается на чанки одинакового размера, Chunk — это пространство памяти, используемое для кэширования записей, размер чанка по умолчанию увеличивается в 1,25 раза. Преимущество в том, что он не будет часто обращаться к памяти и повысит эффективность ввода-вывода, а недостаток в том, что будет определенное количество потери памяти.
-
«Разница между добавлением, установкой и заменой в кэше памяти»
- Разница в том, что независимо от того, существует ключ или нет, возвращаемое значение может быть истинным и ложным.
Redis
-
«Основополагающий принцип Redis»
- Используйте ziplist для хранения связанного списка, ziplist представляет собой сжатый связанный список, его преимущество в том, что он может экономить место в памяти, потому что содержимое, которое он хранит, находится в непрерывной области памяти.
- Используйте список пропусков (таблицу пропуска) для хранения упорядоченных наборов объектов, начните с высокоуровневого поиска, временная сложность сравнима с красно-черным деревом, проста в реализации, без блокировок и с хорошим параллелизмом.
-
- Режим RDB: регулярные моментальные снимки резервных копий, часто используемые для аварийного восстановления. Преимущества: резервное копирование в процессе разветвления не влияет на основной процесс, а RDB быстрее, чем AOF, при восстановлении больших наборов данных. Недостаток: данные будут потеряны.
- Режим AOF: режим сохранения журнала операций. Преимущества: Меньшая потеря данных при восстановлении. Недостатки: Большие файлы, медленное восстановление.
- Также возможно использовать комбинацию этих двух способов.
-
«Распределенный кэш — последовательность 3 — атомарная операция и оптимистическая блокировка CAS»
Архитектура
стратегия утилизации
Tair
- Официальный сайт
- «Сравнение Таира и Редиса»
- Возможности: количество резервных узлов можно настроить и синхронизировать с резервным узлом посредством асинхронной синхронизации.
- Последовательный алгоритм хеширования.
- Архитектура: Подобно идее дизайна Hadoop, есть Configserver, DataServer, Configserver определяется пульсом, а Configserver также имеет отношение активный/резервный.
Несколько механизмов хранения:
- MDB, полностью в памяти, может использоваться для хранения данных, таких как сеанс.
- Rdb (похож на Redis), легкий, удаляет такие операции, как aof, поддерживает операции Restfull.
- LDB (механизм хранения LevelDB), постоянное хранилище, LDB как постоянство rdb, реализованное Google, более эффективное, теоретической основой является алгоритм LSM (Log-Structured-Merge Tree), теперь измените данные в памяти, когда они достигают определенное количество (и старые данные, суммированные в памяти, записываются на диск вместе), а затем записываются на диск, и хранилище более эффективно.Счет аналогичен алгоритму хеширования.
- Таир использует разделяемую память для хранения данных, если сервис зависает (не сервер), то после перезапуска сервиса данные остаются.
очередь сообщений
-
«Обучение в режиме очереди сообщений-Push/Pull и обучение ActiveMQ и JMS»
- Потребители RabbitMQ по умолчанию находятся в режиме push (также поддерживается режим pull).
- Kafka по умолчанию находится в режиме извлечения.
- Метод push: Преимущество состоит в том, что сообщение может быть отправлено потребителю как можно быстрее, а недостатком является то, что если вычислительная мощность потребителя не справляется, буфер потребителя может переполниться.
- Метод вытягивания: преимущество в том, что потребитель может вытягивать его в зависимости от вычислительной мощности, но недостатком является то, что это увеличивает задержку сообщения.
шина сообщений
Шина сообщений эквивалентна уровню инкапсуляции в очереди сообщений, унифицированному входу, унифицированному управлению и контролю, а также упрощенным затратам на доступ.
порядок сообщений
RabbitMQ
Поддержка транзакций, режимы push-pull поддерживаются и подходят для сценариев, требующих надежной передачи сообщений.
- «Введение в сценарии приложений и основные принципы RabbitMQ»
- "RabbitMQ очереди сообщений"
- «Механизм подтверждения сообщения RabbitMQ (транзакция + подтверждение)»
RocketMQ
Реализация Java, поддерживается режим push-pull, а пропускная способность уступает Kafka. Порядок сообщений гарантирован.
ActiveMQ
Чистая реализация Java, совместимая с JMS, может быть встроена в приложения Java.
Kafka
Высокая пропускная способность, использование режима вытягивания. Подходит для сценариев с большим количеством операций ввода-вывода, таких как синхронизация журналов.
- Официальный сайт
- "Сравнение различных очередей сообщений, глубокий анализ Kafka, всем рекомендуется, замечательная и хорошая статья! 》
- Введение и примеры механизма разделения Kafka
Push-сообщение Redis
Режимы производителя и потребителя полностью выполняются на стороне клиента.Реализованы режимы списка и извлечения, а инструкции blpop используются для блокировки и ожидания.
ZeroMQ
TODO
по расписанию
Автономное планирование времени
-
- fork процесс + спящий опрос
-
"Анализ исходного кода Quartz -- принцип запуска по времени запуска"
-
«Демистификация принципа кварца и интерпретация исходного кода»
- Временное планирование находится в коде QuartzSchedulerThread, а while() зацикливается бесконечно, каждый раз, когда цикл выводит триггер, который вот-вот прибудет, и запускает соответствующее задание, пока поток планировщика не будет закрыт.
Распределенное планирование времени
-
«Сколькими из этих превосходных домашних распределенных систем планирования задач вы пользовались? 》
- opencron, LTS, XXL-JOB, Elastic-Job, Uncode-Schedule, Antares
-
«Основные принципы реализации планирования задач Quartz»
- В кластере Quartz независимый узел Quartz не взаимодействует с другими узлами или узлами управления, но воспринимает состояние другого приложения Quartz через ту же таблицу базы данных.
RPC
-
«Внедрение RPC Framework с нуля — принцип и реализация RPC»
- Основные роли: Сервер: поставщик услуг, предоставляющий услугу, Клиент: потребитель услуг, вызывающий удаленную службу, Реестр: реестр для регистрации и обнаружения службы.
-
«Сравнение производительности распределенных платформ RPC Dubbo, Motan, rpcx, gRPC и thrift»
Dubbo
** SPI ** TODO
Thrift
- Официальный сайт
-
"Детали бережливого RPC"
- Поддерживает несколько языков и определяет интерфейсы через промежуточные языки.
gRPC
Сервер может быть аутентифицирован и зашифрован для обеспечения безопасности данных во внешней сетевой среде.
Промежуточное ПО базы данных
Sharding Jdbc
лог-система
сбор журналов
- "Создание системы сбора логов ELKB с нуля"
- «Создание простой системы сбора и анализа журналов с помощью ELK»
- "Система сбора логов - Разведка"
Центр конфигурации
-
Apollo - приложение центра конфигурации с открытым исходным кодом Ctrip
- Spring Boot и Spring Cloud
- Поддержка режима push и pull для обновления конфигурации
- Поддерживает несколько языков
-
«Руководство по использованию распределенного центра конфигурации Spring Cloud Config»
Асинхронные функции сервлета 3.0 доступны для клиентов центра конфигурации
Шлюз API
Основные обязанности: переадресация запросов, аутентификация безопасности, преобразование протоколов и аварийное восстановление.
Интернет
протокол
Семиуровневый протокол OSI
TCP/IP
HTTP
HTTP2.0
- «Подробный анализ принципов HTTP 2.0»
-
«Основной единицей HTTP2.0 является двоичный фрейм»
- Использование двоичных кадров отвечает за передачу.
- Мультиплексирование.
HTTPS
-
"популярное понимание принципа https"
- Согласование алгоритмов шифрования с использованием асимметричного шифрования
- Передача данных с использованием симметричного шифрования
- Используйте сертификат, выпущенный сторонней организацией, для шифрования открытого ключа для безопасной передачи открытого ключа и предотвращения его подделки посредниками.
сетевая модель
-
- Пять моделей ввода-вывода: блокирующий ввод-вывод, неблокирующий ввод-вывод, мультиплексирование ввода-вывода, ввод-вывод, управляемый событиями (сигналами), асинхронный ввод-вывод, первые четыре ввода-вывода являются синхронными операциями, ввод-вывод Первый этап O отличается, второй этап такой же, а последний является асинхронной операцией.
- Существует три режима работы веб-сервера: Prefork (многопроцессный), рабочий режим (режим потоков) и режим событий.
-
«Краткий обзор различий между select, poll и epoll»
- select, poll и epoll по сути являются синхронным вводом-выводом, потому что все они должны отвечать за чтение и запись после того, как событие чтения-записи будет готово, что означает, что процесс чтения-записи заблокирован.
- select имеет ограничение на количество дескрипторов открытых файлов, по умолчанию 1024 (2048 для x64), 1 миллион одновременных процессов требует 1000 процессов, а затраты на переключение велики; опрос использует структуру связанного списка, и нет ограничений на номер.
- Когда select и poll «бодрствуют», им нужно просмотреть всю коллекцию fd, в то время как epoll нужно только определить, пуст ли список готовых файлов, когда они «бодрствуют», что экономит много времени процессора благодаря механизму обратного вызова; набор fd необходимо один раз скопировать из пользовательского режима в режим ядра, а epoll нужно скопировать только один раз.
- Poll будет постепенно снижать свою производительность по мере увеличения параллелизма.Epoll использует красно-черную древовидную структуру со стабильной производительностью и не будет снижаться по мере увеличения количества подключений.
-
"выбрать, опрос, сравнение epoll"
- Когда количество подключений невелико, а подключения очень активны, производительность select и poll может быть лучше, чем у epoll, ведь механизм уведомления epoll требует много обратных вызовов функций.
-
"Углубленное понимание Java NIO"
- NIO — это синхронная неблокирующая модель ввода-вывода. Синхронизация означает, что поток постоянно опрашивает, готово ли событие ввода-вывода.Неблокирующий означает, что поток может одновременно выполнять другие задачи, ожидая ввода-вывода.
-
«Две модели проектирования эффективных серверов: модели Reactor и Proactor»
Epoll
Java NIO
kqueue
Соединения и короткие соединения
Рамка
-
«Анализ принципов нетти»
- Введение в шаблон Reactor.
- Netty — это реализация шаблона Reactor.
нулевая копия
-
«Понимание нулевой копии Netty ByteBuf»
- Несколько физически разделенных буферов логически объединяются в один, что позволяет избежать копирования данных между блоками памяти.
Сериализация (бинарный протокол)
Hessian
- «Анализ принципа Гессе»Binary-RPC: больше, чем просто сериализация
Protobuf
-
"Пример Java-приложения протокола Protobuf"Продукт Google, размер и эффективность лучше, чем у других библиотек сериализации, таких как Hessian, нужно писать файлы .proto.
-
«Протокол сериализации буферов протокола и приложение»
- Пояснение к протоколу Недостатки: плохая читабельность;
-
"Простое использование protobuf и protostuff"
- Преимущество protostuff заключается в том, что объекты Java можно сериализовать напрямую, без записи файлов .proto.
база данных
основная теория
Три парадигмы проектирования баз данных
-
«Три парадигмы баз данных и пять ограничений»
- Первая нормальная форма: каждый столбец (каждое поле) в таблице данных должен быть наименьшей единицей, которая не может быть разделена, то есть для обеспечения атомарности каждого столбца;
- Вторая нормальная форма (2NF): после удовлетворения 1NF все столбцы в таблице должны зависеть от первичного ключа, и ни один столбец не может быть не связан с первичным ключом, то есть таблица описывает только одну вещь;
- Третья нормальная форма: сначала должна быть удовлетворена вторая нормальная форма (2NF), требующая: каждый столбец в таблице связан только напрямую с первичным ключом, а не косвенно (каждый столбец в таблице может зависеть только от первичного ключа) ;
MySQL
принцип
-
"Механизм хранения MySQL - разница между MyISAM и InnoDB"
- Основное различие между этими двумя типами заключается в том, что Innodb поддерживает обработку транзакций, внешние ключи и блокировки на уровне строк.
InnoDB
оптимизация
-
«Возможные ситуации, которые могут привести к аннулированию индекса»
-
《Ограничение подкачки MYSQL - слишком медленный метод оптимизации》
- В принципе, это сужение диапазона сканирования.
показатель
кластеризованный индекс, некластеризованный индекс
- «Краткий обзор кластеризованного индекса MySQL/некластеризованного индекса»
- «Реализация индекса MyISAM и InnoDB»
MyISAM не агрегирован, InnoDB агрегирован
составной индекс
Адаптивный хэш-индекс (AHI)
explain
NoSQL
MongoDB
- Учебник по MongoDB
-
«Преимущества и недостатки MongoDB по сравнению с реляционными базами данных»
- Преимущества: слабая согласованность (согласованность в конечном счете), которая может лучше обеспечить скорость доступа пользователей; встроенная GridFS, поддерживающая хранилище большой емкости; база данных без схемы, нет необходимости заранее определять структуру; встроенный шардинг; по сравнению с другими NoSQL, сторонняя поддержка богата, превосходная производительность;
- Недостатки: mongodb не поддерживает транзакционные операции, mongodb занимает слишком много места, у MongoDB нет таких зрелых инструментов обслуживания, как у MySQL, что является достойным внимания местом для разработки и ИТ-операций;
Hbase
-
«Разница между традиционным хранилищем строк и хранилищем столбцов (HBase)»
-
«Разница между Hbase и традиционными базами данных»
- Пустые данные не сохраняются, экономят место и подходят для параллелизма.
-
- Ряды расположены в лексикографическом порядке для облегчения пакетного сканирования.
- Горячих точек можно избежать путем хеширования.
поисковый движок
Принципы поисковой системы
Lucene
Elasticsearch
Solr
sphinx
представление
Методология оптимизации производительности
-
«15 дней работы по оптимизации производительности, 5 аспектов настройки»
- Уровень кода, бизнес-уровень, уровень базы данных, уровень сервера, оптимизация внешнего интерфейса.
Оценка потенциала
Сеть CDN
пул соединений
настройка производительности
Большие данные
Потоковые вычисления
Storm
Flink
Kafka Stream
Сценарии применения
Например:
- Реклама связанная в режиме реального времени статистика;
- Метка портрета пользователя рекомендательной системы обновляется в режиме реального времени;
- Мониторинг состояния онлайн-сервиса в режиме реального времени;
- список в реальном времени;
- Статистика данных в реальном времени.
Hadoop
- "Что такое хауп и что он может делать простым языком"
- «Самая детальная конструкция среды Hadoop в истории»
HDFS
MapReduce
- «Объясните принципы Map/Reduce на понятном китайском языке»
- "Простой пример Java с уменьшением карты"
Yarn
Spark
Безопасность
веб-безопасность
XSS
CSRF
SQL-инъекция
Hash Dos
-
«Злая DOS-атака JAVA HASH»
- Используйте JsonObjet для загрузки большого Json, а нижний слой JsonObject использует HashMap; разные данные генерируют одно и то же значение хеш-функции, что замедляет построение Hash и истощает ЦП.
- «Усовершенствованная атака DoS-атака с коллизией хэшей»
- «Об уязвимости DoS, связанной с коллизией хэшей: анализ и решения»
внедрение скрипта
Средство сканирования уязвимостей
код верификации
-
"Подробное объяснение принципа реализации скользящего проверочного кода"
- Скользящий проверочный код предназначен для оценки риска в зависимости от времени отклика, скорости перетаскивания, времени, положения, траектории, количества повторных попыток и т. д. людей, перемещающих ползунок.
Предотвращение DDoS-атак
- «Учебное пособие: режимы DDoS-атак и методы защиты»
- «Подборка бесплатных инструментов для тестирования DDoS-атак»
Защита конфиденциальной информации пользователя
- Пароли пользователей хранятся в виде неясного текста, и добавляется динамическая планка.
- Если вы хотите отобразить идентификационный номер и номер мобильного телефона, замените некоторые символы на «*».
- Отображается ли контактная информация или нет, контролируется пользователем.
- TODO
Уязвимость сериализации
шифровать и декодировать
Симметричное шифрование
-
«Общие алгоритмы симметричного шифрования»
- DES, 3DES, Иглобрюх, AES
- DES использует 56-битные ключи, Blowfish использует ключи переменной длины от 1 до 448 бит, AES 128, 192 и 256-битные ключи.
- Ключ DES слишком короткий (всего 56 бит), алгоритм заменен на AES, а у AES есть аппаратное ускорение, производительность очень хорошая.
хеш-алгоритм
-
- MD5 и SHA-1 больше не являются безопасными и объявлены устаревшими.
- SHA-256 в настоящее время относительно безопасен.
Асимметричное шифрование
-
«Распространенные алгоритмы асимметричного шифрования»
-
RSA, DSA, ECDSA (алгоритм шифрования по спирали)
-
В отличие от RSA, DSA может использоваться только для цифровых подписей и не может выполнять шифрование и дешифрование данных.Его безопасность эквивалентна RSA, но его производительность выше, чем у RSA.
-
256-битный ключ ECC так же безопасен, как и 3072-битный ключ RSA.
-
безопасность сервера
Безопасность данных
резервное копирование данных
TODO
сетевая изоляция
Разделение внутренних и внешних сетей
TODO
Войти в спрингборд
Вход на онлайн-хост через трамплин во внутренней и внешней среде.
Авторизация, Аутентификация
RBAC
- «Разработка разрешений на основе ролей в организации»
- «Обзор системы разрешений и модели RBAC»
- «Spring интегрирует Широ для детального анализа случая модуля контроля разрешений»
OAuth2.0
Двухфакторная аутентификация (2FA)
2FA — двухфакторная аутентификация для расширенной проверки входа
Обычная практика: пароль для входа + код подтверждения мобильного телефона (или токен-ключ, аналогичный USB-ключу с онлайн-банкингом).
- 【"Учебное пособие по двухфакторной аутентификации (2FA)"】(Уууу. Руан Ифэн.com/blog/2017/1…)
Единый вход (SSO)
Распространенные фреймворки с открытым исходным кодом
протокол с открытым исходным кодом
структура регистрации
Лог4дж, Лог4дж2
- "подробное объяснение log4j"
- «Подробное объяснение фактического использования log4j2»
-
"Сравнение тестов производительности Log4j1, Logback и Log4j2"
- Производительность асинхронного ведения журнала Log4J превосходна.
Logback
ORM
-
«Преимущества и недостатки использования ORM-фреймворка»
- Основной целью является повышение эффективности разработки.
Мой Батис:
-
"Подробное объяснение механизма кэширования mybatis"
- Кэш первого уровня — это кеш уровня SqlSession, а кэшированные данные действительны только в пределах SqlSession.
- Кэш второго уровня — это кеш уровня сопоставителя, и одно и то же пространство имен использует этот кеш, поэтому он используется совместно с SqlSession; используйте механизм LRU, чтобы очистить кеш и включить его с помощью параметра cacheEnabled.
веб-фреймворк
TODO
веб-фреймворк
Весенняя семья
Spring
Spring Boot
Spring Cloud
- Китайская индексная станция Spring Boot
- Документация Spring Cloud на китайском языке
- «Основное руководство по весеннему облаку»
инструментальная рама
- «Введение в класс инструментов Apache Commons и простое использование»
- «Учебник китайского языка Google гуавы»
распределенный дизайн
Расширяемый дизайн
-
«10 лучших масштабируемых архитектур, которые должны знать архитекторы»
- Подводя итог, общая рутина — это распределение, кэширование и асинхронная обработка.
-
«Нарезка данных для проектирования масштабируемости»
- Горизонтальное разделение + вертикальное разделение
- Используйте промежуточное ПО для сегментирования, такое как MySQL Proxy.
- Используйте стратегию сегментации для сегментации, например, взятие по модулю ID.
-
«Поговорим о том, как создать масштабируемую крупномасштабную архитектуру веб-сайта»
- Распределенный сервис + очередь сообщений.
-
«Техническая архитектура больших веб-сайтов (VII) — Архитектура масштабируемости веб-сайтов»
Стабильность и высокая доступность
-
«Проектирование системы: некоторые технические решения для систем высокой доступности»
- Расширяемость: горизонтальное расширение, вертикальное расширение. Избегайте единых точек отказа с помощью избыточных развертываний.
- Изоляция. Предотвратите использование одной службой всех ресурсов. Избегайте взаимного влияния между службами 2. Изоляция в компьютерном зале, чтобы избежать единой точки отказа.
- Разъединение: снижение затрат на техническое обслуживание и снижение риска сцепления. Уменьшите зависимости и уменьшите взаимное влияние.
- Текущее ограничение: метод подсчета скользящего окна, алгоритм дырявого ведра, алгоритм ведра с токеном и другие алгоритмы. При возникновении всплесков трафика обеспечьте стабильность системы.
- Переход на более раннюю версию: высвобождение ресурсов для неосновных функций в экстренной ситуации. Пожертвуйте непрофильным бизнесом, чтобы обеспечить высокую доступность основного бизнеса.
- Предохранитель: ненормальное состояние превышает пороговое значение и переходит в состояние плавкого предохранителя, которое быстро выходит из строя. Уменьшите влияние нестабильных внешних зависимостей на основные службы.
- Автоматизированное тестирование: уменьшите количество сбоев, вызванных релизом, с помощью сложного тестирования.
- Публикация в градациях серого. Публикация в градациях серого — это компромисс между скоростью и безопасностью, который может эффективно снизить количество сбоев при публикации.
-
«О системах высокой доступности»
- Принципы проектирования: данные не теряются (постоянство); служба обладает высокой доступностью (копия службы); абсолютная 100%-я высокая доступность затруднена, и цель состоит в том, чтобы достичь как можно большего количества девяток, например 99,999% (всего всего 5 минут). в течение года).
аппаратная балансировка нагрузки
-
"изменять! ! Сравнение преимуществ и недостатков технологий балансировки нагрузки Nginx и F5"
- В основном по сравнению с F5.
-
«Что вы знаете о продуктах для балансировки нагрузки программного/аппаратного обеспечения? 》
Балансировка нагрузки программного обеспечения
-
«Несколько алгоритмов балансировки нагрузки»Циклический алгоритм, вес, нагрузка, наименьшее количество подключений, QoS
-
- Конфигурация проста, а скорость обновления низкая.
-
- Простой и легкий, низкая стоимость обучения; в основном подходит для веб-приложений.
-
«Реализация балансировки нагрузки с помощью LVS+Keepalived»
- Конфигурация относительно нагруженная, поддерживает только до 4 слоев, а производительность высокая.
-
"Подробное объяснение использования HAProxy" Самый подробный китайский документ во всей сети
- Он поддерживает до семи уровней (например, HTTP), обладает обширными функциями и имеет хорошую производительность.
-
"Haproxy+Keepalived+MySQL для достижения нагрузки баланса чтения"
- В основном для балансировки нагрузки пользовательских запросов на чтение.
-
«rabbitmq+haproxy+keepalived для построения кластера высокой доступности»
Ограничение
-
«Говоря о текущем ограничении систем с высокой степенью параллелизма»
- Счетчик: Контролируйте количество запросов в единицу времени с помощью счетчика скользящего окна, который прост и груб.
- Алгоритм дырявого ведра: дырявое ведро с фиксированной емкостью, запрос отбрасывается, когда дырявое ведро заполнено, что используется чаще.
- Алгоритм корзины токенов: корзина токенов фиксированной емкости. Токены добавляются с определенной скоростью. Вам необходимо получить токен перед обработкой запроса. Если вы не можете получить токен, отклоните запрос или войдите в очередь сброса. Вы можете управлять скоростью, с которой добавляются токены. , чтобы контролировать общую скорость. RateLimiter в Guava — это реализация ведра токенов.
- Дросселирование Nginx: пройти
limit_req
и другие модули ограничивают количество одновременных подключений.
Аварийное восстановление прикладного уровня
-
"Лавинное оружие: принцип действия и применение взрывателя Hystrix"
- Причины лавинного эффекта: аппаратный сбой, аппаратный сбой, программная ошибка, повторные попытки увеличить трафик и большое количество пользовательских запросов.
- Лавинные контрмеры: текущий лимит, улучшенный режим кеша (предварительная загрузка кеша, синхронный вызов асинхронного), автоматическое расширение, даунгрейд.
- Принципы дизайна Hystrix:
- Изоляция ресурсов: Hystrix избегает лавин сервисов, назначая независимые пулы потоков для каждой зависимой службы для изоляции ресурсов.
- Прерыватель цепи: работоспособность службы = количество неудачных запросов / общее количество запросов Переключатель управляется настройкой порога и скользящим окном.
- Командный режим: обертка логики вызова службы путем наследования HystrixCommand.
-
"Проникновение в кеш, разбивка кеша, анализ лавинного решения кеша"
-
"Сбой кеша, инвалидация и проблемы с горячими клавишами"
- Основная стратегия: момент сбоя: блокировка использования одной машины, использование распределенной блокировки, срок действия не истекает;
- Данные точки доступа: Данные точки доступа хранятся отдельно, используется локальный кеш, они разделены на несколько подразделов.
Аварийное восстановление в компьютерных залах
-
«Обсуждение опыта развертывания «Несколько жизней в разных местах»
- Синхронизация данных осуществляется через промежуточное ПО собственной разработки.
-
«Несколько жизней в разных местах (несколько жизней в разных местах) Практический опыт»
- Обратите внимание на проблему задержки: многократные вызовы через компьютерный зал увеличивают задержку в несколько раз.
- Велика вероятность, что будут проблемы с выделенной линией для построения помещения, поэтому хорошо поработайте над отказоустойчивостью на эксплуатационно-техническом и программном уровнях.
- Нельзя рассчитывать на двойную запись данных на стороне программы, и должна быть схема автоматической синхронизации.
- Данные никогда не имеют больших задержек и плохого качества сети, учитывая проблемы с качеством синхронизации.
- Основной бизнес и второстепенный бизнес разделяются и завоевываются, или даже рассматривается только основной бизнес.
- Развертывание и тестирование удаленного мультиактивного мониторинга также должны идти в ногу со временем.
- Рассмотрите возможность создания пользовательских разделов, когда это позволяет бизнес, особенно для игр и почтовых ящиков.
- Контролируйте размер тела сообщения в компьютерном зале, чем меньше, тем лучше.
- Рассмотрите возможность использования технологии виртуализации контейнеров Docker для улучшения возможностей динамического планирования.
-
Введение в технологию аварийного восстановления и опыт строительства
Процесс отработки аварийного восстановления
-
«Управление доверием, выпуск оттенков серого, отработка отказов, проектирование и практический опыт системы отработки отказов в электронной коммерции Alibaba»
- Картины общих неисправностей
- Кейсы: эффективность плана, эффективность плана, повторение ошибок, проверка архитектуры на отказоустойчивость, настройка параметров, настройка параметров, неожиданность ошибки, совместная тренировка.
плавный пуск
-
Идеи плавного перезапуска приложения 1. Завершить трафик (например, vip-уровень), 2. сбросить данные (если есть), 3, перезапустить приложение
-
«JVM безопасно завершает работу (как изящно закрыть службы Java)»Рекомендуемый метод развертывания: System.exit, Kill SIGTERM, kill-9 не рекомендуется, зарегистрируйте хук с помощью Runtime.addShutdownHook.
-
«Как закрыть общие приложения Java, изящно»Метод изящного завершения работы Java, Spring, Dubbo.
Расширение базы данных
Режим разделения чтения-записи
-
«Построение классической архитектуры репликации MySQL Master-Slave»
-
«Haproxy + несколько подчиненных серверов MySQL (Slave) для достижения балансировки нагрузки»
-
"DRBD+Heartbeat+Mysql высокодоступная архитектура разделения чтения и записи"
- DRDB выполняет репликацию дисков, чтобы избежать единой точки проблем.
Режим разделения
-
«Проблемы и решения, которые необходимо рассмотреть в подбазе данных и подтаблице»
- Промежуточное ПО: легкое: sharding-jdbc, TSharding, тяжелое: Atlas, MyCAT, Vitess и т. д.
- Проблемы: транзакции, соединения, миграции, масштабирование, идентификаторы, пейджинг и т. д.
- Компенсация транзакций: сверка данных, сравнение на основе журналов, регулярная синхронизация со стандартными источниками данных и т. д.
- Стратегия подбиблиотеки: диапазон значений, модуль, дата и т. д.
- Количество подбаз данных: как правило, 50 миллионов записей в одной базе данных для MySQL и 100 миллионов записей для одной базы данных в Oracle требуют подбаз данных.
-
"Подробное объяснение таблицы MySql и раздела таблицы"
- Разделение: это внутренний механизм MySQL, который прозрачен для клиента.Данные хранятся в разных файлах, которые на поверхности выглядят как одна и та же таблица.
- Подтаблицы: физически создавайте разные таблицы, и клиентам необходимо управлять маршрутизацией подтаблиц.
Служба управления
Регистрация и обнаружение службы
-
"Никогда не терял! Как реализовать обнаружение сервисов в микросервисной архитектуре? 》
- Режим обнаружения службы клиента: клиент напрямую запрашивает реестр и сам отвечает за балансировку нагрузки. Эврика использует этот подход.
- Режим обнаружения службы на стороне сервера: клиент запрашивает экземпляры службы посредством балансировки нагрузки.
-
«Сравнение реестра Spring Cloud Service: Consul, Zookeeper, Etcd и Eureka»
- Поддержка CAP: Consul (CA), zookeeper (cp), etcd (cp), euerka (ap)
- Автор считает, что Consul в настоящее время лучше поддерживает облако Spring.
-
"Регистрация и обнаружение сервисов на основе Zookeeper"
- Преимущества: Простой API, используемый Pinterest, Airbnb, многоязычность, передача конфигурации через механизм наблюдения, возможность быстрого реагирования на изменения конфигурации.
Управление маршрутизацией услуг
-
«Примечания к исследованию платформы распределенных услуг 4. Маршрутизация услуг»
- Принцип: прозрачная маршрутизация
- Стратегии балансировки нагрузки: случайный, циклический, задержка вызова службы, согласованное хеширование, фиксированные соединения.
- Ограниченная стратегия локальной маршрутизации: injvm (приоритет вызова сервисов внутри jvm), native (приоритет использования сервисов той же физической машины), в принципе найти ближайший сервис.
- Способ настройки: единый реестр, локальная конфигурация, динамическое распространение.
Распределенная согласованность
CAP и BASE теория
-
«От распределенной согласованности к теории CAP, теории BASE»
- Классификация непротиворечивости: сильная непротиворечивость (немедленная непротиворечивость); слабая непротиворечивость (непротиворечивость может быть достигнута за единицу времени, например секунд); окончательная непротиворечивость (тип слабой непротиворечивости, в конечном счете непротиворечивый в течение определенного периода времени).
- CAP: непротиворечивость, доступность, устойчивость к разделам (вызванная сбоями в сети)
- БАЗОВЫЙ: в основном доступный, мягкое состояние и в конечном итоге согласованный
- Основная идея теории BASE заключается в том, что даже если невозможно достичь строгой согласованности, каждое приложение может принять соответствующий метод для достижения окончательной согласованности в соответствии со своими бизнес-характеристиками.
Распределенная блокировка
-
«Несколько реализаций распределенных блокировок»
- Распределенные блокировки на основе базы данных: Преимущества: Простота в эксплуатации и понятность. Недостатки: есть проблема с одной точкой, производительность базы данных может быть высокой, и она не реентерабельна;
- Распределенные блокировки на основе кеша: Преимущества: неблокирующий, хорошая производительность. Недостатки: Плохая эксплуатация легко может привести к тому, что замок не будет снят.
- Распределенная блокировка Zookeeper: механизм блокировки реализован через упорядоченные временные узлы.Если соответствующему узлу требуется наименьшая сумма, считается, что он получил блокировку. Преимущества: Кластер может прозрачно решать одноточечные проблемы, избегать проблем с не снятием блокировок, а блокировки могут быть повторно введены. Недостатки: производительность не так хороша, как у метода кэширования, и пропускная способность будет уменьшаться по мере увеличения размера кластера zk.
-
"Распределенная блокировка на основе Zookeeper"
- Понятное описание принципа + пример кода на Java.
-
"реализация распределенной блокировки jedisLock-redis"
- На основе setnx (установите, если он не существует), верните false, если есть, в противном случае верните true. И время истечения срока действия поддержки.
-
«Схема распределенной блокировки Memcached и Redis»
- Используйте операцию добавления memcached (отличную от установки), чтобы вернуть false, когда ключ существует.
Алгоритм распределенной согласованности
PAXOS
- "Распределенная серия статей - принцип и вывод алгоритма Paxos"
- «Paxos -> Fast Paxos -> Анализ зоопарка»
- «[Распространено] Зоопарк и Паксос»
Zab
Raft
-
«Почему Raft — более понятный алгоритм распределенного консенсуса»
- Три роли: Лидер (лидер), Последователь (масса), Кандидат (кандидат)
- Голоса выдаются случайным ожиданием, и побеждает тот, кто наберет больше всего голосов.
Gossip
Двухэтапная фиксация, многофазная фиксация
идемпотент
-
«Распределенные системы — идемпотентный дизайн»
- Роль функции идемпотента: Ресурс является идемпотентным, и запрашивающей стороне не нужно беспокоиться об ошибках, вызванных повторными вызовами.
- Общие средства обеспечения идемпотентности: MVCC (аналог оптимистической блокировки), таблица дедупликации (уникальный индекс), пессимистическая блокировка, одноразовый токен, метод серийного номера.
Распределенная согласованная схема
- «Решения по согласованности транзакций для распределенных систем»
- «6 схем обеспечения согласованности данных в распределенных системах»
Выборы узла распределенного лидера
TCC (попробовать/подтвердить/отменить) гибкая транзакция
-
«Традиционные дела и гибкие дела»
- На основе теории BASE: в основном доступное, гибкое состояние, в конечном счете непротиворечивое.
- Решение: Ведение журнала + компенсация (прямое пополнение или откат), повторная попытка сообщения (требуется, чтобы программа была идемпотентной); «дизайн без блокировки», с использованием оптимистического механизма блокировки.
Распределенная файловая система
- Разговор о распределенной системе хранения файлов — базовая архитектура?
-
«Сравнение различных распределенных файловых систем»?
- HDFS: чтение и запись данных большими пакетами, используемые в сценариях с высокой пропускной способностью, не подходят для небольших файлов.
- FastDFS: легкий, подходит для небольших файлов.
Генерация уникального идентификатора
Глобально уникальный идентификатор
-
- Схема Twitter (алгоритм Snowflake): 41-битная метка времени + 10-битный идентификатор машины (например, IP-адрес, имя сервера и т. д.) + 12-битный серийный номер (локальный счетчик)
- Схема мерцания: идентификатор автоинкремента MySQL + "REPLACE INTO XXX:SELECT 1316656;"
- UUID: Недостаток, беспорядок, строка слишком длинная, занимает место и влияет на производительность поиска.
- Решение MongoDB: используйте ObjectId. Недостаток: нельзя автоматически увеличивать.
-
«Принцип ПОСЛЕДОВАТЕЛЬНОСТИ TDDL в распределенных системах»
- Создайте таблицу последовательности в базе данных для записи максимального значения занятого в данный момент id.
- Каждый клиентский хост берет раздел идентификатора (например, 1000 ~ 2000) локально и обновляет запись максимального идентификатора в таблице последовательности.
- Между клиентскими хостами берутся разные диапазоны идентификаторов, и они берутся снова, когда они израсходованы, а механизм оптимистичной блокировки используется для управления параллелизмом.
Последовательный алгоритм хеширования
Дизайн-мышление и режим разработки
DDD (Дизайн, управляемый доменом — Дизайн, управляемый доменом)
-
«Насколько я понимаю дизайн, основанный на домене DDD»
- Концепция: DDD в первую очередь предлагается для устранения проблем в обычном процессе разработки программного обеспечения (анализ - проектирование - кодирование), избегая программного обеспечения, которое не может быть доставлено (и востребовано) из-за неизвестного анализа или единогласного анализа информации при разработке программного обеспечения. Представьте себе несоответствие) . DDD подчеркивает все в этой области, подчеркивая роль эксперта в предметной области, и подчеркивает развитие модели предметной области после того, как модель предметной области определена, и модель предметной области может направлять разработку (так называемый драйвер).
- Процесс: понять домен, разделить домен, уточнить домен, точность модели зависит от глубины понимания модели.
- Дизайн: инструменты моделирования, такие как агрегаты, сущности, объекты-значения, фабрики, репозитории, службы предметной области и события предметной области, предлагаются в DDD для помощи в моделировании предметной области.
-
«Краткий обзор основ доменно-ориентированного проектирования»
- Домен — это по сути проблемный домен, такой как система электронной коммерции, система форумов и т. д.
- Ограниченный контекст: описывает отношения между поддоменами, которые можно просто понимать как подсистему или компонентный модуль.
- Модель предметной области: ядром DDD является создание правильной модели предметной области (с использованием общего языка описания, общего языка инструментальной области); она отражает характер бизнес-требований, включая объекты и процессы; она проходит через весь процесс анализа программного обеспечения. , дизайн и разработка Процесс, общий способ выражения модели предметной области: диаграмма, код или текст;
- Язык предметной области: язык или инструмент, который эксперты предметной области, разработчики и дизайнеры могут использовать немедленно.
- Классическая многоуровневая архитектура: уровень пользовательского интерфейса/отображения, уровень приложений, уровень предметной области, уровень инфраструктуры, который представляет собой четырехуровневый шаблон архитектуры.
- Используемый режим:
- Ассоциаций должно быть как можно меньше, как можно больше одного элемента, а общая сложность должна быть максимально снижена.
- Сущность: Уникальный идентификатор в поле, атрибутов сущности как можно меньше, а понятно меньше всего.
- Объект значения: простой объект без уникального идентификатора и неизменяемых значений свойств, таких как Дата.
- Служба домена: координирует несколько объектов домена, только методы не имеют состояния (данные не хранятся); их можно разделить на службы прикладного уровня, службы уровня предметной области и службы базового уровня.
- Aggregate and Aggregate Root (Агрегат, Aggregate Root): Aggregate определяет набор связанных объектов со связной связью; Корень агрегата — единственный элемент, на который ссылается агрегат; При изменении агрегата он должен находиться на уровне транзакции; Большинство полей В модели, 70% агрегатов обычно имеют только один объект, а 30% имеют только 2-3 объекта; если агрегат имеет только один объект, то этот объект является корнем агрегата; если существует несколько объектов, то мы можем думать о том, какой объект в совокупности имеет самостоятельное значение и может непосредственно взаимодействовать с окружающим миром;
- Завод (Factory): Аналогичен шаблону factory в шаблоне проектирования.
- Репозиторий: сохраняйте базу данных, управляйте объектами и проектируйте репозитории только для агрегатов.
-
«Путь реализации доменно-ориентированного проектирования (DDD)»
- Агрегация: Например, автомобиль (Car) содержит такие компоненты, как двигатель (Engine), колеса (Wheel) и топливный бак (Tank), все из которых незаменимы.
Разделение обязанностей запроса команды (CQRS)
CQRS — разделение ответственности за запросы команд
-
«Серия проектирования, управляемого доменом (6): CQRS»
- Основная идея: разделение чтения и записи (запрос и обновление разными методами), разные процессы — это просто разные методы проектирования, разделение кодов CQ, что будет четко отражаться в распределенной среде (в случае избыточных данных), цель для высокой производительности.
-
«Сравнение преимуществ и недостатков архитектуры DDD CQRS и традиционной архитектуры»
- В конечном счете согласованная философия проектирования, основанная на промежуточном программном обеспечении высокой доступности для обмена сообщениями.
-
- Абстрактный случай, реализующий CQRS.
-
«Глубокая длинная статья: мои мысли об архитектуре CQRS/EventSourcing»
- Анализ модели CQRS + 12306 случаев захвата билетов
Анемия, модель гиперемии
-
«Анемия, интерпретация модели перегрузки и некоторые опыты»
- Модель потери крови: Лао-Цзы и Сон определены отдельно и не знают друг друга.В определении этих двух сущностей нет абсолютно никакой бизнес-логики, и они связаны через внешнюю службу.
- Модель анемии: Лао-цзы знает своего сына, а его сын знает Лао-цзы; часть бизнес-логики размещена в сущности; Преимущества: Единые зависимости каждого слоя, четкая структура, простота обслуживания; Недостатки: Не соответствует ООП, а сервисный слой толще, чем модель перегрузки.
- Модель перегрузки. Подобно модели анемии, разница заключается в том, как разделить бизнес-логику. Преимущества: сервисный слой относительно тонкий и играет только роль фасада, он не имеет отношения к DAO и сочетает в себе ООП-идеи Недостатки: неоднородная зависимость, двунаправленная зависимость между DO и DAO, а также логическое разделение сервисного слоя может легко вызвать путаницу.
- Режим набухания: это крайний случай, отмена уровня службы и помещение всей бизнес-логики в DO; преимущества: соответствует идее объектно-ориентированного программирования и упрощает наслоение; недостатки: открывается слишком много информации, и многие логики, не относящиеся к DO, будут скрыты. принудительно включен в ДО. Этого шаблона следует избегать.
- Авторы выступают за использование модели анемии.
Актерский режим
TODO
реактивное программирование
Reactor
TODO
RxJava
TODO
Vert.x
TODO
DODAF2.0
Serverless
TODO
Service Mesh
TODO
управление проектом
Обзор архитектуры
- Как просматривать спецификации архитектурного дизайна в архитектурном дизайне
- Каждый — архитектор: нефункциональные требования
рефакторинг
спецификация кода
TODO
Обзор кода
Система или система!Кроме того, каждой компании необходимо разработать собственный чек-лист в соответствии со своими потребностями и целями
-
«Почему нельзя делать код-ревью? 》
- Хороший обзор кода заключается в построении системы.
RUP
- «Использование метода представления RUP 4+1 для проектирования архитектуры программного обеспечения»
Канбан-менеджмент
SCRUM
СКРАМ - Схватка
-
3 роли: Владелец продукта (PO), владелец продукта; Scrum Master (SM), продвигающий выполнение Scrum; Команда разработчиков.
-
3 артефакта: Журнал невыполненных работ по продукту, СПИСОК ЗАДАЧ по продукту, с приоритетом, СПИСОК ЗАДАНИЙ по разработке функций бэклога спринта, диаграмма выгорания и т. д.
-
Пять ценностей: Фокус, Мужество, Открытость, Обязательство, Уважение.
-
«Процесс управления проектами Agile — наиболее полный обзор фреймворка Scrum! 》
Гибкая разработка
TODO
Экстремальное программирование (XP)
XP - eXtreme Programming
-
Основная методология Agile-разработки: Extreme Programming XP
-
Это методология для разработчиков.
-
4 большие ценности:
- Коммуникация: поощряйте устное общение и повышайте эффективность.
- Просто: хватит.
- Обратная связь: своевременная обратная связь и информирование соответствующих людей.
- Мужество: пропаганда перемен и смелость реконструкции.
-
5 принципов: быстрая обратная связь, простые допущения, постепенные изменения, поддержка изменений (небольшие шаги), качественная работа (небольшие шаги с обеспечением качества).
-
5 задач: поэтапные спринты, совещание по планированию спринта, ежедневное стендап-совещание, обзор после спринта, ретроспективное совещание.
-
парное программирование
Пишите код и проверяйте. Может повысить качество кода и уменьшить количество ошибок.
Режим управления FMEA
TODO
Общие деловые термины
TODO
Технологические тенденции
TODO
политики и правила
TODO
закон
Строго соблюдать статью 253 Уголовного кодекса
Статья 253-1 Уголовного кодекса моей страны гласит:
- Государственный орган или сотрудники финансовых, телекоммуникационных, транспортных, образовательных, медицинских и иных подразделений, в нарушение нормативных актов государства, этим подразделениям при исполнении своих служебных обязанностей либо предоставления персональных данных граждан услуг по получению и продаже либо незаконно предоставленных другим лицам, в особо тяжких случаях - на 3 года лишения свободы или задержания по уголовному делу с одновременным наложением штрафа.
- Кража или незаконное получение вышеуказанной информации иными способами при серьезных обстоятельствах влечет за собой наказание в соответствии с положениями предыдущего параграфа.
- Если подразделение совершает преступления, упомянутые в предыдущих двух параграфах, это подразделение подлежит штрафу, а лица, непосредственно ответственные за него, и другие лица, несущие прямую ответственность, подлежат наказанию в соответствии с положениями соответствующих параграфов.
Дополнительные положения (4) Верховного народного суда и Верховной народной прокуратуры об исполнении уголовного закона Китайской Народной Республики для определения обвинений: нарушение статьи 253-1 Уголовного закона представляет собой преступление «продажи или незаконного предоставления персональные данные граждан»; нарушение положений статьи 253-2 Уголовного кодекса составляет преступление «незаконное получение персональных данных граждан».
Качество архитектора
-
- Понимание бизнеса и навыки абстракции
- Возможности кода NB
- Всеобъемлющий: 1. Перед лицом бизнес-проблем, будут ли архитекторы иметь в виду множество технических решений, 2. Достаточно ли они рассмотрели аспекты системного проектирования, 3. Достаточно ли они рассмотрели в системном проектировании множество аспектов.
- Глобально: учитывается ли влияние на вышестоящие и нижестоящие системы.
- Взвешивание: соотношение входа и выхода взвешивания, приоритет и контроль ритма;
-
«Что архитекторы должны знать об оптимизации архитектуры и проектировании»
- Детали, которые необходимо учитывать: модульность, легкое связывание и архитектура без общего доступа; уменьшите лень перед каждым компонентом, обратите внимание на сбой цепочки и влияние, вызванное ленью между службами, и т. д.
- Всестороннее рассмотрение инфраструктуры, конфигурации, тестирования, разработки, эксплуатации и обслуживания.
- Учитывайте влияние людей, команд и организаций.
-
«Как я могу действительно улучшить себя и стать отличным архитектором? 》
-
«Основные качества архитектора и пути роста»
- Качество: понимание бизнеса, техническая широта, техническая глубина, богатый опыт, коммуникативные способности, практические навыки, эстетическая грамотность.
- Путь роста: 2 года накопления знаний, 4 года накопления навыков и внутриведомственного влияния, 7 лет накопления внутриведомственного влияния и 7 лет накопления межведомственного влияния.
-
Архитектор - На каком этаже вы находитесь? 》
- Архитекторы первого уровня видят только сам продукт
- Архитекторы второго этажа видят не только собственные продукты, но и общее решение
- Архитекторы уровня 3 видят ценность для бизнеса
Управление командой
TODO
Набор персонала
Информация
Информация об отрасли
Список публичных аккаунтов
TODO
блог
Блог команды
личный блог
- Блог Руан Ифэн
- Cool shell - Coolshell - Чен Вэй
- Hellojava - Али Ли Суан
- Cm's Blog
- Программист DD-Zhai Yongchao, автор книги Spring Cloud Microservices на практике.
Интегрированный портал, сообщество
одомашненный:
-
CSDNВетеран технического сообщества, не нужно объяснять.
-
- склонен к Java
-
- склоняюсь к линуксу
-
- Охватывает ИТ-рабочее место, веб-интерфейс, серверную часть, мобильные устройства, базы данных и т. д. с технической стороной.
иностранный:
Сообщество вопросов и ответов
-
segmentfault
- Вопросы и ответы + Колонка
- Знай почти
- stackoverflow
Анализ отраслевых данных
Специальный сайт
-
контрольная работа:
-
Эксплуатация и техническое обслуживание:
-
Java:
-
ImportNew
- Сосредоточьтесь на обмене технологиями Java
-
HowToDoInJava
- английский блог
-
ImportNew
-
Безопасность
-
Большие данные
-
Другие тематические сайты:
-
DockerInfo
- Веб-сайт, посвященный приложениям Docker, консультациям и учебным пособиям.
-
Коммуна Linux
- Тематическое сообщество Linux
-
DockerInfo
другие
Рекомендуемые справочники
Онлайн электронная книга
-
«Глубокое понимание Spring Cloud и построения микросервисов»
-
«Атлас технических справочников Alibaba — исследования и разработки»
бумажная книга
разработка
Архитектурные аспекты
- 12 упражнений архитектора программного обеспечения: технические навыкиЦзиндон Таобао
- «Красота архитектуры».Цзиндон Таобао
- «Распределенная сервисная архитектура»Цзиндон Таобао
- «Архитектура чата»Цзиндон Таобао
- «Практика создания облачной архитектуры приложений»Цзиндон Таобао
- «Основная технология архитектуры веб-сайта со 100-миллионным трафиком»Цзиндон Таобао
- «Десять лет технологии Taobao»Цзиндон Таобао
- «Путь трансформации корпоративной ИТ-архитектуры — китайско-тайваньская практика стратегического мышления и архитектуры»Цзиндон Таобао
технический менеджмент
- "Технический директор говорит"Цзиндон Таобао
- «Вершина управления технологиями»Цзиндон Таобао
- «NetEase тысяча и одна ночь: практика управления проектами по созданию интернет-продуктов»Цзиндон Таобао
основная теория
Инструменты
TODO
большие данные
технические ресурсы
ресурсы с открытым исходным кодом
Инструкции, Документация, Учебники
одомашненный:
-
- Вводные руководства по HTML, CSS, XML, Java, Python, PHP, шаблонам проектирования и многому другому.
-
- Многие, многие китайские онлайн-книги являются совершенно новой платформой для обмена техническими документами с открытым исходным кодом.
-
- Платные электронные книги.
-
- Серия китайских документов об искусственном интеллекте и больших данных.
иностранный:
-
Quick Code
- Бесплатные технические онлайн-уроки.
-
gitbook.com
- Есть китайские электронные книги.
-
Cheatography
- Полный сборник Cheat Sheets, одностраничный сайт с документацией.
онлайн-класс
- Ученики без забот
- компьютерное время
- segmentfault
- Колледж Старка
- Niuke.com
- Компьютерная академия
- Академия 51CTO
конференция
Платформа публикации событий:
Общее приложение
искать работу
инструмент
-
Компьютерный поиск
- Поисковая система технических статей.
хостинг кода
файловая служба
- семь коров
- Снова выстрелить в облако
Интегрированный поставщик облачных услуг
- Али Клауд
- Тенсент Облако
- Облако Байду
- Сина Клауд
- Цзиньшань Клауд
- Облако Amazon (AWS)
- Облако Google
- Облако Майкрософт