1.三大框架对数据库的CRUD操作分别调用那些方法?
servlet | hibernate | mybatis | |
查询 | executeQuery() | get() | selectone()或selectList() |
增加 | execute() | save() | insert() |
更新 | execute() | update() | update() |
删除 | execute() | delete() | delete() |
2.get和post的区别
get | post | |
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交) |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码 |
历史 | 参数保留在浏览器历史中 | 参数不会保存在浏览器历史中 |
对数据长度的限制 | 当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符) | 无限制 |
对数据类型的限制 | 只允许 ASCII 字符 | 没有限制。也允许二进制数据 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。 在发送密码或其他敏感信息时绝不要使用 GET ! | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中 |
可见性 | 数据在 URL 中对所有人都是可见的 | 数据不会显示在 URL 中 |
3.servlet如何获取前台发送的请求内容
通过request.getParamter("")方法获取
4.servlet如何通过response向前台返回数据
通过response.getWrite().println("")
5.servlet中的service()方法有什么作用,它在什么时候进行调用?
service()方法主要用来判断调用doGet()还是doPost()方法,它在doGet()或doPost()方法之前调用
6.中文问题要怎么解决?
只需保证在页面传递,servlet取数据,存入数据库,返回数据这几个步骤的编码一致即可
7.简述servlet的生命周期
(1).实例化(构造方法):当servlet被调用时,就会被实例化,但多次调用只会被实例化一次,所以servlet是单实例的
(2).初始化(init):电用init()方法,此方法也是多次访问只执行一次
(3).提供服务(service):抵用service()方法以及之后的业务逻辑
(4).销毁(destory):关闭tomcat时被调用
(5).被回收:由JAVA的GC(自动垃圾回收机制)进行处理
8.servlet中的服务器跳转与客户端跳转的区别
(1). 使用服务器端跳转时,客户浏览器的地址栏并不会显示目标地址的URL,而是用客户端跳转时,地址栏当中会显示目标资源的URL;
(2). 服务器端跳转是由客户端发送一个请求,请求一个服务器资源——如JSP和Servlet——,这个资源又将请求转到另一个服务器资源,然后再给客户端发送一个响应,也就是说服务器端跳转是客户端发送一次请求,服务器端给出一次响应;而客户端跳转的流程则不同。客户端同样是发送一个请求给服务器端资源,这个服务器资源会首先给客户端一个响应,客户端再根据这个响应当中所包含的地址,再次向服务器端发送一个请求,也就是说客户端跳转是两次请求,两次响应;
(3). 在进行客户端跳转和服务器端跳转时,都需要指定目标资源的URL,如果这个路径以“”开始。在客户端跳转当中“”代表的是应用服务器根目录,而在服务器端跳转当中代表的是应用程序根目录。
(4).调用方式不一样:服务器跳转(forward);客户端跳转(response.sendRedirect("需要跳转的页面"))
9.setAttribute()和getAttribute()有什么作用?
这两个方法可以用来在进行服务器跳转的时候,在不同的servlet之间进行数据共享
10.上传文件使用get还是post,除此之外还需要做什么操作?
采用post提交方式,同时需要在form里面加上enctype="multipart/form-data"
11.分页怎么实现?
mysql使用limit实现
hibernate用criteria实现:
c.setFirstResult(2):表示从第二条数据开始查询
c.setMaxResult(5):表示一共查询5条数据
12.Java中堆/栈/队列的区别
堆是一个运行时数据区,通过new等指令创建,不需要程序代码显式释放
<1>优点:
可动态分配内存大小,生存周期不必事先告诉编译器,Java垃圾回收自动回收不需要的数据;
<2>缺点:
运行时需动态分配内存,数据存取速度较慢。
栈限制仅在表的一端进行插入和删除运算的线性表,先进后出FILO
<1>优点:
存取速度比堆快,仅次于寄存器,栈数据可以共享;
<2>缺点:
存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
队列限制仅在表的一端(尾端)进行插入,另一端(首端)进行删除的线性表,先进先出FIFO
13.什么是完全二叉树
每层结点都填满,在最后一层如果不是满的,则只缺少右边的若干结点
14.简述什么是MVC
M(模型):也就是数据,如dao层,bean
V(视图):也就是网页、JSP,用来展示模型中的数据
C(控制器):把不同的数据,显示在不同的视图上
15:排序算法有哪些?
冒泡排序,选择排序,插入排序,快速排序
16:ajax的优缺点
优点:
(1)无刷新更新数据
(2)异步与服务器通信
(3)前后端负载均衡
(4)界面与应用分离
(5)被广泛支持
缺点:
(1)无法返回与查看历史,破坏了浏览器机制
(2)违背URL和资源定位的初衷
(3)需要考虑浏览器对ajax的兼容
17.Hibernate和Mybatis的区别
Hibernate:
(1)适用简单的增删改查场景,基本SQL已被封装好了
(2)具有良好的映射机制,无需关注SQL的生成与结果映射,可以更关注业务流程
(3)具有更好的二级缓存机制,可以使用第三方缓存
Mybatis:
(1)可以进行更细致的SQL优化,可以减少查询字段,而Hibernate是查询出来所有字段
(2)学习门槛较低,延续了很好的SQL使用经验
(3)整个数据库查询要自己写,工作量大,而且不太容易适应快速数据库修改
18.HTML5与HTML之间的区别
(1)HTML5语法更加精简,例如在文档类型的声明上
(2)HTML5增加了新的标签,如:<header>、<nav>、<footer>
(3)HTML5具有强大的绘图功能,如:<canvas>标签与<SVG>标签
19.OSI和TCP/IP各分为哪几层?
OSI(7层):
应用层
表示层
会话层
运输层
网络层
数据链路层
物理层
TCP/IP(5层):
应用层
传输层
网络层
数据链路层
物理层
20.简述数据库事务的四大特性
(1)原子性:要么都执行,要么都不执行
(2)一致性:一个事务执行前和执行后,数据库都必须处于一致性的状态
(3)独立性:并发的事务是相互隔离的,正在操作中的数据会被封锁起来,不会被其它事务修改
(4)持久性:数据库中数据的修改时永久性的
21.分页和分段是怎么理解的
详见:分页和分段的详细解释
22.Filter是什么,可以用来干什么?
Filter是过滤器,若配置成 /* ,则所有的用户请求都需要通过Filter,它可以用来进行中文处理和登陆验证,这样就不需要再control中多次编写,减少代码冗余
23.简述Hibernate的延迟加载
Hibernate的延迟加载分两种:
(1)属性的延迟加载:通过load方式获取对象时,只有访问了这个对象的属性,Hibernate才回到数据库进行查询
(2)关系的延迟加载:若一个表中包含另一个表中的数据(外键),会等到需要去外键所在的表的内容时,才会对外键所在的表进行查询
24.Hibernate的一级缓存与二级缓存是什么?
缓存:其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。
(1)一级缓存:默认开启,存放在session上,在同一个session中,对数据库进行相同的操作只有一次
(2)二级缓存:存放在sessionFactory中,若未开启二级缓存,在不同的session中,相同的SQL语句会被重复执行,但开启之后将只执行一次
25.log4j是什么,怎样开启与关闭?
log4j是日志输出配置文件,
在struts2中的开启方法:将log4j.xml放到src目录下即可,但开启log4j后会导致struts2启动缓慢
关闭:将log4j.xml命名为其它文件名即可
26.ORM是什么
ORM:对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同系统的数据之间的转换。简单的说,ORM是通过使用描述对象和数据库之前的映射的元数据,将对象自动持续化到关系数据库中
27.struts能够获取request,response吗,怎么获取?
能获取
通过servletActionContext.getRequest()获取request
通过servletActionContext.getResponse()获取response
28.struts中有几个session
两个:
(1)传统的servlet包下的HttpSession
(2)struts中定义的Session,它的返回值是Map形式的,其中值和HttpSession中的值是同步的
29.struts上传文件的大小是多少?可以更改吗?
上传文件的大小是2M,可以通过配置文件更改:
<constant name="struts.multipart.maxsize" value="10240000">
30.struts中怎么查看action到底有没有传递参数?
在前台页面中加入<s:debug>即可
31.struts中有拦截器吗,是什么?
有拦截器,在struts.xml配置文件中配置<interceptors>即可
32.struts中的默认跳转是客户端跳转还是服务端跳转,怎么更改?
默认是服务器跳转,若要更改为客户端跳转需要再result标签里加上新的属性:type="redirect"
33.struts中的action是单实例还是多实例
多实例,每次访问都会创建新的action实例,但它经过与spring的整合后将会变为单实例,若整合后还想保持多实例,那么需要再bean里面增加:scope="prototype"
34.struts中的注解与xml配置分别适用哪些场景?
注解:适用于小项目
xml配置:大项目采用,便于维护与查询
35.spring中IOC与DI的区别
IOC(控制反转):简单来说就是由spring来创建对象
DI(依赖注入):对对象的数据进行get/set操作
36.类的public、private、protected和默认的区别
同类 | 同包 | 不同包子类 | 不同包非子类 | |
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
37.简述Spring中IOC的概念
以获取对象的方式来举例:
传统方式:通过手动写new关键字来创建一个对象
IOC方式:将对象的生命周期交给spring来管理,直接从spring里获取对象,即写好配置文件或注释,spring自动生成对象
IOC:将本来在程序员手里的控制权,交给了spring去自动处理
38.简述sprng中AOP的概念
AOP:面向切面编程
一般情况下,我们可以将所有的业务功能分为:
核心业务功能:例如:登录,数据的CRUD等
周边功能:例如:性能统计,日志,事务管理等
上述的周边功能在AOP中,即被定义为切面
在AOP中,核心业务功能与周边功能分别进行独立开发,然后把他们编织在一起,即为AOP,下面进行详细说明:
核心业务功能:登录,查询,生成订单
辅助功能:性能统计,日志输出,事务管理
例如在核心业务功能登录中,没有辅助功能的存在,登录功能能够正常运行,加上性能统计,日志输出,事务管理这些功能,一样也不会影响到登录功能。同时查询与生成订单也一样,这样能够选择性的,低耦合的把核心业务功能和切面结合在一起的编程思想,就叫AOP
39.数据库在增删改查的过程中,哪些需要事务,哪些不需要?
事务是为了保护数据安全,防止错误数据产生,所以除了查询之外,其它操作都需要事务的参与
40.struts,spring整合的思想是什么
将struts里action的生命周期交由spring进行管理
41.非侵入式是什么意思,SSH的配置事务管理是非侵入式的吗?
非侵入式:不需要修改JAVA代码,只需修改配置文件即可达到效果
SSH的事务管理是非侵入式的
42.SpringMVC中的默认跳转是客户端跳转还是服务端跳转,如何更改
默认是服务器跳转,若要改为客户端跳转,需要再controller类方法里面修改ModelAndView:
ModelAndView model = new ModelAndView("redirect:/index");
43.springMVC中视图定位的概念
在SpringMVC中,可以通过对配置文件的配置,来实现跳转页面的简写,例如:
原本在page文件夹下的index.jsp页面要写成:"/page/index.jsp",若经过配置之后,只需这样写:"/index"
具体实现是通过SpringMVC中的"ViewResolver"里的"prefix"和"suffix"
44.SpringMVC与struts2的区别
(1)入口不同,struts2使用filter,SpringMVC使用servlet
(2)struts2基于类开发,一个URL对应一个类
SpringMVC基于方法开发,一个URL对应一个方法
(3)struts2是多实例的,SpringMVC是单实例
(4)struts2配置文件较多,SpringMVC配置文件较少
(5)SpringMVC的开发效率和性能高于struts2
45.Mybatis中parameterType与resultType,resultMap分别是什么?
它们是用在Mybatis的XML配置文件中的,其中:
parameterType:传入参数,可以是对象,也可以是变量
resultType:传出参数,一般来说是对象
resultMap:传出参数,一般是集合形式
46.Hibernate与Mybatis中多对一,一对多,多对多的配置分别是什么?
Hibernater:
(1)多对一:many-to-many
(2)一对多:on-to-many(它包含在Set中)
(3)多对多:mang-to-many(它包含在Set中)
Mybatis:
(1)多对一:resultMap中配置association
(2)一对多:resultMap中配置collection
(3)多对多:需要添加中间表,然后分别配置一对多,多对一,最后实现多对多
47.Mybatis除了能用XML形式写SQL,还有其它方式吗?
有,可以将SQL写在方法上,采用注释的方式,例如:
@Insert("insert into 表名 (列名) values(#{obj.key})")
public int add(Object obj){}
48.SQL注入是什么,怎样预防?
SQL注入是一种常见的系统攻击手段,它是用拼接字符串造成的漏洞实现的,例如在登录时,程序员的sql写成这样:
"select * from user where name='" + username + "'and pwd='" + pwd + "'"
这样的语句本身没有问题,但若有用户在登录框中输入:
Dave or 'x' = 'x' ,这样,它就会在SQL的where中判断条件正确,而使得非法用户正确登录,所以我们要避免这种SQL注入的产生,具体方法有两中:
(1)顺序占位符
(2)引入占位符