Feb
14
切到新语言就是不断地踩坑呀。
手头有一个函数,输入一个 itemList,统计不同类型的个数,核心代码如下:
其他 typeParser 在遇到异常数据时会返回 null。
重构的时候,稳妥起见为它写了个单测,结果就在上述代码的第二行 NPE 了。
debug 时确认了 typeParser 和 item 都不是 null,猜测是 switch 不能处理 null ,但不熟悉 java 语法,搜了一下,果然如此。
由于 case 数量不多,就暂且改成了 if ... else if ... else 的结构。
由此可见,单测对于代码的覆盖率确实是很有帮助。
手头有一个函数,输入一个 itemList,统计不同类型的个数,核心代码如下:
int xCount = 0, yCount = 0;
switch(typeParser.parse(item)) {
case X:
xCount++;
break;
case Y:
yCount++;
break;
default:
log.error("unknown type");
break;
}
switch(typeParser.parse(item)) {
case X:
xCount++;
break;
case Y:
yCount++;
break;
default:
log.error("unknown type");
break;
}
其他 typeParser 在遇到异常数据时会返回 null。
重构的时候,稳妥起见为它写了个单测,结果就在上述代码的第二行 NPE 了。
debug 时确认了 typeParser 和 item 都不是 null,猜测是 switch 不能处理 null ,但不熟悉 java 语法,搜了一下,果然如此。
由于 case 数量不多,就暂且改成了 if ... else if ... else 的结构。
由此可见,单测对于代码的覆盖率确实是很有帮助。
Jan
26
又遇到一个灵异的 intellij idea 问题。
背景:在项目 P 的同一个 Module M 下面, PKG P1 需要 import PKG P2 下面的 C1 和 C2 两个 class。
现象:import C1 成功,但是import C2失败;然而通过 mvn clean install 是可以正常完成编译的。

删除 project 下的 .idea 目录重新 import 并没有解决这个问题。
在另一个同学的电脑上尝试,报的错竟然不一样,是在 C2 这个 class 下无法 import 另一个 class C3,但同样可以通过 mvn 命令行完成编译。
通过 Google 搜到 StackOverflow 的这个 thread:
https://stackoverflow.com/a/66167190/802910
解决方案很简单:删掉 idea 的cache 目录,让它重建就好了。
在 windows 下,这个目录位于 %LOCALAPPDATA%\JetBrains\IdeaIC2021.2\caches (注意替换为自己版本号)
在 mac 下,目录应该是 ~/Library/Caches/JetBrains/IdeaIC2021.2
似乎 IDEA 本身也有清空 cache 的功能(File -> Invalidate Caches...),下次遇到再验证一下。
背景:在项目 P 的同一个 Module M 下面, PKG P1 需要 import PKG P2 下面的 C1 和 C2 两个 class。
现象:import C1 成功,但是import C2失败;然而通过 mvn clean install 是可以正常完成编译的。
删除 project 下的 .idea 目录重新 import 并没有解决这个问题。
在另一个同学的电脑上尝试,报的错竟然不一样,是在 C2 这个 class 下无法 import 另一个 class C3,但同样可以通过 mvn 命令行完成编译。
通过 Google 搜到 StackOverflow 的这个 thread:
https://stackoverflow.com/a/66167190/802910
解决方案很简单:删掉 idea 的cache 目录,让它重建就好了。
在 windows 下,这个目录位于 %LOCALAPPDATA%\JetBrains\IdeaIC2021.2\caches (注意替换为自己版本号)
在 mac 下,目录应该是 ~/Library/Caches/JetBrains/IdeaIC2021.2
似乎 IDEA 本身也有清空 cache 的功能(File -> Invalidate Caches...),下次遇到再验证一下。
Aug
11
# 现象
手头有一个比较大的maven project,拆成了十几个module,如果我要在 Intellij IDEA 跑个单测什么的,就会报错,各种依赖找不到,即使 pom.xml 里是明明白白写着:

依然无法识别,连 lombok 和 junit 都不行:

尽管 idea 很好心地给了帮助 "Add JUnit4 to classpath",点击后也只是在 pom.xml 里再添加一次,并没有什么卵用。
这个问题有个很灵异的现象是,每次用 "mvn clean install" 整体编译的时候是正常的,但是在 idea 跑 test case,或启动某个 main,就会报错。
# 排查
打开 Project Structure 可以看到,这个 module 的 dependency 全是空的:

说明 pom.xml 文件应该是有坑。
查看 maven reload 的output,发现是了问题是某个dependency没有指定版本号
参考其他 module 指定正确的版本号:
再重新reload,问题就解决了。
# 回顾
再回头想想前面提到的灵异现象,从结果倒推,大概是因为把项目作为整体编译的时候,同一个package只能有一个版本,即使模块A没有指定版本,只要模块B有指定,就能正常引用。
之前还遇到过另一个现象,整体编译没问题,但是在 iDEA 里跑单测的时候,会发现引用了旧版本,其实也是同样的问题了。
完。
手头有一个比较大的maven project,拆成了十几个module,如果我要在 Intellij IDEA 跑个单测什么的,就会报错,各种依赖找不到,即使 pom.xml 里是明明白白写着:
依然无法识别,连 lombok 和 junit 都不行:
尽管 idea 很好心地给了帮助 "Add JUnit4 to classpath",点击后也只是在 pom.xml 里再添加一次,并没有什么卵用。
这个问题有个很灵异的现象是,每次用 "mvn clean install" 整体编译的时候是正常的,但是在 idea 跑 test case,或启动某个 main,就会报错。
# 排查
打开 Project Structure 可以看到,这个 module 的 dependency 全是空的:
说明 pom.xml 文件应该是有坑。
查看 maven reload 的output,发现是了问题是某个dependency没有指定版本号
引用
[ERROR] org.apache.maven.artifact.InvalidArtifactRTException: For artifact {org.apache.flink:flink-streaming-java_2.11:null:jar}: The version cannot be empty.
参考其他 module 指定正确的版本号:
引用
<version>1.10.1</version>
再重新reload,问题就解决了。
# 回顾
再回头想想前面提到的灵异现象,从结果倒推,大概是因为把项目作为整体编译的时候,同一个package只能有一个版本,即使模块A没有指定版本,只要模块B有指定,就能正常引用。
之前还遇到过另一个现象,整体编译没问题,但是在 iDEA 里跑单测的时候,会发现引用了旧版本,其实也是同样的问题了。
完。
Aug
1
~/.bashrc 中加上以下内容即可:
如果 git 命令(如 git diff)下仍有代码,可以再增加
如果 vim 下依然有乱码,在 .vimrc 中增加
--
参考资料:
- Mac下使用SecureCRT时中文乱码问题解决
https://blog.csdn.net/BabyFish13/article/details/101463105
- 记一次secureCRT中文乱码解决过程
https://yunchangyue.github.io/blog/tools/2018/11/16/securecrt/
引用
export LANG=zh_CN.UTF-8
如果 git 命令(如 git diff)下仍有代码,可以再增加
引用
export LESSCHARSET=UTF-8
如果 vim 下依然有乱码,在 .vimrc 中增加
引用
set encoding=utf-8
set termencoding=utf-8
set termencoding=utf-8
--
参考资料:
- Mac下使用SecureCRT时中文乱码问题解决
https://blog.csdn.net/BabyFish13/article/details/101463105
- 记一次secureCRT中文乱码解决过程
https://yunchangyue.github.io/blog/tools/2018/11/16/securecrt/
May
12
Dec
24
备查。
#允许 felix021 用户免密 sudo 为所欲为
felix021 ALL=(ALL:ALL) NOPASSWD: ALL
#允许 adm 这个 group 免密 sudo 为所欲为
%adm ALL=(ALL:ALL) NOPASSWD: ALL
# Cmnd alias specification
Cmnd_Alias APT_CMD=/usr/bin/apt-get install *, /usr/bin/apt install *
# 允许所有用户用 root 权限执行 APT_CMD 下的所有命令
ALL ALL=(root) NOPASSWD: APT_CMD
felix021 ALL=(ALL:ALL) NOPASSWD: ALL
#允许 adm 这个 group 免密 sudo 为所欲为
%adm ALL=(ALL:ALL) NOPASSWD: ALL
# Cmnd alias specification
Cmnd_Alias APT_CMD=/usr/bin/apt-get install *, /usr/bin/apt install *
# 允许所有用户用 root 权限执行 APT_CMD 下的所有命令
ALL ALL=(root) NOPASSWD: APT_CMD
Oct
25
Aug
20
简单记一下:
或者
$ cat curl-format.txt
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_starttransfer: %{time_starttransfer}\n
$ curl -w '@curl-format.txt' -o /dev/null -s -L "https://www.baidu.com"
time_namelookup: 0.004
time_connect: 0.018
time_appconnect: 0.050
time_pretransfer: 0.050
time_starttransfer: 0.065
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_starttransfer: %{time_starttransfer}\n
$ curl -w '@curl-format.txt' -o /dev/null -s -L "https://www.baidu.com"
time_namelookup: 0.004
time_connect: 0.018
time_appconnect: 0.050
time_pretransfer: 0.050
time_starttransfer: 0.065
或者
$ go get github.com/davecheney/httpstat
$ httpstat https://www.baidu.com
...
DNS Lookup TCP Connection TLS Handshake Server Processing Content Transfer
[ 0ms | 9ms | 105ms | 10ms | 0ms ]
| | | | |
namelookup:0ms | | | |
connect:10ms | | |
pretransfer:116ms | |
starttransfer:126ms |
total:126ms
$ httpstat https://www.baidu.com
...
DNS Lookup TCP Connection TLS Handshake Server Processing Content Transfer
[ 0ms | 9ms | 105ms | 10ms | 0ms ]
| | | | |
namelookup:0ms | | | |
connect:10ms | | |
pretransfer:116ms | |
starttransfer:126ms |
total:126ms