费曼学习法
费曼学习法有四个关键词:concept「概念」、teach「教授」、review「回顾」、simplify「简化」。如果你不能用简洁的语言把一个概念说明白,说明你没有真正的掌握它。
费曼学习法有四个关键词:concept「概念」、teach「教授」、review「回顾」、simplify「简化」。如果你不能用简洁的语言把一个概念说明白,说明你没有真正的掌握它。
用户往任务队列里面生产任务,线程池从任务队列里面取任务进行消费,让少数线程的线程池来处理大量任务的任务队列,这就是一个生产者和消费者的模型。
深入解析RFC 5389定义的四种NAT类型(完全锥形、地址受限锥形、端口受限锥形、对称形)的行为特征与映射机制,基于STUN协议实现系统化的NAT类型检测算法,为P2P网络穿透提供精确的拓扑识别基础
1 | #include <stdio.h> |



1 | std::unique_ptr<int> ptr(new int(10)); |
shared_ptr 是一种共享所有权的指针,多个指针可以同时管理一个对象,当最后一个 shared_ptr 被销毁时,它所管理的对象才会被随之销毁。它的定义和用法如下:
1 | std::shared_ptr<int> ptr1(new int(10)); |
weak_ptr 是 shared_ptr 的一种扩展,它可以不增加所管理对象的引用计数而与 shared_ptr 交互,但它不能直接访问所管理的对象,需要通过 lock() 函数获得一个指向所管理的对象的 shared_ptr。通常用于解决 shared_ptr 循环引用的问题。它的定义和用法如下:
1 | https://dev.mysql.com/doc/dev/mysql-server/latest/ |

按照数据结构来组织、存储和管理数据的仓库。
1 | select(listenfd+1, readfds, NULL, NULL, 0); // 一直阻塞。使用select,fd少,可以跨平台 |
系统ulimit -c大于0,一般设为unlimited,进程接收到异常信号后,默认是生成core文件,如果/proc/sys/kernel/core_pattern为core,则文件生成在进程的getcwd工作目录,如果/proc/sys/kernel/core_uses_pid为1,则core文件以pid结尾。
对于正在运行的进程,如果不想让进程退出,可以用gcore pid生成该进程的core文件。
对于代码中有对异常信号进行处理的情况,则接收到异常信号时,进入自定义的信号处理函数中,不再生成core文件,此时如果还想生成core文件,需要在处理函数末尾做如下处理:
1 | signal(signo, SIG_DFL); // 默认生成core文件 |
详细介绍miniupnp库的编译安装和使用方法,包括libminiupnpc客户端库的核心功能、端口映射配置技巧、NAT穿透实现原理。通过实际代码示例演示如何利用miniupnp实现自动端口转发,解决P2P应用中的内网访问问题,提升网络应用的连通性。
musl静态链接后,通过_Unwind_Backtrace某些架构无法获取到堆栈信息了,如arm32的SIGSEGV,libbacktrace是对其进行封装,所以也是如此。
使用http://musl.cc/下载的静态编译工具+libunwind同样无法获取到堆栈信息。
需要加入libunwind库的方法解决,具体如下。
参考:
https://cloud.tencent.com/developer/article/1173442
https://github.com/boostorg/stacktrace
https://www.boost.org/doc/libs/develop/doc/html/stacktrace.html
https://www.jianshu.com/p/58d32fbd8dfa
https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html
https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/main/libunwind/musl-mips-fix.patch