getResourceAsStream
java.lang.reflect.Proxy
MySQL for Excel
- Import MySQL data into Excel.
- Export Excel data to MySQL as a new table or append data to an existing table.
- Modify MySQL data directly from within Excel.
getResourceAsStream
java.lang.reflect.Proxy
MySQL for Excel
参考 Comparator 接口的静态方法 comparing
Producer Extends, Consumer Super
1 | public static <T, E extends Comparable<? super E>> Comparator<T> comparing(Function<? super T, ? extends E> keyGenerator) { |
如果要返回一个 T 类型的 Comparator, 也就是 Comparator
在返回一个 Comparator
1 | // 方法签名接受一个 Father 对象 |
1 | public static void dateTest() { |
Chapter 6 Java 实现内存管理和并发编程的方式
allocation table - 分配表
stack frame - 栈帧
heap - 堆
reachable object - 可达对象/活性对象
GC Root - 通向可达对象的引用链根部一般称为 GC Root
标记清除,垃圾回收程序需要互斥存取整个堆,因此应用代码一直在运行,会不断创建和修改对象,应用线程会停顿一下(Stop-The-World, STW), 先停止所有应用线程,然后进行垃圾回收
对象的预期生命周期称为 代
弱代假设
(Weak Generation Hypothesis, WGH), 在这个假设中,对象常常处于少数几个预期生命周期之一
大多数的对象的生命期非常短,不久就会被垃圾回收,这些对象也称为 瞬时对象
将堆内存分成多个独立的内存空间,每次回收垃圾时,只为活性对象分配空间,并将这些对象移动到另一个内存空间。清理整个内存空间,供以后重复使用。
Eden 区 / Nursery 区
使用筛选回收程序的话,每个线程都可以单独分配内存,每个应用线程都有一块连续的内存-线程私有的分配缓冲区,专门供这个线程分配对象。为对象分配内存时,只需把指针指向分配缓冲区。
HotSpot 引入了 Survivor 区,用于保存前一次回收新生对象后存活下来的对象。筛选回收程序会在多个 Survivor 区之间来回复制存活下来的对象,直到超过 保有阈值
, 再推给老年代
• 并行回收程序
使用多个线程执行回收操作的垃圾回收程序
• 并发回收程序
可以和应用线程同时运行的垃圾回收程序
堆空间:新生代和老年代;新生代由三个区组成: Eden 区、两个 Survivor 区,老年代只有一个内存空间
多次回收循环后存活下来的对象,最终会推给老年代。
默认情况下,老年代使用的也是并行标记清除回收程序,并且回收程序会整理老年代,清除内存碎片
find
命令和 mv
命令,编写简单脚本1 | #!/bin/bash |
rename
命令1 | # reanme 利用了 perl 的正则表达式来进行替换 substitute |
find
结合 rename
实现递归重命名1 | find -type f -exec rename 's/-/_/' {} \; |
vim 中显示行号
1 | vim /etc/vim/vimrc |
提示符
1 | 59 if [ "$color_prompt" = yes ]; then |
反转字符串
1 | # reverse |
字符串比较相等
1 | # 等号两边的空格一定不能省略 |
tr
转换1 | # tr -s for --squeeze-repeats |
sed
转换1 | # sed 默认一次只处理一行(涉及sed的处理方式,hold space),是以 \n 作为行分隔符的,但是提供的一个 option -z, 以 NUL 字符作为行分隔符来解析 |
sed
的另一种用法1 | sed '/^$/d' text.txt |
tr
1 | seq 1 10 | echo $[ $(tr '\n' '+') 0 ] |
1 | # 函数 return 为函数的返回,exit 为 shell 的结束 |
查找出最近一个小时目录内有修改过的文件
modified.sh
1 | find "/mnt/d/Markdown 文档" -type f -mmin -60 | |
备份:
1 |
|
备份配置文件:
1 | # software-config-dir=target-dit-name |
startup 设置 vbs 脚本
1 | Set ws = CreateObject("Wscript.Shell") |
/etc/init.wsl
1 |
|
/etc/sudoers
1 | %sudo ALL=NOPASSWD: /etc/init.wsl |