目录
一. Java基础部分................................................................. 9
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 9
2、说说&和&&的区别。........................................................... 9
3、在JAVA中如何跳出当前的多重嵌套循环?........................ 9
4、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 10
6、用最有效率的方法算出2乘以8等於几?......................... 10
7、请设计一个一百亿的计算器............................................. 10
8、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 10
9、"=="和equals方法究竟有什么区别?............................. 10
10、静态变量和实例变量的区别?........................................ 11
11、是否可以从一个static方法内部发出对非static方法的调用? 11
12、Integer与int的区别................................................... 11
13、Math.round(11.5)等于多少? Math.round(-11.5)等于多少? 11
14、请说出作用域public,private,protected,以及不写时的区别 11
15、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?............................................................................................ 12
17、写clone()方法时,通常都有一行代码(不是必须有),是什么? 12
18、面向对象的特征有哪些方面........................................... 12
19、java中实现多态的机制是什么?................................... 12
20、abstract class和interface有什么区别?................... 12
21、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?..................................................................... 13
22、什么是内部类?Static Nested Class和Inner Class的不同。 13
23、内部类可以引用它的包含类的成员吗?有没有什么限制? 13
24、String是最基本的数据类型吗?..................................... 13
27、String和StringBuffer的区别..................................... 14
28、如何把一段逗号分割的字符串转换成一个数组?............. 14
30、final, finally, finalize的区别。............................ 14
31、运行时异常(Runtime)与检查异常(Checked)有何异同?. 15
32、error和exception有什么区别?................................... 15
33、Java中的异常处理机制的简单原理和应用。.................. 15
34、请写出你最常见到的5个RuntimeException。.............. 15
35、Java语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?............................. 16
36,Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?......................................... 16
38、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 17
39. 下面两个方法同步吗?(自己发明)............................. 17
40、多线程有几种实现方法?同步有几种实现方法?............... 18
41、启动一个线程是用run()还是start()?......................... 18
42、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?......................................................................... 18
43、线程的基本概念、线程的基本状态以及状态之间的关系. 18
45、介绍Collection框架的结构......................................... 18
46、ArrayList和Vector的区别.......................................... 19
47、HashMap和Hashtable的区别........................................ 19
48、List和 Map区别?......................................................... 19
49、List, Set, Map是否继承自Collection接口?.............. 19
50、List、Map、Set三个接口,存取元素时,各有什么特点? 19
51、说出ArrayList,Vector, LinkedList的存储性能和特性 19
51、去掉一个Vector集合中重复的元素............................... 19
53、Collection和 Collections的区别。........................... 20
54、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?..................................................... 20
55、你所知道的集合类都有哪些?主要方法?...................... 20
56、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?....................................................................................... 20
68、说出一些常用的类,包,接口,请各举5个.................. 20
59、Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?............................................................ 21
60、字节流与字符流的区别.................................................. 21
61、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。..................................................................................... 21
62、描述一下JVM加载class文件的原理机制?.................... 21
63、heap和stack有什么区别。.......................................... 21
64、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?.................................................. 21
65、什么时候用assert。..................................................... 22
66、能不能自己写个类,也叫java.lang.String?.............. 22
67、SSH集成方式................................................................. 22
二.算法与编程..................................................................... 23
1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 23
2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。..................................... 24
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。 25
4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。.............................................................................. 25
5、说明生活中遇到的二叉树,用java实现二叉树............... 26
8、递归算法题1................................................................... 27
9、递归算法题2................................................................... 28
10、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。 28
11、有数组a[n],用java代码将数组元素顺序颠倒............ 30
12 不使用递归遍历二叉树.................................................... 30
三.前端页面部分.................................................................. 32
3.当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的。................................................................... 32
4.有三台服务器,如果在一台服务器上登陆了这个用户,其他两台就不能再登陆这个用户,使用session共享,你是怎么做的。............................. 32
5.写一个自定义标签要继承什么类....................................... 32
6.Jsp如何处理json............................................................ 32
7.Jsp的重定向和转发的流程有什么区别.............................. 32
8.Jsp和servlet的区别...................................................... 32
9.jsp可以操作窗口吗?...................................................... 32
10.session的主要几个方法的区别....................................... 33
11.jsp的三大指令,七大动作的具体功能............................ 33
12.获取页面的元素和值有几种方式,分别说一下................. 33
13.servlet和javaScript的区别,他们分别是什么作用..... 33
14.jsp的执行原理............................................................... 34
16.HTML和Servlet的异同................................................... 34
17.会话跟踪有哪些,他们的区别是什么............................... 34
18.session和application的作用....................................... 34
19.request ,response,session 和 application是怎么用的 34
20.有几种方式将页面的值传到后台...................................... 34
21.一个form表单的值如何获取........................................... 34
22.传递参数到后台有几种方式............................................. 35
23.Jsp中父页面中怎么拿到子页面的表单元素,不是拿值怎么拿 35
24.定义一个String类型的字符串,如果重定向之后还能不能获得这个数据 35
25.404和500是什么意思..................................................... 35
26.写出5种JSTL常用标签.................................................. 35
28.
页面把一个元素隐藏的方法.................................................. 35
29.Session,application,cookie的区别.......................... 35
30.我们在web应用开发过程中经常遇到输出某种编码的字符,如ISO-8859-1,如何输出一个某种编码的字符串..................................................... 35
32.怎么判断用户请求时是第一次,如果客户端和服务端断开怎么连到上一次操作 35
33.如果创建servlet实例不用构造方法,怎么创建一个servlet实例 35
34.Servlet是安全的吗?当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的................................ 36
36.说明一下jsp中
37. pageContext有什么作用............................................... 36
39.Filter与拦截器怎么执行的............................................ 36
40.Jsp中如何进行分页,项目中如何进行分页?.................. 36
41,关于Ajax的技术组成与核心原理.................................. 37
43.Xhtml和html有什么区别。............................................ 38
44.css的引入方式有哪些?link和@import的区别是?....... 38
45.css选择符有哪些?哪些属性可以继承?优先级如何计算?内联和important哪个优先级高?.............................................................................. 38
46.前端页面由哪三层构成,分别是什么?作用是什么?...... 38
47.你曾经在哪些浏览器测试过兼容?这些浏览器的内核分别是什么? 38
48.标签上title与alt属性的区别是什么?............... 38
49.写出几种IE6 BUG的解决方法?...................................... 38
50.描述css reset的作用和用途。...................................... 39
51.你如何对网站的文件和资源进行优化?期待的解决方案包括: 39
52.什么是语义化的html?................................................... 39
53.清除浮动有几种方式?各自的优缺点是?........................ 39
54.解释下 CSS sprites,以及你要如何在页面或网站中使用它? 39
55,html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和HTML5??.......................................... 40
56.javascript的同源策略。............................................... 40
57、HTML的 form提交之前如何验证数值文本框的内容全部为数字?否则的话提示用户并终止提交?............................................................................ 40
59. jsp有哪些内置对象?作用分别是什么?分别有什么方法? 40
60. jsp有哪些动作?作用分别是什么?................................. 41
61、JSP的常用指令............................................................. 41
62. JSP中动态INCLUDE与静态INCLUDE的区别?................ 41
63、页面间对象传递的方法.................................................. 42
三. Java web部分............................................................... 42
1、Tomcat的优化经验.......................................................... 42
2、HTTP请求的GET与POST方式的区别................................ 42
3、解释一下什么是servlet;............................................... 42
4、说一说Servlet的生命周期?........................................... 42
5、Servlet的基本架构........................................................ 42
6、Servlet API中forward()与redirect()的区别?........... 42
7、Request对象的主要方法:.............................................. 43
8、request.getAttribute()和 request.getParameter()有何区别? 43
9、MVC的各个部分都有那些技术来实现?如何实现?.............. 43
10、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso-8859-1等,如何输出一个某种编码的字符串?.............................................. 44
四.数据库部分..................................................................... 44
1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 44
2、ORACLE和MySQL的区别。............................................... 44
3、存储过程和函数的区别。................................................ 45
4、Oracle导入和导出方式................................................... 45
5、Oracle分页方法............................................................. 45
6、mysql的分页方法............................................................ 45
7、解释什么是死锁,如何解决Oracle中的死锁?............... 46
8、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序............................................................................................ 46
9、存储过程与触发器必须讲,经常被面试到?...................... 46
10、数据库三范式是什么?.................................................... 48
11、说出一些数据库优化方面的经验?.................................. 49
12、union和union all有什么不同?................................... 49
13.用一条SQL语句查询出每门课都大于80分的学生姓名.... 49
14.所有部门之间的比赛组合................................................ 50
15.显示文章标题,发帖人、最后回复时间........................... 50
16.删除除了id号不同,其他都相同的学生冗余信息............. 50
18.求出发帖最多的人:....................................................... 50
19、一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决?... 51
21、注册Jdbc驱动程序的三种方式...................................... 51
22、用JDBC如何调用存储过程............................................. 51
23、JDBC中的PreparedStatement相比Statement的好处.... 51
24、Class.forName的作用?为什么要用?.............................. 51
25、大数据量下的分页解决方法。....................................... 52
26、用 JDBC查询学生成绩单,把主要代码写出来(考试概率极大). 52
27、说出数据连接池的工作机制是什么?............................... 52
28、为什么要用 ORM? 和 JDBC有何不一样?......................... 53
29. 数据库大数据处理......................................................... 53
30. 如何写出一个快排......................................................... 53
31. 什么是事务?什么是锁?.............................................. 54
32. 维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?............................................................................................ 54
33. 什么是内存泄漏?......................................................... 54
34.触发器的作用?.............................................................. 54
触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。.................................................. 54
35. 常用的oracle操作的命令............................................. 54
36, 索引的优缺点............................................................ 55
37.使用oracle伪列删除表中重复记录:?......................... 55
五. XML部分........................................................................ 55
1、xml有哪些解析技术?区别是什么?................................... 55
2、你在项目中用到了xml技术的哪些方面?如何实现的?...... 55
4、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?............................................................................................ 56
六.流行的框架与新技术....................................................... 56
1、.................................................. 谈谈你对Struts的理解。. 56
2、Struts优缺点................................................................. 56
3、STRUTS的应用(如STRUTS架构)....................................... 57
4、谈谈你对Hibernate的理解。......................................... 57
5、你对Spring的理解。..................................................... 58
6.Spring由哪些模块组成?................................................... 58
7. 核心容器模块。.............................................................. 58
9、写Hibernate的一对多和多对一双向关联的orm配置?.... 58
10、在DAO中如何体现DAO设计模式?.................................. 59
11、spring+Hibernate中委托方案怎么配置?....................... 59
12. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决;........................................... 59
13.介绍一下Hibernate的二级缓存...................................... 59
14、Jdo是什么?................................................................... 60
16. IOC的优点是什么?................................................. 61
18. 什么是Spring的依赖注入?....................................... 61
19. 有哪些不同类型的IOC(依赖注入)方式?.............. 61
20. 哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入? 61
21. Spring对DAO的支持................................................... 61
22. 解释AOP................................................................... 61
23. Aspect 切面.............................................................. 61
24. 在Spring AOP 中,关注点和横切关注的区别是什么? 62
25. 连接点......................................................................... 62
26. 通知............................................................................ 62
29 SpringMvc怎么和AJAX相互调用的................................. 62
30当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理 62
31 SpringMvc里面拦截器是怎么写的................................... 62
32讲下SpringMvc的执行流程.............................................. 63
33解释Spring支持的几种bean的作用域。......................... 63
34,Spring框架中的单例bean是线程安全的吗?.................. 63
35. 解释Spring框架中bean的生命周期。........................ 63
36.哪些是重要的bean生命周期方法? 你能重载它们吗?. 64
38. 什么是基于Java的Spring注解配置? 给一些注解的例子. 64
39. 什么是基于注解的容器配置?....................................... 64
40. 怎样开启注解装配?.................................................... 64
41. 使用Spring通过什么方式访问Hibernate?................... 64
42. Spring支持的ORM....................................................... 64
43.如何通过HibernateDaoSupport将Spring和Hibernate结合起来? 64
44. Spring支持的事务管理类型........................................ 65
45. Spring框架的事务管理有哪些优点?.......................... 65
49. 什么是Spring MVC框架的控制器?........................... 65
50. 讲下SpringMvc的核心入口类是什么,Struts1,Struts2的分别是什么 65
51. SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决 65
52. SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代 65
53. 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置 65
54. 如果在拦截请求中,我想拦截提交参数中包含"type=test"字符串,怎么配置 65
55. SpringMvc中函数的返回值是什么................................. 66
56. SpringMVC怎么样设定重定向和转发的.......................... 66
57. SpringMvc用什么对象从后台向前台传递数据的............ 66
58. SpringMvc中有个类把视图和数据都合并的一起的,叫什么 66
59. 怎么样把ModelMap里面的数据放入Session里面.......... 66
61. 当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理 66
63. 讲下SpringMvc的执行流程........................................... 66
64,Hibernate是如何延迟加载?.......................................... 66
66,如何优化Hibernate?................................................... 67
67,在数据库中条件查询速度很慢的时候,如何优化?........... 67
69,Hibernate的主键生成机制............................................ 68
69,Mybatis比IBatis比较大的几个改进是什么?.............. 68
70,什么是MyBatis的接口绑定,有什么好处........................ 69
71,接口绑定有几种实现方式,分别是怎么实现的?............... 69
72,什么情况下用注解绑定,什么情况下用xml绑定............. 69
73,MyBatis实现一对一有几种方式?具体怎么操作的........... 69
74,MyBatis实现一对多有几种方式,怎么操作的.................. 69
75,MyBatis里面的动态Sql是怎么设定的?用什么语法?..... 69
78,讲下MyBatis的缓存..................................................... 69
七.软件工程与设计模式....................................................... 70
1、j2ee常用的设计模式?说明工厂模式。.......................... 70
2、开发中都用到了那些设计模式?用在什么场合?................. 70
八. j2ee部分...................................................................... 71
2、应用服务器与WEB SERVER的区别?................................ 71
3、应用服务器有那些?....................................................... 71
4、J2EE是什么?................................................................. 71
5、J2EE是技术还是平台还是框架?什么是J2EE.................. 71
6、如何给weblogic指定大小的内存?.................................. 71
7、如何设定的weblogic的热启动模式(开发模式)与产品发布模式? 71
8、如何启动时不需输入用户名与密码?................................ 71
9、在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中?........ 71
10、在weblogic中发布ejb需涉及到哪些配置文件............. 71
11、如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置?................................................................................ 72
九,项目功能实现技术问题(附带源码)............................. 72
1,java实现excel模板导出:http://www.cnblogs.com/Mr-kevin/p/5793276.html............................................................................................ 72
2,java中生成验证码:http://www.cnblogs.com/syscn/p/5794391.html 72
3,Java-->实现群聊功能(C/S模式--TCP协议):http://www.cnblogs.com/xmcx1995/p/5793879.html........... 72
4,Activiti工作流学习-----基于5.19.0版本(4):........... 72
5,Java关于IO流的介绍:................................................. 72
6,MVC权限管理的实现流程:.............................................. 72
7,批量数据上传的sql.xml:.............................................. 72
8, struts—文件的上传和下载:........................................... 72
十. 其他问题....................................................................... 72
1,svn的使用和搭建?........................................................ 72
2,git 命令总结?.............................................................. 74
3.tomcat给你你怎样去调优?............................................... 75
4,Tomcat有几种部署方式................................................... 76
第一种方法:....................................................................... 76
5,eclipse中server location灰色,如何修改?.............. 77
7,如何加大tomcat可以使用的内存?................................ 77
8,如何加大tomcat连接数?.............................................. 78
一. Java基础部分
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。
一个文件中可以只有非public类,如果只有一个非public类,此类可以跟文件名不同
2、说说&和&&的区别。
&和&&都可以用作逻辑与的运算符,&&为短路与,&不是短路与。
另外&可以做为整数的位运算符
例1:对于if(str != null&& !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。
例2:If(x==33 &++y>0) y会增长,If(x==33 && ++y>0)不会增长
3、在JAVA中如何跳出当前的多重嵌套循环?
1. Break + 标签
2. 使用多个条件判断
3. 使用方法的return
在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环。例如,
ok: for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
System.out.println("i=" + i + ",j=" + j);
if (j == 5)
break ok;
}
}
另外,我个人通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。
int arr[][] ={{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i for(int j=0;j System.out.println("i=" + i + ",j=" + j); if(arr[i][j] ==5) { found = true; break; } } } 第三种,使用方法的return private static int test() { int count = 0; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { count++; System.out.println("i=" + i + ",j=" + j); if (j == 5) { return count; } } } return 0; } 作用在byte, short, char, int, enum 封装类对象,其它基本数据类型及引用数据类型都不能做为case的条件 2 << 3 因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。 如果只是大整数运算,使用BigInteger就可以 如果有浮点数据参与去处,需要使用BigDecimal进行运算 Java中基本类型的浮点数运算是不精确的,需要使用BigDecimal运算,尤其是金融、会计方向的软件 引用变量不能重新赋值,但是引用指向的对象的内容可以变化 例1:final StringBuffer a=new StringBuffer("immutable"); a=new StringBuffer(""); 有编译错 例2: final StringBuffer a=new StringBuffer("immutable"); a.append(“123”); 正确 他们的区别主要存在在引用数据类型上 ==为比较两侧的对象是否同一对象,是用内存地址来比较的 equals是方法,默认是用内存地址比较,重写后,主要是用来比较两侧的对象的值是否相同,和equals方法中的实现有关 ==可以两侧都为null,但equals左侧的引用指向的对象不能空,不然有NullPointerException 除非需要比较两个引用指向的对象是同一对象,一般都使用equals方法进行比较。尤其是String之类的值对象,另外,常量尽量放在比较的左侧 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。 总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。 不可以。因为非static方法(实例方法)是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。 int是java提供的8种原始数据类型之一,意思整型,占用4字节。 Integer是java为int提供的封装类,是引用数据类型。 int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。 例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer 在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。 在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。 另外,Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。 Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor的英文意义是地板,该方法就表示向下取整,Math.ceil(11.6)的结果为11,Math.ceil(-11.6)的结果是-12;最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。 这四个作用域的可见范围如下表所示。 说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly/default。 作用域 当前类 同package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 备注:只要记住了有4种访问权限,4个访问范围,然后将全选和范围在水平和垂直方向上分别按排从小到大或从大到小的顺序排列,就很容易画出上面的图了。 Overload是重载的意思,Override是覆盖的意思,也就是重写。 Overload和Override有共同之处,两个方法的方法名都必须相同,如果不同,既不构成Overload,也不构成Override。 a) 参数列表完全相同:个数相同、类型相同、顺序相同 b) 子类的返回值不能比父类的返回值范围大 c) 子类方法抛出的异常不能比父类方法抛出的异常范围大 d) 修饰符只能为public、protected、friendly,不能为private e) 父子类方法不能使用static修饰 clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。 1. 封装,隐藏内部实现,只暴露公共行为 2. 继承,提高代码的重用性 3. 多态,体现现实生活中相似对象的差异性 4. 抽象,抽取现实世界中相似对象的共同点 通过继承父类或实现接口。不同子类或实现类对同一父类方法有不同的实现。根据对象调用相应的实现方法。另外对于相似的方法,可以使用重载。 含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。 接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。 下面比较一下两者的语法区别: 1.抽象类可以有构造方法,接口中不能有构造方法。 2.抽象类中可以有普通成员变量,接口中没有普通成员变量 3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。 4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。 5. 抽象类中可以包含静态方法,接口中不能包含静态方法 6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。 7. 一个类可以实现多个接口,但只能继承一个抽象类。 下面接着再说说两者在应用上的区别: 接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约; 而抽象类在代码实现方面发挥作用,可以实现代码的重用。 abstract的method不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系! native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它也不能是抽象的,不能与abstract混用。 synchronized和abstract合用的问题不能共用,abstract方法只能存在于抽象类或接口中,它不能直接产生对象,而默认synchronized方法对当前对象加锁,没有对象是不能加锁。 另外synchronized不能被继承,子类继承时,需要另加修改符。 内部类就是在一个类的内部定义的类。内部可以定义在除参数位置上的任意位置。印象中有四种方式。 1. 静态内部类需要使用static修饰,而普通内部类不能使用static修饰 2. 静态内部类只能定义在和属性同级,普通内部类可以定义在除参数位置以外的任意位置 3. 静态内部类必需有名称,而普通内部类可以是匿名的 4. 静态内部类没有this引用,只此只能访问外部类的静态成员,而普通内部类可以访问外部类的全部成员 5. 静态内部类访问外部类的同名函数时,使用“外部类名.方法名”即可,而普通内部类需要使用“外部类名.this.外部方法” 6. 静态内部类可以定义静态方法,而普通内部类不能定义静态方法 1. 如果内部类为静态内部类,只能调用外部类的静态成员;如果有重名成员,需要用“外部类名.成员名”访问;不能调用外部类的对象成员。 2. 如果内部类为非静态内部类,则可以调用外部类的所有成员;如果有重名成员,需要使用“外部类名.this.外部方法” 基本数据类型包括byte、int、char、long、float、double、boolean和short。 String是引用数据类型。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer/StringBuilder类 这两个类都实现了CharSequence接口。 1. 类型不同,因为不是一个类,也没有继承关系,做参数时不能共用 2. String对象是不可变对象,不能修改值。而StringBuffer是可变对象,能修改值。 3. 拼接字符串时,String会产生新对象,而StringBuffer只是增加新字符,不产生新对象,因此效率高。 4. String覆盖了equals方法和hashCode方法,而StringBuffer没有覆盖equals方法和hashCode方法,所以,将StringBuffer对象存储进Java集合类中时会出现问题。 如果不查jdk api,我很难写出来!我可以说说我的思路: StringTokenizer tokener = new StringTokenizer(s, ","); String[] result = new String[tokener.countTokens()]; Integer i = 0; while (tokener.hasMoreTokens()) { result[i++] = tokener.nextToken(); } int index = -1; int oldIndex = 0; List while ((index = s.indexOf(',', index + 1)) != -1) { ss.add(s.substring(oldIndex, index)); oldIndex = index + 1; } if (s.charAt(s.length() - 1) == ',') { ss.add(""); } String[] array = ss.toArray(new String[ss.size()]); System.out.println(Arrays.toString(array)); final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 内部类要访问局部变量,局部变量必须定义成final类型 final int[] number = { 20 }; new Thread() { @Override public void run() { for (int k = 0; k < 20; k++) { number[0]++; } } }.start(); Thread.sleep(10); System.out.println(number[0]); finally是异常处理语句结构的一部分,表示总是执行,用来释放资源。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出,不可能指望程序能处理这样的情况。exception表示一种设计或实现问题,也就是说,它表示如果程序运行正常,从不会发生的情况。 异常是指java程序运行时(非编译)所发生的非正常情况或错误。 Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象中,该对象中包含有异常的信息。 Java可以自定义异常类,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception。 Java为运行时异常和检查异常提供了不同的解决方案,编译器强制检查异常必须try..catch处理或用throws声明继续抛给上层调用方法处理,所以检查异常也称为checked异常,而运行异常可以处理也可以不处理,所以编译器不强制用try..catch处理或用throws声明,所以运行异常也称为Runtime异常。 提示答题者:就按照三个级别去思考:虚拟机必须宕机的错误,程序可以死掉也可以不死掉的错误,程序不应该死掉的错误 NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、IllegelArgumentException、SecurityException。 throw程序出错时,手工抛出异常 try尝试执行,里面的语句可能出现异常,如出现异常需要处理 catch处理try中出现的异常 finally在try后执行清理操作,用于释放资源 java5以前,有如下两种: 第一种: new Thread(){}.start();这表示调用Thread子类对象的run方法,new Thread(){}表示一个Thread的匿名子类的实例对象,子类加上run方法后的代码如下: new Thread() { public void run() { } }.start(); 第二种: new Thread(new Runnable(){}).start();这表示调用Thread对象接受的Runnable对象的run方法,new Runnable(){}表示一个Runnable的匿名子类的实例对象,runnable的子类加上run方法后的代码如下: new Thread(new Runnable() { public void run() { } }).start(); 从Java5开始,还有如下一些线程池创建多线程的方式: ExecutorService pool = Executors.newFixedThreadPool(3); for (int i = 0; i < 10; i++) { pool.execute(new Runable() { public void run() { } }); } Executors.newCachedThreadPool().execute(new Runable() { public void run() { } }); Executors.newSingleThreadExecutor().execute(new Runable() { public void run() { } }); 有两种实现方法,分别使用new Thread()和new Thread(runnable)形式,第一种直接调用thread的run方法,所以,我们往往使用Thread子类,即new SubThread()。第二种调用runnable的run方法。 同步是指所有操作串行化执行,顺序不能改变,前一操作未完成,后个操作不执行。 异步是指所有操作可以并行执行,顺序无关。 例如寄信 同步:如果没有寄完,不能吃饭,邮递员10天后送到,发送人被饿死 异步:寄出后可以立即吃饭,邮递员送完后,通知发送人送信结果。 如果强调执行顺序的话,用同步。如果顺序无关,则可以用异步。 异步执行效率比同步高。 class Test { synchronized static void sayHello3() { } synchronized void getX() { } } 多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有五种,分别是synchronized、wait与notify、sleep、suspend、join synchronized: 一直持有锁,直至执行结束 wait():使一个线程处于等待状态,并且释放所持有的对象的lock,需捕获异常。 sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,需捕获异常,不释放锁。 notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。 notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。 启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。 如果其它方法中使用当前对象作为锁对象,则不能; 如果其它方法中没有使用当前对象作为锁对象,则能。 在多任务操作系统中,为了提高CPU的利用率,可以使用多进程编程。但对进程通信比较困难,进程间数据不能共享,因此可以使用多线程编程。一个进程至少包含一个主入口线程。 单个CPU,在同一时间只能处理一个线程的数据,但是操作系统的任务调度非常快,人眼无法识别,感觉上是多个线程同时执行。有的线程可以已经用完CPU,正在作磁盘操作,此时并不使用CPU,可以让出CPU资源给其它线程使用,提高效率。 线程有生命周期及相关关系和对应方法如下图: Iterable ->Collection ->List ->ArrayList ->LinkedList ->Vector ->Stack ->Set ->HashSet ->TreeSet Map ->Hashtable ->HashMap ->LinkedHashMap Collections,不属于集合,是集合类的工具类 Arrays,不属于集合类,是数据对象的工具类 1. 线程同步,Vector线程安全,ArrayList线程不安全 2. 效率问题,Vector效率低,ArrayList效率高 3. 增长数量,Vector以1.5倍增长,ArrayList以2倍增长 1. 线程同步,Hashtable线程安全,HashMap线程不安全 2. 效率问题,Hashtable效率低,HashMap效率高 3. HashMap可以使用null作为key,Hashtable不可以使用null为key 4. HashMap使用的是新实现,继承AbstractMap,而Hashtable是继承Dictionary类,实现比较老 5. Hash算不同,HashMap的hash算法比Hashtable的hash算法效率高 6. HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。因为contains方法容易让人引起误解。 7. 取值不同,HashMap用的是Iterator接口,而Hashtable中还有使用Enumeration接口 一个是存储单列数据的集合,另一个是存储键和值的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。 List,Set是,Map不是 List使用get(index)取值,也可以使用Iterator、toArray取值 Set只能通过Iterator、toArray取值 Map取值使用get(key)取值,也可以使用keySet取键值集合,也可使用values取值集合,entrySet取全部映射。 1. ArrayList和Vector使用数组存储元素;LinkedList使用链表存储元素 2. ArrayList和Vector插入删除数据时,需要搬运数据,效率较差;LinkedList使用链表,不需要搬运数据,效率高 3. ArrayList和Vectory查询时,按数组下标查询,不需要遍历,效率高;LinkedList需要遍历,查询效率底 4. ArrayList和Vector的区别见59条 1. 自行遍历,用另外一个Vector来判断是否有重复 2. 用Set(TreeSet或HashSet)来去重 3. 用Apache的CollectionUtil工具类去重 Vector newVector = new Vector(); for (int i = 0; i < vector.size(); i++) { Object obj = vector.get(i); if (!newVector.contains(obj)) newVector.add(obj); } 还有一种简单的方式,HashSet set = new HashSet(vector); Collection是集合类的上级接口,继承与他的接口主要有Set和List. Collections是针对集合类的一个工具类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 Set里的元素是不能重复的,元素重复与否视具体情况而定: 1. HashSet使用equals比较 2. TreeSet使用compareTo进行比较 最常用的集合类接口是List 和 Map。 List的具体实现包括ArrayList、Vector、LinkedList,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List适用于按数值索引访问元素的情形。 Set的具体实现包括HashSet和TreeSet,它们也是可变大小集合,但不适合用索引取值。 Map 提供了一个更通用的元素存储方法。Map集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。 ArrayList/Vector、LinkedList HashSet/TreeSetàSet Properties/HashTable/TreeMap/HashMap List的主要方法有: add、get、remove、set、iterator、contains、addAll、removeAll、indexOf、toArray、clear、isEmpty Set的主要方法有: add、remove、iterator、contains、addAll、removeAll、toArray、clear、isEmpty Map的主要方法有: put、get、keySet、values、entrySet、clear、remove、isEmpty 1. equals等,hashCode同,因此重写equals方法必须重写hashCode 2. hashCode等,equals不一定同,但hashCode最好散列化 3. 任何对象equals null都得false 4. 没有继承关系的两个类,equals都得false 5. 重写equals方法的类最好是值类,即不可变 要让人家感觉你对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.hibernate 常用的接口: List,Map,Document,NodeList,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate) ,Session(Hibernate),HttpSession 字节流,字符流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。 FileInputStream、FileReader、BufferedInputStream、BufferedReader、ZipInputStream、PrintStream、StringReader、ObjectInputStream、RandomAccessFile(不属于流,但像流) 字节流是按字节读取或写入设备,但字符流是以字符为单位读取或写入设备。 如果是二进制文件,需要用字节流读取。一般来说,字符流只处理文本文件。在设备中,大多数情况是以字节形式存储数据的,因此字符流通过需要传入字节流当参数。 序列化是把内存Java对象保存到存储介质中,反序列化就是把存储介质中的数据转化为Java对象。Java通过ObjectInputStream和ObjectOutputStream实现序列化和反序列化。需要进行序列化的对象的类必须实现Serializable接口,通常情况下需要满足以下条件: 1. 强烈建议手动生成serialVersionUID常量 2. 如果需要加解密的话,需要实现两个方法readObject和writeObject方法 3. 如果使用Hibernate二级缓存或其它缓存服务器的话,对象必须是可序列化的 4. 如果需要远程调用对象或传值的话,则对像需要序列化 5. 序列化类的可序列化成员必须也是可序列化的,不需要序列化的属性用transient修饰 1. 查找当前ClassLoader中是否有此class的类对象,有则返回 2. 若没有的话,向上递归所有的父ClassLoader中有无此class类对象,有则返回 3. 若还没有,查找BootstrapClassLoader中有无此class类对象,有则返回 4. 若还没有的话,使用findClass或resolveClass加载类对象 a. 读取class二进制文件 b. 根据字节数组生成Class对象 c. 缓存到当前ClassLoader中 JVM加载class对象是懒加载,按需加载 Java的内存分为两类,一类是栈内存,一类是堆内存。 栈中存储的是当前线程的方法调用、基本数据类型和对象的引用,栈是有序的。 堆中存储的是对象的值,堆是无序的。 方法中的局部变量使用final修饰后,放在堆中,而不是栈中。 对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,assert将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。 可以,如果非要实现java.lang.String,需要自已写ClassLoader,不然JVM优先加载默认rt.jar中的java.lang.String。 可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去加载rt.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 { public static void main(String[] args) { System.out.println("string"); } } 报告的错误如下: java.lang.NoSuchMethodError:main Exception inthread "main" 这是因为加载了jre自带的java.lang.String,而该类中没有main方法。 1. 在web.xml中配置struts的servlet或filter入口类,同时在web.xml中配置spring的listener和配置文件路径 2. 引用SSH所需的jar包放在WEB-INF/lib下,需要有struts-spring-plugin.jar 3. 在struts.xml配置中,把Struts的Action类交由Spring托管 4. 把Hibernate所需的DataSource, SessionFactory, Transcation, HibernateTemplate配置在Spring的配置文件中 5. Dao层的类有时需要继承HiberateDaoSupport类,如果有HibernateTemplate时,可以不继承 6. 把Action、Service、Dao等类注册到Spring中管理 答: package com.bwie.interview; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.util.StringTokenizer; public class AnswerB01 { public static void main(String[] args) throws IOException { StringTokenizer tokenizer1 = getTokenzer("/a.txt"); StringTokenizer tokenizer2 = getTokenzer("/b.txt"); PrintStream out = new PrintStream("C:/c.txt"); while (tokenizer1.hasMoreTokens() && tokenizer2.hasMoreTokens()) { out.println(tokenizer1.nextToken()); out.println(tokenizer2.nextToken()); } out.close(); } private static StringTokenizer getTokenzer(String fileName) throws IOException { InputStreamReader reader = new InputStreamReader(AnswerB01.class.getResourceAsStream(fileName)); StringBuilder builder = new StringBuilder(1000); int length = -1; char[] cs = new char[1024]; while ((length = reader.read(cs)) != -1) { builder.append(cs, 0, length); } reader.close(); return new StringTokenizer(builder.toString()); } } (大家正在做上面这道题,网上迟到的朋友也请做做这道题,找工作必须能编写这些简单问题的代码!) 答:listFiles方法接受一个FileFilter对象,这个FileFilter对象就是过虑的策略对象,不同的人提供不同的FileFilter实现,即提供了不同的过滤策略。 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; public class AnswerB02 { public static void main(String[] args) throws IOException { File sourceFolder = new File("D:/java"); File[] files = sourceFolder.listFiles(new JavaFileFilter()); for (File file : files) { String absolutePath = file.getName(); String targetFile = "D:/jad/" + absolutePath.substring(0, absolutePath.length() - 5) + ".jad"; copy(file, new File(targetFile)); } } private static void copy(File source, File target) throws IOException { FileInputStream input = new FileInputStream(source); FileOutputStream out = new FileOutputStream(target); int length = -1; byte[] bs = new byte[1024]; while ((length = input.read(bs)) != -1) { out.write(bs, 0, length); } input.close(); out.close(); } private static final class JavaFileFilter implements FilenameFilter { @Override public boolean accept(File dir, String name) { return name.endsWith(".java"); } } } import java.io.IOException; public class AnswerB03 { public static void main(String[] args) throws IOException { String s = "我ABC汉DEF"; System.out.println(substring(s, 6)); } public static String substring(String s, int length) { char[] cs = s.toCharArray(); StringBuilder builder = new StringBuilder(); int count = 0; for (char c : cs) { if (isAsc(c)) { count++; } else { count += 2; } if (count > length) { break; } builder.append(c); } return builder.toString(); } public static boolean isAsc(char c) { return c < 128; } } 答:哈哈,其实包含中文字符、英文字符、数字字符原来是出题者放的烟雾弹。 String content = "中国aadf的111萨bbb菲的zz萨菲"; HashMap map = new HashMap(); for (int i = 0; i < content.length; i++) { char c = content.charAt(i); Integer num = map.get(c); if (num == null) num = 1; else num = num + 1; map.put(c, num); } for (Map.EntrySet entry : map) { system.out.println(entry.getkey() + ":" + entry.getValue()); } 估计是当初面试的那个学员表述不清楚,问题很可能是: 如果一串字符如"aaaabbc中国1512"要分别统计英文字符的数量,中文字符的数量,和数字字符的数量,假设字符中没有中文字符、英文字符、数字字符之外的其他特殊字符。 int engishCount; int chineseCount; int digitCount; for (int i = 0; i < str.length; i++) { char ch = str.charAt(i); if (ch >= '0' && ch <= '9') { digitCount++; } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { engishCount++; } else { chineseCount++; } } 这是组合设计模式。 我有很多个(假设10万个)数据要保存起来,以后还需要从保存的这些数据中检索是否存在某个数据,(我想说出二叉树的好处,该怎么说呢?那就是说别人的缺点),假如存在数组中,那么,碰巧要找的数字位于99999那个地方,那查找的速度将很慢,因为要从第1个依次往后取,取出来后进行比较。平衡二叉树(构建平衡二叉树需要先排序,我们这里就不作考虑了)可以很好地解决这个问题,但二叉树的遍历(前序,中序,后序)效率要比数组低很多,原理如下图: 代码如下: public class AnswerB04 { public static void main(String[] args) { Node root = makeupTree(); traverse(root); } private static void traverse(Node node) { if (node == null) { return; } traverse(node.left); System.out.println(node.value); traverse(node.right); } private static Node makeupTree() { Node root = new Node(0); Node node1 = new Node(1); Node node2 = new Node(2); Node node11 = new Node(11); Node node12 = new Node(12); Node node21 = new Node(21); Node node22 = new Node(22); root.left = node1; root.right = node2; node1.left = node11; node1.right = node12; node2.left = node21; node2.right = node22; return root; } public static class Node { public Node left; public Node right; public int value; public Node(int value) { this.value = value; } } } 一个整数,大于0,不用循环和本地变量,按照n,2n,4n,8n的顺序递增,当值大于5000时,把值按照指定顺序输出来。 例:n=1237 则输出为: 1237, 2474, 4948, 9896, 9896, 4948, 2474, 1237, 提示:写程序时,先致谢按递增方式的代码,写好递增的以后,再增加考虑递减部分。 public static void doubleNum(int n) { System.out.println(n); if (n <= 5000) doubleNum(n * 2); System.out.println(n); } Gaibaota(N) = Gaibaota(N-1) + n 第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大? package cn.itcast; import java.util.Date; public class A1 { public static void main(String[] args) { System.out.println(computeAge(8)); } public static int computeAge(int n) { if (n == 1) return 10; return computeAge(n - 1) + 2; } } public static void toBinary(int n, StringBuffer result) { if (n / 2 != 0) toBinary(n / 2, result); result.append(n % 2); } 本人只研究过冒泡排序、选择排序和快速排序,下面是快速排序的代码: 冒泡排序: private static void bubbleSort(int[] array) { for (int i = 1; i < array.length; i++) { for (int j = 0; j < i; j++) { if (array[i] < array[j]) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } } } } 快速排序: public class QuickSort { public void quickSort(String[] strDate, int left, int right) { String middle, tempDate; int i, j; i = left; j = right; middle = strDate[(i + j) / 2]; do { while (strDate[i].compareTo(middle) < 0 && i < right) i++; // 找出左边比中间值大的数 while (strDate[j].compareTo(middle) > 0 && j > left) j--; // 找出右边比中间值小的数 if (i <= j) { // 将左边大的数和右边小的数进行替换 tempDate = strDate[i]; strDate[i] = strDate[j]; strDate[j] = tempDate; i++; j--; } } while (i <= j); // 当两者交错时停止 if (i < right) { quickSort(strDate, i, right); } if (j > left) { quickSort(strDate, left, j); } } public static void main(String[] args) { String[] strVoid = new String[] { "11", "66", "22", "0", "55", "22", "0", "32" }; QuickSort sort = new QuickSort(); sort.quickSort(strVoid, 0, strVoid.length - 1); for (int i = 0; i < strVoid.length; i++) { System.out.println(strVoid[i] + " "); } } } public class AnswerB11 { public static void main(String[] args) { int[] array = { 2, 25, 21, 63, 234, 83 }; reverse(array); System.out.println(Arrays.toString(array)); } private static void reverse(int[] array) { for (int i = 0; i < array.length / 2; i++) { int temp = array[i]; array[i] = array[array.length - 1 - i]; array[array.length - 1 - i] = temp; } } } import java.util.Stack; public class AnswerB13 { public static void main(String[] args) { Node tree = makeupTree(); Stack Node currentNode = tree; while (currentNode != null) { System.out.println(currentNode.value); stack.push(currentNode); currentNode = currentNode.left; if (currentNode == null) { Node parent = stack.pop(); currentNode = parent.right; if (currentNode == null) { if (stack.isEmpty()) { break; } Node parentParent = stack.pop(); currentNode = parentParent.right; } } } } private static Node makeupTree() { Node root = new Node(0); Node node1 = new Node(1); Node node2 = new Node(2); Node node11 = new Node(11); Node node12 = new Node(12); Node node21 = new Node(21); Node node22 = new Node(22); root.left = node1; root.right = node2; node1.left = node11; node1.right = node12; node2.left = node21; node2.right = node22; return root; } public static class Node { public Node left; public Node right; public int value; public Node(int value) { this.value = value; } } } Page :指令是针对当前页面的指令 Forward,执行页面跳转,将请求的处理转发到另一个页面 不同: Cookie,session和application, cookie是在客户端保持状态,session是在服务器端保持状态,由于cookie是保存在客户端本地的,所以数据很容易被窃取,当访问量很多时,使用session则会降低服务器的性能,application的作用域是整个工程里只有一个,可以在不同浏览器之间共享数据,所有人都可以共享,因此application也是不安全的 在servlet中通过request.getParameter()方法可以获取表单的值 表单传参,url传参,jquery.ajax传参 1、Ajax特点: 3、Ajax核心原理 send(data):发送请求 POST方式:data就是提交的参数,send(username=root&password=abc123); GET方式:send(null) b)属性: onreadystatechange=function(){ } responseXML:服务器返回的数据(XML格式) Html(超文本标记语言)是标准通用标记语言下的一个应用,也是一种规范,一种标准。 Xhtml(可扩展超文本标记语言)是一种置标语言,表现方式与html类似,不过语法上更加严格,主要不同: 1,所有元素必须被正确嵌套, 2,所有标记必须闭合, 3,标签名,属性名必须小写字母, 4,所有的属性必须用“”括起来, 5,所有非标签一部分的><&都必须以编码形式, 6,所有属性必须要有值, 7,注释中不要有-- 8,图片必须要有说明文字 四种:内联,内嵌,外链,导入 区别: 1,link属于xhtml标签,@import完全是css提供的一种方式,link除了加载css还可以定义rss,定义rel属性等,@import只能加载css。 2,加载顺序差别:link引用的css是同时被加载的,@import引用的css会等到页面全部被下载完才会再被加载。 3,兼容性差别,@import是css2.1提出,ie5以上才支持,link没有兼容问题。 4,使用dom控制样式的差别,当用javascript去控制样式的时候,只能使用link,@import不是dom能控制的。 5,@import可以在css中再次引入其他样式表。 标签选择符,类选择符,id选择符,继承的不如指定的,id>class>Tagname Important优先级高 结构层:html由html或者xhtml负责创建,运用标签对网页内容的含义作出描述。 表示层:css由css负责创建,对如何显示有关内容做出回答。 行为层:javascript由javascript负责创建,负责回答应该如何对事件作出反应。 Ie(ie内核),火狐(Gecko),谷歌(webkit),opera(presto) Alt是在你的图片因为某种原因不能加载的时候在页面显示的提示信息,它会直接输出在原本加载图片的地方,title是在鼠标悬停在图片上的显示的小提示,鼠标离开就没了,绝大数html标签都支持title。 Css reset重置浏览器的默认css样式,浏览器种类不同,默认样式不一样,通过使用css reset重置,让他们统一,方便开发。 1,尽可能减少http请求数(文件合并) 2,使用CDN(内容分发网络) 3,添加Expire/Cache-Control头 4,启用Gzip压缩 5,css放在页面最上面 6,scrip放在页面最下面 7,避免在css中使用Expressions 8,把js和css放在外部文件中 9,减少dns查询 10,压缩javascript和css 11,避免重定向 12,移除重复脚本 13,配置实体标签 14,使用ajax缓存 根据内容的结构化(内容语义化),选择合式的标签(代码语义化),便于开发者的阅读和写出更加优雅的代码的同时让浏览器的爬虫和机器更好地解析。 1,父级定义height(优点:代码少,简单易掌握;缺点:只适合固定高度元素,无法高度自适应) 2,结尾处使用空标签清除浮动:Clear:both(优点:理论上能清除所有标签的浮动,简代码少浏览器支持好;缺点:增加了无意义的标签) 3,父级定义伪类after和zoom(优点:浏览器支持好;缺点:代码多,两句代码结合使用才能让主流浏览器都支持) 4,父级定义overflow:hidden(优点:代码少,简单,浏览器支持好;缺点:必须定义width或者zoom,同时不能定义height,不能和position配合使用) 5,父级定义overflow:auto(优点:代码少,简单,浏览器支持好;缺点:必须定义width或者zoom,同时不能定义height,内部元素高度超过父级会出现滚动条 还有,父级一起浮动,父级定义display:table,结尾加br的clear:both等 是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。页面icon很多的情况下使用合适。 HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。 绘画 canvas用于媒介回放的 video 和 audio 元素本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;sessionStorage 的数据在浏览器关闭后自动删除 语意化更好的内容元素,比如 article、footer、header、nav、section 表单控件,calendar、date、time、email、url、search 新的技术webworker, websockt, Geolocation 移除的元素 纯表现的元素:basefont,big,center,font, s,strike,tt,u; 对可用性产生负面影响的元素:frame,frameset,noframes; 支持HTML5新标签: IE8/IE7/IE6支持通过document.createElement方法产生的标签, 可以利用这一特性让这些浏览器支持HTML5新标签, 浏览器支持新标签后,还需要添加标签默认的样式: 当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架 如何区分: DOCTYPE声明\新增的结构元素\功能元素 一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合 "text" name="d1" /> "submit" /> 4、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
6、用最有效率的方法算出2乘以8等於几?
7、请设计一个一百亿的计算器
8、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
9、"=="和equals方法究竟有什么区别?
10、静态变量和实例变量的区别?
11、是否可以从一个static方法内部发出对非static方法的调用?
12、Integer与int的区别
13、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
14、请说出作用域public,private,protected,以及不写时的区别
15、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
17、写clone()方法时,通常都有一行代码(不是必须有),是什么?
18、面向对象的特征有哪些方面
19、java中实现多态的机制是什么?
20、abstract class和interface有什么区别?
21、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
22、什么是内部类?Static Nested Class和Inner Class的不同。
23、内部类可以引用它的包含类的成员吗?有没有什么限制?
24、String是最基本的数据类型吗?
27、String和StringBuffer的区别
28、如何把一段逗号分割的字符串转换成一个数组?
30、final, finally, finalize的区别。
31、运行时异常(Runtime)与检查异常(Checked)有何异同?
32、error和exception有什么区别?
33、Java中的异常处理机制的简单原理和应用。
34、请写出你最常见到的5个RuntimeException。
35、Java语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
36,Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
38、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
39. 下面两个方法同步吗?(自己发明)
40、多线程有几种实现方法?同步有几种实现方法?
41、启动一个线程是用run()还是start()?
42、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
43、线程的基本概念、线程的基本状态以及状态之间的关系
45、介绍Collection框架的结构
46、ArrayList和Vector的区别
47、HashMap和Hashtable的区别
48、List和 Map区别?
49、List, Set, Map是否继承自Collection接口?
50、List、Map、Set三个接口,存取元素时,各有什么特点?
51、说出ArrayList,Vector, LinkedList的存储性能和特性
51、去掉一个Vector集合中重复的元素
53、Collection和 Collections的区别。
54、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
55、你所知道的集合类都有哪些?主要方法?
56、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
68、说出一些常用的类,包,接口,请各举5个
59、Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
60、字节流与字符流的区别
61、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。
62、描述一下JVM加载class文件的原理机制?
63、heap和stack有什么区别。
64、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
65、什么时候用assert。
66、能不能自己写个类,也叫java.lang.String?
67、SSH集成方式
二.算法与编程
1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。
2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。
5、说明生活中遇到的二叉树,用java实现二叉树
8、递归算法题1
9、递归算法题2
10、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
11、有数组a[n],用java代码将数组元素顺序颠倒
12 不使用递归遍历二叉树
三.前端页面部分
3.当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的。
会出现线程不安全问题。无论是doGet还是doPost去调用,服务器端处理的过程都是一样的,那么我们可以把处理过程单独写在另外一个方法handle里,让两个方法都去调用handle,根据不同请求去调用不同的方法。
4.有三台服务器,如果在一台服务器上登陆了这个用户,其他两台就不能再登陆这个用户,使用session共享,你是怎么做的。
把所有的session的数据保存到Mysql服务器上,所有Web服务器都来这台Mysql服务器来获取Session数据。
5.写一个自定义标签要继承什么类
SimpleTagSupport
,一般调用doTag方法或者实现SimpleTag接口
6.Jsp如何处理json
在 jsp 中处理 JSON,通常需要配套使用 JQuery 控件,并且导入一些 Common jar 包。使用 JQuery 控件是因为它能有效的解析并且展示 JSON 数据,导入Common 则是因为 Java 中的对象并不是纯粹的数据,需要通过这些 Jar 包的处理使之转化成真实数据。
7.Jsp的重定向和转发的流程有什么区别
重定向是客户端行为,转发是服务器端行为
重定向时服务器产生两次请求,转发产生一次请求,重定向时可以转发到项目以外的任何网址,转发只能在当前项目里转发
重定向会导致request对象信息丢失。转发则不会
转发的url不会变,request.getRequestDispatch()。forward()
重定向的url会改变,response.getRedirect();
8.Jsp和servlet的区别
jsp
的可读性强,容易维护,并且jsp在最后会编译成servlet,servlet容易调试。
9.jsp可以操作窗口吗?
Jsp
不能够直接调用窗口,只能先 生成打开窗口的js,再由js调用
10.session的主要几个方法的区别
Session
不能通过new创建,需要通过调用getSession()或者getSession(true)方法创建,getSession()是自动创建session,getSession(true)是强制创建session,setAttribute()方法可以用于传值,getAttribute()可以用于取值
(第一次创建session的时候,就是访问第一次一个jsp页面<这个页面的page指令 没有设置session=false>)
销毁session调用invalidate方法
通过setMaxInactiveInterval()可以设定session的生存时间(web.xml可以设置session的生存时间)
11.jsp的三大指令,七大动作的具体功能
三大指令:
Include :用于指定如何包含另一个页面
Taglib :用于定义和指定自定义标签七大动作:
Param :用于传递参数
Include :用于动态引入一个jsp页面
Plugin :用于下载javaBean或applet到客户端执行
useBean :使用javaBean
setProperty :修改javaBean实例的属性值
getProperty :获取javaBean实例的属性值12.获取页面的元素和值有几种方式,分别说一下
request.getParameter()
返回客户端的请求参数与值
request.getParameterNames()
返回所有可用属性名的枚举
request.getParameterValues()
返回包含参数的所有值的数组
13.servlet和javaScript的区别,他们分别是什么作用
一个是服务端,一个是客户端
Servlet
是独立于平台和协议的服务器端的java应用程序,可以动态生成web页面,并采用响应--请求的模式提供web服务
javaScript
是一种解释性语言,用于向html页面提供交互行为,通常被直接嵌入在html页面中
servlet
是java语言编写的web应用
js
是基于html上的一种解释语言
14.jsp的执行原理
客户端发出请求(request),jsp引擎将jsp页面翻译成servlet的java源文件,在Tomcat中将源文件编译成class文件,并加载到内存中执行,把结果返回(response)给客户端。
16.HTML和Servlet的异同
Html是静态,servlet是动态
html页面由服务器直接返回,
servlet是用来处理客户请求,并返回html页面
//servlet需要服务器调用servlet方法生成动态html页面,且需要在web.xml中配置url路径17.会话跟踪有哪些,他们的区别是什么
Cookie是http对象,客户端与服务端都可以操纵18.session和application的作用
Session
用于客户端与服务器之间保持状态的解决方案,数据保存在服务器内存中,底层是有cookie实现的
Application
的作用域是整个工程里只有一个,可以在不同浏览器之间共享数据,所有人都可以共享,因此application是不安全的。
19.request ,response,session 和 application是怎么用的
Request
是客户端向服务端发送请求
Response
是服务端对客户端请求做出响应
Session
在servlet中不能直接使用,需要通过getSession()创建,如果没有设定它的生命周期,或者通过invildate()方法销毁,关闭浏览器session就会消失
Application
不能直接创建,存在于服务器的内存中,由服务器创建和销毁
20.有几种方式将页面的值传到后台
可通过form表单的get或post将值传递到后台,也可通过setAttribute()方法将值传递到后台
21.一个form表单的值如何获取
或者是request.getParameterValuse();22.传递参数到后台有几种方式
23.Jsp中父页面中怎么拿到子页面的表单元素,不是拿值怎么拿
通过设置属性setAttribute(),通过getAttribute()拿值,getParameter()方法可以做到
24.定义一个String类型的字符串,如果重定向之后还能不能获得这个数据
不能
25.404和500是什么意思
404
:找不到url请求的路径,一般是工程名不对或者拼写错误
500
:服务器内部错误,一般是服务器内部代码编写错误,也有可能是抛异常导致
26.写出5种JSTL常用标签
,
28.Jsp页面把一个元素隐藏的方法
通过使用属性hidden可以将元素隐藏
29.Session,application,cookie的区别
Session
不能通过new创建,要通过调用getSession()方法创建,数据保存在服务器端,单个客户端session是共享的,底层是由cookie实现的,大小没有限制
Application
的作用域是整个工程只有共享一个,生命周期比session大
Cookie
需要通过new创建,数据保存在客户端中,cookie保存的数据不能超过4k,不安全
30.我们在web应用开发过程中经常遇到输出某种编码的字符,如ISO-8859-1,如何输出一个某种编码的字符串
如将ISO-8859-1输出为GBK格式的字符, 通过new String(byte[] bytes,String charset) 构造器设置编码构造一个新的String(new String("ISO-8859-1","GBK"));
32.怎么判断用户请求时是第一次,如果客户端和服务端断开怎么连到上一次操作
通过session中的isNew()可以判断是否是新用户
33.如果创建servlet实例不用构造方法,怎么创建一个servlet实例
Web
容器会自动为servlet写一个无参的构造器,它使用class.forName("").newInstance()反射来创建servlet实例的
34.Servlet是安全的吗?当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的
是线程不安全的,因为servlet是单例模式,当多个客户端共同访问的时候线程不安全。
尽量用局部变量,同步块,如果当前字段是不会改变的,用final修饰
36.说明一下jsp中
是行为元素、是在请求处理阶段引入的,引入执行页面或servlet所生成的应答文本
先编译,后包含,就是将每个jsp页面都单独转化成html页面,最后再将所有的html页面相加,如果有相同变量不会冲突
<%@ include file="" %> 静态导入
是指令元素
是编译时包含,引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。先包含,后编译
就是将多个jsp一起解析,最后再一起生成html页面,如果有相同变量会冲突
37. pageContext有什么作用
可以使用pageContext对象来设定属性,并指定属性的作用范围,提供了对JSP页面内所有的对象及名字空间的访问
39.Filter与拦截器怎么执行的
首先初始化过滤器,然后服务器组织过滤器链,所有的请求都必须需要先通过过滤器链,
过滤器链是一个栈,遵循先进后出的原则 ,所有的请求需要经过一个一个的过滤器,执行顺序要根据web.xml里配置的
40.Jsp中如何进行分页,项目中如何进行分页?
需要上一页和下一页的超链接(至少需要这两个),通过计算当前页的页码获取下一页数据
的起始位置,然后在 MySql 中查询,如果使用 Oracle 则需要另外计算下一页数据的结
束位置。
使用hibernate框架,它可以针对不同的数据库自动产生为你分页的代码。
41,关于Ajax的技术组成与核心原理
局部刷新、提高用户的体验度,数据从服务器商加载。
2、AJax的技术组成:不是新技术,而是之前技术的整合
Ajax: Asynchronous Javascript And Xml;(异步的JavaScript和XML)
包括的技术:JavaScript、XML、CSS、XMLHttpRequest
异步:发送请求以后,不等结果,由回调函数处理。
JavaScript:向服务器发送请求,获得返回结果,更新页面
XML: 用来封装数据
XMLHttpRequst对象:通过该对象向服务器发送请求。
它是异步请求的技术,所有现代浏览器都支持(Chrome、IE5+)
1)创建XMLHttpReuest对象
非IE浏览器(Mozilla/Safari):
var xhr=new XMLHttpRequest();
IE:
xhr=new ActiveXObject("Msxml2.XMLHTTP");
低版本IE:
xhr=new ActiveXObject("Microsfot.XMLHTTP");
2)XMLHttpRequest对象的属性与方法
a)方法:
open("GET/POST",URL,true/false):用来向服务器建立连接
有三个参数:
参数1:提交方式,post或get
参数2:请求的URL
参数3:表示同步或异步请求,true:表示异步请求
false: 表示同步请求
参数:提交的内容。
onreadystatechange:设置状态改变时的回调函数,回调函数用来获取服务器数据。
readyState:服务器状态响应
状态码:
0:未初始化
1:正在加载
2:加载完成
3:请求进行中
4:请求完成
responseText:服务器返回的数据(文本格式)43.Xhtml和html有什么区别。
44.css的引入方式有哪些?link和@import的区别是?
45.css选择符有哪些?哪些属性可以继承?优先级如何计算?内联和important哪个优先级高?
46.前端页面由哪三层构成,分别是什么?作用是什么?
47.你曾经在哪些浏览器测试过兼容?这些浏览器的内核分别是什么?
48.
标签上title与alt属性的区别是什么?
50.描述css reset的作用和用途。
51.你如何对网站的文件和资源进行优化?期待的解决方案包括:
52.什么是语义化的html?
53.清除浮动有几种方式?各自的优缺点是?
54.解释下 CSS sprites,以及你要如何在页面或网站中使用它?
55,html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和HTML5??
56.javascript的同源策略。
57、HTML的 form提交之前如何验证数值文本框的内容全部为数字?否则的话提示用户并终止提交?