自定义博客皮肤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

做最好的自己

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

原创 从脑科学角度分析高效学习方法

很多时候,关于高效学习方法,人们往往都是参考成功人士或者大神学霸的经验分享。但是,这种非常个人化并且主观性很强的东西一般没有很强的广泛使用性。那么如何找到更加科学的更加客观的高效学习方法呢?针对这个问题,应该从事物本质出发,按照第一性原理来思考。从第一性原理分析,学习知识的本质在某种程度上就是让大脑对特定的知识产出对应的神经网络(或者说脑回路),从而能够对特定知识做到记忆和理解,进而能够运用。让学习变得高效,本质也就是让大脑的针对特定知识产生对应神经网络这

2023-09-04 07:45:00 283

原创 程序员编程效率的大敌:中断与上下文切换

软件开发是一个高度抽象的过程,需要高度的专注力。研究表明,中断后至少需要10-15分钟才能回到原来的工作状态。1. 尽量避免被打断,养成写工作日志的习惯,随时快速记录关键逻辑和线索;2. 尽量避免频繁切换工作内容,学会借助各种工具尽可能的提升上下文密度;

2023-06-24 09:00:00 314

原创 一个极简操作系统的代码实现

在网上看的demo OS实现时,发现一个名为`Hurlex`的demo OS project,实现精简,麻雀虽小五脏俱全,挺适合对OS实现进行代码级别的快速粗略了解一下的。当然,高校也有类似的很不错的教学项目,比如`MIT Xv6 OS`, `哈工大李治军Linux-0.11 OS实验`,这些有更加详细的配套文档和项目代码,更加适合深入的学习。上面的demo OS都可以通过QEMU仿真器直接跑起来并且能调试。

2023-06-04 23:29:19 299

原创 ChatGPT 学习与使用总结

最近ChatGPT大火,2023有可能就是AGI元年了。近两个月使用下来,ChatGPT给我最深刻的感觉就是它所具备的**理解和思维**能力,第一次体验时真的是非常震撼,完全是之前各种『人工智障』智能助理所不能比拟的,第一次感觉这才是真正的『人工智能』,项目组里小伙伴也各个都玩的乐此不疲。后面介绍一下我自己这段时间使用体验。

2023-05-14 20:26:12 15704

原创 Visual Studio Code调试C/C++程序技巧

一定要分开,写到数组里,这个跟从命令行启动不同,shell会按照空格来解析一个个传递给目标程序,而vscode就是直接按照这个结构化的数据传递给程序了。那么有没有其他方法呢,就是使用gdb拉起后传参的配置方法,按照下面来改写。如果想通过一个bash脚本来拉起程序调试,这种VS code是不支持的,因为这种本质你调试的是bash这个可执行文件。这两种方法对应到VS code都有图形化的调试方法,也十分的方便。, 然后调试的时候直接就在弹窗选中对应进程了,也十分方便。这种方法,配置按照如下修改,

2023-05-07 12:30:05 1242

原创 使用QEMU调试ARM64 Linux内核v6.0.9

本文主要介绍如何使用QEMU调试最新的ARM64内核。用到的工具都从源码编译,QEMU编译,根文件系统制作,GDB调试ARM64的linux内核,都有一个基本的介绍。

2022-11-19 16:55:57 2024

原创 在Windows上基于WSL2搭建Linux开发环境

使用WSL2可以说完美解决了基于Window系统搭建Linux开发环境问题,记录一下步骤:安装WSL2和Ubuntu安装Windows terminal: https://docs.microsoft.com/zh-CN/windows/terminal/install安装WSL2: https://docs.microsoft.com/zh-cn/windows/wsl/install用管理员身份打开 PowerShell ,使用命令 wsl --install 一键安装,此命令将启用所需的可

2022-05-04 13:05:17 1443

原创 基于邻接矩阵的朴素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 462

原创 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 905

原创 macOS安装PyTorch跑MNIST数据集

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

2020-04-30 23:44:10 779

原创 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 632

原创 Golang笔记:包管理机制

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

2020-03-01 17:54:35 379

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

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

2020-02-23 21:46:21 650 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 2212

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

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

2020-01-31 22:45:17 454

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

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

2019-12-31 23:56:46 497 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 2913

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

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

2019-10-25 08:28:12 693

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

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

2019-09-30 00:25:27 806

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

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

2019-09-18 23:39:47 1176

原创 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 26129 2

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

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

2019-08-21 22:11:36 965

原创 VIM使用小技巧

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

2019-07-29 23:51:43 656 1

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

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

2019-06-22 19:26:38 4493

原创 编程中的心流模式flow

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

2019-05-27 01:13:15 2119 1

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

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

2019-04-28 23:47:39 1166

原创 网络安全:非对称加密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 587

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

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

2019-02-28 22:45:39 578

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

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

2019-02-20 22:34:33 3453

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

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

2019-01-31 23:10:42 2197

原创 CMake的常见用法总结

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

2019-01-21 22:41:48 928

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

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

2019-01-01 12:31:02 2751

原创 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 1734

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

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

2018-12-21 23:28:14 1748

原创 Go语言使用Protobuf举例

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

2018-12-12 00:39:07 944

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

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

2018-12-09 00:05:27 1246 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 519

原创 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 260

原创 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 5444 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 992

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

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

2013-07-29

RESTful+Java+Web+Services.pdf

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

2013-07-29

空空如也

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

TA关注的人

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