1、java 面试、笔试题(2011 版)整理-郦土欲想成功,必须用功!1. Java 基础部分 41、一个“.java“源文件中是否可以包括多个类(不是内部类)?有什么限制? 42、Java 有没有 goto? 43、说说 s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 57、char 型变量中能不能存贮一个中文汉字?为什么? .58、用最有效率的方法算出 2 乘以 8 等於几? .59、请设计一个一百亿的计算器 510、使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? .611、“=“和 equals 方法究竟有什么区别?
2、 612、静态变量和实例变量的区别? 613、是否可以从一个 static 方法内部发出对非 static 方法的调用? 614、Integer 与 int 的区别 715、Math.round(11.5)等於多少 ? Math.round(-11.5)等於多少? 716、下面的代码有什么不妥之处? .717、请说出作用域 public,private,protected,以及不写时的区别 .718、Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型? .719、构造器 Constructor 是否可被 override? .720、接口是否可
3、继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的 main 方法? .821、写 clone()方法时,通常都有一行代码,是什么? 822、面向对象的特征有哪些方面 823、java 中实现多态的机制是什么? .824、abstract class 和 interface 有什么区别? 825、abstract 的 method 是否可同时是 static,是否可同时是 native,是否可同时是 synchronized?926、什么是内部类?Static Nested Class 和 Inner
4、Class 的不同。 927、内部类可以引用它的包含类的成员吗?有没有什么限制? 1028、Anonymous Inner Class ( 匿名内部类) 是否可以 extends(继承) 其它类,是否可以 implements(实现)interface( 接口 )?1029、super.getClass()方法调用 1130、String 是最基本的数据类型吗? 1131、String s = “Hello“;s = s + “ world!“;这两行代码执行后,原始的 String 对象中的内容到底变了没有? .1132、是否可以继承 String 类? .1133、String s = n
5、ew String(“xyz“);创建了几个 String Object? 二者之间有什么区别? .1134、String 和 StringBuffer 的区别 1235、如何把一段逗号分割的字符串转换成一个数组? .1236、数组有没有 length()这个方法? String 有没有 length()这个方法? 1237、下面这条语句一共创建了多少个对象:String s=“a“+“b“+“c“+“d“; .1238、try 里有一个 return 语句,那么紧跟在这个 try 后的 finally 里的 code 会不会被执行,什么时候被执行,在 return 前还是后? 1239、下面
6、的程序代码输出的结果是多少? 1340、final, finally, finalize 的区别。 1441、运行时异常与一般异常有何异同? 1442、error 和 exception 有什么区别? 1443、Java 中的异常处理机制的简单原理和应用。 1444、请写出你最常见到的 5 个 runtime exception。 1445、JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally 分别代表什么意义?在 try 块中可以抛出异常吗? 1546、java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop() 和 sus
7、pend()方法为何不推荐使用? 1547、sleep() 和 wait() 有什么区别? 1548、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 1749. 下面两个方法同步吗?(自己发明) .1750、多线程有几种实现方法?同步有几种实现方法? .1751、启动一个线程是用 run()还是 start()? . .1752、当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象的其它方法 ? .1753、线程的基本概念、线程的基本状态以及状态之间的关系 1754、简述 synchronized 和 java.util.concurrent.lo
8、cks.Lock 的异同 ? .1755、设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程对 j 每次减少 1。写出程序。 1956、子线程循环 10 次,接着主线程循环 100,接着又回到子线程循环 10 次,接着再回到主线程又循环 100,如此循环 50 次,请写出程序。 2057、介绍 Collection 框架的结构 2358、Collection 框架中实现比较要实现什么接口 .2359、ArrayList 和 Vector 的区别 .2360、HashMap 和 Hashtable 的区别 2361、List 和 Map 区别? .2462、List, Set, M
9、ap 是否继承自 Collection 接口? 2463、List、Map、Set 三个接口,存取元素时,各有什么特点? .2464、说出 ArrayList,Vector, LinkedList 的存储性能和特性 .2465、去掉一个 Vector 集合中重复的元素 2466、Collection 和 Collections 的区别。 .2567、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用= 还是 equals()? 它们有何区别? .2568、你所知道的集合类都有哪些?主要方法? 2569、两个对象值相同(x.equals(y) = true),但却可有不同的 h
10、ash code,这句话对不对? .2570、TreeSet 里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的 compareTo 方法,还是使用的子类的 compareTo 方法,还是抛异常!2571、说出一些常用的类,包,接口,请各举 5 个 2672、java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 2673、字节流与字符流的区别 2674、什么是 java 序列化,如何实现 java 序列化?或者请解释 Serializable 接口的作用。 2775、描述一下 JVM 加载 class 文件的原理机制? .27
11、76、heap 和 stack 有什么区别。 2777、GC 是什么? 为什么要有 GC?2778、垃圾回收的优点和原理。并考虑 2 种回收机制。 2779、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 2880、什么时候用 assert。 2881、java 中会存在内存泄漏吗,请简单描述。 .2882、能不能自己写个类,也叫 java.lang.String? 3083. Java 代码查错 30二. 算法与编程 .321、编写一个程序,将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件中,a.txt 文
12、件中的单词用回车符分隔,b.txt 文件中用回车或空格进行分隔。 .322、编写一个程序,将 d:java 目录下的所有.java 文件复制到 d:jad 目录下,并将原来文件的扩展名从.java 改为.jad。 .333、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我 ABC”,4,应该截取“我 AB”,输入“我 ABC 汉 DEF”,6,应该输出“我 ABC”,而不是“我 ABC+汉的半个” 。 .354、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。 355、说明生活中遇到的二叉树,用 j
13、ava 实现二叉树 366、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 397、写一个 Singleton 出来。 .418、递归算法题 1 .429、递归算法题 2 .4310、排序都有哪几种方法?请列举。用 JAVA 实现一个快速排序。 4311、有数组 an,用 java 代码将数组元素顺序颠倒 4412金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)(一千零一拾一元整)输出。 45三. html474、说一说 Servlet 的生命周期? .475、Servlet 的基本架构 476、SERVLET API 中 forwa
14、rd() 与 redirect()的区别? 487、什么情况下调用 doGet()和 doPost()? 488、Request 对象的主要方法: .489、forward 和 redirect 的区别 4810、request.getAttribute() 和 request.getParameter() 有何区别? 4811. jsp 有哪些内置对象? 作用分别是什么? 分别有什么方法? .4812. jsp 有哪些动作? 作用分别是什么? .4913、JSP 的常用指令 .4914. JSP 中动态 INCLUDE 与静态 INCLUDE 的区别? 4915、两种跳转方式分别是什么?有什
15、么区别? .4916、页面间对象传递的方法 4917、JSP 和 Servlet 有哪些相同点和不同点,他们之间的联系是什么? 4918、MVC 的各个部分都有那些技术来实现?如何实现? .4919、我们在 web 应用开发过程中经常遇到输出某种编码的字符,如 iso8859-1 等,如何输出一个某种编码的字符串? 4920现在输入 n 个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供 reset50五. 数据库部分 .501、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 502、列出各个部门中工资高于本部门的平均工资的员工数和
16、部门号,并按部门号排序 503、存储过程与触发器必须讲,经常被面试到? .504、数据库三范式是什么? .525、说出一些数据库优化方面的经验? .526、union 和 union all 有什么不同 ? 537.分页语句 .538.用一条 SQL 语句 查询出每门课都大于 80 分的学生姓名 559.所有部门之间的比赛组合 .5510.每个月份的发生额都比 101 科目多的科目 .5511.统计每年每月的信息 .5612.显示文章标题,发帖人、最后回复时间 .5713.删除除了 id 号不同,其他都相同的学生冗余信息 .5714.航空网的几个航班查询题: .5815.查出比经理薪水还高的员
17、工信息: .5816、求出小于 45 岁的各个老师所带的大于 12 岁的学生人数 5917.求出发帖最多的人: .5918、一个用户表中有一个积分字段,假如数据库中有 100 多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决? .6019、一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他用户。 6020. xxx 公司的 sql 面试 .6021、注册 Jdbc 驱动程序的三种方式 .6022、用 JDBC 如何调用存储过程 .6123、JDBC 中的 PreparedStatement 相比 Statement 的好处 .6124. 写一个用 jdb
18、c 连接并访问 oracle 数据的程序代码 .6225、Class.forName 的作用? 为什么要用 ? 6226、大数据量下的分页解决方法。 6227、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). .6228、这段代码有什么不足之处? .6329、说出数据连接池的工作机制是什么? .6330、为什么要用 ORM? 和 JDBC 有何不一样? .63六. XML 部分 .631、xml 有哪些解析技术?区别是什么? 632、你在项目中用到了 xml 技术的哪些方面?如何实现的? .633、用 jdom 解析 xml 文件时如何解决中文问题?如何解析? 634、编程用
19、 JAVA 解析 XML 的方式. 645、XML 文档定义有几种形式?它们之间有何本质区别?解析 XML 文档有哪几种方式? 65七. 流行的框架与新技术 .651、谈谈你对 Struts 的理解。 .652、谈谈你对 Hibernate 的理解。 .663、AOP 的作用。 .664、你对 Spring 的理解。 665、谈谈 Struts 中的 Action servlet。 666、Struts 优缺点 优点: 1. 实现 MVC 模式,结构清晰 ,使开发者只关注业务逻辑的实现. 667、STRUTS 的应用( 如 STRUTS 架构) .678、说说 struts1 与 struts
20、2 的区别。 .679、hibernate 中的 update()和 saveOrUpdate()的区别,session 的 load()和 get()的区别。 6710、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 6711、iBatis 与 Hibernate 有什么不同? .6712、写 Hibernate 的一对多和多对一双向关联的 orm 配置 ? 689、hibernate 的 inverse 属性的作用? .6813、在 DAO 中如何体现 DAO 设计模式? .6814、spring+Hibernate 中委托方案怎么配置
21、? 6815、spring+Hibernate 中委托方案怎么配置? 6816. hibernate 进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; .6817.介绍一下 Hibernate 的二级缓存 6818、Spring 的依赖注入是什么意思 ? 给一个 Bean 的 message 属性, 字符串类型, 注入值为 “Hello“ 的 XML 配置文件该怎么写? .6919、Jdo 是什么? 6920、什么是 spring 的 IOC AOP.6921、STRUTS 的工作流程! .6922、spring 与 EJB 的区别! 69八. 软件工
22、程与设计模式 .691、UML 方面 .692、j2ee 常用的设计模式?说明工厂模式。 .703、开发中都用到了那些设计模式?用在什么场合? .70九. j2ee 部分 .701、BS 与 CS 的联系与区别。 702、应用服务器与 WEB SERVER 的区别? .703、应用服务器有那些? 714、J2EE 是什么? .715、J2EE 是技术还是平台还是框架? 什么是 J2EE716、请对以下在 J2EE 中常用的名词进行解释(或简单描述) .717、如何给 weblogic 指定大小的内存? 718、如何设定的 weblogic 的热启动模式(开发模式)与产品发布模式? .719、如
23、何启动时不需输入用户名与密码? .7110、在 weblogic 管理制台中对一个应用域(或者说是一个网站,Domain)进行 jms 及 ejb 或连接池等相关信息进行配置后,实际保存在什么文件中? 7111、说说 weblogic 中一个 Domain 的缺省目录结构?比如要将一个简单的 helloWorld.jsp 放入何目录下,然的在浏览器上就可打入 http:/主机:端口号/helloword.jsp 就可以看到运行结果了? 又比如这其中用到了一个自己写的 javaBean 该如何办? 7112、在 weblogic 中发布 ejb 需涉及到哪些配置文件 .7213、如何在 webl
24、ogic 中进行 ssl 配置与客户端的认证配置或说说 j2ee(标准)进行 ssl 的配置? .7214、如何查看在 weblogic 中已经发布的 EJB? 72十. EBJ 部分 .721、EJB 是基于哪些技术实现的?并说出 SessionBean 和 EntityBean 的区别,StatefulBean 和 StatelessBean 的区别。 722、简要讲一下 EJB 的 7 个 Transaction Level? .723、EJB 与 JAVA BEAN 的区别? .724、EJB 包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
25、.725、EJB 容器提供的服务 .726、EJB 的激活机制 .727、EJB 的几种类型 .738、客服端调用 EJB 对象的几个基本步骤 73十一. webservice 部分 .731、WEB SERVICE 名词解释。JSWDL 开发包的介绍。JAXP、JAXM 的解释。SOAP、UDDI,WSDL 解释。 732、CORBA 是什么 ?用途是什么? 733. Linux.734、LINUX 下线程,GDI 类的解释。 .735. 问得稀里糊涂的题 .736、四种会话跟踪技术 737、简述逻辑操作(i 78,“def“ - 62,“xyz“ - 65 在 hashSet 中的存储顺序
26、不是 62,65,78,这些问题感谢以前一个叫崔健的学员提出,最后通过查看源代码给他解释清楚,看本次培训学员当中有多少能看懂源码。LinkedHashSet 按插入的顺序存储,那被存储对象的 hashcode 方法还有什么作用呢?学员想想 !hashset 集合比较两个对象是否相等,首先看 hashcode 方法是否相等,然后看 equals 方法是否相等。new 两个Student 插入到 HashSet 中,看 HashSet 的 size,实现 hashcode 和 equals 方法后再看 size。同一个对象可以在 Vector 中加入多次。往集合里面加元素,相当于集合里用一根绳子连
27、接到了目标对象。往 HashSet 中却加不了多次的。 64、说出 ArrayList,Vector, LinkedList 的存储性能和特性 ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了 synchronized 方法(线程安全) ,通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以
28、插入速度较快。LinkedList 也是线程不安全的,LinkedList 提供了一些方法,使得 LinkedList 可以被当作堆栈和队列来使用。65、去掉一个 Vector 集合中重复的元素 Vector newVector = new Vector();For (int i=0;io1.age?1:ageo1.age?-1:0;public class Child extends Parent public Child()super(3);public int compareTo(Object o) / TODO Auto-generated method stubSystem.out.
29、println(“method of child“);/ Child o1 = (Child)o;return 1;public class TreeSetTest /* param args*/public static void main(String args) / TODO Auto-generated method stubTreeSet set = new TreeSet();set.add(new Parent(3);set.add(new Child();set.add(new Parent(4);System.out.println(set.size();71、说出一些常用的
30、类,包,接口,请各举 5 个 要让人家感觉你对java ee开发很熟,所以,不能仅仅只列core java中的那些东西,要多列你在做ssh项目中涉及的那些东西。就写你最近写的那些程序中涉及的那些类。常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer java.util.Date, System,Class,List,HashMap常用的包:java.lang java.io java.util java.sql ,javax.servlet,org.apache.strtuts.action,org.h
31、ibernate常用的接口:Remote List Map Document NodeList ,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、Session(Hibernate),HttpSession72、java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 字节流,字符流。字节流继承于 InputStream OutputStream,字符流继承于 InputStreamReader OutputStreamWriter。在 java.io 包中还
32、有许多其他的流,主要是为了提高性能和使用方便。 73、字节流与字符流的区别要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象描述方式起名为 IO 流,对应的抽象类为 OutputStream 和 InputStream ,不同的实现类就代表不同的输入和输出设备,它们都是针对字节进行操作的。在应用中,经常要完全是字符的一段文本输出去或读进来,用字节流可以吗?计算机中的一切最终都是二进制的字节形式存在。对于“中国”这些字符,首先要得到其对应的字节,然后将字节写入到输出流。读
33、取时,首先读到的是字节,可是我们要把它显示为字符,我们需要将字节转换成字符。由于这样的需求很广泛,人家专门提供了字符流的包装类。底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向 IO 设别写入或读取字符串提供了一点点方便。字符向字节转换时,要注意编码的问题,因为字符串转成字节数组,其实是转成该字符的某种编码的字节形式,读取也是反之的道理。讲解字节流与字符流关系的代码案例:import java.io.BufferedReader;import java.io.F
34、ileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.InputStreamReader;import java.io.PrintWriter;public class IOTest public static void main(String args) throws Exception String str = “中国人“;/*FileOutputStream fos = new FileOutputStream(“1
35、.txt“);fos.write(str.getBytes(“UTF-8“);fos.close();*/*FileWriter fw = new FileWriter(“1.txt“);fw.write(str);fw.close();*/PrintWriter pw = new PrintWriter(“1.txt“,“utf-8“);pw.write(str);pw.close();/*FileReader fr = new FileReader(“1.txt“);char buf = new char1024;int len = fr.read(buf);String myStr =
36、new String(buf,0,len);System.out.println(myStr);*/*FileInputStream fr = new FileInputStream(“1.txt“);byte buf = new byte1024;int len = fr.read(buf);String myStr = new String(buf,0,len,“UTF-8“);System.out.println(myStr);*/BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStrea
37、m(“1.txt“),“UTF-8“);String myStr = br.readLine();br.close();System.out.println(myStr);74、什么是 java 序列化,如何实现 java 序列化?或者请解释 Serializable 接口的作用。 我们有时候将一个 java 对象变成字节流的形式传出去或者从一个字节流中恢复成一个 java 对象,例如,要将 java 对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个 java 对象变成某个格式的字节流再传输,但是,jre 本身就提供了这种支持,我们可以调用 OutputStrea
38、m 的 writeObject 方法来做,如果要让 java 帮我们做,要被传输的对象必须实现 serializable 接口,这样,javac 编译时就会进行特殊处理,编译的类才可以被 writeObject 方法操作,这就是所谓的序列化。需要被序列化的类必须实现 Serializable 接口,该接口是一个 mini 接口,其中没有需要实现的方法,implements Serializable 只是为了标注该对象是可被序列化的。例如,在 web 开发中,如果对象被保存在了 Session 中,tomcat 在重启时要把 Session 对象序列化到硬盘,这个对象就必须实现 Serializ
39、able 接口。如果对象要经过分布式系统进行网络传输或通过 rmi 等远程调用,这就需要在网络上传输对象,被传输的对象就必须实现 Serializable 接口。75、描述一下 JVM 加载 class 文件的原理机制? JVM 中类的装载是由 ClassLoader 和它的子类来实现的,Java ClassLoader 是一个重要的 Java 运行时系统组件。它负责在运行时查找和装入类文件的类。 76、heap 和 stack 有什么区别。 java 的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量
40、,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用 new 创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用 final 修饰后,放在堆中,而不是栈中。 77、GC 是什么? 为什么要有 GC? GC 是垃圾收集的意思(Gabage Collection ),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放已分配内存
41、的显示操作方法。78、垃圾回收的优点和原理。并考虑 2 种回收机制。 Java 语言中一个显著的特点就是引入了垃圾回收机制,使 c+程序员最头疼的内存管理的问题迎刃而解,它使得 Java 程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java 中的对象不再有“作用域“的概念,只有对象的引用才有“作用域“ 。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收
42、和标记垃圾回收,增量垃圾回收。79、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?对于 GC 来说,当程序员创建对象时,GC 就开始监控这个对象的地址、大小以及使用情况。通常,GC 采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是“可达的 “,哪些对象是“不可达的“ 。当 GC 确定一些对象为“ 不可达“时,GC 就有责任回收这些内存空间。可以。程序员可以手动执行 System.gc(),通知 GC 运行,但是 Java 语言规范并不保证 GC 一定会执行。 80、什么时候用 assert。 assertion(
43、断言 )在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion 就是在程序中的一条语句,它对一个 boolean 表达式进行检查,一个正确程序必须保证这个 boolean 表达式的值为 true;如果该值为 false,说明程序已经处于不正确的状态下,assert 将给出警告或退出。一般来说,assertion 用于保证程序最基本、关键的正确性。assertion 检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion 检查通常是关闭的。 package com.huawei.interview;public class AssertT
44、est /* param args*/public static void main(String args) / TODO Auto-generated method stubint i = 0;for(i=0;i5;i+)System.out.println(i);/假设程序不小心多了一句-i;-i;assert i=5;81、java 中会存在内存泄漏吗,请简单描述。 所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。java 中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。由于 Java 使用有向图的方
45、式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么 GC 也是可以回收它们的,例如下面的代码可以看到这种情况的内存回收:package com.huawei.interview;import java.io.IOException;public class GarbageTest /* param args* throws IOException */public static void main(String args) throws IOException / TODO Auto-generated method stubtry gcTes
46、t(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();System.out.println(“has exited gcTest!“);System.in.read();System.in.read();System.out.println(“out begin gc!“);for(int i=0;i100;i+)System.gc();System.in.read();System.in.read();private static void gcTest() throws IOExcep
47、tion System.in.read();System.in.read();Person p1 = new Person();System.in.read();System.in.read();Person p2 = new Person();p1.setMate(p2);p2.setMate(p1);System.out.println(“before exit gctest!“);System.in.read();System.in.read();System.gc();System.out.println(“exit gctest!“);private static class Per
48、sonbyte data = new byte20000000;Person mate = null;public void setMate(Person other)mate = other;java 中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是 java 中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是 java 中可能出现内存泄露的情况,例如,缓存系统
49、,我们加载了一个对象放在缓存中 (例如放在一个全局 map 对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。检查 java 中的内存泄露,一定要让程序将各种分支情况都完整执行到程序结束,然后看某个对象是否被使用过,如果没有,则才能判定这个对象属于内存泄露。如果一个外部类的实例对象的方法返回了一个内部类的实例对象,这个内部类对象被长期引用了,即使那个外部类实例对象不再被使用,但由于内部类持久外部类的实例对象,这个外部类对象将不会被垃圾回收,这也会造成内存泄露。下面内容来自于网上(主要特点就是清空堆栈中的某个元素,并不是彻底把它从数组中拿掉,而是把存储的总数减少,本人写得可以比这个好,在拿掉某个元素时,顺便也让它从数组中消失,将那个元素所在的位置的值设置为 null 即可):我实在想不到比那个堆栈更经典的例子了,以致于我还要引用别人的例子,下面的例子不是我想到的,是书上看到的,当然如果没有在书上看到,可能过一段时间我自己也想的到,可是那时我说是我自己想到的也没有人相信的。public class Stack private Object el