获得徽章 10
Day 20
C++11标准引入了decltype关键字,该关键字可以用来推断元素类型,例如如果有一个int型元素a,那么可以用decltype(a) b的方式来定义int型元素b,这与int b是一样的,编译器会自动推断a的类型并将其设置为b的类型。
C++11标准引入了decltype关键字,该关键字可以用来推断元素类型,例如如果有一个int型元素a,那么可以用decltype(a) b的方式来定义int型元素b,这与int b是一样的,编译器会自动推断a的类型并将其设置为b的类型。
评论
点赞
Day 19
HBase是一款针对大数据量的分布式结构化数据存储系统。它的底层存储基于HDFS分布式文件系统,将一个表按照行划分为若干个子表,随后按照列聚合成若干个列族并将其存储在文件中。
HBase是一款针对大数据量的分布式结构化数据存储系统。它的底层存储基于HDFS分布式文件系统,将一个表按照行划分为若干个子表,随后按照列聚合成若干个列族并将其存储在文件中。
评论
点赞
Day 17
相较于平衡二叉树,红黑树的平衡性稍弱(因为不严格要求子树高度相等),但也因此红黑树维持平衡的开销大大降低,从而在较低代价的情况下实现了较平衡的二叉树。
相较于平衡二叉树,红黑树的平衡性稍弱(因为不严格要求子树高度相等),但也因此红黑树维持平衡的开销大大降低,从而在较低代价的情况下实现了较平衡的二叉树。
评论
点赞
Day 16
进程是系统资源分配的最小单位,线程是系统调度的最小单位。
例如文件资源、内存资源都是以进程为单位分配的,它们由进程持有;而指令计数器则由线程保存,系统调度执行以线程为单位。
进程是系统资源分配的最小单位,线程是系统调度的最小单位。
例如文件资源、内存资源都是以进程为单位分配的,它们由进程持有;而指令计数器则由线程保存,系统调度执行以线程为单位。
评论
点赞
Day 15
虚拟内存机制是通过将内存地址映射到文件实现的,借助于虚拟内存管理,程序可以申请到多于机器实际内存大小的内存空间,减轻了开发者对于内存空间大小的考虑。
虚拟内存机制是通过将内存地址映射到文件实现的,借助于虚拟内存管理,程序可以申请到多于机器实际内存大小的内存空间,减轻了开发者对于内存空间大小的考虑。
评论
点赞
Day 14
go语言是一种编译型语言,与Java和C++类似,都需要通过编译的过程把代码编译为二进制文件再运行。而Python等解释型语言则是直接将代码文本一行一行进行解释执行,不必有编译的过程。
相较于Java,go语言编译器会直接将代码编译为机器码,而不是JVM字节码,因而不像依赖于Java程序需要依赖JVM运行环境。
go语言是一种编译型语言,与Java和C++类似,都需要通过编译的过程把代码编译为二进制文件再运行。而Python等解释型语言则是直接将代码文本一行一行进行解释执行,不必有编译的过程。
相较于Java,go语言编译器会直接将代码编译为机器码,而不是JVM字节码,因而不像依赖于Java程序需要依赖JVM运行环境。
展开
评论
点赞
Day 13
C++中的空类(即没有任何成员属性的类)对象大小为1个字节,这是为了方便区分同一个类的不同对象在内存中的位置。
如果类中只有一个int类型的成员属性,则对象大小为4个字节,如果有一个int类型的属性和一个char类型的属性,则对象大小为8字节,这是因为C++会按照类成员属性中最严格的对齐要求来进行内存对齐,这里最严格的是int类型的4字节对齐,所以对象大小是8个字节。
C++中的空类(即没有任何成员属性的类)对象大小为1个字节,这是为了方便区分同一个类的不同对象在内存中的位置。
如果类中只有一个int类型的成员属性,则对象大小为4个字节,如果有一个int类型的属性和一个char类型的属性,则对象大小为8字节,这是因为C++会按照类成员属性中最严格的对齐要求来进行内存对齐,这里最严格的是int类型的4字节对齐,所以对象大小是8个字节。
展开
评论
点赞
Day 12
面向对象的三大特征是封装、继承和多态。
对象将数据和逻辑都封装起来,开发者不再需要自行管理数据,而是交给已经封装好的对象来处理;
继承使代码复用性得到了提升,也可以在不修改原有代码的基础上添加新功能,即实现对修改封闭,对扩展开放;
多态使一个变量调用同一个方法可以有多个逻辑,基于继承和多态,可以方便地实现里式替换法则。
面向对象的三大特征是封装、继承和多态。
对象将数据和逻辑都封装起来,开发者不再需要自行管理数据,而是交给已经封装好的对象来处理;
继承使代码复用性得到了提升,也可以在不修改原有代码的基础上添加新功能,即实现对修改封闭,对扩展开放;
多态使一个变量调用同一个方法可以有多个逻辑,基于继承和多态,可以方便地实现里式替换法则。
展开
评论
点赞
Day 11
Java中的泛型机制是借助于类型擦除实现的,对于Java的泛型方法、泛型类,它们的类型只会保留到编译期,在编译器完成类型检查后,类型信息将会被擦除。
例如<T extends A>在编译之后会变成A类型,而<T>会变成Object类型,因此,JVM虚拟机是不会知晓某个泛型容器内的元素的确切类型信息的。
Java中的泛型机制是借助于类型擦除实现的,对于Java的泛型方法、泛型类,它们的类型只会保留到编译期,在编译器完成类型检查后,类型信息将会被擦除。
例如<T extends A>在编译之后会变成A类型,而<T>会变成Object类型,因此,JVM虚拟机是不会知晓某个泛型容器内的元素的确切类型信息的。
展开
评论
点赞
Day 10
C++中的ordered_map底层是红黑树实现的,会使插入的元素有序,所以插入ordered_map的元素需要重载了比较操作符。因为ordered_map是基于红黑树实现的,所以无法做到O(1)的插入和查找复杂度。
C++中的ordered_map底层是红黑树实现的,会使插入的元素有序,所以插入ordered_map的元素需要重载了比较操作符。因为ordered_map是基于红黑树实现的,所以无法做到O(1)的插入和查找复杂度。
评论
点赞
Day 8
比较排序算法时间复杂度的理论下界是O(nlogn),从理论上可以证明不可能有时间复杂度小于O(nlogn)的比较排序算法。
但是,这是比较排序的理论下界,桶排序等算法不属于比较排序,因此不被该下界限制。
比较排序算法时间复杂度的理论下界是O(nlogn),从理论上可以证明不可能有时间复杂度小于O(nlogn)的比较排序算法。
但是,这是比较排序的理论下界,桶排序等算法不属于比较排序,因此不被该下界限制。
评论
点赞
Day 7
REST是Representational State Transfer的缩写,意味表现层状态转换,更具体的说,REST是指资源表现层状态转化。
一个符合REST的约束条件和原则的架构就被称为RESTful的架构,它要求资源访问接口应该使用标准的HTTP的方法(例如GET、PUT等),并遵循相应的语义。
REST是Representational State Transfer的缩写,意味表现层状态转换,更具体的说,REST是指资源表现层状态转化。
一个符合REST的约束条件和原则的架构就被称为RESTful的架构,它要求资源访问接口应该使用标准的HTTP的方法(例如GET、PUT等),并遵循相应的语义。
展开
评论
点赞
Day 6
线程的生命周期有新建、就绪、运行、阻塞、销毁五个阶段。
线程被创建后进入新建状态,随后进入就绪状态等待被调度运行。线程在运行时即为运行状态,如果遇到阻塞条件(比如sleep、wait等)则进入阻塞状态等待被唤醒,唤醒后进入就绪状态等待被调度运行或者直接进入运行状态开始运行。最后,线程在运行结束后被销毁。
线程的生命周期有新建、就绪、运行、阻塞、销毁五个阶段。
线程被创建后进入新建状态,随后进入就绪状态等待被调度运行。线程在运行时即为运行状态,如果遇到阻塞条件(比如sleep、wait等)则进入阻塞状态等待被唤醒,唤醒后进入就绪状态等待被调度运行或者直接进入运行状态开始运行。最后,线程在运行结束后被销毁。
展开
评论
点赞
Day 5
八叉树(OctTree)是计算机图形学中常用的一种数据结构,它的每个节点最多有八个子节点。
例如,在进行颜色压缩时,就可以用八叉树来进行颜色量化,因为RGB颜色表示中,每个颜色分量只有8位,所以八叉树最多有九层,除了根节点独占一层外,其他每层结点都表示8位颜色分量中的一位。借助这个数据结构,就可以具体表示出颜色之间的接近程度,从而通过合并一些相似的颜色来达到颜色压缩的目的。
八叉树(OctTree)是计算机图形学中常用的一种数据结构,它的每个节点最多有八个子节点。
例如,在进行颜色压缩时,就可以用八叉树来进行颜色量化,因为RGB颜色表示中,每个颜色分量只有8位,所以八叉树最多有九层,除了根节点独占一层外,其他每层结点都表示8位颜色分量中的一位。借助这个数据结构,就可以具体表示出颜色之间的接近程度,从而通过合并一些相似的颜色来达到颜色压缩的目的。
展开
评论
点赞
Day 4
死锁是指多个进程之间因为资源相互依赖而导致的永久等待问题。
死锁产生有4个必要条件,一是互斥条件,即资源只能互斥使用,一个资源不能同时被多个进程使用;二是不剥夺条件,即进程已获得的资源不能被强行剥夺,只能由进程主动释放;三是请求和保持条件,即进程申请新资源时并不会释放已获得的资源,而是会保持占用;四是循环等待条件,即进程的资源请求相互依赖,形成了循环。
死锁是指多个进程之间因为资源相互依赖而导致的永久等待问题。
死锁产生有4个必要条件,一是互斥条件,即资源只能互斥使用,一个资源不能同时被多个进程使用;二是不剥夺条件,即进程已获得的资源不能被强行剥夺,只能由进程主动释放;三是请求和保持条件,即进程申请新资源时并不会释放已获得的资源,而是会保持占用;四是循环等待条件,即进程的资源请求相互依赖,形成了循环。
展开
评论
点赞
Day 3
常见的面向对象设计原则包括单一职责原则、开放-封闭原则、Liskov替换原则(里式替换原则)、依赖倒置原则、接口隔离原则、合成/聚合复用原则和迪米特法则。
它们是评价一个设计模式的重要指标
常见的面向对象设计原则包括单一职责原则、开放-封闭原则、Liskov替换原则(里式替换原则)、依赖倒置原则、接口隔离原则、合成/聚合复用原则和迪米特法则。
它们是评价一个设计模式的重要指标
评论
点赞
Day 2
在MySQL中,如果要避免小数从十进制到二进制转换导致的精度损失,可以使用DECIMAL类型。
DECIMAL类型会按照十进制位来存储数字,使用定点数表示存储数字,可以使用DEMICAL(M, D)的方式来指定位数,其中M是有效数字位数,D是小数位数。
在MySQL中,如果要避免小数从十进制到二进制转换导致的精度损失,可以使用DECIMAL类型。
DECIMAL类型会按照十进制位来存储数字,使用定点数表示存储数字,可以使用DEMICAL(M, D)的方式来指定位数,其中M是有效数字位数,D是小数位数。
评论
点赞
Day 1打卡
TCP建立连接为什么是三次握手:只有三次握手才能确认通信双方的发送和接收都是正常的。
比如有A和B要建立连接,A首先发SYN给B,B收到报文就确定了A的发送是正常的,自己的接收是正常的,但是A还无法确认任何事情;
B接着发送响应SYN给A,A收到报文就确定了自己和B的发送和接收是正常的;
但是这时B还不知道自己的发送和A的接收是不是正常,所以需要第三次握手,A发送ACK给B,B收到才能确定双方通信正常。
TCP建立连接为什么是三次握手:只有三次握手才能确认通信双方的发送和接收都是正常的。
比如有A和B要建立连接,A首先发SYN给B,B收到报文就确定了A的发送是正常的,自己的接收是正常的,但是A还无法确认任何事情;
B接着发送响应SYN给A,A收到报文就确定了自己和B的发送和接收是正常的;
但是这时B还不知道自己的发送和A的接收是不是正常,所以需要第三次握手,A发送ACK给B,B收到才能确定双方通信正常。
展开
评论
点赞