Ce qui suit est une question d'entretien de Tencent en 2019. Je la partage avec vous, j'espère qu'elle vous sera utile.
(Tutoriel vidéo recommandé : Vidéo d'enseignement Java)
- Choisissez un projet dans votre CV et dites-nous quels défis majeurs vous avez rencontrés ? Et vos idées pour résoudre le problème ?
- Un morceau de code doit exécuter plusieurs commandes redis. Comment garantir l'atomicité sans verrouillage ?
Utilisez le script Lua : https://segmentfault.com/a/1190000009811453
- Parlez de structures de données, telles que les arbres binaires et les arbres rouges ?
Comprendre cet article : https://juejin.im/post/5a27c6946fb9a04509096248
- Parlez-moi des différences et des scénarios d'utilisation de B-tree et B+tree ?
- B-tree :
B-tree est un arbre construit en tirant parti des caractéristiques des blocs de disque. Chaque bloc de disque possède un nœud et chaque nœud contient de nombreuses clés. En augmentant le nombre de mots-clés de nœuds dans l'arbre, le niveau
de l'arbre est réduit par rapport à l'arbre binaire d'origine, ce qui réduit le nombre et la complexité des recherches de données.
B-tree utilise intelligemment le principe de lecture anticipée du disque pour définir la taille d'un nœud égale à une page (chaque page fait 4K), de sorte que chaque nœud n'a besoin que d'une seule E/S pour terminer
Entièrement chargé .
Les données B-tree peuvent être stockées dans n'importe quel nœud.
- B+tree :
B+tree est une variante de B-tree. Les données B+tree ne sont stockées que dans les nœuds feuilles. De cette façon, sur la base du B-tree, chaque nœud stocke plus de mots-clés et le niveau de l'arborescence
est moindre, donc l'interrogation des données est plus rapide. Tous les pointeurs de mots-clés existent dans les nœuds feuilles, donc le nombre de recherches par fois est Le. pareil, donc la vitesse de requête est plus stable ;
- Quelle version de MySQL et quel moteur de stockage utilise B+tree pour l'indexation ? Pourquoi ne pas utiliser Red Tree ?
Vous devez d'abord comprendre les principes de mise en œuvre de B+tree et red⿊tree. B+tree a des pointeurs d’accès séquentiels, que les arbres rouges n’ont pas.
- Parlez des différences entre les middlewares de messages courants ?
- RabbitMQ est le premier choix des petites et moyennes entreprises : interface de gestion simple et haute simultanéité.
- Plus de recommandations de questions d'entretien connexes : questions et réponses d'entretien Java
- Les grandes entreprises peuvent choisir RocketMQ : il offre davantage de concurrence et peut personnaliser le développement de RocketMQ.
- Pour la fonction de collecte de journaux, kafka est le premier choix, spécialement préparé pour le big data.
- Comment Rabbitmq assure-t-il la fiabilité des messages ?
Détails "⾯Question Bank/rabbitmq"
- Principe de découverte du service Springcloud ?
a. Envoyez un contrôle cardiaque toutes les 30 secondes pour renouveler le bail. Si le client ne peut pas renouveler le bail plusieurs fois, il sera supprimé du centre d'enregistrement du serveur dans les 90 secondes.
a. Les informations d'enregistrement et les mises à jour seront copiées sur d'autres nœuds Eureka. Les clients de n'importe quelle région peuvent trouver les informations du centre d'enregistrement toutes les 30 secondes pour localiser leurs services et passer des appels à distance.
b. Le client peut également mettre en cache certaines informations d'instance de service, donc même si Eureka échoue, le client peut toujours localiser l'adresse du service.
- Présenter les différents composants de springcloud ? En plus d'Eureka, que peut-on utiliser d'autre pour le centre d'inscription de Springcloud ?
Principe de fonctionnement de springcloud
Fonctionnalités ActiveMQ RabbitMQ RocketMQ kafka
Langage de développement java erlang java scala
Débit d'une seule machine Niveau 10 000 Niveau 10 000 Niveau 100 000
Ponctualité niveau ms us Niveau niveau ms Dans le niveau ms
Haute disponibilité (architecture maître-esclave) Élevée (architecture maître-esclave) Très élevée (architecture distribuée) Très élevée (architecture distribuée)
Caractéristiques fonctionnelles
Mature Le produit est utilisé dans de nombreuses entreprises ; a un meilleur support pour divers protocoles
Il est développé sur la base d'Erlang, il a donc de fortes capacités de concurrence, des performances extrêmement bonnes et une faible latence ; l'interface de gestion est relativement riche
MQ a des fonctions relativement complètes et une bonne évolutivité
Il ne prend en charge que les principales fonctions de MQ. Certaines fonctions telles que la requête de message et le traçage des messages ne sont pas fournies. Après tout, il est préparé pour le Big Data et doit être utilisé dans le domaine du Big Data.
springcloud est composé des composants de base suivants :
Eureka : lorsque chaque service démarre, Eureka Client enregistrera le service sur Eureka Server, et Eureka Client peut également extraire le registre d'Eureka Server à son tour, sachant ainsi où les autres les services sont
Ribbon : lorsqu'une requête est initiée entre des services, l'équilibrage de charge est effectué en fonction du Ribbon, et une machine est sélectionnée parmi plusieurs machines d'un service
Feign : mécanisme de proxy dynamique basé sur Feign, selon les annotations et la machine sélectionnée, divisez l'adresse URL de la demande et lancez la demande
Hystrix : la demande est initiée via le pool de threads de Hystrix. Différents services utilisent différents pools de threads, ce qui réalise l'isolation des différents appels de service et évite l'avalanche de service <.> Problèmes
Zuul : Si les terminaux front-end et mobiles doivent appeler le système back-end, ils doivent entrer via la passerelle Zuul, et la passerelle Zuul transmettra la demande au service correspondant
L'inscription le centre va bien. Utilisez Zookeeper.
Combien de méthodes de limitation existe-t-il actuellement pour les microservices ? - Spring Cloud Gateway : https://windmt.com/2018/05/09/spring-cloud-15-spring-cloud-gateway-ratelimiter/
En cas de limitation de courant, isolation du service peut encore est-ce nécessaire ? - https://www.javazhiyin.com/25964.html
Dubbo propose plusieurs types d'équilibrage de charge ? L'équilibrage de charge est-il côté serveur ou côté client ? - L'équilibrage de charge Dubbo se fait côté client. Dubbo dispose de 4 stratégies d'équilibrage de charge intégrées :
a RandomLoadBalance : équilibrage de charge aléatoire. Choisissez-en un au hasard. Il s'agit de la stratégie d'équilibrage de charge par défaut de Dubbo.
b. RoundRobinLoadBalance : équilibrage de charge d'interrogation. Sondage pour en sélectionner un.
c. LeastActiveLoadBalance : le nombre minimum d'appels actifs, aléatoire avec le même nombre d'appels actifs. Le nombre actif fait référence à la différence entre les comptes avant et après l'appel. Laissez le fournisseur lent recevoir moins de demandes,
car plus le fournisseur est lent, plus la différence de décomptes avant et après l'appel sera effectuée.
d. ConsistentHashLoadBalance : équilibrage cohérent de la charge de hachage. Les requêtes avec les mêmes paramètres atterrissent toujours sur la même machine.
- Comment implémenter le verrouillage distribué Redis ? Quels sont les problèmes qui nécessitent une attention particulière ?
Découvrez cet article : https://juejin.im/post/5bbb0d8df265da0abd3533a5
- Parlez-moi du code source que vous avez lu ? Quels modèles de conception ou points forts de conception sont utilisés ?
Pour une analyse spécifique, vous devez lire certains codes sources, tels que le code source Spring, avant l'entretien.
- Comment implémenter aop ? Où aop est-il utilisé dans le projet ?
Master : https://juejin.im/post/5bf4fc84f265da611b57f906
- Quel est le rôle du post-processeur ?
BeanPostProcessor, le post-processeur du bean au Spring : https://www.jianshu.com/p/f80b77d65d39
- Spring bean scope, quand utiliser le scope de requête.
Lecture détaillée : https://blog.csdn.net/icarus_wang/article/details/51586776
- Dites-moi le résultat de cette question ?
1 package com.giveu.web;
2
3 public class VolatileTest {
4 public static volatile int race = 0;
5
6 public static void increase() {
7 race++;
8 }
9
10 private static final int THREADS_COUNT = 10;
11
12 public static void main(String[] args) {
13 Thread[] threads = new Thread[THREADS_COUNT];
14 for (int i = 0; i < THREADS_COUNT; i++) {
15 threads[i] = new Thread(new Runnable() {
16 @Override
17 public void run() {
18 for (int i = 0; i < 10000; i++) {
19 increase();
20 }
21 }
22 });
23 threads[i].start();
24 }
25 while (Thread.activeCount() > 1) {
26 Thread.yield();
27 }
28 System.out.println(race);
29 }
30
Copier après la connexion
Le programme ne se termine pas et il n'y a pas d'impression.
Recommandations associées : Tutoriel d'introduction à Java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!