自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张巩武

专注后端系统开发

  • 博客(24)
  • 资源 (1)
  • 收藏
  • 关注

原创 后端系统开发之巧妙的双buffer技术

软件开发过程中总会遇到这样的需求或想法:如何在程序不重启的情况下,让某个配置参数动态生效?不重启程序的原因有很多,例如程序分布在几十台甚至成上百台机器上,或者重启服务需要复杂的审批流程,重启代价很高;而配置参数在设计之初就预料到会被经常修改,例如黑名单或白名单配置,或者是一个经常被修改的普通配置文件。我们知道,为了保证程序运行效率,程序在启动时会将配置信息加载到内存中使用,不会每次都请求数...

2019-03-06 00:49:36 2066

原创 后端系统开发之如何选择公司和工作

互联网行业的寒冬还在继续,滴滴宣布今年准备裁员2000人,现有13000人左右,裁员比例接近1/6,相当残酷。​当一家企业经营不达预期时,通常都会砍掉不赚钱的业务,精简人员,以求自救。选公司就像选股票,需要我们冷静思考,擦亮眼睛,尽量避免职业生涯上的选择不慎。整理去年的工作笔记时,在记事本上发现一段有意思的记录,标题是"了解一个公司",当时是在跳槽找工作时写的,因为面试官都喜欢问面试者"你...

2019-02-28 01:15:04 596

原创 在线服务内存使用率涨到100%如何排查?

上周我们的在线服务程序忽然开始出现内存异常现象,程序的内存会在某个时刻起突然上涨,内存使用率一直涨到100%。我们做了几项针对性的排查:检查程序最近上线内容、使用问题机器的请求日志进行线下反演、登录异常机器查看gstack等,均未能找到问题原因。周五晚上和周六早上问题开始变得很严重,有几十台机器频繁出现内存异常告警,虽然这些机器在内存使用率上涨到100%后,程序过段时间会自动重启,但还是很影响...

2019-04-03 23:46:31 2504

原创 开发过程中如何避免踩坑?

互联网公司的业务需求很多,前人挖坑后人填,后人填坑不慎又掉进更深的坑。没有人愿意走坑坑洼洼的路,但是常在河边走,哪有不湿鞋的道理,如何避免掉坑,是每个职场上生存的人都该学习和思考的。开发阶段问题总是暴露的越早越好,能在开发阶段就发现bug是最理想的情况。我从"上线检查checklist"中领悟到了"开发设计checklist",即在设计和实现的时候要考虑到业务系统的复杂性,尽量把新代码的影...

2019-04-03 23:41:55 791

原创 工作和面试中的系统架构(上)

金三银四,跳槽和招聘旺季,分享一个程序员面试中经常被提问的问题:你所在公司的系统架构是什么样的?想象一下,此刻你面前坐的是一位脸带笑意的面试官,他把一张空白的A4纸和一支黑色签字笔推到你眼前,"在纸上画下你们公司的系统架构吧。"通常来说,大吹特吹系统架构多么高大上可能会被当场揭穿,觉得没啥可讲的敷衍了事必然被直接PASS。准备好了吗?这里分享一个简单易行的方法:按照由外入内,从大到小的顺序...

2019-03-24 16:56:33 2174 2

原创 后端系统开发之工作和面试中的字符串

软件开发过程中会遇到形形色色的字符串处理问题,例如数字和字符串之间的格式转换、字符串去掉前后空白字符、从一个特定格式的字符串中提取字符串等。上面这些函数通常会出现在各大公司的基础库中,使用起来非常方便。今天要分享的是一个去掉字符串结尾换行符的小技巧,C++11提供了back()函数用于返回最后一个字符,以及pop_back()函数删除最后一个字符。因此去掉字符串结尾换行符可以写的非常优雅:...

2019-02-28 23:50:18 148

原创 后端系统开发之技术方案写作

软件开发除了编写代码以外,还有一项重要的工作技能是写技术方案。技术方案通常用于同事之间的沟通和交流,一个好的技术方案应该有背景介绍和明确的目标,以及具体的实现思路。背景往往是为了引出目前存在的问题,因此可以围绕问题的发生条件和影响来介绍背景。目标是整个方案的核心,如果目标存在问题,例如目标价值不大或无法实现,或者目标会损害他人利益,那么整个方案注定会遭遇挑战。实现思路即具体的解决方案,...

2019-02-28 01:23:12 3405

原创 后端系统开发之工作和面试中的gdb

gdb是C/C++程序员必备的专业技能,工作中gdb最常用的场景有两个,一个是分析core文件,另一个是调试程序。分析core文件的方法如下:1、gdb 程序名 core文件名2、bt或where命令查看堆栈信息。3、进入某个栈:f N,f是frame的缩写,N是栈号,如0、1、2、3...进入到某个栈后,才能通过p命令查看这个栈的临时变量,否则只能查看全局变量。...

2019-02-27 01:20:51 700

原创 后端系统开发之解决历史bug

背景:系统里上游模块A会下发一个参数exp给下游服务B,由于这个参数exp长期未使用,一直无人关注,最近有同事设计的方案需要用到参数exp,却发现exp未生效。(历史BUG能一直存在的前提:无人关注和使用)第一次排查:观察A的请求日志,发现A在请求下游服务B之前有参数exp,因此怀疑是服务B出了问题。查看B的代码,果然有一处非常明显的BUG,原来exp被其他参数覆盖了!(怀疑+验证是排查问题的...

2019-02-24 23:18:46 281

原创 有哪些值得一读的理财启蒙书

我读过的第一本理财启蒙书是《富爸爸,穷爸爸》,作者是一名拥有传奇人生的美国人罗伯特清崎,书中介绍的理财知识非常震撼:作者有两个爸爸,富爸爸是一个没有读过大学的当地巨富,穷爸爸是一个拥有博士学历的大学教授,作者告诉人们:智商和财商完全是两码事,提高财商需要主动学习会计、投资、市场、法律这4方面的知识。富人偏爱房地产投资,其要领是坚持低价买入,例如购买企业破产被银行拍卖的房子,买入价格决定了收益高低。...

2019-02-22 01:21:36 630

原创 后端系统开发之白名单机制

后端系统中经常会听到“某某白名单”的名字,为什么要有白名单呢?使用白名单机制有什么好处?一首脍炙人口的儿歌可以帮我们领悟答案。“小白兔乖乖,把门儿开开。快点开开,我要进来。不开不开就不开,妈妈没回来,我就不开门。”小白兔的妈妈在能开门的白名单里。显然,白名单机制是一种简单易行的系统自我保护机制,没有白名单的“开门系统”存在严重的安全隐患。在大型后端系统中,白名单机制是必不...

2019-02-22 01:18:25 3565

原创 后端系统开发之JSON技巧

最近在做系统模块重构时遇到一个小问题:如何将一个带格式的JSON字符串转换成不带格式的、“拉平”的JSON字符串?在解决这个小问题时花费了不少时间,请教了好几个同事。因此感觉很有必要写文纪念一下,让后人少走一些弯路,同时也对JSON使用经验做个总结。学习任何技术本质上都是在学习它的历史,JSON是如何产生的,最初用于解决什么问题?JSON(JavaScript Object Notatio...

2019-02-19 22:50:38 524

原创 后端系统开发之懒人思维

最近在研究程序运行方式的技术细节,看了一个让程序以daemon方式运行的函数,内部调用了fork、open、dup2等函数,约有20行代码,看完csdn一篇博客后发现,其实这个deamon实现并不严谨,而且可以直接调用unistd.h头文件中的daemon函数,于是忍不住感慨,勤奋的程序员会重复造轮子啊。开发的时候还是得有"懒人思维",尽量避免重复造轮子,优先考虑使用系统调用、各种公共库函数、...

2019-02-19 22:43:01 382

原创 后端系统开发之异常情况处理

智者千虑,必有一失。异常情况总是存在的,我们考虑不到全部场景。美剧《越狱》中精心策划一切的男主也做不到,例如男主意外烫伤导致纹身地图被毁。面对异常我们通常有两种选择,要么让它core掉,要么继续处理。程序core掉的方法可以通过glog的FATAL级别日志,或者调用abort函数等方式终止程序。core掉的好处是很明显的,它能将严重的错误及时暴露出来,以便及早处理。后端系统通常都设计有容错冗余...

2019-02-17 22:54:48 1546

原创 后端系统开发之工作和面试中的单例

单例是什么?单例是一种特殊的类,用于确保只有一个对象,同时提供一种全局访问这个对象的方法。最近在工作中体验了一把5分钟将一个类改造成单例,感觉还是蛮不错的,所以我决定写一篇文章,跟大家交流技术和经验。单例的原理是利用C++中的静态成员变量和静态成员函数,同时禁用构造函数的方法,达到只有一个对象实例的目的。具体来说,设计一个单例的要点如下:(1)类的静态成员变量是该类的指针。(2)类的静...

2019-02-17 22:48:57 311

原创 Go语言相对于C++的优点

Go语言是Google公司在2009年开源的一门高级编程语言,它为解决大型系统开发过程中的实际问题而设计,支持并发、规范统一、简单优雅,被很多Go语言传道者誉为“互联网时代的C语言”。而C++语言诞生于1979年,可以将C++语言视为一个语言联邦,主要包含C语言(面向过程)、面向对象、STL容器和算法、范型编程(模板)4部分,它高效强大同时又臃肿复杂,目前最流行的是C++11标准,它的很多优化为C...

2019-02-17 22:40:22 5865

原创 后端系统开发之检查意识

生活中要有常识意识,行走在外要有交通安全意识,竞技游戏中要有参战和逃命意识。软件开发作为一项极易踩坑而且犯错成本很高的工作,一定要有强烈的检查意识。我在工作中发现,检查意识能带来很多明显的好处:检查代码可以加快开发完成时间。大型的C++工程中代码编译速度很慢,短则几十秒,长则十几分钟。因此写完代码就直接编译是非常错误的选择,应该首先由开发者检查代码,解决显而易见的错误,然后再进行编译。理想...

2019-01-26 20:12:42 267

原创 后端系统开发之protobuf使用技巧和经验

Google protobuf是非常出色的开源工具,在项目中可以用它来作为服务间数据交互的接口,例如rpc服务、数据文件传输等。protobuf为proto文件中定义的对象提供了标准的序列化和反序列化方法,可以很方便的对pb对象进行各种解析和转换。以下是我总结的protobuf使用技巧和经验,分享给大家。技巧1:使用optional而不是required字段。protobuf的可选字段op...

2018-10-04 15:03:55 1255

原创 后端系统开发之紧急业务开发

最近经历了冰火两重天,上周还可以不紧不慢的开发功能和学习技术,本周突然就被卷入到一个紧急业务的开发之中,要求在这周五开发完成一个全新的后端业务,具体包括制定上下游服务接口、设计后端系统业务流程、开发代码和测试通过,以便在周末和测试同学一起进行紧急测试,这是背景。这个项目的挑战在于业务十分紧急,留给产品、开发和测试的时间都非常紧张,有多个模块之间需要联调,因此经验丰富的大佬们很快定下3个原则:...

2018-10-04 14:59:54 324

原创 后端系统开发之面试和工作中的map

map是C++ STL中的关联容器,存储的是键值对(Key-Value),可以通过key快速索引到value。map容器中的数据是自动排序的,其排序方式是严格的弱排序(stick weak ordering),即在判断Key1和Key2的大小时,使用“<”而不是“<=”。map 使用二叉搜索树实现,STL map的底层实现是红黑树。map有几个值得注意的地方:map的赋值运算是深拷...

2018-09-03 18:21:33 446

原创 后端系统开发之面试和工作中的线程池

线程池是一种很经典的技术,在后端系统中很常见。线程池的常规做法是提前创建好一组工作线程,然后将任务分发给这些工作线程来处理,这样就避免了频繁的线程创建和销毁,同时也能很好的控制线程数量。线程池本质上是一种池化技术,利用空间来换取时间。线程池技术已经存在很多年,在面试的时候被问到的概率很高,在工作中也非常有用。首先来看面试中的线程池,通常面试官会提问线程池的目的和原理,如果面试时间充足的话,恭喜...

2018-08-26 21:45:55 263

原创 后端系统开发之gflags使用规范

任何好用的工具如果使用不当都会带来不好的后果,gflags也是一样。我遇到过一些gflags的“坑”,还从领导和同事那里获得一些好的想法,整理成7条gflags使用规范。有意识的遵循这些规范,对项目的开发维护和自身的技术成长都将有很大的益处。规范1:bool类型的gflags默认值设置成false,防止误启用新功能。新的功能上线一定要经过代码审查、测试和验证流程,默认为true的gflag...

2018-08-26 21:31:40 419

原创 后端系统开发利器之gflags

简介gflags是Google的一个开源项目,用于解析程序运行参数。gflags简单易用,它的好处在于统一配置格式,减少开发工作量。在工程实践中,gflags在简化开发和测试方面表现非常出色,它还有一个很棒的功能是支持多人合作开发。gflags在2008年首次推出,至今已有10年时间,目前有很多公司都在用gflags。使用下面的例子简单展示了C++语言中gflags的基本用法。si...

2018-08-17 13:55:26 3037

原创 一个fopen失败的原因

fopen("path//file_name", "r")中只有当路径和文件名都存在时,就能正常打开。但今天遇到一个很令人纠结的问题,我写的程序在启动时自动载入文件,fopen没有问题,双击列表控件LIST可以重新载入不同的文件,也没有出现问题,可是再调用过GetOpenFileName(Windows打开文件窗口)打开一个文件之后,再调用fopen就会报错。    难道是Windows API函数GetOpenFileName和标准C语言函数fopen发生冲突吗?    把代码反复看啊改啊弄了一个

2011-04-29 22:19:00 17972 5

《编程接口指南》Solaris官方文档

《编程接口指南》Solaris官方文档,其中第7章进程间通信和第8章套接字接口非常有学习价值。

2014-09-09

空空如也

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

TA关注的人

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