
面试八股
文章平均质量分 61
收录一些面试的八股文,答案不一定完全正确与全面。
Lzww0608
知天之所为,知人之所为者,至矣!
展开
-
Golang反射:运行时类型检查与操作
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。语言中的一个高级特性,它允许程序在运行时查询和使用类型信息。原创 2024-08-28 22:08:43 · 606 阅读 · 1 评论 -
C++ 移动构造函数为什么设置noexcept?
那为什么要看移动构造是不是 noexcept 呢,假设移动构造的内部实现可能会throw exception,那么 vector 在将旧元素移动到新空间时候,可能会触发 exception,考虑到数据的一致性,这个时候的预期结果应该是 push_back 失败,返回一个 error,然后 vector 原有数据保持不变,对吧?但这个时候已经有一部分数据 move 到新空间了,原有数据已经被修改了,这个时候还怎么保持原有数据不变呢?答案显然是: 移动构造函数设置了。后STL的容器可以显著提高性能。原创 2024-08-27 21:57:44 · 706 阅读 · 0 评论 -
Coredump
Coredump(核心转储)是计算机领域中的一个术语,指的是当程序崩溃或异常终止时,操作系统将程序的内存内容(特别是进程的虚拟内存、寄存器状态等)保存到一个文件中的过程。这种文件通常称为“核心转储文件”或“核心文件”(通常命名为core或类似的名称)。原创 2024-08-10 21:58:11 · 591 阅读 · 0 评论 -
RedisClient和ClusterClient
连接类型连接单个 Redis 实例。连接 Redis 集群。数据分布数据存储在一个 Redis 实例上。数据根据哈希槽分布在多个集群节点上。高可用性依赖于单个实例的高可用性。提供内置的高可用性机制,支持自动故障转移。使用场景适用于小规模、单实例的使用场景。适用于大规模、高并发、需要高可用性的生产环境。原创 2024-08-06 23:23:33 · 604 阅读 · 0 评论 -
rpc的原理
gRPC 是 Google 开发的一种高性能、开源和通用的 RPC 框架,基于 HTTP/2 协议设计,采用 Protocol Buffers(protobuf)作为接口描述语言(IDL)来定义服务接口和消息结构。gRPC 提供了一种高效、可靠且跨语言的方法来定义服务和实现 RPC。最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。原创 2024-08-06 22:39:39 · 688 阅读 · 0 评论 -
腾讯魔方一面(多年前版)
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。原创 2024-08-01 22:36:58 · 569 阅读 · 0 评论 -
面试题:如何验证代码的可靠性
代码结构上的:1 可扩展性 是否否和开闭原则2 性能,数据结构用的是否合理,算法等是否效率高。3 安全性 是否存在潜在的安全 整数溢出 SQL注入 等4 代码复杂度 圈负杂度 if嵌套深度 函数长度等5 函数变量的命名是否具有自解释性。原创 2024-07-29 22:00:07 · 495 阅读 · 0 评论 -
C++ | QQ后端暑期实习面试
独占所有权表示唯一所有权的智能指针,即一个对象只能有一个实例管理。不可复制不可复制,但可以移动(使用std::move共享所有权表示共享所有权的智能指针,即多个实例可以管理同一个对象。引用计数使用引用计数来跟踪对象的使用情况,当引用计数为零时,自动删除对象。弱引用是与配合使用的智能指针,用于解决循环引用问题。不影响引用计数不会影响对象的引用计数,因此不会阻止对象的删除。原创 2024-07-28 14:44:32 · 1069 阅读 · 0 评论 -
Golang | 腾讯一面
的调度器采用调度模型,其中M代表用户级别的线程(也就是),而N代表的事内核级别的线程。调度器的主要任务就是N个OS线程上调度M个。这种模型允许在少量的OS线程上运行大量的。调度器使用了三种队列来管理的调度器采用了工作窃取(Work Stealing)和手动抢占(Preemption)的策略的是否能比较取决于内变量的类型:所有字段可比较:只有当结构体的所有字段都可以进行比较时,结构体本身才可以进行比较。如果结构体包含不可比较的字段,如切片(slice)、映射(map)或函数(func),则该结构体不能进行比较原创 2024-07-25 21:33:29 · 1559 阅读 · 0 评论 -
抖音客户端一面
主机A 主机C------路由器A------> 路由器B------路由器C--------->主机B 主机D前提条件:有限的链路缓存链路容量是 R当分组的到达路由器C被丢弃的时候,那么上游路由器A-C之间的路由器的传输容量都被浪费掉了。最大限度的利用带宽,传输有效的数据。原创 2024-07-22 22:31:48 · 896 阅读 · 0 评论 -
Golang|Shopee一面
协程,简单概括就是用户态的轻量级的线程。相比于操作系统级的线程,协程占用更少的资源(如内存和CPU时间),启动和销毁的开销也更小。特性协程(Goroutine)线程(Thread)创建开销较低较高切换开销较低(用户态切换)较高(内核态切换)内存占用较小(初始栈大小约2KB)较大(初始栈大小约1MB)调度由Go运行时调度器管理由操作系统内核调度通信方式使用channel,支持安全的协程间通信需要显式使用锁机制,避免竞争条件并发模型M(多个协程映射到少量线程上运行)原创 2024-07-19 00:21:17 · 846 阅读 · 0 评论 -
面试题: C++11用过哪些特性
function函数对象,bind, lambda。基于范围的for循环。原创 2024-07-10 23:48:31 · 238 阅读 · 0 评论 -
C++多态的实现原理
晚绑定,也称为动态绑定(Dynamic Binding),是在运行时确定函数调用的具体实现。晚绑定依赖于虚函数表(vtable),通过指针在运行时查找函数的具体实现。早绑定,也称为静态绑定(Static Binding),是在编译时确定函数调用的具体实现。这意味着在编译阶段,编译器已经知道函数调用对应的具体函数。早绑定通常与非虚函数、函数重载和模板有关。是虚函数,具体调用的函数是在运行时根据对象的实际类型(即。是早绑定,因为编译器在编译时已经知道。类型的指针,并且调用。原创 2024-07-10 23:41:04 · 540 阅读 · 0 评论 -
面试题: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 · 465 阅读 · 0 评论 -
面试题:手动实现一个sizeof
不过,需要注意的是,这种方法是纯粹依靠编译器和平台的内存布局来确定的,对于某些复杂类型如结构体和联合体等,这种方法可能并不适应。但仅仅作为面试的一个考点应该是够, 想要面试的时候不仅能够快速想到这个考点而且能够短时间内手动实现代码,平时要多看、多思考并且多写。即使明白这个考点,如果没有准备的话实现起来也是不是特别容易的。简单概括就是定义一个结构体,将要计算的类型放入结构体中,通过结构体指针的偏移量来确定。操作符,实际上面试官想要的考点应该是通过偏移量来实现检测。原创 2024-05-29 10:37:00 · 481 阅读 · 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 · 400 阅读 · 0 评论 -
Redis过期键删除策略
Redis有三种过期键的删除策略。三种策略中,第一种和第三种是主动删除,第二种是被动删除。原创 2024-05-14 20:28:14 · 457 阅读 · 0 评论 -
Redis基础面试知识点(1)
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。中唯一会被其他四种对象嵌套的类型。原创 2024-05-11 21:47:59 · 330 阅读 · 0 评论 -
面试题:进程与线程的区别
Linux内核中都表示为。原创 2024-05-09 23:33:52 · 300 阅读 · 0 评论 -
面试题:简述Go的垃圾回收机制
Go的机制主要是用来自动释放不再被程序使用的内存,以防止内存泄漏。Go的垃圾回收是的,也就是说,它在主程序运行的同时进行垃圾回收。原创 2024-05-09 23:00:02 · 522 阅读 · 0 评论 -
设计模式学习1
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。设计模式是指在软件开发过程中,经过验证的,用于解决特定环境下,重复出现的,特定问题的解决方案。定义一个操作中的算法的骨架 ,而将一些步骤延迟到子类中。变化点:算法的需要变化。原创 2024-05-09 15:50:52 · 986 阅读 · 0 评论 -
面试题: malloc与new的区别
分配的是物理内存还是虚拟内存?调用后是否立刻得到物理内存?怎么知道该释放多大的空间?时会在分配空间地址前存储“元数据”内存换系统会查看“元数据(metadata)”中分配的内存块的大小释放内存之后,内存还在吗?, , 和 是 C 语言中用于动态内存分配的三个基本函数,它们都定义在 头文件中。尽管这些函数都是用于分配内存,但它们在用法和行为上有一些关键的区别:分配指定数量的字节,分配的内存内容是未初始化的,可能包含任何随机数据。当只需要分配内存而不关心其初始内容时使用。2. (Contiguous A原创 2024-05-08 00:30:33 · 882 阅读 · 0 评论 -
虚函数表与虚函数表指针
虚函数表与虚函数表是用来实现的,每一个类只有一个虚函数表:函数重载(编译期确定):虚函数(运行期确定)原创 2024-04-29 22:04:37 · 407 阅读 · 0 评论 -
设置消息边界的方法有哪几种?
这种结构中⼀般消息头部分是⼀个固定字节长度的结构,并且消息头中会有⼀个特定的字段指定消息体的大小。收消息时,先接收固定字节数的头部,解出这个消息完整长度,按此长度接收消息体。在序列化后的buffer前面增加⼀个字符流的头部,其中有个字段存储消息总长度,根据特殊字符(比如根据\n或者\0)判断头部的完整性。收消息的时候,先判断已收到的数据中是否包含结束符,收到结束符后解析消息头,解出这个消息完整长度,按此长度接收消息体。在一些协议中,消息可以按照结构化格式进行分割,每个字段都有明确的开始和结束。原创 2024-04-28 22:43:57 · 259 阅读 · 0 评论 -
为什么MySQL使用B+树而不是跳表
而磁盘IO的读写速度远小于内存的读写速度,所以减少磁盘IO操作对于MySQL性能的提升至关重要,与之相对,Redis是基于内存的,所以可以使用跳表而不是B+树,它不需要磁盘的IO操作。B+树在处理大量数据插入和删除时,通过分裂和合并节点维护平衡,这使得树的高度保持较低,从而保持查询、插入和删除操作的效率。通过B+树的结构,可以非常高效地进行范围搜索,因为叶节点是通过指针相连的,这使得在有序的数据元素之间顺序访问变得非常快速。B+树的节点通常在磁盘上按页存储,每个节点通常占据一个页的空间。原创 2024-04-27 22:07:19 · 927 阅读 · 1 评论 -
面试题:2G内存找出20亿个整数中出现次数最多的数
我们假设整数是32位,也就是4B大小的int类型。原创 2024-04-26 22:51:05 · 430 阅读 · 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 · 945 阅读 · 1 评论 -
异步日志方案spdlog
spdlog是一款高效的C++日志库,它以其极和而著称。spdlog支持和日志记录,提供多种日志级别,并允许用户将日志输出到控制台、文件或自定义的接收器。原创 2024-04-26 19:55:51 · 2456 阅读 · 0 评论 -
GDB多线程调试:Redis的IO多线程
Redis采用的网络模型是单线程的Reactor网络模型,异步处理,因为性能很高。Reactor先从客户端获取请求,然后dispatch给具体的执行的线程。处理的流程即为read->decode->compute->encode->send。而Redis的IO多线程的处理时,会构造一个消息队列,上述处理的流程中,只有compute为单线程串行执行,其余过程分发到不同的线程中执行。原创 2024-04-25 21:48:30 · 364 阅读 · 0 评论 -
C++左值引用与右值引用
首先,我们需要知道什么是值语义,什么是引用语义。原创 2024-04-24 22:26:28 · 346 阅读 · 0 评论 -
C++实现变参函数的三种方法
零个或多个非类型参数的集合(除浮点数、字符串和类对象,编译期确认结果):零个或多个类型参数的集合。原创 2024-04-22 15:07:57 · 716 阅读 · 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 · 427 阅读 · 0 评论 -
Linux中返回值0值与非零值问题
在学习Linux的过程中,尤其是使用C语言进行编程的过程中,常常会发现Linux系统中喜欢用int类型的0或者非0值作为返回值表示该调用函数操作的成功或者失败。而我们在算法编程或者使用C++编程的过程中,往往喜欢使用bool值表示一个操作的成功或者失败这样减去了隐式的类型转换,尤其是对于一些类型安全的语言,这样的类型转换是很麻烦。那么C语言为什么要这么做呢?原创 2024-04-18 16:59:53 · 500 阅读 · 0 评论 -
Q39.指针为什么要有类型?
面试题:指针为什么要有类型?原创 2024-03-24 22:11:56 · 371 阅读 · 0 评论 -
Q8.空基类优化(EBCO)
如果编译器支持空基类优化,则上述结果相同,均不为0,为1(或4?可能与编译器相关)。因为此时仍然满足空基类优化的条件,空基类后与子类分配在同一地址且类内没有任何其他成员。若将int i的注释去掉,则输出结果为1 8,此时空基类优化失效。C++的设计者们不允许类的大小为0,其原因很多。比如它们构成数组,其大小必然也是0,这会导致指针运算中普遍使用的性质失效。通常而言,示例中的差值,一般用两个地址之间的字节数除以类型大小得到,而类型大小为0就不妙了。虽然不能存在“类型”大小为0的类,但这扇门也没彻底关死。原创 2024-03-21 23:52:51 · 340 阅读 · 0 评论 -
Q59.TCP和UDP可以使用相同的端口吗
将返回一个新的套接字,正是这个套接字,你将必须继续轮询接收事件。你的服务器应该准备好在原始套接字上继续接受连接的同时,同时服务多个客户端,每个客户端都将在他们自己的套接字上触发接收事件。可以对TCP和UDP使用相同的端口号,许多协议已经这样做了,例如DNS就在udp/53和tcp/53上工作。,但对于那些可以使用TCP或UDP的高级协议来说,通常习惯它们默认使用相同的端口号。编写服务器时,请注意,TCP套接字的事件序列比UDP套接字要复杂得多,因为除了正常的。原创 2024-03-19 20:12:33 · 260 阅读 · 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 · 395 阅读 · 1 评论 -
Q49.__attribute__简介
是一种特殊的语法,它允许程序员给函数、变量、类型等提供额外的信息,这些信息通常用于告诉编译器如何优化代码,或者提供有关代码行为的其他特殊指示。值得一提的是__attribute__((always_inline))与我们印象中的inline关键词的作用非常类似,即。这对于头文件中的静态成员变量尤其有用,因为它们可以在头文件中直接初始化,而不需要在某个源文件中分别进行初始化。是编译器特定的,主要用于 GNU 编译器集(GCC)和一些兼容 GCC 的编译器(例如 Clang)。在 C 和 C++ 中,原创 2024-03-08 23:44:53 · 411 阅读 · 1 评论