Maison >développement back-end >Golang >Questions d'entretien Go récemment publiées (Baidu et MiHoYo)

Questions d'entretien Go récemment publiées (Baidu et MiHoYo)

藏色散人
藏色散人avant
2021-09-25 16:38:569533parcourir

Les deux sociétés ont utilisé des entretiens en ligne. Il n'y a eu aucun enregistrement à l'époque. Maintenant, je me fie entièrement à mes propres souvenirs pour les revoir. go技术岗位,一家百度,一家米哈游,面试的情况也不太乐观,现在分享一下面试中问的问题吧。

两家都是采用线上面试的,当时没有录音,现在全靠自己的回忆来复盘一下了。

百度一面

百度的面试步骤分为计算机基础、go相关、mysql相关、redis相关、linux相关问题。还有一些发散性的问题。

基础相关

  • 算法,包括不限于红黑树、二叉树等等。
  • 数据结构,包括不限于链表、数组等。
  • tcpip相关的一些问题,比如三次握手、四次挥手、time_wait等等。
  • 浏览器输入地址,中间发生的过程,仔细的描述一下。(这个我感觉基本都会被问,哈哈哈)。

这一块的话,我回答的是稀碎,算法和数据结构我一个都没答上来,后面两个因为之前面试问到过,所以查过一些,回答的还算可以。

go相关

  • GC,(面GO必问题),GCstw时机,各个阶段是如何解决的。
  • gpm,(面GO必问题),这个必须要完全理解,抢占式调度是如何抢占的,怎么调度goroutine的,MP的数量问题。
  • 如何优雅的实现一个goroutine池(这个回答的稀碎)
  • 谈谈内存逃逸
  • 内存管理(这个也回答的稀碎)

mysql相关

  • mysql锁,分锁粒度和锁算法(间隙锁、记录锁,临键锁),以及锁算法在什么情况下会用到。大概意思就是如果精准能匹配到的话,用的就是记录锁,否则退化为间隙锁
  • mysql mvvc实现原理。
  • mysql 索引,索引建立时机,建立规则。
  • mysql 分库分表规则,有没有实践过?
  • mysql 索引的类型以及索引的数据结构
  • mysql 事务特性,以及隔离级别。

redis

  • redis的数据类型有哪些,使用场景说说。
  • redis zset的编码方式,应该有两种,在配置文件中配置的,默认128个元素是ziplist(压缩表),大于128则是skiplist
  • redis的内存淘汰策略
  • redis的持久化策略
  • redis分布式锁
  • redis分布式架构有哪些
  • 如果有一个排行榜,用zset,根据积分和时间来排序,积分高的,时间最近的拍前面,怎么实现?

linux

  • 你熟悉的有哪些命令
  • 如果线上流量暴增,全都打到一个upstream上了,怎么排查。
  • 如何在nginx的access log中查出请求前10的ip

总结

我面试结束后,一般都会问面试官,根据这次面试,针对我的技术上面,有什么好的建议或者意见,这位面试官给我的回答是:计算机基础比较薄弱,但是业务能力很强。这也是我目前的现状,哈哈,所以最近一直在看哈工大老师的计算机理论和操作系统。希望能勤能补拙吧。

米哈游一面

米哈游面试总体分为四个部分,go相关,mysql相关,redis相关,linux

Baidu d'un côté

Les étapes de l'entretien de Baidu sont divisées en bases informatiques, liées à go, liées à mysql, redis Problèmes liés à linux. Il existe également des problèmes divergents.
  • Algorithmes

liés à la base, y compris, mais sans s'y limiter, les arbres rouge-noir, les arbres binaires, etc.

🎜Structures de données, y compris, mais sans s'y limiter, les listes chaînées, les tableaux, etc. 🎜🎜Certains problèmes liés à tcp et ip, tels que la poignée de main à trois voies, la vague à quatre voies, time_wait, etc. 🎜🎜 Entrez l'adresse dans le navigateur et décrivez le processus en détail. (J’ai l’impression qu’on va me demander ça, hahaha). 🎜🎜🎜En ce qui concerne cette section, mes réponses étaient rares. Je n'ai pu répondre à aucun des algorithmes et des structures de données qui ont été posées lors d'entretiens auparavant, j'en ai donc vérifié certaines et y ai assez bien répondu. 🎜🎜🎜🎜lié à Go🎜🎜🎜GC, (une question obligatoire pour GO), stw timing dans GC , comment chaque étape est résolue. 🎜🎜gpm, (une question obligatoire pour GO), cela doit être parfaitement compris, comment la planification préemptive préempte et comment planifier goroutine , le problème de quantité de M et P. 🎜🎜Comment implémenter avec élégance un pool goroutine (cette réponse est clairsemée)🎜🎜Parlez de l'évasion de mémoire🎜🎜Gestion de la mémoire (cette réponse est également clairsemée)🎜🎜🎜🎜🎜lié à MySQL🎜🎜 🎜MySQL le verrouillage, la granularité du verrouillage et l'algorithme de verrouillage (verrouillage des espaces, verrouillage des enregistrements, verrouillage des touches), et dans quelles circonstances l'algorithme de verrouillage sera utilisé. La signification générale est que s'il peut être associé avec précision, des verrous d'enregistrement seront utilisés, sinon ils dégénéreront en verrous d'espacement🎜🎜principe d'implémentation de mysql mvvc. 🎜🎜index mysql, timing de création d'index, règles de création. 🎜🎜Règles de sous-base de données et de table MySQL, les avez-vous déjà mises en pratique ? 🎜🎜Type d'index mysql et structure des données d'index 🎜🎜Caractéristiques des transactions mysql et niveau d'isolement. 🎜🎜🎜🎜🎜redis🎜🎜🎜Quels sont les types de données de redis ? Parlons des scénarios d'utilisation. 🎜🎜Il devrait y avoir deux méthodes d'encodage pour redis zset. Configurées dans le fichier de configuration, les 128 éléments par défaut sont ziplist (table de compression), et s'ils sont supérieurs à 128, c'est la stratégie d'élimination de mémoire de 🎜🎜redis 🎜🎜redis. stratégie de persistance 🎜🎜verrouillage distribué redis🎜🎜Quelles sont les architectures distribuées redis ?🎜🎜S'il existe une liste de classement, utilisez zset pour trier en fonction des points et du temps. Ceux avec les points les plus élevés et ceux avec le temps le plus récent seront classés en premier. . Comment le mettre en œuvre ? 🎜🎜🎜🎜🎜linux🎜🎜🎜Quelles commandes connaissez-vous 🎜🎜Si le trafic en ligne augmente fortement et que tout va en amont, comment puis-je le résoudre ? 🎜🎜Comment trouver les 10 adresses IP les plus demandées dans le journal d'accès nginx🎜🎜🎜🎜🎜Résumé🎜🎜Après l'entretien, je demande généralement à l'intervieweur, sur la base de cet entretien, ce qui est bien dans ma technologie, les suggestions ou les opinions de l'intervieweur ? La réponse que j'ai reçue a été : la base informatique est relativement faible, mais la capacité commerciale est très forte. C'est aussi ma situation actuelle, haha, j'ai donc récemment lu la théorie informatique et les systèmes d'exploitation enseignés par des professeurs du Harbin Institute of Technology. J'espère que mon travail acharné pourra compenser mes lacunes. 🎜

🎜🎜Un côté de MiHoYo

🎜L'interview de MiHoYo est généralement divisée en quatre parties, liées à go, liées à mysql, redis code>Connexe, <code>linuxConnexe. 🎜🎜🎜🎜go Related🎜🎜🎜J'ai été confus par la première question. Le code est le suivant : 🎜🎜
...m := make(map[int]int, 10)for i := 1; i<= 10; i++ {
    m[i] = i}for k, v := range(m) {
    go func() {
        fmt.Println("k ->", k, "v ->", v)
    }()}...
🎜Demandez ce qui va se passer, pourquoi et comment le résoudre. N'utilisez simplement pas de fermetures directement pour utiliser des variables externes, cela peut être résolu en passant des paramètres. 🎜
  • Fuite de mémoire, dans quelles circonstances la mémoire sera-t-elle divulguée ?
  • Le principe sous-jacent de mise en œuvre du canal (en fait, cela signifie que demander à buf est la structure de données d'une liste chaînée circulaire)
  • defer, il faut y répondre avec attention, quand le report modifiera la valeur de retour. L'ordre de plusieurs reports.
  • La différence entre make et new
  • Que se passe-t-il lorsque le canal est fermé et que les données sont ensuite envoyées Que se passe-t-il lorsqu'un canal fermé est fermé ?
  • La carte est-elle sécurisée pour les threads ?
  • La différence entre les tableaux et les tranches.
  • GC
  • Modèle GPM
  • Différences entre les processus, les threads et les coroutines. (C'est très important)

Il y en a d'autres que j'ai oubliés.

redis

est presque comme Baidu.

mysql

est presque le même que Baidu.

linux

À peu près la même chose, j'ai donc demandé comment vérifier l'identifiant du processus en fonction du nom du processus

Résumé

Selon les commentaires de l'interview, MiHoYo a donné une mauvaise base Go. la capacité commerciale est forte. C'est peut-être la caractéristique de l'externalisation d'avant.

La deuxième face de MiHoYo

La deuxième face de MiHoYo pose principalement des questions sur les affaires et les algorithmes, et elle se compose principalement de trois parties.

  • Concernant les microservices, y compris l'enregistrement et la découverte des microservices, la surveillance des microservices, la limitation actuelle des microservices, etc., et comment démoniser les microservices, j'ai répondu au superviseur, mais je ne sais pas si c'est correct.
  • La réalisation d'affaires spécifiques, la réalisation de codes de remboursement, comment générer par lots des centaines de milliers ou des millions de codes de remboursement (j'ai répondu à cette question en utilisant l'algorithme du flocon de neige), sous haute concurrence, comment s'assurer qu'un code de remboursement peut être utilisé uniquement par Une seule personne peut l'utiliser une fois, et comment un code d'échange peut être utilisé par plusieurs personnes. (Il m'a fallu une demi-heure pour répondre à cette question. Parce que j'ai déjà fait des affaires connexes, je me sens un peu en confiance)
  • Trois questions sur l'algorithme.
    1. Écrivez une méthode pour résoudre : saisissez 4 nombres, affichez une valeur attendue par addition, soustraction, multiplication et division.
    2. Algorithme de largeur d'abord : comment afficher les valeurs de chaque couche.
    3. Problème d'étape, si vous voulez monter d'une étape, vous pouvez monter une étape à la fois, ou vous pouvez monter deux étapes à la fois Écrivez une méthode pour saisir le nombre d'étapes et afficher le nombre de façons de le faire. monter.

Recommandé : "tutoriel golang"

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer