之前在我团队里 , 我见过两个人 , 一个是就会干活 , 具体表现是会用Java核心基本的API , 而且也没有深入了解的意愿(估计不知道该怎么深入了解) , 另一位平时专门会看些Java并发 , 虚拟机等的高级知识 。过了半年以后 , 后者的能力快速升级到高级开发 , 由于对JAVA核心知识点了解很透彻 , 所以看一些分布式组件的底层实现没什么大问题 。而前者 , 一直在重复劳动 , 能力也只一直停留在“会干活”的层面 。
而在现实的面试中 , 如果不熟悉Java核心知识点 , 估计升高级开发都难 , 更别说是面试架构师级别的岗位了 。
至少了解如何看日志排查问题
linux方面 , 至少了解如何看日志排查问题!如果候选人能证明自己有“排查问题”和“解决问题”的能力 , 这绝对是个加分项 , 但怎么证明?
目前大多数的互联网项目 , 都是部署在Linux上 , 也就是说 , 日志都是在Linux , 下面归纳些实际的Linux操作 。
1、能通过less命令打开文件 , 通过Shift+G到达文件底部 , 再通过?+关键字的方式来根据关键来搜索信息 。
2、能通过grep的方式查关键字 , 具体用法是, grep 关键字 文件名 , 如果要两次在结果里查找的话 , 就用grep 关键字1 文件名 | 关键字2 --color 。最后--color是高亮关键字 。
3、能通过vi来编辑文件 。
4、能通过chmod来设置文件的权限 。
当然 , 还有更多更实用的Linux命令 , 但在实际面试过程中 , 不少候选人连一条linux命令也不知道 。还是这句话 , 你哪怕知道些很基本的 , 也比一般人强了 。
通读一段底层代码 , 作为加分项
如何证明自己对一个知识点非常了解?莫过于能通过底层代码来说明 。我在和不少工作经验在5年之内的程序员沟通时 , 不少人认为这很难?确实 , 如果要通过阅读底层代码了解分布式组件 , 那难度不小 , 但如果如下部分的底层代码 , 并不难懂 。
1、ArrayList,LinkedList的底层代码里 , 包含着基于数组和链表的实现方式 , 如果大家能以此讲清楚扩容 , “通过枚举器遍历“等方式 , 绝对能证明自己 。
2、HashMap直接对应着Hash表这个数据结构 , 在HashMap的底层代码里 , 包含着hashcode的put , get等的操作 , 甚至在ConcurrentHashMap里 , 还包含着Lock的逻辑 。我相信 , 如果大家在面试中 , 看看而言ConcurrentHashMap , 再结合在纸上边说边画 , 那一定能征服面试官 。
3、可以看下静态代理和动态代理的实现方式 , 再深入一下 , 可以看下Spring AOP里的实现代码 。
4、或许Spirng IOC和MVC的底层实现代码比较难看懂 , 但大家可以说些关键的类 , 根据关键流程说下它们的实现方式 。
其实准备的底层代码未必要多 , 而且也不限于在哪个方面 , 比如集合里基于红黑树的TreeSet , 基于NIO的开源框架 , 甚至分布式组件的Dubbo , 都可以准备 。而且准备时未必要背出所有的底层(事实上很难做到) , 你只要能结合一些重要的类和方法 , 讲清楚思路即可(比如讲清楚HashMap如何通过hashCode快速定位) 。
那么在面试时 , 如何找到个好机会说出你准备好的上述底层代码?在面试时 , 总会被问到集合 , Spring MVC框架等相关知识点 , 你在回答时 , 顺便说一句 , “我还了解这块的底层实现” , 那么面试官一定会追问 , 那么你就可以说出来了 。
不要小看这个对候选人的帮助 , 一旦你讲了 , 只要意思到位 , 那么最少能得到个“肯积极专业“的评价 , 如果描述很清楚 , 那么评价就会升级到“熟悉Java核心技能(或Spring MVC) , 且基本功扎实” 。要知道 , 面试中 , 很少有人能讲清楚底层代码 , 所以你抛出了这个话题 , 哪怕最后没达到预期效果 , 面试官也不会由此对你降低评价 。所以说 , 准备这块绝对是“有百利而无一害”的挣钱买卖 。
推荐阅读
- Java中的操作符、表达式和语句
- 对Java中HashCode方法的深入思考
- 关于并发框架 Java原生线程池原理及Guava与之的补充
- java数据结构及算法总结
- 浏览器兼容性测试要测试哪些浏览器?
- Java中的HashCode方法与内存泄漏问题,你了解过吗?
- java程序运行原理解析
- Java程序计数器刨根问底,大部分程序员都收藏起来了
- 2019年360PHP工程师面试题
- Java如何利用Socket请求Http接口?