Java面试题大全

上传人:xgs****56 文档编号:10225993 上传时间:2020-04-10 格式:DOC 页数:190 大小:1.22MB
返回 下载 相关 举报
Java面试题大全_第1页
第1页 / 共190页
Java面试题大全_第2页
第2页 / 共190页
Java面试题大全_第3页
第3页 / 共190页
点击查看更多>>
资源描述
Java高级软件工程师面试题Java高级软件工程师班 级:_姓名:_联系电话:_第 188 页 共 190 页写在前面的话从我们翻开厚厚面试题学习开始,预示着我们离开学校的脚本越来越近了,就业压力越来越大了。偶尔会在脑海中勾画、想像我们以后工作的情景了,而步入社会参与竞争的第一步就是从学习如何面试!如何找工作开始。面试包括人事交流沟通与技术问答等相关环节,在这本面试题书中包含了这两部分内容,第一部分主要讲人事问题的一些常见问题,第二部分讲技术问答。在技术面试问答题中无法将所有公司可能问到的所有问题都一一收录进去;也无法对每个问题,每个知识做深入精细的分析讲解,因为这是一个没有结点的工作,所以除了学习这本书上的面试问答的知识外与课程相关的知识我们也要去学习。在学校期间我们在学习老师教授给我们的专业知识的同时还有些知识是无法在学校的课堂中吸取到的,如:缓存cache、事务与并发、海量数据、Lucene、NoSQL、Hadoop、系统日志、单点登录、UI框架、项目管理与集成、设计模式、移动互联网开发、各公司自有开发框架等等,还有很多很多,因为软件开发行业所包含的技术包罗万象。我们虽然了目前软件行业的主流技术,但也有一些企业,因架构师或项目经理的技术特点,会选择一些我们未接触或未听说过的的技术架构,那么作为即将步入软件工程师行业的我们,必须要有重新学习新技术的心态和作好准备学习新技术的准备。同样,在以后的工作过程中也会遇到一些我们之前未接触过的技术或未遇到的项目Bug,这些都在要求我们在今后的工作和学习中还需要不断的学习,另外还要持有一颗:生命不息,学习不止的心。只有这样,我们才能成为软件行业与时俱进的技术人才。最后也希望每位IT学子,通过面试题能够获得更多的收获,学有所成。也预祝每们学子能找到自己满意的工作。1、 简历制作与面试技巧 简历相关1) 简历要求简历主要是用人单位用来认识你、了解你的一种方式或一种参考,这点很重要。因为用人单位和你都不太了解对方,无论对你或者用人单位而言都是第一次打交道,在刚开始接触中。对你而言简历是你想要展现你的过去的一种形式。另外简历是我们在求职过程中与用人单位打交道的第一环节,这个环节过关了,才有可能进入下一环节。所以我们要认真的准备我们的简历,把我们优秀的过去通过简历来展现给面试官;让面试官通过简历来认识、了解你过去的经历。2) 简历内容包括个人基本信息、专业技能、工作经历、项目经验、所获证书、个人评价等内容。这些内容决定了你是否符合招聘岗位要求。基本信息:面试官通过这部分来了解你是男,还是女,年龄、工作经验、应聘岗位、最高学历,看看这些方面是否符合他的招聘要求。专业技术:面试官通过专业技术主要了解你对各种专业技能的掌握和使用情况,对比你所具有的这些技能是否符合他所招聘的岗位技能。工作经历:面试官主要来了解你之前是否有工作的经验的人,还是应届生等等。项目经验:面试官主要看看你是否有从事过相关工作的实际开发经验。所获证书:看看是何种证书,证书的含金量怎么样。人个评价:看看你的综合素质、个人性格等方面3) 简历示例u 基本信息个人信息 姓名:XXXX性别:XX年龄:22现 居 地:XX市XX区毕业院校:湖北大学工作经验:2年专 业计算机科学与技术学 历:本科联系电话:XXXX应聘职位:JAVA软件工程师电子邮件:XXXXu 专业技能专业技能 l 熟悉C、C#、Java等程序设计语言。l 熟练掌握HTML、XML、CSS层叠样式、Javascript等前端脚本语言l 熟练使用Struts1、Struts2、Spring3、Hibernate3、MyBatis、JQuery等主流开源框架进行应用开发。l 熟练使用Oracle,SQLServer,MySQL关系型数据库。l 熟练使用Tomcat,Weblogic,JBoss,Apache HTTP Server等服务器。l 熟练使用MyEclipse,Dreamweaver,PL/SQL,PowerDesiger等开发工具。 l 熟悉JBPM工作流引擎原理 u 工作经历工作经验 工作时间 单位 职位2010.32012.12武汉智诚信息科技有限公司 Java工程师2009.5-2010.1中地数码武汉分公司Java工程师u 项目经验项目经验 1 2010年4月-2010年10月:l 项目名称: 湖北黄冈市房地产税收一体化系统l 开发框架: Struts2.0+Hibernate3.0+Spring2.0+Jquery+Xfirel 开发环境: jdk、tomcat、eclipsel 数据库: Oracle10 l 项目背景:为了实现客户方无纸化办公,提高办事效率,以及实现对下属各税务分局进行统一的税收管理,该管理系统包括:税源信息管理、纳税评估、行政执法、综合查询、系统设置、信息变更、电子档案、保有环节、信息比对、零散契税10个大模块。l 责任描述:(1)首页电子地图显示:主要基于电子地图框架MapEasy进行二次开发,在原型功能上实现地物标注、等级缩放、瓦片移动、地图切换等功能。二次开发后通过地理位置显示各税务局所属片区土地交易信息、在建项目工程信息、并按坐标进行标注显示、查看、预览效果图,实现更方便、快捷、直观的操作和显示功能。(2)各行政区税费统计:主要根据不同地税分局统计出欠税纳税人数、欠税总金额、应缴总金额、已缴总金额等,并以图形方式显示数据。(2)系统设置:主要包括用户管理、权限设置、个人纳税人管理、单位纳税人信息管理、土地管理、税率设置、地图管理、基础数据管理。 面试环节1) 面试准备1、 了解清楚岗位需求与岗位职责。2、 检查简历描述是否与所应聘的岗位需求一致。3、 了解用人单位的一些基本信息,如:从事什么行业的,公司产品、岗位要求4、 准备好用人单位所需的一切证件,以免白跑一趟。2) 面试过程1、 普通话标准。2、 表现要自信、大方。3、 沟通交流过程中表情自然、得当。4、 着装要让人感觉很正自然、看着很舒服。5、 交流过程中懂得谦让和尊重面试官3) 面试自我介绍1、 介绍个人基本信息,包括毕业院校。2、 介绍之前的工作经历,包括岗位名称3、 介绍之前参与的项目,包括客户方名称、技术架构4) 面试注意事项内容过多,附网址:http:/job.group.iteye.com/group/wiki/?category_id=13上面的版块叫求职宝典,是iteye(专业Java技术站点)上主要针对IT行业求职过程分析和求职问题注意事项,包括如何写简历、如何跟IT经理面谈等内容。作为一个即将步入IT行业的初级程序员来说里面的内容不可错过。2、 职场相关人在求职或学习生活过程中,很多知识和信息是通过环境给我们传达的,下面我们随着这些问题来学习一下工作环境中的学问,请回答以下题目: 学习教育、培训相关1、 你们学校是属于几本?2、 你的学历是全日制,还是非全日制? 全日制3、 你为什么选择你所学的专业?有什么原因?4、 你能列举一下:大一、大二、大三、大四分别学了哪些课程?你比较喜欢哪门课程?为什么喜欢?大一:C语言程序设计 毛邓三 计算机科学导论 法律基础 大学英语大二:数据结构 计算机原理 面向对象程序设计语言大三:数据库理论 操作系统 计算机网络大四主要是一些实习和毕业论文5、 你毕业的毕业论文是什么题目?主要内容是什么?花了多长时间?是否有答辨,你的导师是怎么评论你的论文的? 浅谈 超市收银系统 2-3个月 有答辩 毕业论文满分 20分 我得了20分6、 你毕业时修了多少学分?毕业时取得了哪些证书?是否有学位证? 180个学分 大学英语四级 有7、 你的英语过了几级?英语的成绩是多少? 过了四级(英语四级简称CET4) (英语满分710分 425及格分数)8、 说说你的大学生活?让你印象最深的是什么?9、 你们学校有几个校区?每个校区有什么特点?你在哪个校区?附近有什么标志性的建筑?怎么到你们学校?10、 你目前的档案在哪里?可以转到我们公司吗? 职场相关1、 你们公司在XX(市)的什么地方?公司有多少人?有多少个部门?2、 你们公司的网址是什么?联系电话是多少?3、 你们公司的大致的组织机构是怎么构成的?你属于哪个部门,你们部门在职责的是什么?你在公司的职位?是的直接汇报对象哪个职位?4、 你们公司主要面向哪些行业的?有哪些客户,列举一下?主要有做过哪些系统?5、 你的项目经理叫什么名字,能介绍一下你对他的了解和看法吗?6、 你在公司参与过哪些项目?你们公司跟哪些其它的公司有过合过?7、 为什么离职?你有离职证明吗?8、 你在公司做项目时,遇到困难怎么克服的?举例说明。9、 你对加班怎么看?10、 你和同事之间的关系怎么样?你怎么看待同事间相处关系?11、 你所工作的城市有什么特色?城市有什么特产可以向我们介绍的?有什么好玩的景点可以推荐一下吗?12、 平时下班后做些什么?周末在家主要做什么?13、 你的项目代码可以拿来我们看看吗?14、 谈谈你对工资的要求?15、 你以前的工资构成?16、 你的工资扣税吗?是怎么扣的?17、 你原来有保险吗?保险号是多少?你原来的公司还有什么福利?18、 你来来的工作是向谁汇报,一般会汇报一些什么内容?19、 你平时一般会访问哪些技术网站?3、 技术面试题(1) Java部分1、 列举出JAVA中6个比较常用的包【天威诚信面试题】【参考答案】java.lang;java.util;java.io;java.sql;java.awt;java.net;javax.swing2、 JDK中哪些类是不能继承的?【信雅达面试题】【参考答案】 不能继承的是类是那些用final关键字修饰的类。一般比较基本的类型或防止扩展类无意间破坏原来方法的实现的类型都应该是final的。3、 String是最基本的数据类型吗? 【天能智健面试题】【参考答案】 基本数据类型包括byte、int、char、long、float、double、boolean和short。 所以String不属于基本数据类型范畴内,但String属于最常见一种引用类型。4、 short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 【博炎科技面试题】【参考答案】 对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器会提示错误,需要强制转换类型。对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,Java编译器会对它进行特殊处理,因此可以正确编译。 【分析】主要考查几种基本数据类型在运算时的,由低到高会自动转换,而由高到低时会强制转换。5、 Java 对象初始化顺序?【腾鹏科技面试题】【参考答案】 分为两种,一种是本类的初始化,一种是含有父类的初始化顺序。这里分开来说,本类的初始化顺序是:静态变量、静态初始化块、变量、初始化块、构造函数继承类的初始化顺序是:父类静态变量、父类静态初始化块、子类静态变量、子类静态初始块、父类变量、父类初始化块、父类构造函数、子类变量、子类初始化块、子类构造函数。【分析】static System.out.println(静态块); System.out.println(初始化模块); public ClassName() System.out.println(构造方法); 说明:原则上回答全面的话,应该是完整的说出带有继承的这种类的初始化过程,下面有个步骤可以参考:1. 装载程序的时候首先找到的是它的基(父)类,如果有多层基(父)类则会一级一级的往上找最后找到根基(父)类。 2.执行根基础(父)类中的static初始化,再执行下一个衍生类中的static,依此类推,一直保持这个顺序。3.此时类已经装载完毕,开始创建对象,所有的基本数据类型都会设成它们的默认值,对象句柄设为null4.调用基础(父)类的构造方法,基础(父)类的构建采用与衍生类构造方法完全相同的处理过程。5.构造方法初始完之后,进行变量的初始化。6.执行构造方法中剩余的部分。6、 写几个线程安全类,不安全的,支持排序的类名?【软通动力面试题】【参考答案】 线程安全类:Vector 、Hashtable、Stack。 线程不安全的类:ArrayList、Linkedlist、HashSet、TreeSet、HashMap、TreeMap等。 支持排序的类有HashSet、LinkedHashSet、TreeSet等(Set接口下的实现都支持排序)【分析】此题主要考查集合框架的知识。在集合框架中Collection接口为集合的根类型,提供集合操作的常用API方法,该接口下派生出两个子接口,一个是不支持排序的List接口,一个是有自身排序的Set接口,所以回答排序与不排序分别从两接口的实现中在作答。线程安全上来说,Vector类比同属于List接口的ArrayList要早,是一个线程安全的类,在JDK1.2以后才推出一个异步的ArrayList类,比Vector类效率高。同理Stack继承自Vector也线程安全的类,另外在在Map接口的实现在Hashtable也是个线程安全的类。7、 哪几个方法可以实现一个线程?【上海华信面试题】【参考答案】一是继承Thread ,重写 Thread 类的方法 run方法;另种是实现 runnable 接口并实现 run方法。【分析】考查线程的基本实现,很多公司喜欢考查这方面知识,另外补充一下关于线程的run方法,在多线程API中启动一个线程是调用start()方法,线程进入就绪状态。8、 STOP()和SUSPEND()不推荐使用的原因?【参考答案】 stop()是因为它不安全。它会解除由线程获取的所有锁定,当在一个线程对象上调用stop()方法时,这个线程对象所运行的线程就会立即停止,假如一个线程正在执行:synchronized void x = 3; y = 4;由于方法是同步的,多个线程访问时总能保证x,y被同时赋值,而如果一个线程正在执行到x = 3;时,被调用了 stop()方法,即使在同步块中,它也干脆地stop了,这样就产生了不完整的残废数据。而多线程编程中最最基础的条件要保证数据的完整性,所以请忘记线程的stop方法,以后我们再也不要说“停止线程”了。而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被挂起的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就 会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用 wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。 【分析】9、 =和equals方法有什么区别?【中科软】【参考答案】=操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用=操作符。如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用=操作符进行比较。equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:Stringa=newString(foo);Stringb=newString(foo);两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a=b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = ;input.equals(“quit”),如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:booleanequals(Objecto)returnthis=o;这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用=操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用=会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。10、 静态变量和实例变量的区别? 【参考答案】 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加,类中的成员变量也属于实例变量.在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。public class VariantTestpublic static int staticVar = 0; public int instanceVar = 0; public VariantTest()staticVar+;instanceVar+;System.out.println(“staticVar=” + staticVar + ”,instanceVar=” + instanceVar);备注:这个解答除了说清楚两者的区别外,最后还用一个具体的应用例子来说明两者的差异,体现了自己有很好的解说问题和设计案例的能力,思维敏捷,超过一般程序员,有写作能力!11、 构造器的名能不能和类的名字相同? 【参考答案】 构造器的名称必须与类名相同。【分析】 构造器或构造函数(有些书这样叫)主要用来对类的成员变量进行初始化,当类创建实例时调用。12、 在一个主方法类可不可以调用一个非静态的方法?【参考答案】可以调用。因为Java的主方法(main)方法本身也是static类型方法,一个static类型方法,发起对另一个static方法的调用没有问题。【分析】静态方法可以调用其它的静态方法,但是不能调用非静态方法,这个好比Java中的类变量与实例变量的关系。类变量是被所有类成员共享,而实例变量只被该实例共享,13、 一个类中可不可以有2个公共的方法? 【参考答案】 可以。Java中对公共方法的个数没有约束,但是对公共的类有约束,一个Java源文件中只能定义一个public类型的类。 14、 GC是什么,为什么要使用它?【阿斯拓】【参考答案】 GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域,从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。 【分析】15、 说一下垃圾回收的原理,可以直接从内存中回收吗?【参考答案】 Java语言中一个显著的特点就是引入了垃圾回收机制,使c+程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收,因为Java语言规范并不保证GC一定会执行。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。【分析】16、 Java的异常有哪几种,有什么区别?【参考答案】 两大类,一般异常和运行时异常。一般异常,这些异常是在定义方法时声明抛出的,这些异常必需用try catch抛出,或throws处理,如果不处理,程序将编译失败。比如:IOException、FileNotFoundException、SQLException等。运行时异常是程序运行时可能报出的异常。可以用try catch抓取,也可以不做任何处理。例如:NullPointerException 异常就是一种比较常见的运行时异常。【分析】17、 switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 【参考答案】 (小的数据类型可以转成大数据类型 大不能转小) (比int小的数据类型都可以用在switch语句上 )在switch(表达式)中,括号表达式只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。 18、 Integer与int的区别?【参考答案】 int是java提供的8种原始数据类型之一,另外Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。19、 Java Reflection是什么?【】【参考答案】 JAVA反射,Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说自审,并能直接操作程序的内部属性。【分析】20、 写几个java.lang.Object类中的方法名称。【参考答案】 主要有equals()、toString()、getClass()、hashCode()、clone()、 notify()、wait()、notify()方法。【分析】这种题能记多少个就说多少个,不一定要求你所有的都记住,但是要理解其中部分重要方法的含义和作用。21、 &和&的区别?【参考答案】 &和&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。&还可以用作位运算符,任何时候都全计算,所有为真,则返回真。当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位。【分析】 先说分别说两者的作用,再说出&和&各自的不同之处。22、 数组有没有length()这个方法,String有没有length()这个方法。【参考答案】 数组没有length()方法,但有length属性String有length()方法。【分析】考查平时使用数组和字符串的一些细节,一般在使用23、 String s=new String(“xyz”)创建了几个对象【参考答案】2个string对象,一个是=null的s,一个是=“xyz”的string 两个或一个”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过xyz,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。【分析】24、 能不能自己写个类,也叫java.lang.String?可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去加载jre.jar包中的那个java.lang.String。由于在tomcat的web应用程序中,都是由webapp自己的类加载器先自己加载WEB-INF/classess目录中的类,然后才委托上级的类加载器加载,如果我们在tomcat的web应用程序中写一个java.lang.String,这时候Servlet程序加载的就是我们自己写的java.lang.String,但是这么干就会出很多潜在的问题,原来所有用了java.lang.String类的都将出现问题。虽然java提供了endorsed技术,可以覆盖jdk中的某些类,具体做法是.。但是,能够被覆盖的类是有限制范围,反正不包括java.lang这样的包中的类。例如,运行下面的程序:package java.lang;public class String /* * param args */public static void main(String args) / TODO Auto-generated method stubSystem.out.println(string);报告的错误如下:java.lang.NoSuchMethodError: mainException in thread main这是因为加载了jre自带的java.lang.String,而该类中没有main方法。25、 你对面向对象思想的理解?【参考答案】 面向对象编程(Object-Oriented Programming)简称OOP技术,是开发计算机应用程序的一种新方法、新思想。过去的面向过程编程中常常会导致所有的代码都包含在几个模块中,使程序难以阅读和维护,在做一些修改时常常牵一动百,使以后的开发和维护难以为继。而使用OOP技术,使用许多代码模块,每个模块都只提供特定的功能,它们是彼此独立的,可以增加代码重用的几率,更加有利于软件的开发、维护和升级。另外OOP的三大核心特性:继承、封装、多态的特性,使得在面对象编上能够设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低,所以这一编程思想是目前一种应用最为普遍的软件设计思想。【分析】 26、 最常见的runtime exception运行时异常?【参考答案】 ClassCastException(类型转换异常)、NumberFormatException(格式化异常)、 ArrayIndexOutOfBoundsException(数组越界异常)、ArithmeticException(算术异常)、 NullPointerException(空指针异常)等等【分析】这道题主要考查大家平时在项目开发过程中经常遇到的一些异常类型信息,通过这些异常来考查大家的项目经验与项目排错能力。27、 用JDBC来实现访问数据库记录可以采用下面的几个步骤: 【参考答案】 1、 通过驱动器管理器获取连接接口(Connection)。 2、 获得Statement或它的子类。 3、 指定Statement中的参数。 4、 通过Statement发送SQL语句。 5、 检查并处理返回的结果。 6、 关闭Statement。 7、 关闭连接接【分析】28、 Error和 exception的区别与联系?【参考答案】 error表示恢复不是不可能,但很困难的情况下的一种严重问题。比如说内存溢,网络故障等,不可能指望程序能处理的一类错误。Exception表示一种由程序设计或实现问题,表示程序运行时异常,如空指针异常 数组下标越界。像我们常说的异常处理,就是属于这类,一般程序可以捕获和处理这些异常。【分析】这道题的难点在Error很多时候由于我们无法重现这种Error导致很多同学甚至不知道Error到底是什么,所以很容易把题目中的两种错误划上等号。29、 Strings=Hello;s=s+world!;这两行代码执行后,原始的String对象中的内容到底变了没有?【参考答案】 没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 Hello,然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为Helloworld!,原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为 String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。同时,我们还可以知道,如果要使用内容相同的字符串,不必每次都new一个String。例如我们要在构造器中对一个名叫s的String引用变量进行初始化,把它设置为初始值,应当这样做:publicclassDemoprivateStrings;.publicDemos=InitialValue;.而非s=newString(InitialValue);后者每次都会调用构造器,生成新对象,性能低下且内存开销大,并且没有意义,因为String对象不可改变,所以对于内容相同的字符串,只要一个String对象来表示就可以了。也就说,多次调用上面的构造器创建多个对象,他们的String类型属性s都指向同一个对象。上面的结论还基于这样一个事实:对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同。至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题。所以Java标准类库还提供了一个可变版本,即 StringBuffer。30、 Jdk1.5的新特性?【参考答案】 JDK1.5的一个重要主题就是通过新增一些特性来简化开发,这些特性主要包括:泛型、ForEach循环、自动装包/拆包、枚举、可变参数、静态导入这些。【分析】31、 面向对象的特征有哪些方面?【参考答案】面向对象的编程语言有封装、继承 、多态等3个主要的特征。u 封装u 将其具体的属性和方法的实现隐藏起来 只提供方法的调用)封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个“模块”中,也就是一个类中,属性用变量定义,行为用方法进行定义,方法可以直接访问同一个对象中的属性。u 继承u 将已有的方法和属性和方法保留 再加上自己特有的的属性和方法形成一个新类 即继承在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。u 多态(分为重写和重载)u 重写:子类和父类具有相同的方法名和参数 返回值类型,即子类重写父类的方法u 重载:在同一类中方法名相同 方法的参数类型 或个数不同多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。 32、 JVM工作原理?运行jvm 字符码的工作是由解释器来完成的。解释执行过程分三步进行: 代码的装入、代码的校验、和代码的执行。 装入代码的工作由“类装载器class loader”完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。在本台计算机的所有类都在同一地址空间中,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用与特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内布局,java很好地解决了由超类改变而使子类 崩溃的问题,同时也防止了代码的非法访问。随后,被装入的代码由字节码校验器进行检查。校验器可以发现操作数栈益处、非法数据类型转化等多种错误。通过校验后,代码便开始执行了。 Java字节码的执行有两种方式: 1)即时编译方式:解释器先将字节编译成机器码,然后再执行该机器码。 2)解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节。 码程序的所有操作。 33、 说说Java中的内存分配? Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作它用。 堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。 引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因。但是在写程序的时候,可以人为的控制。34、 final, finally, finalize的区别。 【参考答案】 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集的方法时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用35、 Extends和Implement的不同?【参考答案】extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 比如 class A extends B implements C,D,E36、 抽象类是否可以没有抽象方法?为什么?【参考答案】 可以在java中用abstract关键字来修饰一个类时,这个类叫做抽象类。抽象类中不一定要包含abstract方法,但一个类中包含了abstract方法,则这个类必须声明为abstract类。37、 静态的多态和动态的多态的区别?【参考答案】 静态的多态: 即为重载 ;方法名相同,参数个数或类型不相同。(overloading)动态的多态: 即为重写;子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法 实现接口的实例传与接口的引用调用的实现类的方法。38、 说出一些常用的类,包,接口,请各举5个?【参考答案】 常用的类:String、StringBuffer、 Integer 、Vector、ArrayList、Hashtable等常用的包:java.lang java.io java.util 、java.sql 。常用的接口:集合中的List、Set、 Map接口;与Servlet API相关的Servlet接口、HttpServletRequest,HttpServletResponse,HttpSession接口等。39、 Collections和Collection的区别【天晟科技】【参考答案】 Collection是个java.util下的接口,它是各种集合结构的父接口,定义了集合对象的基本操作方法。Collections是个java.util下的工具类,它包含有各种有关集合操作的静态方法,主要是针对集合类的一个帮助类或者叫包装类,它提供一系列对各种集合的搜索,排序,线程安全化等操作方法。40、 Class.forName的作用?为什么要用? 【参考答案】按参数中指定的字符串形式的类名去搜索并加载相应的类,如果该类字节码已经被加载过,则返回代表该字节码的Class实例对象,否则,按类加载器的委托机制去搜索和加载该类,如果所有的类加载器都无法加载到该类,则抛出ClassNotFoundException。加载完这个Class字节码后,接着就可以使用Class字节码的newInstance方法去创建该类的实例对象了。有时候,我们程序中所有使用的具体类名在设计时(即开发时)无法确定,只有程序运行时才能确定,这时候就需要使用Class.forName去动态加载该类,这个类名通常是在配置文件中配置的,例如,spring的ioc中每次依赖注入的具体类就是这样配置的,jdbc的驱动类名通常也是通过配置文件来配置的,以便在产品交付使用后不用修改源程序就可以更换驱动类名。41、 Socket如何获取本地ip地址? 【参考答案】 InetAddress类提供的API来访问。InetAddress.getLocalAddress()【分析】42、 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类【天威诚信面试题】【参考答案】 接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承具体类。抽象类中可以有静态的main方法。备注:只要明白了接口和抽象类的本质和作用,这些问题都很好回答,你想想,如果你是java语言的设计者,你是否会提供这样的支持,如果不提供的话,有什么理由吗?如果你没有道理不提供,那答案就是肯定的了。 只有记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。43、 用最有效率的方法算出2乘以8等於几? 【参考答案】 2 3【分析】因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以2乘以8等於几的最效率的方法是2 3。44、 char型变量中能不能存贮一个中文汉字?为什么? 【参考答案】 char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。45、 写clone()方法时,通常都有一行代码,是什么? 【参考答案】clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。46、 说说常用集合类有哪些?有哪些方法?【参考答案】 通常我们使用的集合类都大多是由List、Set、Map这三类接口派生出来的类,例如:ArrayList、Vector、LinkedList、Stack、TreeSet、Hashtable、HashMap等集合类的大部分方法都是由Collection接口定义的,主要包括有:add(Ee)、remove(Object e)、addAll(),remove()、contains(Object obj)、clear()等47、 请说出作用域public,private,protected,以及不写时的区别?【天威诚信面试题】【参考答案】 这四个作用域的可见范围如下表所示。这些作用域也称 介词说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。作用域 同一类 同一package 子孙类 其他package Public(公共的) protected(受保护的) default(默认的) private(私有的) 备注:只要记住了有4种访问权限,4个访问范围,然后将全选和范围在水平和垂直方向上分别按排从小到大或从大到小的顺序排列,就很容易画出上面的图了。48、 构造器Constructor是否可被override? 【亿阳通讯面试题】【参考答案】 构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。 49、 是否可以从一个static方法内部发出对非static方法的调用? 【世承软件面试题】【参考答案】 不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。50、 Math.round
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!