daliy dev
Table of Contents
linux
command
查看
这里推荐用less
或者 more
,当然cat
也可以,但是不方便阅读
批量文件删除
一般是删除一些 具有特定格式的文件find ../ -name '***.go' -delete
这个命令最好用,应该有些基于 pipe的命令
简易压测
可以用 apache benchmark
也就是ab进行压测,yay -S apache
最简单的使用就是ab -n 1000 -c 100 http://test/do1
关于PATH
一般通用的软件 sudo echo 这些都是在/usr/bin目录下的可执行文件
具体的路径可以/etc/profile
里看到
三方软件可能会在 opt
关于desktop
在yay里,一些软件可能会在/home/xxx/.local/usr/applications,更通用的路径是/usr/share/applications,注意一些开源软件的desktop文件名可能是org.xxx.xxx.desktop
文件重命名
rename
批量重命名,通常在对文件归类时使用,但是常见的博客,匹配模式写一堆,让人感觉命令的基本用法: rename “pattern” aim_file,实际上如果你想对含有XX123.suffix
的文件变成YY123.suffix
,直接 rename "XX" "YY" *
就好了…否则三个参数传两个,连报错都没,如果是zsh还有个x号,sh只能一脸懵逼了
arp抑制
arp
做lvs的时候必须关闭,我在局域网测试的时候,ping到了虚拟ip,但是实际上走的不是broker,应该是 arp这个ip获取了 mac地址
ip
ip
这个命令,可以查看网卡的ip,我的环境网关是192.168.1.1 DHCP到ip 是 192.168.1.104实际上直接改同一网段的ip也可以,这样ip就固定,
jps
jps
这个命令能迅速的找到java进程的pid,比ps -a | grep '*java*'
快多了
简易批量
bash
中可以做for
配合do xxx done
批量操作,对于一些批量的command,如果不熟悉,还是先测试,不要造成大面积的文件覆盖,还有就是文件名书写的时候一定要正确,今天docker搭集群的时候,redis-cluster写成了reids-cluster,然后docker在主目录创建正确的挂载了,导致我以为是配置问题
mount
-a, --all mount all filesystems mentioned in fstab
这是 mount -h得到的信息,可以发现在 /etc/fstab 这个文件配置了挂载信息,之前挂载机械后,配置了nofail就没关了,mount -a就会提示错误,
vmstat
查看虚拟内存信息,主要看看memory inactive,swap
java
basic
对象比较
for (ColumnFamilyHandle handle : handles) {
// 这里尝试将 byte对象 进行比较,显然 always false !!!
// 基础不牢
if(handle.getName() != RocksDB.DEFAULT_COLUMN_FAMILY) {
// do something ...
}
}
JSON
序列化
场景是使用 Vertx
内置的jackson
,有个对象内部是存在一个Map
,这个时候必须提供getXXX
方法,不然是不会放进JSON
l里的,原因很简单,Map
不支持
public void removeBlockList(List<String> list) {
list.forEach(t->{blockList.remove(t);});
}
public void removeWhiteList(List<String> list) {
list.forEach(t->{whiteList.remove(t);});
}
mvn
mvn组件version
mvn
在存在多个依赖的时候,会优先选择版本较低的组件
feat: 又也遇到这个问题了,对spring
降级的时候和dubbo
的依赖冲突了,导致spring-context
的version
本应该是6.x.x
,但是实际引入的是5.x.x
,关键这个问题不好排查,之前的组件较少的时候容易解决,或者对其他组件依赖较少的时候能迅速定位,但是遇到这种大量的组件依赖相同的时候,只能一个一个去查看pom
的原始依赖了,所以如何解决这个问题呢,其实不需要,只有重构的时候可能遇到大面积的组件升降级问题
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.39.42.ALL</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</exclusion>
<exclusion>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 首先这是改进 是 alipay 的 sdk 使用了 okhttp的组件,和我的一个组件冲突-->
异常:Okhttp关于 java.lang.NoSuchMethodError: okio.BufferedSource报错 实际就是版本过低问题,排查mvn依赖后发现冲突故解决
spring
spring yml config bug
遇到一个配置bug
,本来想提交一个issue
,后来觉得也只有自己会配置这种奇怪的字段了,就是如果字段是off
的话,并且是boolean
类型,会注入不进来,还有一个问题是这个配置类如果字段是private
的话,需要提供getter/setter
方法
go
synatx
匿名函数
d := func(a int) {
if a == n {
ans = append(ans,t)
}
// add this item
t = append(t,nums[a])
// 不事先申明d 变量的时候不允许直接在 匿名函数内部调用自身
d(a + 1)
// do not add this one
t = t[:len(t)-1]
d(a + 1)
}
解决办法
var d func(int)
d = func(a int) {
if a == n {
ans = append(ans,t)
}
// add this item
t = append(t,nums[a])
d(a + 1)
// do not add this one
t = t[:len(t)-1]
d(a + 1)
}
- 切片 今天写一个gin的封装框架的时候,存在一个bug:gin可以启动成功,但是一打进去请求就会导致npe,排查后错误如下
// adaptor transmit PeroHandlerFunc -> gin.HandlerFunc
func (p *PeroHttp) adaptor(handlers []PeroHandlerFunc) []gin.HandlerFunc {
// 表面上看这里好像完全无问题,但是实际上这里的ginHandlers已经有值了,就是nil
//正确的写法是 make([]gin.HandlerFunc,0,len(handlers))
//或者 := []gin.HandlerFunc{}
ginHandlers := make([]gin.HandlerFunc, len(handlers))
if handlers != nil {
for _, v := range handlers {
ginHandlers = append(ginHandlers, p.convert(v))
}
}
return ginHandlers
}
debug的结果
可以看到,在最开始的写法的时候,是分配了内存空间的,这就导致convert后的gin.HandlerFunc第一个nil,所以npe了,以后使用切片还是最简语法最好