面试三:

1.SpringSecurity 和shiro 的区别?
两者的基本功能差不多一样,学会一样,学另外一样并不难。
优点:
1.SpringSecurity框架是基于Spring 开发的,如果用Spring作为基础
配合Spring做权限方便。Shiro需要和Spring进行整合开发。
2.SpringSecurity的社区资源比Shiro 更加丰富
3.SpringSecurity的功能比Shiro 更加丰富些,比如安全防护方面。
缺点:
1.Shiro的配置和使用比较简单,SpringSecurity上手复杂些
2.Shiro的依赖性低,不需要任何框架和容器,可以独立运行。SpringSecurity依赖Spring容器。
2.ArrayList和LinkedList的区别?
ArrayList是基于数组实现的接口,LinkedList是基于链表实现的List接口。
ArrayList的查询快,增删慢,因为有索引。
LinkedList增删快,查询慢。比如插入一个数,改变三个位置即可。
3.SpringMVC的原理?
SpringMVC流程:
(1)客户端(浏览器)发送请求,直接请求到DispatcherServlet。
(2)DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。
(3)解析到对应的Handler后,开始由HandlerAdapter适配器处理。
(4)HandlerAdapter会根据Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。
(5)处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。
(6)ViewResolver会根据逻辑View查找实际的View。
(7)DispaterServlet把返回的Model传给View。
(8)用过View返回的Model传给View.

1、前端控制器DispatcherServlet
作用:接收请求,响应结果,相当于转发器,中央处理器。有了dispatcherServlet减少了其它组件之间的耦合度。
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
2、处理器映射器HandlerMapping
作用:根据请求的url查找Handler
HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
3、处理器适配器HandlerAdapter
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
4、处理器Handler(需要工程师开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。
5、视图解析器View resolver(不需要工程师开发),由框架提供
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由工程师根据业务需求开发具体的页面。
6、视图View(需要工程师开发jsp…)
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)
4.代理模式
1.静态代理
2.动态代理
3.Cglib代理
5.Redis的持久化
RDB持久化
每隔一段时间将内存中的数据集快照写入磁盘
优点:
只有一份rdb文件,可随时备份
比AOF文件小,加载效率高
只提供fork子进程,不阻塞主线程,IO操作比较少
AOF持久化
以日志的形式记录服务器处理的每一个写的动作,在Redis服务器启动之初,读取该文件重新构建数据库,以保证数据库中的数据是完整的。
优点:
每次改动同步数据安全性好
Append方式追加日志,不会对旧日志文件产生影响
通过配置的方式是可以把redis的持久化禁用的。
6.线程的初始化参数
最大线程数等
8.HasMap 的底层原理
通过put()和get()方法来存储和获取对象,当键值对传递给put()方法时,会通过键对象的hashCode()方法得到一个哈希值,再通过哈希值找到buket(桶)的位置来存储值对象。获取对象的时候,通过键对象的epuals()方法找到正确的键值对,然后返回值对象。
HasMap使用链表来解决碰撞问题,当发生碰撞了,对象就会存储在链表的下一个节点中。HashMap在每个链表的节点中存储键值对对象。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值