Life runs on code

做最好的自己

C语言实现极简递归下降JSON parser解析器

JSON字符串解析利用递归下降非常容易实现。本文实现了一个不支持数组,数字解析只支持正数long类型,只支持ASCII字符集的极简JSON解析器,未实现的功能后面也比较容易扩展。

2019-04-28 23:47:39

阅读数 55

评论数 0

网络安全:非对称加密RSA算法

非对称加密 RSA算法 对极大整数做因数分解的难度决定了RSA算法的可靠性。 加密 RSA加密过程简单描述如下: 选两个大质数 p,qp, qp,q,计算n=p⋅qn=p\cdot qn=p⋅q; 随机选一个整数eee,满足eee和(p−1)(q−1)(p-1)(q-1)(p−1)(q−1) 互...

2019-03-31 20:48:03

阅读数 33

评论数 0

Golang笔记:iota常量生成器

Golang的常量表达式值在编译期计算,iota是Golang提供的常量生成器,用于生成一组以相似规则初始化的常量。一个例子: const ( Zero = iota // 0 First // 1 Second // 2 H...

2019-02-28 22:45:39

阅读数 62

评论数 0

Linux C信号编程:接管段错误信号SIGSEGV打印调用栈

有时候,线上环境没有开启coredump,这时把进程复位时的调用栈打印出来就非常有利于问题定位了。怎么做呢?也很简单,我们在程序中接管SGISEGV信号,在信号处理函数打印调用栈信息即可。 信号处理可以看:UNIX环境高级编程 内核机制可以看:Linux内核源代码情景分析 这两本书虽老了点,但写的...

2019-02-20 22:34:33

阅读数 152

评论数 0

Go语言模型:Linux线程调度 vs Goroutine调度

调度本质上体现了对CPU资源的抢占。调度的方式可以分为: 抢占式调度。依赖的是中断机制,通过中断抢回CPU执行权限然后进行调度,如Linux内核对线程的调度。 协作式调度。需要主动让出CPU,调用调度代码进行调度,如协程,没有中断机制一般无法真正做到抢占。 Linux NPTL 线程库 ...

2019-01-31 23:10:42

阅读数 809

评论数 0

CMake的常见用法总结

初识CMake C/C++项目规模大了,Makefile就不太好组织编译工程,尤其是Makefile涉及了要自己推导C/C++的头文件依赖,输出信息也一般都比较混乱,完全依赖对应作者。相比较之下,使用CMake来做编译工程,就会清晰很多,省掉了自动推导头文件依赖,而且输出信息美观,编译.o, .i...

2019-01-21 22:41:48

阅读数 77

评论数 0

Linux C/C++ 程序员毕业工作三年多来的感想

2018年最后一天,总结一下今年的工作感想。先回顾下前两年的总结: Linux C/C++ 程序员毕业工作两年多来的感想 Linux C/C++ 程序员毕业工作一年多来的感想 2018年以来我也写了几篇心得感想: 提高编程速度的一些个人经验 程序员工作后如何有效的学习 理论不扎实,编程不会有...

2019-01-01 12:31:02

阅读数 808

评论数 0

C++使用Protobuf举例

安装cpp的protobuf 按官方指导来:https://github.com/protocolbuffers/protobuf/tree/master/src 下载release包,解压后编译安装即可。 一个小例子 一个proto文件定义如下: syntax = &am...

2018-12-25 22:35:20

阅读数 199

评论数 0

提高编程速度的一些个人经验

对于常规的业务代码,常见自动化脚本,偶尔迸发的想法原型,快速写代码是有套路可寻的,并且可以做针对性训练。说说我个人的经验: 常见的API和编程模型,要记住,就像背单词一样。 比如:写代码经常用到STL,那么常见类和的API,跑跑demo理解后,背背用法,针对性的记几次,绝对可以快速提高写常规代码的...

2018-12-21 23:28:14

阅读数 247

评论数 0

Go语言使用Protobuf举例

Golang是内存安全的带垃圾回收的强类型语言,那么必然不鼓励直接拿到一个地址随便进行类型强转的,虽然通过unsafe包也可以做到。并且,Golang的结构体是不能设置单字节对齐的,所以发送一个结构化的msg给另一个进程时一定要做序列化,接收端收到再做对应的反序列化。当然,也可以使用XML/Jso...

2018-12-12 00:39:07

阅读数 96

评论数 0

Linux网络编程:基于epoll的IO多路复用并发模型

Linux网络编程用的比较多的就是基于epoll的IO多路复用模型。高性能Web服务器Nginx底层使用的就是epoll。 常见的并发模型对比 多线程模型 多线程并发模型一般使用同步IO,每个连接起一个线程,编程相对直观容易,但是连接数非常受限,在IO密集型场景吞吐量就比较低。一台计算机同时可以执...

2018-12-09 00:05:27

阅读数 123

评论数 0

小练习 - LeetCode151 Reverse Words in a String的C语言解法

LeetCode 151. Reverse Words in a String 很适合练习C语言基础,练习一个OJ题目除了找最佳解法,还可以多想想刻意去练习一些数据结构等其他知识点,让练习举一反三。 Given an input string, reverse the string word b...

2018-12-02 22:41:31

阅读数 83

评论数 0

Go语言模型:可变参函数的实现机制

Golang的可变参实现跟C/C++的不太一样,编译器把可变参解析成了一个切片结构传给了函数,充分利用了Go内置的数据结构。而C/C++的实现则要结合x86平台调用约定和ABI手册了,可以看:Linux C variadic可变参数:va_list 在x86和x64下的区别与实现原理。 一个Go的...

2018-11-29 23:30:03

阅读数 42

评论数 0

Go语言模型:string的底层数据结构与高效操作

Golang的string类型底层数据结构简单,本质也是一个结构体实例,且是const不可变。 string的底层数据结构 通过下面一个例子来看: package main import ( "fmt&q...

2018-11-25 11:44:42

阅读数 250

评论数 2

Go语言模型:切片slice的底层实现

Go语言的切片实现可以看runtime的slice.go文件,切片是Go语言内置的数据结构,编译器识别到切片语法操作时会自动调用runtime对应底层实现,所以用起来就非常方便,这也是语言级的实现比库实现的优势。 可以通过一个例子来看切片的内存模型: // go version: 1.7 pack...

2018-11-21 23:44:00

阅读数 119

评论数 0

Go语言模型:通过runtime源码和汇编看interface的底层实现

Go的汇编 要看懂Go的内存模型,就需要对Go runtime的源码和Go的汇编指令有一定的了解。Go的汇编是基于 Pan9 汇编的风格,。Go的runtime源码中有大量的汇编,比如goroutine的上下文切换肯定是要汇编的,切换栈帧和寄存器,这些是无法通过简单的function call来完...

2018-11-19 00:07:45

阅读数 182

评论数 0

C语言侵入式链表

C语言虽然没有泛型,但是拥有对内存的终极解释权限,这个也带给了C语言强大的表达能力。对于复杂数据结构,侵入式链表绝对是一个好的经典实现,Linux Kernel 在 2.1 之后就使用 list_head 的内嵌来实现双向循环链表。而且,glibc也提供了这种实现的标准库 glibc/includ...

2018-10-26 23:38:28

阅读数 135

评论数 0

C语言用结构体给另一个同类型结构体赋值: 用等号即可

看到很多C代码的结构体赋值都是用memcpy函数来拷贝,其实根本不需要,用等号直接赋值即可。结构体描述的是的一块连续内存的内存布局,用等号来用一个结构体给另一个结构体赋值,编译不会有任何问题,其效果显然也和人直觉认为的一样,拷贝对应内存。 通过反汇编看编译器的行为,效果跟memcpy一样,还省掉了...

2018-10-05 18:07:50

阅读数 1870

评论数 0

程序员工作后如何有效的学习

工作满三年了,做技术不能只顾埋头搬砖,也要定期回顾,思考未来,不要让自己成为那种一年经验用了十年的开发者。 工作中积累的局限 从自己的工作谈起,菊厂C/C++通信软件开发。工作三年来,第一年收获最多,编程方面技能基本补齐可以很好的应对业务需求的开发,问题的定位解决。但是,很多稍微深入一点的知识...

2018-09-09 12:31:54

阅读数 3484

评论数 5

macOS使用VirtualBox安装Ubuntu18,配置共享目录和ssh

之前一直使用Parallels Desktop,今天想装一下最新的Ubuntu18,总是出问题。于是尝试了下VirtualBox5这款开源的虚拟机软件,挺好用,比之前Parallels Desktop占用的资源少了很多。 配置共享目录 点击菜单栏中的 Devices-&amp...

2018-09-08 19:45:29

阅读数 407

评论数 0

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