自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 资源 (3)
  • 收藏
  • 关注

原创 线程局部存储 TLS(Thread Local Storage)

前几天,一个同事过来跟我说,发现代码库里面熟悉的“pthread_key_t”不见了,取而代之的是一个从来没见过的“__thread”。说实话,这两个东西我都不熟,但是本着“刨根问底”的态度,上网研究了一番,总算把这两个东西基本搞清楚了。。。【pthread_key_t】:这个大家应该都比较熟悉了,POSIX的线程标准里面定义的线程存储变量,通常配合使用的函数包括:pthread_key_create、pthread_key_delete、pthread_setspecific、pthread_gets

2020-06-18 16:22:33 293

原创 C语言的static函数

前几天,一个同事跟我说在我们的代码库里面看到,一个static函数被放在了头文件里面,可构建的时候却没有报告链接错误。我的第一反应也是,函数被放在头文件里面,当这个头文件被多个源文件引用之后,再把那几个源文件编译产生的目标文件链接起来的时候,应该会产生重定义错误的……后来又仔细一想,static关键字不正是解决不同的源文件中、同名函数的命名冲突问题的吗?于是,快速做了一个小验证://“static_func.h”#include <stdio.h>static void displ

2020-06-14 12:46:58 1555

原创 软件开发之大忌:想当然

写这篇文章源于前几天与同事关于一个需求的讨论,大致的场景是这样的:有一个商品有多种品类供交易,业务部门想注销掉其中的一个品类(数据库中更改一个标志位的值)。数据库中的这张品类表,由我们的系统每天从数据库中导出成文件,文件提供给其它系统使用,我们的系统在导出这张表的时候是全量导出的,并没有区分品类是否被注销。这时,一个使用这个文件的系统提出说,如果文件中存在已经注销的品类,会对他的系统造成影响,...

2020-02-25 11:11:55 253

原创 目睹一次“失败”的项目经历

标题里面的“失败”二字加上了双引号,是因为这个项目尽管整个过程磕磕绊绊,但最近还是勉强上线了——但整个项目的开发过程真的是失败……作为这个项目的一位轻度参与者(临时被拉过去支持了一段时间),从旁观者的角度反思整个项目过程,发现其中的问题实在太多太多,整个项目的开发过程堪称“灾难”:项目负责人本身管理技能的欠缺、团队间协调能力的不足以及团队内人员工作任务的分配以及积极性的调动都很失败……捡主要的...

2019-07-29 18:17:40 142

原创 程序员 vs 码农

码农工作的方式很多时候更像是一个“翻译”,他们在拿到需求时,从不去考虑业务需求是否正确、合理,也从不去了解需求背后的业务逻辑,而是第一时间就开始动手写代码,一味简单机械地把需求“翻译”成代码后即算完成任务。这样久而久之、日复一日做的都是重复式的劳动,即使编码能力再强,从整个软件项目的角度来看,做的也只是相对简单的“翻译”工作,而且这些工作在需求不明确甚至发生错误的时候,往往会成为无用功……程序...

2019-07-29 10:57:14 167

原创 Excel:二级菜单制作

所谓二级菜单的效果如下图所示,当【一级部门】选择“技术部门”时,【二级部门】的下拉列表中只显示属于“技术部门”的二级部门选项;“业务部门”逻辑类似。#一级菜单制作:一级菜单的制作相对简单,选中B列,菜单【数据】->【数据验证】->【数据验证(V)】:【允许(A)】:"序列",【来源(S)】:"=$H$2:$I$2"(即“技术部门”和“业务部门”所在单元格)。#二...

2019-07-12 13:39:05 493

原创 gcc链接静态库路径与库文件名对应关系

今天在编译项目的过程中,发现一个库文件的路径明明写错了,但还是能够正确链接成功……一番调研后发现,原来这个库在前面已经被放在链接列表里面了,而且前面的路径是正确的。这说明,虽然我们通常在链接静态库的时候,我们都会像下面这样写:gcc -L<路径-1> 库-1 -L<路径-2> 库-2 ...但实际上,这样写只是为了更方便理解,其实链接的路径和库文件并没有一一对...

2019-05-21 15:28:22 1435

原创 C/C++函数参数那些事儿~~

学习过C/C++编程语言函数的人都知道,C/C++语言的函数有“形参”与“实参”之分:“形参”即“形式参数”的简称,在函数没有被调用的时候,“形参”是没有实际的值的。 “实参”即“实际参数”的简称,在函数被调用时,由函数调用方传递实际的值给函数内部使用。如前面所说,函数调用方在调用函数时,需要传递“实参”给函数,而关于函数参数的传递方式,C/C++语言的教材上通常都会提到三种不同的传递方式...

2019-05-17 10:50:06 119

原创 定制文本编辑器Notepad++

Notepad++是我日常工作中必备的文本编辑软件,而且经常使用到的一个功能就是高亮显示特定的文本。Notepad++支持五种不同颜色的高亮显示,分别以格式1~5命名,但这种命名方式在日常使用中很不方便。比如,我使用5种格式分别高亮显示了五个不同的关键字文本,当我想清除某个关键字文本的高亮显示时,我经常会忘记哪个颜色对应的是哪一种格式,万一清除错了还要重新选择关键字文本、重新高亮~~好在N...

2019-05-14 16:25:21 621

原创 Notepad++文本编辑器简介

Notepad++是Windows平台上一款免费且开源的文本编辑器,其功能比Windows系统自带的Notepad(记事本)强大的多。Notepad++除了可以用于一般的纯文本记录,还可以用于编写小型的计算机程序,因为Notepad++不仅支持多种编程语言的语法高亮显示,还有代码折叠功能,并且Notepad++还支持很多具有特色功能的插件,给日常应用带来很多的便利。Notepad++已是我日常...

2019-05-14 14:53:52 4015

原创 指针那些事儿~~

“指针”一直以来都是初学者理解和掌握C语言的一大障碍,“指针”作为C语言的核心内容,如果不掌握指针的相关知识,就不能说是学会了C语言。本文将通过文字描述+代码解析+图例展示的方式,详细解释C语言指针的含义,以期拨开指针之迷雾、得见C语言之精髓。首先,“指针”是C语言定义的一种特殊的数据类型,众所周知,任何数据类型都要占用一定的内存空间,比如'char'类型占用一个字节内存、'short'占...

2019-05-07 17:18:59 190

原创 Excel:根据特定单元格的内容突出显示整行

Excel中根据特定内容突出显示某个单元格,这个应该使用Excel的多数人都是知道的。但是根据特定内容突出显示整行,使用的人就比较少了,因为这里需要使用到简单的函数功能。具体操作如下:0、选中要设置的区域;1、菜单【开始】->【条件格式】->【新建规则】:2、对话框【选择规则类型(S):】中选择:“使用公式确定要设置格式的单元格”;在公式框中输入:=$B2...

2019-04-26 13:07:44 9584

原创 用心才能写出好代码

void foobar(x, y, z) { px = get_x(x); if (0 != check_x(px)) return ERROR; py = get_y(y); if (0 != check_y(py)) return ERROR; if (0 != z) return ERROR;}...

2019-04-23 11:32:05 197

原创 逐步提高代码的执行效率 —— 一次小实践

最近,让组里的一个新人写一个小工具,统计日志文件里面不同的时间点出现的次数(行数),找出其中的最大值。第一次,新人是这样做的: 1. 循环读取文件的每一行,并执行命令“grep xxx | wc -l”,然后将结果输出到一个中间文件里; 2. 遍历上一步生成的中间文件,找出不同时间点出现的最大次数。代码写好后,开始执行程序,结果直接卡死了……分析原因:上面第1步,等于把...

2019-04-17 21:59:01 311

原创 一次gcc链接静态库的小实验总结

首先,大致说一下代码文件结构,具体代码附在最后。main.c里面调用libtestA.a(testA.c)里面的函数testA()和libtestB.a(testB.c)里面的函数testB(),函数testA()和testB()分别调用了libbase.a(base.c)里面的函数funcA()和函数funcB()。1. gcc main.o -L./ -lbase -L./ -lte...

2019-04-16 15:18:51 746 1

原创 关于“996”的个人看法

最近大家都在热烈地讨论“996”,我也凑热闹说说自己的看法。首先,“996”这个事儿绝对不可以是强制的,就算公司给足够的加班费,只要员工本人不乐意,公司就不能强制执行,否则就是违法的。再者,最近几位大佬站出来支持“996”,说什么要想成功就必须经过艰苦奋斗,“996”就是一种奋斗的形式。且不论,这几位大佬的言论是否正确,但他们认定的成功就是拥有大量的财富、显赫的社会地位,这不仅狭隘了成功的...

2019-04-15 18:14:20 2861

原创 为什么头文件里面只能放声明?

现在程序开发使用各种IDE越来越多,很多程序员在日常工作中都接触不到Makefile、编译、链接这些东西了,甚至有些程序员代码写的挺好,却不知道编译、链接其实是两个步骤,只知道按照某种约定,把函数的声明放在头文件,实现放在相应的源文件里面,剩下的事情IDE都可以帮你一键搞定。在搞清楚“为什么头文件里面只能放声明”之前,我们先想一想,头文件是用来做什么的?一个头文件是被其它头文件或源文件引用的,...

2019-04-11 19:22:03 829

原创 代码阅读神器Source Insight

在软件行业工作了好多年了,期间使用过各种IDE:Visual Studio, Eclipse,IntelliJ IDEA,PyCharm, Sublime,Source Insight ...现在还一直在使用的只有Source Insight,也许这和我平时更多时间是在看代码有关系,Source Insight可称为程序员阅读代码的神器!下面,就把日常使用SourceInsight的一些常...

2019-04-10 16:17:29 2434

原创 一个不好的软件设计案例

最近,在一个项目的开发过程中,遇到这样一个问题。在整个系统中,存在有业务交互的两个服务:'A'和'B',由于两者之间使用的应用层协议不同,所以中间需要一个‘proxy’服务负责进行报文的协议转换。A <—> proxy <—> B但是,由于A->proxy有些字段的类型和proxy->B的字段类型不同,导致B最终收到的报文内容错误。该项目的技...

2019-04-08 16:45:08 1061

原创 代码重构实践:去除重复代码、提高可扩展性

        最近,公司领导突然想起来要看每日业务量统计报告,还好之前一位同事写过一个python脚本,通过扫描系统日志文件分类统计不同业务的数量,整个脚本有如下两个配置信息: 命令中文名称配置文件:         cmd_cfg = { "cmd_A_1" :"业务A_1",                             "cmd_A_2...

2018-09-21 02:36:13 1009

原创 黑龙江水系

        作为一个程序员,一直很是“不正经”,专业技术书籍看的不多,倒喜欢经常看一些“课外书”。前段时间刚断断续续看完了《丝绸之路:一部全新的世界史》,感觉受益颇多——从一本历史书中,学到了很多地理知识……        最近在看袁庭栋的《大决战:辽沈战役》,看到其中的“三下江南”战役中的‘江’是指“第二松花江”,作为一个从小在黑龙江省长大的人,对于松花江、嫩江、黑龙江等算是耳熟能详,但...

2018-09-06 12:38:45 2260

原创 简单的自动化测试工具实践

        前段时间做的那个自动化测试工具,现在已经用了有一段时间了,虽然都是利用空余时间开发的,还有很多不够完美、可以优化的地方,但至少目前使用起来已经可以满足我们的基本需求了。今天,花点时间把整个工具的框架梳理了一下,也算是为后续的维护、优化做一下前期准备。        工具的整体架构其实很简单,划分如下几个模块:‘executor’:创建发送线程‘sender’和接收线程‘...

2018-09-04 16:56:27 717

原创 编程基本原则 —— 避免冗余代码

        最近组内做代码评审,看到了如下一段代码,这段代码从功能上、甚至效率上来讲都没有问题,但从可读性和可维护性来讲,可优化的地方显而易见:函数‘foobar’接收‘op_type’为输入参数,该函数的调用完全可以放在整个switch之后,做一处调用即可,这样后期‘foobar’有任何变化,这段代码只需相应修改一处代码即可。        这段代码出自一个有几年工作经验的程序员之手,实...

2018-08-31 09:29:15 4277 3

原创 C语言项目代码覆盖率实践

去年换工作到了一家做交易的公司,动辄都是上百万千万的交易额,核心系统使用C语言开发的,但是竟然没有自动化测试工具。也许上家公司GTest给惯坏了,没有自动化测试总感觉像是在裸奔……于是,利用零碎的空余时间,带手底下的一个外包利用已有的手工测试工具,搭了一个自动化测试工具出来。工具好之后,恶补一段时间测试用例后,开始考虑需要检查一下加了几百个测试用例,到底覆盖率大概有多少了。网上搜索一番,原来gcc...

2018-07-14 20:21:08 3285

原创 再看敏捷开发 - 是不是你的那道菜

 敏捷开发好还是不好,估计会像C与C++、C++与Java哪个更好那样一直无休止地争论下去。其实,好或不好关键还要看是不是你的那道菜。   从公司搞大跃进式地敏捷开发开始,一直从一个程序员的角度看敏捷开发,对...

2018-07-13 12:37:42 358

Hadoop权威指南第二版(中文)

Hadoop权威指南第二版,中文清晰版,有标签。

2014-04-23

《Hadoop权威指南》第二版(中文)

Hadoop权威指南第二版,中文清晰版,有标签。

2014-04-22

设计模式:可复用面向对象软件的基础

好书就不必多说了! 设计模式这个东西值得好好研究研究的!

2008-10-08

空空如也

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

TA关注的人

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