1.重载和重写的区别
函数重载 是指同名函数,参数列表不同。
函数重写 是子类与父类函数名称相同,参数列表相同,方法体不同,一般用在子类继承父类对父类方法的隐藏。
2.mysql 主键索引
主键,全称是主键约束,是一个列或者列的组合,值能够唯一标识一行数据的字段,具有非空性,唯一性
索引:快速查找的数据结构。以某种方式引用数据,在数据结构上实现快速查找算法,协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。
3.mysql 事务
事务是一组逻辑操作的集合,具有ACID特征。
A ,Atomicity,原子性,事务中的所有操作像原子一样不可分割,要么全部成功,要么全部失败。
C,Consistency,事务的结果必须使数据库从一个一致性转到另一个一致性状态。
I,Isolation,隔离性,并发执行的事务不会被相互影响。
D,Durability,持久性,事务一旦提交,对数据库的更新是持久的。
mysql默认使用InnoDB引擎,事务的ACID是通过InnoDB日志和锁来保证。
- 原子性和一致性通过Undo log(回撤日志)来实现
- 持久性通过redo log(重做日志)来实现
- 事务的隔离性是通过数据库锁的机制实现的
Undo Log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方(这个存储数据备份的地方称为Undo Log)。然后进行数据的修改。如果出现了错误或者用户执行了roll back语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。
Redo Log记录的是新数据的备份。在事务提交前,只要将RedoLog持久化即可,不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是RedoLog已经持久化。系统可以根据Redo Log的内容,将所有数据恢复到最新的状态。
锁
以MySQL为例,
- 按照类型:乐观锁、悲观锁
- 按照粒度:行级锁、页级锁、表级锁
- 根据作用:共享锁(读锁)排他锁(写锁)
悲观锁假设数据在并发操作中一定会发生冲突,所以在数据开始读取的时候就把数据锁住。悲观锁有行级锁和页级锁两种形式。行级锁对正在使用的单条数据进行锁定,事务完成后释放该行数据,而页级锁则对整张表进行锁定,事务正在对该表进行访问的时候不允许其他事务并行访问。
乐观锁则假设数据一般情况下不会发生冲突,所以在数据提交更新的时候,才会检测数据是否有冲突。在执行事务时把整个数据都拷贝到应用中,在数据更新提交的时候比较数据库中的数据与新数据,如果两个数据一摸一样则表示没有冲突可以直接提交,如果有冲突就要交给业务逻辑去解决。
或者是使用版本戳来对数据进行标记,数据每发生一次修改,版本号就增加1。某条数据在提交的时候,如果数据库中的版本号与自己的一致,就说明数据没有发生修改,否则就认为是过期数据需要处理。还有时间戳。
隔离级别
隔离级别 | 脏读 | 幻读 | 不可重复读 |
---|---|---|---|
读未提交 | √ | √ | √ |
读已提交 | × | √ | √ |
可重复读 | × | √ | × |
串行化 | × | × | × |
不可重复读和幻读:
- 不可重复读重点在于update和delete,而幻读的重点在于insert。
- 避免不可重复读需要锁行(某一行在select操作时,不允许update与delete)就行,避免幻读则需要锁表
http状态码
- 100 已接受,可继续发送
- 101 switching protocols 转换协议
- 200 成功
- 204 成功,无任何主体部分content
- 206 成功执行部分
- 301 永久性重定向
- 302 临时重定向
- 303 请求资源在另一个URL
- 304 服务器内容无更新,建议直接读取浏览器缓存
- 400 语法错误
- 401 未授权
- 403 拒绝提供服务
- 404 资源不存在
- 500 服务器发生不可预知错误
- 503 服务器暂时不能处理请求
拥塞控制和流量控制
- 拥塞控制是防止过多的数据注入到网络中,导致网络发生拥塞;
- 流量控制是防止发送方一下子发送过多的数据到接收方,导致接收方缓存放不下。
流量控制:流量控制即让发送方发送速率不要过快,让接收方来得及接收,可以通过TCP报文中的窗口大小字段来控制发送方的发送窗口不大于接收方发回的窗口大小,这样就可以实现流量控制。持续计时器解决零窗口死等情况
拥塞控制防止过多的数据注入到网络中,使网络中的路由器或者链路过载。
发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口和接收窗口的较小值。 - 慢启动: cwnd从1开始,每次*2,一直到慢开始门限ssthresh;
- 拥塞避免:cwnd每次加1;
- 快速重传:当发送方连续收到三个重复确认ACK,说明需要重传。ssth变为原来的一半,cwnd变为ssth,然后每次+1;
- 快速恢复:当超过设定时间没有收到某个报文段的ack时,表示网络拥塞,慢启动阈值ssth变为原来一半,拥塞窗口cwnd=1,进入慢启动阶段。
linux
sed:利用脚本来处理文本文件,主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦
top命令可以看到总体的系统运行状态和cpu的使用率 。