- 博客(9)
- 收藏
- 关注
原创 【0327Q】
http协议和tcp的区别(1)性质不同:http是一个简单的请求-响应协议。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。(2)连接不同:TCP连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。http通常运行在TCP之上。指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。(3)功能不同:当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连
2024-03-27 16:48:42
93
原创 【Q6-30min】
函数递归调用时,系统要在栈中不断保存函数调用时的现场和产生的变量,如果递归调用太深,就会造成栈溢出,这时递归无法返回。(2)动态申请空间使用之后没有释放。申请的动态空间使用的是堆空间,动态空间使用不会造成堆溢出。C语言没有提供数组下标越界检查,如果在程序中出现数组下标访问超出数组范围,在运行过程中可能会内存访问错误。static函数与普通函数的区别是:static函数在内存中只有一份,普通函数在每个被调用中维持一份复制品.指针保存了一个非法的地址,通过这样的指针访问所指向的地址时会产生内存访问错误。
2023-12-06 21:18:13
45
1
原创 【Q5-20min】
C++中的函数重载(Function Overloading)是指在同一个作用域内,可以定义多个同名的函数,但它们的参数列表必须不同(包括参数的类型、个数、顺序)。函数重载使得在同一个类或命名空间中能够使用相同的函数名字,但根据传递给函数的参数类型或个数的不同,编译器能够选择调用合适的函数。在这个例子中,MyClass 的构造函数是私有的,但通过一个公有的静态成员函数 createInstance,可以在内部调用私有构造函数来创建类的实例。根据调用时提供的参数类型和个数,编译器会自动选择匹配的函数版本。
2023-12-05 21:37:42
68
原创 【Q4-20min】
(2)继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称子类或者派生类,被继承的类称为父类或基类。引用的底层实现通常是通过指针来实现的,而指针是需要占用内存空间的,因此,当我们使用引用时,实际上是在使用底层指针所指向的对象,而不是引用本身。(4)访问方式:栈是一种后进先出(LIFO)的数据结构,只有栈顶的元素可以被访问和操作,而堆是一棵树形结构,其存储的元素可以被通过指针或引用访问。
2023-12-04 21:29:11
65
原创 【Q3——30min】
Synchronized锁的状态存储在锁对象的对象头里,对象头中有一块区域为Mark Word,用于存储对象运行时的数据,比如:hashcode,GC次数,锁状态标识。(4)重量级锁:当锁是重量级锁时,未抢占到锁的线程自旋到一定次数(对CPU消耗大),还未拿到锁时,就会升级为重量级锁,此线程会等待操作系统的调动,就不在主动的去抢占获取锁了。幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
2023-11-22 15:41:00
484
原创 【Q2—30min】
链表的空间是从堆中分配的。set即为一个红黑树(是一种自平衡二叉查找树,红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能.它虽然是复杂的,但它的最坏情况运行时间也是非常良好的可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目),其作用是将排入的数据自动进行去重并且按照树的特性(左孩子的值一定比父节点的小,右孩子的值一定比父节点大) 可起到二分搜索的一个作用,但是这里一般常用的是查找是否右一个值在set里面和去重。
2023-11-20 21:34:13
100
原创 【Q1—45min】
自旋锁是一种基础的同步原语,用于保障对共享数据的互斥访问。加锁确实是可以解决上述的问题, 但是不停的解锁解锁, 效率会变得特别低,时间消耗也会大大增加,不停的加锁解锁,虽然也解决了问题,保护了临界资源,但是程序运行时延性大大增加,而且对于锁控制不好还会死锁,于是C++11 搞出来一个原子操作。1.通过调用epoll_create,在epoll文件系统建立了个file节点,并开辟epoll自己的内核高速cache区,建立红黑树,分配好想要的size的内存对象,建立一个list链表,用于存储准备就绪的事件。
2023-11-20 21:06:37
157
1
原创 【C++基础2】
当⼀个类中包含虚函数时,编译器会为该类⽣成⼀个虚函数表,保存该类中虚函数的地址,同样,派⽣类继承基类,派⽣类中⾃然⼀定有虚函数,所以编译器也会为派⽣类⽣成⾃⼰的虚函数表。后续如果有⼀个基类类型的指针,指向派⽣类,那么当调⽤虚函数时,就会根据所指真正对象的虚函数表指针去寻找虚函数的地址,就可以调⽤派⽣类虚函数表中的虚函数,以此实现多态。基类自然是可以调用自身的重载函数。,纯虚函数没有自己的实现,定义纯虚函数是为了定义一个接口,起到强制规范的作用,规范抽象类的子类必须实现这个函数,否则子类也是一个抽象类。
2023-10-23 17:57:27
77
原创 【C++基础1】
在编译时,对于宏定义函数而言,预编译时会将这些宏定义函数按展开的规则直接展开成语句,并且宏定义函数在代码中书写多少次,便展开多少次,拷贝相应的代码插入,生成相应的指令,而对于普通函数而言其只会生成一份相应的指令,调用处会生成传参指令和调用指令实现对函数的调用。(3) 全局区/静态存储区(.bss 段和 .data 段): 存放全局变量和静态变量,程序运行结束操作系统自动释放,在 C 语言中,未初始化的放在 .bss 段中,初始化的放在 .data 段中,C++ 中不再区分了。不能存在过多的条件判断语句;
2023-10-23 16:35:08
52
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人