9 ka__ka__

尚未进行身份认证

C/C++/Go程序员; 喜欢乒乓、游泳和看电影; 平时喜欢看知乎和豆瓣;

等级
TA的排名 1w+

从"阿里P8程序员征婚"事件看如何正确的审视自己

2019年9月下旬的一个网络热点知乎链接:如何看待「86年男生阿里p8年薪近两百万,就想找一个90后独生女」一事?附一下我比较欣赏的@CatChen的回答:感觉是偏科状元想要匹配全科优才生,既不会说配不上,但也不至于强大到任意通吃,所以就看缘分咯。我把他定义为偏科状元,因为他在描述自己时说的主要就是一个维度:钱。无论是房子车子,最终都是钱。父母退休不用担心,那主要也是钱,虽然钱够...

2019-09-29 00:11:26

Linux C pthread多线程,join和detach

LinuxC多线程使用,有一个注意点需要注意,新启动的子线程一定要在主线程join,或者本身被设置为detach,否则会引起资源泄露,如每个线程都有自己的运行stack,内核中的task_stuct数据结够等。正如,父子进程中的子进程退出没有被父进程join就会变成僵尸进程一样。一个例子,最终会导致资源耗尽pthread_create返回11.这个错误是EAGAIN的意思就是操作系...

2019-09-18 22:56:25

x64 ASM 常用汇编指令

语法习惯立即数,$开头寄存器,%开头取地址里面的值,偏移量(%寄存器)//除了lea取地址指令)外,lea就是取地址loadeffeciveaddress整形操作通用后缀,后缀[bwlq1248]bytewordl…quadruple,表示多少字节浮点指令还有三个[sdt4816]singledoubleextended(修饰精

2019-08-28 23:51:59

小练习 - C语言实现一个极简通用vector

C语言库比较少,很大的原因就是没有泛型,也没有class。但是C语言作为一个较为底层的系统级语言,操纵内存还是很灵活的。模仿C++实现一个泛型vector,可以使用void*,使用的时候强转对应类型,或者使用宏来封装一些操作。这里实现一个极简的vector,拥有增删查功能,存储的元素放在连续内存中,扩容时1.5倍增长。没有加锁,非线程安全。这个可以在控制结构体里添加。原理很简单,内存不够了,ma...

2019-08-21 22:11:36

VIM使用小技巧

VIM的优势如果做LinuxC/C++开发,经常ssh到Linux服务器编辑各种文件,那么熟练使用VIM绝对可以提高工作效率。VIM的高效体现在多模式,可以很方便快速的对文件进行各种编辑修改,而这恰恰是在软件开发中经常遇到的场景。VIM流行这么多年,很多操作都是经过多年沉淀下来的高效操作,熟练的VIM操作可以让编辑与思维尽可能同步,快速的反复修改,把代码写成想要的样子。并且,在Linux上很...

2019-07-29 23:51:43

Linux C/C++ 共享库so的搜索路径和顺序

共享库的搜索共享库的搜索出了系统默认路径外,还可以通过下面方法指定。首先通过环境变量指定:环境变量LIBRARY_PATH编译期查找动态链接库路径,导出给Makefile或者在Makefile开头指定;LD_LIBRARY_PATH运行期查找动态链接库的路径,会在系统默认路径之前查找;还可以通过GCC参数指定:编写Makefile一个好的习惯是先-L指定路...

2019-06-22 19:26:38

编程中的心流模式flow

周末看电影,接触到了心流这个概念,挺有意思。了解心流理论,可以指导我们进入一个更为高效预约的工作状态。电影《社交网络》里程序员写代码出现了两次"wiredin",一次是肖恩帕克去参观扎克伯格的创业团队,其中的一名程序员没有回应肖恩的问候;另一次就是安德鲁怒找扎克伯格询问关于股票稀释的问题;quora上有个专门的问题来:https://www.quora.com/What-does-it...

2019-05-27 01:13:15

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

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

2019-04-28 23:47:39

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

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

2019-03-31 20:48:03

Golang笔记:iota常量生成器

Golang的常量表达式值在编译期计算,iota是Golang提供的常量生成器,用于生成一组以相似规则初始化的常量。一个例子:const( Zero=iota//0 First//1 Second//2 Hi=0//0,被打断后,后续值不变直到iota显示回复 Four...

2019-02-28 22:45:39

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

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

2019-02-20 22:34:33

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

调度本质上体现了对CPU资源的抢占。调度的方式可以分为:抢占式调度。依赖的是中断机制,通过中断抢回CPU执行权限然后进行调度,如Linux内核对线程的调度。协作式调度。需要主动让出CPU,调用调度代码进行调度,如协程,没有中断机制一般无法真正做到抢占。LinuxNPTL线程库看操作系统方面的文章时,要注意区分其描述的是通用操作系统还是某种特定的操作系统(如:Windows/...

2019-01-31 23:10:42

CMake的常见用法总结

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

2019-01-21 22:41:48

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

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

2019-01-01 12:31:02

C++使用Protobuf举例

安装cpp的protobuf按官方指导来:https://github.com/protocolbuffers/protobuf/tree/master/src下载release包,解压后编译安装即可。一个小例子一个proto文件定义如下:syntax="proto3";packagetest;enumSex{BOY=0;GIRL=1;}...

2018-12-25 22:35:20

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

对于常规的业务代码,常见自动化脚本,偶尔迸发的想法原型,快速写代码是有套路可寻的,并且可以做针对性训练。说说我个人的经验:常见的API和编程模型,要记住,就像背单词一样。比如:写代码经常用到STL,那么常见类和的API,跑跑demo理解后,背背用法,针对性的记几次,绝对可以快速提高写常规代码的速度。还有经常用python处理文件字符串,那么正则表达式,相关API,csv,excel等,花点时间...

2018-12-21 23:28:14

Go语言使用Protobuf举例

Golang是内存安全的带垃圾回收的强类型语言,那么必然不鼓励直接拿到一个地址随便进行类型强转的,虽然通过unsafe包也可以做到。并且,Golang的结构体是不能设置单字节对齐的,所以发送一个结构化的msg给另一个进程时一定要做序列化,接收端收到再做对应的反序列化。当然,也可以使用XML/Json来做通信格式,但是它们是字符串,编解码效率更低,而且也得需要库的支持。有没有一个更加简单高效的编解码...

2018-12-12 00:39:07

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

Linux网络编程用的比较多的就是基于epoll的IO多路复用模型。高性能Web服务器Nginx底层使用的就是epoll。常见的并发模型对比多线程模型多线程并发模型一般使用同步IO,每个连接起一个线程,编程相对直观容易,但是连接数非常受限,在IO密集型场景吞吐量就比较低。一台计算机同时可以执行的线程取决于CPU核数,即使开了CPU超线程,也并不会增加多少可以真正并发的线程。而且,每个线程都需...

2018-12-09 00:05:27

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

LeetCode151.ReverseWordsinaString很适合练习C语言基础,练习一个OJ题目除了找最佳解法,还可以多想想刻意去练习一些数据结构等其他知识点,让练习举一反三。Givenaninputstring,reversethestringwordbyword.Example:Input:“theskyisblue”,Output:...

2018-12-02 22:41:31

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

Golang的可变参实现跟C/C++的不太一样,编译器把可变参解析成了一个切片结构传给了函数,充分利用了Go内置的数据结构。而C/C++的实现则要结合x86平台调用约定和ABI手册了,可以看:LinuxCvariadic可变参数:va_list在x86和x64下的区别与实现原理。一个Go的简单例子:funcsum2(vals[]int)int{ total:=0 for...

2018-11-29 23:30:03

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 新人勋章
    新人勋章
    用户发布第一条Blink获赞超过3个即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。