
获得徽章 10
Day 36
在Linux系统中,一切事物均被视为文件,包括目录、文件、设备、套接字等。例如,当尝试使用打印机打印文件时,这个操作可以通过向打印机文件写入相关指令来实现。
为了实现上面的万物皆文件设计,Linux在物理文件系统之上抽象出了一层VFS(虚拟文件系统),程序通过它统一对各类文件进行访问,无论它们实际上存储在何种文件系统(例如ext、ntfs等)上。
在Linux系统中,一切事物均被视为文件,包括目录、文件、设备、套接字等。例如,当尝试使用打印机打印文件时,这个操作可以通过向打印机文件写入相关指令来实现。
为了实现上面的万物皆文件设计,Linux在物理文件系统之上抽象出了一层VFS(虚拟文件系统),程序通过它统一对各类文件进行访问,无论它们实际上存储在何种文件系统(例如ext、ntfs等)上。
展开
评论
点赞
Day 35
C++提供了4个类型转换运算符,分别是dynamic_cast、const_cast、static_cast、reinterpret_cast。
其中,dynacmic_cast支持运行时类型识别,只有转换能够进行时才会返回相应的指针,否则返回空指针。
C++提供了4个类型转换运算符,分别是dynamic_cast、const_cast、static_cast、reinterpret_cast。
其中,dynacmic_cast支持运行时类型识别,只有转换能够进行时才会返回相应的指针,否则返回空指针。
评论
点赞
Day 34
C++为了解决多继承带来的菱形继承关系(例如类B和C继承自A,而类D继承了B和C)造成的重复父类(前面的例子里,B和C都继承自A,因此D会拥有两个重复的祖先类A)问题,引出了虚基类的概念,虚基类是指在继承时用virtual修饰的类,虚基类会保证从多个基类相同的类派生的对象只继承一个基类对象。
C++为了解决多继承带来的菱形继承关系(例如类B和C继承自A,而类D继承了B和C)造成的重复父类(前面的例子里,B和C都继承自A,因此D会拥有两个重复的祖先类A)问题,引出了虚基类的概念,虚基类是指在继承时用virtual修饰的类,虚基类会保证从多个基类相同的类派生的对象只继承一个基类对象。
评论
点赞
Day 33
C++的多态大致可以分为静态多态和动态多态。静态多态通过模板(template)实现,它在编译时由编译器生成相应的代码,不具备运行时多态特性;而动态多态一般通过虚函数(virtual)实现,虚函数通过虚函数表实现指针和方法的动态绑定,从而实现运行时多态。
C++的多态大致可以分为静态多态和动态多态。静态多态通过模板(template)实现,它在编译时由编译器生成相应的代码,不具备运行时多态特性;而动态多态一般通过虚函数(virtual)实现,虚函数通过虚函数表实现指针和方法的动态绑定,从而实现运行时多态。
评论
点赞
Day 32
结构型模式可以分成类结构型模式和对象结构型模式。其中,类结构型模式关心类的组合,在这种类型中,一般只存在继承关系和实现关系;对象结构型模式关心类与对象的组合,通过关联关系,在一个类中定义另一个类的对象并使用这个对象。
结构型模式可以分成类结构型模式和对象结构型模式。其中,类结构型模式关心类的组合,在这种类型中,一般只存在继承关系和实现关系;对象结构型模式关心类与对象的组合,通过关联关系,在一个类中定义另一个类的对象并使用这个对象。
评论
点赞
Day 31
结构型模式关注如何将现有类或对象组织在一起形成新的结构,而创建型模式关注如何构造和封装类的实例化过程。
常见的创建型模式有单例模式、工厂模式、建造者模式等,常见的结构型模式有适配器模式、外观模式、组合模式等。
结构型模式关注如何将现有类或对象组织在一起形成新的结构,而创建型模式关注如何构造和封装类的实例化过程。
常见的创建型模式有单例模式、工厂模式、建造者模式等,常见的结构型模式有适配器模式、外观模式、组合模式等。
评论
点赞
Day 30
单例模式依据具体实现不同可以分为饿汉式和懒汉式两种,其中饿汉式实现会在单例类被加载时就创建出单例对象,而懒汉式会在第一次访问单例对象时才会创建单例对象。
饿汉式实现不存在线程安全问题,而懒汉式实现则需要通过加锁的方式确保线程安全。
单例模式依据具体实现不同可以分为饿汉式和懒汉式两种,其中饿汉式实现会在单例类被加载时就创建出单例对象,而懒汉式会在第一次访问单例对象时才会创建单例对象。
饿汉式实现不存在线程安全问题,而懒汉式实现则需要通过加锁的方式确保线程安全。
评论
点赞
Day 29
设计模式是在特定环境下为了解决某一通用软件问题提供的一套定制的解决方案,它描述了对象和类之间的相互作用。
根据设计模式的目的,可以分为创建型模式、结构型模式和行为型模式三类。
设计模式是在特定环境下为了解决某一通用软件问题提供的一套定制的解决方案,它描述了对象和类之间的相互作用。
根据设计模式的目的,可以分为创建型模式、结构型模式和行为型模式三类。
评论
点赞
Day 28
MapReduce模型的基本构思是分而治之。具体来说,定义了Map和Reduce两个方法,Map将一组数据(一个Key-Value对)转换为一个或一组新的Key-Value对,可以将该过程看作是计算过程;而Reduce是将Key相同的若干个Key-Value对处理为一个或一组新的Key-Value对,可以看作是将Map处理后的数据进行汇总和输出。
MapReduce模型的基本构思是分而治之。具体来说,定义了Map和Reduce两个方法,Map将一组数据(一个Key-Value对)转换为一个或一组新的Key-Value对,可以将该过程看作是计算过程;而Reduce是将Key相同的若干个Key-Value对处理为一个或一组新的Key-Value对,可以看作是将Map处理后的数据进行汇总和输出。
展开
评论
点赞
Day 27
CDN是内容分发网络(Content Delivery Network)的缩写。通过CDN可以将频繁访问的资源部署在多个区域,从而使用户能够直接访问距离较近的CDN服务器来访问服务,能够有效提升响应速度和主服务器压力。
CDN是内容分发网络(Content Delivery Network)的缩写。通过CDN可以将频繁访问的资源部署在多个区域,从而使用户能够直接访问距离较近的CDN服务器来访问服务,能够有效提升响应速度和主服务器压力。
评论
点赞
Day 26
Floyd判圈法是一种检测环路的算法,它的做法是定义两个指针,随后两个指针从同一起点开始按照不同的推进速度同时向同一方向移动(例如慢指针每移动一步,就让快指针移动两步)。
如果快指针顺利走到了结尾,则说明不存在环路,否则存在环路,可以证明快慢指针在存在环路的情况下必然会相遇,由此即可在不额外开辟空间的情况下判断回路。
Floyd判圈法是一种检测环路的算法,它的做法是定义两个指针,随后两个指针从同一起点开始按照不同的推进速度同时向同一方向移动(例如慢指针每移动一步,就让快指针移动两步)。
如果快指针顺利走到了结尾,则说明不存在环路,否则存在环路,可以证明快慢指针在存在环路的情况下必然会相遇,由此即可在不额外开辟空间的情况下判断回路。
展开
评论
点赞
Day 25
Rule of Three(大三律)指出,只有经过3个以上不同类型(或领域)的系统的检验,一个解决方案才能从候选模式升格为模式。设计模式是一套被反复使用、被多数人知晓、经过分类的代码设计经验的总结。
Rule of Three(大三律)指出,只有经过3个以上不同类型(或领域)的系统的检验,一个解决方案才能从候选模式升格为模式。设计模式是一套被反复使用、被多数人知晓、经过分类的代码设计经验的总结。
评论
点赞
Day 24
HTTP3相较于HTTP2,引入了QUIC协议,QUIC是在UDP协议上实现的一个协议,它将TCP握手的过程和TLS握手的过程合在一起,从而降低了连接建立的时间,有效提高了连接速度。
HTTP3相较于HTTP2,引入了QUIC协议,QUIC是在UDP协议上实现的一个协议,它将TCP握手的过程和TLS握手的过程合在一起,从而降低了连接建立的时间,有效提高了连接速度。
评论
点赞
Day 23
HTTP2相较于HTTP1,传输内容从文本格式变为了二进制格式,从而提高了传输和解析效率,此外,HTTP2引入了帧和流的概念,实现了TCP连接多路复用的功能,在一定程度上缓解了队头堵塞问题。
HTTP2相较于HTTP1,传输内容从文本格式变为了二进制格式,从而提高了传输和解析效率,此外,HTTP2引入了帧和流的概念,实现了TCP连接多路复用的功能,在一定程度上缓解了队头堵塞问题。
评论
点赞
Day 22
Java的HashMap是利用数组+链表+红黑树来实现的。具体来说,向HashMap中插入元素时,HashMap首先会使用要插入的key的hashcode()来计算出元素在数组中的位置,随后将元素插入到对应位置的链表或者红黑树中。
之所以要引入红黑树,是为了在同一位置的元素较多时仍能保证较好的插入查找复杂度。在某一位置的元素数量较少时,会使用链表存储,在较多时则使用红黑树。
Java的HashMap是利用数组+链表+红黑树来实现的。具体来说,向HashMap中插入元素时,HashMap首先会使用要插入的key的hashcode()来计算出元素在数组中的位置,随后将元素插入到对应位置的链表或者红黑树中。
之所以要引入红黑树,是为了在同一位置的元素较多时仍能保证较好的插入查找复杂度。在某一位置的元素数量较少时,会使用链表存储,在较多时则使用红黑树。
展开
评论
点赞
Day 21
Go语言通过首字母大小写来确定函数和变量的作用范围,首字母大写的变量属于public属性,可以在任何地方访问,首字母小写的变量属于private属性,只能在同一文件内访问。
Go语言通过首字母大小写来确定函数和变量的作用范围,首字母大写的变量属于public属性,可以在任何地方访问,首字母小写的变量属于private属性,只能在同一文件内访问。
评论
点赞