Java求职基础知识
在进入正题之前,插播一段废话,没有良好的Java基础的同学怎么办,take it easy,从你看到这篇日志开始,全心全力用三周的时间,找一本页数在250页以内的Java教材(超过250页的书除非你是250,否则很难在三周内搞定),认认真真的看,老老实实的练。
接下来要说的是常见面试题,前提是要有Java基础,否则看了也没用,没有Java基础,是不会有面试的机会(会在笔试的时候被&*%*)。
Java技术面试一般分为两个部分,Java基础和Web开发(也就是传说中的J2EE)。
Java基础部分,常考的知识点有:Java基础概念、异常、集合类、多线程、流、网络编程
// **
// * 基础概念篇
// *
1. 面向对象的基本特征?
封装、继承、多态,具体内容baidu一下。如果可以的话,请把抽象也加进去,关于基本特征这个事情,有人说三,有人说四,最好都准备一下。
2. 谈谈面向对象与面向过程的区别。
比较基础,不说了。
3. int 和 Integer的区别
基本类型和包装类,int的值必须是合法的整型数字,而Integer是一个对象,可以为null。
4. 八种基本数据类型。
C语言的东西,不说了。切记不要把String当成基本数据类型。
5. String和StringBuffer、StringBuilder
baidu释义如下,比较标准:String类是字符串常量,是不可更改的常量。而StringBuffer/StringBuilder是字符串变量,它的对象是可以扩充和修改的。
我做一下补充,String在做字符串改变操作的时候,往往需要创建新的对象,内存开销大,而StringBuffer和StringBuilder会高效很多,因为他们的对象本身就是可变的。另外,StringBuffer是线程安全的,StringBuilder是StringBuffer的非线程安全版本,在通常的编程中(对线程安全五要求的情况下),尽量推荐使用StringBuilder。
6. 作用域public,private,protected,以及不写时的区别
多余废话不说,自己可以看,强调两点。
第一,不写,是包访问权限,即类内部和同一个包的方法可以访问,对于不同包的,即使是子类,也是不能访问的,这和protected有本质的区别。
第二,父类的private属性,不能被子类访问,但是子类可以通过父类中该属性声明为public的get和set方法读写该属性。
// **
// * 异常篇
// *
1. Java中的异常处理机制的简单原理
自己去查,当初面试的时候,我很直接很坦白很真诚的告诉面试官我不知道,但我同时我也让他知道了我有丰富的异常处理经验和良好的异常处理原则。
在面试的时候,你很容碰见不会的原理或是概念,没关系,只要你用过,你可以谈谈你的使用经验,最重要的是,让他知道,哥只是不会原理,但是哥更懂实践。
2. 谈谈RuntimeException和CheckedException的区别。
这个问题还有很多版本,比如说问你CheckedException和UncheckedException。
这个问题的讨论是一个永不停歇争执,baidu一下,你会发现很多人都在为使用那种Exception很纠结,纠结的那啥疼。
不过没关系,面试的时候,面试官不会让你那啥疼的,你只要谈谈基本的区别就ok了。
RuntimeException是运行时异常,而Exception是非运行是异常,也就是检查型异常(checkedException)。
运行时异常是在运行之前编译的过程中难以检测出来的异常,比如下标越界、除零异常、空指针等。该类型异常,客户端(调用方法的地方)可以处理(捕获),也可以不处理。
检查型异常是在运行之前就能确定的,比如说你把一只牛的引用赋给了马,正所谓牛头不对马嘴。该类型异常,客户端必须处理,要么捕获,要么向上抛。
3. error和Exception的区别
这个不纠结,自己baidu找(貌似给百度做了很多广告 ^ ^)。
4. try...catch...finally
同样不纠结,自己到**找。
5. finally和final的区别
这哥俩除了长得像,在没啥关联了。
finally不说了,看final。
这货给谁,谁要么断子绝孙,要么一成不变。
怎么说呢,final修饰的类,不能被继承,没有子类,最典型的例子有String。
final修饰的方法,在继承的过程中,不能被子类覆盖。
final修饰的属性,第一必须初始化,第二不能改变(基本类型和常量不改变值,对象不改变引用)。可以被子类的同名同类型属性覆盖,如果覆盖,被final修饰的特点就不复存在。
// **
// * 集合类
// *
不知道集合类是啥的,应该去面壁。
1. ArrayList、LinkedList、Vector的区别。
自己百度。
2. Map、Set、List的区别。
自己百度。
集合类的问题都比较集中,也比较中规中矩,这类问题网上一搜一大堆,我这不废话了,继续往下。
// **
// * 多线程
// *
多线程的实现方式,一般来说,可以继承自Thread类,或者实现Runnable接口,
这段东西,随便看看,动手写几行小代码就ok了。
另外,可能会问一些线程安全的问题。所谓线程安全,简单的说,就是多个线程同时访问一个变量产生的冲突问题,这个自己查资料,一两句说不清楚。想深入的话,推荐《Java并发编程实践》。这里不推荐深入,对于校招面试,这个不是考察的重点。即使考到,也是很基础的东西。
// **
// * 网络编程和流
// *
也都是硬功夫,面试的时候,貌似没有太多典型的问题,但是如果问了,一定要答上来,这是必须滴。
至于J2EE部分的,等有时间了我会补上。设计模式部分,最起码要知道Singleton,这个基础到是个人都能谈,所以不得不会,另外,至少要了解一种,免得人家面试官问你设计模式的时候冷场,推荐看看模板方法模式和观察者模式,比较简单,容易上手。
Java基础部分,如果有问到类加载器的,这是骨灰级的问题,不会也没关系,据我所知,有很多有经验的程序员也不一定清楚。
就这些了,时间有限,简单说说,如有不足,还望见谅。如果你发现还有什么需要补充的,别忘了提醒我。
觉得有用的收藏,无用的分享,望大家都能早日找到称心的工作!
以上列出的问题,都是面试中最常见的问题,希望能有所帮助。