编程踩坑杂记
检查字符串是否含有隐藏字符
是否有“ZERO WIDTH NO-BREAK SPACE”,比如编码中的BOM——Byte Order Mark
方法1:将字符串使用urlencode编码,得到新的字符串,即可看出是否含有隐藏字符
方法2:使用Linux的file 文件名
命令,得到文件概况
Fiddler代理
捕获Java请求
根据官网,只需设置JVM的启动参数为如下:-DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888
但是使用DefaultHttpClient时,还是无法被捕获,因为其不会自动使用jvm的参数,要在代码中如下设置,参考
DefaultHttpClient httpClient = new DefaultHttpClient();// 创建httpClient对象
ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner(
httpClient.getConnectionManager().getSchemeRegistry(),
ProxySelector.getDefault());
httpClient.setRoutePlanner(routePlanner);
捕获Java请求C#请求
在asp.net启动类Startup.cs的ConfigureServices方法下进行如下配置,使得通过HttpClientFactory创建的HttpClient使用代理请求
services.AddRemoteRequest(options =>
{
options.AddHttpClient("xxx", c =>
{
c.BaseAddress = new Uri("https://www.xxx.com/");
}).ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler()
{
Proxy = new WebProxy("http://127.0.0.1:57887", true)
});
});
为所有的HttpClient设置默认代理:
HttpClient.DefaultProxy = new WebProxy("http://127.0.0.1:57887", true);
Spoon更新失败
原因:输入流的数据记录比目标表的多,导致根据输入流查询时,在目标表找不到对应的记录,所以更新失败
解决方法:勾选“忽略查询失败”
spoon执行完前面步骤后再执行sql脚本
spoon的“执行SQL脚本”步骤默认会在转换初始化完成后立即执行,不会等待前面的步骤先执行完。
解决办法:
- 在前面加入“Blocking step”步骤,并且不要勾选“Pass all rows”,使得此步骤只转发前面步骤的最后一行数据,达到只调用一次脚本
- 在“执行SQL脚本”步骤中勾选“执行每一行”
spoon发送错误时不要裁剪表
勾选“表输出”步骤的“裁剪”选项时,不管前面的步骤是否出错或终止,都会执行清空表步骤。
解决办法是不要勾选“裁剪”选项,而是使用“执行SQL脚本”步骤的方式来清空表,并在此步骤的前面加一个“Blocking step”步骤,两者的设置如上面的“执行完前面步骤后再执行sql脚本”
spoon转换需要在开头加一个输入步骤才会执行
任何转换需要一个输入才会启动
如:需要几个执行sql脚本步骤,必要要在前面加一个“生成记录”等一个随意的输入步骤,整个转换才会真正执行,否则点击执行,虽然没报错,但实际没执行
双击控制台闪退,看不到错误输出
由双击运行改为
- 先启动控制台
- 进入应用所在目录
- 输入应用名称回车运行
此时,即使应用执行错误,控制台也不会关闭
Angular+NG-ZORRO报错“无法加载路由”
组件不要继承于ModalComponentBase基础类
uni-app的text无法解析html特殊字符编码
text组件只能解析少数字符: < > & '
要想解析其他字符,则有两种方式
- 使用rich-text组件,缺点是需要先将html文档构建成一个规范对象,再赋值给该组件,比较麻烦
- 使用view组件,直接将html文档字符串赋值给它的v-html属性,最终uni-app会自动解析html文档,转为rich-text
卸载docker和k8s
yum remove kube* && \
rm -rf ~/.kube/ && \
rm -rf /etc/kubernetes/ && \
rm -rf /etc/systemd/system/kubelet.service.d && \
rm -rf /etc/systemd/system/kubelet.service && \
rm -rf /usr/bin/kube* && \
rm -rf /etc/cni && \
rm -rf /opt/cni && \
rm -rf /var/lib/etcd && \
rm -rf /var/etcd && \
yum clean all
yum remove docker* && \
rm -rf /etc/docker && \
rm -rf /run/docker && \
rm -rf /var/lib/dockershim && \
rm -rf /var/lib/docker
rm -rf /usr/local/bin/kube*
rm -rf /usr/local/bin/docker
find /usr/ -name kube* | xargs rm -rf
find /usr/ -name docker* | xargs rm -rf
旧版nfs-client-provisioner因selflink问题无法兼容新版k8s
问题:旧版本nfs-client-provisioner依赖依赖k8s的selflink特性,而新版本的k8s已经移除此特性,同时,新版本nfs-client-provisioner放在gcr仓库,不好拉取
解决:有人做了适配,并将镜像上传到dockerhub,名为vbouchaud/nfs-client-provisioner,经测试可用,k8s部署nfs-client-provisioner的yaml文件直接使用旧版的即可,无需改动
centos7设置docker daemon远程连接
官网文档参考:
新建配置文件/etc/docker/daemon.json,加入hosts字段,值为可运行连接的方式或主机地址
重启docker服务:
systemctl daemon-reload
systemctl restart docker
使用命令netstat -ant -p
检查是否正在监听端口
坑:网上很多文章都是改/lib/systemd/system/docker.service文件的ExecStart字段,经多次测试无效
majora启动失败排查
开机启动报错:failed to start cpus scheduler,无法进入登录界面
排查过程:
- 进入tty3控制终端:ctrl+alt+f3
- 查看启动日志:journalctl -b -r,r参数为按时间倒序
- 发现报错日志:error while loading shared libraries: libffi.so.7: cannot open shared object file: No such file or directory
- 安装libffi:pacman -S libffi
- 重启又发现报错:error while loading shared libraries: libffi.so.6: cannot open shared object file: No such file or directory
- 建立软连接:ln -s /usr/lib/libffi.so.7 /usr/lib/libffi.so.6
- 检查libffi.so.6和libffi.so.7是否都已存在:find /usr/lib/ -name libffi.so*
- 重启成功登陆:reboot
正则匹配空格
用\s来匹配空格是不对的,\s匹配任何空白字符,包括空格、换行、制表符和换页符,相当于[\f\n\r\t\v]
微信常用文档
Linux命令行连接远程MySQL
直接赋值密码会报错Access denied
mysql --host=172.16.xx.xx --user=root --password=xxxx --port=3306
ERROR 1045 (28000): Access denied for user 'root'@'172.16.xx.xx' (using password: YES)
密码参数不能省略,同时不能直接赋值,需要使用以下命令
mysql --host=172.16.xx.xx --user=root --password --port=3306
或
mysql -h 172.16.xx.xx -P 3306 -u root -p
深信服堡垒机OSM
问题:在Windows11安装IsompSSO插件后,仍然无法从网页启动putty和winscp等服务器登录程序
解决:通过IsompSSO按照目录下的isomp.bat脚本内容,推测堡垒机是通过注册表的方法从网页启动本地程序,IsompSSO程序在win11安装中没有自动设置正确的安装路径,注册表的键路径为计算机\HKEY_CLASSES_ROOT\isomp\shell\open\command
,其值应为"IsompSSO按照路径\sso.exe" "%1"
,通过手动设置正确的路径即可解决正确启动本地程序
XSRF/CSRF
跨站请求伪造能够成功的原因是浏览器会自动把站点的cookie发送给服务接口,因此防止的办法是除了浏览器自动加上的字段外,在请求头加入一些自定义字段,用于区别哪些请求时从自己站点发出,还是其他站点发出
参考
maven配置镜像仓库mirror后无法安装其他repository的依赖包
解决:手动下载其他repository的依赖jar包,然后手动安装到maven本地仓库,命令为
mvn install:install-file -Dpackaging=jar -DgroupId=com.aspose -DartifactId=aspose-words -Dversion=15.8.0 -Dfile=aspose-words-15.8.0-jdk16.jar
-Dpackaging:jar或war,包的后缀名
-DgroupId:pom.xml中groupId
-DartifactId:pom.xml中artifactId
-Dversion:pom.xml中0.0.1-SNAPSHOT
-Dfile:包的本地路径
Zmodem传输文件比SFTP慢
加上-e参数:rz -e,传输速度会有10倍的差距
Windows端口占用排查
查找端口占用pid:netstat -ano | findstr 8080
查找pid任务名称:tasklist | findstr 1234
若netstat查找不到占用端口的进程,则检查是否在系统保留端口范围内:
netsh int ipv4 show excludedportrange protocol=tcp
从系统保留端口范围中删除:
netsh int ipv4 delete excludedportrange protocol=tcp startport=44348 numberofports=10
查看netsh命令的参数文档:输入命令+空格+?
- 如
netsh int ipv4 ?