java笔试题总结
一:
public class A{
Integer m =new Integer(218); Integer n=new Integer(218); System.out.println(m==n); System.out.println(m.equles(n)); m–;
n–;
System.out.println(m==n); System.out.println(m.equles(n)); }
写出运行结果和理由
二:
publicclass A{
Int i=10;
Public A(){
System.out.println(i);
I=20;
}
}
Public class B extends A(){
Int i=30;
Public B(){
System.out.println(i);
I=40;
}
}
Public class Test{
Public void main(string [] args){
New B();
}
}
写出运行结果和理由.
三、
遍历d盘输出d盘.txt的文件名;
四、Set s = new Set() 是不是对的.为什么?
五、说一说你使用过的框架,所说她们的优点和特性六..写一个自己熟悉的排序算法,说出他的实现方式; 七.写几个类之间一对一一对多,多对多的关系八.Arraylist,Vector,linkedList之间的性能和区别九.String转Date ,Date转String
答案:
1. false,true,false,true
2. 10,30
3.Cmd->d:->dir *.txt/s
4.不对,Set是继承至Collection接口的接口,接口不能被实例化。
5.
Struts2:
1.Struts2基于MVC架构,架构结构清晰,开发流程一目了然,开发人员可以很好的掌控开发流程;
2.使用OGNL进行参数传递;
3.强大的拦截器(登陆验证、权限验证、异常处理、文件上传等);
4.易于测试;
5.易于扩展的插件机制;
6.模块化;
7.全局结果与声明式异常。
hibernate3:
1.对象/关系数据库映射;
2.持久化(Persistent);
3.事务(Transaction);
4.缓存机制(提供一级缓存和二级缓存);
5.简介的HQL编程
Spring3:
1.spring的IOC(反转控制和依赖注入)反转控制就是由容器控制程序间的依赖关系,而非传统实现中通过代码直接操控,依赖注入就是组件之间的依赖关系由容器在运行期决定,由容器动态的将某种依赖关系注入到组件中,IOC使开发业务逻辑更清晰、专业分工更加容易进行;
2.AOP应用(事务处理):spring容器继承了transactionTemplate,它封装了所有对事务处理的功能,包括异常时事务回滚,操作成功时数据提交等复杂业务功能(hibernate中也有对事务的管理,hibernate中事务管理是通过SessionFactory创建和维护Session来完成的,而spring对SessionFactory的配置也进行了整合),AOP降低了程序的耦合性,
使我们可以在不同的应用中将各个切面结合起来使用,大大提高代码的重用。
6.交换排序分为冒泡排序(稳定)和快速排序(不稳定),其中冒泡排序的原则:冒泡排序将被排序的记录数组垂直排列,每个记录看做是重量为k的气泡,根据轻气泡不能再重气泡之下的原则,从下往上扫描数组,凡扫描到违反本原则的轻气泡,就使其向上“漂浮”,如此反复进行,直到最后两个气泡都是轻者在上、重者在下为止。
7.
8.ArrayList、V ector、LinkedList都实现至List接口;ArrayList和V ector比较:ArrayList 是非同步的,V ector是同步的,所以ArrayList的性能略好于V ector;ArrayList、V ector 和LinkedList比较:ArrayList和V ector索引数据快、从前或中间插入数据慢,LinkedList 索引数据慢,从前或中间插入数据快。
9.Calendar calendar=Calendar.getInstance();
Date time=calendar.getTime();
SimpleDateForma t sdf=new SimpleDateFormat(“yyyy-MM-dd”);
//Date转String:
String str=sdf.format(time);
System.out.println(“str====”+str);
//String转Date:
Date myDate=sdf.parse(str);
System.out.println(“date====”+myDate.getTime());
-----------------------------------------------------------------------------------------
1.什么是封装?Java语言中的封装类有哪些?
参考答案:
封装是表示把数据项和方法隐藏在对象的内部,把方法的实现内容隐藏起来。Java中的封装类有Double、Integer、Float、Byte、Long、Character、Short和Boolean等类。
2.什么是泛型?使用泛型有什么优点?泛型List和普通List有什么
区别?
参考答案:
泛型是对Java语言的数据类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看做是使用参数化类型时指定的类型的一个占位符。
优点:提高Java程序的类型安全;消除强制类型转换;提高代码的重用率。
泛型List可以实例化为只能存储某种特定类型的数据,普通List可以实例化为存储各种类型的数据。通过使用泛型List对象,可以规范集合对象中存储的数据类型,在获取集合元素时不用进行任何强制类型转换。
-----------------------------------
2.int 和Integer 有什么区别
3.说一说Collection,List,V ector,Set,Map,HashMap,HashTable,ArrayList,LinkedList 之间的关系
4.具体阐述一下多态,分几种,具体有哪些表现形式
5.说一说servlet的生命周期
servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
6.bean 实例的生命周期
(1)实例化(必须的)构造函数构造对象
(2)装配(可选的)为属性赋值
(3)回调(可选的)(容器-控制类和组件-回调类)
(4)初始化(init-method=" ")
(5)就绪
(6)销毁(destroy-method=" ")
具体情况如下:
1:Bean的建立:
有BeanFactory读取Bean定义文件,并生成各个Bean实例
2:属性注入:
执行相关的Bean属性依赖注入
3:BeanNameA ware的setBeanName():
如果Bean类有实现org.springframework.beans.BeanNameA ware接口,则执行它的setBeanName()方法
4:BeanFactoryA ware的setBeanFactory():
如果Bean类有实现org.springframework.beans.factory.BeanFactoryA ware接口,则执行它的setBeanFactory()方法
5:BeanPostProcessors的ProcessBeforeInitialization()
如果任何的org.springframework.beans.factory.config.BeanPostProcessors实例与Bean实例相关。则执行BeanPostProcessors实例
的processBeforeInitialization()方法
6:initializingBean的afterPropertiesSet():
如果Bean类已实现org.springframework.beans.factory.InitializingBean接口,则执行他的afterProPertiesSet()方法
7:Bean定义文件中定义init-method:
可以在Bean定义文件中使用"init-method"属性设定方法名称例如:
如果有以上设置的话,则执行到这个阶段,就会执行initBean()方法8:BeanPostProcessors的ProcessaAfterInitialization()
如果有任何的BeanPostProcessors实例与Bean实例关联,则执行BeanPostProcessors实例的ProcessaAfterInitialization()方法
9:DisposableBean的destroy()
在容器关闭时,如果Bean类有实现
org.springframework.beans.factory.DisposableBean接口,则执行他的destroy()方法10:Bean定义文件中定义destroy-method
在容器关闭时,可以在Bean定义文件中使用"destroy-method"属性设定方法名称,例如:
如果有以上设定的话,则进行至这个阶段时,就会执行destroyBean()方法,如果是使用ApplicationContext来生成并管理Bean的话
则稍有不同,使用ApplicationContext来生成及管理Bean实例的话,在执行BeanFactoryA ware的setBeanFactory()阶段后,若Bean
类上有实现org.springframework.context.ApplicationContextA ware接口,则执行其setApplicationContext()方法,接着才执行
BeanPostProcessors的ProcessBeforeInitialization()及之后的流程
7.MVC的各个部分都有那些技术来实现?如何实现?
MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),"View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
8.简述一下java的垃圾回收机制
9.说一说JSP的内置对象及方法
10.什么情况下调用doGet()和doPost()?有什么区别?
11.请简述接口的作用,以及接口和抽象类的区别
1.写一个SQL语句,输出系统当前时间,要求精确到时分秒
2.说一说ORDER BY 和GROUP BY的区别和关系
第三题最难,我擦,我直接没做,有3个表,需要实现多关联映射的,这尼玛谁没事记这个代码,我一般直接上网COPY的,
-----------------------------------------------------------------------------------
1.http协议中post和get的区别
(1)get是从服务器上获取数据,post是向服务器传送数据。
(2)在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST 方式,数据放置在HTML HEADER内提交。
(3)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
(4)GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
(5)安全性问题。正如在(1)中提到,使用Get 的时候,参数会显示在地址栏上,而Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用
get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用post
为好。
2. 同步和异步有何异同,在什么情况下分别使用他们?举例说明。
举个例子:普通B/S模式(同步)AJAX技术(异步)
同步:提交请求->等待服务器处理->处理完毕返回这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。
所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。
讯为例
同步:发送一个请求,等待返回,然后再发送下一个请求
异步:发送一个请求,不等待返回,随时可以再发送下一个请求
并发:同时发送多个请求
3.heap和stack有什么区别
1.heap是堆,stack是栈。
2.stack的空间由操作系统自动分配和释放,heap的空间是
手动申请和释放的,heap常用new关键字来分配。
3.stack空间有限,存取速度快;heap的空间是很大的自由
区,存取速度慢。
在Java中,
若只是声明一个对象,则先在栈内存中为其分配地址空间,
若再new一下,实例化它,则在堆内存中为其分配地址。
4.举例:
数据类型变量名;这样定义的东西在栈区。
如:Object a =null; 只在栈内存中分配空间
new 数据类型();或者malloc(长度); 这样定义的东西就在堆区
如:Object b =new Object(); 则在堆内存中分配空间
4.forward 和redirect的区别
Forward(转发)是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,所以它的地址栏中还是原来的地址
Redirect(重定向)就是服务端根据逻辑,发送一个状态码,
告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。w eb应用程序会要求客户端浏览器重新发出请求地址,客户端会重新连接至所指定的地址,
RequestDispatcher.forward()方法和HttpServletResponse. sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,他是不会改变Request的值,如果你需要在下一个页面中能从中获取新的信息的话,你可以Request.setAttribute()来放置一些标志,这样从下一个页面中获取;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,
1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数
据.
redirect:不能共享数据.
3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4.从效率来说
forward:高.
redirect:低.
5.什么情况下调用doGet()和doPost()?
Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。--------------------------------------------------
数据库题目
1.为管理岗位业务培训信息,建立3个表:
S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (C#,CN ) C#,CN 分别代表课程编号、课程名称
SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩
要求实现如下5个处理:
1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
Select s#,sn from SC where s# in(select s# from C,SC where C.C#=SC.C# and
https://www.360docs.net/doc/109578606.html,="税收基础");
2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位
3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位
4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
5. 查询选修了课程的学员人数
6. 查询选修课程超过5门的学员学号和所属单位
1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名SELECT SN,SD FROM S WHERE [S#] IN(
SELECT [S#] FROM C,SC WHERE C.[C#]=SC.[C#] AND CN=N’税收基础’) 2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位SELECT S.SN,S.SD FROM S,SC WHERE S.[S#]=SC.[S#] AND SC.[C#]=’C2′3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位SELECT SN,SD FROM S WHERE [S#] NOT IN(
SELECT [S#] FROM SC WHERE [C#]=’C5′)
4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位SELECT SN,SD FROM S WHERE [S#] IN(
SELECT [S#] FROM SC RIGHT JOIN C ON SC.[C#]=C.[C#]
GROUP BY [S#] HA VING COUNT(*)=COUNT(DISTINCT [S#]))
5. 查询选修了课程的学员人数
SELECT 学员人数=COUNT(DISTINCT [S#]) FROM SC
6. 查询选修课程超过5门的学员学号和所属单位
SELECT SN,SD FROM S WHERE [S#] IN(
SELECT [S#] FROM SC
GROUP BY [S#] HA VING COUNT(DISTINCT [C#])>5)
---------------------------------------------------------------------------------------------------------------- 1.怎样得到一个文件的后缀名,io的设计思路:
public static void test3(){
//得到文件的后缀名
File f=new File(“F:/121.txt”);
if(f.exists()){
String fileName=f.getName();
int index=fileName.indexOf(“.”);
String s=fileName.substring(index+1);//从index+1位开始截取到最后一位
System.out.println(s);
}
}
2. Integer a和int b运行之后a和b有什么不同?都没有赋值的情况下他们的初始值各是什么?
答:Integer a 定义为整型变量对象,默认值为null;int b 定义为整数变量,默认值为0;
3.有两个表:
dept表:
deptno(部门编号)
dname(部门名称)
emp表:
empno(雇员编号)
ename(雇员名字)
job(工作职务)
mgr(经理编号)
sal(工资)
deptno(部门编号)
a) 查询emp表中雇员姓名、工资、部门编号,并按照部门编号从高到低,工资从低到高排序,用两种方式写出来。(我只写出来一种)
b) 找出部门10中所有办事员(’CLERT’)的资料
c) 查询部门编号、部门最高工资、部门最低工资。
d) 查询每个部门中工资大于部门平均工资的前五个员工的姓名、工资、部门编号
e) 分页查询,每五条记录为一页,查询emp表中第二页的员工信息
f) 查询emp表中雇员姓名、工资、部门编号,并按照部门编号从高到低,工资从低到高排序,用两种方式写出来。(我只写出来一种)
3.创建一个对象只能通过new吗?
5种方式:
1.new
2.反射newInstance
Student stu= Student Class.forName("cn.test.Student").newInstance();
3.克隆clone
4.序列化Serializable
5.使用Spring的DI
4.sleep与wait的区别
sleep()可以将一个线程睡眠,参数可以指定一个时间。
而wait()可以将一个线程挂起,直到超时或者该线程被唤醒。
sleep和wait的区别有:
1,这两个方法来自不同的类分别是Thread和Object
2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep 可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
5.struts2工作原理
上图来源于Struts2官方站点,是Struts 2 的整体结构。
一个请求在Struts2框架中的处理大概分为以下几个步骤
1 客户端初始化一个指向Servlet容器(例如T omcat)的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做
ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的
客户端发出请求,请求经过一系列的过滤器,过滤器调用acti on,action返回执行结果。
6.spring工作原理
1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。
2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
3.DispatcherServlet请请求提交到目标Controller
4.Controller进行业务逻辑处理后,会返回一个ModelAndView
5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
6.视图对象负责渲染返回给客户端。
7.hibernate工作原理
1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的
3.通过config.buildSessionFactory();//创建SessionFactory
4.sessionFactory.openSession();//打开Sesssion
5.session.beginTransaction();//创建事务Transation
6.persistent operate持久化操作
7.session.getTransaction().commit();//提交事务
8.关闭Session
9.关闭SesstionFactory
为什么要用hibernate?
*对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
* Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
* hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
* hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
8.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行
操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、
9.如何优化Hibernate?
1.使用双向一对多关联,不使用单向一对多
2.灵活使用单向一对多关联
3.不用一对一,用多对一取代
4.配置对象缓存,不使用集合缓存
5.一对多集合使用Bag,多对多集合使用Set
6. 继承类使用显式多态
7. 表字段要少,表关联不要怕多,有二级缓存撑腰
10.ajax的工作原理
AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
ajax并非一种新的技术,而是几种原有技术的结合体。它由下列技术组合而成。
1.使用CSS和XHTML来表示。
2.使用DOM模型来交互和动态显示。
3.使用XMLHttpRequest来和服务器进行异步通信。
4.使用javascript来绑定和调用
Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
实际上就是通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面
----------------------------------------------------------------------------------------- 1. 请简述STRUTS架构
Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。Struts有如下的主要功能:一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans 属性、国际化的提示和消息。
二.struts的设计模式,struts的对象及作用
MVC模式(Model-V iew-Controller 模型-视图-控制器)
Struts主要担当了控制器的作用
Actionform,ActionMapping:ActionError,V alidatorform
三.update()和saveorupdate()的区别,
update() 更新,没有主键会报错
saverOrUpdate() 保存或者更新,没有主键就执行插入。
四、写出你熟悉的开源框架以及各自的作用。
答:框架:hibernate,spring,struts.
Hibernate主要用于数据持久化;
Spring 的控制反转能起到解耦合的作用;
Struts 主要用于流程控制;
服务器类:Apache T omcat Jboss等
五.Struts2 中的action 的职责是什么?
校验输入数据
调用业务逻辑方法
检测处理异常
根据逻辑进行转向操作