[译]Java中9个处理Exception的最佳实践

在Java中处理异常并不是一个简单的事情。不仅仅初学者很难理解,即使一些有经验的开发者也需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样处理等等。这也是绝大多数开发团队都会制定一些规则来规范对异常的处理的原因。而团队之间的这些规范往往是截然不同的。

本文给出几个被很多团队使用的异常处理最佳实践。

谈谈架构

之前开头的《架构设计原则》一文一直没有把坑填上。而最近在公司内部做了一次架构交流/培训,把架构的概念、架构的形式、架构设计原则都做了阐述,正好算是对此文的完成和补充。

PPT观看

[译]在Java中提升函数以更好地“函数式”编程

Java8中的Stream和Optional给我们带来了函数式编程的乐趣,但Java仍然缺少很多函数编程的关键特性。Lambda表达式、Optional和Stream只是函数式编程的冰山一角。这也导致了varvrfunctionlajava这些类库的出现,他们都源于Haskell这个纯函数式编程语言。

如果想要更加地“函数式”编程,那么首先要注意的是不要过早的中断monad(一种设计模式,表示将一个运算过程通过函数拆解成互相连接的多个步骤。只要提供下一步运算所需的函数,整个运算就会自动进行下去, Optional、Stream都是monad),比如,很多人经常会在还不需要的时候就调用了Optional.get()和Stream.collect()提前终止monad。本文主要讲述如何通过提升方法来使得代码更”函数式”。

《Java工程师修炼之道》内容概览

最近几个月由于工作和正在筹备《Java工程师修炼之道》一书的原因一直没有写新的文章。不过,忙里偷闲,自己陆续读完了《格鲁夫给经理人的第一课》、《架构真经》、《聊聊架构》这几本书,收获了不少干货,之前自己挖坑的《一些架构设计原则》一文后面会尽快填上。本文则先介绍一下《Java工程师修炼之道》一书^_^。

《Java工程师修炼之道》一书主要内容是Java后端工程师必备的基本技能大纲。内容主要来自于公司内的后端工程师学习计划、自己以前的一些博客文章和自己从业以来积累的知识库。但由于后端工程师的每一个技能点都具有一定的深度,都不是一两篇文章就能讲述清楚的,因此本书不可能对每一个技能点都讲的特别透彻。

本书可以看做是一本Java工程师的入职指南,也可以看做一本串联Java后端技能点的参考手册。对其中每一个技能点的学习,推荐通过他们的官方文档来深入学习,此外,本书也给出了自己觉得有价值的参考学习书籍。

JVM诊断调优CheatSheet

包含诊断调优java应用的各种命令以及jvm配置示例。

常用Shell命令

  • 查看网络状况

      netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    
  • 使用top去获取进程cpu使用率;使用/proc文件查看进程所占内存。

      #!/bin/bash
      for i in `ps -ef | egrep -v "awk|$0" | awk '/'$1'/{print $2}'`
      do
          mymem=`cat /proc/$i/status 2> /dev/null | grep VmRSS | awk '{print $2" " $3}'`
          cpu=`top -n 1 -b |awk '/'$i'/{print $9}'`
      done
    

如何读取ClassPath下的资源

最近在写一些公共组件时,碰到了需要读取classpath下文件的场景。也突然想起其实之前有很多场景牵扯到读取类加载路径下的文件内容、路径,包括非jar包和jar包中的。总结一下,以备后续使用。

[译]JDK自带工具之问题排查场景示例

目录

最近看到了大量关于java性能调优、故障排查的文章,自己也写了一篇Java调优经验谈。接着此篇文章,其实一直打算写写一些常用调优工具以及它们的惯常用法的。后来在http://java-performance.info这个站点上看到了类似的一篇博文,自我感觉很有指导意义。于是决定翻译+重组织一下此篇文章:Java server application troubleshooting using JDK tools

引言

在Java世界中,我们的很多开发工作从编码、调试到调优都在使用GUI工具。我们经常尝试在本地构建一套和线上一样的环境从而使得问题能够重现,进而使用我们常用的工具来排查定位故障。但不幸的是,很多情况下是无法在本地重现线上问题的。例如,我们没有权限获取真实客户端提交到线上服务端的数据。

由此,很多时候都是需要远程来排查线上服务器上发生的问题。但是如果单单只有一个JRE的话,你也不可能有合适的办法来进行排查。你需要JDK或者第三方的工具。有时候使用JDK提供的工具就是最可取的方案,毕竟,在线上环境使用第三方工具有时候会牵扯到权限的问题。

一般情况下,在线上环境安装JDK发布版本可以让排查进行地更高效。建议安装使用最新的Java7/8 JDK或者构建与线上JRE匹配的一些工具(原文作者不建议安装jdk的发布版本,而是建议根据实际需求逐渐地安装其中的工具)。