当前位置:网站首页>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 .
边栏推荐
猜你喜欢

Communication software development and Application

Activity and fragment lifecycle

T5 的尝试

封装一个koa分布式锁中间件来解决幂等或重复请求的问题

Cause: org. apache. ibatis. builder. Builderexception: error parsing SQL mapper configuration problem analysis

Overview of testing theory

Crawl with requests

嵌入式軟件測試怎麼實現自動化測試?

Comment réaliser des tests automatisés pour les tests logiciels embarqués?

Solve the problem that pycharm Chinese input method does not follow
随机推荐
测试理论概述
A simple method of adding dividing lines in recyclerview
Qt:qss custom qstatusbar instance
【obs】obs的ini格式的ConfigFile
我对测试工作的一些认识(资深测试人员总结)
解决undefined reference to `__aeabi_uidivmod‘和undefined reference to `__aeabi_uidiv‘错误
Internet Socket (非)阻塞write/read n个字节
浅析-JMM内存模型
做软件测试三年,薪资不到20K,今天,我提出了辞职…
Solve the problem that pycharm Chinese input method does not follow
Comment réaliser des tests automatisés pour les tests logiciels embarqués?
What kind of living condition is a tester with a monthly salary of more than 10000?
线性表的双链表
Programming examples of stm32f1 and stm32subeide -tm1637 drives 4-bit 7-segment nixie tubes
Solution: jupyter notebook does not pop up the default browser
触摸与屏幕自动旋转调试
Word line and bit line
历经一个月,终于拿到金蝶Offer!分享一下四面面经+复习资料
QT: QSS custom qsplitter instance
文件上传下载测试点