Java程序员如何在寒冬季找到心仪的工作,用实际经历来告诉你

随便聊聊

大抵是出来的工作时间久了,看见的、经历的事情多了,打交道的人多了,人就容易发现自己的渺小,特别容易emo。记得刷到过一个视频,里头有一段话:眼界开了有时也是一件糟糕的事,因为你知道有很多事情,其实是无能为力的,但是你又看到了,明白是那么一回事,但是呢,就是办不到。

其实这些都是很正常的现象,导致这个场景出现的因素有很多,就比如说大环境经济的不景气,各种大厂在削减自身的开支,特别是前几年行情还不错,就开始流行起了内卷的说法,还有一些因素的话,是在外头看的事情多了,人都会有攀比的心理(这才是人性),当所有的社交媒体都在鼓吹这些美好的东西的时候,会让人产生那种奇葩的感觉,自己好像确实很差劲。

就像马斯克说过的:

社交媒体有时比较糟糕的,就是每个人都在上面发表自己美好的一面,导致大家觉得每个人都过得很好,你却过得很糟糕,需要理性去看待社交媒体。

Java真的要过时了吗?近几年来,互联网行业区块链、大数据等新技术层出不穷,Java被吐槽的也越来越多,不过JAVA编程语言市场是否真如网友所说的那样:已经趋近于饱和状态,甚至已经过时了呢?对于Java争议性是很大的,不过我觉得这是好事,为什么这么说呢,因为有争议就说明它还是挺火的,不然大家费那个劲讨论它干什么呢。 言归正传,用Java的人越来越多,吐槽它的也越来越多。随着互联网时代的发展,一些领域使用新的开发语言,在一定程度上抢占了Java的市场份额,但Java仍旧凭借自己的可移植性,安全性,编码简单等优势,占据着整个开发市场的主要地位。众所周知JAVA语言占据了各个领域的开发应用,因为其简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点,使其在互联网中得到了广泛的应用。

并且从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证新特性,推动 Java 的发展。Java一直在更新换代,除非有一项很大的技术突破能够替代Java。但其实没有不会过时的技术,只不过是时间问题,现在社会发展更新迭代很快,要想不被社会淘汰就需要不断的提升自己不断学习。

有心人可能会去看求职软件,看过之后你会发现,Java行业招聘还是非常多的,这说明目前市场还是很需要Java人才的,所以不要怕,毕竟没有哪个大公司会想用一个只流行十几年二十几年的编程语言,再者,Java会不会被取代,我想Java制作人员应该比大家更担心这个问题。

寒冬年年有,今年特别冷

也不知道是从什么时候开始,或许是从很早就有了,只是当时还没有到现在这种寒气逼人的程度,现在身处互联网的小伙伴们,都开始可以清楚地感受到这股寒意,身边很多朋友在职的时候是能内卷的使劲内卷,被裁员的努力找下家,不是说被裁了就是不努力的,在职的时候大多数也是凌晨了才下班。但是大厂也频频爆出各种财报不理想的,更别说那些中小企业了。

相信在当前市场各种人才济济,有一个朋友在大厂当面试官的,按他说的说法,是一个岗位放出来,投进去很多阿里的,可想而知这个竞争有多大了吧~

在寒冬里,也要保持斗志

但是啊,大危机孕育着大机会,历史也无数次向我们证明、展示了什么叫做绝地反击,为什么会有很多的抄底神迹,那都是源于自身独特的眼光与扎实的本领。

翻微信朋友圈的时候,有之前一个请教过我的小伙子,发的一个面试的情况,截图来看是很不错,他是今年刚刚毕业的那种,从他之前的朋友圈来看,是一个比较积极进取的人。在他大学期间参与各种开源社区的那种夏令营活动,其实就是社区有时候会发布一些小任务,在导师的指导下完成了,就会有社区发的一些奖章,这里面的甚至有些优秀的,是直接被鹅厂录取了。

他自己本身基础是挺厉害的,至少比我当年强很多很多,后面也给了我一份Java面试八股文,有上千页

加上自己本身的学历不错,学习各种技能也还行,一毕业就拿了10几个offer~

言归正传,说起这个并不是为了炫耀别人能有多厉害啥的,只是他的这个遭遇的背后是给了我一剂强心剂,市场岗位是有的,但是需要的是你更优秀,更突出,更有价值。

跟他谈了一下这些大厂的面经,整理了两个比较典型的大厂的面试题给大家,内容有点长,但可以看看有没有不懂的,算是提前预习一下:

阿里面经:

  • 常用 GC 算法,常用的垃圾收集器, G1 了解吗

  • 场景题:cpu 打满且频繁 full GC,怎么解决?

  • 有 jvm 调优的经验吗?实际工作中遇到过内存相关的问题吗?用过哪些堆栈工具调试?

  • Mysql 索引,数据结构为什么使用 B+ 树

  • 索引覆盖了解吗

  • 索引失效的场景

  • 简单描述一下数据库的四种隔离级别以及对应的三种相关问题

  • MVCC + 锁 保证隔离性

  • 造成幻读的原因了解吗,快照读、当前读。

  • 数据库自增 ID 和 UUID 对比

  • HashMap 源码,数据结构,如何避免哈希冲突,对比 HashTable

  • HashMap 源码中,计算 hash 值为什么有一个 高 16 位 和 低 16 位异或的过程?

  • 为什么重写 equals 还要重写 hashCode,不重写会有什么问题

  • ConcurrentHashMap 底层实现,扩容问题。

  • 如果让你自己实现哈希表,你会考虑什么问题?

  • 场景题:亿级别黑名单、短链接,你考虑使用什么数据结构?布隆过滤器、前缀树。其中布隆过滤器问了基本的原理和实现方式

  • Java 引用类型,强软弱虚

  • Java 是引用传递还是值传递

  • Object 类你了解哪些方法

  • 接口和抽象类的区别

  • 线程池核心参数,以及工作原理

  • ReentrantLock 对比 sync 锁

  • lockInterruptibly()、acquire()、tryAcquire() 方法

  • CAS 机制了解吗,存在什么问题

  • 对象锁和类锁的区别

  • 如果让你自己实现阻塞队列,如何实现?阻塞唤醒这一部分,如何实现?

  • ThreadLocal ,Volatile

  • 看你项目中用到了 Netty,简单介绍下吧。这里还有个 问题是问到 Netty 和 SpringBoot 整合的,但我一直都没理解她想问什么

  • 粘包拆包问题,Netty 解决粘包拆包的 Decoder

  • Spring 事务了解吗,Spring 事务的注解不生效,是什么原因

  • 算法题:手写快速排序,时间复杂度,稳定性

  • 看你项目中用了一致性哈希做负载均衡,简单介绍一下

  • 项目中 CompletableFuture 如何使用的

  • 算法题:给定一个字符串,找到其中最长回文串

  • 计网和组成原理学过吧,你认为哪个掌握得好?我选了计网。这一部分问得很深入,我没来得及记录,以下部分只是一些零散片段,但是整体问的时候是有逻辑的。

  • TCP 三次握手,四次挥手整个过程包括状态的转换。为什么是三次握手、四次挥手。发送 Fin ,实际的意义代表什么?(发送方没有数据要发送了,可以断开连接)

  • 四次挥手,为什么等待 2 MSL

  • 流量控制、拥塞控制

  • 后面关于网络就更深入了,TCP 底层是怎么实现的,如果让你用 Java 模拟 TCP 的过程,做一个仿真,你有什么想法。大学学习计网的时候,协议栈之类的了解过吗(这部分我都不懂,认栽了)

  • 看你项目中用到了 Spring,自动装配的过程了解吗。

  • Spring 启动类的注解,介绍一下

  • 因为我项目中用到了,所以被提问了 Spring 二次开发常用的扩展点,还涉及到了 Bean 的生命周期。BeanPostProcessor,在你项目中如何使用的

  • Spring 中你常用哪些注解?Autowired 实现原理

阿里的面试整体感觉不错,大部分都是答上来了的,按照整理出来八股文中的内容,认真准备就好。计网仿真 TCP 以及后面深入的部分不懂, Autowired 实现原理没说清除,其余的都答上来了。

字节跳动:

  • 自我介绍,项目部分主要介绍了 rpc 项目,后续的问题都是基于这个项目

  • rpc 远程调用的整个流程

  • 项目中的 SPI 机制,介绍一下原理以及你做了哪些改进

  • 项目中用到了负载均衡算法,详细介绍一下

  • 一致性哈希的原理,虚拟结点

  • 项目中的序列化方案,为什么序列化,你都了解哪些常用的序列化方法。

  • 你项目中使用了 Kyro 序列化,优点你提到了,缺点了解吗

  • 通信协议是你自己设计的,假如后面需要变更,比如添加新的字段,你项目中如何处理的?

  • 服务的灰度发布介绍一下,如何实现的?

  • Zookeeper 作为注册中心,假如崩溃了怎么办?这里开始连环问了

  • 你提到了 Zookeeper 的一致性,它是如何保证的?

  • ZAB 协议,选举的过程,这里问的很详细

  • Zookeeper 是强一致性吗?

  • 网络分区了解吗,CAP 理论

  • Zookeeper 如何应对网络分区的,脑裂问题了解吗,如何解决?

  • 假如我同一时间有大量服务发布,你提到了 Zookeeper 只有主节点负责写, 怎么解决?假如主节点崩溃了,新选举出的主节点仍然没办法面对我的大流量,也崩溃了,如何解决?

  • MQ 的原理,你知道哪些 MQ,各自有什么特点,什么时候需要用 MQ

  • 你刚才提到了服务端保护机制,如何实现的?这里我答了限制连接数以及接口限流,基于责任链模式。之后问了用到的令牌桶以外的常用限流算法。

  • 算法题1:链表反转,你知道的所有实现方式。这里我写了递归和非递归两种。

  • 算法题2:有一个 n * n 的棋盘,每个格子有 RB@ 三个状态,R 表示红色,B 表示蓝色,@ 表示此路不通。机器人从左上角走到右下角,每次只有上下左右四个方向选择,相同颜色之间没有代价,跨越不同颜色代价为 1,求解机器人从左上角走到右下角,最少的代价。

字节的面试问题几乎都答上来了,有一些不太熟悉的,在面试官的提醒下也都回忆起来了,也没有遇到难度比较大的问题,时间耗费的多的地方是被卡在了算时间复杂度,自己不熟练的地方还是得多练。 到这里面经的分享就结束了,不知道有多少是大家很熟悉的,又有那些是需要补习加深的呢

做到士别三日,当刮目相看

不管是在什么时间段,自我成长是个伴随你一生的事情,但真的,懒惰是我们需要对抗的一种劣根性,这种懒惰,不单单是说的身体上,还包括你精神上的懒惰。

1、在体力上的懒惰,也许是平时只会坐享其成,不想着去付出,或者自己满足当下,没有其他追求。

2、而精神上的懒惰,举个例子,比如说有些事情的处理方式,已经被实践过是不对的,但是却一直按照这个错误的方法去解决,而不想懒得动脑筋去思考怎么做对(举个栗子,相信比较少),那么整个人也就是在这个时候停止了进步。

说这个当然并不是想给大家灌鸡汤,还是需要我们自己多努力,多拼命。为什么?还不是为了能够每天进步一点点,有句老话就是士别三日,需刮目相待。没毛病啊,就是看你能不能每次都比上一次做得更好,每天有一点点的在进步,日积月累下来,那进步得非常可观的,孟子都说过:不积跬步无以致千里,不积小流无以成江海。说好不灌鸡汤,感觉还是像鸡汤,哈哈哈。

结语

还是想引用雪莱一句话:“冬天到了,春天还会远吗?”

没毛病呀,现在也许就是黎明前的那个黑暗,最让人丧失斗志的时候,也许你再坚持一下下,光明就来了呢~

没毛病呀,现在也许就是黎明前的那个黑暗,最让人丧失斗志的时候,也许你再坚持一下下,光明就来了呢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值