文章字数:65,阅读全文大约需要1分钟
tomcat在jdk的三个类加载器下增加了share,webApp加载器,多个webApp用于TomCat下不同的应用,防止不同程序相同的类冲突。shre用于提取不同app下相同的类。如同版本的Spring
TimeUnit类
文章字数:285,阅读全文大约需要1分钟
这是
java
并发包java.util.concurrent
下的一个用于定义时间粒度、时间转换、线程休眠的工具类。
枚举量
1 | SECONDS:秒 |
常用方法
toHours(long duration)
:
粒度之间都有类似的方法1
2// 一天几个小时
Long dayToHour = TimeUnit.DAYS.toHours(1);//24convert(long sourceDuration, TimeUnit sourceUnit)
1
2// 48小时转换成天
TimeUnit.DAYS.convert(48, TimeUnit.HOURS);//2sleep(long timeout)
可读性更好的线程休眠操作1
2//休眠两分钟
TimeUnit.SECONDS.sleep(2);timedJoin(Thread thread, long timeout)
1
2//指定线程休眠指定毫秒数
TimeUnit.SECONDS.timedJoin(Thread.currentThread(), 2);timedWait(Object obj, long timeout)
1
2
3
4
5//休眠指定对象
public synchronized void show() throws InterruptedException {
TimeUnit.SECONDS.timedWait(this, 2);
System.out.println("HelloWorld");
}
UnsupportedOperationException
Uncaught-SyntaxError--Unexpected-end-of-input
文章字数:145,阅读全文大约需要1分钟
意外的终止输入,浏览器读取我们的javascript代码时,碰到了不可预知的错误,导致无法继续解析下去。
今天遇到这个问题,开发的时候没问题,软件打包测试时前端抛出这个错误。
首先想到是不是标签没结束之类的,检查了一遍提交的代码没有发现异常。
之后考虑到前端有做压缩,然后思考是不是注释的问题。最后发现有一处\\
的注释,删除运行正常。
Web扫描工具
ZGC
文章字数:557,阅读全文大约需要2分钟
介绍
ZGC
是JDK11
之后带来的全新垃圾回收器,主要目标是降低停顿时间,但是会一定程度上降低吞吐量。
- 主要目标
- 支持
TB
级别的堆 - 最大停顿不超过
10ms
,无论堆的大小,这个数据都不会变 - 奠定未来
GC
特性的基础 - 最糟糕的情况下吞吐量只降低
15%
,不过可以用横向扩容解决
机制
Pause Mark Start
暂停标记阶段,找到当前活跃的引用。此阶段速度很快,会造成短暂的停顿Concurrent Mark
并发标记阶段,从上一步基础上继续往下标记存活对象。在并发结束后会有一个端在的停顿,确保所有对象都被标记Concurrent Prepare for Relocate
准备阶段,并发选取接下来需要标记整理的对象。结束后会有一个端在的停顿,用于移动root
集合对象的引用Concurrent Relocate
移动上一阶段标记存活的对象,并整理
特性
- 没有分代,分代实现较为麻烦,目前没有分代
Region Based
,ZGC
的内存空间被分为三类规格的空间,2MB
、32MB
、N*2MB
,灵活性更好Partial Compaction
部分压缩
YGC和FGC
文章字数:165,阅读全文大约需要1分钟
YGC
:对新生代堆进行gc
,即young GC
。频率较高,edn
空间不足时会执行,此时会回收大部分对象。性能消耗较小FGC
:全堆范围的gc
默认堆空间达到80%时触发fgc
。触发频率较低,7-10天可能才会触发一次。old
空间、perm
空间不足,调用System.gc()
,ygc
的悲观策略、dump live的内存信息时(jmap –dump:live)都会触发
悲观策略
当jvm计算ygc
之后需要晋升的空间大于剩余空间时就会直接执行一次fgc
,因为反正晋升之后也需要执行一次。
activeMQ基于插件的连接鉴权
文章字数:297,阅读全文大约需要1分钟
activeMQ
本身只支持通过配置文件配置用户名和密码的方式管理连接,但是实际使用中 用户名和密码都是动态分配的。最后在网上找到了一个给activeMQ
开发插件鉴权的方法。
大致步骤
创建一个
java application
,并添加activeMQ
的依赖。版本和部署的版本保持一致。创建一个
broker plunin
类,并返回一个Broker
的子类。这个子类就是控制连接鉴权的。
1 | import org.apache.activemq.broker.*; |
3.实现AuthFilter
,重写addConnection
方法,进行权限校验。失败抛出SecurityException
,提示用户名密码错误。验证成功调用传入的broker
的addConnection
方法。
1 | // 调用父类构造方法,传入broker |
- 通过配置文件加入插件
activemq.xml
1 | <!-- 其它同级的地方可以配置注入spring的bean,完成数据库的配置 --> |
activeMQ配置mqtt ssl
文章字数:313,阅读全文大约需要1分钟
第一步,生成证书
- 生成证书以及导入受信证书
- 放在
ActiveMQ
安装目录下/conf/
新建cert
目录,并放入证书
第二步,配置证书
activemq.xml
子节点增加证书配置
1 | <sslContext> |
第三步,增加mqtt+ssl协议
- 单向认证配置,即不会去验证客户端连接的证书
1 | <transportConnector name="mqtt+ssl" uri="mqtt+ssl://0.0.0.0:1883?maximumConnections=30000&wireFormat.maxFrameSize=204857600"/> |
- 双向认证,客户端的证书需要可以被
truststore
认证通过(自签的话就是需要把证书先导入到ActiveMq
的truststore
)
1 | <transportConnector name="mqtt+ssl" uri="mqtt+ssl://0.0.0.0:1883?maximumConnections=30000&wireFormat.maxFrameSize=204857600&needClientAuth=true"/> |
adb常用命令
文章字数:1116,阅读全文大约需要4分钟
Android Debug Bridge
安卓调试桥,是一款C/S
架构的命令行工具。
组成部分
Client
:运行在PC端,对Android
应用进行安装、卸载、调试。Service
:运行在PC端,管理客户端到设备的abd后台进程的连接adb进程
:运行在Android
设备5037
端口
adb命令
命令格式:
1 | adb [-e | -d | -s <设备序列号>] <子命令> |
adb devices
获取设备列表及设备状态adb get-state
获取设备的状态,device
正常连接、offline
连接异常无响应、unknown
没有连接设备adb kill-server | abd start-server
:结束或者启动adb服务,状态异常是kill-server再startadb logcat
:打印Android
的系统日志adb bugreport
:打印dumpsys
、dumpstate
、logcat
的输出,用于错误分析adb install
:安装应用,覆盖安装-r
adb uninstall
:卸载应用,后面跟应用包名。-k
选项保留数据和缓存目录adb pull
:将Android
设备上的文件或者文件夹复制到本地1
adb pull xxx/a.txt d:\xxx.txt
adb push
:推送本地文件到Android
设备1
2# 最后的'/'一定要有,否则报错
adb push d:\push.txt sdcard/test/adb root , adb remount
:部分手机支持,获取root权限,系统文件为可读状态adb reboot
:重启设备1
2
3
4
5# 重启,进入fastboot模式
adb reboot-bootloader
# 重启,进入recovery模式
adb recoveryadb foward
:将宿主机上的某个端口重定向到设备的某个端口1
2# 把主机1214端口的信息数据都转发到设备的8888端口,实现远程控制
adb forward tcp:1214 tcp :8888adb connect
:远程链接Android设备1
2
31. pc,设备处于同一网段
2. 手机root,安装adbWireless,运行
3.adb connect ipadb disconnect <ip>
断开连接
不断开连接别人的adb
就登录不上去
adb shell命令
1 | # 调用安卓设备上`system/bin`目录下的脚本程序 |
adb shell pm list package
:列出安装在设备上的应用1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 系统应用
adb shell pm list package -s
# 第三方应用
adb shell pm list package -3
# 应用包名及对应apk名及位置
adb shell pm list package -f
# 查看安装来源
# 例:package:com.zhihu.android installer=com.xiaomi.market
adb shell pm list package -i
# 查找关键字 -f | -FILTER
adb shell pm list package -f -3 -i 关键字adb shell pm path packageName
:列出包名对应的apl位置pm list instrumentation
:列出含有单元测试case的应用,可加-f参数pm dump package
:列出指定应用的dump
信息pm install
:安装应用pm uninstall packageName
:卸载应用pm clear
:清除应用数据pm set-install-location
、pm get-install-location
:设置/获取应用安装位置am start
:启动一个Activity1
2
3
4
5
6
7
8
9
10# 打开相机
adb shell am start -n com.android.camera/.Camera
# 先停止再启动
adb shell am start -S com.android.camera/.Camera
# 等待应用完成启动
adb shell am start -W com.android.camera/.Camera
# 用默认浏览器打开网页
adb shell am start -a android.intent.action.VIEW -d http://testerhome.com
# 启动拨号器拨打10086
adb shell am start -a android.intent.action.CALL -d tel:10086am instrument
:启动instrumentationam monitor
: 监控crash与ANRam force-stop
: 后跟包名,结束应用am startservice
:启动一个服务am broadcast
: 发送一个广播向设备发送按键事件
input text
:发送文本,非中文1
adb shell input text test123456
input keyevent
:发送按键事件1
2# 按下home键
adb shell input keyevent KEYCODE_HOMEinout tap
:发送触摸事件1
2# 点击坐标为500 500的位置
adb shell input tap 500 500input swipe
:滑动事件1
2
3
4# 从右边向左滑动
adb shell input swipe 900 500 100 500
# 模拟长按(小距离内较长时间滑动)
adb shell input swipe 500 500 501 501 2000screencap截图
screencap -p
: 截屏保存1
adb shell screencap -p /sdcard/screen.png
screenrecord
:录制1
2# 录制视频,ctrl + c 结束录制
adb shell screenrecord sdcard/record.mp4获取当前界面的控件信息
adb shell uiautomator dump
:获取控件信息1
2
3# 不加 [file] 选项时,默认存放在 sdcard 下
[xuxu:~]$ adb shell uiautomator dump
UI hierchary dumped to: /storage/emulated/legacy/window_dump.xml输入法ime
adb shell ime list -s
:列出输入法adb shell ime set com.baidu.input_mi/.ImeService
:选则输入法
分辨率wm
adb shell wm size
: 获取屏幕分辨率
测试
monkey
:随机发送输入事件,用于测试1
2
3
4# 保存信息到d盘 monkey.log
adb shell monkey -p com.android.settings 5000 > d:\monkey.log
# 保存信息到手机的目录(加引号)
adb shell "monkey -p com.android.settings 5000 > sdcard/monkey.log"
系统
settings
:设置系统参数dumpsys
:服务信息log
:在logcat中打印指定信息1
2# -p:优先级,-t:tag,标签,后面加上 message
adb shell log -p d -t xuxu "test adb shell log"getprop
:查看系统参数1
adb shell getprop ro.build.version.sdk
其它
还支持linux的命令