java笔试题总结

java笔试题总结
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 的职责是什么?

校验输入数据

调用业务逻辑方法

检测处理异常

根据逻辑进行转向操作

相关主题
相关文档
最新文档