当前位置:网站首页>Jour 13 Projet de santé mentale - chapitre 13
Jour 13 Projet de santé mentale - chapitre 13
2022-06-23 06:15:00 【Gros. ۣۖ Tigre ۣۖ】
Projet de santé mentale No13Chapitre
Contenu de ce chapitre notre sujet estRedis,Pour l'instantRedisLes applications dans les entreprises sont déjà très répandues,En même tempsRedisC'est aussi l'objet de l'entrevue.
1. RedisProblèmes liés au cache
1.1 Pénétration du cache
Pénétration du cacheIl s'agit d'interroger des données qui ne doivent pas exister dans une base de données.
Nous avions l'habitude d'utiliser normalementRedisLe processus de mise en cache est approximativement:
1、La requête de données commence par la requête de cache
2、Renvoie directement les données mises en cache si elles existent
3、Si les données n'existent pas,Pour interroger la base de données,Et mettre les données trouvées dans le cache
4、Si les données de requête de la base de données sont vides,Ne pas mettre dans le cache
Par exemple, les clés primaires de nos tableaux de données sont générées par auto - augmentation,Toutes les valeurs de la clé primaire sont supérieures à0.Si le paramètre passé par l'utilisateur est-1,Que se passera - t - il??C'est-1,C'est un objet qui n'existe pas.Le programme va interroger la base de données à chaque fois,Et chaque requête est vide,Pas de cache à chaque fois.Si quelqu'un attaque malicieusement,Pour exploiter cette vulnérabilité,Pression sur la base de données,Même écraser notre base de données.
Pour éviter que quelqu'un exploite cette vulnérabilité pour exploiter notre base de données,Nous pouvons prendre les mesures suivantes:
Si l'objet interrogé à partir de la base de données est vide,Aussi dans le cache,keyValeur de la clé primaire soumise à l'utilisateur,valuePournull,Le temps d'expiration du cache est plus court,Par exemple, régler à60Secondes.Donc la prochaine fois que l'utilisateur se base sur cecikeyRequêteredisLe cache peut interroger les valeurs(Bien sûr que ça vautnull),Pour protéger notre base de données des attaques.
1.2 Cache l'avalanche
Cache l'avalanche,Ça veut dire qu'à un moment donné,Échec de l'expiration de l'ensemble de cache.Requête d'accès aux données pour cette période de temps qui expire dans l'ensemble de cache,Tout est tombé dans la base de données,Pour la base de données,Il y aura des pics périodiques de pression.
Pour éviter une avalanche de cache, Nous pouvons définir différents temps d'expiration pour les données mises en cache ,Cela évite l'invalidation des données mises en cache dans un ensemble de temps. Par exemple, pour les données les plus chaudes (Accès aux données à haute fréquence)Peut être mis en cache plus longtemps, Il y a des périodes où les données de la porte froide peuvent être mises en cache . Même pour certaines données particulièrement populaires, vous pouvez définir pour ne jamais expirer .
1.3 Rupture du cache
Rupture du cache,C'est unkeyTrès chaud(Par exemple, les données sur les produits achetés au cours de la période du double 11),En portant de grandes simultanéités,Accès à ce point dans un grand ensemble de concurrence,Quand çakeyAu moment de l'échec,Une grande concurrence continue brise le cache,Demande directement à la base de données,C'est comme percer un trou dans une barrière..
Nous pouvons également définir ces données Hotspot pour ne jamais expirer et résoudre le problème de rupture du cache .
2. RedisProgramme de regroupement
Machine autonomeRedis Lire et écrire très rapidement , Capable de supporter l'accès d'un grand nombre d'utilisateurs .Bien queRedisTrès haute performance, Mais pour les grands sites , Plus de données à obtenir par seconde qu'un seul redis La pression que le service peut supporter , C'est pourquoi nous avons besoin d'urgence d'une solution unique Redis Problèmes de sous - performance du service .Cela nécessite l'utilisation deRedisLe cluster de.Redis Les grappes ont plusieurs options , Les explications suivantes sont fournies séparément .
2.1 Copie maître - esclaveReplication
redis Mode de prise en charge de la réplication maître - esclave .
En mode copie maître - esclaveRedis Les noeuds sont divisés en deux rôles :Noeud maître(Aussi appelémaster)Et des noeuds esclaves(Aussi appeléslave). Ce Cluster modal se compose d'un noeud maître et de plusieurs noeuds esclaves .
Principes:Master Synchronise les données vers slave,Etslave Les données ne seront pas synchronisées avec master.Slave Se connectera au démarrage masterPour synchroniser les données.

Il s'agit d'un modèle distribué typique de séparation de la lecture et de l'écriture. .Nous pouvons utilisermaster Pour gérer les opérations d'écriture ,slaveFournir une opération de lecture. Cela réduit efficacement le nombre d'accès simultanés à une seule machine .
Il est très simple de mettre en œuvre ce modèle de réplication maître - esclave , Le noeud maître n'a pas besoin d'être modifié ,Démarrer le service directement. Modifier à partir du noeud redis.confProfil,Ajouter une configuration:slaveof <Noeud maîtreipAdresse> <Numéro de port du noeud principal>,Par exemplemasterDeipL'adresse est192.168.200.129,Le numéro de port est6379,AlorsslaveIl suffit deredis.confConfiguration dans le fichierslaveof 192.168.200.129 6379C'est tout..
Connectez les noeuds maître et esclave respectivement , Test trouvé l'opération d'écriture du noeud Maître , Les mêmes données sont immédiatement visibles à partir du noeud . Mais en écrivant à partir du noeud ,Conseils READONLY You can't write against a read only slave Impossible d'écrire les données à partir du noeud .
Nous pouvons maintenant configurer plusieurs noeuds esclaves pour lire de cette façon ,Le noeud maître écrit,Réaliser la séparation lecture - écriture.
2.2 Sentinellesentinel
Nous avons maintenant donnéRedis Mise en œuvre de la réplication maître - esclave , Les données du noeud maître peuvent être synchronisées avec le noeud esclave ,Séparation de la lecture et de l'écriture,AméliorationRedisPerformance. Mais il y a encore un problème , C'est qu'il n'y a qu'un seul noeud maître dans ce mode de réplication maître - esclave. ,Une fois que le noeud maître s'est arrêté, Je ne peux plus écrire . C'est - à - dire que la réplication maître - esclave n'est pas très disponible . Qu'est - ce que la haute disponibilité ? Comment parvenir à une disponibilité élevée ?
2.2.1 Introduction à haute disponibilité
Haute disponibilité(HA)Est l'un des facteurs à prendre en considération dans la conception architecturale des systèmes distribués, C'est la réduction du système par la conception architecturale 不Temps de disponibilité des services. La garantie d'une disponibilité élevée suit généralement les points suivants :
- Le point unique est l'ennemi de la haute disponibilité du système , Le point unique doit être évité autant que possible lors de la conception du système. .
- Assurer une grande disponibilité du système grâce à la conception architecturale , Ses principes fondamentaux sont les suivants: :Redondance.
- Réaliser un FAILOVER automatique.
2.2.2 Redis sentinelIntroduction
sentinel(Sentinelle)Est utilisé pour surveillerredisEn grappesMasterOutils pour l'état, C'est aussi un processus autonome ,- Oui.Redis Solutions très disponibles pour,sentinelLe mode sentinelle a été intégré dansredis2.4Dans les versions ultérieures.
sentinelPeut surveiller un ou plusieursredis masterServices,Et ceux - cimasterTous les esclaves du service;Quand quelqu'unmasterQuand le service est hors ligne,AutomatisermasterL'un des suivants passe du service àmasterRemplacement du Service hors lignemasterLe Service continue de traiter la demande, Et le reste copie les données du nouveau maître à partir du noeud .
InredisUne fois l'installation terminée,Il y en aura un.redis-sentinelDocuments,C'est le début.sentinelFichier de script pour,Et en même tempssentinel.confDocumentation,C'est...sentinelProfil pour.
sentinelMode de fonctionnement:

Attention!: Certains camarades de classe peuvent avoir des questions , Maintenant, nous sommes basés sur sentinelHaute disponibilité atteinte,Mais sisentinel Et si on raccroche? ?En fait...sentinel Le regroupement peut également être réalisé en soi ,C'est - à - diresentinelAussi très disponible.
2.2.3 Redis sentinelUtiliser
2.2.3.1 Configurationsentinel
SentinelInredis Dans le paquet d'installation pour ,On peut l'utiliser directement, Mais il faut d'abord modifier le profil ,Exécuter les commandes:
cd /usr/local/redis/
# CopiersentinelProfil
cp /root/redis-4.0.14/sentinel.conf sentinel01.conf
# Modifier le profil:
vi sentinel01.conf
Insentinel01.confAjouter au profil:
# Accès externe
bind 0.0.0.0
sentinel monitor mymaster 127.0.0.1 6379 1
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
Attention!:S'il y asentinel monitor mymaster 127.0.0.1 6379 2Configuration,Notez.
Description des paramètres:
sentinel monitor mymaster 192.168.200.129 6379 1
mymasterAppel nominal de la section principale, Peut être n'importe quel nom , Mais doit être compatible avec la configuration suivante .192.168.200.128 6379Adresse de connexion du noeud Maître.1Un vote est nécessaire pour juger un serveur primaire invalide , Le réglage ici nécessite au moins 1- Oui. Sentinel D'accord..sentinel down-after-milliseconds mymaster 10000
ParamètresSentinelServices considérés器 Le nombre de millisecondes nécessaires pour déconnecter .
sentinel failover-timeout mymaster 60000
Paramètresfailover(FAILOVER)Date d'expiration.QuandfailoverAprès le début,Il n'y a toujours pas eu de déclenchementfailoverFonctionnement,En cours
sentinel Je pense que cette fois failoverÉchec.sentinel parallel-syncs mymaster 1
Set on Execution 行En cas de défaillance, Jusqu'à quel nombre d'esclaves peuvent être connectés simultanément au nouveau service maître 器Entrez.行Synchroniser, Plus ce nombre est petit,, Représente moins de serveurs esclaves synchronisés en même temps , Plus il faut de temps pour terminer le FAILOVER .
2.2.3.2 Démarragesentinel
Après modification du profil,Exécuter la commande suivante,Démarragesentinel:
/root/redis-4.0.14/src/redis-sentinel sentinel01.conf
Les effets sont les suivants:

Je vois.,6379C'est le service principal.,6380Et6381 C'est du service. .
2.2.3.3 Testssentinel
On est là.6379Mise en œuvreshutdown, Fermer le service principal ,SentinelVoici les conseils:
+sdown master mymaster 192.168.200.129 6379 #Arrêt du noeud maître
+odown master mymaster 192.168.200.129 6379 #quorum 1/1
+new-epoch 1
+try-failover master mymaster 192.168.200.129 6379 # Tentative de défaillance
+vote-for-leader 00a6933e0cfa2b1bf0c3aab0d6b7a1a6455832ec 1 # Direction des élections
+elected-leader master mymaster 192.168.200.129 6379
+failover-state-select-slave master mymaster 192.168.200.129 6379 # FAILOVER select from service
+selected-slave slave 192.168.200.129:6380 192.168.200.129 6380 @ mymaster 192.168.200.129 6379
# FAILOVER Status send Envoyé à6380
+failover-state-send-slaveof-noone slave 192.168.200.129:6380 192.168.200.129 6380 @ mymaster 192.168.200.129 6379
+failover-state-wait-promotion slave 192.168.200.129:6380 192.168.200.129 6380 @ mymaster 192.168.200.129 6379
+promoted-slave slave 192.168.200.129:6380 192.168.200.129 6380 @ mymaster 192.168.200.129 6379
+failover-state-reconf-slaves master mymaster 192.168.200.129 6379
+slave-reconf-sent slave 192.168.200.129:6381 192.168.200.129 6381 @ mymaster 192.168.200.129 6379
+slave-reconf-inprog slave 192.168.200.129:6381 192.168.200.129 6381 @ mymaster 192.168.200.129 6379
+slave-reconf-done slave 192.168.200.129:6381 192.168.200.129 6381 @ mymaster 192.168.200.129 6379
+failover-end master mymaster 192.168.200.129 6379 #Fin du FAILOVER, Le service principal original était 6379
+switch-master mymaster 192.168.200.129 6379 192.168.200.129 6380 # Convertir le service principal ,De l'original6379 Au présent 6380
+slave slave 192.168.200.129:6381 192.168.200.129 6381 @ mymaster 192.168.200.129 6380
+slave slave 192.168.200.129:6379 192.168.200.129 6379 @ mymaster 192.168.200.129 6380
+sdown slave 192.168.200.129:6379 192.168.200.129 6379 @ mymaster 192.168.200.129 6380
Sur demande,Nous pouvons voir,6379 FAILOVER to 6380, Sélection par vote 6380Pour le nouveau serveur principal.
In6380Mise en œuvreinfo
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=80531,lag=1
In6381Mise en œuvreinfo
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
Le FAILOVER est illustré dans la figure ci - dessous. :
2.3 Redis Cluster intégré cluster
2.3.1 Redis clusterIntroduction
Redis Cluster- Oui.Redis Cluster intégré pour ,InRedis3.0 Mise en œuvre proposée .InRedis3.0 Il n'y avait pas ce Cluster intégré avant .Redis Cluster Est un schéma de Cluster sans noeud central ,DépendanceGossip Protocole co - Automation repair Cluster Status .
Redis clusterAu moment de la conception,C'est pour la décentralisation,Au Middleware,C'est - à - dire,Chaque noeud du cluster est une relation égale,Tout est égal,Chaque noeud conserve ses propres données et l'état de l'ensemble du cluster.Chaque noeud est connecté à tous les autres noeuds,Et ces connexions restent actives,Cela garantit que nous n'avons qu'à connecter n'importe quel noeud du cluster,Vous pouvez obtenir les données d'autres noeuds.
Redis cluster L'architecture de la grappe est la suivante: :
[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-tnICJY0p-1655532042629)(5.
)]
2.3.2 Le mode de hachage distribue les données
Il est important de noter que, Dans ce mode de regroupement, les données stockées par chaque noeud du cluster ne sont pas toutes , Et juste une partie des données . Comment les données sont - elles raisonnablement réparties entre les différents noeuds? ?
Redis Un Cluster est une sorte de Hachage (hash slot) La façon dont les données sont distribuées .redis cluster Allocation par défaut 16384 - Oui.slot,Quand noussetUnkey Heure,Ça marchera.CRC16L'algorithme prend le module pour obtenirslot,Et j'ai mis çakey Sur les noeuds de l'intervalle de hachage,L'algorithme spécifique est:CRC16(key) % 16384.
Supposons qu'il y ait3 Les noeuds sont déjà groupés ,Respectivement.:A, B, C Trois noeuds,Ils peuvent être trois ports sur une machine,Ou trois serveurs différents.Alors,AdoptionHachage (hash slot)Pour distribuer16384- Oui.slot Et si,Chacun de ces trois noeudsslot L'intervalle est:
- NoeudAÉcraser0-5460
- NoeudBÉcraser5461-10922
- NoeudCÉcraser10923-16383
Alors, Maintenant, il faut en définir un. key ,Par exemple,my_name:
set my_name itcast
Selonredis cluster Algorithme de hachage basé sur :CRC16('my_name')%16384 = 2412. Alors ça vakey Le stockage de NoeudA C'est parti..
2.3.3 Redis clusterMode maître - esclave pour
redis cluster Pour garantir une grande disponibilité des données,Mode maître - esclave ajouté,Un noeud maître correspond à un ou plusieurs noeuds esclaves,Le noeud maître fournit l'accès aux données,Le noeud esclave tire la sauvegarde des données du noeud Maître,Lorsque ce noeud principal est suspendu, Un de ces noeuds esclaves est sélectionné pour agir comme noeud maître ,Pour s'assurer que le cluster ne s'arrête pas.
redis cluster L'effet de l'ajout du mode maître - esclave est le suivant :
2.3.4 Redis clusterConstruction
2.3.4.1 Préparez - vous.RedisNoeud
Pour que le vote puisse avoir lieu ,Au moins3Noeuds maîtres.
Chaque maître a besoin d'au moins un esclave ,Il faut donc au moins3Noeuds esclaves.
C'est tout.6TableredisServeur,Nous utilisons ici6- Oui.redisExemple,Le numéro de port est7001~7006.
Préparez d'abord un redisEnvironnement,Copier l'originalbinDossiers, Après le nettoyage comme premier redisNoeud,Les commandes spécifiques sont les suivantes::
# EntréeredisRépertoire d'installation
cd /usr/local/redis
# Copierredis
mkdir cluster
cp -R bin/ cluster/node1
# Supprimer les fichiers persistants
cd cluster/node1
rm -rf dump.rdb
rm -rf appendonly.aof
# Supprimer le profil original
rm -rf redis.conf
# Copier un nouveau profil
cp /root/redis-4.0.14/redis.conf ./
# Modifier le profil
vi redis.conf
Environnement groupéredis Le Profil du noeud est le suivant :
# Impossible de définir le mot de passe , Sinon, le cluster ne se connectera pas au démarrage
# RedisLe serveur est accessible à travers le réseau
bind 0.0.0.0
# Modifier le numéro de port
port 7001
# RedisDémarrage de l'arrière - plan
daemonize yes
# OuvertaofPersistance
appendonly yes
# Ouvrir le cluster
cluster-enabled yes
# Configuration du cluster Le Profil démarre la génération automatique pour la première fois
cluster-config-file nodes.conf
# Délai de demande
cluster-node-timeout 5000
Le premierredisNoeudnode1Quand tu seras prêt, Copier séparément 5Part,
cp -R node1/ node2
Modifier le numéro de port de six noeuds à 7001~7006,Modifierredis.confLe Profil suffit
Script pour démarrer le noeud :
vi start-all.sh
Le contenu est le suivant::
cd node1
./redis-server redis.conf
cd ..
cd node2
./redis-server redis.conf
cd ..
cd node3
./redis-server redis.conf
cd ..
cd node4
./redis-server redis.conf
cd ..
cd node5
./redis-server redis.conf
cd ..
cd node6
./redis-server redis.conf
cd ..
Définir les permissions pour le script ,Et démarre:
chmod 744 start-all.sh
./start-all.sh
Utilisez les commandes ps -ef | grep redis Voir les effets comme suit:
[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-ySuI7BQ5-1655532042630)(7.
)]
2.3.4.2 DémarrageRedisCluster
redis L'outil de gestion du cluster utilise rubyLangage de script, Nécessaire pour installer le cluster rubyEnvironnement,Installer d'abordrubyEnvironnement:
# Installationruby
yum -y install ruby ruby-devel rubygems rpm-build
# Mise à jourrubyVersion,redis4.0.14 Besoins environnementaux des grappes 2.2.2Ce qui précèderubyVersion
yum install centos-release-scl-rh
yum install rh-ruby23 -y
scl enable rh-ruby23 bash
# VoirrubyVersion
ruby -v
Télécharger les gem,L'adresse de téléchargement est la suivante:
https://rubygems.org/gems/redis/versions/4.1.0
Le matériel pédagogique est déjà disponible redis-4.1.0.gem, Télécharger et installer directement ,Commandes d'installation:
gem install redis-4.1.0.gem
EntréeredisRépertoire d'installation,Utiliserredis Script de gestion de Cluster autonome ,Exécuter les commandes:
# EntréeredisPaquet d'installation
cd /root/redis-4.0.14/src/
# Voir le script de gestion de Cluster
ll *.rb
# Démarrer un Cluster en utilisant le script de gestion de Cluster ,Dans la commande suivante1 Représente la création de 1Noeuds esclaves
./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 \
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
Les effets sont les suivants:
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.200.129:7001
192.168.200.129:7002
192.168.200.129:7003
Adding replica 192.168.200.129:7005 to 192.168.200.129:7001
Adding replica 192.168.200.129:7006 to 192.168.200.129:7002
Adding replica 192.168.200.129:7004 to 192.168.200.129:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: f0094f14b59c023acd38098336e2adcd3d434497 192.168.200.129:7001
slots:0-5460 (5461 slots) master
M: 0eba44418d7e88f4d819f89f90da2e6e0be9c680 192.168.200.129:7002
slots:5461-10922 (5462 slots) master
M: ac16c5545d9b099348085ad8b3253145912ee985 192.168.200.129:7003
slots:10923-16383 (5461 slots) master
S: edc7a799e1cfd75e4d80767958930d86516ffc9b 192.168.200.129:7004
replicates ac16c5545d9b099348085ad8b3253145912ee985
S: cbd415973b3e85d6f3ad967441f6bcb5b7da506a 192.168.200.129:7005
replicates f0094f14b59c023acd38098336e2adcd3d434497
S: 40fdde45b16e1ac85c8a4c84db75b43978d1e4d2 192.168.200.129:7006
replicates 0eba44418d7e88f4d819f89f90da2e6e0be9c680
Can I set the above configuration? (type 'yes' to accept): yes # Notez que le choix est yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join..
>>> Performing Cluster Check (using node 192.168.200.129:7001)
M: f0094f14b59c023acd38098336e2adcd3d434497 192.168.200.129:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: ac16c5545d9b099348085ad8b3253145912ee985 192.168.200.129:7003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: cbd415973b3e85d6f3ad967441f6bcb5b7da506a 192.168.200.129:7005
slots: (0 slots) slave
replicates f0094f14b59c023acd38098336e2adcd3d434497
S: 40fdde45b16e1ac85c8a4c84db75b43978d1e4d2 192.168.200.129:7006
slots: (0 slots) slave
replicates 0eba44418d7e88f4d819f89f90da2e6e0be9c680
M: 0eba44418d7e88f4d819f89f90da2e6e0be9c680 192.168.200.129:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: edc7a799e1cfd75e4d80767958930d86516ffc9b 192.168.200.129:7004
slots: (0 slots) slave
replicates ac16c5545d9b099348085ad8b3253145912ee985
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
2.3.5 UtiliserRedisCluster
Selonredis clusterCaractéristiques,C'est décentralisé,Chaque noeud est égal, Ainsi, chaque noeud connecté peut obtenir et définir des données .
UtiliserredisConnexion client pourredisCluster,Les ordres sont les suivants::
./redis-cli -h 192.168.200.129 -p 7001 -c
Parmi eux-c Assurez - vous d'ajouter,C'est...redisLorsque le cluster est connecté, Paramètres pour effectuer un saut de noeud .
Certaines valeurs peuvent être définies après la connexion au cluster , Vous pouvez voir que ces valeurs sont stockées de façon dispersée sur différents noeuds selon le schéma de hachage mentionné précédemment. .
边栏推荐
- Cryptography series: certificate format representation of PKI X.509
- Real MySQL interview questions (XXVII) -- Classification of users by RFM analysis method
- Simple about fastdfs
- Wireshark TS | video app cannot play
- Android handler memory leak kotlin memory leak handling
- Vant web app calendar component performance optimization calendar add min date the minimum date page loads slowly
- Eight data analysis models: ogsm model
- Pyinstaller sklearn reports errors
- Pat class B 1016 C language
- Pyqt5 setting window top left Icon
猜你喜欢

Real MySQL interview questions (XXVI) -- didi 2020 written examination questions

gplearn出现 assignment destination is read-only

JVM原理简介

The hierarchyviewer tool cannot find the hierarchyviewer location
![[cocos2d-x] screenshot sharing function](/img/fc/e3d7e5ba164638e2c48bc4a52a7f13.png)
[cocos2d-x] screenshot sharing function

Tcp/ip explanation (version 2) notes / 3 link layer / 3.4 bridge and switch

jvm-03.jvm内存模型

Radar canvas

jvm-04. Object's memory layout

Summary of ant usage (I): using ant to automatically package apk
随机推荐
机器学习3-岭回归,Lasso,变量选择技术
How to specify the output path of pig register Project Log
jvm-05. garbage collection
Pat class B 1016 C language
Pyinstaller packaging pyttsx3 error
Leetcode topic analysis: factorial training zeroes
Pat class B 1025 reverse linked list
SQL表名与函数名相同导致SQL语句错误。
基于T5L1的小型PLC设计方案
Day_12 传智健康项目-JasperReports
Introduction to JVM principle
Centos7部署radius服务-freeradius-3.0.13-15.el7集成mysql
Implementation of linear list linked list structure
Cryptography series: certificate format representation of PKI X.509
Paper notes: multi label learning lsml
Vant web app calendar component performance optimization calendar add min date the minimum date page loads slowly
Explanation of penetration test process and methodology (Introduction to web security 04)
Pat class B 1021 digit statistics
给定二叉树的某个节点,返回该节点的后继节点
Visual studio debugging tips