- 博客(91)
- 收藏
- 关注
原创 Ubuntu无法连接Linux
有时候 GitHub 本身可能会出现服务故障。你可以访问 GitHub 的 状态页面 查看是否有正在进行的服务问题。如果你处于公司网络或使用了代理服务器,可能会被防火墙或代理阻止与 GitHub 的连接。注意:禁用防火墙时,请确保理解潜在的安全风险。如果无法 ping 通 GitHub,检查一下你的网络连接。检查 GitHub 状态。检查防火墙 / 代理设置。
2024-12-03 16:26:53
233
原创 Golang反射:运行时类型检查与操作
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。语言中的一个高级特性,它允许程序在运行时查询和使用类型信息。
2024-08-28 22:08:43
577
1
原创 C++ 移动构造函数为什么设置noexcept?
那为什么要看移动构造是不是 noexcept 呢,假设移动构造的内部实现可能会throw exception,那么 vector 在将旧元素移动到新空间时候,可能会触发 exception,考虑到数据的一致性,这个时候的预期结果应该是 push_back 失败,返回一个 error,然后 vector 原有数据保持不变,对吧?但这个时候已经有一部分数据 move 到新空间了,原有数据已经被修改了,这个时候还怎么保持原有数据不变呢?答案显然是: 移动构造函数设置了。后STL的容器可以显著提高性能。
2024-08-27 21:57:44
637
原创 Coredump
Coredump(核心转储)是计算机领域中的一个术语,指的是当程序崩溃或异常终止时,操作系统将程序的内存内容(特别是进程的虚拟内存、寄存器状态等)保存到一个文件中的过程。这种文件通常称为“核心转储文件”或“核心文件”(通常命名为core或类似的名称)。
2024-08-10 21:58:11
516
原创 RedisClient和ClusterClient
连接类型连接单个 Redis 实例。连接 Redis 集群。数据分布数据存储在一个 Redis 实例上。数据根据哈希槽分布在多个集群节点上。高可用性依赖于单个实例的高可用性。提供内置的高可用性机制,支持自动故障转移。使用场景适用于小规模、单实例的使用场景。适用于大规模、高并发、需要高可用性的生产环境。
2024-08-06 23:23:33
567
原创 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
675
原创 一则悬空指针案例
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。这是一个非常典型的内存安全问题,虽然编译可以通过,但是运行的时候会出现错误。这段代码虽然可以编译通过,但是其实非常糟糕,变量。:如果合适的话,可以使用静态变量,但这有可能会导致线程安全问题。所申请的栈上内存都会被系统回收,从而造成了。,确保返回的指针在函数结束后仍然有效。存在栈中,在离开作用域后,
2024-08-04 22:29:11
402
原创 腾讯魔方一面(多年前版)
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。
2024-08-01 22:36:58
564
原创 面试题:如何验证代码的可靠性
代码结构上的:1 可扩展性 是否否和开闭原则2 性能,数据结构用的是否合理,算法等是否效率高。3 安全性 是否存在潜在的安全 整数溢出 SQL注入 等4 代码复杂度 圈负杂度 if嵌套深度 函数长度等5 函数变量的命名是否具有自解释性。
2024-07-29 22:00:07
459
原创 C++ | QQ后端暑期实习面试
独占所有权表示唯一所有权的智能指针,即一个对象只能有一个实例管理。不可复制不可复制,但可以移动(使用std::move共享所有权表示共享所有权的智能指针,即多个实例可以管理同一个对象。引用计数使用引用计数来跟踪对象的使用情况,当引用计数为零时,自动删除对象。弱引用是与配合使用的智能指针,用于解决循环引用问题。不影响引用计数不会影响对象的引用计数,因此不会阻止对象的删除。
2024-07-28 14:44:32
1056
原创 Golang | 腾讯一面
的调度器采用调度模型,其中M代表用户级别的线程(也就是),而N代表的事内核级别的线程。调度器的主要任务就是N个OS线程上调度M个。这种模型允许在少量的OS线程上运行大量的。调度器使用了三种队列来管理的调度器采用了工作窃取(Work Stealing)和手动抢占(Preemption)的策略的是否能比较取决于内变量的类型:所有字段可比较:只有当结构体的所有字段都可以进行比较时,结构体本身才可以进行比较。如果结构体包含不可比较的字段,如切片(slice)、映射(map)或函数(func),则该结构体不能进行比较
2024-07-25 21:33:29
1531
原创 Kafka如何保证消息不丢失
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。Kafka为了保证消息不丢失,采用了多种技术和配置来增强消息的持久化和可靠性。
2024-07-23 00:01:28
421
原创 抖音客户端一面
主机A 主机C------路由器A------> 路由器B------路由器C--------->主机B 主机D前提条件:有限的链路缓存链路容量是 R当分组的到达路由器C被丢弃的时候,那么上游路由器A-C之间的路由器的传输容量都被浪费掉了。最大限度的利用带宽,传输有效的数据。
2024-07-22 22:31:48
820
原创 Golang|Shopee一面
协程,简单概括就是用户态的轻量级的线程。相比于操作系统级的线程,协程占用更少的资源(如内存和CPU时间),启动和销毁的开销也更小。特性协程(Goroutine)线程(Thread)创建开销较低较高切换开销较低(用户态切换)较高(内核态切换)内存占用较小(初始栈大小约2KB)较大(初始栈大小约1MB)调度由Go运行时调度器管理由操作系统内核调度通信方式使用channel,支持安全的协程间通信需要显式使用锁机制,避免竞争条件并发模型M(多个协程映射到少量线程上运行)
2024-07-19 00:21:17
826
原创 Golang中init()函数初始化顺序
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。
2024-07-15 21:15:26
385
原创 C++多态的实现原理
晚绑定,也称为动态绑定(Dynamic Binding),是在运行时确定函数调用的具体实现。晚绑定依赖于虚函数表(vtable),通过指针在运行时查找函数的具体实现。早绑定,也称为静态绑定(Static Binding),是在编译时确定函数调用的具体实现。这意味着在编译阶段,编译器已经知道函数调用对应的具体函数。早绑定通常与非虚函数、函数重载和模板有关。是虚函数,具体调用的函数是在运行时根据对象的实际类型(即。是早绑定,因为编译器在编译时已经知道。类型的指针,并且调用。
2024-07-10 23:41:04
534
原创 Golang中swtich中如何强制执行下一个代码块
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。switch 语句中的 case 代码块会默认带上 break,但可以使用 fallthrough 来强制执行下一个 case 代码块。语句,程序不会继续执行下一个。
2024-07-03 21:41:10
268
原创 Golang中defer和return顺序
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。所以,如果你在一个函数中写入了。,那么它们的执行顺序是:先执行。语句的赋值部分,然后执行。
2024-07-02 21:51:01
428
原创 Golang的Work Stealing机制
Go的运行时系统使用了一种名为(工作窃取)的调度策略来分配Goroutine到可用线程(称为M,即Machine)上执行。这样可以最大化CPU使用率,减少任务调度的开销。在这种机制下,任务队列和调度器通过动态平衡负载来提高并发性能和吞吐量。Go的调度器使用了P(Processor)与M和Goroutine进行交互。每个P都维护了一个本地的Goroutine队列,新创建的Goroutine首先会被放入创建它的P的本地队列中。
2024-06-27 22:38:43
696
原创 Golang逃逸分析
在Go语言中,逃逸分析(Escape Analysis)是一种编译器优化技术,用于确定变量是应该分配在堆上还是在栈上。这对程序的性能有显著的影响,因为栈上资源的分配速度和释放速度要比堆上快得多,同时堆上的内存管理也更加简单。
2024-06-24 18:06:14
375
原创 Redis单线程为什么快
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。是单线程的,指所有的命令处理流程在一个线程中处理。首先,需要明确,Redis只有。
2024-06-23 22:40:32
493
原创 Golang中的CAS操作
CAS操作会检查内存位置的当前值与预期的旧值是否相等。CAS是一种无锁的技术,当多个线程尝试使用共享数据时,CAS能够检测到其他线程是否已经改变了这个数据,这是一种解决并发问题的策略。最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。实际操作中,CAS操作的正确性依赖于预期值和实际值的结果对比,因为在设计算法的过程中需要仔细考虑可能的竞争条件。
2024-06-23 20:29:41
470
原创 ProtoBuf中service使用
在 Protocol Buffers 的proto3语法中,service用于定义一个 gRPC 服务。一个service包含了一组可以远程调用的 RPC 方法,每个方法有请求类型和响应类型。
2024-06-21 21:47:35
750
原创 阐述一下Golang中defer的原理
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。关键字,Go实际上会把它后面的函数(通常是一个匿名函数或者清理函数)压入一个栈中。当外部函数准备返回的时候,Go会按照先进先出的(LIFO)的顺序调用并执行这个栈中的所有函数。关键字用于在函数返回前执行一段代码或调用一个清理函数。语句处就计算好,而不是在外部函数返回时才计算。当我们在一个函数内部调用。
2024-06-21 18:07:42
318
原创 Goroutine和协程的区别
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。
2024-06-20 18:49:09
417
原创 ProtoBuf序列化协议简介
Varints 编码的实质在于去掉数字开头的 0, 因此可缩短数字所占的存储字节数, 在上面的例子中, 只举例说明了正数的 Varints 编码, 但如果数字为负数, 则采用 Varints 编码会恒定占用 10 个字节, 原因在于负数的符号位为 1, 对于负数其从符号位开始的高位均为 1, 在 Protobuf 的具体实现中, 会将此视为⼀个很大的无符号数。Varints 编码, 在这种方式中, 使用 7 bit (即2的7次方为128)来存储数字, 在 Protobuf 中,
2024-06-19 17:20:30
1550
原创 Redis协议规范简介
Redis客户端使用为名为RESP(Redis序列化协议)的协议与Redis服务器进行通信。虽然该协议是专门为Redis设计的,但它也可以用于其他的CS软件项目的通信协议。RESP可以序列化不同的数据类型,如整型,字符串,数组。还有⼀种特定的错误类型。请求将要执行的命令作为字符串数组从Redis客户端发送到Redis服务器。Redis使用特定数据类型的命令进行回复。RESP是的,不需要处理从⼀个进程传输到另⼀个进程的批量数据,因为它使用来传输批量数据。
2024-06-19 15:08:04
2625
原创 面试题: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
432
原创 MySQL缓存策略
读:先读缓存,缓存存在则直接返回;缓存不存在,去访问MySQL,再写入到Redis写(增删改):以安全为主:先删除Redis中的数据,然后再写MySQL,最后将MySQL中的数据同步到Redis中。问题:缓存策略是为了提升效率,而不是为了安全降低效率,违背了初心。读 >> 写以效率为主:先写缓存并设置过期时间,再写MySQL,等待MySQL同步到Redis中。MySQL网络传输时间 +MySQL处理时间 +MySQL同步到Redis的时间。200ms。
2024-05-29 15:53:06
950
原创 面试题:手动实现一个sizeof
不过,需要注意的是,这种方法是纯粹依靠编译器和平台的内存布局来确定的,对于某些复杂类型如结构体和联合体等,这种方法可能并不适应。但仅仅作为面试的一个考点应该是够, 想要面试的时候不仅能够快速想到这个考点而且能够短时间内手动实现代码,平时要多看、多思考并且多写。即使明白这个考点,如果没有准备的话实现起来也是不是特别容易的。简单概括就是定义一个结构体,将要计算的类型放入结构体中,通过结构体指针的偏移量来确定。操作符,实际上面试官想要的考点应该是通过偏移量来实现检测。
2024-05-29 10:37:00
465
原创 Golang对nil的Slice和空Slice处理是一致的吗
在Go中,nil的slice和空的slice并不完全相同,尽管它们的许多行为在很多情况下是相似的。
2024-05-20 21:49:01
459
原创 Golang安全读写共享变量的方式
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。如果程序中的读操作远多于写操作,那么使用读写锁可能会比互斥锁更有效率。读写锁允许多个协程同时读取变量,但是只允许同一时刻只有一个协程进行写入操作。,然后通过发送和接收消息的方式来读写共享变量。对于一些简单的数值或者布尔类型,我们可以使用原子操作来读写共享变量。来确保初始化的并发安全性。本身就提供了安全性。
2024-05-19 22:32:26
459
原创 非阻塞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
366
原创 Golang中HTTP包的内存泄漏
如果你的HTTP HANDLER需要很长时间才能完成,例如因为需要进行复杂的计算或者等待其他资源,这可能会导致大量的协程被阻塞,消耗大量的内存。因此,这种情况下可以考虑使用一些异步处理的方式,比如将任务放入队列,或者使用。最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。包适用于处理HTTP请求和相应的库,但如果使用不正确,可能会导致内存泄漏。
2024-05-15 17:16:52
564
原创 goroutine调度策略
最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB。语言可以有效地利用硬件资源,处理大量的并发任务,同时也为复杂的并发编程提供了简介的语言级别的支持。的调度器采用了工作窃取(Work Stealing)和手动抢占(Preemption)的策略。调度器的主要任务就是N个OS线程上调度M个。),而N代表的事内核级别的线程。调度器使用了三种队列来管理。
2024-05-14 22:39:02
328
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人