- 博客(34)
- 资源 (19)
- 收藏
- 关注
原创 printf("%02x\n", c) 之坑------浪费0.5小时
实际上, 在不久前, 我聊过这个, 为了再次强调(因为踩了坑, 浪费0.5小时), 故再次来玩一遍:#include using namespace std;int main(){ char c1 = -1; printf("%02x\n", c1); // ffffffff char c2 = 250; printf("%02x\n", c2); // fffffffa p
2016-06-30 23:24:52 13586 7
原创 自己生成随机序列号, 便于串起来
我们知道, 后台基本上可以大致分为接入层, 逻辑层, 存储层。 现在要在三层都记录流水操作。 每次请求对应3条流水信息, 但是, 当多次请求在很短时间内进行时, 流水的顺序会被打乱(网络流水涉及到网络操作, 先发送的, 不一定先到达流水机器), 那怎么办呢? 我的思路是: 在每次之间透传序列号, 这个序列号可以认为随机生成, 请直接看上篇文章讲述的linux下生成随机数的方法,
2016-06-29 23:39:23 11164 1
原创 用srand, rand产生的随机数有隐患------还是用利用linux的/dev/urandom文件产生随机数吧
我们知道, rand是伪随机的, 每次都会产生相同的序列(因为种子相同), 而srand可以产生种子, 我们经常用srand(time(NULL))来产生种子, 当种子随着时间变化时, 就会产生不同的序列, 然而这就够了吗? 今天碰到这样一个问题: 在很短时间(比如1s)内, 需要产生较好的随机数, 此时用srand(time(NULL))是失效的, 因为ime(NULL)的值
2016-06-29 23:31:27 9724 1
原创 淡疼的itoa和abs: 'itoa' was not declared in this scope; 'abs' was not declared in this scope
本来今天就被几个问题折腾得够呛, 结果下午写代码, g++又提示我:'itoa' was not declared in this scope, 尼玛, 我用itoa怎么啦? 后来发现:itoa函数不是ANSI(American National Standards Institute) C的标准, 应该避免使用这个函数. OK, 是我糊涂了, 居然想着去用itoa这么危险恶心的非标准函数,
2016-06-29 23:20:28 14440
原创 bufToHexStr的C++实现------将buffer转为对应的16进制形式(与坑同在)
bufToHexStr还是很常见的, 也非常常用, 写个代码玩玩(别乱拷贝如下代码):#include #include using namespace std;string bufToHexStr(const char *pBuf, int bufLen){ if(NULL == pBuf || bufLen < 0) { return ""; } int i = 0; string
2016-06-26 23:24:51 9892
转载 为什么寄存器比内存快?
转载地址:http://www.ruanyifeng.com/blog/2013/10/register.html作者: 阮一峰日期: 2013年10月14日计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。同样都是晶体管存储设备,为什么寄存器比内存快呢?
2016-06-25 23:37:25 9197
原创 用内存做缓存
先看这样一个问题, 客户端需要前后三次请求服务端, 但在第三次请求的时候, value3的值可能为空, 也就是说, 会有大量无效的请求, 浪费网络流量和带宽, 那怎么优化呢? 可以采用缓存的思路, 先把value3是否存在的标示flag在value2中附带过去, 缓存在client端。 在client发key3的请求前, 先判断这个flag的值, 挡掉无效的网络请求。 思路很简单,
2016-06-25 23:35:20 9620 1
原创 cache(缓冲)是一个广义的概念
在以前面试的时候, 经常会遇到这样的题目, 以至于有些宁愿背诵下来: 今天, 我们就不说题目了, 而是来说说缓存(cache). 我快研究生毕业的时候, 第一次听说了cache命令率这个词, 听着学计算机的同学讲这个东东, 瞬间觉得高大上, 其实也不过如此。 上图中的cache是非常狭义的, 其实, cache是一个非常
2016-06-25 23:23:08 7535
原创 那点代码, 谁都会写!------以后我会在博客中多加入一些思路方面的东东, 少写一些实际的代码
我在第一家公司工作了两年, 当时非常注意代码的各种规范。 公司要求代码必须符合各种规范, 各种圈复杂度, 各种安全函数, 各种静态检查, 动态检查, 各种review, 各种提交前的本地构建, 如此等等等等, 后来我就有代码洁癖了, 仿佛感觉搞软件就是搞代码。 而且, 思维也依赖于僵化式的流程。 后来入职了现在的公司, 发现有很多不一样, 少了很多限制, 灵活性大了很多, 老板不
2016-06-25 21:48:01 7322 2
原创 map如何按value来排序------用带pair的vector吧
我们知道, map是按照key来排序的, 那么, map如何按value来排序呢?------用带pair的vector吧。 看代码, 不说话:#include #include #include // pair#include #include using namespace std;bool comp(const pair &a, const pair &b){ r
2016-06-25 21:11:34 8022 1
原创 做好参数校验, 不要过分信任前端传过来的值
最近遇到这样一个问题, 后台服务的某接口收到了异常的参数值, 导致后端服务异常。 而在用户正常访问的情况下, 前端肯定会进行参数校验的, 那为什么传到后端的参数是异常的呢? 原来, 不仅是前端在调后台服务, 某些坏人也经常来刷后台的服务, 妈蛋。 其实, 对于每一个参数输入, 咱都不要过分信任, 全面校验, 没有坏处。 再也不怕坏人刷刷刷了。
2016-06-25 20:47:56 9482 1
原创 source很重要
之前做了一个通用的写接口, 每个参数的修改都需要经过这里, 为了方便定位定问题, 我们通常需要知道修改的来源是哪里。 在软件开发时, 其实很大程度上是在维护这套软件, 所以, 要为后续维护做准备。 最近定义一个写接口, 没有注意加source字段, 定位问题的时候, 很蛋疼。 补补补。
2016-06-25 20:39:01 7131 1
原创 循环跑号码包的一个小建议
举个例子, 中国移动要对所有移动用户发送一条消息, 中国移动的程序猿准备些脚本来搞起, 我们看看最简单的方案:for循环一下, 对每个用户发消息。 打断一下, 这里有什么隐患呢? 假设, 该脚本因为某不可抗因素, 中断了, 那怎么知道哪些用户没有送, 哪些用户已经送了呢? 所以, 应该搞个标志位, 发了的记为1, 每次发送前, 检查一下。 标志位怎么
2016-06-24 22:13:55 7262 1
原创 栈溢出导致的core dump的定位------千年等一回
某服务在跑的时候, 从来没有core dump过, 某次, core dump了。 老大收到core dump告警后, 在群里贴了一下, 我开始着手定位。 这是个低概率的core dump, 重现原来问题几乎没有可能。 那就去看core吧, gdb xxx core一下发现, 程序core在一个字符串处理的地方, 但是, 无法进一步知道更具体的原因。 为了简便起见, 我对原来的
2016-06-24 22:07:17 10586 1
原创 何时更新缓存?
缓存是为了有更快速的访问, 那一般什么时候更新缓存呢? 如果需要拉取到实时信息, 那么每次写操作, 都要更新一下缓存, 如图: 如果不需要拉取到实时信息(比方说, 这个信息并不经常变动, 如年龄, 生日), 那么可以这么搞:
2016-06-20 23:56:47 8349
原创 缓存的本质是什么?
缓存的本质是让热数据接近目的地, 用简单程序结束本文:#include int a[100] = {0}; // 缓存int jieCheng(int n){ if(0 == n || 1 == n) { a[n] = 1; return a[n]; } if(0 == a[n]) { a[n] = n * jieCheng(n - 1); return a
2016-06-20 23:30:52 7805 5
原创 推写拉读
很多事情,只要把本质弄透彻, 其余的都是细节了。 正如爱因斯坦所说: 我需要知道的是宇宙的设计理念, 其余的都是细节。 比如说网络编程, 其本质是buffer内容的传递。 在后台开发中, 也就是推拉读写了, 这是我的感悟。 刚喝了一瓶啤酒, 头还没晕, 但愿不是胡说八道。
2016-06-19 22:52:27 7216 1
原创 第一次去游泳
昨天第一次去游泳, 和老伴一起, 我们都不会游泳, 但在好友的帮助和陪伴下, 我们感觉还是很安全的。 老伴学会了憋气, 我大概能游15米左右, 虽然动作很不标准。初学游泳的时候, 最重要的是安全。 第一次在1.2米的水中, 水的感觉很奇妙, 并不如我想象的那样。 我最开始以为, 1.2米嘛, 我站起来水只能到胸前,没有什么危险, 其实不是的。 如果不熟
2016-06-19 22:18:20 7243 1
原创 六年级数学期中考试只考了88分, 但试卷被老师写下:Good! very good!! very very good!!!
我读小学六年级的时候, 数学老师是夏老师, 人很严, 不过本文暂时和他没有什么关系。 那是一次期中数学考试, 最后一题, 我用了初中的二元一次方程组(初一才学)解决了一个应用题, 结果不知被哪位老师在最后写下:"Good! very good!! very very good!!!". 那时候, 我并不知道这些英语的意思, 后来问了读初一的姐姐, 才知道的。 ...
2016-06-18 18:26:39 10808 15
原创 3分钟搞定杀手级的coredump问题
刚入职的时候, 遇到了一个必然出现的coredump问题, 当时查代码, 完全正确, 某哥在帮我调试, 后来我也没有改什么代码, 也不知道怎么滴, 那个coredump问题居然就消失了。 当时没有搞明白, 反正没有coredump了就OK了. 现在想起来, 呵呵哒。 后来, 就生硬地有碰到了类似问题, 花了一下午的时间, 独立搞定。 请见:http://blog.csdn.net/
2016-06-17 23:35:20 8580
原创 重启是“万能”的
之前说过后台某台服务的内存泄露问题, 如果实在解决不了, 那就定时重启呗。 后台服务那么多, 重启一个没啥问题。 最近, 工作得好好的某服务器出现了dumping message, 消息队列中的消息处理不及, 出现大量超时, 当时我的处理方式是将机器上的服务做下线处理, 也就没有超时问题了。 其实, 后来发现, 重启一下服务就可以了。 对于这类非常见问题, 能定位出来更好, 但能回
2016-06-17 23:20:04 7562 1
原创 linux中的wget命令
最近, 某同学给我一个url : http://xxx/xxx/xxx.js, 我要把这个下载下来, 哎哟, 还在那里思考怎么去下载, 是登录到对应的机器上取吗? 是用迅雷吗? 我晕, 还是用linux的wget命令吧“: wget http://xxx/xxx/xxx.js 当然, 要注意, linu机器必须要能解析这个域名哈。
2016-06-13 23:35:35 7422
原创 求椭圆的切线方程------很有对称美
最近高考, 我在家闲着也是无聊, 来搞个题目玩玩, 虽然十年过去了, 但宝刀不老, 数学不在话下哈, 来看看椭圆切线:
2016-06-10 22:25:54 23217 3
原创 《解密中国女CEO董明珠》米晓海
听说我欣赏董阿姨, 老伴就给我买了这本书。 书没啥内容, 和常规的商业书一样, 就是扯, 以后不看类似的书了。
2016-06-09 22:27:27 8042 1
原创 《X光下看腾讯》 蓝狮子
今天端午节, 也出去玩了一下, 回来顺便finish了之前买的一本书。 OK, 看完了, 不想写读后感, 没啥想写的, 就说这么多。
2016-06-09 21:50:00 7874
原创 ascii控制字符(不可见字符)和可打印字符(可见字符)------浪费15分钟的一次经历
系统工作得好好的, 但某次却异常, 花了十多分钟, 才定位出是加载文件中包含了不可见字符导致的。 最后解决方法是: 增强系统的兼容性。 今天我们来聊聊ascii控制字符(不可见字符)和可打印字符(可见字符), 以后碰到类似问题就很敏感了。 网上有人说, 可以用printf来判断字符是否是可打印字符, 这不是扯淡么? 我在VC++6.0下试了一下,...
2016-06-09 09:36:10 55907 5
原创 两次碰到编译错误: crosses initialization of...
在实战中, 遇到过两次crosses initialization of... 编译错误, 这很easy啦, 两次的原因分别是: 1. switch的case中有定义变量 2. goto跳过了变量的定义 简单, 解决办法也很简单, 仅作备忘。
2016-06-09 08:48:03 16525 1
原创 const导致的编译错误, 浪费了10分钟
最近写了几个函数, 参数我是用const的, 但调用更底层接口的时候, 接口中对应的参数没有const, 结果编译错误cannot find ... 居然花了10多分钟才看出问题, oh, my god. 算好, 对const的用法比较熟, 不然就呵呵哒了。 先来记录一下, 以后1分钟搞定啦。
2016-06-09 08:40:32 7941 1
原创 C/C++中的%010u是个什么东东?
遇到这样一个小需求, 需要将无符号的整数(最大值是4294967295, 是个10位数)转为字符串, 不足10位时, 前面补0. 比如:0000000000 0000000001 0000000002 0000000003 0000000004 0000000005 0000000006 0000000007 000000000
2016-06-05 12:12:07 11460 1
原创 传p还是传*p
刚学指针那会儿, 没太搞明白p和*p的区别, 后来搞清楚后, 发现这个东西确实是太简单了。 在实际生活中, 有很多类似的例子: 某某某是收藏某片的高手, 收藏了很多很多, 大家都找他要资源, 他怎么提供资源呢? 有两种思路: 1. 分别把资源传给每个人, 也就是提供*p 2. 建立一个资源共享区, 提供p, 大家根据这个p(在本例中指url)
2016-06-05 11:17:31 7399
原创 C/C++为什么要短路求值?
我们知道, 在C/C++中有短路求值机制, 那为什么要这么做呢, 我自己思考,有两点: 1. 效率 2. 代码的优雅 如下:#include using namespace std;int main(){ string s = "abc"; if(!s.empty() && 'a' == s[0]) { cout << s.c
2016-06-05 10:56:41 8867
原创 http的refer头------说说最近遇到的http 403错误
最近遇到这样一个问题, 用php吐出html, 在html中, 用<a>指向了一个视频资源的url, 但是, 当去点击这个链接的时候, 视频的url地址出现在浏览器新窗口的地址栏中, 只是没有播放, 抓包看了一下, 原来, 在访问url时, 对端返回403错误码。 然后我在浏览器地址栏中按一下enter, 就可以播放了。 奇怪了, 为什么从anchor进去的url无法直接播放呢? 于是, 我把页面对应的html代码复制, 保存在PC桌面上的test.html中并在浏览器中打开, 然后
2016-06-01 23:41:45 10707 1
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关注的人