前言
哈喽,大家好,我是
asong
。断更接近两个月了,这段时间我一直在准备面试,所以这篇文章就主要来说一说当前市场环境以及该如何准备面试; 我本人技术栈主要是Go语言,找的都是Golang开发的岗位,所以本文更适合相关技术栈的朋友们观看;
当前Go语言市场环境
当前互联网环境人尽皆知,不少公司都在降本增效,所以招人的公司并不多,除了宇宙条、砍一砍公司从未停止过招人,其他公司基本都停止了招聘,所以这个时候找工作真的难,如果有朋友想跳槽,我劝你最好冷静一下,骑驴找马最好。
我在找工作的时候主要是看上海、北京的机会,使用boss直聘投递简历,主要是看Golang岗位的职位,Go语言的岗位主要分为两大块:
- 业务开发
- 容器平台开发
众所周知云原生的一些代表产品k8s、prometheus、docker都是由Go语言开发的,所以市场上大多数岗位都是容器平台开发岗位,业务开发的岗位也有,不过一般都是小厂偏多,大厂使用Golang开发业务的就那么几个,主流开发语言还是Java,这个还是无可撼动的,虽然不多,但是机会还是有的,大家伙也不要担心,Go语言的市场会越来越好的,至少出来找工作还是有坑位的,能不能拿到就要看自己的实力了;
我本人之前的经历主要是使用Go语言开发业务,所以我本次投递的岗位也都是业务岗,我是想着冲击一下容器平台开发岗位,无奈自己真的不懂k8s,所以基本投递的简历都石沉大海了;
该如何准备面试
我也有两年多没有碰过面试了,所以刚开始准备面试是没有方向的,所以这时候我投递了几个小厂,寻思找找面试的感觉,顺便看看当前市场面试都问一下什么。好家伙,我立刻就收到了两个小公司的面试邀请,心想好好准备,总结经验,结果两个面试都在10分钟左右就结束了,两家公司都一样,面试官们什么也没问,上来第一句话就是:"我们面试开始吧,你先自我介绍一下",我:"balabalabala",面试官:"项目我们等下再过,我们先来做道题吧",长时间没有刷过题本身算法就比较弱,思考了好久都没有做出来,大概10分钟左右后,面试官说:"我没啥想问的了,你有什么想问的吗?",然后一场面试没结束,总结经验就是TMD算法题还是重中之重呀,算法题做不出来,会啥都没用呀!!!
算法题
前面说了那么多废话,就是为了引出找工作第一个要准备的就是算法题,现在的市场环境就是这样,不论大小公司,算法题是必考了,逃不掉的,甚至现在很多小公司都是上来先是算法题,做出来才会问一问八股文,否则你准备再多的八股文也是没用,算法题以我个人的角度来说,有些算法题是有必要掌握的,比如:链表、二叉树、排序、二分查找、栈、字符串,这些属于基本的数据结构,确实要熟记于心,而有一些算法题,就是在考数学能力,有些都是些奥数知识,我觉得在面试中考察不大,这种题就上升到智力了,一般很难在面试中想出来,反正我这个水平很菜,基本是写不出来;我只是吐槽一下,但是还是要准备的,算法题这个东西就是要多刷,接下来介绍几个学习算法的几个方式
- 如果是临时抱佛脚,就刷leetcode hot100题
- 如果是长期学习,leetcode就按照题型分批去练习吧,多写多总结
- 极客时间有一个《数据结构与算法之美》,这个我看过一便,写的是真不错,跟着学一遍肯定有所收获
- labuladong的算法小抄,大家也可以看一看这个对于算法入们来说是够用了
我主要就是这样学习算法的,如果你有更好的推荐欢迎评论区分享~
Go八股文
既然是面试Go语言的岗位,在简历上只要写的是熟悉、精通,都逃不掉Go八股文,我在面试中被问的最多的几个Go语言八股文如下:
- GMP模型是什么?为什么要有P?
- Go语言调度器的发展史说一下?
- Go语言的逃逸分析和GC你了解吗?展开说一下GC的过程
- Goroutine是什么?能介绍一下他吗?
- defer是啥?怎么用的,底层原理是啥?
- map和sync.map是有什么区别?看过源码吗,可以介绍一下吗?
- 切片的底层实现说一下?
- Go语言的互斥锁是怎么实现的?读写锁呢?
- 项目中如果出现内存泄漏你是怎么排查的?
这几个我都是高频的面试考点
存储&中间件八股文
存储:mysql、redis、memory、elasticsearch
中间件:kafka、rabbitmq、延迟队列
这几个应该是后端开发同学必须要掌握的,尤其是mysql、redis,这两个可是老八股文了,这块没有多说的,如果有朋友对这些还不知道怎么准备也可以从我的Go语言八股文大全中获取;
mysql知识的学习推荐文章:极客时间:mysql45讲
redis知识的学习推荐书籍:redis的设计与实现,这是一本讲解底层实现的书,文章篇幅不多,3天时间差不多就可以读完,只要知识点你都记住了,应对面试应该是没啥问题
微服务
现在很多公司都是微服务化的了,所以微服务相关的八股文也要整理,有些同学可能会有疑问,这块不应该是基础架构的同事来管理吗,做业务的为啥也要知道这些?道理虽然是这样,但是作为业务开发也需要了解一下这方面的知识,才能更好的排查问题;
微服务相关的主要知识点:
服务拆分:划分规则、划分策略等
服务设计模式:链式设计模式、聚合器设计模式、基于时间的异步模式等
服务间通信:一对一、一对多、微服务API
微服务治理:服务注册与发现、负载均衡、配置中心、容错机制、安全、链路追踪、熔断、限流、服务优雅上线等
微服务框架:go-zero、dubbo-go、go-micro、go-kit等
我在面试中被问的最多的就是:服务注册与发现、负载均衡、链路追踪、熔断、限流,这几个知识点是高频考点,尤其是负载均衡和限流,基本每场面试都问,建议大家把这一块好好看一下;
网络与操作系统
计算机网络与操作系统,这块应该是基础课,但是能真正掌握这块的同学是少之又少,所以我放到了最后,如果你是面资深的岗位,那么你就要注意了,除了项目,这块的知识会被挖的很深,所以这块绝不是简单的背八股文就能解决的,建议大家没事还是把大学时候的书籍拿出来,在学习一遍;
这里推荐一本书:深入Linux网络,张彦飞大佬写的,我读这本书收获很大,里面的一些知识点是可以应付面试的;
这块我自己的掌握的也不是很好,给不了太多建议,不过通过这次面试,我觉得要真正理解网络与操作系统不应该只停留在原理阶段,还是要动手实践,比如要理解TCP的三次握手,抓个包比看任何文章都要好,这块我自己后续也会通过实践的方式重新学习一边网络和操作系统,后续会有精彩文章出现,敬请期待;
设计题
现在的公司一般主管面的时候都会问几个设计题,考察一下面试者对技术的掌握性,我在面试中就被了很多设计题,高频的几个面试题如下:
- 给你一个100G的日志文件,你现在只有1G的内存,找出访问次数前10的IP;
- zset 如何实现解题排行榜,排序解题数最多,相同解题数的时候,时间最少的在前面
- 一个直播间会在一瞬间有千万流量进来,如何保证稳定性?如何维护直播间的排行榜保证VIP用户能实时看到自己送礼物的数量?
- 搜索框下拉词如何设计?
这几道题都是我在面试中遇到的真题,系统设计题主要考察面试者的知识储备,这块没有办法整理全所有的面试题,重要的是思想,多总结、多思考;
项目
每个人的项目都不一样,只能自己准备,不过这个确是重中之重,一般技术面上来都是先聊一聊项目的,这个时候就考察面试者对整个项目的理解程度了,面试官的常考问题:
- 说一下你认为你做的最有成就感的一个项目
- 说一下你认为你做的最有挑战性的一个项目,然后你是怎么解决的
其实通过这两个考点就能知道面试者对整个项目的理解程度,比如你是做电商项目的,最好把下单链路都要了解透,这里提供几个整理思路:
- 订单系统是核心系统,你是保证订单系统的稳定性的?
- 下单时你们是怎么保证优惠库存扣减成功的?
- 你们的订单系统存储模型是怎么设计的?为什么这么设计?
- 你们系统的秒杀业务是怎么设计的?怎么保证不会超卖并且同时保证系统的稳定;
我在整理项目的时候就是按照这个思路整理,应该面试官应该是没啥问题了;
技术深度
这个其实是一个空话,不过在面试中也会被问到,总结其实就是两个问题:
- 你对你下一份工作有什么计划?
- 你对未来有什么计划?技术成长有什么计划?
这两个其实我被问了很多次,我每次的答案都不一样,哈哈哈,当然,这是因为面试的公司不同,我说的答案就不同,后来我静下来思考了一下这个问题,我做程序员这个行业的目的是什么?
我自己是喜欢编程的,我记得在填写高考志愿的时候就暗暗下定决心:我一定要当一个名黑客,哈哈哈,后来上了大学才知道,黑客是黑客,程序员是程序员,我本身是喜欢编程的,所以加入了这个行业,但是加入到这个行业,我就懒了,除了学习Go语言源码的知识,我很少接触其他知识,所以广度不够,所以接下来我的目前是提升广度,我本身对容器编排这块感兴趣,所以我在之后会学习k8s,接下来应该会着重分享k8s学习心得;
这个一般在面试中的占比不是很大,但是对面试者自身很重要,还是建议大家没事多问一些为什么、多看一些开源项目,多沉淀、多积累,愿大家都能成为技术大咖;
分享Go八股文大全
我在面试过程中,整合了一些Go语言八股文大全,麻雀虽小,但是五脏俱全,这份文档还是缺少一些东西,我会定期维护的,先分享第一个版本给大家,后续会不断迭代的;
总结
本文只是根绝个人这段时间找工作总结的一份面试准备指南,并不是适用所有人,大家可以取其精华,预祝大家都能找到不错的工作,加油,兄弟们!!!