9.19面试题
-
说说你对MVC的理解?
- MVC是什么?是一种设计模式,为了解决以往JSP的繁琐开发
- M(model)V(view)C(controller),其中view处理页面显示,contrller是用来处理用户的交互与事件,mdoel定义实体对象与处理业务逻辑
- 三层各尽其职,相对独立,各层内部的改变不会影响其他层,从而降低了数据表达、数据描述和应用操作的耦合度
-
详细的说说Redis的数据类型?
- redis中常用的五种数据结构:string、list、set、zset、hash
- string结构底层是一个简单的动态字符串,支持扩容,存储字符串
- list存储线性有序不可重复的元素
- set存储不可重复元素,底层数据结构可以是hash和整数数组
- zset存储不可重复元素,底层数据结构是ziplist和跳表
- hash类型存储的是键值对,底层数据结构是ziplist和hash
- redis会在性能以及节省内存空间考虑,选择最适合的当前状态的底层数据结构实现
-
请你说说乐观锁和悲观锁?
- 乐观锁:总是假设最好的假设,每次去拿的时候默认别人不会修改,所以不会上锁,只有更新的时候判断在此期间有没有更新了这个数据
- 悲观锁:总是假设最坏的假设,每次去拿数据的时候默认别人都会修改,所以会上锁,别人拿这个数据时会阻塞直至拿到锁
- 数据库的共享锁和排它锁都是悲观锁的实现
-
设计模式了解么?
- 常用的设计模式有:单例模式、工厂方法模式、代理模式、适配者模式、和原型模式、模板方法模式等
- spring中的bean默认为单例模式
- spring中的BeanFactory用来创建对象的实例,他是工厂模式的实现
- AOP面向切面编程时是代理模式的体现
- 适配者模式在springMVC有体现
- 模板方法模式用来解决代码重复的问题
-
说说你对AOP的理解
- AOP是面向切面编程,是spring的两大核心,是一种思想,是对OOP的一种补充
- 它可以对业务逻辑的各个部分进行隔离,降低耦合,提高代码的可重用性
-
说说Redis的持久化策略
- RDB(redis database)在指定的的时间间隔内,将内存中的数据集的快照写入磁盘,对数据库的一致性和要求不是很高,一定时间内备份一次,如果数据库意外的down掉,就会失去一次快照的所有修改
- AOF(append only file)以日志的形式记录每个写操作,只允许追加文件,不允许改写文件redis启动会读取这个文件,从头到尾执行一遍,以此来恢复数据
-
请你讲讲单例模式、请你手写一下单例模式
- 什么是单例模式?一个对象只对外提供一个实例
public class SingleTon{
private static SingleTon instance= new singleTon();
private SingleTon(){
}
public static SingleTon getInstance(){
return instance;
}
}
-
请你说说虚拟内存和物理内存的区别?
- 物理内存:计算机中真实拥有的内存。物理内存是有限的,容易产生内存不足问题
- 虚拟内存:抽象的逻辑概念,拥有连续的内存地址
-
说说你对IoC的理解?
- IoC控制反转
- 控制:对象的创建和控制权限
- 反转:将对象的控制交由spring
- 创建对象时使用new,现在直接从spring容器中取,维护对象之间的依赖关系,降低对象之间的耦合度
- 实现方式为DI(依赖注入)有三种注入方式:构造器,setter,接口注入