2022年从PHP到Golang的那些事,还有面经
转眼就半年过去了,今年上半年,经历了重大的变化,几乎是把技能点全洗了重新加点的程度了。
- 从PHP开发到Golang开发
- 从广州搬到珠海
- 从互联网到物联网
在经历这一切之前,我是完全没有想到。很多事情都是在机缘巧合之下撞到了一起,最终起了连锁反应。
从PHP开发到Golang开发。回我的GitHub看了一下第一个Golang代码的提交,是在2021年5月份。那么Golang语法学习,应该是2021年年初就开始了。
为什么突然去学Golang,其过程经历了4个阶段:
- 上班天天写PHP业务代码写闷了,想试一下搞点别的。
- 因为自己非科班出生,对静态语言的接触比较少,也该多从其他语言身上摄取经验。
- Golang 很火,而且很多PHP开发都转Golang,要不我也试试?
- Golang 不单止能做 web ,要不要尝试一下其他领域?
带着这样的想法,开始了 Golang 的学习,自己在业余开发过程也拿 Go 做了几个小工具,自我感觉良好。
但是到此为止,我还是把Go当作业余的修炼,从来没有想过当成工作。
一直到2022年初,🐷宝成功拿到了珠海金山的offer,薪资福利还不错,我意识到抉择的时刻来临了。趁年纪轻,出去多长点见识也应该。
离开广州,走出舒适圈已成定局。 既然这样,要不尝试一下做Go开发?
就这样,从2022年初开始在保持日常高强度PHP开发的同时,开始了以Go开发工程师为目标的学习。 一边学习和模仿别人的项目,一边恶补Go语言的底层原理和相关知识。
大概学习了2个多月,从3月底开始正式尝试在广州内寻求面试,大概面了5家左右,其中1家给发了offer,是一家游戏公司内做数据中台微服务。 但是这家公司没有给我涨薪,给出的薪资是当前原价。
我心想,半路出家还算不错,能找到Go开发工作就很不错了,至少自信心上来了一点,再努力一下,或者优化一下简历和面试,一定有机会。
四月初,正式提了离职,是裸辞。在boss直聘问了几家珠海的企业,都只能线下面试,不方便。而且干了快4年,裸辞休息十几二十天,未尝不可。
离开公司的过程还算波折,因为公司是5月初发年终奖,所以我面临的是拿了年终奖就跑路的状态。 这过程我的领导帮了我很多,他想方设法帮助我一分不少的拿到了年终奖,我很感动,也很感谢他。
五月中,正式离开了公司,搬离广州之后开始疯狂休息和持续进修。然后五月底,正式开始在珠海找工作。
难找是真的, Go 开发的岗位不多,珠海企业要Java和PHP和C++的很多。当时我心想,实在找不到Go的工作,就回去干PHP,混口饭吃总没问题,至少不会饿死。
职场也需要运气,投简历投了一周,换了3个求职APP,最终拿到了2个面试。
一家是做自动零售机器,类似路边的自动贩卖机,但是他们高级一点,整点花里胡哨。
另一家,就是现在我司了,做电力安全相关。
收到面试邀请之后,我就感觉怪了,非常怪, 从未设想过的行业,我还以为会继续做互联网,现在全变了。物联网是一点也不了解!
面经会在下面再汇总,最终结果就是拿到了offer,而且是秒拿,下午面试,结束之后2个小时就打电话过来录用。工资没有涨,还是原价,但是福利比以前多, 五险一金交多了,而且还管饭。我感觉太急了,说端午节之后第一天给答复。
但后面心想,面试邀请都没几个,现在机会就摆在眼前,虽然不是做互联网,但是尝试一下会有什么错呢? 所以端午节前就答应了,端午节后入职,端午节就纯当最后放假了。
就这样,6月9号入职,到目前快一个月了,还有很多不习惯、不适应、不明白的地方,仍需努力。
至于工作体验的对比,等工作时间长一点之后再写一写,现在先写面经,怕再过一段时间就忘了
面经
在广州基本都会有线上的一面,问的问题基本都是抓简历上的项目经历来问。然后二面才会问偏技术的问题。
在珠海就面了2家,都是直接技术面。
具体问题答案,我认为我自己也半桶水,所以就不写出来了,不要误人子弟。
其中有一位面试官跟我说了一番话,我印象深刻。
像你这种半路出家的,没有上过正经计算机课程,我见过不少,也有做得很好的。
当处于迷茫的时期,更应该抓点基础,不要纠结业务层面的东西,应该自己专挑一个方向,往深一点钻,往底层钻,就钻一个就好,不要给自己压力。
要记住自己的方向,是成为软件工程师,不要成为PHP工程师、Go工程师。
送给大家,与君共勉。
先说跟go没什么关系的:
- 后台任务系统怎么设计? 就是后台发布任务、任务定时执行、任务执行追踪、各种日志等。 数据表大概怎么样,要用到什么技术栈工具栈。
- redis 删除策略问题,就是定时删除/惰性删除/定期删除,各个原理和优缺点
- redis有序集合的排序实现是怎么样的? 我背的只知道用了ziplist和skiplist,具体原理还真不知道。
- redis的集群是怎么样的,主从模式、哨兵模式和cluster模式能不能分别介绍一下
- redis里的事务是怎么样的,有什么需要注意的
- 在实际业务缓存中,怎么应对缓存击穿、雪崩等问题?
- 在 im 中 socket 消息的先后送达顺序是怎么保证的,该怎么解决。 这题我真没有回答的很好,我在建立里写有做过IM系统,确实有做,但是做完之后没多久就弃用了,其实经验不多,这种大家在简历上还是要避免,除非自己有信心答上来。
- 平常abtest是怎么做的,怎么分析abtest的结果, 最终应该怎么评估用a还是b。这个是我自己简历上写了abtest,按照实际情况回答了,感觉是没有答得很好
- 生产环境中,像resque和kafka等系统突发堵塞问题,现场该怎么分析解决?
- im消息丢失的问题该怎么处理? 如果重发的话该怎么设计? ack应答机制该怎么设计? im问的是真多,虽然有提前准备,但是感觉没有回答得很好。 后面我就把im相关经历删了,换成了别的。
- socket中链接池管理是怎么样的, 我用php的Gateway worker,只知道有register中心维护,具体不知道,框架层面内容没有太多了解。都怪我写的im开发经历,其实真不懂。
- 应用服务器的可伸缩设计是怎么样的? 其实就是负载均衡、主从集群、分片集群那些东西
- mapreduce有没有了解,mapreduce的经典应用单词分析能不能介绍一下。 这个是别人笔试题里的,我只大概了解mapreduce的核心解决问题, 其他不太懂,没有太能回答上来。
- linux中最大连接数问题怎么排查,怎么调优。 这个也是别人面试题里的, 没有回答上来。
- mysql中的聚簇索引和非聚簇索引,分别介绍一下
- mysql的 myisam 和 innodb 有什么差别给介绍一下
- mysql中innodb的索引是怎么样的,跟myisam对比有什么优势?
- 对于api,突发流量该怎么应对,有什么方案
- 千万级数据量的数据表,该怎么优化。 这个题很宽泛,可以从业务层面切入,或者数据表结构分库分表什么的, 回答的自由度很高。
- kafka里消息是怎么保证送达的? 怎么才能保证消息送达顺序正常?
- kafka内部中producer和broker是怎么保证消息送达的?
再说点跟go有关系的
- 内存回收机制给介绍一下,就是三色法那一套给背出来,STW回收的几个阶段给背出来。
- GMP模型给介绍一番, 这个必背了,对答如流。
- make和new的区别
- 数组和切片的区别
- defer的执行顺序, 还有recover在什么情况不会捕捉到panic
- 包import的顺序
- context有什么应用场景,平常该怎么用
- channel在未初始化和已关闭的情况下, 分别进行收发消息,会发生什么事情
- map的并发安全问题,要怎么解决
- map的遍历问题,为什么不是顺序的
- 引用类型中slice map如果作为参数传递,有什么要注意的
- 了解过多少golang中的框架,能不能简单介绍一下优缺点。
- gozero中的开发流程是怎么样的。 我在简历写了主要用gozero。
- golang中函数调用栈是怎么样的,能不能画出来内存分布图。 这个我当时完全答不上来,后面恶补了一下相关知识才一知半解,还有待学习加强。
- golang中的函数参数传递时,会发生什么事情。 就把值传递那一套介绍一下。
算法相关的 ,问得很少,有时间的话就自己简单刷刷剑指offer,反正我没怎么刷....就会那几个。
- 写一下快速排序的代码
- 写一下冒泡排序的代码
有一家公司问的特别离谱,我是完全回答不上来。那场面试是完全凉透的状态。
- go-cache有没有用过,能不能介绍一下他们底层, 能不能介绍一下他们benchmark结果的瓶颈在哪里。
- zap是凭借什么原因做到如此高效的,能不能简单介绍一下其底层设计。
因为我在简历里写的PHP转Go,我还以为会有问PHP的,稍微准备了一点点但是没有很多,结果完全没有问PHP相关。这个可能跟面试官有关。
大概就差不多这样, 后面如果有想起来会再做补充。
希望能帮助到更多的开发者一起成长。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。