黑马程序员技术交流社区

标题: 大神总结:面试官的七种武器:Java篇 [打印本页]

作者: wizong    时间: 2016-6-25 00:13
标题: 大神总结:面试官的七种武器:Java篇
本帖最后由 wizong 于 2016-6-25 00:18 编辑

起源

自己经历过的面试也不少了,互联网的、外企的,都有。总结一下这些面试的经验,发现面试官问的问题其实不外乎几个大类,玩不出太多新鲜玩意的。细细想来,面试官拥有以下七种武器。恰似古龙先生笔下的武侠世界中的七种武器。下面我为各位一一道来。


长生剑=语言基础


长生剑是七种武器之首,同理,编程语言的考察也是技术面试中最基本的。这条不满足的就直接Pass了。以Java为例,语言的考察大致可以分为三个层次:


初级:语法考察,也就是该语言本身的使用层面。

这个层次的考察会考察一些语言的基本语法,对于这个层次的考察要做到对于每一个细节都熟练掌握。 考察的形式可以是问你某一段代码是否能成功编译,或者会输出什么结果,也可以是让你说一些不同关键字的不同含义、某一个关键字都可以有哪些用法,等等。Java常见问题:

Inner Class, Static Nested Class的使用;

final finally finalized关键字的区别;

volatile\sychronized关键字的使用(Java开发往往是服务器端开发,所以并发相关的关键字要重点掌握);

static关键字都有哪些使用场景(说出static block及格,说出import static会加分)。


中级:库或框架的使用。或者说是该语言的技术栈的使用层面。

库的使用:

也就是该语言的标准库的使用。以Java为例,会问你一些关于jdk中常见的framework,比如IO、 Collection、juc并发框架等,以及concurrentHashMap的实现原理等等。尤其要注意的是HashMap和ConcurrentHashMap的实现原理是面试官最喜欢攻击的技术点之一,一定要好好掌握。同时,因为是Java开发往往是服务器端的,juc包也是要重点掌握的。 除此之外还有一些重要的规范,比如JDBC、servlet,等等。

框架的使用:

以Java为例,Spring SpringMVC和MyBatis(Hibernate)这些框架的使用、原理都要掌握。对于Spring来说,要重点掌握IOC和AOP的实现原理,其中AOP要知道动态Proxy和CGLIB两种实现方式。对于ORM框架,要重点掌握MyBatis和Hibernate的实现原理和不同点。

高级:语言的底层实现。或者说是该语言的设计思想层面。

以Java为例,因为Java是以JVM为基础的,会问一些关于JVM的问题,比如JVM的运行时内存区域,JVM内存模型,GC机制,JVM的性能调优,类加载机制等等。另外需要掌握JIT等技术,以及为什么Oracle的Java虚拟机叫做HotSpot?

还有就是对一种语言的历史最好有一个大概了解,以Java为例,需要了解Java每个大版本都有哪些重大更新,等等。





作者: wizong    时间: 2016-6-25 00:15
本帖最后由 wizong 于 2016-6-25 00:26 编辑

碧玉刀=手写code

刀和剑是武林中人最基本的武器。对于面试官而言,语言考察和手写code题也是最基本的考察。道理很简单,编程语言和手写code是coder最重要的基本功。跟编程语言一样,这部分通不过的话,面试直接Pass。同时,这一部分也是“talk is cheap, show me the code”的最好体现,杜绝夸夸其谈的“水货”。


手写Code题可以分为下面三类:

1. 算法题。

最基本的算法题一般是排序,查找等,常见的有二分查找,快排等。一定要熟练掌握。这些题在各类公司的考察中都有可能出现。

中等难度的算法题一般会是动态规划算法(DP)的题,比如菲波那切数列问题及其常见变种。DP的题的关键点在于首先找出问题的递归解法,然后使用自顶向下或者自底向上的方法,消除递归过程中的重复状态,降低时间复杂度。

其实,就算是MS Amozon这种以考察算法著称的公司,基本上算法题的难度也很少超越DP这种中等难度的题。因为毕竟不是搞ACM。

2. 数据结构题。

最基本的数据结构题一般是针对链表这样的题目,比如单链表的反转、判断单链表是否相交,等等。

中等难度的题目一般是针对二叉树这样的题目。反转二叉树、二叉树的层级遍历,等等。值得注意的是,二叉树的题目可以考察的内涵其实非常广泛。比如经典的LCS最近公共祖先题目,其实解决的思路就非常考验解决问题的能力:把问题break down,再各个击破。

高级的数据结构题一般是B树,图这样的数据结构。一般这样的题很少考到。

因为算法与数据结构是密不可分的,因此往往把它们合并为同一类,统称为算法题,但其实二者还是有区别的。

3. 针对特定领域的手写code题了。比如手写JDBC的查询实现,手写生产者消费者原型,手写单例模式,等等。


最后,还有一点要注意,手写code题有个特点:你给出一种写法,面试官往往会追问你有没有更优的写法?如果题目修改一些前提条件该怎么办?因此,对于这一类问题,在平常的学习积累中一定要注意学会举一反三。


作者: wizong    时间: 2016-6-25 00:17
本帖最后由 wizong 于 2016-6-25 00:24 编辑

多情环=Java开发中的其他环节


这部分内容比较多,而且而且这些技术环节与Java开发都有着环环相扣的关系。这些环节主要有: Linux shell编程或者Python脚本编程,在服务器运维中会使用;SQL关系数据库;HTTP TCP网络协议;反向代理,分布式缓存,等等。 下面按照客户端数据的流入先后,介绍几个比较重要的环节。

1 Nignx、Tomcat、 Apache、Jetty 等Web服务器

Nignx可以作为反向代理,所以位于整个服务器系统的最前端。Tomcat或者Apache可以负责转发请求给应用服务器。Jetty可以在分布式集群中帮助服务器间通讯。

需要掌握Nignx与Apache的原理及不同、Jetty的原理,等等。

2 线程池、NIO框架等

需要掌握Java处理高并发的原理(线程),并了解其他常见方式,如Node.js的基于event的方式,以及Python GoLang的协程方式,等等。

由于应用服务器的性能瓶颈往往在IO上,所以还需要掌握Java常见的NIO框架如Netty等。

3消息中间件及分布式框架

需要熟悉常见的消息中间件比如Kafka,以及常见分布式框架ZooKeeper等,如果研究过源码就更好啦。

4 缓存

缓存是应用服务器(集群)与数据服务器之间的桥梁。常见的有MemCacheD和Redis。需要掌握的常见问题有MemCacheD与Redis的原理,它们的不同,Redis持久化方式,一致性Hash等。

5 数据

5.1 关系数据库

需要掌握常用SQL语句,常见的SQL性能调优方法等。需要注意的是关系数据库也可以做分布式哦,也就是单表超过百万记录后的分库分表,等等。

5.2 NoSQL

最好能掌握些Hadoop、Spark的知识,为将来转型为数据工程师做准备。。

6 脚本及JVM监控

终于说到运维阶段了。。 在日常运维中,需要至少掌握Shell或Python脚本,Shell要重点掌握awk,以及一些常见的性能监控命令。常见的题目会让你写一段处理日志的awk脚本,或者问你一些ps iostat netstat vmstat之类的命令如何使用,等。JVM监控主要是如何获得java core和heap dump,以及如何分析他们,另外一些简单监控命令如jstack和jmap jhat等也要了解。


关键点:

这部分内容往往会结合你的项目经验来问。一定注意要诚实回答,不要夸大自己在项目中的作用,不然面试官会认为你在弄虚作假,很不诚实。如果这样的话,你就死定了!







作者: wizong    时间: 2016-6-25 00:23

孔雀翔 =设计模式

孔雀翎,每一片都是那么美丽。设计模式也是一样,每一种设计模式都蕴含着设计之美。在经典的23种设计模式中,能说出10种以上的模式及其思想,就算及格。

在这里,列举一下需要掌握的几种模式:

创建类:

单例(线程安全的单例?在Java中双重检查加锁为什么会失效?),工厂方法,抽象工厂(工厂方法与抽象工厂的区别?),Builder。

结构类:

Adapter适配器,代理模式Proxy, 装饰器模式(在Java IO Framwork中的体现?),外观模式。

行为类:

观察者,状态模式(state),模板方法,策略模式,责任链模式(在Jetty中的体现?)。


设计模式在互联网企业的面试中出现的比较少,一般只需要重点掌握单例模式即可。至于其他模式,能说出他们在jdk或者其他重要开源框架中的使用即可。


另外,除了23种经典设计模式,最好还能掌握比如多例,对象池(object pool)这样的更为现代的设计模式。




作者: wizong    时间: 2016-6-25 00:25
本帖最后由 wizong 于 2016-6-25 09:18 编辑

离别钩=HR面


离别钩是七种武器的最后一种。同理,HR面试也是面试的最后一个环节。

考察内容:

HR会考察你的技术之外的其他素质,比如性格,是否能融入公司,是否能认同企业文化,与人的沟通交流会不会有问题,以及面对困难的应对等等。

该问的和不该问的:

千万不要以为到了这一步就可以放心和HR谈价了。。。 所以薪资这块最好少问。同时需要注意的是,比如加班之类的最好少问,可以等拿到offer再问,

应该问一些企业文化方面的东西,这样可以加分不少。


作者: wizong    时间: 2016-6-25 09:19

第七种武器?


第七种武器是什么? 水:“哦?” 车:“没有武器!” 水:“没有?” 车:“没有,没有武器就是有武器,有武器就是没有武器”

面试中的第七种武器是什么?眼缘!有时候面试官就是看你不爽。。所以,你跟这个职位就没有缘分啦,哈哈哈哈。。。。


写在最后

好了,面试官的七种武器就介绍完啦,如果大家有任何补充欢迎留言。最后祝愿大家都能熟知面试官的这些武器,做到知己知彼,百战不殆。顺利拿到自己心仪的offer!





作者: suming    时间: 2016-6-25 23:08
谢谢分享啊
作者: 邻家特工    时间: 2016-6-27 18:15
大神总结的好!
作者: 孟小垚    时间: 2016-6-27 18:28
谢谢,看一看,瞧一瞧
作者: tianzhu2725    时间: 2016-6-27 18:44
瞬间感觉自己啥也不会啊
作者: middasong    时间: 2016-6-27 21:58
分享的不错~
作者: Vision-V    时间: 2016-6-27 22:03
学到了套路
作者: 守徒徒    时间: 2016-6-27 22:29
谢谢分享!!
作者: lsp0523    时间: 2016-6-27 22:48
点赞 ,感谢无私的奉献
作者: 地狱蓝枫    时间: 2016-6-27 22:59
谢谢分享!!
作者: 杨海峰    时间: 2016-6-27 23:00
总结的好!!!
作者: w1599928008    时间: 2016-6-27 23:01
谢谢分享,先收藏了
作者: TommingYu    时间: 2016-6-27 23:24
正在打基础  看来要抓住
作者: wstm198907    时间: 2016-6-28 08:56
赞~~~~~~~!!
作者: 任广威    时间: 2016-6-28 09:32
正在学习阶段,感觉总有用到的一天的,留着慢慢看
作者: wizong    时间: 2016-6-28 09:52
suming 发表于 2016-6-25 23:08
谢谢分享啊

不客气!
作者: wizong    时间: 2016-6-28 09:54
邻家特工 发表于 2016-6-27 18:15
大神总结的好!

有好东西共享嘛!
作者: perfect_class    时间: 2016-6-28 15:50
比喻的不错,哈哈
作者: TommingYu    时间: 2016-6-28 22:23
TommingYu 发表于 2016-6-27 23:24
正在打基础  看来要抓住

嗯嗯  好的  
作者: zfr930102    时间: 2016-6-28 22:36
谢谢你的分享十分的有用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2