总结
1.第一类
1.设计模式的理念,设计原则
单一职责原则
里氏替换原则
依赖倒置原则
接口隔离原则
迪米特法则
开闭原则
2.如何实现多线程
1、继承Thread类实现多线程
2、实现Runnable接口方式实现多线程
3、使用Callable实现有返回结果的多线程
3.Thread和Runnable的区别
但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法
4.项目中如何使用Redis缓存
1.首先我们在项目中的pom文件中配置了一个redis坐标
2.我们配置好redis后编写一个工具类“JedisDao”将Redis的一些基本操作命令进行封装
3.然后将一些高访问的数据,商品的一些基本信息和图片放入缓存中
4.如果缓存过期之后来了一大波数据访问,会导致数据库的崩盘。(雪崩)
如何解决:设置不同缓存的过期时间,防止同一时间过期
5.如果查询一条数据库不存在的数据,导致缓存中不存在那条数据,压力都给到数据库身上(穿透)
解决:缓存一个空对象,不过效果一般;使用布隆过滤器,效果比较好,不过维护难。
布隆过滤器 一种基于概率的数据结构 运行速度快 内存小 具有一定的识别错误的几率 不存在误报 存在漏报
6.设置缓存的过期时间(persist key)
7.删除缓存的过期时间(redis 删除过期时间)
5.介绍项目
6.状态
2.第二类
1.在项目中如何处理支付的时候出错的问题
首先在支付这一块用到了事物,使用事物来进行管理。要么全部成功,要么全部失败。失败的话就执行rollback进行回滚
2.事物的隔离级别
1.读未提交(read uncommitted):一个事务还没有提交时,它做的变更就能被别的事务看到。
2.读提交(read committed):一个事物提交之后,它做的变更才会被其他事务看到。
3.可重复读(repeatable read):一个事物执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。未提交变更对其他事务也是不可见的。
4.串行化(serializable):对于同一行记录,写会加“写锁”,读会加“读锁”,当出现锁冲突时,后访问的事务需要等前一个事务执行完成,才能继续执行。
3.Ajax是否具有参数
首先我们的项目中自己定义了一个ShoppingResult里面封装了业务状态,响应的消息以及响应的数据。这个时候我们使用ajax去拿数据如果拿到了对应的数据那么它会进行一个参数的传递,告诉我是否成功。
4.如何创建线程池
newFixedThreadPool固定数目的线程池
newSingleThreadExecutor单线程化的线程池
newCachedThreadPool可缓存的线程池
newScheduledThreadPool 定义一个可定时和周期性执行的线程池
5.synchronized的使用
修饰实例方法,对当前实例对象加锁
修饰静态方法,对当前类的Class对象加锁
修饰代码块,对synchronized括号内的对象加锁