计算机基础知识复习1.4
数据库事务
#开启一个事务
start transaction
#执行SQL语句
SQL1 SQL2 ..
#提交事务
commit
类加载器
启动类加载器:负责加载Java的核心库 用C++编写,是JVM的一部分,启动类加载器无法被Java程序直接引用
扩展类加载器:是Java语言实现的,继承自ClassLoader类,负责加载Java扩展目录下的jar包和类库。扩展类加载器由启动类加载器加载,并且父加载器就是启动类加载器
应用程序类加载器:是Java语言实现的,负责加载用户类路径上的指定类库,是我们编写Java程序默认使用的类加载器
自定义类加载器:开发者可以根据需求定制类的加载方式,比如网络加载class文件,数据库,加密的文件中加载类
http是一个无状态协议,意味每个请求都是独立的,每一次请求点到为止不会造成不必要的连接占用,缺点在于每次请求会传输大量重复的内容信息
503 表示服务器当前很忙,暂时无法响应客户端,网络服务正忙,请稍后重试
301 表示永久重定向 说明请求的资源已经不存在了,需要改用新的url再次访问
302 表示临时重定向 说明请求的资源还在,但暂时需要用另一个url来访问
索引失效
对索引使用左右模糊匹配,使用左模糊匹配
对索引使用函数
对索引隐式类型转换
联合索引使用非最左匹配
where子句的or
磁盘调度算法
先来先服务
最短寻道时间优先
扫描算法 循环扫描算法:磁头移动到磁盘最始端或最末端才开始调换方向
LOOK与C-LOOK算法:磁头移动到最远的请求位置,然后立即反向移动
边缘触发和水平触发
当被监控的socket描述符上有可读事件发生时,服务端只会从epoll_wait中苏醒一次,即使进程没有调用read函数从内核读取数据,依然只苏醒一次,因此我们程序要保证一次性将内核缓冲区的数据读完
使用水平触发模式时,当被监控的socket上有可读事件发生时,服务端不断从epoll_wait中苏醒,直到内核缓冲区数据被read函数读完才结束。
使用水平触发,当内核通知文件描述符可读写时,接下来还可以继续去检测他的状态,看他是否依然可读或可写,所以在收到通知后,没必要一次执行尽可能多的读写操作
使用边缘触发,I/O事件发生时只会通知一次,而且我们不知道到底能读写多少数据,所以在收到通知后应尽可能地读写数据,以免错失读写的机会。因此,我们会循环从文件描述符读写数据,那么如果文件描述符是阻塞的,没有数据可读写的,进程会阻塞在读写函数里,程序没办法继续执行
接口和抽象类区别
实现接口的关键字为implements,继承抽象类的关键字为extends,一个类可以实现多个接口,但一个类只能继承一个抽象类,接口可以间接实现多继承
接口只能有方法的定义,不能有方法的实现,抽象类可以有定义与实现
接口成员变量默认为public static final 必须赋初值,不能被修改,所有成员方法都是public ,抽象类中成员变量默认default 可在子类中被重新定义,也可被重新赋值
抽象类可以包含实例变量和静态变量,而接口只能包含常量
使用包装类:例如List,Set,Map只能存储对象,不能直接存储基本数据类型。包装类提供了许多方法,例如基本类型转换,比较,操作。对null值支持。
undo log 回滚日志:是InnoDB存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和MVCC
redo log 重做日志:是InnoDB 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复
binlog 是Server层生成的日志,主要用于数据备份和主从复制
进程间通信方式
管道:管道传输数据是单向的,内核里的一串缓存
消息队列:保存在内核中的消息链表,在发送数据时,会分成一个一个独立的数据单元,也就是消息体
共享内存:拿出一块虚拟地址空间来,映射到相同的物理内存中
信号量:实现进程间的互斥与同步,而不是用于缓存进程间通信的数据
MyBatis一级,二级缓存作用
一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存
二级缓存:默认采用PerpetualCache,HashMap存储,不同在于其存储作用域为Mapper(Namespace)。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serializable序列化接口,可在他的映射文件中配置<cache/>
什么是中断
CPU停下当前的工作任务,去处理其他事情,处理完后回来继续执行刚才的任务
发生中断:当外部设备或软件程序需要处理器的注意或响应时,会发出中断信号,处理器在接收到中断信号后,会停止当前执行的指令,保存当前执行现场,并跳转到中断处理程序执行
中断响应:处理器接收到中断信号后,会根据中断向量表找到对应的中断处理程序的入口地址。处理器会保存当前执行现场(如程序计数器,寄存器状态) 以便在中断处理完成后能够恢复执行
中断处理:处理器跳转到中断处理程序的入口地址开始执行中断处理程序,中断处理程序会根据中断类型进行相应的处理,可能涉及保存现场,处理中断事件,执行特定任务
范式
第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项
第二范式(2NF):非码属性必须完全依赖于候选码(消除非主属性对主码的部分函数依赖)
第三范式(3NF):任何非主属性不依赖于其他非主属性(消除传递依赖)
半连接队列和全连接队列
服务端收到客户端发起的SYN请求后,内核会把该连接存储到半连接队列,并向客户端响应SYN+ACK,接着客户端返回ACK,服务端收到第三次握手的ACK后,内核会把连接从半连接队列移除,然后创建新的完全的连接,并将其添加到accept队列,等待进程调用accept函数时把连接取出来
全局锁:通过flush tables with read lock语句会将整个数据库就处于只读状态
表级锁:通过lock tables 语句可以对表加表锁
记录锁:锁住一条记录,记录锁是有S锁和X锁之分的,满足读写互斥,写写互斥