自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Life runs on code

做最好的自己

  • 博客(146)
  • 资源 (3)
  • 论坛 (1)
  • 收藏
  • 关注

原创 基于邻接矩阵的朴素Dijkstra单源最短路C++极简实现

基于邻接矩阵的Dijkstra实现使用C++,可以方便的写出一个通用的朴素dijkstra极简实现,核心逻辑不超过20行。#include <vector>#include <algorithm>#include <cstdio>using namespace std;vector<int> dijkstra(vector<vector<int>> &graph, int start){ const i

2020-08-16 01:08:36 152

原创 sys/queue使用说明与TAILQ使用举例

每个写C的同学想必都会羡慕C++方便的STL,但是无奈标准C是没有这些库的,毕竟C语言不支持泛型,不过好在大多数Linux下都可用sys/queue,源自BSD:https://unix.superglobalmegacorp.com/xnu/newsrc/bsd/sys/queue.h.html这个头文件用宏实现了很多基础数据结构,如:单链表、双链表、队列等。用起来也比较方便,只需要引入一个头文件即可。如著名的的libevent项目就大量使用了这个头文件里的TAILQ. 不过C的宏实现的库并没有C++

2020-07-31 00:36:53 287

原创 macOS安装PyTorch跑MNIST数据集

知乎上看到一个问题很有意思:TensorFlow 真的要被 PyTorch 比下去了吗? ,大致看了下下面的回答,站队PyTorch确实不少。自己就尝试跑一下PyTorch,感受一下:安装Python3,直接去官网下载macOS版本的安装包即可;配置pip,国内可以配置阿里云的源,加快访问速度;配置如下:➜ ~ cat ~/.pip/pip.conf[global]index-...

2020-04-30 23:44:10 392

原创 Python的模块搜索路径和包管理

Python模块搜索路径Python模块搜索路径的官方文档:https://docs.python.org/3/tutorial/modules.html#the-module-search-pathWhen a module named spam is imported, the interpreter first searches for a built-in module with ...

2020-03-04 23:31:45 344

原创 Golang笔记:包管理机制

Go语言使用包组织源代码,并实现命名空间的管理。Go不强制包名和所在目录同名,但好的工程实践建议同名。包定义不包括目录路径,但引用一般是相对GOPATH的全路径引用,所以包一般都会放在公司或个人的域名目录下。包引用Go语言自带标准库的包在$GOROOT/src下面,可直接引用;自定义的包和第三方包需要放在$GOPATH/src下面才能被引用;引用了包,但是代码中没有用到,编译器会报错。...

2020-03-01 17:54:35 193

原创 关于时间管理:计划要粗,记录要细

大部分时间管理的误区,就是把时间管理搞的太复杂了。耗费了大量的精力在事无巨细的规划上,太多精细的计划还往往最容易受到冲击,无法很好的执行并给人带来了负反馈。在樊登读书看过一个例子很有同感:不要太大力气去做整理,因为整理这件事情本身不创造价值。有这么一个实验:给大学生做时间管理的实验。把学生成绩差不多的大学生分成三组:第一组不做事件管理;第二组只做一个月以内的计划;第三组做每天的计划。后来的结果...

2020-02-23 21:46:21 288 1

原创 vim和source insight使用对比

从2019年开始,相对高频的使用了vim,之前一直是source insight用的多。为什么突然vim用的多了呢?因为某些外部因素,公司开始逐步不让用source insight了,再加上代码库的编译都是在Linux机器上,直接在SSH到机器上修改编译比较方便。先说说Source Insight的使用体验。对于C/C++项目,Source Insight看代码非常的方便。找文件、找符号、找定义...

2020-02-10 22:48:27 1055

原创 关于程序员写文档和发帖子的一些看法

年前,部门做知识管理,让每个人把自己负责的模块的一些文档补齐一下,输出一些代码导读或者问题定位之类的帖子。完后,看同事们发的帖子,果然每个人都有不同的行文逻辑和写作风格,有的读起来清晰易懂逻辑顺畅,有的就比较发散很意识流,有的甚至都不知所云。写好文章其实也很重要的,既是对已有工作和知识的总结帮助自己内化,也是对外输出技术影响力的重要手段,甚至都是一些公司的考核KPI了。那么,一篇好的文档或者帖子需...

2020-01-31 22:45:17 252

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

时间过得真快,从2015年毕业参加工作,到现在2019年底,已经工作了四年多,自己也到了而立之年。从此以后,作为国内一名程序员,年龄就开始慢慢变为减分项,一想到整个行业和国内一线大厂都特么这个尿性真是蛋疼。不过还好在初期收入不错,可以早些完成自己人生的原始积累也算欣慰了些,也正所谓:有得必有失,有失必有得。审视现在的自己:对技术已经没有那么狂热,学习新东西变得聚焦,甚至有点儿功利,少了那么一点儿...

2019-12-31 23:56:46 320 2

原创 Linux shell脚本引用类似include其他脚本的方法

Shell 脚本规模大了总会比较难维护,但是很多时候又得必须用。适当的拆分文件的方法挺好,Shell脚本没有include或者import机制,查了资料就是用source命令来解决。一个小例子:test.sh#!/bin/bashsource add.shadd 1 2add.sh#!/bin/bashecho "this is $0"add() { echo $...

2019-11-29 22:15:45 1499

原创 DFS递归回溯求排列组合的C实现

深度优先搜索DFS本身很好理解,即按照一定顺序递归遍历一个图,但是如何把所有的满足要求的遍历方式给求出来,这里就需要结合回溯backtrace了。在LeetCode中,回溯标签下的很多题目都是求排列组合的,这也算是一类经典类型的题目了。C/C++写的多人都会有个特点:写代码的时候脑子里都是内存布局,栈帧结构,以及代码执行时各个对象的生命周期等等,写的多了某种程度可以对这些东西做到可视化了都。理解...

2019-10-25 08:28:12 434

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

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

2019-09-30 00:25:27 578

原创 Linux C pthread多线程,join和detach

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

2019-09-18 23:39:47 433

原创 x64 ASM 常用汇编指令

语法习惯立即数,$ 开头寄存器,% 开头取地址里面的值,偏移量(%寄存器)// 除了 lea 取地址指令)外,lea就是取地址 load effecive address整形操作通用后缀,后缀 [b w l q 1 2 4 8] byte word l… quadruple, 表示多少字节浮点指令还有三个 [s d t 4 8 16] single double extended (修饰精

2019-08-28 23:51:59 20821 2

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

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

2019-08-21 22:11:36 415

原创 VIM使用小技巧

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

2019-07-29 23:51:43 326

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

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

2019-06-22 19:26:38 1895

原创 编程中的心流模式flow

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

2019-05-27 01:13:15 885

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

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

2019-04-28 23:47:39 741

原创 网络安全:非对称加密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) 互质;数据xxx加密后为yyy,那么y=xemod&ThinSpace;&ThinSp...

2019-03-31 20:48:03 216

原创 Golang笔记:iota常量生成器

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

2019-02-28 22:45:39 397

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

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

2019-02-20 22:34:33 1842

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

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

2019-01-31 23:10:42 1914

原创 CMake的常见用法总结

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

2019-01-21 22:41:48 589

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

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

2019-01-01 12:31:02 2442

原创 C++使用Protobuf举例

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

2018-12-25 22:35:20 1404

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

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

2018-12-21 23:28:14 1313

原创 Go语言使用Protobuf举例

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

2018-12-12 00:39:07 644

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

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

2018-12-09 00:05:27 1007 2

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

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

2018-12-02 22:41:31 351

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

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

2018-11-29 23:30:03 148

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

Golang的string类型底层数据结构简单,本质也是一个结构体实例,且是const不可变。string的底层数据结构通过下面一个例子来看:package mainimport ( &amp;amp;amp;quot;fmt&amp;amp;amp;quot; &amp;amp;amp;quot;unsafe&amp;amp;amp;quot;)// from: string.go 在GoLand IDE中双击shift快速找到type stringS

2018-11-25 11:44:42 3416 5

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

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

2018-11-21 23:44:00 724

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

Go的汇编要看懂Go的内存模型,就需要对Go runtime的源码和Go的汇编指令有一定的了解。Go的汇编是基于 Pan9 汇编的风格,。Go的runtime源码中有大量的汇编,比如goroutine的上下文切换肯定是要汇编的,切换栈帧和寄存器,这些是无法通过简单的function call来完成的,操作系统的线程上下文切换同样类似。在Linux平台,我们通过Go runtime的源码和GDB...

2018-11-19 00:07:45 921

原创 C语言侵入式链表

C语言虽然没有泛型,但是拥有对内存的终极解释权限,这个也带给了C语言强大的表达能力。对于复杂数据结构,侵入式链表绝对是一个好的经典实现,Linux Kernel 在 2.1 之后就使用 list_head 的内嵌来实现双向循环链表。而且,glibc也提供了这种实现的标准库 glibc/include/list.h。对于C语言项目,有时候会需要精细规划内存使用。这时设计数据结构时,通常都是存储和控...

2018-10-26 23:38:28 1108 1

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

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

2018-10-05 18:07:50 24343

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

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

2018-09-09 12:31:54 8998 7

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

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

2018-09-08 19:45:29 823

原创 HTTP1.1 基础: 用C语言实现200行内的极简http server

对HTTP协议有了基础的了解后,可以看这篇: HTTP 基础: 请求和响应的消息交互细节, 就可以用纯C来实现一个极简的http server了。这个的http server主要完成此功能: 通过URL访问server根目录的html类型文件。代码如下:#include &amp;amp;amp;amp;amp;amp;amp;amp;lt;sys/types.h&amp;amp;amp;amp;amp;amp;amp;amp;gt;#include &amp;amp;amp;

2018-09-02 23:38:55 4539 4

原创 HTTP1.1 基础: 请求和响应的消息交互细节

HTTP 基础概念都8102年了,即使不是一名web程序员,也还是需要了解一下http基本知识的。下面是RFC2616对HTTP的描述: The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia informatio...

2018-08-26 16:36:01 2535

RESTful+Java+Web+Services.pdf

开发REST的WebService的参考资料,非常具有实用价值!

2013-07-29

MythType6.7

MythType6.7

2012-07-16

MATLAB遗传算法源码与工具箱实用介绍

MATLAB的遗传算法源代码,工具箱的使用,相关的实例

2013-07-29

ka__ka__的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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