面试最后整理

1、为什么java一次编译处处运行
java源程序进行编译后,生成字节码文件,然后通过JVM虚拟机转化为相应的机器码。
2、什么是多态,存在的三个必要条件
多态是同一个行为具有多个不同表现形式的,同一个接口,使用不同的实例执行不同的操作。
继承,重写,父类引用指向子类对象
3、CAP原则
一致性(C)、可用性(A)、分区容错性(P),要么AP,要么CP,要么AC,但是不存在CAP
4、spring、springboot、springmvc
spring是一个开源框架,其主要核心是IOC、DI、AOP。
IOC是控制反转,原先由程序员创建对象,将控制权交由spring,由spring进行对象的创建及提供。
DI是依赖注入,依赖注入主要有四种,setter方法、有参构造器、注解、自动装配。
AOP是面向切面编程,可以通过预编译方式或者运行期动态代理的方式,在不修改源代码的情况下,统一增加功能的一种技术。主要场景:异常处理,日志记录,事物处理。AOP的底层是动态代理,如果是接口则用jdk动态代理,如果是类则用cglib动态代理。
springboot是在spring的基础上二次开发的一个轻量级、简化配置和开发流程的框架。
springmvc是在spring功能之上添加的web框架,通过把Model,View,Controller分离,把较为复杂的web应用分成逻辑清晰的几部分。

5、springmvc的运行流程
一、用户发送请求到dispatcherservlet
二、dispatcherservlet接受到请求,调用HandlerMapping映射处理器
三、HandlerMapping经过处理返回给dispatcherservlet一个handler对象
四、dispatcherserlvet将handler对象发送给HandlerAdaptor适配处理器
五、HandlerAdaptor经过适配调用相应的Controller
六、Controller执行相应的逻辑返回给HandlerAdaptor一个ModelAndView对象
七、HandlerAdaptor将ModelAndView对象返回给dispatcherservlet
八、dispathcerservlet将ModelAndView对象通过视图解析器进行解析,得到一个View对象
九、dispatcherserlvet再根据View对象进行视图的渲染
十、将渲染后的结果返回给用户

6、RestController和Controller的区别
二者都是用来标注当前类能否用来接收http请求
RestController相当于Controller+ResponseBody
@Controller注解,配合视图解析器,会返回相应的页面
@RestController注解,无法返回jsp页面,返回的是return后面的内容

7、事物的注解Transcantion、隔离级别、传播方式
事物主要是指程序的一个执行单元,事物必须服从ACID原则,即原子性、一致性、持久性、隔离性
7种传播行为:
propagation 英[ˌprɒpə’ɡeɪʃ(ə)n] 传播
1、PROPAGATION_REQUIRED 表明当前方法一定要在事务中执行,如果有事务存在,就在当前事务中执行;如果没有,则启动一个新的业务执行
1.简单来说:外围没有事物,则在当前事物执行,外围事物出现异常也不会进行回滚;如果外围有事物,则加入外围事物,外围事物出现异常,则全部回滚
2、PROPAGATION_SUPPORTS 表明当前方法可以不在事务中执行,如果有事务存在,才会在事务中执行,否则就会以非事务的方式执行
2.简单来说:第一种外围不存在事物,必须要在自己的事物中执行,而第二种如果外围不存在事物,以非事物的方式执行
3、PROPAGATION_MANDATORY mandatory 英[ˈmændətəri] 强制的
表明当前方法一定要在事务中执行,如果不存在事务,就会抛出一个异常
3.必须要在事物中执行,外围事物不存在,则会抛出异常
4、PROPAGATION_REQUIRED_NEW 表明当前方法必须运行在自己的事务中,如果当前事务存在的话,会将原来事务挂起,然后启动新事务来执行这个方法,方法执行完成后,才会将原来的事务恢复,原来的事务和新启动的事务是互不干扰的
5、PROPAGATION_NOT_SUPPORTED 表明当前方法不在事务中运行,如果当前事务存在的话,会将原来事务挂起,然后以非事务的方式执行完当前方法,然后再恢复原有事务
6、PROPAGATION_NEVER 表明当前方法不能运行在事务中,如果当前事务存在,则会抛出异常
7、PROPAGATION_NESTED 表明嵌套事务,如果当前事务存在的话,会在事务内部开启一个事务,并且原来事务不会被挂起,也就是说,外部事务和内部事务是有关系的,外部事务的回滚会导致内部事务的回滚
虽然有7种,但是常用的就第一种REQUIRED和第四种REQUIRES_NEW

脏读 :一个事务读到了另一个事务的未提交的数据
不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致.
虚幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.
不可重复读的重点是修改,幻读的重点在于新增或者删除。
五个隔离级别:
DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生
已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生
可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生.
串行化的 (serializable) :避免以上所有读问题.

Mysql 默认:可重复读

隔离级别:
传播方式
8、mybatis、JPA和hibernat的区别
mybaits的前身是apache的开源项目ibatis,mybatis是一个持久化框架,可以自定义sql语句、存储化过程、高级映射,通过xml、注解进行配置。
把有关数据库持久层的一些操作给封装,例如数据库的连接,数据库连接池,数据库的驱动包等等,可以通过配置文件的方式直接进行配置连接。通过框架去管理这些东西,简化开发流程。

9、单点登录如何实现

mybatis的缓存,一级二级缓存
mybatisPlus
git的使用,为什么出现冲突,项目发生冲突时如何解决
quarz 定时任务

四阶段
linux命令cd,cp,ls,mv,chomd,su切换用户,vim,rm
linux搭建运行环境mysql,jdk,tomcat
docker
jpa
shiro,核心控制器SecurityManager,主体subject
nginx解决跨域问题
redis 非关系型数据库基于内存,单线程,aof,rdb,淘汰策略,redis搭建集群需要6台服务器,哨兵模式,选举策略
使用:session共享,单点登录,验证码,首页数据,热点排序
ribbon客户端负载均衡,nginx客户端负载均衡
http协议和rpc协议
nginx
rabbitmq
elasticsearch和solr
elasticsearch数据同步:1同步修改,2rabbitmq,3logstash
LCN分布式事务,cap定律,base理论
强一致性 :2pc,3pc
弱一致性: rocketmq
lcn manager 最终一致性
XXL-JOB分布式任务
通过分布式锁来实现,zookeeper分布式锁,redis分布式锁
锁分为 乐观锁、悲观锁
乐观锁:认为当前的不会发生锁重入的情况,执行效率高一些,在数据库的字段中设置一个version版本号来进行控制
悲观锁:认为每一次都会发生锁重入,锁定当前行或者表
mysql引擎,InnoDB引擎

项目的需求文档、测试流程,上线流程
技术中的难点,遇到的问题

1.Runnable和Thread相比优点有:
(1)由于Java不允许多继承,因此实现了Runnable接口可以再继承其他类,但是Thread明显不可以
(2)Runnable可以实现多个相同的程序代码的线程去共享同一个资源,而Thread并不是不可以,而是相比于Runnable来说,不太适合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值