
编程视界
文章平均质量分 67
a_ran
程序员,公众号:进击的代码
展开
-
为什么硬件变得越来越快,而我们使用的应用程序却越来越慢?
现代硬件的速度快得令人难以置信。苹果 M1 Max 运行频率为 3.2GHz。然而,微软 Teams 打开一个链接却需要 3 秒。为什么硬件变得越来越快,而我们使用的应用程序却越来越慢?原创 2024-11-11 12:51:07 · 942 阅读 · 0 评论 -
一种没有注释的语言
JSON 是 PLDB中唯一不支持注释的流行语言。JSON 最初是有注释的,后来为什么去掉了呢?原创 2024-09-13 08:51:42 · 726 阅读 · 0 评论 -
为什么不写注释?写“为什么不”注释?
初级工程师编写注释来解释代码的作用。中级工程师编写注释来解释为什么要这样做。高级工程师编写注释来解释为什么代码不以其他方式编写。原创 2024-09-12 13:49:12 · 559 阅读 · 0 评论 -
JS、Go、Rust 错误处理的不同 - JS 可以不用 Try/Catch 吗?
Go、Rust 的错误处理使用 error 值,而 JS 使用 Try/Catch 捕获异常。那 JS 能否使用 Go、Rust 的错误处理方式呢?原创 2024-05-20 12:55:47 · 1182 阅读 · 0 评论 -
脚本应使用项目的主要语言编写
项目中的脚本,应尽可能的使用该项目的主要语言编写,这样可提高可维护性。原创 2024-03-28 08:23:19 · 347 阅读 · 0 评论 -
Go 1.22 - 更加强大的 Go 执行跟踪
Go runtime/trace 在之前的版本,存在四个主要问题。在 1.22 版本中进行了大幅优化,可以进行低开销、可扩展的执行追踪,还提供了 Flight recorder 和 Trace reader 两个便捷的 API。原创 2024-03-19 08:39:07 · 1142 阅读 · 0 评论 -
VS Code 配置类似浏览器中的垂直标签页功能
浏览器中的垂直标签页,非常好用,VS Code 也有方法配置。还可以配置文件树缩进,多行标签页。原创 2024-03-16 23:09:43 · 2087 阅读 · 0 评论 -
编程四十载 - 总结了 13 条建议
希望在刚开始编程和工作时,有人能给我这些建议,所以,在工作 40 年后,我把这些内容进行了总结与提炼。原创 2024-03-14 12:20:35 · 746 阅读 · 0 评论 -
Go Run - Go 语言中的简洁指令
go run是我最喜欢的 Go 语言特性。想要运行你的代码?只需go run main.go。原创 2024-02-26 08:11:59 · 663 阅读 · 0 评论 -
13 年后,我如何用 Go 编写 HTTP 服务(译)
大约六年前,我写了一篇博客文章,概述了我是如何用 Go 编写 HTTP 服务的,现在我再次告诉你,我是如何写 HTTP 服务的。原创 2024-02-11 11:22:23 · 2565 阅读 · 1 评论 -
c/c++ curl smtp 发送邮件 foxmail 中文乱码问题解决
在Linux下,当使用 libcurl 库发送邮件时,发现 windows 下的 foxmail 接收邮件乱码,而浏览器端不乱码。解决办法:内容类型和 utf-8 编码设置在设置邮件内容 "To: ", 'From: ' 等内容之前添加:"content-type:text/plain;charset=utf-8\r\n"即可此外,如果你想发送 html 格式的邮件内容,可以设原创 2017-07-05 11:51:05 · 3667 阅读 · 0 评论 -
linux 下好用的 git 代码查看工具
在 git 合并两个分支产生冲突时,需要手动合并,而有些时候并不是很容易对比出该怎么合并,这就需要 git 代码查看工具来对比两个分支中当时同时修改了什么,该怎么合并以前项目有 redmine git 网站,现在发现 giggle 或 gitg 也很好用,特此记录注:个人更推荐 giggle,因为 gitg 查看代码时并不能查找(醉),giggle 浏览代码更方便安装方法:查看原创 2017-07-19 15:53:36 · 4551 阅读 · 0 评论 -
c/c++ max/min 4种实现方法
1. 简单的宏实现#define max(a,b) (((a) > (b)) ? (a) : (b))#define min(a,b) (((a) 2. 内核的宏实现/* safe min & max *//* avoid ++/-- expand twice *//* compile warning if type diff */#define min(x, y) ({ \原创 2017-07-10 12:02:17 · 21287 阅读 · 2 评论 -
MySQL select 子查询复用,进行聚合计算
当对一个复杂的子查询结果进行分组(group by)聚合计算时, 有时需要进行多次聚合,如果不能复用自查寻的结果,查询效率会很低下 在有些情况下,可以使用 IF 函数进行不同条件的聚合示例如下: 假设子查询的结果有班级,学号,平均分这3个字段(class, no, score) 现在想求每个班级的总人数和及格人数复用前:select A.class A.sum, B.sumfrom(se原创 2017-12-05 18:41:59 · 9779 阅读 · 2 评论 -
c/c++ curl smtp 发送邮件太长导致段错误的问题
在Linux下,使用 libcurl 库发送邮件,当邮件长度超过16000字节时(具体应该为 16000 ~ 17000之间), 执行到 curl_easy_perform(curl); 会发送段错误下面看一下 curl 提供的 smtp 示例:#include #include #include /* This is a simple example showing ho原创 2017-07-10 12:03:35 · 2551 阅读 · 0 评论 -
tftpd32 工具中的 dhcp tftp 使用说明
下载 tftpd32 工具点我下载(tftpd32_v4.5.2绿色版.zip)解压运行tftpd32 运行DHCP服务器配置例如分配10段的网络DHCP 配置tftp服务器配置设置好路径和ip即可tftp 配置原创 2016-02-29 18:06:06 · 22646 阅读 · 2 评论 -
Linux中内存buffer和cache的区别
细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.先来说说free命令[root@server ~]# free -m total used free转载 2016-01-13 18:28:06 · 5894 阅读 · 0 评论 -
SecureCRT 配置 - Linux终端、颜色、透明效果
SecureCRT 安装好后,白底黑字,不透明,ls 没颜色,看起来相当不爽,先看下配置好后的效果吧 :)1. 设置终端主题,黑底白字选全局配置默认会话颜色主题和字符编码保存2. 设置字符颜色和终端类型选择 Linux,勾选 ANSI Color3. 设置透明效果数值越小越透明原创 2015-11-14 14:23:49 · 12779 阅读 · 0 评论 -
文本编辑器/16进制编辑器 MadEdit 推荐
平时经常会查看16进制文件,有用 UltraEdit、NotePad++ 的,但是一直使用 MadEdit,简单、轻快、绿色,用起来很爽,所以才会有这篇文章。我使用的是 MadEdit-Mod (MadEidt 的作者好像是国人,已经不更新了,MadEdit-Mod 修复了一些 bug,添加了一些新的功能),下载地址:http://sourceforge.net/projects/made原创 2015-09-19 21:39:38 · 9128 阅读 · 7 评论 -
Source Insight 3.X utf8 支持插件
继上次SI多标签插件之后,因为公司内部编码改为 utf8 编码, 因此特意做了这个Source Insight 3.X utf8 插件.下载链接: http://download.youkuaiyun.com/detail/chinaeran/9106117安装说明:解压msimg32.dll sihook.dll siutf8.dll 到Source Insight 3.X安装目录转载 2015-09-15 09:17:25 · 2349 阅读 · 0 评论 -
MySQL 使用 INTERVAL() 函数 实现数据按区间分组
首先看一下它的定义:INTERVAL(N,N1,N2,N3,..........)INTERVAL()函数进行比较列表(N1,N2,N3等等)中的N值。该函数如果N下面的代码是显示 INTERVAL()函数如何工作的一个简单的例子:mysql>SELECT INTERVAL(6,1,2,3,4,5,6,7,8,9,10);+------------------------原创 2017-11-10 10:33:09 · 38503 阅读 · 1 评论 -
MySQL 当记录不存在时insert,当记录存在时update
MySQL当记录不存在时insert,当记录存在时更新;网上基本有三种解决方法第一种:示例一:insert多条记录假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:INSERT INTO clients(client_id, client_name, client_type)SELECT supplier_id, suppli转载 2017-11-15 14:04:08 · 3259 阅读 · 0 评论 -
排列搜索 庞果网(C语言版,虽实现了,但未通过测试,时间超过3s,使用的是全排序方法,愿大神指导)
注:虽然没有通过测试,但学会了用递归实现全排序的方法(话说此题的通过率真低呀,哪位高手知道正确答案呢?)题目详情:设数组a包含n个元素恰好是0..n - 1的一个排列,给定b[0],b[1],b[2],b[3],问:有多少个0..n-1的排列a,满足(a[a[b[0]]]*b[0]+a[a[b[1]]]*b[1]+a[a[b[2]]]*b[2]+a[a[b[原创 2014-02-08 23:18:09 · 2388 阅读 · 4 评论 -
Sublime Text 插件 - 文件和代码块注释
CommonCommentThis Sublime Text 2/3 plugin adds some convenient commands to write file/block comments.项目地址:点我CommandsAdd Current DatetimeExample:2019-03-20 21:10:54Add Code Block Comment...原创 2019-03-23 16:15:19 · 1984 阅读 · 0 评论 -
git commit 规范化信息提交工具
灵感来源于这篇文章1. 标准化 commit message规范且有意义的提交记录,有助于追踪代码修改和查看历史记录现在支持以下九种类型(参考 Angular 规范的 commit message)feat: 新功能(feature) fix: 修补bug docs: 文档(documentation) style: 格式(不影响代码运行的变动) refactor: 重构(即...原创 2018-12-10 20:30:46 · 1861 阅读 · 0 评论 -
golang 八进制 utf-8 编码转中文
当调试程序,打印出变量的值时,有可能输出的是八进制 utf-8 编码(尤其是 protobuf 变量) 例如:\346\200\241\346\200\241\346\200 这样的字符串如果作为字面量,go可以自动转化, 但如果是从文件或string中读取,就不行了。 可以使用正则表达式简单处理下 如下代码示例:package mainimport ( "fmt" ...原创 2018-06-20 19:23:45 · 9297 阅读 · 2 评论 -
github项目贡献代码、同步仓库等常用操作
详见 githubContribute to other projectFork itCreate your feature branch $ git checkout -b my-new-featureCommit your changes $ git commit -am 'Added some feature'Push to the branch $ git push origin my-n...原创 2018-03-24 22:31:23 · 687 阅读 · 0 评论 -
Linux 下 Sublime Text 3 安装 Godef 进行代码跳转/跳回
GoSublime 插件中的跳转使用的是 GsDoc,只能跳转包名点出来的成员和函数(例如 fmt.Println),很不方便后来发现了 Godef 这个插件,可以实现任意对象跳转(瞬间爽的飞起,此外,我还添加了跳转回来的方法)http://blog.buaa.us/godef-plugin-for-sublime-released/ 这个是 Godef 作者(在此感谢)的发布文档以下记录下安装过...原创 2018-02-23 18:40:45 · 5318 阅读 · 0 评论 -
Go -v 显示版本号和编译时间示例
C语言想要 -v 显示编译时间,可以使用 __DATE__, __TIME__ 这两个宏, 而 Go 没有类似的常量,当然可以使用 Go 调用 C 代码(这是另一种方法) 然而,更好的方法是使用 go build 的 -ldflags 参数 原理如下:$ go build --help -ldflags 'flag list' arguments to pas原创 2017-11-13 18:02:04 · 7696 阅读 · 0 评论 -
oh-my-zsh git 慢/卡顿问题解决
在 oh-my-zsh 进入 包含 git 仓库目录时,会变的平时慢/卡顿如下图:原因是因为 oh-my-zsh 要获取 git 更新信息解决办法:设置 oh-my-zsh 不读取文件变化信息(在 git 项目目录执行下列命令)$ git config --add oh-my-zsh.hide-dirty 1效果如下图:如果你还觉得慢,可以再设置 oh-原创 2017-06-02 19:02:07 · 30602 阅读 · 4 评论 -
MySQL 优化百分比/比例计算
通常使用 SQL 语句求百分比时,需求扫描表两次,一次是总数一次是满足条件的个数 其实可以使用 INTERVAL 函数优化,只扫描表一次(在表很大时,几乎可以少花费一半的时间)示例如下: 假设有一个分数表 TScore,包含班级,学号,平均分这3个字段(class, no, score) 现在想求每个班级的及格率(>=60人数/总人数*100)一般方法:select Total.class,原创 2017-12-07 13:57:23 · 11785 阅读 · 1 评论 -
Linux 下 Sublime Text 添加 InputHelper 插件输入中文
Linux 下的 Sublime Text 不支持中文输入,我也是醉了。网上找了一些方法,都没有成功,最后就用 InputHelper 折中一下了,虽然麻烦,但好歹能写中文了。InputHelper 因为是以弹出个窗口方式输入,所以理论上支持系统所使用的所有中文输入法。安装方法:$ cd ~/.config/sublime-text-3/Packages$ git clone原创 2015-04-03 19:59:33 · 4894 阅读 · 0 评论 -
Sublime Text 3 增加 Open Recent 个数
目前 Sublime Text 3 下 【Project】-> 【Open Recent】下的最近打开项目数只有8个, 对我不太够用,所以找了一下增加这个个数的方法,记录一下。 Linux :(其他系统类似) 原理: Default.sublime-package 包中的 Main.sublime-menu 包含了菜单配置, 把这个文件复制到自定义配置目录,然后修改即可 操作:// st原创 2017-11-21 10:59:59 · 1247 阅读 · 0 评论 -
C语言结构体初始化的三种方法
直接上示例了#include struct student_st{ char c; int score; const char *name;};static void show_student(struct student_st *stu){ printf("c = %c, score = %d, name = %s\n", stu->c, stu->score, stu原创 2015-03-30 19:46:38 · 21897 阅读 · 1 评论 -
Linux socket 网络编程常见问题总结
网络编程常见问题总结 串讲(一) 网络编程常见问题总结 6 I& I! E- x8 Z+ p- U- B 在网络程序中遇到的一些问题进行了总结, 这里主要针对的是我们常用的TCP socket相关的总结, 可能会存在错误, 有任何问题欢迎大家提出. . e3 Y0 @* _- e1 G- B% R 对于网络编程的更多详细说明建议参考下面的书籍 《UNIX网络编程》 《转载 2015-03-06 16:17:56 · 5067 阅读 · 0 评论 -
git commit --amend 修改还未提交到远程分支的 commit 信息
有时候用 git commit -m 提交时,可能没写好或者误操作导致提交的信息不合适,但你还没有 push 到远程分支时,可以使用 git commit --amend 修改上一次的提交信息。操作示例 如下:git commit --amend 后会出现编辑界面,如下可以在最上面红框的地方,修改要提交的信息,然后按Ctrl + o (WriteOut),如原创 2015-03-05 19:22:04 · 6070 阅读 · 0 评论 -
ubuntu/linux mint 创建proc文件的三种方法(一)
在做内核驱动开发的时候,可以使用/proc下的文件,获取相应的信息,以便调试。大多数/proc下的文件是只读的,但为了示例的完整性,都提供了写方法。方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危险);方法二:使用proc_create和seq_file创建proc文件(较方法三简洁);方法三:使用proc_create_data和seq_file创建proc文件(较麻烦,但比较完整);示例四:在proc文件中使用内核链表的一个示例(用的方法三)。原创 2014-07-10 02:50:27 · 3880 阅读 · 0 评论 -
ubuntu/linux mint 创建proc文件的三种方法(四)
在做内核驱动开发的时候,可以使用/proc下的文件,获取相应的信息,以便调试。大多数/proc下的文件是只读的,但为了示例的完整性,都提供了写方法。方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危险);方法二:使用proc_create和seq_file创建proc文件(较方法三简洁);方法三:使用proc_create_data和seq_file创建proc文件(较麻烦,但比较完整);示例四:在proc文件中使用内核链表的一个示例(用的方法三)。原创 2014-07-10 02:57:11 · 2860 阅读 · 0 评论 -
mint删除自带的openjdk
在编译安卓4.2.2时需要jdk1.6,但原创 2014-07-01 08:25:34 · 3582 阅读 · 0 评论 -
Linux rmdir 命令实现(特别版)
本文地址:http://blog.youkuaiyun.com/a_ran/article/details/25250583在学习linux系统编程的时候,实现了rmdir命令的特别版本。因为rmdir只能删除空文件夹,而我实现的功能相当于 rm -rf path...实现的功能: 递归删除指定文件夹的所有文件程序说明:1. my_rmdir(): 即为递归删除动作的自定义函原创 2014-05-10 23:09:29 · 2970 阅读 · 1 评论