记录一次面试

消息中间件的业务场景

消息监听 在分布式项目中保证事务的最终一致性。

消息丢失如何补救

spring的理解

spring是一款轻量级开源的J2EE的框架,它是一个容器框架用来装JavaBean(java对象),中间层框架,可以起到一个连接的作用,让开发更快,更简洁。

Spring具有完善的生态。核心功能是IOC和AOP。

IOC送耦合,AOP面向切面编程,允许通过分离业务逻辑和系统服务进行内聚性开发。

包含并管理应用对象的配置和生命周期,这个意义上他是一个容器。

将简单的组件配置,组合成为傅瓒的应用,这个意义上是一个框架。

Spring中Bean的生命周期是怎样的?

解析类得到beanDefinition

如果有多个构造方法,则要推断构造方法

确定好构造方法后,进行实例化得到一个对象

对对象中里@Autowried注解的属性进行属性填充

回调Aware方法比如BeanNameAware,BeanFactoryAware

调用初始化方法

调用BeanPostProcessr的初始化前的方法

调用初始化方法

调用BeanPostPricessor的初始化后的方法,在这里进行AOP

如果当前创建的bean是地哪里的则会把bean放入单例池

使用Bean

spring 容器关闭时调用DisposableBean中的desory()方法。

IOC是什么?

容器概念/控制反转/依赖注入

IOC是一个容器是个map(key,value),里面存放各种对象(在xml中配置的bean节点,@repository,@service,@controller,@component)在项目启动时会读取配置文件里面的Bean节点,更具全限定类名使用反射创建对象到map里,扫描打上注解的类函数会通过注解的类,通过反射放到map里面。

这个时候map里就有各种对象,接下来我们在代码里需要用到对象时,再通过DI注入(autowired、resource等注解,xml里bean节点内的ref属性,项目启动的时候会读取xml节点ref属性根据id注入,也会扫描这些注解,根据类型id注入,id也就是对象名)。

控制反转

没有引入IOC容器之前,对象A依赖对象B,那么对象A再初始化或者允许到某一节点的时候,自己必须主动去创建对象B或者使用使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手里。

引入IOC容器之后,对象A与对象B之间随去了之间联系,当对象A运行待需要对象B的时候,Ioc容器会主动创建一个对象B注入待对象A需要的地方,

全部对象的控制权全部上缴给第三方IOC容器,所以IOC容器成立整个系统的关键核心,它起到一个类似粘合剂的作用,把系统中所有对象粘合再一起发挥作用,如果没有这个粘合剂,对象与对象之间会彼此失去联系,这儿就是有人把IOC容器比作粘合剂的由来。

依赖注入

获得对象的过程被反转了。控制反转之后,获得依赖对象的过程由自身管理贬称了由IOC容器主动注入,依赖注入是实现IOC的方法,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

Spring中Bean是线程安全的?

不是线程安全的

Spring Bean默认是单例模式,并没有对Bean进行多线程的封装处理。

如何Bean是有状态的那就需要开发人员自己来进行线程安全的保证修改Bean的作用域singleton改为protopteon这样每次请求就相当于new Bean()这样就可以保证线程安全。

有状态就是有数据存储功能

无状态就像不会保存数据。

Spring中Bean的作用域

singleton

prototype

request

session

application

websocket

global-session

跨域如何保证用户状态一致性

无状态服务抛弃session

存入cookie

服务器session同步

ip绑定策略

使用Redis存储·

Spring Session+Redis

redis缓存淘汰机制

redis是一个key-value的数据库

惰性过期

只有当访问一个key时,才会判断key是否已经过期。对CPU比较友好,会造成内存浪费。

定期过期

每隔一段时间扫描一定数量的key,并清除其中过期的key

重写和重载

重写:发生在父子类中

子类去重写父类的方法,方法名相同,参数列表相同

返回值范围小于等于父类,抛出的异常小于等于父类。如果父类方法使用private就不能重写该方法。

重载:重载发生在同一个类中

方法名相同,参数列表不一样(参数类型不同,个数不同,顺序不同,方法返回值和访问修饰符可以不同)

索引失效

模型数空运最快

模糊%like索引会失效

数据类型错误

对于索引使用内部函数

索引类没有进行NULL值限定

对索引列进行加减运算

复合索引如果没有按照最左列进行查找则无法使用索引

全表索引更快

深拷贝和浅拷贝

静态变量和实体变量有什么区别?

HashMap和HashTable有什么区别?

如何实现一个线程安全的map?

什么样的情况下使用多线程?

多线程的创建方式有哪几种?

Thread

runnable

cannable

Executor

线程的生命周期

新建状态 就绪状态(可运行),运行状态,阻塞状态,死亡状态

线程的状态

创建,就绪,运行,阻塞,死亡。

阻塞分为等待阻塞(wait),同步阻塞,其他阻塞(sleep,join)

什么样的情况下会出现死锁

死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,无外力的作用,他们都无法推进下去

查看最近的一次死锁

show engine innodb status

设置超时时间

解除互斥条件

主动回滚死锁中的某一个事务。

NIO和传统IO有什么区别

NIO 和传统 IO 之间第一个最大的区别是,IO 是面向流的,NIO 是面向缓冲区的。

Redis为什么快。

IO模型使用多路复用器

自身内存存储数据

RDB和AOF

MyISAM与InnoDB都有什么样的区别?

INnoDB支持事务

innoDB支持外键

innoDB是聚集索引

innoDB最小锁粒度是行锁,MyISAM最小粒度锁是表锁

MYSQL的索引

主键索引,普通索引,前缀索引

左连接,右连接,全连接。

redis包含那些基本数据类型

String list set Zset Hash

Spring框架中使用了那些设计模式

工厂模式

模板模式

代理模式

策略模式

单例模式

观察者模式

适配器模式

装饰者模式

分库分表如何保证数据一致性。

对外提供的API如何保证幂等

商户id 来源

Cookie和Session有什么区别

Session的主要作用通过服务端记录服务的状态

cookie保存在客户端

Session更加安全

如何使用session进行身份验证

浏览器输入URL发生了什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值