摘要: Golang必备技巧:接口型函数 接口型函数,指的是用函数实现接口,这样在调用的时候就会非常简便,我称这种函数,为接口型函数,这种方式使用于只有一个函数的接口。 我们以迭代一个map为例,演示这一技巧,这种方式有点类似于groovy中Map的each方法一样,也是Gradle里each闭包。 本文为 阅读全文
posted @ 2020-11-10 19:40 南哥的天下 阅读(400) 评论(0) 推荐(0) 编辑
摘要: 协议的设计一般采用结构体进行数据打包,在协议设计的结构体中能不能使用指针 ? 能行的话,能给个例子演示一下吗? 就是简单定义一个结构体,里面使用指针,然后将此结构体 用系统调用如send ,sendto之类的发送出去 ? | 结构体中可以但是不建议使用指针,因为这样做会给收发两端带来很多麻烦。对于发 阅读全文
posted @ 2020-01-06 21:26 南哥的天下 阅读(349) 评论(0) 推荐(0) 编辑
摘要: #pragma pack(push) 和#pragma pack(pop) 以及#pragma pack() 我们知道结构体内存对齐字节可以通过#pragma pack(n) 的方式来指定。 但是,有没有想过一个问题,某些时候我想4字节对齐,有些时候我又想1字节或者8字节对齐,那么怎么解决这个问题呢 阅读全文
posted @ 2019-12-23 00:08 南哥的天下 阅读(1559) 评论(0) 推荐(2) 编辑
摘要: 这似乎是一个非常简单的话题, 就跟"是个人就能做网站"一样, 你可能也认为"是个人就能写使用TCP socket的网络程序". 不过, 下面介绍的几个基本的原理的做法, 你可能并没有理解. TCP是一种流式的协议, 简单的说, TCP不检查数据的语义, 更不会检查数据的边界, 而应用层一般使用的是报 阅读全文
posted @ 2019-12-21 22:48 南哥的天下 阅读(1012) 评论(0) 推荐(0) 编辑
摘要: (原创)用C++11的std::async代替线程的创建 c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的: void f(int n); std::thread t(f, n + 1); t.join(); 但是线程毕竟是属于比较低层次的东西,有时候使用有些不便,比如我 阅读全文
posted @ 2019-12-21 10:50 南哥的天下 阅读(3575) 评论(1) 推荐(1) 编辑
摘要: 线程池的陷阱 使用线程池要小心,一不小心就会导致程序挂死。举例说明这种情况。 线程池中有一个同步队列存放数据,多个线程取队列中的数据去处理,数据的类型可能有多个,所以每种数据类型对应一个处理函数,假设某种数据的处理函数会把线程阻死,这时就悲剧了,这个阻死会蔓延到线程池的所有线程,最后线程池中所有的线 阅读全文
posted @ 2019-12-21 10:16 南哥的天下 阅读(420) 评论(0) 推荐(0) 编辑
摘要: 情况:服务器程序在某一时刻,程序端口正常在运行,telnet程序的端口无法打开,但是客户端请求能正常连接;针对出现这一系列的故障,百思不得其解,然后查日志,数据抓包,然后在处理过程中针对SYN_RECV的相关问题,分享给大家,仅供参考;等灵异的问题处理完成,再把结果和处理的过程分享给大家; [sto 阅读全文
posted @ 2019-12-21 10:10 南哥的天下 阅读(10737) 评论(0) 推荐(0) 编辑
摘要: 深入理解C++中的mutable关键字 mutable的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果 阅读全文
posted @ 2019-12-18 23:35 南哥的天下 阅读(528) 评论(0) 推荐(0) 编辑
摘要: 列表初始化(1)_统一初始化 列表初始化(1)_统一初始化 1. 统一初始化(Uniform Initialization) (1)在C++11之前,很多程序员特别是初学者对如何初始化一个变量或对象的问题很容易出现困惑。因为可以用小括号、大括号或赋值操作符等多种方式进行初始化。 (2)基于这个原因, 阅读全文
posted @ 2019-12-18 23:16 南哥的天下 阅读(1292) 评论(0) 推荐(0) 编辑
摘要: C++11:基于std::queue和std::mutex构建一个线程安全的队列 C++中的模板std::queue提供了一个队列容器,但这个容器并不是线程安全的,如果在多线程环境下使用队列,它是不能直接拿来用的。 基于它做一个线程安全的队列也并不复杂。基本的原理就是用std::mutext信号量对 阅读全文
posted @ 2019-12-18 22:27 南哥的天下 阅读(3374) 评论(0) 推荐(0) 编辑