企业面试基础46问
1:resource和autowriter区别
resource按照类型名注入,autowrite按照类型进行匹配
2:aop作用,底层原理,那些地方能用到
将一个系统中共同的业务逻辑抽取出来,进行单独的封装成一个组件,然后以配置的方式作用于系统,底层实现,jdk代理,cglib动态代码,jdk代理只能代理接口,cglib可以代理类,应用场景,事务开启,日志记录,安全,权限校验
3:切面,切入点,通知
切面就是共通业务提出来,在某个特定条件下共同调用,切入点就是找到目标方法给它追加共通的业务逻辑,通知就是切入点方法,这个共通的业务逻辑作用的时机,常用的环绕通知,前置后置通知,异常,最终通知等
4:Java的Spring注解配置
例如@Configuration,将类作为一个bean的定义,@Bean,将方法作为一个bean
5:spring支持的几种bean的作用域
singleton,prototype,request,session,global-session(该作用域仅在基于web的spring applicationcontext情形下有效)
6:mybatis的好处
把sql语句从java程序独立出来,放在单独的xml中书写,给程序带来了极大的便利,ibatis封装了底层jdbc api的调用细节,并能自动将结果集转换成Javabean对象,且可以结合数据库自身特点灵活控制sql语句,能够实现比hibernate等全自动orm更高德查询效率,完成复杂查询查询等
7:怎么把数据放入到session里面
可以声明一个request,或者session先拿到session,然后就可以放入数据,或者可以在类上加一个@SessionAttributes注解,里面包含的字符串就是要放入session里面的key
8:springmvc和starts2的区别
mvc入口是一个前端控制器,strus2入口是一个filter过滤器,mvc基于方法开发,请求参数传递到方法的形参,可以设计为单例,多例,starts2基于类开发,传递参数通过类的属性,只能设计为多例
9:spring的事务管理
事务就是对一系列的数据库操作,比如插入多条数据,进行统一的提交或回滚操作,要么成功,要么全部失败,回滚之前的所有操作,可以防止出现脏数据,防止数据库出问题,spring也有着自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过spring的注入来完成此功能,spring事务管理一般选择声明式事务,,可以将事务管理和业务代码分离,只需要通过注解或者xml配置管理事务,另一种编程式事务管理,灵活但很难维护
10:为什么说mybatis是半自动的orm映射工具
hibernate属于全自动orm映射工具,使用hibernate查询关联关系或者关系集合对象时,可以根据关系模型直接获取,所以他是全自动的,而mybatis在查询关联对象或关联集合对象时,需要手写sql来完成,我们称之为半自动orm工具
11:mybatis都有哪些Executor执行器,之间区别是什么
mybatis有三种基本的executor执行器,smpleExecutor,没执行一次update/select,就创建一个statement,用完释放,reuseexecuter,简而言之就是重复使用的statement,batchexecuter,与jdbc批处理相同,按批次进行处理
12:mybatis里面的动态SQL是怎么设定的,用什么语法
一般通过if节点来实现,如果要写的完整,必须配合where,trim,trim节点用来判断如果动态语句是以and或or开始,那么会自动把这个and或者or取掉
13:mybatis映射文件中 a标签通过include引用了b标签的内容,请问b标签能否定义在a标签的后面,还是说必须定义在a标签的前面
虽然mybatis的xml解析是按顺序的,但是b标签可以定在任意地方,解析式解析a,a中的b标签没有回显标记为未解析状态,当继续向下解析完b时,会再回来重新解析那些未标记的标签,此时再解析a标签时,b标签已经存在,a标签也就可以正常解析完成了
14:mybatis是如何将sql执行结果封装为目标对象并返回的,都有哪些映射形式
一种使用reslutmap标签,定义列名属性名之间的关系,第二种使用sql的别名功能,将列名书写为对象属性名
15:mybatis的动态SQL是做什么的,都有哪些动态sql
完成逻辑判断和动态拼接sql的功能,mybatis提供了9种动态sql,trim,where,set,foreach,if,choose,when,bind等
16:对springmvc的理解
基于mvc的web框架,springmvc是spring的子容器,spring的一个模块,子容器可以拿父容器的东西,但是父容器不能拿子容器的东西,springmvc的前端控制器dispatcherservlet,用于分发请求,使开发变得简单,springmvc的三大组件,处理器映射器,处理器适配器,视图解析器
17:mybatis接口调用时有那些要求
mapper接口的方法名和mapper.xml中定义的每个sql的id相同,mapper接口的输入参数类型和mapper.xml中定义的每个sql的paramterType的类型相同,mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同,mapper.xml文件中的namespace及时mapper接口的类路径
18:mybatis的优缺点
sql写在xml里面,便于统一管理和优化,减少sql与程序代码的耦合,提供xml标签,支持动态sql编写,缺点是工作量大,字段多,sql依赖于数据库,导致数据库的依赖性比较差,由于xml里面标签id必须唯一,导致dao中方法不支持重载,所以dao层必须是接口
19:jdbc编程有那些不足之处
(1)数据库链接创建,释放频繁,造成系统资源浪费从而影响性能,连接池可以解决此问题
(2)sql语句写在代码中造成代码不易维护,SQL变动需要改变java代码,sql传参及解析麻烦,sql变化导致解析代码变化,如果能将数据库记录封装成pojo对象解析比较方便
20:mybatis的编程步骤
创建sql sessionfactory
通过sql sessionfactory创建sqlsession,通过sel session执行数据库操作,调用session.commit提交事务,调用session.close关闭事务
21:什么是mybatis的接口绑定,有什么好处
接口映射就是在ibatis中任意定义接口,然后把接口里面的方法和sql语句绑定,我们通过直接调用接口方法,例如UserMapper userMapper=sqlSession.getMapper(UserMapper.class)就可以,比起原来sqlsession提供的方法,例如List<Count> countryList = sqlSession.selectList("selectAll"),可以更加灵活的选择和设置
mapper.xml接口的本质是动态代理
22:mybatis缓存机制,一级,二级介绍一下
一级缓存默认开启sqlsession级别的缓存,实现同一个会话中数据的共享,一级缓存的生命周期和sqlsession一致,当有多个sqlsession或者分布式环境下,数据库写操作会引起脏数据
二级缓存默认不开启.sqlsessionfactory级别的缓存,实现不同会话中数据的共享,是一个全局变量,可自定义存储源,如Ehcache,当开启缓存后查询的流程二级缓存>一级缓存?数据库,二级缓存还可设置是否允许刷新和刷新频率实现,实现类实现序列化,在mapper文件中开启<cache>,在配置文件中设置cacheEnabled为true
23:springmvc和ajax相互调用的
通过jackson框架就可以把Java里面的对象直接转化成js可以识别的json对象,具体如下
加入jackso.jar包,在配置文件配置json的映射,在接受ajax方法里面可以直接返回object,list等,但方法前面要加上
24:spring框架事务管理有哪些优点
为不同的事务api(jdbc,Hibernate),提供了统一的编程模型,为编程式事务管理提供了一个简单的api而非一系列复杂的事务api,如jta,支持声明式事务,可以和spring的多种数据访问技术很好的融合
25:spring中如何注入一个java集合
spring提供以下集中集合的配置元素
list,注入一列值,可重复,set,注入一组值,不能重复,map,注入一组键值对,键和值可为任意类型,props,注入一组键值对,键值对都只能为string类型
26:spring框架的好处
轻量级,控制反转,面向切面的编程,容器,mvc框架,事务,异常处理等
27:spring如何保证controller并发的安全,
spring多线程请求过来调用的controller对象都是一个,而不是一个请求过来就创建一个controller对象,并发的安全,原因就在controller对象是单例的,如何让controller不以单例而以多例形式存在呢,只要在类上加上@Scope("prototype")即可,这样每次请求调用的类都是重新生成的但会影响效率
28:spring中用到了哪些设计模式
代理模式,单例模式,工厂模式,适配器模式,观察者模式等
29:mybatis应用中#和$有什么异同点
相同点:都是通过get来获取值
不同点:$闯进去的字符串不带引号,#带引号
30:spring种食物处理方式以及优点
能够实现全局事务的控制,能够保证项目模块在系统中完成的功能是可控制的操作aop
31:spring工厂底层构建bean对象借助了什么机制,当对象不实用了要释放资源,目的是什么,何为内存泄露
借助反射机制,防止内存泄露,独享已经不适用了单占用着内存,就是内存泄漏,内存泄漏不是内存溢出,但是是一个导火索,内存溢出直接导致系统崩溃
32:spring中基于注解如何配置作用域,如何配置延迟加载机制@Scope("singleton"),@Scope("prototype"),@Lazy(value=true)
33:spring ioc如何理解
spring提供的一种控制反转机制,目的是将我们项目中对象的依赖管理交给spring实现,这样可以更好实现对象关系的解耦,提高程序的可扩展性
34:何为spring bean容器,spring bean 容器与spring ioc容器有什么不同
(1)用于创建bean对象,管理bean对象的容器
(2)springioc容器本质上指的就是springbean容器,spring bean容器最核心的一个机制是ioc机制,所以spring bean容器 又称之为spring ioc容器
35:servlet的调用过程
浏览器向服务器发送请求,会根据请求中的host头,得知访问的死哪一台虚拟主机,根据请求行中的资源路径得知访问的是那一个web应用和资源,根据获取到的资源路径到web.xml中匹配真实的路径并创建request和reponse对象,服务器从reponse对象中获取要发给浏览器的数据,按照htttp协议规定的方式发送给浏览器
36:分布式架构
分布式之前,一般采用单体架构设计,单体架构设计把所有功能模块写在一起,这样的系统扩展性不高,如果其中某个模块代码出现了问题,可鞥会影响整个服务器的运行,粉武器按照某种规则,将项目进行拆分,从架构上降低了系统的耦合性,提高软件的扩展性,可以是按照模块拆分,也可以是按照层级拆分
37:redis中集群存储数据的算法
一致性hash算法,hash算法的特性,平衡性,单调性,分散性
38:什么是缓存穿透
高并发环境下,用户长时间访问数据库中不存在的数据,称之为缓存穿透,解决方案,IP限流,单位时间内设定ip请求的次数,2就是布隆过滤器
39:布隆过滤器
是一个很长的二进制向量和一系列随机映射函数,用于检索一个元素是否在一个集合中
40:布隆过滤器使用规则
用户存储数据时先通过布隆过滤器,过滤器会用资深的算法对数据进行计算,二进制方式存储起来,当用户查询数据时,过滤器会用同样的算法再算一次,如果算出来数据位置是1,则代表数据存在,允许用户去访问缓存或者数据库,如果是0,直接拒绝访问
41:什么是aop
在不改变原有对象的基础上,为目标对象进行功能扩展
42:ajax
web应用客户端技术,可以借助客户端脚本与服务端应用异步通讯,局部刷新,提高响应和渲染速度,提高用户体验
43:jax编程步骤
基于dom事件创建xhr对象,在xhr对象上注册状态监听,与服务端建立连接,发送请求
44:四大域有哪些
page,request,session,application
45:创建对象和引用对象的区别
一个对象可以被不同的引用变量操纵,一个引用可以指向不同的对象,存储空间上,对象一般存储在堆中,而引用存储在堆栈,存储速度更快
46:springboot 核心特性
springboot是一个脚手架,构建在spring framework 基础之上,基于快速构建理念,提供了自动配置,可实现开箱即用特性,其核心主要有起步依赖,自动配置,健康检查