每日小结
#Java 包(Package), Jar 和模块(Module)的区别
包 (Package)
是 Java 源文件的集合, 包含 Class/Interface/Annotation 的定义
与文件系统中的目录对应
主要目的是防止命名冲突
Jar (Java Archive File)
是编译后的 Java 代码(
.class)的压缩包实际上是一个 zip 格式文件
对 Jar 的操作用
jar命令, 其语法类似 Linux 下的tar创建 Jar 包:
jar cvf test.jar test解压 Jar 包:
jar xvf test.jar列举 Jar 包的内容:
jar tvf test.jar
模块 (Module)
是 Java 语言内置的一种管理组件之间依赖关系的方法, 在 Java 9 被引入
Module 解决的问题:
在 Java 9 之前, 主要使用 package 作为封装方式,使用 Jar 作为模块, 封装方式由 package 和访问修饰符 (private, protected, public,包私有) 控制
任何模块都能访问其他模块的 public 的代码,不同 Jar 下的同名包可以相互访问包私有的代码。
无法控制非平台开发者对平台内部包的访问,如应用代码可以访问 sun.misc、com.sun.security 这样和具体平台绑定的包。
没有明确的依赖信息,模块开发者无法设置必须的依赖,模块使用者不清楚该模块必须依赖哪些模块。只能使用外部的工具,如 Maven、Gradle、OSGI 等。
Module 的优势
明确的依赖配置,JPMS 会在编译和运行之前检查当前环境是否满足依赖的要求。JPMS 会检查版本冲突,即当有两个模块暴露了相同的包名时,系统会抛出异常。JPMS 支持传递性依赖。
强大的封装,模块可以明确指定哪些包能暴露给哪些模块,JPMS 不允许代码使用反射的方式访问不对外开放的包。
性能优化,JPMS 完全清楚哪些模块是需要的,所以不需要的模块不会被 JVM 载入。
Module 的不足:
- 缺乏对模块的版本的支持
特点:

#Linux (Ubuntu) 硬件管理
通用
lshw -short: 列举所有硬件信息
CPU
lscpu: 查看 CPU 信息cat /proc/cpuinfo: 查看每个 CPU 的信息
内存
free [-m|-g|-k|-b|-h]: 查看内存使用情况cat /proc/meminfo: 查看内存详细使用情况dmidecode -t memory: 查看内存硬件信息
硬盘
lsblk: 查看硬盘和分区信息fdisk -l: 查看详细分区表df -h: 查看硬盘剩余空间
主板 BIOS
dmidecode -t bios: 查看 bios 信息
PCI 设备
lspci
网卡
lspci | grep -i 'Ethernet': 查看网卡硬件信息 (Ethernet 以太网)lspci | grep -i 'Wireless': 查看无线网卡硬件信息ifconfig -a: 查看系统的所有网络接口
USB 设备
lsusb
#apt remove 与 apt purge 的区别
- purge 会删除配置文件, 而 remove 只会删除程序文件
#Java 学习
Java 多线程
- interrupt() 向该进程发送中断信号, 具体怎么处理由该进程实现