当前位置:网站首页>Résumé des questions d'entrevue (2) Modèle io, ensemble, principe NiO, pénétration du cache, avalanche de rupture
Résumé des questions d'entrevue (2) Modèle io, ensemble, principe NiO, pénétration du cache, avalanche de rupture
2022-07-03 11:12:00 【C'est Xiao Qing.】
1.Plusieurs IO Modèle,
BlocageIO、Non - blocageIO、MultiplexageIO、Signal DriveIO, AsynchroneIO (Il y a une explication détaillée dans l'article précédentIOPlusieurs modèles Blocage,Non - blocage,ioMultiplexage,Conduite du signal et asynchroneio_C'est un petit blog ensoleillé-CSDNBlogs
2.JavaClasse set
JavaLes classes de collection sont divisées en4Grandes catégories,Par4Interfaces pour représenter,
Ils sontSet、List、Queue、Map.Parmi eux,Set、List、Queue、Tous hérités deCollectionInterface.
SetReprésente un désordre、Collection non reproductible d'éléments.
ListReprésentant l'ordre、Une collection d'éléments qui peuvent être répétés.
QueuePour le premier entré premier sorti(FIFO)File d'attente pour.
MapLe représentant a une relation cartographique(key-value)Collection de.
JavaFournit des classes d'implémentation pour de nombreuses collections,Ce sont toutes des classes d'implémentation directe ou indirecte de ces interfaces,Les plus courants sont:HashSet、TreeSet、ArrayList、LinkedList、ArrayDeque、HashMap、TreeMapAttendez..
L'interface ou l'implémentation de la classe set décrite ci - dessus ,Tous situésjava.utilSous le sac., La plupart de ces implémentations ne sont pas sans fil . Bien que non - thread Safe , Mais ces classes ont de meilleures performances . Si vous avez besoin d'une classe de collection Thread - Safe ,Peut utiliserCollectionsClasse d'outils, Cette classe d'outils fournit synchronizedXxx()Méthodes, Ces classes de collection peuvent être enveloppées dans des classes de collection threadsafe .
java.util Dans la classe Collection sous le paquet , Il y a aussi quelques classes de collection Thread - Safe ,Par exempleVector、Hashtable, Elles sont toutes très anciennes API. Bien qu'elles soient sans fil ,Mais les performances sont médiocres,L'utilisation n'est plus recommandée.

3.NIO Principe de réalisation
(Buffer、Channel、Selector)
NIOEst basé surIOMise en œuvre du modèle multiplexage,Il contient trois éléments de base,Respectivement.Buffer、Channel、Selector.
1. NIO- Oui.Face au tamponDe,InNIOToutes les données sont traitées par tampon.BufferC'est l'objet tampon,Lire ou écrire,Les données sont entrées en premierBufferDe.BufferL'essence de est un tableau,Normalement, c'est un tableau d'octets,Peut également être un autre type de tableau.BufferEst une interface,Ses classes d'implémentation sont:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer.
2. ChannelC'est un passage,Il permet de lire et d'écrire des données.Contrairement au courant,Le flux est unidirectionnel,EtChannel- Oui.Dans les deux sensDe.Les données peuvent être obtenues parChannelLireBuffer- Oui.,On peut aussiChannelÉcrit àBuffer- Oui..Pour supporter différents appareils,ChannelL'interface a plusieurs classes de semences,Par exemple:FileChannelPour accéder aux fichiers disque、SocketChannelEtServerSocketChannelPourTCPCommunication réseau du Protocole、DatagramChannelPourUDPCommunication réseau du Protocole.
3. SelectorC'est un multiplexeur, On peut le surveiller Écouter le Web IOÉtat de.Il peut continuer à vérifier les inscriptionsChannel,SiChannelIl y a une connexion、Lire、Écrire l'événement se produit,Et ça?ChannelPrêt.,SeraSelectorVotez..Tout ce qui a été votéChannelEnsemble,On peut passer parSelectionKeyObtenir,Et ensuiteIOFonctionnement.
4.Pénétration du cache、Rupture du cache、Quelle est la différence entre une avalanche de cache,Comment résoudre?
Pénétration du cache: Le client interroge des données qui n'existent pas du tout , Faire la demande directement au niveau de stockage , Cause une charge excessive ,Même les temps d'arrêt.La raison de cette situation, Peut - être que la couche affaires a supprimé par erreur les données du cache et de la Bibliothèque , Ou une attaque malveillante , Accès exclusif aux données qui n'existent pas dans la Bibliothèque .
Solutions:
1. Cache un objet vide: Après l'échec du niveau de stockage , Les valeurs nulles sont toujours stockées dans la couche cache , Lorsque le client accède de nouveau aux données , La couche cache renvoie directement une valeur nulle .
2. Le filtre blon: Enregistrer les données dans le filtre Bloom , Intercepter avec un filtre avant d'accéder au cache , Renvoie une valeur nulle si les données n'existent pas .
Rupture du cache: Un Hotspot Data , C'est très fréquenté . Au moment où son cache s'est effondré , Un grand nombre de demandes vont directement au niveau de stockage ,Provoquer un crash de service.
· Solutions:
1. Ne jamais expirer:Les données Hotspot ne fixent pas de délai d'expiration, Donc ça n'arrivera pas. ,C'est“Physique” Ne jamais expirer sur . Ou définir un délai d'expiration logique pour chaque donnée , Lorsque la logique de données a expiré , Reconstruire le cache avec des fils séparés .
2. Plus mutex: Accès aux données plus mutex , Quand un thread accède aux données ,Les autres fils ne peuvent attendre que. Après l'accès à ce thread , Les données du cache seront reconstruites , D'autres Threads pourront alors prendre des valeurs directement à partir du cache .
Cache l'avalanche:À un moment donné, La couche cache ne peut pas continuer à fournir le service , Provoque toutes les demandes directement au niveau de stockage ,Cause des temps d'arrêt de la base de données. Peut - être qu'il y a beaucoup de données dans le cache qui expirent en même temps ,Ça pourrait êtreRedisDéfaillance du noeud,Un grand nombre de demandes n'ont pu être traitées.
· Solutions:
1. Éviter l'expiration simultanée des données :Lors du réglage du délai d'expiration, Ajouter un nombre aléatoire ,Évitez les grandes quantitéskeyExpire en même temps.
2. Activer les mesures de dégradation et de fusion : En cas d'avalanche , Si l'application n'accède pas aux données de base , Renvoie directement les informations prédéfinies /Valeur nulle/Message d'erreur. Ou en cas d'avalanche , Pour les demandes d'accès à l'interface cache , Le client n'envoie pas la demande à Redis,C'est un retour direct..
3. Construire desRedisServices: En mode sentinelle ou Cluster ,Déployer plusieursRedisExemple, Temps d'arrêt des noeuds individuels , Le service est toujours disponible dans son ensemble .
边栏推荐
猜你喜欢

解决undefined reference to `__aeabi_uidivmod‘和undefined reference to `__aeabi_uidiv‘错误

【Proteus仿真】74HC154 四线转12线译码器组成的16路流水灯

12. Nacos server service registration of source code analysis of Nacos service registration

我,大厂测试员,降薪50%去国企,后悔了...

如何清理v$rman_backup_job_details视图 报错ORA-02030

最高月薪18K 拥有好的“心态和选择”, 成功就差“认真和坚持”~

Software testing e-commerce projects that can be written into your resume, don't you come in and get it?

Activity and fragment lifecycle

T5 attempt

Programming examples of stm32f1 and stm32subeide -tm1637 drives 4-bit 7-segment nixie tubes
随机推荐
封装一个koa分布式锁中间件来解决幂等或重复请求的问题
最高月薪18K 拥有好的“心态和选择”, 成功就差“认真和坚持”~
Crawl with requests
文件上传下载测试点
2021 postgraduate entrance examination mathematics 2 linear algebra
【obs】obs的ini格式的ConfigFile
The testing department of the company came to the king of the Post-00 roll, and the veteran exclaimed that it was really dry, but
Activity and fragment lifecycle
Definition and properties of summation symbols
Oracle收回权限 & 创建角色
UI自动化测试如何走出困境?价值又如何体现?
php如何解决高并发问题
Qt:qss custom qheaderview instance
Software testing (test case) writing: vulgar, native and skillful
EPS电动转向系统分析
What is the salary level of 17k? Let's take a look at the whole interview process of post-95 Test Engineers
QT: QSS custom qtoolbutton instance
硬 货 | 一改测试步骤代码就全写?为什么不试试用 Yaml实现数据驱动?
反正切熵(Arctangent entropy):2022.7月最新SCI论文
Game test related tests a hero's skills (spring moves are asked more questions)