最新java程序员面试常见问题.doc
《最新java程序员面试常见问题.doc》由会员分享,可在线阅读,更多相关《最新java程序员面试常见问题.doc(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datejava程序员面试常见问题java程序员面试常见问题1. 你对面向对象的理解?我的思路是:回答时从面向对象的三大特征回答。包括三个特征:继承、封装、多态。l 类的继承性是指从已有的一个类来extends子类,子类具有了父类的所有特征,同时,子类也可以有新的特性。比如:人是一个类,男人具有了人类的所有的特性,比如思考,比如劳动。同时,男人也有新的特性,比如男人会长胡子。
2、l 类的封装是指类把所有的操作都封闭起来,仅仅提供接口出来让其他人使用,使用的人没有必要懂得类里面的操作,只需要懂得操作接口就可以了。比如开汽车,我 们只需要懂得方向盘、刹车、油门等等的使用就可以了,没有必要知道刹车是如何构成的封闭好的操作。同时,封装也提高了程序的可替换性。比如两个汽车公司实 现刹车的方式不一样,但是,只要我们学会了使用刹车,那么,开两个汽车公司的车就都没有问题了,我们不需要考虑他们怎样实现刹车这门技术的。l 类的多态性是一个对象的某项功能可以处理不同类型的问题,或者一个子类可以将父类的某个功能替换成新的功能,具体到编程的方面来说实现类的多态有override和overloa
3、d,也就是重写和重载。l 同时面向对象还有一个很重要的概念:抽象。抽象就是一个事物的本质。当然对于本质,不同的角度却会有不同的理解。男人,在和女人一起的时候,它的本质是人。在和所有的生物一起的时候,它的本质是动物。(虽然哲学家都说事物的本质只有一个,但是,我仍然坚持我的观点)2. java中String类为什么要设计成final呢? 不允许其他类继承。这个应该不是最终原因,但这里权且也当成是一个原因。 String类中的成员属性也几乎 都设计成了private final的,这样String就被设计成一个不变类,这样有助于共享,提高性能。可以将字符串对象保存在字符串常量池中以供与字面值相同字符
4、串对象共 享。如果String对象是可变的,那就不能这样共享,因为一旦对某一个String类型变量引用的对象值改变,将同时改变一起共享字符串对象的其他 String类型变量所引用的对象的值。 String被设计为不变类,其中的offset,value都被设计成private final的,这样在多线程时,对String对象的访问是可以保证安全的。java程序语言的许多特性依赖于不可变的String对象3. 说说Hashpmap的原理 HashMap概述HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是
5、它不保证该顺序恒久不变。 HashMap的数据结构在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。4. 什么是AOP1.概念介绍:所谓AOP,即Aspect orientied program,就是面向方面的编程,2.什么是方面:所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或
6、责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。3.Aop的原理:面向切面编程,将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。4.实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码5. IOC控制反转也叫依赖注入。利用了工厂模式将对象交给容器管理,你只需要在spring配置文件中配置相应的bean,以及设置相关的属性,让s
7、pring容器来生成类的实例对象以及管理对象。6. 数据库触发器的优缺点以及用法触发器本质上讲就是事件监控器,可以定义在数据库系统进行某一个操作的前后。当数据库系统在进行特定的操作时,发现有触发器定义,就去执行触发器定义的功能,从而满足某些特定的需要。(触发器就是你在做某个操作的时候触发另外一个操作)例如,在更新某些数据后,再去更新特定的数据。这就可以定义一个触发器完成这样的需要。触发器的优点:以事件方式来处理. 当数据发生变化的时候, 自动作处理。缺点:当数据库之间 导出导入的时候, 可能会引起不必要的触发逻辑。7. oracle,mysql,SqlServer三种数据库的分页查询的实例My
8、Sql:MySQL数据库实现分页比较简单,提供了 LIMIT函数。一般只需要直接写到sql语句后面就行了。LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数。例如:select * from table WHERE LIMIT 10; #返回前10行select * from table WHERE LIMIT 0,10; #返回前10行select * from table WHERE LIMIT 10,20; #返回第10-20行数据Ora
9、cle:考虑mySql中的实现分页,select * from 表名 limit 开始记录数,显示多少条;就可以实现我们的分页效果。但是在oracle中没有limit关键字,但是有 rownum字段rownum是一个伪列,是oracle系统自动为查询返回结果的每行分配的编号,第一行为1,第二行为2,以此类推。第一种:代码如下:SELECT * FROM( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM = 21其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。R
10、OWNUM = 21控制分页查询的每页的范围。上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM = 40这句上。选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM = 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM 21 and e1.r(SELECT MAX(id)FROM (SELECT TOP 20 idFROM TestTableORDER BY id) AS T)ORDE
11、R BY ID-SELECT TOP 页大小 *FROM TestTableWHERE (ID (SELECT MAX(id)FROM (SELECT TOP 页大小*页数 idFROM 表ORDER BY id) AS T)ORDER BY ID分页方案三:(利用SQL的游标存储过程分页)代码如下:create procedure XiaoZhengGesqlstr nvarchar(4000), -查询字符串currentpage int, -第N页pagesize int -每页行数asset nocount ondeclare P1 int, -P1是游标的idrowcount int
12、exec sp_cursoropen P1 output,sqlstr,scrollopt=1,ccopt=1,rowcount=rowcount outputselect ceiling(1.0*rowcount/pagesize) as 总页数-,rowcount as 总行数,currentpage as 当前页set currentpage=(currentpage-1)*pagesize+1exec sp_cursorfetch P1,16,currentpage,pagesizeexec sp_cursorclose P1set nocount off其它的方案:如果没有主键,可以
13、用临时表,也可以用方案三做,但是效率会低。建议优化的时候,加上主键和索引,查询效率会提高。通过SQL 查询分析器,显示比较:结论是:分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用在实际情况中,要具体分析。 8. 静态变量和实例变量的区别?在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配
14、空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。9. abstract class和interface有什么区别?含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体
15、(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。下面比较一下两者的语法区别:1.抽象类可以有构造方法,接口中不能有构造方法。2.抽象类中可以有普通成员变量,接口中没有普通成员变量3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。4. 抽
16、象类中的抽象方法的访问类型可以是public,protected。但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。5. 抽象类中可以包含静态方法,接口中不能包含静态方法6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。7. 一个类可以实现多个接口,但只能继承一个抽象类。下面接着再说说两者在应用上的区别:接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方
17、面发挥作用,可以实现代码的重用。10. abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 都不是。理由如下:abstract的method 不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系!native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它也不能是抽象的,不能与abstract混用。11. synchronized应该是作用在一个具体的方法上才有意义。而且,方法上的synchronized同步所使用的同步锁对象是this,而抽象方法上无法
18、确定this是什么。12. Java中的异常处理机制的简单原理和应用。异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息,可以用一个对象来表示,Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息。Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception,Error 表示应用程序本身无法克服和恢
19、复的一种严重问题,程序只有死的份了,例如,说内存溢出和线程死锁等系统问题。Exception表示程序还能够克服和恢复的问题,其中又分为系统异常和普通异常,系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死掉,例如,数组脚本越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常(ClassCastException);普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间
20、不够,发生这样的异常后,程序不应该死掉。java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须try.catch处理或用throws声明继续抛给上层调用方法处理,所以普通异常也称为checked异常,而系统异常可以处理也可以不处理,所以,编译器不强制用try.catch处理或用throws声明,所以系统异常也称为unchecked异常。13. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 分几种情况: 1.其他方法前是否加了synchronized关键字,如果没加,则能。 2.如果这个方法内部调用了wait,则可以进入其他s
21、ynchronized方法。 3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。4.如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this。14. List 和 Map 区别?List是存储单列数据的集合,Map是存储键和值这样的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。15. List、Map、Set三个接口,存取元素时,各有什么特点?首先,List与Set具有相似性,它们都是单列元素的集合,所以,它们有一
22、个功共同的父接口,叫Collection。Set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意,不是仅仅是相同)的对象。Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。List表示有先后顺序的集合, 注意,不是那种按年龄、按大小、按价格之类的排序。当我们多次调用add(Obj e)方法时,每次加入的对象就像火车站买票有排队顺序一样,按先来后到的顺序排序。有时候,也可以插队,即调用add(int index,Obj e)方法,就可以指定当前对象在集合中的存放位置。一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 java 程序员 面试 常见问题
限制150内