Java面试准备

今天我们会分为四个部分来谈论这个问题,由于我本身是Java出身,因此关于主语言的问题,都是与Java相关,其它语言的同学可以选择性忽略。此外,面试的时候一般面试官的问题都是环环相扣,逐渐深入的,这点在下面大家可以更明显的感受出来。

1、主语言本身以及它的高级特性。

主语言当然就是你平日里拿来赚钱的家伙。不要告诉我你没有主语言,你会N多种语言,或者是你精通N多种语言。

而我的主语言很显然是Java,那么对于Java来说,它的语言本身以及它的高级特性,都有哪些比较容易在面试中问到呢?

一般情况下,主要有以下知识点很容易被问到。(PS:以下所列举的,都是一些Java相对而言比较高级一点的知识点,因为这里谈的是社招,而不是校招)

1)Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap这一类的。以下简单模拟一个数据结构的连环炮。

比如,面试官先问你HashMap是不是有序的?

你肯定回答说,不是有序的。那面试官就会继续问你,有没有有顺序的Map实现类?

你如果这个时候说不知道的话,那这个问题就到此结束了。如果你说有TreeMap和LinkedHashMap。

那么面试官接下来就可能会问你,TreeMap和LinkedHashMap是如何保证它的顺序的?

如果你回答不上来,那么到此为止。如果你依然回答上来了,那么面试官还会继续问你,你觉得它们两个哪个的有序实现比较好?

如果你依然可以回答的话,那么面试官会继续问你,你觉得还有没有比它更好或者更高效的实现方式?

如果你还能说出来的话,那么就你所说的实现方式肯定依然可以问你很多问题。

以上就是一个面试官一步一步提问的例子。所以,如果你了解的不多,千万不要敷衍,因为可能下一个问题你就暴露了,还不如直接说不会,把这个问题结束掉,赶紧切换到你熟悉的领域。

2)Java并发包当中的类,它们都有哪些作用,以及它们的实现原理,这些类就是java.concurrent包下面的。与上面一样,咱们也简单的模拟一个并发包的连环炮。

比如面试官可能会先问你,如果想实现所有的线程一起等待某个事件的发生,当某个事件发生时,所有线程一起开始往下执行的话,有什么好的办法吗?

这个时候你可能会说可以用栅栏(Java的并发包中的CyclicBarrier),那么面试官就会继续问你,你知道它的实现原理吗?

如果你继续回答的话,面试官可能会继续问你,你还知道其它的实现方式吗?

如果你还能说出很多种实现方式的话,那么继续问你,你觉得这些方式里哪个方式更好?

如果你说出来某一个方式比较好的话,面试官依然可以继续问你,那如果让你来写的话,你觉得还有比它更好的实现方式吗?

如果你这个时候依然可以说出来你自己更好的实现方式,那么面试官肯定还会揪着这个继续问你。

为什么说面试的时候要引导面试官,原因就在这了。因为面试官的提问很多时候都是有迹可循的,你如果抓住了他的轨迹,能够猜到他下面很可能会问什么,那你在回答的时候就可以往你想要谈的方向去说。这样面试时就会显得更加从容,更加的游刃有余。

3)IO包和NIO包中的内容。这部分里面NIO会是重点,IO包大部分都会比较熟悉,因此可能会直接略过,直接问你NIO的内容。

IO包和NIO包的内容相对来说不是很多,首先NIO模型要熟悉,特别是其中的selector一定要非常清楚它的职责和实现原理。其实NIO的核心是IO线程池,一定要记住这个关键点。有的时候,面试官可能也会问你IO包的设计模式(装饰器模式),为什么要这样设计?

有的面试官还会问你有没有更好的设计,这个时候如果你不知道请果断说自己现在的水平有限,想不出来更好的设计,千万不要信口开河,随意YY。

4)Java的虚拟机的内容。这部分主要包括三部分,GC类加载机制,以及内存。

一个GC部分简单的连环炮。

面试官可以先问你什么时候一个对象会被GC?

接着继续问你为什么要在这种时候对象才会被GC?

接着继续问你GC策略都有哪些分类?

你如果说出来了,继续问你这些策略分别都有什么优劣势?都适用于什么场景?

你继续说出来了以后,给你举个实际的场景,让你选择一个GC策略?

你如果选出来了,继续问你,为什么要选择这个策略?

下面是关于类加载机制的简单连环炮。

首先肯定是先问你Java的类加载器都有哪些?

回答了这些以后,可能会问你每个类加载器都加载哪些类?

说完以后,可能会问你这些类加载之间的父子关系是怎样的?

你在回答的时候可能会提到双亲委派模型,那么可以继续问你什么是双亲委派模型?

你解释完了以后,可能会继续问你,为什么Java的类加载器要使用双亲委派模型?

你回答完以后,可能会继续问你如何自定义自己的类加载器,自己的类加载器和Java自带的类加载器关系如何处理?

再来一个关于内存的连环炮。

首先肯定就是问你内存分为哪几部分,这些部分分别都存储哪些数据?

然后继续问你一个对象从创建到销毁都是怎么在这些部分里存活和转移的?

接着可能会问你,内存的哪些部分会参与GC的回收?

完事以后,可能还会问你Java的内存模型是怎么设计的?

你回答了以后,还会继续问你为什么要这么设计?

问完以后,还可能会让你结合内存模型的设计谈谈volatile关键字的作用?

你在谈的时候,肯定会提到可见性,那么接着可见性这三个字,还可以继续问你并发的内容。

基本上Java语言本身以及语言稍微高级点的内容就是以上部分,如果你能把以上四部分了解的非常透彻,那基本上Java这部分就没啥问题了,因为光以上的内容就够你跟面试官聊很久了。你聊这些聊得久了,自然问你其它问题的时间就会短点。

你从我写的这些问题的过程也应该能感受出来,很多时候,面试官都是顺着一条线一路问下去的,如果你觉得这条线你不熟悉的话,就要及时拐弯,引导面试官去问其它方面的问题。千万不要一直往下深入,直到自己跳不出来为止,那就尴了个尬了。

2、讲述自己的项目,并在中间穿插着问题

这一部分是面试过程中必问,也是聊得最久的一个阶段。除非你前面的语言部分非常扎实,扎实到面试官问了一两个小时,依旧没有探出你对语言本身的了解到底有多深。否则的话,你一定逃不过自己的项目这一关,而且一般情况下聊得时间不会太短。

这一部分内容,一般的模式就是你自己去讲你做过的项目,然后面试官会冷不丁的让你去解释其中某一部分,比如让你解释当时为什么要这么做,或者问你现在觉得有没有更好的办法。而这些穿插的问题,大部分与你的项目所用到的技术有关。而你需要做的,就是充分、再充分的去总结自己做过的项目(尤其是最近的一两个项目),挖掘出一个甚至N个亮点,以备于到时候可以让面试官产生眼前一亮的感觉。如果你能达到这种效果的话,基本上离你成功就不远了。

3、额外的加分项

  上面两个阶段基本上是必问的,还有一些加分项。这些加分项中,有些内容面试官也会问你(比如TCP/IP协议、算法),但更多的是会先问你了解不了解,你了解的话再继续聊,不了解的话就直接略过了,不至于因为这种问题而直接把你打入地狱。

列举一下这些加分项,如果可以的话,这些加分项还是要争取一下的。
  1、计算机系统原理。
  2、网络通信协议(TCP/IP,HTTP等)。
  3、数据结构与算法。
  4、著名开源项目的源码。
  5、你自己有很棒的开源项目。
  6、你的个人博客。

文章出自:链接http://www.imooc.com/article/19239

时间: 2024-10-14 15:05:05

Java面试准备的相关文章

JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)

hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好Hibernate. 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求

转:最近5年133个Java面试问题列表

最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我初入职场的时候,类似于 Vector 与 Array 的区别.HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在.如今,你将会被问到许多 Java 程序员都没有看过的领域,如 NIO,

java 面试 -- 4

Java面试知识点总结 本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺(阅读本文需要有一定的Java基础:若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大).本文的问题列表来自于http://www.nowcoder.com/discuss/3043,在此感谢原作者的无私分享:) 1. Java中的原始数据类型都有哪些,它们的大小及对应

Java 面试-- 1

JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童鞋们来说,当你看到这份题目的时候,你应该感动很幸运,因为,只要你把题目中的内容都搞懂了,在笔试的时候就可以游刃有余,通过面试只有半步之遥了,笔试只能反映你的JAVA技能.不管你是面试各个级别的JAVA工程师.架构师.还是项目经理,这个系列文章都是你最宝贵的资

[转载]java面试中经常会被问到的一些算法的问题

Java面试中经常会被问到的一些算法的问题,而大部分算法的理论及思想,我们曾经都能倒背如流,并且也能用开发语言来实现过, 可是很多由于可能在项目开发中应用的比较少,久而久之就很容易被忘记了,在此我分享一下在面试中经常被问到的一些基本的算法,也当做一次知识的巩固. 排序算法的一些特点: * 排序算法的分类如下:* 1.插入排序(直接插入排序.折半插入排序.希尔排序):* 2.交换排序(冒泡泡排序.快速排序):* 3.选择排序(直接选择排序.堆排序):* 4.归并排序:* 5.基数排序.* * 关于

Java面试宝典

http://www.cnblogs.com/bluestorm/p/6429894.html Java面试宝典 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点: 可替换性:多态对已存在代码具有可替换性. 可扩充性:增加新的子类不影响已经存在的类结构. 接口性:多态是超累通过方法签名,想子类提供一个公共接口,由子类来完善或

java面试回忆录

本文地址:http://blog.csdn.net/sushengmiyan/article/details/28479895 作者:sushengmiyan ------------------------- 1.报文格式定义如下: 20字符长的姓名+1字符长的性别+3字符长的年龄 姓名长度不足20的右边补空格 性别中0表示男,1表示女 年龄不足3字符的左边补0 如: denny     0026 这一段报文解析后表示姓名为denny性别为男,年龄为26 数据库表结构如下: create ta

Java面试问题总结

前几天Java面试中遇到的问题,这只是其中的一部分问题,面试中有很多问题是关于数据结构和算法的.在这里做下总结,希望有能力的人可以试着做一下,并在评论区留下您的答案,让大家相互学习.谢谢 程序设计部分 第1题* 已知类定义如下 class Node { public Double value; public List<Node> children; } 将以下递归程序改成非递归程序(两个程序的输出应保持顺序一致) publicstaticvoid process(Node node) { fo

java面试梳理

自己整理的有关java面试过的问题,有错的请矫正. 1, Spring的核心思想 控制反转和面向切面的编程 2,Spring的核心模块 反向控制与依赖注入.Bean配置以及加载 3,Scope是什么 Scope就是IOC容器里给对象设置的场景或者说存活空间,如果对象不处于Scope的限定后,容器会销毁对象. 取值有5种  分别是singleton(单一模式),prototype(多少个请求就有多少个),request(请求完即销毁),session,globalsession. 4,hibern

Java面试参考指南(二)

访问修饰符 对于基本的OOPS(面向对象)概念,请看Java面试参考指南的第一部分.访问修饰符规定了一个类如何访问另一个类及它的成员(包括方法和变量). Java中有下列访问修饰符: private:私有变量和方法(非外部类)只能被声明它们的类的实例所使用. default:类中的数据.方法和它本身能够被声明为默认default.类中所有default成员都可以被本包中的其它类所访问. protected:相比default有更高的访问权限.只有成员变量和方法能够被声明为protected.父类