当前位置:网站首页>MySQL information Schema Learning (i) - - General table
MySQL information Schema Learning (i) - - General table
2022-07-06 19:27:00 【Dark Night Hunter - Big Magic】
Parfois, il y a des besoins,Par exemple, pour voir les champs d'une condition particulière dans une base de données statistique,Il y avait un tableau stupide pour analyser les statistiques,En fait...information schemaOffre une fonctionnalité très puissante,Peut être étudié.
Références,Documents du site officiel:
MySQL :: MySQL 5.7 Reference Manual :: 24 INFORMATION_SCHEMA Tableshttps://dev.mysql.com/doc/refman/5.7/en/information-schema.htmlinformation schemaQu'y a - t - il dedans?,Lisez la description du document:
INFORMATION_SCHEMA
Fournir une paire de bases de données Métadonnées、Concernant MySQL Informations sur le serveur( Par exemple, le nom de la base de données ou de la table 、 Type de données ou accès à la colonne )Visites.information La table à l'intérieur est la vue , Aucun fichier de données :INFORMATION_SCHEMA
C'est chacun. MySQL Une base de données dans l'Instance , Cet emplacement stocke des informations sur MySQL Informations sur toutes les autres bases de données tenues à jour par le serveur .Le INFORMATION_SCHEMA
La base de données contient plusieurs tableaux en lecture seule .Ce sont en fait des vues, Au lieu de la table de base , Il n'y a donc pas de fichiers associés à eux , Et les déclencheurs ne peuvent pas être réglés sur eux .En outre, Il n'y a pas de répertoire de base de données avec ce nom .
En grosschemaQuels sont les tableaux ci - dessous:
Il s'agit principalement des permissions de métadonnées de la base de données , Variables et une grande partie INNODB Tables liées au moteur de stockage .
Apprenez principalement les tableaux couramment utilisés
1. TABLES
TABLES | Informations sur le tableau |
tables Le tableau décrit principalement les métadonnées d'une table de base de données , Vous pouvez obtenir des informations sur le tableau , Nombre de lignes, par exemple ,Espace occupé, etc..
Les principaux champs sont les suivants:
TABLE_CATALOG
Nom du répertoire auquel appartient le tableau . La valeur est toujoursdef
.TABLE_SCHEMA
Schéma auquel appartient le tableau (Base de données)Nom de.TABLE_NAME
Nom du tableau.TABLE_TYPE
BASE TABLE/SYSTEM VIEW
ENGINE
Moteur de stockage des tables.Pour les tables partitionnées,ENGINE
Affiche le nom du moteur de stockage utilisé par toutes les partitions .VERSION
.frm
Table file Numéro de version.ROW_FORMAT
Format de stockage de ligne (Fixed
,Dynamic
,Compressed
,Redundant
,Compact
).TABLE_ROWS
Nombre de lignes.Certains moteurs de stockage,Par exempleMyISAM
, Stocker le nombre exact .Pour les autres moteurs de stockage,Par exempleInnoDB
, Cette valeur est approximative ,Peut différer de la valeur réelle 40% À 50%.Dans ce cas,,Veuillez utiliserSELECT COUNT(*)
Pour obtenir un compte exact .AVG_ROW_LENGTH
Président moyen .DATA_LENGTH
PourMyISAM
,DATA_LENGTH
Est la longueur du fichier de données ,En octets.Pour
InnoDB
,DATA_LENGTH
Est la quantité approximative d'espace allouée à l'index groupé ,En octets.Plus précisément,, C'est la taille de l'index groupé (En pages)Multiplié parInnoDB
Taille de la page.Informations sur les autres moteurs de stockage , Voir les notes à la fin de cette section .
MAX_DATA_LENGTH
PourMyISAM
,MAX_DATA_LENGTH
Est la longueur maximale du fichier de données . Taille donnée du pointeur de données utilisé , C'est le nombre total d'octets de données qui peuvent être stockés dans le tableau .INDEX_LENGTH
PourMyISAM
,INDEX_LENGTH
Est la longueur du fichier index ,En octets.Pour
InnoDB
,INDEX_LENGTH
Est la quantité approximative d'espace allouée à l'index non groupé ,En octets.Plus précisément,, C'est la somme de la taille de l'index non groupé (En pages)Multiplié parInnoDB
Taille de la pageAUTO_INCREMENT
Suivant.AUTO_INCREMENT
ValeurCREATE_TIME
Temps de création de la tableTABLE_COMMENT
Commentaires utilisés lors de la création du tableau
Selondata_length+index_length Vous pouvez compter approximativement la taille de l'espace occupé par la table .
Par exemple, comptez la taille de l'espace de toutes les tables
SELECT TABLE_NAME, sum(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024 as size FROM information_schema.`TABLES` GROUP BY TABLE_NAME ORDER BY size desc;
2.COLUMNS
COLUMNS | Colonnes dans chaque tableau |
Fournir des renseignements sur les colonnes du tableau . Avec les colonnes suivantes :
TABLE_CATALOG
Nom du répertoire auquel appartient le tableau contenant cette colonne . La valeur est toujoursdef
.TABLE_SCHEMA
Schéma auquel appartient le tableau contenant cette colonne (Base de données)Nom de.TABLE_NAME
Nom du tableau contenant la colonne .COLUMN_NAME
Nom de la colonne.ORDINAL_POSITION
Position indiquée dans le tableau .COLUMN_DEFAULT
Valeurs par défaut pour les colonnes.C'estNULL
Si la colonne a une valeur par défaut expliciteNULL
, Ou la définition de colonne ne contient pasDEFAULT
Clause.IS_NULLABLE
Colonne vide .La valeur estYES
Est - ce queNULL
Vous pouvez stocker les valeurs dans les colonnes ,NO
Si ce n'est pas le cas,.DATA_TYPE
Type de données de colonne.CHARACTER_MAXIMUM_LENGTH
Pour les colonnes de chaînes de caractères , Longueur maximale en caractères .CHARACTER_OCTET_LENGTH
Pour les colonnes de chaînes de caractères ,Longueur maximale(En octets).NUMERIC_PRECISION
Pour les colonnes numériques,Précision numérique.NUMERIC_SCALE
Pour les colonnes numériques , Échelle numérique .DATETIME_PRECISION
Pour la colonne temps , Précision décimale - seconde .CHARACTER_SET_NAME
Pour les colonnes de chaînes de caractères ,Nom du jeu de caractères.COLLATION_NAME
Pour les colonnes de chaînes de caractères , Nom de la collation .COLUMN_TYPE
COLUMN_TYPE
La valeur contient le nom du type et éventuellement d'autres informations , Par exemple, précision ou longueur .COLUMN_KEY
Colonne indexée :Si
COLUMN_KEY
Vide, La colonne n'est pas indexée , Ou seulement en colonnes multiples 、 La colonne auxiliaire de l'index non unique est indexée .Si
COLUMN_KEY
- Oui.PRI
,La colonne estPRIMARY KEY
Ou Est l'une des nombreuses colonnesPRIMARY KEY
.Si
COLUMN_KEY
- Oui.UNI
,La colonne estUNIQUE
Première colonne de l'index.(UNIQUE
Plusieurs index sont autorisésNULL
Valeur, Mais vous pouvezNULL
Par inspectionNull
Colonne pour déterminer si la colonne permet .)Si
COLUMN_KEY
- Oui.MUL
,Cette colonne est la première colonne d'un index non unique, Où la valeur donnée peut apparaître plus d'une fois dans la colonne .
PRIVILEGES
Vos permissions sur cette colonne .COLUMN_COMMENT
Tout commentaire contenu dans la définition de colonne .
Adoptioncolumns Les tableaux peuvent être produits en vrac DDLDéclarations, etc.. Par exemple, la longueur du champ de chaîne pour toutes les tables sous la base de données 40Extension à60 Vous pouvez interrogercolumn_type=varchar(40) Quelles colonnes y a - t - il? , Puis il est généré par lots ddl sql.
3.PARTITIONS
PARTITIONS | Informations sur la partition de la table |
Données stockées sur une table partitionnée ,Champ principal:
PARTITION_NAME
Nom de la partition.PARTITION_METHOD
ValeurRANGE
,LIST
,HASH
,LINEAR HASH
,KEY
, OuLINEAR KEY
;TABLE_ROWS
Nombre de lignes de tableau dans la partition . Vous pouvez compter approximativement le nombre de lignes d'une table partitionnée
4.PROCESSLIST
PROCESSLIST | Informations sur le thread d'exécution actuel |
show processlist; Vous pouvez voir les connexions actives à la base de données actuelle ,Thread, etc., Souvent utilisé pour voir l'état actuel de fonctionnement de la base de données .
MySQL La liste des processus indique les actions actuellement effectuées par les ensembles de Threads qui sont exécutés dans le serveur .
Colonne centrale :
ID
Identifiant de connexion. Peut être utiliséKILL Instruction Kill thread .USER
De la Déclaration MySQL Utilisateurs.HOST
Nom d'hôte du client qui a émis l'instructionDB
Base de données par défaut pour les Threads,OuNULL
Si vous n'avez pas le choix.COMMAND
Le thread représente le type de commande exécutée par le client ,OuSleep
La session est - elle libre? .TIME
Temps pendant lequel le thread est dans l'état actuel (En secondes).STATE
Action indiquant ce que fait le thread 、 Événement ou état . La plupart des états correspondent à des opérations très rapides . Si un thread reste dans un état donné pendant quelques secondes , Il peut y avoir des problèmes qui nécessitent une enquête .INFO
L'instruction que le thread exécute,OuNULL
S'il n'exécute aucune instruction . Si l'instruction exécute une autre instruction , Il peut s'agir d'une instruction envoyée au serveur , Ou les déclarations les plus intimes .Par exemple,SiCALL
Exécution de l'instruction en cours SELECTProcédures stockées pour les déclarations,Alors...INFO
La valeur affiche ceci SELECTDéclarations.
Ne dis rien., Chaque champ ici est souvent utilisé ,Apprenez ici.commandEtSTATEStatut,
COMMAND Les valeurs sont les suivantes: :
Un thread peut avoir l'un des éléments suivants Command
Valeur:
Binlog Dump
C'est un thread sur la source de réplication , Pour envoyer le contenu du Journal binaire à la réplique .Change user
Le thread effectue une action de changement d'utilisateur .Create DB
Thread effectue une opération de création de base de données .Daemon
Le thread est à l'intérieur du serveur , Au lieu d'un thread qui sert une connexion client .Delayed insert
Le thread est un gestionnaire d'insertion de latence .Drop DB
Le thread effectue une opération de suppression de base de données .Fetch
Le thread récupère les résultats de l'exécution de l'instruction préparée .Field List
Le thread récupère des informations pour une colonne de tableau .Init DB
Le thread sélectionne une base de données par défaut .Long Data
Le thread récupère de longues données à partir des résultats de l'exécution de l'instruction préparée .Processlist
Le thread génère des informations sur le thread serveur .Refresh
Le thread rafraîchit la table 、 Log ou cache , Ou réinitialiser la variable d'état ou copier les informations du serveur .Register Slave
Le thread enregistre le serveur de répliques .Reset stmt
Le thread Réinitialise les déclarations préparées .Set option
Le thread définit ou Réinitialise les options d'exécution de l'instruction client .Sleep
Le thread attend que le client lui envoie une nouvelle déclaration .Statistics
Le thread génère des informations sur l'état du serveur .
STATE Le statut est principalement le suivant: :
After create
Lorsque le thread crée une table à la fin de la fonction qui la crée ( Y compris les tableaux temporaires internes )Heure,Ça arrive.. Même si le tableau n'a pas pu être créé en raison de certaines erreurs , Cet état est également utilisé .altering table
Le serveur exécute en place ALTER TABLE.- checking permissions Le thread vérifie si le serveur a les permissions nécessaires pour exécuter l'instruction .
Checking table
Le thread effectue une opération de vérification de table .cleaning up
Le thread a traité une commande et est prêt à libérer la mémoire et à réinitialiser certaines variables d'état .closing tables
Le thread rafraîchit les données de table modifiées sur le disque et ferme les tables utilisées . Ça devrait être une opération rapide .Si ce n'est pas le cas, Assurez - vous que vous n'avez pas de disque complet et qu'il n'est pas très utilisé .converting HEAP to ondisk
Le thread est en train de déplacer la table temporaire interne deMEMORY
Table convertie en table de disque .copy to tmp table
Le thread travaille sur unALTER TABLEDéclarations. Cet état se produit après la création d'une table avec une nouvelle structure, mais avant que les lignes ne soient copiées . Pour les fils dans cet état ,Peut être utilisé Performance Schema Pour obtenir des informations sur l'état d'avancement de l'opération de réplication .Copying to group table
Si l'énoncé est différentORDER BY
DeGROUP BY
Conditions, Les lignes sont triées par groupe et copiées dans le tableau temporaire .Copying to tmp table
Le serveur copie des tables temporaires en mémoire .Copying to tmp table on disk
Le serveur copie des tables temporaires sur le disque . L'ensemble de résultats temporaires devient trop grand .Donc,, Thread change les tables temporaires de la mémoire au format disque pour économiser la mémoire .Creating index
Le thread est en cours de traitementALTER TABLE ... ENABLE KEYS
UnMyISAM
Tableau.Creating sort index
Le thread est en cours de traitement SELECT Résolu à l'aide d'un tableau temporaire interne a.creating table
Le thread crée une table . Cela comprend la création de tables temporaires .Creating tmp table
Le thread crée une table temporaire sur la mémoire ou le disque . Si la table a été créée en mémoire , Mais ensuite converti en table de disque , L'état pendant cette opération estCopying to tmp table on disk
.committing alter table to storage engine
Serveur terminé en place ALTER TABLE Et soumettre les résultats .deleting from main table
Le serveur exécute la première partie de la suppression Multi - tables. Il n'est supprimé que du premier tableau ,Et sauvegardé pour(RÉFÉRENCES) Colonnes et décalages supprimés du tableau .deleting from reference tables
Le serveur exécute la deuxième partie de la suppression Multi - tables,Et supprimer les lignes correspondantes des autres tableaux.discard_or_import_tablespace
Le thread est en cours de traitementALTER TABLE ... DISCARD TABLESPACE
orALTER TABLE ... IMPORT TABLESPACE
Déclarations.end
C'est arrivé à la fin. ,Mais en train de nettoyer ALTER TABLE, CREATE VIEW, DELETE, INSERT, SELECT, or UPDATEAvant la Déclaration.Pourend
Statut,Les actions suivantes peuvent se produire::Supprimer l'entrée du cache de requête après avoir modifié les données dans le tableau
Écrire des événements dans le journal binaire
Libérer le tampon mémoire,Y compris: blob
Execution of init_command
Exécution du threadinit_command
Déclaration dans la valeur de la variable système .freeing items
Commande exécutée par thread . Certaines des libérations d'éléments effectuées pendant cet état impliquent la mise en cache des requêtes . Cet état est généralement suivicleaning up
.FULLTEXT initialization
Le serveur se prépare à effectuer une recherche plein texte en langage naturel .init
C'est arrivé à ALTER TABLE, DELETE, INSERT, SELECT, or UPDATE Avant l'initialisation de l'instruction . Les actions prises par le serveur dans cet état incluent la mise à jour des journaux binaires 、InnoDB
Log et quelques opérations de nettoyage de cache de requête.Killed
Quelqu'un.KILL Une déclaration a été envoyée au thread , Il devrait être vérifié la prochaine fois kill Arrêt au drapeau .In MySQL Ce drapeau est vérifié à chaque cycle principal de ,Mais dans certains cas,, Le thread peut encore prendre très peu de temps pour se terminer . Si le thread est verrouillé par un autre thread , Se termine immédiatement après que les autres fils ont libéré leurs verrous .logging slow query
Le thread écrit une instruction au Journal des requêtes lentes .login
État initial du fil de connexion , Jusqu'à ce que le client soit authentifié avec succès .manage keys
Le serveur active ou désactive l'index de table .Opening tables
Le thread essaie d'ouvrir une table .Ça devrait être un processus très rapide, À moins que quelque chose ne l'empêche de s'ouvrir .Par exemple,UnALTER TABLEor LOCK TABLE L'instruction peut empêcher l'ouverture de la table ,Jusqu'à ce que la déclaration soit terminée.Vérifiez votretable_open_cache Ça en vaut la peine si la valeur est assez grande .optimizing
Le serveur effectue une optimisation initiale pour la requête .preparing
Cet état se produit lors de l'optimisation de la requête .Purging old relay logs
Le thread supprime les fichiers journaux de relais indésirables .query end
Cet état se produit après le traitement de la requête mais aprèsfreeing items
Avant le statut.Receiving from client
Le serveur lit les paquets du client.Ce statutReading from net
In MySQL 5.7.8 Précédemment appelé.Removing duplicates
Utilisation des requêtes SELECT DISTINCT Comment faire MySQL Impossible d'optimiser les différentes opérations à un stade précoce .Donc,,MySQL Une étape supplémentaire est nécessaire pour supprimer toutes les lignes dupliquées , Puis envoyez les résultats au client .SELECT Thread Processing statement Suppression de la table temporaire interne après .Si aucune table temporaire n'a été créée,Cet état n'est pas utilisé.
rename result table
Le thread travaille sur unALTER TABLEDéclarations, Nouvelle table créée , Et le renommer pour remplacer le tableau original .Reopen tables
Le thread a obtenu le verrouillage de la table,Mais après avoir obtenu la serrure, remarquez que la structure de la surface sous - jacente a changé.Ça libère la serrure,La table est fermée,Et essayer de l'ouvrir à nouveau.Repair by sorting
Le Code de réparation utilise le tri pour créer un index .preparing for alter table
Le serveur se prépare à exécuter en place ALTER TABLE.Saving state
PourMyISAM
Opérations de table telles que la réparation ou l'analyse , Le thread enregistre le nouvel état de la table à.MYI
En - tête de fichier. L'état comprend le nombre de lignes 、AUTO_INCREMENT
Informations telles que la distribution des compteurs et des clés .Searching rows for update
Le thread effectue la première étape pour trouver toutes les lignes correspondantes avant de les mettre à jour .Si UPDATE Modification de l'index utilisé pour trouver les lignes associées , C'est ce qu'il faut faire. .Sending data
Le thread lit et traite SELECTLigne de déclaration,Et envoyer les données au client.Parce que les actions qui se produisent pendant cet état ont tendance à effectuer un grand nombre d'accès au disque(Lire), C'est donc généralement l'état le plus long d'un cycle de vie de requête donné .Sending to client
Le serveur écrit des paquets au client .Ce statutWriting to net
In MySQL 5.7.8 Précédemment appelé.setup
Le thread commence un ALTER TABLEFonctionnement.Sorting for group
Le thread effectue un tri pour satisfaire aGROUP BY
.Sorting for order
Le thread effectue un tri pour satisfaireORDER BY
.Sorting index MyISAM
Le thread Trie les pages d'index , Pour optimiser l'opération sur la table Un accès plus efficace pendant .Sorting result
PourSELECTDéclarations,C'est similaire àCreating sort index
, Mais pour les tableaux non temporaires .statistics
Le serveur calcule les statistiques pour planifier l'exécution de la requête .Si un fil est dans cet état depuis longtemps, Le serveur peut effectuer d'autres travaux de liaison de disque .System lock
Thread calledmysql_lock_tables()
Et l'état du fil n'a pas été mis à jour depuis .C'est un état très général, Cela peut se produire pour plusieurs raisons . Par exemple, Le thread demandera ou attendra un verrouillage interne ou externe du système pour la table .InInnoDBMise en œuvre LOCK TABLES. Si cet état est causé par une demande de verrouillage externe , Et vous n'avez pas utilisé plus d'un mysqldServeur,Vous pouvez utiliser ceci OptionsMyISAM Désactiver le verrouillage externe du système .--skip-external-lockingMais, Le verrouillage externe est désactivé par défaut , Donc cette option n'a probablement aucun effet .Pour SHOW PROFILE, Cet état signifie que le thread demande un verrouillage ( Ne l'attendez pas. ).Updating
Le thread recherche les lignes à mettre à jour et les met à jour .updating main table
Le serveur exécute la première partie d'une mise à jour multi - tables.Il ne met à jour que le premier tableau,Et enregistrer pour mettre à jour d'autres(RÉFÉRENCES)Colonnes et décalages du tableau.updating reference tables
Le serveur exécute la deuxième partie de la mise à jour multi - tables, Et mettre à jour les lignes correspondantes à partir d'autres tableaux .User lock
Le thread demandera ou attend le verrou de consultation pour la demande d'appel GET_LOCK().Pour SHOW PROFILE, Cet état signifie que le thread demande un verrouillage ( Ne l'attendez pas. ).User sleep
Le thread a appelé un SLEEP()Appelez.FLUSH TABLES WITH READ LOCK En attendant de soumettre le verrou.
FLUSH TABLES WITH READ LOCK En attente d'une lecture globale de la serrure ou read_only Réglage des variables du système mondial .
Waiting for tables
Le thread a été informé que l'infrastructure d'un tableau a changé , Il faut rouvrir la table pour obtenir la nouvelle structure .Mais,Pour rouvrir la table, Il doit attendre que tous les autres Threads aient fermé la table en question .Waiting for table flush
Exécution du threadFLUSH TABLES Et en attendant que tous les Threads ferment leurs tables , Ou le thread est informé que la structure sous - jacente de la table a changé , Il faut rouvrir la table pour obtenir la nouvelle structure .Mais,Pour rouvrir la table, Il doit attendre que tous les autres Threads aient fermé la table en question .Waiting for
Le serveur attend de verrouiller le Sous - système à partir des métadonnées Accès Serrure ou serrure ,Parmi euxlock_type
lock THR_LOCKlock_type
Indique le type de serrure .Cet état indique une attente a
THR_LOCK
:Waiting for table level lock
Ces états indiquent attendre le verrouillage des métadonnées :
Waiting for event metadata lock
Waiting for global read lock
Waiting for schema metadata lock
Waiting for stored function metadata lock
Waiting for stored procedure metadata lock
Waiting for table metadata lock
Waiting for trigger metadata lock
Vous pouvez obtenir l'état actuel du thread en attente de verrouillage ,En particulier la mise en œuvreDDLHeure,Besoin d'attention, Il est facile de ne pas libérer le lien parce que le verrou de métadonnées n'est pas disponible ,Crash de la base de données.
Waiting on cond
Le thread attend que la condition devienne un vrai état général . Aucune information spécifique sur l'état n'est disponible .Writing to net
Le serveur écrit des paquets sur le réseau .De MySQL 5.7.8 C'est parti., Cet état est appeléSending to client
.
边栏推荐
- Dark horse -- redis
- Low CPU load and high loadavg processing method
- 思維導圖+源代碼+筆記+項目,字節跳動+京東+360+網易面試題整理
- Tongyu Xincai rushes to Shenzhen Stock Exchange: the annual revenue is 947million Zhang Chi and Su Shiguo are the actual controllers
- The slave i/o thread stops because master and slave have equal MySQL serv
- Tensorflow and torch code verify whether CUDA is successfully installed
- ROS自定义消息发布订阅示例
- ModuleNotFoundError: No module named ‘PIL‘解决方法
- A full set of teaching materials, real questions of Android interview of 7 major manufacturers including Alibaba Kwai pinduoduo
- map的使用(列表的数据赋值到表单,json逗号隔开显示赋值)
猜你喜欢
Lucun smart sprint technology innovation board: annual revenue of 400million, proposed to raise 700million
倒计时2天|腾讯云消息队列数据接入平台(Data Import Platform)直播预告
LeetCode_双指针_中等_61. 旋转链表
Low CPU load and high loadavg processing method
数学知识——高斯消元(初等行变换解方程组)代码实现
How word displays modification traces
Php+redis realizes the function of canceling orders over time
【翻译】Linkerd在欧洲和北美的采用率超过了Istio,2021年增长118%。
Looting iii[post sequence traversal and backtracking + dynamic planning]
学习探索-无缝轮播图
随机推荐
如何自定义动漫头像?这6个免费精品在线卡通头像生成器,看一眼就怦然心动!
Excel 中VBA脚本的简单应用
AutoCAD - what is the default lineweight for centerline drawing and CAD? Can I modify it?
GCC【7】- 编译检查的是函数的声明,链接检查的是函数的定义bug
JDBC details
CCNP Part 11 BGP (III) (essence)
Solution of intelligent management platform for suppliers in hardware and electromechanical industry: optimize supply chain management and drive enterprise performance growth
Dark horse -- redis
short i =1; i=i+1与short i=1; i+=1的区别
Reflection and illegalaccessexception exception during application
R language ggplot2 visualization: use the ggstripchart function of ggpubr package to visualize the grouped dot strip plot, and set the add parameter to add box plots for different levels of dot strip
zabbix 代理服务器 与 zabbix-snmp 监控
swagger2报错Illegal DefaultValue null for parameter type integer
Mind map + source code + Notes + project, ByteDance + JD +360+ Netease interview question sorting
Documents to be used in IC design process
First day of rhcsa study
Computer network: sorting out common network interview questions (I)
How to do smoke test
ROS自定义消息发布订阅示例
应用使用Druid连接池经常性断链问题分析