背景:

  • 面试的公司是二线及以下。不包括阿里,头条,快手,美团,拼多多
  • 面试的职位是Go后端研发

    面试前的准备建议:

  • 简历一定要好好写,面试态度要好(大佬例外)

  • 做过的项目说的清楚。遇到过哪些问题,如何排查的,如何解决的。项目的难点,优点,缺点,未来如何改进。
  • 要有一点架构思维,了解互联网常见架构,了解微服务,如何处理高并发,高可用
  • 终面的时候,如果是产品大佬,那么你的回答得有高度,得从产品角度考虑问题。如果是技术大佬,你的回答最好有点前沿的技术(吹水嘛,你懂的)。
  • 要刷题,算法题要写的出来,大厂比较看重。另外大厂喜欢问一下模糊的问题,考察你的广度和对问题认识的深度。
  • 下面这些全是基础,我理解面试的时候其实占比不重,只有没项目问的时候,才问这些。

    给年轻人的建议:

  • 算不上什么建议,我自己没做好,算是教训吧。

  • 不存在什么35岁的问题,资深的码农总是稀缺的。勇敢的踏出那一步,加油干。
  • 如果想做一个真正的码农,把基础打好,操作系统,计算机网络,计算机组成原理,数据结构和算法等。就算用不到,至少你会是个自信的、心满意足的码农。
  • 多说一句,码农不分什么科班,培训班,不在意学历,只要有基本的逻辑就可以干,又不是造火箭。
  • 把代码写好,这一条满足了,你就是个优秀的码农。
  • 最好是跟着工作项目学习,这样才能沉淀成你自己的。
  • 工作中多做,多想,多总结,多参与上下游的业务,这样你会学到更多,会对整体的业务流程,整体的架构有更多了解。懂得多了,自然机会也就多了,会被重用,形成正反馈。往俗了说对面试有好处,其实可以助你成为架构师,业务专家。
  • 打好基础,做几个项目,然后尽早确立你的方向。不管是业务的,还是技术的,成为某方面的专家,这才是你的铁饭碗。中途变更的话成本很高,到时候没法跟年轻人竞争,O(∩_∩)O哈哈~
  • 脚踏实地,抬头望天。学习一些新东西,新的东西没那么内卷,机会多。
  • 有时间的话,参与一些开源项目,参与一些社区,看看别人在做什么,培养一些兴趣爱好,交些朋友,这样可以拓宽你的眼界,机会也会多些,关键时刻还能得到别人的指点和帮助,世界上还是好人多。
  • 锻炼你的表达能力,面试有时候是靠说的。
  • 多看英文资料,英文书籍,练口语,这样如果你不想996的话,还有别的选择。
  • 以上都是我做的不好的,现在的年轻人很厉害,加油!

    面试题总结

    redis常见问题

    redis的数据类型有哪几种,你们用了哪几种,是怎么用的
    redis string类型的底层数据结构是怎么样的?
    redis为什么快
    redis是怎么实现原子性的(腾讯云问的)
    redis为什么要用单线程,最新的redis 6.0用了多线程,是怎么实现的,你了解吗?
    redis的跳表了解吗,数据结构是怎么样的,查询的时间复杂度是多少
    你们的redis是哨兵模式还是集群模式,具体是怎么配置的,了解吗?
    redis的分布式锁用过吗,怎么用的?
    redis单实例的QPS是多少,有测过吗?最新的6.0 QPS多少知道吗?
    redis的大 key 多大算大?单个redis实例建议多大内存?
    写时复制了解吗,在redis哪里用到了?在计算机的哪些场景或者算法里有用到?(腾讯云问的)
    redis的网卡如果被打爆了,怎么办?redis缓存和本地缓存是怎么配合使用的,数据的一致性是如何解决的?(好未来架构师问的)

    mysql

    你们mysql引擎用的什么?mysql innodb的索引是怎么实现的?为什么用B+树,优点是什么,与B树的区别是什么?
    B+树索引的最底层单元是什么?什么决定了B+树的高度?B+树的叶子节点是单向链表还是双向链表?
    怎么加索引,索引什么情况下失效,联合索引什么时候失效,覆盖索引了解吗?
    为什么不用uuid做主键,影响的写入性能还是读取性能?如果业务上能保证唯一性,那么还需要建唯一索引吗?会影响写入性能吗?
    mysql的隔离级别有几种,默认的隔离级别是什么,互联网常用的隔离级别是什么?
    ACID了解吗,mysql是用什么机制保证的,redo log和undo log说一下
    MVCC是什么,是如何实现的,算法说一下?
    幻读是什么意思?mysql是怎么处理幻读的?间隙锁了解吗?唯一索引有间隙锁吗?
    锁分哪几种,行锁是锁在哪里的?
    mysql 主从同步的过程是什么样的
    mysql的高可用是怎么做的
    慢查询怎么处理?explain的type有几种类型,你常见的有哪几种?
    你们的mysql数据量有多大,如何分库分表,分库分表以后如何查询,如何做分布式事务
    怎么优化mysql
    了解TiDB吗,TiDB是如何实现的

    kafka

    事务消息了解吗,rocketmq的事务消息是怎么实现的?
    kafka是如何保证不丢消息的
    kafka为什么快? 零拷贝说一下,零拷贝有几种实现?
    kafka的IR和高水位是什么意思,说一下
    kafka主要解决什么问题,你们项目里是怎么用的
    kafka如何保证消息的有序性
    kafka如果消息堆积了如何处理

    项目:

    介绍一下你们的项目
    你们项目的服务对象是谁,解决了他们的什么问题
    你们的并发量多大,高并发是如何解决的
    画一下你们项目的架构图
    你们项目里的难点,优点,有什么可以改进的地方

    管理:

    你是怎么控制项目进度的
    你觉得怎么定义工作的成功

    网络:

    TCP三次握手,四次挥手说一下。为什么需要三次握手,最后一次如果没有行不行,会有什么问题?TIME_WAIT的作用是什么?2MSL是多长?线上大量的close_wait和time_wait该如何解决?
    http2.0的优点说一下。了解QUIC吗?怎么实现的?
    https的握手过程说一下。证书是如何验证的?为什么不用非对称加密通信?
    浏览器输入一个url到返回,整个过程说一下,都用到了哪些协议?浏览器的渲染过程了解吗?
    一台服务器最多可以建立多少个TCP链接,为什么?

    Linux:

    常用的命令有哪些
    怎么查看端口占用情况,怎么查看进程打开了哪些文件
    如何查看内存,如何查看磁盘,du是什么意思
    linux的文件系统了解吗,inode了解吗
    线上服务器问题如何排查。cpu loader average什么意思,cpu利用率什么意思

    Nginx:

    location的优先级是什么样的

    kubernetes:

    kubernetes有哪些组件
    kubernetes调度一个pod的整个流程是怎么样的
    docker的实现原理说一下

    微服务:

    微服务的优点是什么
    微服务的服务拆分你们是怎么做的
    微服务的服务治理你们是怎么做的,都包括哪些模块
    RPC具体是怎么实现的,有哪些组件可以说一下吗?RPC的连接池是怎么实现的,数据结构是什么样的,链接如何保活(腾讯云)

    Go:

    协程和线程的区别
    goroutine初始栈大小,上下文如何切换,存在哪里
    GMP说一下,P有多少个,G有多少个,M有多少个。系统调用的时候M会如何,网络IO的时候M会怎样。
    Go的GC说一下,扫描从哪里发起?
    Go的内存分配说一下
    Go有哪些坑?for range为什么会有坑?
    Go的map是如何实现的,是并发安全的吗?sync.map是如何实现的?
    CAS知道吗,在Go的哪些地方用到了?
    sync.pool是如何实现的
    channel的优点是什么,如何实现的(腾讯云)
    channel的使用场景。close channel的时候发生了什么?
    Go select是怎么用的,具体如何实现的?
    如果我希望主协程通知并且等待子协程关闭,应该如何做?context了解吗,怎么用的,如何实现的?
    写一个生产者消费者模型吧
    Gin的中间件是如何实现的
    Gin的一次请求整个过程是如何调用的
    Gin的基数树知道吗,说一下
    Gin请求里的request buffer可以读几次(美餐)
    goroutine的泄露如何排查?pprof了解吗,说一下

    算法题:

    反转单链表
    判断链表里是否有环
    八皇后问题
    找最大的K个数,有O(N)的算法吗?
    最大回文子串
    最近的平方根。比如10的结果是3
    把两个链表连起来。比如AB两个链表,顺序是A1 B1 A2 B2 A3 B3…