SpringMVC

  • springMVC工作原理

  • 如何解决POST请求中文乱码问题,GET的又如何处理呢?

  • 在web.xml中加入:CharacterEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingutf-8CharacterEncodingFilter/*以上可以解决post请求乱码问题。对于get请求中文参数出现乱码解决方法有两个:修改tomcat配置文件添加编码与工程编码一致,如下:
  1. <ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
  • SpringMVC与Struts2的主要区别?

  • SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决

  • 是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段
  • @RequestMapping注解用在类上有什么作用

  • Spring MVC的异常处理 ?

    • 答:可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。
  • 怎么样在方法里面得到Request,或者Session?

  • 直接在方法的形参中声明request,SpringMvc就自动把request对象传入。
  • 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?
  • 可以在@RequestMapping注解里面加上method=RequestMethod.GET
  • 什么是springmvc映射器,有几种

  • 什么是springmvc适配器,有什么作用

  • springmvc的handle有几种实现方式

  • springmvc控制器中获取数据的方式有哪些

  • springmvc拦截器有什么用

  • springmvc的拦截器有几种配置方式

  • springmvc拦截器的实现方式有哪些

  • springmvc实现文件上传有哪些步骤

  • springmvc上传文件解析器是什么

  • springmvc上传文件解析器的id名称是否可以更改,为什么

  • springmvc中函数返回值是什么

  • springmvc怎么处理返回值

  • springmvc怎么设定重定向和转发

  • springmvc用什么对象从后台向前台传递数据的

  • springmvc有个类把视图和数据都合并的一起的,叫什么

  • springmvc怎么和ajax相互调用

  • springmvc用什么对象从后台向前台传递数据的,itoo是如何用的

  • itooresult使用, 封装的内容都包括什么

Spring

  • spring核心 ioc和aop

  • 事务管理

  • spring与其他技术宅的融合使用

面试题

  • 为什么要用spring

  • ioc 和aop原理

  • 解释以下名词:横切性关注点;切面;连接点;切入点,通知,目标对象,织入,引入

  • AOP和动态代理关系

  • 什么是切入表达式

  • 通知有几种类型,运行顺序是什么

  • BeanFactory和ApplicationContext有什么区别?

  • 有哪些不同类型的IOC(依赖注入)方式?

  • 哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入?

  • 什么是Spring beans?

  • Spring Bean的作用域之间有什么区别?

  • Spring框架中bean的生命周期

  • 什么是Spring的内部bean?

  • 在 Spring中如何注入一个java集合?

  • 什么是bean的自动装配?

  • Spring 框架中都用到了哪些设计模式?

  • 为什么需要事务

  • spring事务管理有哪几种核心组件

  • 使用事务来解决什么问题,使用事务和不使用事务,数据在程序中和数据中分别是什么状态

  • 有几种不同类型的自动代理

Mybatis

  • mybatis参数处理

  • mybatis动态sql

  • mybatis关系映射

  • mybatis缓存机制

面试题

  • mybatis核心原理,使用mybatis和其他orm框架对比,有哪些优势,有哪些优点和缺点

  • mybatis与hibernate有什么异同

  • mybatis中有哪些常用的查询方法

  • mybatis如何进行mapper动态代理

  • {}和${}的区别是什么?

  • mybatis如何定义别名查询

  • mybatis怎样定义结果集resultmap

  • mybatis结果集resultmap可以定义哪些类型

  • mybatis怎样进行分页查询

  • mybatis怎样进行动态条件查询

  • mybatis动态查询常用有哪些标签

  • mybatis怎样进行crud操作

  • mybatis怎样进行事务管理

  • mybatis框架有哪些注解

  • 如何使用mybatis的注解实现动态sql语句查询

  • mybatis怎样进行”多对一”关联查询?

  • 如何实现mybatis 一对多的join查询

  • 如何实现mybatis 一对多的n+1次查询

  • mybatis如何进行关联关系(一对一,一对多,多对多),以及双向关联关系查询

  • mybatis有几种缓存,获取sqlsession后,查询数据的顺序,mybatis中与hibernate中获取session后,查询数据顺序有什么区别

  • mybatis怎样处理延迟加载

  • mybatis动态sql语句怎样生成

  • 什么是mybatis接口绑定,有什么好处

  • 接口绑定有几种实现方式,分别是怎么实现的

  • 什么情况下用注解绑定,什么情况下用xml绑定

  • xml映射文件中,除了常见的select|insert|update|delete标签之外,还有那些标签

  • mybatis是如何将sql执行结果封装为目标对象并返回的,都有哪些映射形式

  • mybatis的xml映射文件中,不同的xml映射文件,id是否可以重复

  • mybatis如何执行批处理

  • mybatis引入xxx.mapper映射文件有几种方式

  • mybatis事务管理有几种方式

  • mybatis中驱动是否会一直等待数据库响应,如何设置数据库最大响应时间

  • mybatis在接口定义的方法是否可以有多个参数,如何进行多参数传递

  • mybatis中如何实现sql复用

  • 谈谈mybatis和hibernate在执行效率上的对比

  • 谈谈mybatis和hibernate在对象管理上的对比

  • 谈谈mybatis和hibernate在开发效率上的对比

  • mybatis中sql语句执行类型有几种方式(ExecutorType)

  • mybatis防止n+1次查询的方式有几种

逆向工程

  • 逆向工程使用

  • 逆向工程模板的修改

面试题

  • 什么是mybatis逆向工程,有什么好处

  • 逆向工程原理是什么

  • 如何搭建逆向工程

shiro

  • itoo中jwt的使用, jwt+redis, redis起的什么作用

  • 权限与前端的结合,如何使用?

面试题

  • 什么是shiro?为什么使用shiro

  • shiro核心组件

  • shiro认证流程是什么

  • shiro授权过程

  • shiro认证中有哪些常见异常,分表表示什么意思

  • 什么是散列算法

  • 什么是授权

  • 解释授权的关键概念: 主体,资源,权限,角色

  • shiro授权有哪三种方式

  • 解释如下术语:Subject, SecurityManager,Authenticator,Authorizer.Realm,SessionManager,SessionDAO,CacheManager,Crytography

  • shiro如何与web项目进行整合

  • shiro如何控制菜单的权限控制与按钮权限

  • shiro常用标签与注解有哪些

  • 什么是shiro缓存,为什么要使用缓存

  • shiro缓存怎样实现

maven

  • itoo-root的了解和使用

面试题

  • maven是什么

  • 什么是maven坐标

  • 什么是依赖管理

  • 什么是远程仓库

  • maven module与project有什么区别

  • maven怎样添加依赖

  • maven编译时,如何跳过单元测试

  • maven怎样安装到本地仓库

zookeeper

  • zookeeper是什么

  • zookeeper三种角色leader,follower,observer作用

  • zookeeper选举leader过程

  • zookeeper配置文件管理原理

  • 使用zookeeper实现分布式锁功能

dubbo

  • itoo中dubbo的使用

  • dubbo与spring的结合

面试题

  • dubbo架构图讲解

  • Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?

  • 可以的,启动dubbo时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用

  • 注册中心对等集群,任意一台宕掉后,会自动切换到另一台

注册中心全部宕掉,服务提供者和消费者仍可以通过本地缓存通讯
服务提供者无状态,任一台 宕机后,不影响使用
服务提供者全部宕机,服务消费者会无法使用,并无限次重连等待服务者恢复

  • dubbo连接注册中心和直连区别
  • 在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,
    点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表,

服务注册中心,动态的注册和发现服务,使服务的位置透明,并通过在消费方获取服务提供方地址列表,实现软负载均衡和Failover, 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外,注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

  • dubbo在安全机制方法是如何解决的
  • Dubbo通过Token令牌防止用户绕过注册中心直连,然后在注册中心上管理授权。Dubbo还提供服务黑白名单,来控制服务所允许的调用方。
  • 默认使用的是什么通信框架,还有别的选择吗?
  • 默认也推荐使用netty框架,还有mina
  • 服务调用是阻塞的吗?
  • 默认是阻塞的,可以异步调用,没有返回值的可以这么做。
  • 一般使用什么注册中心?还有别的选择吗?
  • 推荐使用zookeeper注册中心,还有redis等不推荐。
  • 默认使用什么序列化框架,你知道的还有哪些?
  • 默认使用Hessian序列化,还有Duddo、FastJson、Java自带序列化。
  • 服务提供者能实现失效踢出是什么原理?
  • 服务失效踢出基于zookeeper的临时节点原理
  • 服务上线怎么不影响旧版本?
  • 采用多版本开发,不影响旧版本。
  • 如何解决服务调用链过长的问题?
  • 可以结合zipkin实现分布式服务追踪。
  • dubbo服务负载均衡策略?
  • Random LoadBalance

随机,按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。(权重可以在dubbo管控台配置)

  • RoundRobin LoadBalance

轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

  • LeastActive LoadBalance

最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

  • ConsistentHash LoadBalance

一致性Hash,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。缺省只对第一个参数Hash,如果要修改,请配置

  • dubbo服务集群配置(集群容错模式)
  • 在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试。可以自行扩展集群容错策略*

    • Failover Cluster(默认)

      • 失败自动切换,当出现失败,重试其它服务器。(缺省)通常用于读操作,但重试会带来更长延迟。可通过retries=”2”来设置重试次数(不含第一次)。
    • Failfast Cluster

      • 快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
    • Failsafe Cluster

      • 失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
    • Failback Cluster

      • 失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
    • Forking Cluster

      • 并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过forks=”2”来设置最大并行数。
  • dubbo通信协议dubbo协议为什么要消费者比提供者个数多:
  • 因dubbo协议采用单一长连接,假设网络为千兆网卡(1024Mbit=128MByte),
    根据测试经验数据每条连接最多只能压满7MByte(不同的环境可能不一样,供参考),理论上1个服务提供者需要20个服务消费者才能压满网卡。
  • dubbo通信协议dubbo协议为什么不能传大包:
  • 因dubbo协议采用单一长连接,
    如果每次请求的数据包大小为500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每条连接最大7MByte(不同的环境可能不一样,供参考),
    单个服务提供者的TPS(每秒处理事务数)最大为:128MByte / 500KByte = 262。
    单个消费者调用单个服务提供者的TPS(每秒处理事务数)最大为:7MByte / 500KByte = 14。
    如果能接受,可以考虑使用,否则网络将成为瓶颈。
  • dubbo通信协议dubbo协议为什么采用异步单一长连接
  • 因为服务的现状大都是服务提供者少,通常只有几台机器,
    而服务的消费者多,可能整个网站都在访问该服务,
    比如Morgan的提供者只有6台提供者,却有上百台消费者,每天有1.5亿次调用,
    如果采用常规的hessian服务,服务提供者很容易就被压跨,
    通过单一连接,保证单一消费者不会压死提供者,
    长连接,减少连接握手验证等,
    并使用异步IO,复用线程池,防止C10K问题。
  • dubbo通信协议dubbo协议适用范围和适用场景
  • 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
    适用场景:常规远程服务方法调用
    dubbo协议补充:
    连接个数:单连接
    连接方式:长连接
    传输协议:TCP
    传输方式:NIO异步传输
    序列化:Hessian二进制序列化
  • RMI协议
  • RMI协议采用JDK标准的java.rmi.*实现,采用阻塞式短连接和JDK标准序列化方式,Java标准的远程调用协议。
    连接个数:多连接
    连接方式:短连接
    传输协议:TCP
    传输方式:同步传输
    序列化:Java标准二进制序列化
    适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。
    适用场景:常规远程服务方法调用,与原生RMI服务互操作
  • Hessian协议
  • Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现
    基于Hessian的远程调用协议。
    连接个数:多连接
    连接方式:短连接
    传输协议:HTTP
    传输方式:同步传输
    序列化:Hessian二进制序列化
    适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。
    适用场景:页面传输,文件传输,或与原生hessian服务互操作
  • http
  • 采用Spring的HttpInvoker实现
    基于http表单的远程调用协议。
    连接个数:多连接
    连接方式:短连接
    传输协议:HTTP
    传输方式:同步传输
    序列化:表单序列化(JSON)
    适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。
    适用场景:需同时给应用程序和浏览器JS使用的服务。
  • Webservice
  • 基于CXF的frontend-simple和transports-http实现
    基于WebService的远程调用协议。
    连接个数:多连接
    连接方式:短连接
    传输协议:HTTP
    传输方式:同步传输
    序列化:SOAP文本序列化
    适用场景:系统集成,跨语言调用。
  • 还了解别的分布式框架吗

solr

  • itoo中solr的使用

    • 题库, 搜索相似题

面试题

  • 为什么要用solr服务,为什么要用luncence?

  • solr集群结构是什么

  • solr如何与spring集成

Fastdfs

  • 架构图

  • FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。

quartz

  • itoo哪里用了

面试题

  • quartz与xxjob区别

xxjob

  • itoo哪里用了

    • 教务: 选课前将课程信息放到redis中

面试题

druid

  • itoo中如何通过druid来看sql执行情况

超级全的使用手册https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

swagger

P6spy

ELK