[杂学笔记]TCP和UDP的区别、异步I/O与I/O多路复用区别、事物的隔离级别、指针和引用的区别、继承体系下析构函数必须是虚函数、map与哈希map的区别

发布于:2025-03-01 ⋅ 阅读:(12) ⋅ 点赞:(0)

目录

1.TCP和UDP的区别

2.异步I/O与I/O多路复用区别

3.事务的隔离级别

4.指针和引用的区别

5.继承体系下,析构函数必须是虚函数

6.map与哈希map的区别


1.TCP和UDP的区别

  • 连接方面:TCP是面向连接的,在通信之前需要进行三次挥手,结束通信需要进行四次挥手。而UDP是不需要的,像寄信一样,只需要地址就可以了,不需要提前建立连接通路。
  • 可靠性方面:TCP是可靠传输协议,他通过序号、确认序号、确认应答、超时重传、连接管理等机制让TCP报文一定能够到达对端。而UDP只会尽力的将报文发给对方,不管是否真的到达对端了。
  • 传输效率:TCP需要保证可靠性,需要建立连接、维护连接状态、数据确认、超时重传等操作还会受到流量管理和拥塞控制的限制,会大大的降低传输数据的一个效率问题,而UDP没有那么多复杂的机制,而且报头也比TCP小很多,所以传输效率相对较高。

2.异步I/O与I/O多路复用区别

        异步I/O是指在程序执行时,不会去等待I/O拷贝操作,而是继续向下执行任务,等待I/O操作结束之后就通过信号、回调函数或者事件的方式通知程序。这里的I/O读取操作完全是由操作系统帮助完成的,程序不关心读取过程中的细节。

        I/O多路复用则是将I/O操作的等待和拷贝操作进行分离,可以同时等待多个文件描述符的各种事件。底层提供了系统调用接口来帮助实现等待的操作,而事件就绪的拷贝或者其他操作需要用户自己去定义实现,只是通过多路复用机制提前知道哪些 I/O 通道可以进行操作。

3.事务的隔离级别

  • 读未提交:最低的隔离级别,相当于没有进行隔离,所有的事务都可以看到其他事务没有进行提交的数据。这种隔离界别在实际的业务中基本上是不会使用的。会有很多的并发问题,例如脏读、幻读、不可重复读等问题。
  • 一个事务只能看到其他的已经提交的事务所改变的数据操作。这种级别的隔离就不会产数据的脏读问题了。因为只能读取到提交之后的存放在磁盘当中的永久化数据。
  • 这是MySQL的默认隔离级别,他确保同一个事务,在执行的过程中多次读取操作数据的时候,会看到同样的数据行。使得数据不会出现脏读、不可重复读取的问题,但是会有幻读的问题。
  • 串行化是数据库事务隔离级别中最高的级别。在串行化隔离级别下,事务的执行是顺序的,一个事务必须等待前一个事务完成(提交或者回滚)之后才能开始执行,在等待过程中就会放入等待队列。

4.指针和引用的区别

  • 指针可以不用初始化,也可以在代码中多次改变指向,引用在定义的时候必须进行初始化,并且不能更改引用对象,后续的赋值操作都是在改变指向的对象的值。
  • 在语法层面上,指针需要占用4/8字节空间,但引用不占用空间。
  • 指针支持各种运算操作,例如加减运算,而引用不支持。
  • 引用比指针安全一些,指针可能会出现空指针的解引用问题。
  • sizeof引用大小就是指向的变量的大小。

5.继承体系下,析构函数必须是虚函数

        如果不是的话,在父指针指向子类对象的情况下,调用析构函数,会调用静态绑定的父对象的析构函数,那么就会导致子类的新创建的变量内容无法进行析构处理,就会造成内存泄漏的问题。

        是虚函数的话,子类重写析构函数会将继承下来的虚函数表存放父类析构函数的地址进行重写,那么父类指针指向子类函数的指针,在调用析构函数的时候,就会调用子类的析构函数了,而且在析构的时候,会先析构子类后析构父类,防止先析构父类之后,子类的析构函数执行逻辑还会去访问父类对象,所以会先子类后父类。为了保证这一顺序,会在子类析构完毕之后,自动帮助我们调用父类析构函数,所以我们不需要去管顺序,直接定义子类析构的逻辑就可以。

6.map与哈希map的区别

  • 实现原理:map底层是红黑树,一种平衡二叉搜索树。而哈希map是基于哈希数组实现的,每一个数组元素是一个链表或者一个红黑树。
  • 性能:map插入删除以及查找的效率都是logN。而哈希map是基于哈希函数表达式定位元素的位置,所以在一般情况下插入删除和查找的效率都是O(1),但是在哈希冲突严重的时候会退化为O(N)。
  • 元素的顺序:因为map需要快速的查询,所以存放元素是有一定顺序的,进行中序遍历的时候,会得到一个有序的序列。而哈希map元素的存储是没有顺序的。
  • 场景:map适用于需要有序遍历、进行范围查找等场景。哈希map适用于快速的插入和查找、键的分布比较均匀哈希冲突较少的场景。


网站公告

今日签到

点亮在社区的每一天
去签到