文档章节

[转]如何写出不可维护的服务端程序

阿信sxq
 阿信sxq
发布于 2015/12/23 22:37
字数 1160
阅读 179
收藏 12
点赞 0
评论 6

        本文是转载,这是原文地址

配置文件篇

1. 配置文件一定要写不只一个

        比如 1.conf,2.conf,3.conf,... 而且这n个配置文件一定要分散在不同的目录下。才能让别人部署移植你这个项目的时候永远也修改不完配置文件。

2. 配置文件的载入一定不要在项目初始化的时候载入

        比如我们这个项目是一个服务,一定要在每次socket请求来临的时候,我们再去读取一遍配置文件,首先这样我们能显著降低本服务的运行效率(磁盘IO的速度你懂的)。

        最关键的是能让别人部署完这个项目的时候,明明配置文件写错了,但是部署运行仍然没有问题, 直到外部请求进来的时候,这个程序才华丽的崩溃掉。让人类知道程序的崩溃是如此的防不胜防。

3. 配置文件的格式一定要惜墨如金,只写value不写key

        比如在如下配置文件

192.168.0.1
10011
192.168.0.2
10012
192.168.0.3
10013

        让别人去猜,这到底是个什么东西,依次到底是哪些调用。 你懂的,预测和猜测都是程序员的必备技能之一,都大数据时代了,没点算命的天赋你以后还怎么搞大数据分析和预测?!

4. 你写的服务要监听的端口一定不要写在配置文件里面,一定要写死在代码里面

        这样,当别人部署你的项目的时候,改完了配置文件,很开心的启动之后发现报错退出。 哦,原来是端口已经被占用。那我修改个端口呗,怎么修改,少年,去慢慢看源代码吧。哈哈哈。

日志篇

5. 一定不要打日志

        打个毛日志?哥在eclipse,vs里面都是直接单步调试,舒畅无比。 什么刚启动加载配置啊,配置文件找不到啊,配置所需要的端口被占用啊之类的错误,都一定不要打出日志。

        什么?每次请求进来到处理完成,都要打一条INFO日志?烦不烦?

        一定要让别人启动整个项目之后,可以看到明明在运行。但是让外界死活调用不了。 打开xxx.log 文件一看,空荡荡,只有一句淡淡的“service started.” 仿佛在诉说着什么。

6. 打日志一定不要暴露时间,文件名等关键信息

        当然要写的模糊一点,要知道如果日志写的太清晰,程序一出错,别人就知道错在哪里。 别人就可以根据错误时间和文件名定位到你的错误代码,这样让你的代码多没面子。

        最好是在出错的地方打出一行”here is wrong.”,深藏功与名。 让接管或者部署你项目代码的人看得泪流满面。

外部依赖

7. 外部依赖一定不要包括进deps/之类的目录下

        别人肯定以为拷贝了你整个目录的代码就可以运行起来,但是你显然不能让他们得逞。 要让他们一运行就报错,让他们知道你依赖了各种牛逼的库,这种库分布在linux各个匪夷所思的目录。

        甚至你的账号家目录是/home/zhangsan/,你硬生生的依赖了/home/lisi/下的xxx.jar或者yyy.hpp文件,让他们慢慢找吧,幸福就在不远处。

8. 一定不要使用git/svn之类的版本控制软件

        写代码多简单啊,不就是一个x.cpp y.java。更新代码就更简单了啊, 参照着x.cpp写呗,再来个x2.cpp,2太难听?那来个xnew.cpp。或者来个x20130101.cpp更加夺目。

        当整个目录下面全是各数字后缀,y3.java, y4.java, y4s.java之后, 什么?别人觉得这样丑爆了?你要反驳他们说:吵什么吵,iphone也是这么版本命名的好吗。

9. 一定不要在README.md里面写明项目的启动方式和条件

        这样才能给你的代码加上一层防盗标志,保密程度直逼iphone5s的指纹识别。 没有你的启动命令,休想使用你的代码。

总结

        看上去很荒谬,但是其实以上这些都是实实在在作者亲身遇到的。 累觉不爱,以此为鉴。


© 著作权归作者所有

共有 人打赏支持
阿信sxq

阿信sxq

粉丝 213
博文 80
码字总数 70640
作品 1
成都
后端工程师
加载中

评论(6)

阿信sxq
阿信sxq

引用来自“nokiapencil”的评论

27
n
nokiapencil
27
阿信sxq
阿信sxq

引用来自“chencliff”的评论

引用来自“思静谦”的评论

博主没有开源意识,这样可就会闭门造车了
通篇都是反话啊哥们~

就是
chencliff
chencliff

引用来自“思静谦”的评论

博主没有开源意识,这样可就会闭门造车了
通篇都是反话啊哥们~
阿信sxq
阿信sxq

引用来自“思静谦”的评论

博主没有开源意识,这样可就会闭门造车了
本文值是转载来引以为戒的哈
浩瀚风龙
浩瀚风龙
博主没有开源意识,这样可就会闭门造车了
C++ 服务器端写出数据时意外停止问题

场景:服务端向 客户端写出数据的时候, 客户端由于 程序一场,关闭了链接。 此时,导致服务端崩溃了。 原因: 转:http://blog.csdn.net/x_nazgul/article/details/50998292 TCP 一端关闭,...

Carlyle_Lee ⋅ 2016/08/23 ⋅ 0

大叔也说Xamarin~Android篇~为HttpClient共享Session,android与api的session共享机制

杂谈 在进行android进行开发时,我们的数据一般通过接口来获收,这里指的接口泛指web api,webservice,wcf,web应用程序等;它们做为服务端与数据库进行直接通讯,而APP这块通过向这些接口发H...

mcy247 ⋅ 2017/12/05 ⋅ 0

从服务端获取json串中文显示unicode编码问题

今天遇到从服务端获取json数据打印到控制台后发现json中包含的中文全部是unicode编码显示状态,经过查阅解决问题如下。 服务端返回的json中输出到控制台的内容有一段是这样的: 用getBytes(...

___k先生 ⋅ 2017/10/19 ⋅ 0

关于Exchange System Attendant服务

Exchange 2003和Exchange 2007的架构是不一样的,因此Microsoft Exchange System Attendant服务的作用也会发生相应的改变。 在Exchange 2003中,Microsoft Exchange System Attendant的作用如...

技术小甜 ⋅ 2017/11/09 ⋅ 0

[转]TCP/IP传输层,你懂多少?

你所不知道的传输层 题记:23页的文档上,满满当当的写满了笔记,纸质的东西,始终害怕丢失,还是选择把它总结到博客上来。 PS.老规矩,列出可能遇到的20个问题,如果您是都能回答的高手,请...

穿越星辰 ⋅ 2011/04/22 ⋅ 2

(转)Asp.Net处理Session失效解决方案

检查ASP.NET Session是否失效,是否超时,默认是20分钟,设置的方法是Session.TimeOut=30;或者您可以设置到更高,这个数值的单位是分钟,大家视情况而定。 检查代码有无Session.Abandon()之类的...

冰点沐雪 ⋅ 2013/01/14 ⋅ 0

如何写出优雅的 CSS 代码 ?

  对于同样的项目或者是一个网页,尽管最终每个前端开发工程师都可以实现相同的效果,但是他们所写的代码一定是不同的。有的优雅,看起来清晰易懂,代码具有可拓展性,这样的代码有利于团队...

前端技术栈 ⋅ 2017/01/03 ⋅ 0

【转】首先为人编写程序,其次才是计算机

摘要:因工作忙,不少人只注重实现程序基本功能,而忽略编程规范,结果是写的代码很难读懂,甚至连阅读自己的代码都十分困难,这造成时间浪费,做事效率降低。而高手写出的代码都易领会,我们...

城邑耕夫 ⋅ 2014/08/15 ⋅ 0

Linux网络编程——无连接和面向连接协议的区别

网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很...

tennysonsky ⋅ 2015/03/19 ⋅ 0

网络编程-Socket

网络编程:就是用来实现网络互联的不同计算机上运行的程序可以进行数据交流。(分布式系统涉及到了) 二、网络编程三要素: 1、IP:每台设备在网络中的唯一标识,每台网络始终在网络中有一个...

qq_26545305 ⋅ 2017/08/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 36分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 56分钟前 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部