- 博客(49)
- 资源 (19)
- 收藏
- 关注
原创 用简单的方法实战演练搭建http服务器(Windows上)------专为http新手
在之前的博文中, 我陆续说过如何搭建ftp, sftp, tftp服务器, 在本文中, 我们来继续聊如何实战搭建一个http服务器。 http服务器有很多种, 如tomcat,apache等, 然而, 很多新手无法搭建和配置成功, 颇为受挫, 内心不爽。 我保证, 本文搭建http服务器的过程极简化。 搭建http服务器的步骤: 1. 下载
2016-11-25 14:14:16 41050 10
原创 sort | uniq -c | sort -rnk 1 在数据统计中的重要用途------按频率排序
我们来看看a.txt文件:taoge@localhost Desktop> cat a.txt1234561111456123123123taoge@localhost Desktop> 先对其排序(按串排序):taoge@localhost Desktop> cat a.txt | sort1111112312312323456456
2016-11-20 13:02:59 25246 6
原创 awk、sort等命令搞定几十行代码C++做的事------用好工具, 事半功倍
在后台开发中, 经常遇到服务波动的情况, 一般来说, 在监控系统中可以看到这种波动, 那是否与我们机器上的错误log对应起来了呢? 我们有必要对机器上的错误log进行统计! 规范log中一般会有时间, 假设时间格式为: xxx[2016-11-20 hh:mm:ss]yyy, 那么怎样统计错误log是否集中在某以时间段呢? 写个C++程序吧: 结果:
2016-11-20 12:35:19 7950 3
原创 如何用程序判定点是否在线段上?
之前说过点在直线上的判断, 用面积法。 那么如何判定点C是否在线段AB上呢? 1. 判断C是否在直线AB上 2. 判断Xc和Xa, Xb的大小关系 3. 判断Yc和Ya, Yb的大小关系
2016-11-20 10:36:35 10431 1
原创 去看刘晓庆演的话剧《武则天》
去看刘晓庆演的话剧《武则天》, 见到了刘晓庆本尊了, 演出非常成功。 刘晓庆的人生, 和武则天一样, 都是传奇!
2016-11-19 22:56:43 7549 1
转载 有趣的问题:C的表达式x == x,何时为假?!
转载地址:http://blog.chinaunix.net/uid-23629988-id-3126229.html作者:[email protected]博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归[email protected]所有,使用GPL发
2016-11-19 17:54:03 7259 2
原创 如何用程序判定三点是否共线?
如何用程序判定三点是否共线? 别扯什么线性规划、直线方程, 不好操作啊, 还要分类讨论。 其实很简单, 只需要判定这三点组成的“三角形”面积是否为零! 有兴趣的朋友可以写程序代码来玩玩, 我之前写过了。 PS. 已知三点, 求面积很简单, 直接海伦公式搞起。
2016-11-19 16:24:00 14825
原创 《ACM程序设计》 曾棕根
我没参加过ACM, 也没有玩过ACM, 当初纯粹是为了兴趣, 才买这本书的, 而且这本书满是程序, 是我的菜。 这本书的前面章节把常用的STL都讲了一遍, 虽然基础, 但非常不错。 我目前工作中用到的STL也都是这些! 书中后面主要是习题的演练, 很多思路都很不错, 能学到不少东西。 建议刚学C++或者想玩ACM的同学, 可以好好玩玩这本书。 今天在家, 顺手拿起这
2016-11-19 16:06:55 8670 1
原创 《linux C从入门到精通》 xx科技
这类书的题目简直是噱头, 明明就只是入门而已, 谈何精通? 而且这些书都鲜有作者自己的思考, 无非就是拿网上的东西进行复制粘贴而已, 没有什么营养价值。 makefile那一张, 从网上拷贝了不少东西吧, 作者们? 好处就是比网上那些东西会正式一点点, 而且比较集中, 省去了在网上找这些东西的时间。 没事, 我当年接触linux C, 买这本书, 就是买来做科
2016-11-19 12:30:11 10871 9
原创 测试环境server的全量流水------节省了90%的时间
刚来公司的时候, 每当测试同学提一个bug, 我就去下载对应的app来重现, 各种蛋疼和浪费时间。 其实, 只要流水和log足够完善, 还怕啥? 后来做需求联调的时候, 由于整个线路比较长, 经常跟别的同学说, 你操作触发一下, 我来抓个包和log。 后来, 我发现这种方式真是太低效了, 完全是体力劳动啊。 反馈问题迎接不暇的时候, 整个人都崩溃了, 整个人都不好了。
2016-11-19 11:49:41 7140
原创 你应该在makefile中加上ldd -r和md5sum命令
在linux中, 当我们编译出so的时候, 会经常用ldd -r去查看依赖库(确实是否缺依赖, 便于在编译期间发现问题), 也会用md5sum命令来查看so库的md5值, 便于比对和确认。 别浪费体力每次去敲这两个命令了, 直接放在makefile中吧, 这么搞起后, 不用每次敲命令, 不用每次去找so库的路径, 每次至少省下10-20秒中的时间, 关键是, 心情爽爽哒。
2016-11-19 11:42:27 7773
原创 搭建环境时遇到core dump问题
刚来公司的时候, 需要搭建测试环境, 我部署包后, 不断提示core dump, 吓我一跳。 后来请老鸟帮解决了。 最近又搭建了测试环境, 部署包后, 又是一堆core dump提示, 冤枉不愿望, 我什么都没有做, 什么代码都没有写, 怎么会core dump呢? 原来, 是缺少配置文件, 系统在读取的时候, 找不到文件和配置了, 出错, core了。
2016-11-19 11:38:25 7231 1
原创 昨天听某哥说, 某变量没有初始化, 结果有概率性大坑, 浪费不少时间定位处理!
从入行那一天起, 公司的培训教材就写着变量要初始化, 否则呵呵哒。 在我的老东家, 这种规范执行地非常好。 如果变量不初始化, 会被系统检查出来, 然后责令改正。 但是, 在现在公司, 虽然也有类似规范, 但没有多少人遵守, 也没有人在意地check. 我思考了一下, 在现在“敏捷开发, 小步快跑”的模式下, 快字当头, 谁还在乎这些玩意儿?
2016-11-19 11:33:34 7181 1
原创 系统中负负得正的兼容逻辑也许暂时能跑起来, 但迟早会坑人!
客户端发布后, 一直运行良好, 但实际上有个bug(需要特定时间段才重现)。 后来, 真的就出现bug了, 没办法, 后台兼容处理吧。 两边产生负负得正的效果, 跑起来没问题, 看起来爽得很呢。 但是, 某天, 后台有新同学接手业务, 不知道之前的负负得正的兼容逻辑, 于是在后台代码中写了个正逻辑, 于是产生了负正得负的效果, 然后采坑, 呵呵哒。 我就踩了这个坑!
2016-11-19 11:07:45 7155
原创 不要过分相信基础函数, 因为那也是人写的------警惕负负得正的现有逻辑之坑
同学A调用基础函数, OK. 我调用基础函数,出错! 我的代码如下:#include #include #include #include using namespace std;int basicApi(vector &v, map &m){ vector::iterator it; for(it = v.begin(); it != v.end(); ++it)
2016-11-19 00:11:49 7392
原创 make又一编译错误: cannot find -lxxx
说来也怪, 我明明在LIB中增加了这个库: LIB += -L../../.../ -lxxx , 且在对应目录有libxxx.a库啊, 但是却提示:cannot find -lxxx, 我的编译命令为: g++ $(CXXFLAGS) $(INC) $(LIB) $(CPPLIST) -o test.so , 于是, 我尝试把$(LIB)调整到最后, 居然就可以了。
2016-11-14 07:46:34 8268 1
原创 该写地址的地方, 却写了变量本身, 产生core, 导致系统异常
本来接口是: int fun(ST* ps, uint8_t * pb, int32_t * pi, char *p); 结果我在写第三个参数的时候, 直接把整数放在那个地方, 由于调用时, 我进行了int32_t*强转, 所以没有编译错误。 不过, 运行的时候, 呵呵哒了, 经定位core, 才发现是上述问题。
2016-11-13 15:52:51 6996
原创 对序列化后的buffer进行strlen操作, oh my god
最近找到一个服务框架, 我在里面写了几行代码, 进行序列化, 然后就没有达到我的预期结果, 跟踪了一下, 发现原有代码对序列化后的buffer进行了strlen操作, oh my god. 难怪解包失败。 实际上, 我们已经聊过类似话题, 请见:http://blog.csdn.net/stpeace/article/details/53046829 对
2016-11-13 14:40:11 7111 1
原创 makefile写错(多了.a)导致了cannot find -libtest.a------耗费10分钟才找出原因
对于cannot find -libtest.a这种编译错误, 我们已经说过多次, 直接去找对应的库文件为什么不存在即可。 最近写makefile, 出现了这个提示, 让我哭笑不得, 搞了10多分钟才查出原因。 明明test.a文件存在于对应目录吗, 怎么找不到呢? 原来, 我用-L指定的时候, 出了问题, 我是这么写的: LIB += -L ../learn -l
2016-11-13 14:22:27 7438
原创 log调试利器------__TIME__, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__搞起
来来来, 一起写个比printf更详细的log api接口:#include #include #include using namespace std;#define DEBUG_LOG(...) debug_log("DEBUG", __TIME__, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)void debug_log(
2016-11-13 00:49:59 8598
原创 空格之坑------调用系统函数错误, 那是你自己的问题哈
最近部署一个日志工具, 启动工具进程, 输入参数的时候, log显示参数解析错误。 我有两个疑问: 1. 以前是好好的啊? 怎么现在会有问题呢? 2. 解析参数是基础系统函数做的, 怎么会出错呢? 麻蛋, 不卖关子了, 经定位, 发现在命令行输入参数时候, 前面多了个空格, 我靠
2016-11-12 11:02:42 7168
原创 如何把当前目录下的所有.c文件转化为对应的.cpp文件?------makefile的另类用途
如何把当前目录下的所有.c文件转化为对应的.cpp文件? 想了一下, 貌似不太好搞, 那就用makefile吧。 请参考之前的博文: http://blog.csdn.net/stpeace/article/details/53054679
2016-11-12 02:34:45 11120 1
原创 cp时请考虑软链接------肯定有人在这里踩坑
cp目录的时候, 软链会保存, 如下: taoge@localhost Desktop> ll linktotal 0-rw-r--r-- 1 taoge users 0 2016-11-10 23:06 a.txtlrwxrwxrwx 1 taoge users 5 2016-11-10 23:07 b.txt -> a.txttaoge@local...
2016-11-12 02:32:47 25837
原创 scp -r拷贝目录(其中有软链)之坑------被404问题折腾一个晚上啊!!!
最近在测试环境搭建一个http服务器, 为了简便起见, 我就直接从外网机器拷贝到测试机, 用的是scp -r命令, 然后糟糕的事情就发生了。 测试环境上有个问题(体现为404错误), 无论如何也调不通, 我怎么想也没有想明白。文件明明存在啊, 访问的路径也正确, 服务器上也接受到了网络包, 服务进程也起来了, 但就是无情得返回404
2016-11-12 02:28:48 19431 2
原创 简单聊一下makefile中的 =, :=, ?=和+=
最容易混淆的是 =和:=, 我们先来看看makefile:x = helloy = $(x)x = worldtest1: test1.cpp @echo $(y) 执行make后, 结果为world, 再看改动后的makefile:x = helloy := $(x)x = worldtest1: test1.cpp @echo $(y) 执行m
2016-11-06 21:09:14 8437 1
原创 makefile中“模式规则“的引入和介绍------%:%.cpp
目录下有test1.cpp,test2.cpp, test3.cpp三个独立文件(彼此之间并无依赖与调用关系), 要编译成三个可执行程序, 怎么搞呢? 我们看看makefile:test1: test1.cpptest2: test2.cpptest3: test3.cppclean: rm -f test1 test2 test3 编译一下:taoge@localh
2016-11-06 16:39:30 14676
原创 makefile中的多target混乱依赖模式
来看个例子, makefile内容为:test1 test2: test1.cpp test2.cppclean: rm -f test1 test2 这是一种非常懒散的写法, 虽然可以work:taoge@localhost Desktop> make cleanrm -f test1 test2taoge@localhost Desktop> makeg++
2016-11-06 15:05:44 8435
原创 为什么执行make命令时, clean后面的命令不会执行?
来看个简单的makefile:test1: test1.cppclean: @echo $(CXX) 执行make命令后, clean后的命令为什么不执行呢? 它本来是要执行的, 但clean作为目标, 没有找到对应的依赖文件, 所以不执行。 那该怎么强制单独让clean后面的命令执行呢? 用make clean吧。 这里要明白, clean并不是makefile中一个规定的名字, 实际上, 你爱怎么取, 就怎么取。 在实际软件开发中
2016-11-06 13:29:54 12946 7
原创 makefile中的默认命令和默认参数------CXX和CXXFLAGS等
先来看makefile:test1: test1.cppclean: @echo $(CXX) @echo $(CC) @echo $(AR) @echo $(RM) @echo $(CXXFLAGS) @echo $(CFLAGS) @echo $(ARFLAGS) 再来看结果:taoge@localhost Desktop> make allm
2016-11-06 13:22:18 17676
原创 入口深, 效率低
很多软件, 把某功能的入口做得很深, 用起来就费劲。一般来说, 如果从主界面开始算(第1层), 一个功能的深度超过3, 我就不太想用了。 很多人的简历啊, 没有把关键信息放在简历文件名字中, 错失第一入口! 在我们工作中也一样, 查找常用资料, 深度最好不要超过3. 这让我想到了冷热数据、缓存, 其实都是一个道理。
2016-11-06 09:51:05 7200
原创 一个rm -rf ???*命令下去, 整个人都不好了
整理linux文件, 发现有个名为"???xxx"的文件, 于是我采用rm -rf ???*来删除, 然后, 整个人都不好了 所幸, 这个目录不是非常致命。 以后用rm一定要谨慎了, 不要用非预期行为。
2016-11-06 09:47:31 11791 4
原创 makefile中命令写在两行和写在一行的区别
来看mafile:main: main.o g++ -o main main.omain.o: main.cpp g++ -o main.o -c main.cppclean: cd test ; pwd cd . pwd 看看结果:taoge@localhost Desktop> make cleancd test ; pwd/home/taoge/
2016-11-06 00:17:04 12276
原创 makefile中“-“符号的使用
在makefile中, -用预告诉make命令忽略错误, 我们来简单看下:main: main.o g++ -o main main.omain.o: main.cpp g++ -o main.o -c main.cppclean: rm main *.o 执行结果为:taoge@localhost Desktop> make cleanrm main *.
2016-11-05 23:09:00 8338 2
原创 make -k(keep going)命令会在发现错误时继续执行(用于一次发现所有错误)
我们在执行makefile进行编译的时, 会经常遇到错误, 然后解决, 然后又make, 然后又发现错误, 然后又解决, 烦人, 能不能一次发现所有错误呢? 能的! main.cpp很简单, 我们只看makefile(故意写成错误的g+++):main: main.o g+++ -o main main.omain.o: main.cpp
2016-11-05 22:55:58 12587 1
原创 make -n(仅列出命令, 但不会执行)用于调试makefile
我们先来看一个简单程序:#include using namespace std;int main(){ cout << "hello world" << endl; return 0;} 然后来看看makefile:main: main.o g++ -o main main.omain.o: main.cpp g++ -o main.o
2016-11-05 22:39:53 9134
原创 无protobuf协议情况下的反序列化------貌似无解, 其实有解!
用过protobuf的人都知道, protobuf的序列化过程是: 协议文件(.proto) + 原始数据 ====》 buffer 反序列化的过程是: buffer + 协议文件(.proto) ===>原始数据 那有没有办法实现:buffer ===》原始数据 呢? 这是一个貌似无解的问题, 其实有解。
2016-11-05 21:36:42 15567 15
原创 一起来看看protobuf中容易引起bug的一个细节
我们已经介绍过protobuf的使用了, 故不再赘述, 下面我们来看看如下代码的一个小bug: test.proto内容为:package NS; message PointReq { required int32 x=1; required int32 y=2; } main.cpp为:#include #includ
2016-11-05 19:59:41 11960 2
原创 我对C++ string和length方法的一个长期误解------从protobuf序列化说起(没处理好会引起数据丢失、反序列化失败哦!)
自认为C和C++基础知识还行, 于是以为下面程序的结果都是3, 看看:#include #include using namespace std;int main(){ char szTest[100] = "abc\0def"; // 右边串提前被'\0'截断 cout << strlen(szTest) << endl; string s; s.assign(
2016-11-05 18:54:11 12926 11
原创 为什么要实现程序指令和程序数据的分离?
就以linux的ELF为例吧, 程序放在text段(你也可以叫它code段), 这是程序指令。 而数据放在data端和bss段, 这是程序数据。 那为什么要实现程序指令和程序数据的分离呢? 1. 程序装载后, 程序指令放只读区域, 程序数据放在可读写区域。 可以防止程序被篡改。 2. 程序指令和数据指令分开, 可以提高CPU对cache的命中率, 集中
2016-11-05 16:19:33 10415 4
linux protobuf安装文件
2016-11-04
linux tree命令的源码
2015-11-01
编译好的openssl库和头文件
2014-12-14
入门数据库sqlite3的最佳实践资料
2014-08-12
在Windows下学习Linux命令
2013-08-08
音频处理软件Gold Wave
2013-07-17
H.264visa软件
2013-07-13
YUVviewer :原始的YUV视频的播放器
2013-06-24
经典的C语言编译器:TC2.0
2013-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人