有位朋友去阿里巴巴 java 工程师岗位, 面试完后, 感触很深, 不愧是大公司, 发现公司对于面试者的知识结构考核非常严谨, 虽然只是一场面试, 但可以作为我们工作学习的指导, 有人说面试问到的东西在实际工作中很少用到, 譬如数据结构, 算法等, 甚至有的人还倜傥, 面试造火箭, 工作拧螺丝. 但从一场正规的面试我们可以看得出规模较大的公司对于求职者的知识体系要求是相当高的. 如果我们能在平时工作中就按着这样的要求不断要求自己, 提升自己, 相信在下一次面试的时候定能做到游刃有余.
阿里的面试一般会有两轮电话技术面试, 分别交叉检验求职者的基础知识是否扎实. 两轮现场技术面试, 一般是考核求职者的项目经验. 从这个角度分析, 阿里对于人才招聘大概可以考核可以分为三个层次: 基础知识的考核, 项目深度的考核.
基础知识的考核
基础知识的考核, 主要考核求职者对 编程 J 语言本身原理的理解以及框架原理的理解. 对于 Java 开发岗位上来说, 一般考察的知识点有:
集合 HashMap 的原理, 与 Hashtable,ConcurrentHashMap 的区别?
线程池的核心属性以及处理流程, Synchronized 关键字, 锁
线程的生命周期
JVM 类加载机制, 内存模型, 垃圾回收机制
Spring Bean 容器生命周期
Spring AOP 原理
数据库 SQL 优化, 数据库索引, 索引原理等
看到这一系列的知识点, 可能有的一下子就慌了, 当然, 这只是一小部分而已. 面试官喜欢针对求职者掌握的知识点刨根问底, 如果你能吼住的话, 进入下一轮面试的几率就大大提高了.
阿里更倾向深度挖掘, 针对你掌握的知识点进行深度挖掘. 比如前面提到的 java 知识点, 垃圾回收机制 Garbage collection, 我们知道要, 准确理解 Java 的垃圾回收机制, 我们可以从:"什么时候","对什么东西","做了什么事情" 这三个方面来分析.
要是在面试时, 面试官问 "对什么东西", 有的求职者回答 没有用的对象, 按道理来说, 这并没有错, 只是这并不是理想的答案. 要是能更进一步分析, 那就更好了, GC 操作的对象分为: 通过可达性分析法无法搜索到的对象和可以搜索到的对象. 对于搜索不到的方法进行标记. 从 root 搜索不到, 而且经过第一次标记, 清理后, 仍然没有复活的对象.
对于用可达性分析法搜索不到的对象, GC 并不一定会回收该对象. 要完全回收一个对象, 至少需要经过两次标记的过程. 把问题具体化了一些, 对类似这样的对象进行回收, 相信能给你这次面试加分.
项目思考深度
要是你通过基础知识的考核, 恭喜你, 你离拿 offer 不远了. 接下来面试官一般会让你说说你的项目经验, 譬如项目的架构图, 既然有了架构图, 你需要清楚理解每个模块的作用, 每个框架的原理以及与其他框架的优势和不足.
在这个层次上, 你不仅要对项目本身理解足够深刻, 还要跳出项目本身, 思考开源框架本身的问题. 进一步思考这些开源框架好不好, 有什么可以改进的地方. 作为一名的程序员, 有必要掌握为什么要用这些框架? 它有什么不足, 能不能做得更好? 只有往深度的方向去思考, 才能促进我们有所成长.
如何系统的进阶学习提升
个人经验通常只能通过时间的积累来过度, 而提升技术却有很多方法, 只是看你想不想? 个人觉得程序员们应该合理利用自己每一分每一秒的时间来学习提升自己, 不要用 "没有时间" 来掩饰自己思想上的懒惰! 趁年轻, 使劲拼, 给未来的自己一个交代, 毕竟互联网行业最吃香的是年轻的高级工程师
如果想提升自己技术上或者是自己的技术栈的工程师们那么以下福利可能很适合你, 总共六个方向.
性能调优
我们不仅仅对项目要运筹帷幄, 还要能解决一切性能问题. 只有深入学习 JVM 底层原理, MySQL 底层优化以及 Tomcat 调优, 才能达到知其然, 知其所以然的效果. 除了性能优化之外, 也能提供通用的常见思路以及方案选型的考虑点, 帮助大家培养在方案选型时的意识, 思维以及做各种权衡的能力.
开发工程化
一名优秀的架构师必须有适合自己的兵器, 也就是工欲善其事必先利其器, 不管是小白, 还是资深开发, 都需要先选择好的工具. 工程化专题的学习能帮助你和团队提升开发效率, 让自己有更多时间来思考.
框架源码分析
程序员每天都和代码打交道. 经过数年的基础教育和职业培训, 大部分程序员都会「写」代码, 或者至少会抄代码和改代码. 但是, 会读代码的并不在多数, 会读代码又真正读懂一些大项目的源码的, 少之又少. 这也造成了很多错误看源码的方式.
那要如何正确的分析源码呢?
我们的目标应该放在最常用的框架上面, 下面就介绍两个: 一个是 Spring, 另一个是大家用来觉得一直不怎么出问题的 Mybatis.
高性能分布式架构设计
透彻理解高性能架构的好处和优点
必然性, 适应市场需求, 能够去找一些更大的平台发展, 提升自己的综合技术能力和薪资.
了解从传统架构到分布式架构演变过程所带来的技术变革, 将理论和实战相结合, 透彻理解分布式架构及其解决方案. 从分布式架构原理, 到分布式架构策略, 再到分布式架构中间件, 最后在加上分布式架构实战, 让程序员可以在技术深度和技术广度上得到飞跃的提升, 成为互联网行业所需要的 T 型人才.
微服务架构设计
随着业务的发展, 代码量的膨胀和团队成员的增加, 传统单体式架构的弊端越来越凸显, 严重制约了业务的快速创新和敏捷交付. 为了解决传统单体架构面临的挑战, 先后演进出了 SOA 服务化架构, RPC 框架, 分布式服务框架, 最后就是当今非常流行的微服务架构. 微服务化架构并非银弹, 它的实施本身就会面临很多陷阱和挑战, 涉及到设计, 开发, 测试, 部署, 运行和运维等各个方面, 一旦使用不当, 则会导致整个微服务架构改造的效果大打折扣, 甚至失败.
大型电商实战项目
要想立足于互联网公司, 且能在互联网浪潮中不被淹没, 对于项目的开发实战演练是不必可少的技能, 也是对自身能力的一个衡量, 有多少的量对等于获得多少的回报. 看似简单的一个项目需求图谱, 其中的底层原理, 实现原理又能知道多少? 你搭建一个完整的 B2C 项目平台到底需要多少知识? 这一切都是需要我们考量的.
总结的这些架构技术希望对 Java 开发的朋友们有所参考以及少走弯路, 本文的重点是你有没有收获与成长, 其余的都不重要, 希望读者们能谨记这一点. 同时我经过多年的收藏目前也算收集到了一套完整的学习资料, 希望对想成为架构师的朋友有一定的参考和帮助.
想领取到免费架构视频以及面试资料学习提升自己的可以加 Q 裙: 935692859 免费获取!
而针对以上面试技术点, 我在这里也做一些技术知识面试专题资料分享, 希望能更好的帮助到大家.
来源: http://www.jianshu.com/p/ec4b957a38ff