今日模拟面试问题总结1
Posted zff2099
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今日模拟面试问题总结1相关的知识,希望对你有一定的参考价值。
总结
一、spring相关问题
技巧:这类问题一般围绕两点去回答,1、回答它是什么,也就是将问题的关键字用官方语言阐述一下;2、讲它的作用,作用就是说一下你怎用的它,它的好处等等
问:spring是什么?
答:首先spring是一个开放源代码的设计层面框架,它的核心包括 IOC 和 AOP 。其中 IOC 是控制反转,让一个对象不用 new 就可以创建了,它利用的是Java里的反射,反射其实就是运行时动态的创建、调用对象。另外就是 AOP 时面向切面编程,基于动态代理,使用 JDK 的代理去创建代理对象。
问:spring的怎么实现的,及设计模式有哪些?(回答技巧:首先介绍spring是什么,然后讲一下设计模式,有能力可以解释一下这些设计模式)
答:spring是一个开源框架,也是一个IOC和AOP容器的框架。它的设计模式有:单例模式、工厂模式、适配器模式、代理模式、观察者模式。
1、单例模式:提供了全局的访问点BeanFactory,Spring下默认的bean均为singleton(单例模式);
2、工厂模式:在各种BeanFactory以及ApplicationContext创建中都用到了;
3、适配器模式:在springAOP编程中随处Adapter模式的应用;
4、代理模式:为其他对象提供一种代理访问的机制;
5、观察者模式:当对象发生改变时,其它对象需要得到相应的更新。
问:简单描述一下 IOC 与 AOP?
答:1、springIOC 是控制反转,也可以称为依赖注入,主要降低对象之间的耦合度,及对Bean的生命周期的管理,实现了接口控制的方式。其中依赖注入有三种方式,分别为构造注入、属性注入、接口注入。
2、springAOP 是面向切面编程的,它是对OOP的补充和完善。主要功能有日志记录,性能统计,安全控制,事务处理,异常处理等等,将业务逻辑共用的代码抽取出来,进而改变这些行为不改变业务逻辑的代码。
问:springMVC 的工作流程?
答:1、用户发送一个request请求到前端控制器Dispatcher Servlet(也叫中央控制器);
2、Dispatcher Servlet(前端控制器)接收到请求后会调用Handler Mapping(处理器映射器),Handler Mapping(处理器映射器)返回一个Handler映射(也可以是controller);
3、Dispatcher Servlet(前端控制器)调用Handler Adapter(处理器适配器),去执行Controller并得到ModelAndView(数据和视图),并返回给Dispatcher Servlet(前端控制器);
4、Dispatcher Servlet(前端控制器)将ModelAndView交给ViewReslover视图解析器解析,然后返回真正的视图;
5、Dispatcher Servlet(前端控制器)将模型数据填充到视图中,并将结果响应给用户;
二、mybatis相关问题
问:为什么使用mybatis?
答:mybatis是一个支持定制化 SQL、存储过程以及高级映射持久层框架,可以使用XML映射文件或注解配置,并能将接口和POJO映射成数据库中的记录。(也可以加一些上手快,入门简单,轻量级等等词)
问:mybatis是什么?
答:mybatis是一个支持定制化 SQL、存储过程以及高级映射持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。同时可以使用XML映射文件或注解配置,并能将接口和POJO映射成数据库中的记录。
问:mybatis中的一级缓存与二级缓存?
答:1、在默认配置情况下,mybatis只开启一级缓存,一级缓存只是相对于同一个SqlSession而言,生命周期是一个会话,会话结束缓存消失。2、二级缓存Application级别的缓存,它可以提高对数据库查询的效率,可以提高应用的性能。SqlSessionFactory层面上的二级缓存默认是不开启的,二级缓存的开启需要进行配置,实现二级缓存的时候,MyBatis要求返回的POJO必须是可序列化的。 也就是要求实现Serializable接口,配置方法很简单,只需要在映射XML文件配置就可以开启缓存了<cache/>。
三、shiro相关问题
问:简单介绍一下shiro框架?
答:shiro是Java的一个安全框架。shiro可以帮助我们完成:认证、授权、加密、会话管理、缓存、与web集成等。它有三个核心组件分别为:subject、security Manager和Realms。其中subject是当前用户的安全操作,security Manager是shiro的核心,管理所有用户的安全操作。Realm是当用户登陆(认证)和访问控制(授权)是,shiro会从Realm中查找用户及其权限信息。
问:shiro的权限控制方式有哪些?
答:url级别权限控制、方法注解权限控制、代码级别权限控制、页面标签权限控制
问:shiro实现流程原理?
认证流程: 授权流程:
答:shiro的实现流程分为两部分,认证(登陆)流程和授权(访问控制)流程。
问:为什么使用shiro框架?
答:shiro是一个apache开发的一个安全框架,可以用来管理我们开发系统中的用户登录、权限授权、会话管理等的。shiro是一款强大而灵活的开源安全框架,它提供了完善的认证和授权功能有利于系统扩展维护。
问:spring security安全框架与shiro框架有什么异同?
答:1、相同点:认证功能、授权功能、加密功能、会话管理、缓存支持、rememberMe功能
2、不同点:Spring Security
(1)Spring Security 基于Spring 开发,项目若使用 Spring 作为基础,配合 Spring Security 做权限更加方便,而 Shiro 需要和 Spring 进行整合开发;
(2)Spring Security 功能比 Shiro 更加丰富些,例如安全维护方面;
(3)Spring Security对Oauth、OpenID也有支持,Shiro则需要自己手动实现。
Shiro
(1)Shiro 的配置和使用比较简单,spring官网就是用的shiro,Spring Security 上手复杂些;
(2)Shiro 依赖性低,不需要任何框架和容器,可以独立运行.Spring Security 依赖Spring容器;
(3)shiro 不仅仅可以使用在web中,还支持非web项目它可以工作在任何应用环境中。在集群会话时Shiro最重要的一个好处或许就是它的会话是独立于容器的。
四、Redis相关问题
问:Redis有哪些特点?
答:1、 速度快:Redis是用C语言实现的,所有数据存储在内存中以键值对形式保存。
2、持久化:Redis的所有数据存储在内存中,对数据的更新将异步地保存到磁盘上。
3、支持多种数据结构:Redis支持五种数据结构:String、List、Set、Hash、Zset
4、支持多种编程语言:Java、php、Python、Ruby、Lua、Node.js
5、功能丰富:除了支持五种数据结构之外,还支持事务、流水线、发布/订阅、消息队列等功能。
7、主从复制:主服务器上只进行写的操作,在从的服务器上进行读的操作。【主服务器(master)执行添加、修改、删除,从服务器执行查询】
8、(服务架构)支持高可用和分布式【高可用:使用redis自带的哨兵机制来实现高可用】
问:Redis适合的场景有哪些?
答:会话缓存、全页缓存、队列、排行/计数器、发布/订阅
问:Redis有哪几种数据结构?
答:字符串String 一般用于存放键值对,哈希Hash 一般用户存放对象,列表List 类似于双端链表,Set 无序集合,SortedSet 有序集合
问:Redis的优缺点是什么?
答:优点:1、支持多种数据类型(set,zset,list,hash,string)2、持久化存储(主从复制)3、性能很好(由于是全内存操作,所以读写性能很好,可以达到10w/s的频率)
缺点:1、存储数量由机器内存大小决定,虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。2、如果进行完整重同步,由于需要生成rdb文件,并进行传输,会占用主机的CPU,并会消耗现网的带宽。不过redis2.8版本以后,已经有部分重同步的功能,但是还是有可能有完整重同步的。比如,新上线的从库。3、修改配置文件,进行重启,将硬盘中的数据加载进内存,时间比较久。在这个过程中,redis不能提供服务。
问:Redis集群是怎样实现的?
答:Redis集群是由多个redis实例组成的一个分布式系统,数据按照slot存储分布在多个redis实例上,通过Gossip协议实现节点之间的通信。
问:谈谈Redis的持久化?
答:Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复,理解掌握持久化机制对于Redis运维非常重要
RDB持久性以指定的时间间隔执行数据集的时间点快照。
AOF持久性记录服务器接收的每个写入操作,将在服务器启动时再次播放,重建原始数据集。 使用与Redis协议本身相同的格式以仅追加方式记录命令。 当Redis太大时,Redis能够重写日志背景。
问:Redis是什么?
答:Redis 是一个基于内存的高性能key-value数据库。
问:为什么使用Redis缓存?
答:1、支持多种数据类型(set,zset,list,hash,string)2、持久化存储(主从复制)3、性能很好(由于是全内存操作,所以读写性能很好,可以达到10w/s的频率)
问:redis怎么使用?
答:先安装好redis,然后运行,在pom文件中引入依赖,在要使用redis缓存的类的mapper.xml文件配置redis的全限定名。引入redis的redis.properties文件
问:Redis常见的性能问题,怎么解决?
答:1、Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。
2、Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。
3、Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。
4、Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内
问:为什么Redis需要把所有数据放到内存中?
答:Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。
问:是否使用过Redis集群,集群的原理是什么?
答:1、Redis Sentinal着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务。2、Redis Cluster着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储。
以上是关于今日模拟面试问题总结1的主要内容,如果未能解决你的问题,请参考以下文章