1. 将一些需要变动的配置写在属性文件中

比如,没有把一些需要并发执行时使用的线程数设置成可在属性文件中配置。那么你的程序无论在DEV环境中,还是TEST环境中,都可以顺畅无阻地运行,但是一旦部署在PROD上,把它作为多线程程序处理更大的数据集时,就会抛出IOException,原因也许是线上环境并发造成也许是其他。如果线程数目可以在属性文件中配置,那么使它成为一个单线程应用程序就变得十分容易了。我们不再需要为了解决问题而反复地部署和测试应用了。这种方法也同样适用于配置 URL、服务器和端口号等。


这里推荐使用属性文件外化这些配置,文件格式使用properties、yaml、hocon、json都可以。下面的类实现了对这些格式的文件的spring注入支持,包括占位符支持。

2. 测试中尽可能模拟线上环境

生产过程中一个典型的场景就是只使用1到3个帐户进行测试,而这个数量本应是1000到2000个的。在做性能测试时,使用的数据必须是真实并且未经裁剪的。不贴近真实环境的性能测试,可能会带来不可预料的性能、拓展和多线程问题。

3. 对于所有外部调用以及内部服务都要做容错处理

不管是RPC调用还是对于第三方服务的调用,都不能想当然的认为可用性是100%的。不允许出现服务调用超时和重试,将会对应用程序的稳定性和性能造成不利地影响。

4. 安全设计上一个系统要遵循最小权限原则

网络服务随处可见,从而使得黑客可以轻易地利用它进行拒绝服务攻击。所以,设计系统时,需要遵循“最小权限”原则,采用白名单等方式。

5. 需要提供以下文档

编写单元测试文档并使其拥有良好的代码覆盖率。

高层次的设计图:描述了所有的组件,交互和结构。

详细的设计图:具体到代码层面的设计

系统map(类似于site map):说明系统的所有组成文件、配置文件等

6. 做好系统关键功能的监控、错误恢复、备份等

对于系统一些至关重要的功能模块要做好对其的监控,防止其影响系统的运行,造成不可估算的损失。另外,如果可以,监控到故障后去去试图恢复,恢复失败再发送告警。对于一些很重要的数据文件,还要做到冗余备份,防止发生一些突然故障造成数据丢失。

7. 数据库设计时设计一些便于追踪历史、整理的列

比如created_time、update_time可以说明记录的创建和更新时间。;created_by、updated_by可以说明记录是由谁创建和更新的。


此外,删除记录有时候并非真正删除,这时需要设计表示此记录状态的列,如可以取‘Y’或‘N’的‘deleted’列或是可以取‘Active’或‘Inactive’的 ‘status’列。

8. 制定好项目回滚计划

新的功能上线时,如果发生故障,没有一份回滚计划,那么可能会手忙脚乱。有一个良好的回顾及计划,可以让你能够有条不紊的执行相关操作,将系统恢复到一个可运行的状态。

9. 项目上线前要做好量化分析

对于项目中用到的内存、数据库、文件、缓存等,要做好量化分析。预估出未来一段时间的空间占用,给运维分配机器时一个参考。防止,由于数据量增长过快,导致存储不够。

10. 制定好系统的部署计划。

系统部署的平台是一个至关重要的部分。对于平台的描述,不能仅限于一台服务器、两个数据库这个层面,至少需要包括


操作系统的特定版本,JVM等。

有多少内存(包括物理内存,JVM堆内存,JVM栈内存和JVM永久代的空间)。

CPU(内核数)。


负载均衡器,需要的节点数、节点类型,比如是Active-Standby型还是Active-Active型。

文件系统要求,例如,你的应用程序可能会收集生成的日志并将其保存很长的周期,之后才进行归档。这样的话,你就需要有足够的硬盘空间。

11. 选择最合适的工具/技术

很多情况下,开发者会在生产系统中使用一门想要学习的语言或某种工具。通常这不是最好的选择。比如,为已经实际上是关系型的数据使用NoSQL数据库。不管是语言还是工具,都有其适用的场景。类似“PHP”是最好的语言这种,只能表示呵呵。

12. 在一些关键技术领域具有充足的知识储备。

设计模式

JVM调优

多线程“并发问题”

事务问题,包括分布式事务

性能问题,包括GC、计算等

缓存


【正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!下面有个“顶”字,你就顺手把它点了吧(要先登录CSDN账号哦 )】


—–乐于分享,共同进步!

—–更多文章请看:http://blog.csdn.net/duruiqi_fx


程序员的自我修养-----Java开发的必须知道的几个注意点的更多相关文章

  1. 程序员的自我修养(2)——计算机网络(转) good

    相关文章:程序员的自我修养——操作系统篇 几乎所有的计算机程序,都会牵涉到网络通信.因此,了解计算机基础网络知识,对每一个程序员来说都是异常重要的. 本文在介绍一些基础网络知识的同时,给出了一些高质量 ...

  2. gcc ld 链接器相关知识,调试指令(程序员的自我修养----链接、装载与库)

    最近解决一个动态链接上的问题,因为以前从来没有接触过这方面的知识,所以恶补了一下,首先要了解gcc编译指令(makefile),ld链接器的选项(还有连接脚本section指定内存位置),熟悉查看连接 ...

  3. 第八周读书笔记(人月神话X月亮与六便士)——到底什么才是一个程序员的自我修养?

    写了这么久的读书笔记,涉及到问题大多是一些如何把软件工程做好,如何把自己的职业生涯做好.但总感觉逻辑链上缺了一环,亦即:我们为什么要把软件工程做好,我们成为一名优秀的职业生涯的意义到底在于什么?我觉得 ...

  4. pwn学习日记Day21 《程序员的自我修养》读书笔记

    Linux内核装载ELF过程 (1)bash进程调用fork()系统调用创建一个新的进程 (2)新的进程调用execve()系统调用执行指定的ELF文件,原先的bash进程继续返回等待刚才启动的新进程 ...

  5. pwn学习日记Day20 《程序员的自我修养》读书笔记

    可执行文件的装载与进程 覆盖装入和页映射是两种典型的动态装载方法 进程建立的三步 1.创建一个独立的虚拟地址空间 2.读取可执行文件头,并且建立虚拟空间与可执行文件的映射关系. 3.将CPU的指令寄存 ...

  6. pwn学习日记Day19 《程序员的自我修养》读书笔记

    windows PE/COFF章总结 本章学习了windows下的可执行文件和目标文件格式PE/COFF.PE/COFF文件与ELF文件非常相似,它们都是基于段的结构的二进制文件格式.Windows下 ...

  7. Java程序员的自我修养

    一.自我修养路线图 如图,这是笔者所走的路.且不论这路走的对不对,这个过程中行业环境会影响到你,大可不必钻牛角尖.附上这张图的目的是为了说,如果你想成为一个优秀的程序员,那么你一定要有规划.当然,别想 ...

  8. iOS程序员的自我修养之道

    新技术的了解渠道 WWDC开发者大会视频 官方文档 General -> Guides -> iOS x.x API Diffs 程序员的学习 iOS技术的学习 官当文档 Sample C ...

  9. pwn学习日记Day18 《程序员的自我修养》读书笔记

    知识杂项 obj文件:当前源代码编译成二进制目标文件 exe文件:将.obj文件与库文件.lib等文件链接生成的可执行文件 一个现代编译器的主要工作流程如下: 源程序(source code)→ 预处 ...

随机推荐

  1. [HAOI2015]数字串拆分

    题目描述 你有一个长度为n的数字串.定义f(S)为将S拆分成若干个1~m的数的和的方案数,比如m=2时,f(4)=5,分别为4=1+1+1+1你可以将这个数字串分割成若干个数字(允许前导0),将他们加 ...

  2. [SDOI2014]重建

    题目描述 T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传回. 辛运的是,此前T国 ...

  3. [HAOI2007]覆盖问题

    题目描述 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定 用3个L*L的正方形塑料薄膜将小树遮起来.我 ...

  4. 素数密度_NOI导刊2011提高(04)

    题目描述 给定区间[L, R](L <= R <= 2147483647,R-L <= 1000000),请计算区间中素数的个数. 输入 两个数 L 和 R. 输出 一行,区间中素数 ...

  5. [APIO2014]

    T1.回文树裸题. #include<cstdio> #include<iostream> #define ll long long using namespace std; ...

  6. 第三次C语言作业

    (一)改错题 计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. 输入输出样例1: Enterr x: 10.0 f(10.0) = 0.1 输入输出样例2: En ...

  7. jquery easyui combobox 高度自适应

    data-options="required:true,editable:false,panelHeight:'auto'"  加上panelHeight:'auto'即可 列合并 ...

  8. 浅谈Trie树(字典树)

          Trie树(字典树) 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找作用的.查找的是啥?单词. 看以下几个题: 1.给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单 ...

  9. Redis Cluster集群主从方案

    本文介绍一种通过Jedis和Cluster实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.8.0(推荐),Redis3.0及以上版本(强制). 附:Redis Cluster集群主 ...

  10. .net通用CMS快速开发框架——问题1:Dapper通用的多表联合分页查询怎么破?

    最近在弄一个东东,类似那种CMS的后台管理系统,方便作为其它项目的初始化框架用的. 现在遇到个问题,如标题所示:Dapper通用的多表联合分页查询怎么破? 难道只能通过拼接sql或者使用存储过程吗?我 ...