Apache工具包
参考文献
https://commons.apache.org/proper/
https://commons.apache.org/
Framework
用途
说明
Apache Tika
文件
文件类型分析Apache Tika 工具包可从一千多种不同的文件类型(例如 PPT、XLS 和 PDF)中检测并提取元数据和文本.所有这些文件类型都可以通过单个界面进行解析,这使得 Tika 对于搜索引擎索引、内容分析、翻译等非常有用.
Apache POI
Word/PPT/Execl
Apache HTTPClient
HTTP
Apache Shiro
安全
Apache PDFBox
PDF
Apache SkyWalking
监控
应用程序性能监控工具
Apache incubator-answer
系统
在线问答系统
完整的Common组件说明
Component
Description
Latest Maven Version
Release Version
Release Date
BCEL
Byte Co ...
Java基础-异常Exception
参考文献
受检查异常和不受检查异常
受检查的异常(checked): 这种在编译时被强制检查的异常称为"受检查的异常",即在方法的声明中声明的异常,对于这种异常,方法强制处理或者通过 throws 子句声明,其中一种情况是Exception的子类但不是 RuntimeException 的子类
对于checked异常的处理方式
当前方法明确知道如何处理异常,程序应该使用try...catch块来捕获异常,然后在对应的catch中修复该异常;
当前方法不知道如何修复异常时,应该定义该方法声明抛出异常;
不受检查的异常(unchecked): 在方法的声明中没有声明,但在方法的运行过程中发生的各种异常被称为"不被检查的异常",这种异常是错误,会被自动捕获,非受检查是 RuntimeException 的子类,在编译阶段不受编译器的检查,
**Java中所有异常或者错误都继承Throwable,分为三类: **
Error:所有都继承自Error,表示致命的错误,比如内存不够,字节码不合法等,程序无法处理;
Exception: ...
JVM(一)-内存结构
参考文献
黑马程序员JVM完整教程,全网超高评价,全程干货不拖沓
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)
轻松看懂Java字节码
JVM Internals
sizeof
高端面试必备:一个Java对象占用多大内存
JEP 0: JEP Index
JVM简述
Java Virtual Machine,Java程序的运行环境(Java二进制字节码的运行环境);
好处:
一次编写,到处运行
自动内存管理,垃圾回收机制
数组下标越界检查
Java 内存模型规定了 JVM 应该如何使用计算机内存(RAM).广义来讲, Java 内存模型分为两个部分:
JVM 内存结构
JMM 与线程规范
JVM内存结构
JVM 内部使用的Java内存模型, 在逻辑上将内存划分为线程栈(thread stacks)和堆内存 (heap)两个部分.
JVM 中,每个正在运行的线程,都有自己的线程栈. 线程栈包含了当前正在执行的方法链/调用链上的所有方法的状态信息.
线程栈上的和堆内存中的对象的存储情况:
如果是原生数据类型的局部变量,那么它 ...
Java调试-远程调试
Java 远程调试
启动脚本中添加选项,并重启(JavaSE 5以后java -agentlib:jdwp=…)
1JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
JavaSE 5之前(java -Xdebug -Xrunjdwp:…)
1CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=10086,suspend=n,server=y
参数说明
transport
指定运行的被调试应用和调试者之间的通信协议,有如下可选值:
dt_socket: 采用socket方式连接(常用)
dt_shmem:采用共享内存的方式连接,支持有限,仅仅支持windows平台
server
指定当前应用作为调试服务端还是客户端,默认的值为n(客户端)。
如果你想将当前应用作为被调试应用,设置该值为y;如果你想将当前应用作为客户端,作为调试的发起者,设置该值为n。
...
Java基础-集合类-HashMap
参考文献
HashMap源码分析(jdk1.8,保证你能看懂)
理论
HashMap最早是在JDK1.2中出现,直到JDK1.7一直没太大变化,但是到了JDK1.8突然进行了一个很大的改动.其中一个显著的改动就是:
之前JDK1.7的存储结构是数组+链表
到了JDK1.8变成了数组+链表+红黑树.
另外,HashMap是非线程安全的,也就是说多线程同时对HashMap中的某个元素进行增删改操作时,是不能保证数据的一致性的.
在JDK1.7中,首先是把元素放在一个个数组里面,后来存放的数据元素越来越多,于是就出现了链表,对数组中的每个元素,都可以有一条链表来存储元素.这就是有名的"拉链式"存储方法
后来存储的元素越来越多,链表也越来越长,查找一个元素的时候效率不仅没有提高(链表不适合查找,适合增删),反而下降了不少,于是在JDK1.8中对这条链表进行了改进–使用红黑树. 将链表结构编程红黑树,原来JDK1.7的优点是增删效率提高,在JDK1.8中不仅增删的效率提高了,查找的效率也提升了.
核心是基于哈希值的桶和链表
一般用数组实现桶
发生哈希 ...