Java应用性能调优之调优准备

调优概述

实际的开发工作中,有时候会遇到程序突然变得响应缓慢或者进程消失的情况。这时候就需要对程序进行问题排查和调优,找出产生问题的根源,并进行优化。

一般来说,影响程序性能的因素主要有以下几个:

  • 硬件配置
  • 操作系统
  • 应用程序

CPU、内存、硬盘等硬件配置从根本上决定了应用的性能,而对于网络应用,带宽也是影响其性能的关键因素。本章暂且抛开这些方面不讲,主要讲述针对操作系统和应用程序的调优方法。又可以分为:

  • 系统调优: 针对操作系统的配置调优。
  • Java调优:针对Java应用的调优,包括JVM和代码。
  • 外部系统调优:针对应用程序依赖的外部系统如数据库、缓存、Web服务器等的调优。

技术琐话2018-09-03

日常的工作学习中,经常会看到好的知识点,对自己有提示的一句话,或者是自己突然想通了一件事情。决定以博客的形式记录下来,以“技术琐话”作为主题。

2018年以“技术琐话”开篇,主要是整理了一下自己以前一些零散的知识点。

  • 推送实现方式:轮训、长连接、长轮训(依赖于异步IO机制,如Java中的异步Servlet)。
  • 喜欢到处听讲座的人通常心态上很好学,但很可能思考不足,所以知识很容易流于表面。喜欢看一本一本书的人不但好学,而且通常比较习惯于深度思考。深度思考,才能具体改变你的知识体系。看书时,可以和作者进入到同一个频率,对文字的内容产生共鸣。 ​​​​@蔡学镛 so,建议搞技术的同学少参加会议,少混圈子,多看书。
  • 提出问题之前务必要先想好自己的答案或者思路。
  • 了解清楚事实再说话,切忌老是吐槽却不去解决问题。
  • 对新技术的调研需要梳理零散的知识点,最终一定要有输出:分享或者文章。
  • 想到一个思路,要深入思考下去,即使表面不可行,也可以使其可行,直至确实不可行,再换思路。
  • 人的时间管理效率会差3倍;注意力管理的效率会差30倍;思考方法学习方法的效率差300倍。so,找到好的学习方法是非常关键的。

如何进行Java项目构建?

对于一个完整的项目来说,一般都有很多的类、很多的包,如果是Web工程那么还有很多jsp、资源文件。这时候如果只用JDK自带的工具编译和运行,是非常困难的一件事前。再者,编译源代码只是软件开发过程的一个方面,更重要的是要把软件发布到生产环境中来产生商业价值。所以,代码编译之后,还有测试、分析代码质量、部署等步骤要做。整个过程进行自动化操作是很有必要的。

这时候就需要一个Java的工程/项目构建工具。这里所谓的项目构建就是指的完成工程发布流程需要的一系列步骤,包括编译、测试、打包、部署等等。虽然用Eclipse和Intellij这些IDE能解决这个问题,但是受限于这些IDE体积庞大且基本上都是GUI的,而后端应用的运行环境基本都是没有显示器的,所以很多时候还是需要一些专门做项目构建的工具来支持这些工作。

管理的一些要点

去年以及今年由于工作需要,参加了公司请的美国管理协会的《高价值经理人》及敏捷OKR绩效管理的培训课程,此外也阅读了《格鲁夫给管理人的第一课》、《架构即未来》、《技术管理之巅》、《OKR:源于英特尔和谷歌的目标管理利器》几本书。总体来看很多管理的理论其实日常自己也在实践,不过这些书的确让自己形成了自己的管理体系,能够有序有法的进行一些管理实践。本文从通用管理和技术管理两部分总结其中最让自己感到受用的几点心得。

架构简明指南

之前的《谈谈架构》讲述了架构的概念、原则等等,这里择出其中的设计原则部分供大家随手参考。

《Clean Architecture》一书中对于软件架构目的的解释:

The goal of software architecture is to miminize the human resources required to build and maintain the required system.

即:软件架构的目的就是将构建和维护系统需要的人力成本降到最低。

因此,可以得出架构设计的关键思维就是判断和取舍(程序设计的关键思维是逻辑和实现),即如何选择技术、组合技术使得需要的人力资源最少。

需要注意的一点是,脱离业务谈架构是不合理的,技术架构及其演进都是业务目标驱动的。

如何学习后端技术?

学习后端技术和学习其他的技术并没有什么大的不同。因此,题目换做如何学习技术也是讲的通的。概括来讲,有以下几点建议:

  • 扎实的计算机基础知识
  • 知其然更要知其所以然
  • 动手实践
  • 频繁练习
  • 持续学习
  • 自我总结
  • 学会规划