![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试八股
文章平均质量分 58
收录一些面试的八股文,答案不一定完全正确与全面。
刘铸纬
知天之所为,知人之所为者,至矣!
展开
-
面试题:HTTP的body是二进制还是文本
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。实际上,HTTP的body可以是二进制数据,也可以是文本。HTTP协议本身不对body内容的格式做限制,具体格式取决于。当Content-Type头字段指定为二进制类型时(如。等),HTTP body中的内容通常是文本数据。等),HTTP body中的内容是二进制数据。原创 2024-06-19 11:09:06 · 232 阅读 · 0 评论 -
面试题:手动实现一个sizeof
不过,需要注意的是,这种方法是纯粹依靠编译器和平台的内存布局来确定的,对于某些复杂类型如结构体和联合体等,这种方法可能并不适应。但仅仅作为面试的一个考点应该是够, 想要面试的时候不仅能够快速想到这个考点而且能够短时间内手动实现代码,平时要多看、多思考并且多写。即使明白这个考点,如果没有准备的话实现起来也是不是特别容易的。简单概括就是定义一个结构体,将要计算的类型放入结构体中,通过结构体指针的偏移量来确定。操作符,实际上面试官想要的考点应该是通过偏移量来实现检测。原创 2024-05-29 10:37:00 · 406 阅读 · 0 评论 -
非阻塞IO一定是异步IO吗?
非阻塞 I/O 是指在发起 I/O 操作时,调用立即返回,不会阻塞调用线程或进程。如果操作不能立即完成,系统会返回一个特定的错误(通常是 或 ),告诉调用者操作尚未完成,而不是等待操作完成。异步 I/O异步 I/O 是指发起 I/O 操作后,调用立即返回,并且系统会在操作完成时通知调用者,通常通过回调函数、事件或信号。异步 I/O 不需要调用者轮询检查操作是否完成,系统会主动通知调用者。区别与联系非阻塞 I/O 不一定是异步 I/O:非阻塞 I/O 只是确保调用立即返回,但调用者需要自己检查操作原创 2024-05-18 21:10:31 · 320 阅读 · 0 评论 -
Redis过期键删除策略
Redis有三种过期键的删除策略。三种策略中,第一种和第三种是主动删除,第二种是被动删除。原创 2024-05-14 20:28:14 · 406 阅读 · 0 评论 -
Redis基础面试知识点(1)
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。中唯一会被其他四种对象嵌套的类型。原创 2024-05-11 21:47:59 · 295 阅读 · 0 评论 -
面试题:进程与线程的区别
Linux内核中都表示为。原创 2024-05-09 23:33:52 · 232 阅读 · 0 评论 -
面试题:简述Go的垃圾回收机制
Go的机制主要是用来自动释放不再被程序使用的内存,以防止内存泄漏。Go的垃圾回收是的,也就是说,它在主程序运行的同时进行垃圾回收。原创 2024-05-09 23:00:02 · 459 阅读 · 0 评论 -
设计模式学习1
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。设计模式是指在软件开发过程中,经过验证的,用于解决特定环境下,重复出现的,特定问题的解决方案。定义一个操作中的算法的骨架 ,而将一些步骤延迟到子类中。变化点:算法的需要变化。原创 2024-05-09 15:50:52 · 944 阅读 · 0 评论 -
面试题: malloc与new的区别
分配的是物理内存还是虚拟内存?调用后是否立刻得到物理内存?怎么知道该释放多大的空间?时会在分配空间地址前存储“元数据”内存换系统会查看“元数据(metadata)”中分配的内存块的大小释放内存之后,内存还在吗?, , 和 是 C 语言中用于动态内存分配的三个基本函数,它们都定义在 头文件中。尽管这些函数都是用于分配内存,但它们在用法和行为上有一些关键的区别:分配指定数量的字节,分配的内存内容是未初始化的,可能包含任何随机数据。当只需要分配内存而不关心其初始内容时使用。2. (Contiguous A原创 2024-05-08 00:30:33 · 787 阅读 · 0 评论 -
虚函数表与虚函数表指针
虚函数表与虚函数表是用来实现的,每一个类只有一个虚函数表:函数重载(编译期确定):虚函数(运行期确定)原创 2024-04-29 22:04:37 · 308 阅读 · 0 评论 -
设置消息边界的方法有哪几种?
这种结构中⼀般消息头部分是⼀个固定字节长度的结构,并且消息头中会有⼀个特定的字段指定消息体的大小。收消息时,先接收固定字节数的头部,解出这个消息完整长度,按此长度接收消息体。在序列化后的buffer前面增加⼀个字符流的头部,其中有个字段存储消息总长度,根据特殊字符(比如根据\n或者\0)判断头部的完整性。收消息的时候,先判断已收到的数据中是否包含结束符,收到结束符后解析消息头,解出这个消息完整长度,按此长度接收消息体。在一些协议中,消息可以按照结构化格式进行分割,每个字段都有明确的开始和结束。原创 2024-04-28 22:43:57 · 174 阅读 · 0 评论 -
为什么MySQL使用B+树而不是跳表
而磁盘IO的读写速度远小于内存的读写速度,所以减少磁盘IO操作对于MySQL性能的提升至关重要,与之相对,Redis是基于内存的,所以可以使用跳表而不是B+树,它不需要磁盘的IO操作。B+树在处理大量数据插入和删除时,通过分裂和合并节点维护平衡,这使得树的高度保持较低,从而保持查询、插入和删除操作的效率。通过B+树的结构,可以非常高效地进行范围搜索,因为叶节点是通过指针相连的,这使得在有序的数据元素之间顺序访问变得非常快速。B+树的节点通常在磁盘上按页存储,每个节点通常占据一个页的空间。原创 2024-04-27 22:07:19 · 777 阅读 · 1 评论 -
面试题:2G内存找出20亿个整数中出现次数最多的数
我们假设整数是32位,也就是4B大小的int类型。原创 2024-04-26 22:51:05 · 310 阅读 · 0 评论 -
面试题:判断一个完全平方数
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。一个数如果是完全平方数,那么它除以 4 的余数只能是 0 或 1。换句话说,完全平方数在模 4 意义下等于 0 或 1。这些方法不能让我们判断是否是完全平方数,但是可以辅助我们判断或者找到不是完全平方数的数字。一个数如果是完全平方数,它除以 16 的余数必须是 0, 1, 4, 或 9。原创 2024-04-26 20:29:40 · 669 阅读 · 1 评论 -
异步日志方案spdlog
spdlog是一款高效的C++日志库,它以其极和而著称。spdlog支持和日志记录,提供多种日志级别,并允许用户将日志输出到控制台、文件或自定义的接收器。原创 2024-04-26 19:55:51 · 1283 阅读 · 0 评论 -
GDB多线程调试:Redis的IO多线程
Redis采用的网络模型是单线程的Reactor网络模型,异步处理,因为性能很高。Reactor先从客户端获取请求,然后dispatch给具体的执行的线程。处理的流程即为read->decode->compute->encode->send。而Redis的IO多线程的处理时,会构造一个消息队列,上述处理的流程中,只有compute为单线程串行执行,其余过程分发到不同的线程中执行。原创 2024-04-25 21:48:30 · 302 阅读 · 0 评论 -
C++左值引用与右值引用
首先,我们需要知道什么是值语义,什么是引用语义。原创 2024-04-24 22:26:28 · 300 阅读 · 0 评论 -
C++实现变参函数的三种方法
零个或多个非类型参数的集合(除浮点数、字符串和类对象,编译期确认结果):零个或多个类型参数的集合。原创 2024-04-22 15:07:57 · 504 阅读 · 0 评论 -
C++同一线程调用两次join()会发生什么?
因此,正确的做法是确保对每个线程对象只调用一次join()。一旦一个线程结束并且已经调用过join(),该线程对象就变为了“非joinable”状态,此后再调用join()是不合法的,并且会导致运行时错误。t.join();// 这才是正确的调用方法} else {最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB link。原创 2024-04-18 19:25:00 · 213 阅读 · 0 评论 -
Linux中返回值0值与非零值问题
在学习Linux的过程中,尤其是使用C语言进行编程的过程中,常常会发现Linux系统中喜欢用int类型的0或者非0值作为返回值表示该调用函数操作的成功或者失败。而我们在算法编程或者使用C++编程的过程中,往往喜欢使用bool值表示一个操作的成功或者失败这样减去了隐式的类型转换,尤其是对于一些类型安全的语言,这样的类型转换是很麻烦。那么C语言为什么要这么做呢?原创 2024-04-18 16:59:53 · 392 阅读 · 0 评论 -
Q39.指针为什么要有类型?
面试题:指针为什么要有类型?原创 2024-03-24 22:11:56 · 242 阅读 · 0 评论 -
Q8.空基类优化(EBCO)
如果编译器支持空基类优化,则上述结果相同,均不为0,为1(或4?可能与编译器相关)。因为此时仍然满足空基类优化的条件,空基类后与子类分配在同一地址且类内没有任何其他成员。若将int i的注释去掉,则输出结果为1 8,此时空基类优化失效。C++的设计者们不允许类的大小为0,其原因很多。比如它们构成数组,其大小必然也是0,这会导致指针运算中普遍使用的性质失效。通常而言,示例中的差值,一般用两个地址之间的字节数除以类型大小得到,而类型大小为0就不妙了。虽然不能存在“类型”大小为0的类,但这扇门也没彻底关死。原创 2024-03-21 23:52:51 · 285 阅读 · 0 评论 -
Q59.TCP和UDP可以使用相同的端口吗
将返回一个新的套接字,正是这个套接字,你将必须继续轮询接收事件。你的服务器应该准备好在原始套接字上继续接受连接的同时,同时服务多个客户端,每个客户端都将在他们自己的套接字上触发接收事件。可以对TCP和UDP使用相同的端口号,许多协议已经这样做了,例如DNS就在udp/53和tcp/53上工作。,但对于那些可以使用TCP或UDP的高级协议来说,通常习惯它们默认使用相同的端口号。编写服务器时,请注意,TCP套接字的事件序列比UDP套接字要复杂得多,因为除了正常的。原创 2024-03-19 20:12:33 · 216 阅读 · 0 评论 -
Q12.Double-Checked Locking
即使一个线程知道另一个线程完成对指针进行写入,它可能没有看到新创建的 some_resource实例,然后调用do_something()④后,得到不正确的结果。然而,在编译器实际执行过程中,可能会进行指令重排优化,将执行的顺序变为132,即步骤3在步骤2之前。此时步骤3执行之后,步骤2执行之前,线程2进行操作1,得到指针为非空,然后执行操作4,对指针进行操作,此时指针指向未初始化的内存,野指针的产生会导致未定义行为(Undefined Behavior)。构造一个对象,将对象放入分配的内存。原创 2024-03-08 22:42:40 · 359 阅读 · 1 评论 -
Q49.__attribute__简介
是一种特殊的语法,它允许程序员给函数、变量、类型等提供额外的信息,这些信息通常用于告诉编译器如何优化代码,或者提供有关代码行为的其他特殊指示。值得一提的是__attribute__((always_inline))与我们印象中的inline关键词的作用非常类似,即。这对于头文件中的静态成员变量尤其有用,因为它们可以在头文件中直接初始化,而不需要在某个源文件中分别进行初始化。是编译器特定的,主要用于 GNU 编译器集(GCC)和一些兼容 GCC 的编译器(例如 Clang)。在 C 和 C++ 中,原创 2024-03-08 23:44:53 · 354 阅读 · 1 评论