100道技术面试题Word文档格式.docx
- 文档编号:20329564
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:30
- 大小:553.20KB
100道技术面试题Word文档格式.docx
《100道技术面试题Word文档格式.docx》由会员分享,可在线阅读,更多相关《100道技术面试题Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
7.struts2的工作流程?
struts2怎么实现MVC?
struts2的工作流程?
1)客户端发送http请求
2)这个请求经过struts的一系列过滤器(Filter)
3)如果该请求要调用某个action,则由ActionProxy根据配置文件找到相应的action类,然后根据命名空间来调用action
4)action执行完毕后,会根据struts.xml找到相应的返回结果,一般是某个jsp页面。
struts2怎么实现MVC?
struts提供了自已的控制器(FilterDispatcher),控制器会询问ActionMapper是否要调用action,如果调用交给ActionProxy,
会读取配置文件匹配要请求的action,调用M(模型javabean),模型层进行处理(调用数据层),并返回结果,并由ActionInvercation实例匹配配置文件选择一个视图(jsp).
8.struts2常用的标签?
9.post、get的区别?
◇get是把参数数据队列加到提交表单的action属性所指的URL中,值和属性一一对应,在URL中可以看到。
post是通过HTTPpost机制,将表单内各个元素的值放置在HTMLHEADER内一起传送到action属性所指的URL地址。
用户看不到这个过程。
◇get安全性非常低,post安全性较高。
◇对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
◇get传送的数据量较小,不能大于2KB。
post传送的数据量较大,一般被默认为不受限制。
10.Hibernate是什么?
谈谈Hibernate的工作原理?
理解:
hibernate它是一个开源的关系对象型(ORM)框架,使得程序员可以使用对象编程思维来操作数据库;
它对jdbc进行了非常轻量级的封装,大大简化了数据层繁琐的重复性代码。
Hibernate的工作原理?
1)读取并解析配置文件hibernate.cfg.xml:
连接数据库,内部包含url,user,password,dialect等连接数据库的基本信息,还包括<
mappingresource/>
的配置;
可以兼容多种数据库,需要指出使用数据库的方言dialect:
oracle,sqlserver,mysql,db2,sybase等
2)读取并解析映射信息,创建SessionFactory
3)打开Sesssion:
完成对实体类的一些操作
4)创建事务Transation:
利用Session接口提供的各种方法进行持久化操作
5)持久化操作
6)提交事务
7)关闭Session
8)关闭SesstionFactory
11.hibernate常用的持久化方法?
save():
插入,没开启事务时,先插入后回滚
saveOrUpdate():
没有则插入,有则更新
delete():
删除
update():
更新
get():
返回一个对象
load():
具有延迟加载功能
12.get()与load()区别?
1、不存在对应记录时表现不一样
2、get直接从数据库加载,不会延迟
3、get不支持懒加载,load支持
4、get查询数据库不存在的记录时返回null,load报对象找不到异常。
13.save()与saveorupdate()区别?
14.hibernate的一级缓存与二级缓存的区别?
Session是一级缓存,SessionFactry是二级缓存。
在XML文件中配置,SessionFactry由Configuration创建
SessionFactory可以创建Session,Session用来控制事务以及增删改查操作
SessionFactory是线程安全的,多线程可以同时访问它,创建一次就行
Session是线程不安全的,代表对数据库一次操作。
一般每一次对数据库的操作都要创建一个Session,用之后关闭
15.对spring的IOC和AOP怎么理解的?
在项目中怎么用,各举一个例子?
IOC(InversionofControl):
应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的,这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。
Spring作为一个Web级容器,它把所有的Class类都可以转换为一个Bean对象来管理,通过加载、实例这个Bean对象,将它全部交给BeanFactory来管理,在你通过applicationContext.xml来使用和对其他Bean注入的这个过程,可以理解为IOC,使用IOC可以降低项目的耦合度,实现类与类之间的无依赖性。
AOP是面向切面编程,可以在项目中指定的位置执行指定的操作,例如事务管理,可以在所有非Query的方法执行后都执行一次事务提交的操作。
不需要修改代码,通过Xml配置就可以完成这个操作。
AOP作用:
把日志记录、系统统计、安全控制、事务处理、异常处理等代码从业务逻辑中分离出来,封装成一个切面,而不影响原有业务逻辑的代码。
例子:
IOC:
bean的注入,如把XXXServiceImpl注入到XXXController中。
AOP:
事务的管理。
16.spring怎么管理事务的?
spring的事务声明有两种方式,编程式和声明式。
spring主要是通过“声明式事务”的方式对事务进行管理,即在配置文件中进行声明,通过AOP将事务切面切入程序,最大的好处是大大减少了代码量。
17.hibernate与Ibatis的区别?
相同点:
屏蔽jdbcapi的底层访问细节,使用我们不用与jdbcapi打交道,就可以访问数据。
jdbcapi编程流程固定,还将sql语句与java代码混杂在了一起,经常需要拼凑sql语句,细节很繁琐。
ibatis的好处:
屏蔽jdbcapi的底层访问细节;
将sql语句与java代码进行分离;
提供了将结果集自动封装称为实体对象和对象的集合的功能,queryForList返回对象集合,用queryForObject返回单个对象;
提供了自动将实体对象的属性传递给sql语句的参数。
Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,ibatis需要我们自己在xml配置文件中写sql语句,hibernate要比ibatis功能负责和强大很多。
因为hibernate自动生成sql语句,我们无法控制该语句,我们就无法去写特定的高效率的sql。
对于一些不太复杂的sql查询,hibernate可以很好帮我们完成,但是,对于特别复杂的查询,hibernate就很难适应了,这时候用ibatis就是
不错的选择,因为ibatis还是由我们自己写sql语句。
18.数据库哪一个比较擅长?
Oracle/mysql/sqlserver的区别?
1 这三种数据库不是同一个公司的
2 其所对应的使用对象不一样,oracle是主流的大型数据库,大多数电信项目都使用oracle,而sqlserver与mysql主要是个人以及小型公司使用的数据库,但sqlserver需要付费,而mqsql不需要。
3 如果按功能上说,oracle最为强大,oracle支持递归查询,那两个不支持。
4 三个数据库中,只有sqlserver有完整的图形操作界面,而oracle与mysql都要借助于第三方数据库图形操作界面,比如oracle用的是plsql。
16.使用sql语句怎么实现分页(Oracle/mysql/sqlserve)?
取出sql表中第31到40的记录(以自动增长ID为主键)
sqlserver方案1:
selecttop10*fromtwhereidnotin(selecttop30idfromtorderbyid)ordebyid
sqlserver方案2:
selecttop10*fromtwhereidin(selecttop40idfromtorderbyid)orderbyiddesc
mysql方案:
select*fromtorderbyidlimit30,10
oracle方案:
select*from(selectrownumr,*fromtwherer<
=40)wherer>
30
oracle:
使用ROWNUM关键字,嵌套子查询.
mysql:
使用limit关键字.
sqlserver:
使用top关键字.
17.数据库的左连接与右连接的区别?
leftjoin是以A表的记录为基础的,A可以看成左表,B可以看成右表,leftjoin是以左表为准的.。
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为:
A.aID=B.bID),B表记录不足的地方均为NULL。
范例代码:
SELECTC.First_Name,C.Last_Name,O.Order_IdFORMCustomerASC LEFTJOINOrderASOONC.Customer_ID=O.Customer_ID
rightjoin和leftjoin的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充。
18.JAVA的8种基本数据类型
1)四种整数类型(byte、short、int、long):
byte:
8
位,用于表示最小数据单位,如文件中数据,-128~127
short:
16
位,很少用,-32768
~
32767
int:
32
位、最常用,-2^31-1~2^31
(21
亿)
long:
64
位、次常用
2)两种浮点数类型(float、double):
float:
位,后缀
F
或
f,1
位符号位,8
位指数,23
位有效尾数。
double:
位,最常用,后缀
D
d,1
位符号位,11
位指数,52
位有效尾
3)一种字符类型(char):
char:
位,是整数类型,用单引号括起来的
1
个字符(可以是一个中文字符),使用
Unicode
码代表字符,0~2^16-1(65535)。
4)一种布尔类型(boolean):
true
和
false。
19.List与Set区别?
List,set都继承collection接口
List接口的特点:
元素有放入顺序,元素可以重复,适合经常追加数据,插入删除数据。
但随机取数效率比较低。
Set接口的特点:
元素无放入顺序,元素不可重复,适合经常的随时存储,插入,删除。
但是在遍历时效率低。
20.HashMap与HashTable区别?
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
21.equals()与==的区别?
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
equals方法是用于比较两个独立对象的内容是否相同。
22.重载与重写的区别?
Overload是重载的意思,Override是覆盖的意思,也就是重写。
重载:
同一类中,方法名相同,参数列表不同,即(参数类型不同、参数个数不同)
与返回值无关
重写:
子类继承父类,重写父类方法,要求方法名、参数列表、返回值相同
覆盖要注意以下的几点:
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
23.int和Integer有什么区别?
int是java的原始数据类型,Integer是java为int提供的封装类;
当引用类型和原始类型用作某个类的实例数据时所指定的缺省值不同。
Integer的缺省值为null,而int的缺省值为0。
24.ArrayList,Vector,LinkedList的区别?
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。
25.final,finally,finalize的区别?
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行.
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
JVM不保证此方法总被调用
26.String,StringBuffer和StringBuilder的区别?
首先说运行速度,或者说是执行速度:
StringBuilder>
StringBuffer>
String
String最慢的原因:
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
再来说线程安全,在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
总结一下:
String:
适用于少量的字符串操作的情况
StringBuilder:
适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:
适用多线程下在字符缓冲区进行大量操作的情况
27.数组有没有length()这个方法?
String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有length()这个方法。
28.抽象类和接口有什么区别?
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4.抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为publicabstract类型。
5.抽象类中可以包含静态方法,接口中不能包含静态方法
6.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是publicstaticfinal类型,并且默认即为publicstaticfinal类型。
7.一个类可以实现多个接口,但只能继承一个抽象类。
29.说一下MVC设计模式?
MVC是三个单词的缩写,分别为:
模型(Model),视图(View)和控制Controller)。
MVC模式的目的就是实现Web系统的职能分工。
Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。
View层用于与用户的交互,通常用JSP来实现。
Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
30.说一说Servlet的生命周期?
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
31.JSP常用的编译指令?
page指令:
◇page指令是在JSP开发中较为重要的一个指令,它可以定义一个JSP页面的相关属性,包括设置MIME类型、导入包、错误页面指定等。
◇语法:
<
%@page属性=“内容”%>
Include指令:
◇静态包含:
<
%@includefile=”文件路径”%>
。
◇动态包含:
jsp:
includepage=”文件路径”>
/jsp:
include>
标签对。
Taglib指令:
%@tagliburi="
/WEB-INF/struts-tags.tld"
prefix="
s"
%>
32.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。
JSP编译后是"
类servlet"
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。
而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑。
33.struts2与springMVC有什么区别?
1)核心控制器(前段控制器,预处理控制器):
对于使用过MVC框架的人来说这个词应该不会陌生,核心控制器的主要用途是处理所有请求,然后对那些特殊的请求(控制器统一的进行处理(字符编码,文件上传,参数接收,异常处理等)),springMvc的核心控制器是servlet,而Struts2是filter.
2)控制器实例:
springMVc会比Struts2快些。
springMVC是基于方法设计,而Struts2是基于对象的,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring更像servlet一样,只有一个实例,每次请求执行对应的方法即可(注意:
由于是单例实例,所以应当避免全局变量的修改,这样会产生线程安全问题)。
3)管理方式:
大部分的公司的核心架构,就会用到spring,而springMVc又是spring中的一个模块,所以spring对于springMVc的控制器管理更加方便,而且提供了全注解方式进行管理,各种功能的注解都比较全面,使用简单,而Struts2需要采用xml很多的配置参数来管理(虽然也可以使用注解,但是几乎没有公司那样用过)。
4)参数传递:
Struts2中自身提供多种参数接收,其实都是通过(valueStack)进行传递和赋值,而SpringMVc是通过方法的参数进行接收。
5)Intercepter的实现机制:
Struts有自己的interceptor机制,springMVC用的是独立的AOP方式。
这样导致Struts的配置文件量要比springMVC大,虽然Struts的配置能继承,但从使用来讲更加方便简洁,开发效率springMVC要比Struts2高。
6)Springmvc处理ajax请求,直接通过返回数据,方法里使用注解@ResponseBody,springMvc自动帮我们对象转换成json对象。
34.spring的依赖注入方式有哪几种?
◇属性setter方式
<
beanid="
personService"
class="
com.yun.service.impl.PersonServiceImpl"
>
propertyname="
personDao"
ref="
/property>
<
/bean>
另外,Java代码中提供setter方法。
◇构造器方式
com.yun.service.impl.PersonServiceImpl2"
constructor-argindex="
0"
/constructor-arg>
另外,Java代码中提供相应的构造方法。
◇注解方式
Java代码中,加入注解:
@Resource
35.oracle的rowId()和rownum()的区别?
rowid和rownum都是虚列,但含义完全不同。
rowid是物理地址,用于定位oracle中具体数据的物理存储位置,而rownum则是sql的输出结果排序,rownum是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列(强调:
先要有结果集)。
简单的说rownum是对符合条件结果的序列号。
它总是从1开始排起的。
所以你选出的结果不可能没有1,而有其他大于1的值。
另外还要注意:
rownum不能以任何基表的名称作为前缀。
36.Session和co
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 100 技术 试题