在Java工程师平常的开发过程中,由于业务的不同,可能关注的点有很多不一样的地方,但是在基础层面还是有一些共性的。此文概括了在Java开发、测试、部署、工程化方面一些需要注意的地方,供大家参考。

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

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

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

  2. 对于所有外部调用以及内部服务都要做容错处理
    不管是RPC调用还是对于第三方服务的调用,都不能想当然的认为可用性是100%的。不允许出现服务调用超时和重试,将会对应用程序的稳定性和性能造成不利地影响。

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

  4. 需要提供以下文档
    编写单元测试文档并使其拥有良好的代码覆盖率。

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

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

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

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

  2. 数据库设计时设计一些便于追踪历史、整理的列
    比如created_time、update_time可以说明记录的创建和更新时间。;created_by、updated_by可以说明记录是由谁创建和更新的。

此外,删除记录有时候并非真正删除,这时需要设计表示此记录状态的列,

如可以取‘Y’或‘N’的‘deleted’列

或是可以取‘Active’或‘Inactive’的 ‘status’列。

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

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

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

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

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

CPU(内核数)。

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

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

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

  2. 在一些关键技术领域具有充足的知识储备。
    ·设计模式

·JVM调优

·多线程“并发问题”

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

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

·缓存

Java开发过程中需要注意的技巧有哪些?相关推荐

  1. 深入了解Java开发过程中的类型转换

    Java开发过程中有一个特性需要我们注意,整型.实型(常量).字符型数据可以进行混合运算. 所以,在运算过程中,不同类型的数据会先转化为同一类型,然后进行运算. 深入了解Java开发过程中的类型转换 ...

  2. 【说说在Java开发过程中遇到的麻烦的问题】

    在 Java 开发过程中,会遇到很多问题,以下是一些可能会遇到的麻烦问题: 内存泄漏: Java 的自动垃圾回收机制可以帮助开发者自动释放不再使用的对象,但是如果代码中存在一些资源没有正确释放的情况, ...

  3. .NET开发过程中的全文索引使用技巧之Solr

        前言:相信许多人都听说过.net开发过程中基于Lucene.net实现的全文索引,而Solr是一个高性能,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查 ...

  4. 开发过程中的算法小技巧:

    在开发过程中,总会在一些算法思维上卡壳,现在决定记录下来,希望熟能生巧,以后经过努力,克服这个不足. 1.多对象切换,count>=3,用数组遍历的方式: (下面是个自己思维卡壳第2次的例子,所 ...

  5. java开发过程中的命名规范

    为什么80%的码农都做不了架构师?>>>    最近在读项目的过程中,发现好多同事的代码并不是很规范,有的包名也按照了驼峰的写法,虽说这样不是不行,但个人认为开发过程中应该遵守这些规 ...

  6. Java开发过程中开发工具Eclipse中导入jar包的过程

    欢迎欣赏我的第二篇随笔.我们在创建好一个动态网站项目之后,如果没有部署maven的情况下,你可以按照以下的方法,直接把要用的jar包导入你的工程中,而不用再部署maven. 例如在使用JDBC编程时需 ...

  7. java开发过程中,报错Dangling meta character '*' near index 0,解决办法

    From: https://blog.csdn.net/zhouzhiwengang/article/details/53493810 1.split方法转化字符串为数组: String[] strP ...

  8. java菱形乱码 编码_【分享】Java开发过程中中文乱码问题总结

    一.文件乱码处理 1.文件默认编码:默认使用项目的默认编码 右击文件->Properties->Resource->Text file encoding 2.JSP文件编码:由于JS ...

  9. java开发过程中几种常用算法

    排序算法 排序算法中包括:简单排序.高级排序 简单排序 简单排序常用的有:冒泡排序.选择排序.插入排序 冒泡排序代码如下: 1 private static void bubbleSrot(int[] ...

最新文章

  1. 2020 Java 面试高薪攻略.pdf
  2. delphi:多态置换原则
  3. python 优化加速方案
  4. java 注解 Annontation
  5. matlab白噪音wav,通过matlab产生wav的白噪声.pdf
  6. MTK 驱动(73)---MTK 6761平台 android O bootloader启动之 Pre-loader -amp;gt; Lk
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的仓库管理系统
  8. java正则表达式提取需要的字符并放入数组
  9. mysql 5.7.18源码包下载_centos 7 下MySQL 5.7.18 源码安装
  10. 嵌入式linux开发 周立功,嵌入式linux开发教程 周立功
  11. 网络工程师(中级)知识点记录
  12. 儿童吹泡泡水简单配方_小孩吹泡泡的 泡泡水,有谁知道详细的配方?
  13. [cocos2d-x]SpaceFighting[安卓/IOS都适用]
  14. 格创东智携半导体良率提升智能分析平台入选工信部大数据产业发展试点示范项目
  15. 全面的软件测试(转)
  16. 解决ERROR: distribution port 25672 in use by another node: rabbit@
  17. Java基础到Java进阶——Java小白的历练之路------从0到1,开卷!
  18. 【微信小程序】 微信小程序连接本地接口
  19. c语言txt文件写入数学,文本文件输入文件.txt中存有一个学生的学号,性别,年龄,数学,语文,英语三门课的成绩....
  20. 人工智能导论课程论文:人工智能及其发展趋势

热门文章

  1. [转载] 根据Python常见面试题来谈谈 Python 闭包
  2. [转载] Python OpenCV 基础教程
  3. [转载] python pandas.read_csv读取大文件
  4. 以一种标准的办法,获取工作目录
  5. python 错误信息是:sudo :apt-get:command not found
  6. 从今天开始 好好规划自己
  7. @media实现网页自适应中的几个关键分辨率
  8. Uva 11395 Sigma Function (因子和)
  9. jsonp实现跨域问题
  10. Cracking The Coding Interview5.3 暂存