JAVA工程师面试题

1.三大框架对数据库的CRUD操作分别调用那些方法?


servlethibernatemybatis
查询executeQuery()get()selectone()或selectList()
增加execute()save()insert()
更新execute()update()update()
删除execute()delete()delete()


2.get和post的区别


getpost
后退按钮/刷新
无害
数据会被重新提交(浏览器应该告知用户数据会被重新提交)
书签
可收藏为书签
不可收藏为书签
缓存
能被缓存
不能缓存
编码类型
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)引入占位符


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值