java面试笔试问题汇总.docx

上传人:b****6 文档编号:12955360 上传时间:2023-06-09 格式:DOCX 页数:15 大小:26.42KB
下载 相关 举报
java面试笔试问题汇总.docx_第1页
第1页 / 共15页
java面试笔试问题汇总.docx_第2页
第2页 / 共15页
java面试笔试问题汇总.docx_第3页
第3页 / 共15页
java面试笔试问题汇总.docx_第4页
第4页 / 共15页
java面试笔试问题汇总.docx_第5页
第5页 / 共15页
java面试笔试问题汇总.docx_第6页
第6页 / 共15页
java面试笔试问题汇总.docx_第7页
第7页 / 共15页
java面试笔试问题汇总.docx_第8页
第8页 / 共15页
java面试笔试问题汇总.docx_第9页
第9页 / 共15页
java面试笔试问题汇总.docx_第10页
第10页 / 共15页
java面试笔试问题汇总.docx_第11页
第11页 / 共15页
java面试笔试问题汇总.docx_第12页
第12页 / 共15页
java面试笔试问题汇总.docx_第13页
第13页 / 共15页
java面试笔试问题汇总.docx_第14页
第14页 / 共15页
java面试笔试问题汇总.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

java面试笔试问题汇总.docx

《java面试笔试问题汇总.docx》由会员分享,可在线阅读,更多相关《java面试笔试问题汇总.docx(15页珍藏版)》请在冰点文库上搜索。

java面试笔试问题汇总.docx

java面试笔试问题汇总

各笔试面试题目汇总

拦截器跟过滤器的区别(至少说3点)

过滤器与拦截器的区别 

过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符 

拦截器,是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

 

  

拦截器与过滤器的区别 :

 

1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。

  

2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

  

3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

  

4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

  

5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次  执行顺序 :

过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。

个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action;Action处理完成返回后,拦截器还可以做其他过程(还没想到要做啥),再向上返回到过滤器的后续操作。

面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。

而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。

实际上也就是说,让不同的类设计不同的方法。

这样代码就分散到一个个的类中去了。

这样做的好处是降低了代码的复杂程度,使类可重用。

 

      但是人们也发现,在分散代码的同时,也增加了代码的重复性。

什么意思呢?

比如说,我们在两个类中,可能都需要在每个方法中做日志。

按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。

也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。

 

    也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用。

但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。

那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?

这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

        一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。

有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。

 这样看来,AOP其实只是OOP的补充而已。

OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。

有了AOP,OOP变得立体了。

如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。

从技术上来说,AOP基本上是通过代理机制实现的。

  

     AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。

js的内置对象?

作为一门编程语言,JavaScript提供了一些内置的对象和函数。

内置对象提供编程的几种最常用的功能。

JavaScript内置对象有以下几种。

●String对象:

处理所有的字符串操作

●Math对象:

处理所有的数学运算

●Date对象:

处理日期和时间的存储、转化和表达

●Array对象:

提供一个数组的模型、存储大量有序的数据

●Event对象:

提供JavaScript事件的各种处理信息

内置对象都有自己的方法和属性,访问的方法如下:

1.时间对象

时间对象是JavaScript的内置对象,使用前必须先声明。

基本语法

varcurr=newData();

注意这里的关键字new的用法,Data()的首字母必须大写。

语法解释

set底层是如何实现?

如果要排成有序该怎么做?

Set和Map关联之处

HashMap底层的Hash存储机制

Set实现的底层依然是Map

List集合代表线性表

ArrayList集合底层的数组实现

LinkedList集合底层的链表实现

ArrayList和LinkedList在不同场景下的性能差异

不同集合类对Iterator提供的实现类

不同集合在Iterator迭代时删除元素的行为差异

Set代表一种集合元素无序、不可重复的集合,Map则代表一种由多个key-value对组成的集合,Map集合类似于传统的关联数组。

从表面上看,它们之间的相似性很少,但实际上Map和Set之间有莫大的关联,可以说,Map集合是Set集合的扩展

/*获取set集合*/

SetemployeeSet=department.getEmployeeSet();

/*将Set集合转为List,这样获得的list并不能有序排列*/

ListemployeeList=newArrayList(employeeSet);

/*将list有序排列*/

Collections.sort(employeeList,newComparator(){

publicintcompare(Employeearg0,Employeearg1){

returnarg0.getEmployeeId().compareTo(arg1.getEmployeeId());//按照id排列

}

});

hibernate的三种状态?

Hibernate三种状态之一:

临时状态(Transient):

用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;

Hibernate三种状态之二:

持久化状态(Persistent):

已经持久化,加入到了Session缓存中。

如通过hibernate语句保存的对象。

处于此状态的对象叫持久对象;

Hibernate三种状态之三:

游离状态(Detached):

持久化对象脱离了Session的对象。

如Session缓存被清空的对象。

特点:

已经持久化,但不在Session缓存中。

处于此状态的对象叫游离对象;

经常使用的快捷键?

Ctrl+cctrl+vctrl+zctrl+fAlt+/ctrl+1shift+ctrl+0shift+enterctrl+dshift+ctrl+/shift+ctrl+c

经常学习的网站是sdcn?

在做项目中经常出现的异常?

ajax的底层是怎么实现的。

ie内核,request,response等式

通过浏览器内置的一个特殊的对象,(XMLHttpRequest)异步地向服务器发送请求,服务器发送的并不是一个完整的页面,而是部分的数据(文本或xml文档),利用javascript,可以使用这些数据更新当前页面,整个过程,页面无刷新,不会打断用户的操作。

hibernate与JDBC的优缺点。

一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和AppServer,和EJB没有什么必然的联系。

Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。

从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。

二、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和AppServer没有任何关系,也不存在兼容性问题。

三、Hibernate不能用来直接和EntityBean做对比,只有放在整个J2EE项目的框架中才能比较。

并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是EntityBean的替代者出现的

JDBC与Hibernate在性能上相比,JDBC灵活性有优势。

而Hibernate在易学性,易用性上有些优势。

当用到很多复杂的多表联查和复杂的数据库操作时,JDBC有优势。

hibernate与ibatis的区别。

iBatis的特性更容易进行SQL的优化

iBatis的特性是可以进行细粒度的优化

可维护性方面,我觉得iBatis更好一些。

因为iBatis的SQL都保存到单独的文件中。

而Hibernate在有些情况下可能会在java代码中保存sql/hql。

在不考虑cache的情况下,iBatis应该会比Hibernate快一些或者很多

当然iBatis和Hibernate相比也有比较大的缺点

1.不同数据库类型的支持不好,如果你要开发的系统是要在对中数据间移植,那可能用Hibernate比较好。

2.缺省的cache支持不好,但是Hibernate的cache支持其实也不是很好,而且很复杂。

尤其是对于大并发量的应用。

所以我更倾向于自己管理cache。

在ajax和javaScript中分别有两个Windows.alert().他们会不会弹出几个窗口。

Ajax只会弹出一个,javaScript会两个都弹出来

从1加到N求和(N可能为100亿),写一个效率最高的方法?

不能用for循环

谈谈你对oracle索引的认识?

索引有B-TREE、BIT、CLUSTER等类型。

ORACLE使用了一个复杂的自平衡B-tree结构;通常来说,在表上建立恰当的索引,查询时会改进查询性能。

但在进行插入、删除、修改时,同时会进行索引的修改,在性能上有一定的影响。

有索引且查询条件能使用索引时,数据库会先度取索引,根据索引内容和查询条件,查询出ROWID,再根据ROWID取出需要的数据。

由于索引内容通常比全表内容要少很多,因此通过先读索引,能减少I/O,提高查询性能。

b-treeindex/bitmapindex/functionindex/patitionalindex(local/global)索引通常能提高select/update/delete的性能,会降低insert的速度,

servlet的生命周期

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

创建表多表查询数据

当当网登录界面用户命不为空的实现原理

xml和jsp的区别

首先XML是一种元标记语言XML是一种通用的数据格式从低级的角度看,xml是一种简单的数据格式,是纯100%的ASCII文本,而ASCII的抗破坏能力是很强的。

不象压缩数据和java对象,只要破坏一个数据文件数据就不可阅读。

从高级的角度看,是一种自描述语言。

jsp是动态执行的。

例如,它们可以处理表单form和读写数据库。

xml正变成一种非常健壮的,便于编程的工具,作为某个成熟的数据库的前端工具来进行存储和查询。

在一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个servlet。

而这个引擎本身也是一个servlet,

写出mysql,oracle的分页

MySql:

select*fromtablelimitn1,n2;

n1=(pagenow-1)*pagesize;

n2=pagenow*pagesize;

Oracle:

select/*+first_rows(10)*/b.*from

(select/*+first_rows(10)*/a.*,rownumrnumfrom

(select/*+first_rows(10)*/*fromstudent)awhererownum<="+currentPage*pageSize+"

)b

wherernum>=(currentPage-1)*pageSize;

set的底层实现

Java中的set是一个不包含重复元素的集合,确切地说,是不包含e1.equals(e2)的元素对。

Set中允许添加null。

Set不能保证集合里元素的顺序。

在往set中添加元素时,如果指定元素不存在,则添加成功。

也就是说,如果set中不存在(e==null?

e1==null:

e.queals(e1))的元素e1,则e1能添加到set中。

hibernate中的一级缓存的生命周期?

二级缓存

Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中SessionFactory的缓存又可以分为两类:

内置缓存和外置缓存。

Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。

SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据。

SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来,SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。

SessionFactory的外置缓存是一个可配置的插件。

在默认情况下,SessionFactory不会启用这个插件。

外置缓存的数据是数据库数据的拷贝,外置缓存的介质可以是内存或者硬盘。

SessionFactory的外置缓存也被称为Hibernate的第二级缓存。

Hibernate的二级缓存策略的一般过程如下:

  1)条件查询的时候,总是发出一条select*fromtable_namewhere….(选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。

  2)把获得的所有数据对象根据ID放入到第二级缓存中。

  3)当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。

  4)删除、更新、增加数据的时候,同时更新缓存。

  Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。

为此,Hibernate提供了针对条件查询的Query缓存。

  Hibernate的Query缓存策略的过程如下:

  1)Hibernate首先根据这些信息组成一个QueryKey,QueryKey包括条件查询的请求一般信息:

SQL,SQL需要的参数,记录范围(起始位置rowStart,最大记录个数maxRows),等。

  2)Hibernate根据这个QueryKey到Query缓存中查找对应的结果列表。

如果存在,那么返回这个结果列表;如果不存在,查询数据库,获取结果列表,把整个结果列表根据QueryKey放入到Query缓存中。

  3)QueryKey中的SQL涉及到一些表名,如果这些表的任何数据发生修改、删除、增加等操作,这些相关的QueryKey都要从缓存中清空。

Hibernate中load和get的区别

1.get()采用立即加载方式,而load()采用延迟加载;

get()方法执行的时候,会立即向数据库发出查询语句,

而load()方法返回的是一个代理(此代理中只有一个id属性),只有等真正使用该对象属性的时候,才会发出sql语句

2.如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException

hibernate的get/load的根本区别分为4点:

第一点是:

load会抛出异常,get会返回空,一般采用的load方法。

第二点是:

get只返回实体对象实例。

而load返回的是代理类实体对象实例。

第三点是:

get方法只能使用一级缓存。

而load可以使用一级和二级缓存。

第四点是:

都是通过id得到单个对象的方法。

说说struts2中的Mvc

MVC思想将一个应用分成了Model,View,Control三个部分。

三个部分以最少的耦合协同工作,从而提高应用的可扩展性和维护性。

MVC具有以下特点:

1.多个视图对应一个模型

2.模型返回的数据与显示逻辑分离

3.三层架构导致的低耦合性和易维护性

在struts2中,Model对应业务逻辑组件,它通常用于实现业务逻辑方法以及以及与底层数据库的交互等;View对应视图组件,通常是指JSP页面,但也适用于其他视图显示技术,如Velocity或者Excel文档;Control对应系统核心控制器和业务逻辑控制器,系统核心控制器为Struts2框架提供的FilterDispatcher,它根据请求自动调用相应的Action。

而业务逻辑控制器是指开发人员自行定义的一系列Action,在Action中负责调用相应的业务逻辑组件来完成处理。

spring控制反转和依赖注入的区别

IOC控制反转:

说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理。

DI依赖注入:

说的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。

它们是spring核心思想的不同方面的描述。

DI和IOC

DI和IOC是差不多的概念。

一个重要特征是接口依赖,是把对象关系推迟到运行时去确定.

DI是一个初始化实例的过程,分为三种

1.setterbased

2.constructorbased

3.interfacebased,

在spring中就是应用前两种;但又不仅仅是初始化实例,而且是运用接口的概念去实现这种注入依赖。

静态地看,只是依赖一个接口,但实际运行起来,是依赖一个实现了该接口的具体类。

IOC就是面向接口编程的应用

1.一个通常的做法(非面向接口编程的方法),对象A依赖对象B,B会作为A的属性,可以理解为A直接控制B;

2.IOC的做法,对象A依赖于接口C,而不直接依赖于实现了接口C的B,也就是A不能直接控制是哪个具体实现了C的B去做相应的事情,而是由我们控制可以由哪个实现了接口C的B去处理,也就是控制反过来了,是由B来决定了,而不是由A,实现就是面向接口编程。

AOP

AOP是动态代理的应用,将具体业务和相应的其它方面(比如日志,权限之类的)划分开来,业务不会知道还有没有其它的功能来辅助,需要的话我就给他加上一个配置就可以,而不用去修改业务代码。

说说AOP怎么实现?

举个例子

AOP实现中,可以看到三个主要的步骤,一个是代理对象的生成,然后是拦截器的作用,然后是Aspect编织的实现。

AOP框架的丰富,很大程度体现在这三个具体实现中,所具有的丰富的技术选择,以及如何实现与IOC容器的无缝结合。

毕竟这也是一个非常核心的模块,需要满足不同的应用需求带来的解决方案需求。

在SpringAOP的实现原理中,我们主要举ProxyFactoryBean的实现作为例子和实现的基本线索进行分析;很大一个原因,是因为ProxyFactoryBean是在SpringIoC环境中,创建AOP应用的最底层方法,从中,可以看到一条实现AOP的基本线索。

在ProxyFactoryBean中,它的AOP实现需要依赖JDK或者CGLIB提供的Proxy特性。

从FactoryBean中获取对象,是从getObject()方法作为入口完成的。

然后为proxy代理对象配置advisor链,这个配置是在initializeAdvisorChain方法中完成的;然后就为生成AOP代理对象做好了准备,生成代理对象如下所示:

oracle的分页实现(不用子查询)

selectcolumn1,column2

from(selectrownumrecno,column1,column2

fromtable_name

orderbycolumn1)

whererecnobetweenNandN+10

不用子查询似乎不可能,上面语句可以输入参数实现分页查询,要不就食用存储过程。

 

hibernate同时开启一级缓存跟二级缓存,查询对象时会先去哪个缓存里找?

如果启用了查询缓存,当第一次执行查询语句时,hibernate会把查询结果存放在第二级缓存中,以后再次执行该查询语句时,只需从缓存中获得查询结果,从而提高查询性能。

如果查询结果中包含实体,第二级缓存只会存放实体的OID,而对于投影查询,第二级缓存会存放所有的数据值。

sql的函数关联查询和子查询

struct2的原理或流程

ajax的运用,jquery的选择器

spring的aop的方式

hibernate的缓存

json的对象怎么写,里面的value值写个对象出了,js的

会问你对你学的什么最精通,讲讲,

会问你了当当网的模块写了多少,讲讲你写的模块,

对dept和emp这2个表的基本查询自己写一下,他们对数据库都挺重视的

关于技术之外可能提出的面试内容:

1.自我介绍

2.工作经验

3.为何跨入这个行业

4.是否了解所应聘企业

5.一个三十岁才步入开发行业的人与其他人的区别

6.学习方法,碰到难点怎么解决,自己掌握现在知识的弱点,如何解决

7.对于曾经工作过的人可能会询问以往工资情况,现在期望工资

8.职业规划及展望

servlet是否线程安全

默认非线程安全,如果需要线程安全需要指明

servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,所以你的项目中如果只有一个servlet,那么web容器就只会创建一个实例

 

接口和抽象类的区别

声明方法的存在而不去实现它的类被叫做抽象类(abstractclass),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。

不能创建abstract类的实例。

然而可以创建一个变量,其类

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2