码迷,mamicode.com
首页 > 其他好文 > 详细

今日模拟面试问题总结1

时间:2019-11-13 23:56:04      阅读:41      评论:0      收藏:0      [点我收藏+]

标签:mode   三种方式   结构   cto   重要   manager   lan   statement   gossip   

总结

一、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

标签:mode   三种方式   结构   cto   重要   manager   lan   statement   gossip   

原文地址:https://www.cnblogs.com/zff2099/p/11853964.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!