编程踩坑杂记

检查字符串是否含有隐藏字符

是否有“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脚本”步骤默认会在转换初始化完成后立即执行,不会等待前面的步骤先执行完。

解决办法:

  1. 在前面加入“Blocking step”步骤,并且不要勾选“Pass all rows”,使得此步骤只转发前面步骤的最后一行数据,达到只调用一次脚本
  2. 在“执行SQL脚本”步骤中勾选“执行每一行”

spoon发送错误时不要裁剪表

勾选“表输出”步骤的“裁剪”选项时,不管前面的步骤是否出错或终止,都会执行清空表步骤。

解决办法是不要勾选“裁剪”选项,而是使用“执行SQL脚本”步骤的方式来清空表,并在此步骤的前面加一个“Blocking step”步骤,两者的设置如上面的“执行完前面步骤后再执行sql脚本”

image

spoon转换需要在开头加一个输入步骤才会执行

任何转换需要一个输入才会启动

如:需要几个执行sql脚本步骤,必要要在前面加一个“生成记录”等一个随意的输入步骤,整个转换才会真正执行,否则点击执行,虽然没报错,但实际没执行

image

双击控制台闪退,看不到错误输出

由双击运行改为

  1. 先启动控制台
  2. 进入应用所在目录
  3. 输入应用名称回车运行
    此时,即使应用执行错误,控制台也不会关闭

Angular+NG-ZORRO报错“无法加载路由”

组件不要继承于ModalComponentBase基础类

uni-app的text无法解析html特殊字符编码

text组件只能解析少数字符:  < > & '    

要想解析其他字符,则有两种方式

  1. 使用rich-text组件,缺点是需要先将html文档构建成一个规范对象,再赋值给该组件,比较麻烦
  2. 使用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,无法进入登录界面

排查过程:

  1. 进入tty3控制终端:ctrl+alt+f3
  2. 查看启动日志:journalctl -b -r,r参数为按时间倒序
  3. 发现报错日志:error while loading shared libraries: libffi.so.7: cannot open shared object file: No such file or directory
  4. 安装libffi:pacman -S libffi
  5. 重启又发现报错:error while loading shared libraries: libffi.so.6: cannot open shared object file: No such file or directory
  6. 建立软连接:ln -s /usr/lib/libffi.so.7 /usr/lib/libffi.so.6
  7. 检查libffi.so.6和libffi.so.7是否都已存在:find /usr/lib/ -name libffi.so*
  8. 重启成功登陆: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 ?

参考

posted @ 2020-09-30 17:51  woncode  阅读(1019)  评论(0编辑  收藏  举报