欢迎光临散文网 会员登陆 & 注册

企业面试基础46问

2023-02-16 11:40 作者:鹿是不是鹿  | 我要投稿

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 基础之上,基于快速构建理念,提供了自动配置,可实现开箱即用特性,其核心主要有起步依赖,自动配置,健康检查


企业面试基础46问的评论 (共 条)

分享到微博请遵守国家法律