转眼就半年过去了,今年上半年,经历了重大的变化,几乎是把技能点全洗了重新加点的程度了。

  • 从PHP开发到Golang开发
  • 从广州搬到珠海
  • 从互联网到物联网

在经历这一切之前,我是完全没有想到。很多事情都是在机缘巧合之下撞到了一起,最终起了连锁反应。


从PHP开发到Golang开发。回我的GitHub看了一下第一个Golang代码的提交,是在2021年5月份。那么Golang语法学习,应该是2021年年初就开始了。

为什么突然去学Golang,其过程经历了4个阶段:

  1. 上班天天写PHP业务代码写闷了,想试一下搞点别的。
  2. 因为自己非科班出生,对静态语言的接触比较少,也该多从其他语言身上摄取经验。
  3. Golang 很火,而且很多PHP开发都转Golang,要不我也试试?
  4. 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相关。这个可能跟面试官有关。

大概就差不多这样, 后面如果有想起来会再做补充。

希望能帮助到更多的开发者一起成长。

文章目录