内卷还是躺平?年薪百万的焦虑VS年假充足的平静:我在大厂和外企的日子

本人之前在字节iOS客户端实习,后面转后端开发,目前在一个不知名小外企上班

一、工作感受

之前也和依旧在大厂工作的朋友聊过,结合自己在大厂的工作体验,总结下来就是

  • 平时迭代开发非常忙,一个迭代差不多两三周或者一个月,当前迭代的活儿还没干完,下个迭代的活儿就给你分好了,节奏紧,经常需要跨团队合作,工作压力很大。

  • 我那时候是纯业务开发,写代码主要还是用if语句和for循环,用不上什么算法,项目的主要时间花在设计评审、业务理解以及各方沟通协调上,实际研发写代码的时间占比不高。

  • 在做一个较大的需求前,要先做技术评审。类似答辩那种,先自己拟订一个设计方案,然后拉会议室请组内大佬过来,讲出你的方案,让大佬们提意见。这个环节是真能学到东西的,每人每个季度至少做一次技术评审。

目前在一家日企上班,工作一年下来自己的感受就是

  • 在项目上线交付的时候比较忙,紧急时可以调休加班,平时基本没有什么工作或者特别少,自己可以做一些自己想做的事,学一些自己想学的技术。
  • 可以 remote 也可以去公司上班,公司中很多人都是居家办公的,可以减少上下班通勤时间以及房租等生活压力。我目前基本上一周去公司三四次,遇到下雨天基本上去公司就咕咕咕了(毕竟对于我来说去公司的工作效率比在家高多了。
  • 一个项目比如说后端开发只有3-5人左右,交流起来比较方便,不像大厂一样修改别人的地方要让一帮人来开会。
  • 因为人少以及项目也比较小,所以我们 Code Review 和对代码测试覆盖率要求比较高,通常 review 的时候比较细致,从别人的写法和别人的评论中能学到很多很好的实现方式。
  • 英语阅读能力要求比较高,涉及到的一些文档都是英文的。平时和国外的同事交流也是要用英语。

二、工作时间

大厂的话稳定在1095,弹性上班不打卡,虽然我之前自己也经常加班超过9点,但9点是真的可以走了,没人会说你啥(只是 ld 和身边同事也没走,就你走也不太好意思。周末双休,但你的活儿没干完,周末还是得自己在家里加班。刚开始实习的前一两个月还学学语法看看项目比较休闲,后面基本上开始上手干活,基本上每个周末我都要带电脑回去加个班。

我现在在的这家外企的话是10 6.5 5,也是弹性上班不打卡,如果中途有事出去一两个小时的话在群里说下就行,没必要请假(如果是半天就要走请假流程)。

三、研发流程

我不确定其他厂的研发规范,但是字节非常严格的,比如我需要对一个接口做修改,以下是一个标准的研发流程:

先建立研发卡片,卡片中写清楚研发内容、研发&测试负责人、研发起止时间、所需工时等信息;

从代码库master中拉新分支,绑定到卡片;

在容器或开发机中完成开发后提交代码,提交后流水线会自动跑一组代码检查;

通过机器检查后再请人做Code Review代码评审,一般是该模块的负责人和你的mentor来评审;

若评审不通过,打回后修改完继续提交评审,直至通过;

请QA(测试)提测,若改动较小,可以选择自测;

分级发布上线,同时做回归测试。

我现在在外企的话是基本上也差不多,只是项目管理CICD用的不是像字节自研的,而是 Jira 和 GitHub 的那套,相对字节那套来说不是那么好用,并且关联度没有那么高。

四、薪资

在大厂的话薪资就不必多说了,想必别人可能比我更了解,公积金社保这种交得特别多。

我现在的外企的话薪资是分两部分(国内薪资+国外薪资)

国内薪资比较低,是按最低标准交的,社保五险一金也是按这个基数交的

国外薪资的话发的是美元外汇

相较起来薪资肯定是不如大厂的一根

五、福利

对于大厂基本上都有免费的三餐,租房补贴,打车补贴等等,会有下午茶,节日礼盒,会有打折的饮料机,活动日会组织活动,健身房,过年有红包,会组织团建聚餐等等(有一部分据说已经没有了

我现在在外企的话基本上补贴就没有了,每个月会组织一个聚餐or团建,节日的话没有礼盒而是200元的微信红包

六、吐槽

这段我用 ai 用吐槽的口气润色了遍,实际上并没有那么严重

说真的,大厂的代码审核已经卷到有点魔怔了。

提交一次代码,先得过流水线这道祖宗关,打个空格少了、某一行写长了点,甚至是注释没按模板写,都能瞬间被打回来。流水线速度慢到你能喝三杯咖啡,刷半个小时手机,结果出来了:『请修改后重新提交』。

更痛苦的是单元测试这件事。明明只是顺手改了几行代码,结果就得花上一整天甚至两天专门写单测。那些年久失修的老代码,以前人们怎么爽怎么写,现在突然要给它们补单测,谁碰谁倒霉。前阵子一个哥们只改了个150行方法的最后几句,结果愣是为了覆盖率指标,从头到尾构造测试用例,整整折腾了一整天,看着他麻木的表情,差点没劝他辞职。

其实大家心里也知道,这些『变态严格』的规范和检查,本意是好的,要防止代码腐化烂掉。但现实是,它们常常成为了消耗研发精力的形式主义,最终变成了『为了规范而规范』。虽然知道必须忍着继续往前走,但真心想吐槽一句:这种路,真的太折磨人了。

另外,离职时你会发现,在大厂里用的都是内部自研的东西,出去面试一圈,发现外面的技术栈一个也不认识。回想起当初入职时HR说的『基础设施非常完善』,呵呵,确实完善,完善到你啥也学不到。

七、其他一些补充提升工作效率的方式

  • 现在利用一些 ai 模型来辅助写代码和一些文档实现
  • 带着耳机一边听歌一边写代码
  • 内部大家都少用百度搜索,内网自带梯子,大家谷歌用得比较多,还有ChatGPT
  • 像大厂这种整理的技术方案,新人学习文档比较多,可以多看看学习下
#毕业季##毕业季,给职场新人一些建议##我的求职总结##选offer应该考虑哪些因素##牛客创作赏金赛#
全部评论
但是应届生第一份工作还是首选大厂
1 回复 分享
发布于 05-29 18:58 辽宁
mark
1 回复 分享
发布于 05-28 14:20 重庆
在大厂没自己的生活
点赞 回复 分享
发布于 05-29 15:03 北京
我喜欢大厂的强度,想挣钱,可惜进不去
点赞 回复 分享
发布于 05-29 14:32 北京
大厂的强度还是太高了,
点赞 回复 分享
发布于 05-29 14:00 北京
干货满满
点赞 回复 分享
发布于 05-28 13:37 北京

相关推荐

05-23 15:16
已编辑
门头沟学院 Java
1,缓存架构?答:讲了一下redis在项目中的具体实现注:其实面试官想问的是多层架构2,redsi缓存击穿,穿透,雪崩怎么解决?答:击穿可以通过设置热key永不过期穿透可以使用缓存空值和布隆过滤器来解决雪崩可以通过给键设置基础时间值+随机时间值来解决注:缓存击穿还可以还通过互斥锁进行解决(性能较低)关于雪崩上面只说了大量key过期的问题 没有提到redis宕机解决方法:(1)设置多层架构 (2)建立redis主从或集群(3)提前演练redis宕机 从而设计解决方法3,大量不存在的用户同时登录时会给数据库造成压力,怎么解决?答:使用redis缓存空值注:缓存空值不能有效解决这类缓存穿透问题这里要使用布隆过滤器进行拦截 更加有效在实际业务开发中最好俩者结合使用4,jwt?答:说了一下jwt的生成和解析以及结构5,讲讲乐观锁和悲观锁答:讲了一遍sychronized的底层实现从无锁->偏向锁->轻量级锁->重量级锁这里轻量级锁就是乐观锁 重量级锁就是悲观锁6,乐观锁和悲观锁最主要的区别?答:在低并发场景下乐观锁性能好在高并发场景下悲观锁性能好注:乐观锁是认为操作的时候没有线程和我并发操作通过cas判断 不会让你的线程挂起 可能会不断自旋去尝试获取锁悲观锁是认为有线程和我并发操作 拿不到锁线程就会进入阻塞状态直到拿到锁的线程释放锁后唤醒该线程7,sychronized和reentrantlock有什么区别?答:sychronized由jvm释放锁 reentrantlock手动释放sychronized不可重入 reentrantlock可重入(避免死锁)注:这里答错了sychronized可重入 他们的主要区别在于sychronized不支持公平锁,不支持超时不可中断,不支持多条件 sychronized是java内置的关键字 reentrantlock是由juc类库所提供的8,aop怎么理解?这里答的太乱了不清楚注:把那些非核心功能抽取出来封装成一个切面去掉冗余代码通过动态代理的方式 将需要注入切面的对象进行代理在进行调用的时候直接将公共逻辑注入 侵入性较低1,缓存架构?答:讲了一下redis在项目中的具体实现注:其实面试官想问的是多层架构2,redsi缓存击穿,穿透,雪崩怎么解决?答:击穿可以通过设置热key永不过期穿透可以使用缓存空值和布隆过滤器来解决雪崩可以通过给键设置基础时间值+随机时间值来解决注:缓存击穿还可以还通过互斥锁进行解决(性能较低)关于雪崩上面只说了大量key过期的问题 没有提到redis宕机解决方法:(1)设置多层架构 (2)建立redis主从或集群(3)提前演练redis宕机 从而设计解决方法3,大量不存在的用户同时登录时会给数据库造成压力,怎么解决?答:使用redis缓存空值注:缓存空值不能有效解决这类缓存穿透问题这里要使用布隆过滤器进行拦截 更加有效在实际业务开发中最好俩者结合使用4,jwt?答:说了一下jwt的生成和解析以及结构5,讲讲乐观锁和悲观锁答:讲了一遍sychronized的底层实现从无锁->偏向锁->轻量级锁->重量级锁这里轻量级锁就是乐观锁 重量级锁就是悲观锁6,乐观锁和悲观锁最主要的区别?答:在低并发场景下乐观锁性能好在高并发场景下悲观锁性能好注:乐观锁是认为操作的时候没有线程和我并发操作通过cas判断 不会让你的线程挂起 可能会不断自旋去尝试获取锁悲观锁是认为有线程和我并发操作 拿不到锁线程就会进入阻塞状态直到拿到锁的线程释放锁后唤醒该线程7,sychronized和reentrantlock有什么区别?答:sychronized由jvm释放锁 reentrantlock手动释放sychronized不可重入 reentrantlock可重入(避免死锁)注:这里答错了sychronized可重入 他们的主要区别在于sychronized不支持公平锁,不支持超时不可中断,不支持多条件 sychronized是java内置的关键字 reentrantlock是由juc类库所提供的8,aop怎么理解?这里答的太乱了不清楚注:把那些非核心功能抽取出来封装成一个切面去掉冗余代码通过动态代理的方式 将需要注入切面的对象进行代理在进行调用的时候直接将公共逻辑注入 侵入性较低不想写了 直接把问题都扔出来吧 java线程池的七个参数?1. Java线程池,5核⼼、10最⼤、10队列,第6个任务来了是什么状态?任务扔到⼯作队列中2. 如果在第6个任务过来的时候,5个核⼼线程都已经空闲了呢?⼀样扔到队列(线程池只关注数量)3. 第16个任务来了怎么处理?创建⾮核⼼线程去处理第16个任务4. 第16个任务来了的时候,要是有核⼼线程空闲了呢?如果这个空闲的线程,将⼯作队列中的10个任务,取⾛了⼀个,变为了9个,那任务扔队列。如果空闲的线程还没来得及取⾛任务,投递时,队列⻓度依然为10,那还是创建⾮核⼼。5. 队列满了以后执⾏队列的任务是从队列头 or 队尾取?⼀般咱们的阻塞队列都是FIFO的,所以先进先出,从头取。6. 核⼼线程和⾮核⼼线程执⾏结束后,谁先执⾏队列⾥的任务?谁空闲了,并且去等待任务,谁先去执⾏队列⾥的任务。7.为什么⾮核⼼优先执⾏投递的任务?8.核⼼线程与⾮核⼼线程有什么区别?9.MySQL中如何实现数据的读⼀致性?10. MySQL的InnoDB引擎是如何通过⽇志实现事务的?11. MySQL崩溃恢复为什么不⽤binLog?12.Redis的事务了解吗?13.Redis 的持久化机制?总结:对底层的理解还是不够深入 之前没有了解过redis事务 有的时候答非所问容易跑题
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务