Java掌握到什么水平才能社招进入阿里?
阿里面试成功已经过去一个月了,入职也已经过去十多天了,趁着周末写点东西和大家进行一下分享。
那这次加入的BU是菜鸟,一个非常有发展前景的公司。
网上有很多所谓的Java程序员面试经,其实看下来的感觉就是没多大用,面试是没有套路的,每一个面试官问的东西也都不一样,如果根据那些面试问题去学习和准备,那真的是只见树木不见森林,对个人提升没有太大提高。
按照我个人的理解,主要就是基本功+项目。
为什么之前说针对面试题进行学习和准备作用不大,因为我认为我们关注的不应当是题,而是题背后的一个一个的方向,这也就是我认为的基本功。那从基本功的角度来说,罗列一下我能想到的,包括但不限于以下内容:
- 工作相关使用到的JDK类及其相关源码、机制
- 设计模式,设计模式在工作中用到了哪些,具体使用场景
- 并发类的相关知识,线程安全、锁机制、信号量、闭锁、栅栏、线程池等
- 框架相关,Spring相关机制、Spring MVC相关机制、MyBatis相关机制、使用的细节点、框架实现原理等
- JVM,内存布局、垃圾识别算法、垃圾回收算法、垃圾收集器、类加载机制、内存模型、出现内存问题时定位问题的方法等
- 数据库的基本数据类型、索引机制、各引擎区别、锁机制、慢SQL定位及优化等
- 缓存机制,这里的机制指的是缓存加载、缓存击穿、缓存雪崩这些机制及其相关应对方案,用过Redis、MemCache的最好理解一下它们的原理或者缓存提供的一些高级功能,集群如何实现
- 分布式的一些知识,比如CAP理论、数据一致性的几种解决方案、分布式事务如何处理、分库分表怎么做、现有的相关解决方案等
- NIO的作用,epoll模型是否知道一些,Netty的相关机制、Netty相比原生NIO的优点、半包拆包、断线重连解决方案等
- Web相关,Get与Post的区别、转发与重定向的区别、跨域问题如何解决、如何保证接口幂等性等
- 网络层相关,三次握手和四次握手、全连接队列和半连接队列、负载均衡算法等
- 其他中间件,MQ作用和使用场景、服务化治理框架的作用和使用场景、配置中心的作用和使用场景等
- 数据结构,数组、链表、栈、队列、树等优缺点,在什么场景下使用什么数据结构
- Linux相关知识,基本命令的使用,排查日志、定位问题,项目或者第三方组件的基本运维等
坦白讲,以上的这些东西全都掌握也不可能,哪怕面试官肯定也有很多不会的,但这就是基本功,能多掌握一点多掌握一点,技多不压身,至于别人如何评价你,就留给别人去评价吧,做好自己能做好的就行了。我在之前写过的文章中反复强调深度+广度,深度优先、广度次之,有了深度+广度,在开发过程中我们可以尽快完成需求,在遇到问题情况下我们可以第一时间找到应对方案。
在三年的时间点,能掌握上述的知识点我认为已经是非常非常优秀的了,但这两年的经历让我意识到的是,到了五年的时间点,如果只是具备这些硬性技能,还是不够,这两年更多的应当是在项目上进行积累,也就是前面说的项目,大致上应该有:
- 独立完成复杂业务,或者完成一个已有项目中的大功能点,这就需要有根据业务对功能进行分解、分析的能力
- 独立排查复杂问题,在项目运行过程中,一定不可能安然无事,除开业务性的问题,CPU 100%是否能独立排查、内存溢出是否能独立排查、应用死锁或者DB死锁能- 否独立排查、API调用时间长能否独立排查,以上问题排查完毕能否及时解决
- 带领团队的能力,可能这时候带领的是1~2个人的小团队,即使一个小团队,也能考验带团队、任务合理分配的能力
可能上面的要求有点高,可能工作中未必有这样的机会,但是不要抱怨,机会永远留给有能力、有准备的人,我们首先想的不应该是等待别人交给你一件有挑战性的事情,你在做这件事情的情况下去提升自己,而应当是先提升自己的素质,然后让别人放心把有挑战性的事情交给你来做。
如果有对Java技术感兴趣,正在学习Java技术的初学者,可以申请加入我的Java新手学习群:537864251,这里面聚集了很多正在学习Java技术的初学者,其中不乏也有正在从事Java技术开发的大牛,有任何不懂的地方都可以随时在里面交流探讨,不忙的时候我也会抽出一定的时间给大家进行解答。
最后的最后,我想说的是,无论进入了BAT还是进入了FLAG,都绝不是技术道路的终点,不是可以高枕无忧地躺在过去的功劳簿上、无忧无虑过完下辈子的资本,相反,必须更努力,才能在一群同样优秀的人中脱颖而出。