事务
用途
用于处理数据量大、复杂度高的数据。
需要的引擎
Innodb
事务的四个特性
原子性:事务中的操作,要么全部完成,要么全部不完成,不会停留在中间某个环节
一致性:事务开始之前和结束之后,数据库的完整性没有被破坏。写入的资料必须完全符合所有的预设规则
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行导致的数据不一致
持久性:事务处理结束以后,对数据的修改是永久的系统故障也不会丢失
事务的隔离级别
读未提交:能读到没有被提交的数据,不能防止
读提交:只能读到已经被提交的数据,防止脏读
可重复读:读取了一条数据,这个事务不结束,别的事务就不可以改这条记录,防止不可重复读
串行化:运行完一个事务的所有子事务之后才可以执行下一个事务,防止幻读
不是隔离级别越高越好,级别越高效率越低,默认是读提交
事务的并发问题
脏读:事务A读到了事务B还没有提交的数据
不可重复读:在一个事务里面读取了两次某个数据,读出来的数据不一致
幻读:在一个事务里面的操作中发现了未被操作的数据
进程和线程
进程和线程的理解
进程是系统资源分配和调度的基本单位,进程切换开销大,线程是cpu分配和调度的基本单位,线程开销小,一个进程可以有多个线程
线程间通信方式
synchronized:wait()等待,notify()唤醒,notifyall()唤醒全部
lock:await()等待,signal()唤醒,signalall()唤醒全部
阻塞队列 :put()放入队尾,队满则阻塞,take()取出队头,队空则阻塞
进程间通信方式
管道
消息队列
共享内存
信号量
信号
套接字
常用的消息队列组件
RabbitMQ
ActiveMQ
RocketMQ
Kafka
缓存
缓存是什么
在项目中没有必要每次请求查询都查询数据库,可以先查询缓存,如果命中就直接返回缓存结果,如果没有命中就查询数据库,并将查询结果放入缓存
缓存的作用
缓和较慢存储的高频请求,缓解数据库压力,提高响应速度
为什么可以提高响应速度
因为缓存是基于内存的,内存的读写速度比磁盘快得多
缓存的应用场景
cpu缓存:位于cpu和内存之间的临时存储器,容量比内存小,速度比内存快得多
浏览器缓存:缓存一些静态资源,比如图片,js,css
cdn缓存:客户端先检查浏览器的缓存,缓存过期则会向cdn送请求,cdn检查缓存数据没有过期,那么直接返回响应,如果已经过期,需要向web server发起请求,获得新的数据响应
数据库缓存:cache层,数据缓存在内存中,读写速度比磁盘快得多
如何读写缓存
判断是否有缓存数据,没有数据的话从数据库加载,如果查出数据不为null,则写入缓存,在把数据调回使用方
缓存的数据如何与数据库中的数据保持一致
先删除缓存,再更新数据库:不常用
先更新数据库,再删除缓存:常用
http和tcp的关系
http在应用层,tcp在传输层,http要基于tcp,tcp建立连接,http用来收发数据
tcp如何保证可靠传输
校验和
确认应答与序列号
超时重传
流量控制
拥塞控制
如何应对大量访问,恶意攻击,dos,洪泛攻击
洪泛攻击就是攻击者发送大量的syn,服务器为每个syn分配一个特定的数据区,服务器返回ack后,攻击者不再进行确认,这个tcp连接就处于挂起状态
syn cookie,基本原理:完成三次握手之前服务器不分配数据区,而是根据syn计算出一个cookie值,发送方返回的ack如果与这个cookie值相同,才建立连接分配数据区
编程题:斐波那契数列递归实现
编程题:逆序打印字符串递归实现
TCP的流量控制
让发送方发慢点,要让接收方来得及接收
利用滑动窗口机制:a给b发送数据,a有发送缓存,b有接收缓存,应用层所有需要发送的数据都放在发送缓存,发送窗口是发送缓存允许发送但尚未发送的部分,成功发送数据之后,发送窗口就会往后移动,b会告诉a自己的接收窗口大小,a根据b的接收窗口大小动态地调整自己的发送窗口大小,发送窗口取接收窗口和拥塞窗口的最小值
发送缓存分哪几个区域
已经发送并收到确认,已经发送未收到确认,允许发送但尚未发送,不允许发送
拥塞控制
慢开始和拥塞避免:拥塞窗口从1开始按照指数增长,达到门限值每次加1,出现拥塞以后门限值设置为当前拥塞窗口大小/2,拥塞窗口从1开始重复这个过程
快重传和快恢复:发送方收到连续三个重复确认就重传接收方没有收到的报文段,而不用等待重传计时器到期,然后把门限值减半,执行拥塞避免
拥塞控制对移动端、打游戏,游戏动作同步有什么影响
游戏里面很多都是用UDP,你了解吗
对速度要求高
为什么直播要用UDP--》直播和视频网站一般用TCP,因为对画面质量有要求,且允许缓冲等待;而微信视频聊天一般用udp,因为不希望画面卡顿,可以接受画面不太清晰
王者荣耀用UDP会有什么问题
丢包
但是它实际不会出现这个问题,为什么
本地的文件和逻辑
所有结点的左右子树高度差不超过1,左子树小于父结点,右子树大于父结点,实现快速查找,因为二叉查找树有些情况会变成链表,时间复杂度为O(n),平衡二叉树时间复杂度为O(lgn)
红黑树比平衡二叉树好在哪里
红黑树查找效率比较低,但是插入删除效率比较高
在什么场景会用到红黑树,为什么它们会用红黑树
TreeMap,TreeSet,可以实现自然排序和定制排序
有序关联容器
list
arraylist数组,linkedlist数组,stack动态数组
无序关联容器
map,set
hashmap哈希表:数组+链表,linkedhashmap哈希表+链表,treemap红黑树
事务的特性
原子性,一致性,隔离性,持久性
事务的隔离级别
读未提交,读提交,可重复读,串行化
什么场景要用到事务
用于处理数据量大,复杂度高的数据
提交是什么意思
事务已经成功执行,并且写入数据库
什么场景下要用到串行化
非常需要确保数据一致性且不要求高并发,因为效率低
编程题:一个数组,先每次递增1,再每次递增0.1,找出第一个递增0.1的--》二分法