自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lotluck的专栏

怀着不能所以的曾经,恨自己当初的无能为力

  • 博客(241)
  • 资源 (2)
  • 收藏
  • 关注

原创 记录一次采坑--如何处理Linux动态库同名函数?

一、背景介绍需求描述:业务提供一个鉴权的静态库,我只需要从url 和 参数中提取相应的参数传给业务的静态库,将静态库的处理结果直接返回给业务(return < 0, 直接返回403)。但是最近业务反馈,请求部分url直接返回Error:-1015错误,不符合预期。二、分析过程业务刚开始反馈问题,我的第一反应:怎么可能是我的问题,我就仅仅写了一个so(暂时命名1.so),直接调用了你...

2019-07-26 20:40:55 2082

原创 mmap其实并没有那么好

现网问题关于mmap的基本操作自行google去吧, 一抓一大把,99%基本上夸mmap是有多好多快,mmap快是因为建立了页到用户进程的虚拟空间映射,以读取文件为例,避免了页从内核态拷贝到用户态, 少了一次拷贝,而且在内存中操作,从这个层面看,mmap是屌屌的。但是在现网使用, mmap带来很多问题。 图一: 内存吃紧,swap也是关闭, 该进程使用内存状况 图二: 该进程 mm...

2018-08-13 16:18:39 18741 2

原创 FLV格式解析及其解析器的实现

一、FLV基础入门最近在搞flv解析器,网站看到一些比较好的基础入门资料,直接搬过来了 FLV文件格式详解 FLV文件格式解析 FLV封装原理 flv文件元信息(metadata) FLV文件结构解析其实看这么多资料还不如下载一个flv解析器(flvparse)直接看里面的格式,heard、tag应有尽有,一目了然 二、FLV解析器实现在对flv格式清楚的基础上,就...

2018-02-26 10:57:56 2637 2

原创 长期更新琐碎易忘知识点。。。。。

这篇文章主要是记录一些常用的小技巧, 日积月累, 用的时候直接粘贴复制即可。 . 在C语言中对于小函数的宏定义是非常好的,因为好用,也可以屏蔽类型#include #define Swap(a,b) {a = a ^ b; \ b = a ^ b; \a = a ^ b; \} #define averge(a,b) ((a&b)+((a^b)>>1)i nt main() { int a = 4,b = 3; Swap(a,b); 在写简单的动态数组的时候,开辟的内存需要是32的整数倍

2016-09-13 16:17:52 600

原创 关于setsockopt的SO_SNDLOWAT低潮发送

先从sendfile说起吧,sendfile其实就是大家口中说的“零拷贝”,在服务器传输大文件方面具有卓越的性能,究其无非主要原因两点: 1. 减少CPU的使用 2. 减少系统调用和数据拷贝的次数。这方面的资料很多,大家网上可以自行搜索。在测试sendfile的小IO问题的时候,意外需要设置setsockopt的SO_SNDLOWAT字段,SO_SNDLOWAT是一个发送低潮字段,根据网上的解释,设置该字段可以当缓冲区有多少剩余空间的时候才被触发调用。那样岂不是很爽,那调用sendfile的

2015-04-01 21:00:46 3017

原创 Go 中闭包的常见使用场景

在 Go 语言中,闭包是一种能够引用并修改其外部作用域变量的函数值。闭包的常见使用场景包括:1. 封装状态,无需结构体即可实现私有状态;2. 回调函数或事件处理,如 HTTP 处理、定时器等;3. 延迟执行,结合 defer 保存上下文状态;4. 装饰器模式,增强函数行为,如日志、限流等;5. 惰性初始化,实现单例或懒加载逻辑。闭包通过捕获外部变量,实现了灵活且高效的功能扩展和状态管理,是 Go 中非常实用的一种编程技术。

2025-05-15 22:08:18 378

原创 关于go结构体的禁止比较技巧

在 Go 中,结构体的可比较性由编译器在编译期静态决定。如果结构体包含不可比较的字段(如函数、切片、map 等),则整个结构体也不可比较。通过在结构体中添加 _ [0]func() 字段,可以有效地禁止结构体比较。这是因为 func() 类型本身不可比较,即使数组长度为 0,整个结构体也会因此不可比较。这种技巧不会影响内存布局,且语义清晰,常用于需要禁止结构体比较的场景,如封装内部状态或同步逻辑。相比之下,_ func() 虽然也能达到相同效果,但会占用内存空间,且语义不如 [0]func() 明确。因此,

2025-05-15 20:58:33 188

原创 业务模型、数据模型、内存模型关系

业务模型定义了数据模型的输入输出(如订单创建需传递用户ID、商品ID),数据模型则为业务规则提供存储和计算基础。数据模型将业务流程中的“订单创建”转化为具体的表操作(如插入订单表、更新用户积分)。内存模型是数据模型的运行时投影,通过对象关系映射(ORM)与数据库交互。实体是逻辑模型中的具体表现,最终映射到数据库表的行记录。:描述业务场景中的核心流程、规则和参与者关系,关注。:程序运行时在内存中维护的数据结构,关注。:数据模型中的核心对象,代表业务中的。:对业务数据的抽象表示,包括。:订单处理时的内存对象。

2025-04-24 15:23:02 833

原创 软件架构分层策略对比及Go项目实践

通过合理选择分层策略,Go项目可以在可维护性、性能和扩展性之间取得平衡。实际开发中常需混合多种策略,例如微服务架构(功能划分)内部采用分层设计,同时依赖组件化基础设施。

2025-04-19 19:44:40 967

原创 go的json unmarshal和 k8s的deepcopy对比

尽管两者均依赖反射,但KubernetesDeepCopy通过代码生成将反射逻辑编译为静态代码,避免了运行时反射的开销,从而实现高性能。而因需动态处理任意 JSON 结构,无法避免反射,导致性能劣势。这一差异体现了“编译时优化” vs “运行时通用性”的设计权衡。

2025-04-15 18:58:38 618

原创 技术方案选型要考虑哪些点?

技术方案选型需围绕业务需求和团队能力展开,平衡技术先进性与落地可行性。关键点包括:架构模式、技术栈适配性、数据模型合理性、安全性及成本效益。建议通过可视化工具(如C4模型、架构图)清晰表达选型逻辑,确保干系人共识。

2025-04-14 10:18:42 380

原创 数据库事务与锁的知识点

数据库不同事务实现本质就是锁、mvcc

2025-04-03 18:03:52 336

原创 go的hooks如何写

go语言hooks函数回调的用法

2025-03-22 10:32:44 592

原创 go reflect的工程使用

了解go reflect的工程用法

2024-07-19 13:14:27 408 1

原创 CDN问题排查:劫持下tcp三次握手分析

一、问题直观感受就是curl 好像卡住了,一直不通。 但是ping, telnet正常,大概率被劫持了,客户端和服务端抓包即可二、分析1.服务端抓包tcpdump -i any port 80 and host 1.1.1.1 -w 6.cap2.客户端抓包从抓包可以得出, 客户端 和 服务端 三次握手成功了,客户端发起get请求,在客户端看来服务端没有响应。客户端觉得是不是三次握手的ack消息难道我没发成功? 客户端就退回到三次握手阶段,连续给服务端发送三次握手的ack消息。 从抓包

2020-08-21 19:56:32 537

原创 高CPU问题----eth0: NIC Link is Down网卡故障导致高CPU

一、 现象: cpu异常飙升(这台机器的eth0网卡在2018年12月的时候就出现问题)二、分析发现:1. dmesg [Thu Mar 14 01:02:00 2019] ixgbe 0000:02:00.0 eth0: NIC Link is Down [Thu Mar 14 01:02:04 2019] ixgbe 0000:02:00.0 eth0: NIC Lin...

2019-03-23 16:04:57 16767 1

原创 Linux创造固定的文件大小-预分配磁盘空间

一、课前预习写本篇文章的目的很简单,防止采坑、防止采坑、防止采坑我们在开发程序的过程中,往往需要预分配磁盘空间,防止因磁盘空间不够而引发程序异常问题(已踩过坑), 现网查阅资料,有些预分配磁盘空间的方法不正确,在这里特别记录一下, 除此之外,把正确的预分配的方法和大家分享一下,如果其他人有建议,欢迎拍砖狠砸二、假:磁盘预分配—ftruncate1. 使用lseek、ftruncate到一个...

2018-10-25 16:05:04 5241

转载 我把Linux系统上面误删的数据找回来了

我把Linux系统上面误删的数据找回来了 一、背景突发事件,应用上传的数据被程序自动删掉了,可悲的是还没有数据备份,数据是放在系统的 /data/webapps/xxxx/upload 目录下面,可把我们急坏了,之前又没有做过数据恢复的测试,然后我找到了一款数据恢复的软件,成功把删除的大部分数据找回来了,我的数据恢复过程如下。二、安装恢复软件1、epel 仓库安装...

2018-04-12 14:58:36 1166

翻译 Latency numbers every programmer should know

Latency numbers every programmer should knowLatency numbers every programmer should knowL1 cache reference ......................... 0.5 nsBranch mispredict ............................ 5 nsL2 c...

2018-04-12 11:01:14 661

原创 tcpdump提取源IP

需求: 使用tcpcopy复制现网到测试机器,但是测试机器并不知道导入流量的OC机器IP是多少 查询tcpdump的参数,然而并没有参数可以直接提取源IP。于是采用了比较土的办法,按部就班的提取tcpdump抓包过滤出源IPtcpdump -i eth0 port 36524 -nn -c 5000 2&gt;/dev/null | awk '{print $3}' | awk -F '....

2018-04-08 15:12:37 8077

原创 tcpdump只抓取HTTP报文头部

因为要做一个需求,我需要调研现网请求http头部的大小,都有什么字段,shell脚本代码如下所示#! /bin/bashs_512=0s_512_1k=0s_1k_2k=0s_2k_4k=0s_4k_8k=0s_8k=0idx=0while truedo if (($idx &gt;= 10000));then break fi ...

2018-04-02 23:39:21 9758

原创 简单计算磁盘平均IO

如果有多个磁盘, 计算的时候就需要计算平均值,显然直接利用linux的iostat的命令不能完成这个需求,下面是个简单的计算磁盘相关平均指标的脚本#! /bin/bash#iostat -x 1 2 &gt; 1.txt#sed -i '1,22'd 1.txt# $1 is file namefile_name=$1grep -E "(sd)[b-m]" $file_...

2018-04-02 14:33:10 1686

原创 采坑 uint32_t 和 uint64_t

uint32_t 和 uint64_t 混用,超出uint32_t的范围,结果导致计算错误。。。#define INNER_TANK_NODE_INFO_LEN 8192sata_node_info_num_ = chunk_num_ + big_chunk_num_;chunk_base_addr_size_ = sata_node_info_num_ * INNER_TANK_NODE

2018-01-22 17:08:51 2920

原创 清理cache sync && drop_caches

问题描述在linux上用iostat观察磁盘的时候,发现sda周期性的出现毛刺最后调查原因发现是因为cache的原因,linux会集中写入sda,导致毛刺\color{red}{因为cache的原因,linux 会集中写入sda,导致毛刺}解决办法周期性的执行下面两个命令,让日志不集中写入sda就可以,时间自己把握[root@ying ]# sync[root@ying

2018-01-17 16:54:37 1508

原创 linux pmap

pmap查看某个进程的内存使用情况最核心就是最后一句: mapped:23344Kwriteable/private:1280Kshared:4K\color{red}{mapped: 23344K writeable/private: 1280K shared: 4K}mapped表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小,即ps出的vsz\col

2018-01-17 11:29:24 507

原创 Transfer-Encoding 和Content-Encoding

Transfer-Encoding: chunked分块编码,对应Content-Length计算实体长度。 有的时候服务器发送的数据并没有具体的长度,这是时候就需要chunked分块编码 Content-Encoding:gzip 内容编码, 很多网站都使用了gzip压缩,这样使传输的数据量减少了3/4,但是一般图片不建议压缩,因为图片都是压缩过的Content-Encoding 和 Trans

2017-12-26 21:28:20 2229

原创 字符数组md5[4]转换成uint32_t的无符号整数转化?

一个unsigned char md5[4]数组转成uint32_t的无符号整数转化其实也很简单,只要清楚内存的分布结构就没有问题linux内存是由高地址到低地址的,对于md5[4]和int a的分布就是这样子的,md5数组占用4个字节,int也占用4个字节,char数组转成int数组的时候,就是从char数组的末尾开始的,一张图看懂看不懂就看造化了#include <stdint.h>int ma

2017-12-25 16:50:41 3209

原创 软件开发流程

一、需求           1.1 需求的定义                 简单而言需求就是完成相应的功能            1.2 需求的评估                 一般而言,当被提出有需求的时候,应该认真评估分析一下需求到底能不能做,很多需求都含有暗坑,评估不好,后面的事情就非常麻烦。为了不让自己麻烦,对于评估后认为不合理的需求,应该及时的砍掉。对于合理的需

2017-12-18 13:03:08 363

转载 ofstream和ifstream详细用法

ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器(<<)  向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。2、析取器(>>) 

2017-12-14 16:01:10 385

原创 内嵌汇编 - cmpxchgl 指令学习笔记

一、背景又是关于汇编,头真是大,当年欠吴旭老师的汇编终究还是要还的。 在看nws源码的时候,里面有这样一段代码static __inline__ unsigned long atomic_cmp_set(volatile void *ptr, unsigned long old, unsigned long set){ unsigned l

2017-12-13 16:35:14 5026

原创 overflow in implicit constant conversion

被女朋友问了一个很简单的问题,刚开始还以为是编译器的锅么,根本是非法吗? 但是非法之后的运行结果呢?当时竟然没有想懂,亲自操刀尝试了下, 下面意思应该很明确了

2017-11-14 21:42:24 4841

原创 HTTP中的Range: bytes=0-

HTTP中的Range就是分段请求字节数,也是大家经常说的断点续传。Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的表示第二个500字节:bytes=500-999表示最后500个字节:bytes=-500表示500字节以后的范围:bytes=500-第一个和最后一个字节:bytes=0-0,-1同时指定几个范围:byt

2017-11-09 10:13:07 11052

转载 两种常用的编程模型

并发系统可以采用多种并发编程模型来实现。并发模型指定了系统中的线程如何通过协作来完成分配给它们的作业。不同的并发模型采用不同的方式拆分作业,同时线程间的协作和交互方式也不相同。这篇并发模型教程将会较深入地介绍目前(2015年,本文撰写时间)比较流行的几种并发模型。并发模型与分布式系统之间的相似性本文所描述的并发模型类似于分布式系统中使用的很多体系结构。在并发系统中线程之间可以相互通信。在分布式系统中进程之间也可以相互通信(进程有可能在不同的机器中)。线程和进程之间具有很多相似的特性。这也就是为什么很多并发模

2017-11-08 22:33:02 4579

原创 新增加的HTTP状态码 -- 103

IETF公布了新的HTTP状态码-103, 总结一下就是提前预加载(css、js)文档,提升用户的访问速度。Summary: a new status code that lets the server send headers early, before the main headers. This helps with optimisations like preloading. Example

2017-11-08 16:21:10 4543

转载 [CDN 技术] HTTP参数中Etag的重要性

Etag在HTTP1.1中有介绍,主要的作用就是在(css file, image, javascript file)文件后面添加一个唯一的参数(相当于查询参数字符串),Etag有服务器端生成,并且随着文件的改变而改变,这样浏览器端就会只重新请求获取 Etag发生变化的文件,减少浏览器端数据的流量,加快浏览器的反应速度,重要的是减轻服务器端的压力,所以服务器端Etag的实现就比较重要了.现在我们有个问题为什么要使用Etag呢?Etag主要为了解决Last-Modified无法解决的一些问题.他能比Last_

2017-11-04 20:18:21 2494

原创 提升自旋锁spinlock的性能-pause指令

看源码的时候get的一个新的知识点,可以提升自旋锁spinlock的性能-pause指令,看到的源码如下: #define cpu_pause() __asm__ (".byte 0xf3, 0x90") #define NOP_CPU3(n) {int i = 0; while(i++ < (n)) cpu_pause();} // 调用代码

2017-10-24 14:22:43 3866

转载 GCC在C语言中内嵌汇编 asm __volatile__

在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。1、简单的内嵌汇编例:__asm__ __volatile__("hlt"); "__asm__"表示后面的代码为内嵌汇编,"asm"是"__asm__"的别名。"__volatile__"表示编译器不要优化代码,后面的指令 保留原样,"volatile"是它的别名。括号

2017-10-24 09:46:19 654

转载 使用Nginx抵御DDOS攻击

DDOS是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段。一般情况下,攻击者通过大量请求与连接使服务器处于饱和状态,以至于无法接受新的请求或变得很慢。应用层DDOS攻击的特征应用层(七层/HTTP层)DDOS攻击通常由木马程序发起,其可以通过设计更好的利用目标系统的脆弱点。例如,对于无法处理大量并发请求的系统,仅仅通过建立大量的连接,并周期性的发出少量数据包来保持会话就可以耗尽系统的资源,使其无法接受新的连接请求达到DDOS的目的。其他还有采用发送大

2017-10-19 14:23:36 491

原创 将进程绑定到特定的cpu - taskset命令

在测试斗地主程序的时候,发现单核cpu的运行时间总比多核cpu运行时间块,用taskset命令一看,果然是一个进程运行在两个cpu上。 Score of team 1 is : -1154 Score of team 2 is : 148 Score of team 3 is : 1006 real 4m12.768s user 0m12.307s sy...

2017-10-12 09:57:03 2558

原创 采坑memset初始化vector的变量---vector iterators incompatible

和别人合作一起写一个斗地主,我负责拆牌这一块,每次需要返回最优的牌型。因为我习惯了变量初始化用memset,vector的变量也意外的用了memset。结果尼玛的调试了好长时间,才知道memset初始化vector变量会导致向量丢失,不能正常的遍历,但是可以正常的push_back。 编译器报错是:“vector iterators incompatible”,有毛用。 加代码调试编译报错的地方让人根本摸不着头脑,这一块怎么会错呢? 纠结了好长时间。其实下面这一块是对的。

2017-10-09 16:05:53 9690

linux下vim的自动补全的插件

如果用过sublime,就知道它的自动补全很好用,这个在linux下的vim也可以

2016-01-02

浅谈数据库

浅谈数据库,有一些基本概念,对于数据库的基本操作,增删改查做了一个ppt

2014-10-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除