目录

网络

网络

  1. HTTP 1.0: 短连接 (100张图, 发起100次 TCP 握手挥手)

    HTTP 1.1: 长连接 (100张图, 一次 TCP 握手挥手, 在一个TCP连接上可以传送多个HTTP请求和响应)

    HTTP 2.0: 长连接 + IO 多路复用 (同时通过单个 HTTP/2 连接发起多重的请求-响应消息, 可以很容易实现多流并行而不依赖多个 TCP 连接)

  2. GET 和 POST 有啥区别? 事实上 POST 能干的 GET 也不是不行, 只是我们应该遵守 RESTful api罢了

    1. GET 应该是幂等的, 反复读取不应该对访问的数据有副作用
    2. GET 中可以但不应该包含 body, 而应该使用 cookie 和 form 表单进行传递数据
  3. TCP / UDP:

    1. UDP 无连接、开销小、速度快, 但存在丢包, 适用于音频/视频/直播这种偶尔丢失一两个数据包也没什么关系的

    2. TCP 通过三次握手确保建立好可靠数据连接才会进行传输, 以及采用了超时重传/错误校验等机制保证数据的可靠传输

      三次握手: 客户端:“我准备好了” 服务端:“我收到了 你开始吧” 客户端:“好的 那我开始了” 四次挥手: 客户端:“我发完了” 服务端:“我知道了” 服务端:“那你关闭吧” 客户端:“那我关了”

    3. 为什么一定要三次握手?

      TCP 的可靠连接是靠起始序列号 seq(sequence numbers) 来达成的, 如果只有两次的话, 客户端发送了自己的序列号服务端进行确认, 而服务端发出的起始序列号客户端不能进行确认 (只能接受), 不能确保数据传输可靠性.

编程基础

  1. 什么是事务? 怎么理解事务? 事务是并发控制的基本单位, 这个主要用于后端数据库操作吧

    事务应该具有4个属性:原子性、一致性、隔离性、持久性,这四个属性通常称为ACID特性

    原子性(atomicity):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;

    一致性(consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;

    隔离性(isolation):并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;

    持久性(durability):持久性也称永久性(permanence),一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

  2. 怎么理解面向对象?

    面向对象产生我觉得主要是为了降低耦合, 便于开发维护, 假如我们还使用面向过程的话我们每个方法的实现都是拆的很散的, 每次需求改变都需要在大量的方法中寻找自己需要的. 而如果采用面向对象, 那么我们就把一类事务封装在一起, 而在我们需要的时候去命令对象做什么事情.

  3. 抽象类接口有什么区别呢?

    抽象类可以有默认实现, 而子类进行继承. 接口本身什么事情都干不了 接口是为了方便某个类去开放一些方法, 而抽象类是为了方便同种的类去实现这一类功能

  4. 基本 sql 语句

    1
    2
    3
    4
    5
    
    select * from students;
    delete from students where gender='M';
    insert into students (name,gender,score) values ('wrnm','K',10);
    update students set name='nb',gender='F',score=10000 where score<20;
    select * from students order by score desc limit 3 offset 0;