问题集01

问题的由来:

我们公司是迭代开发的模式运行的,基本上是每个月一个版本上线。在这个版本就出现了两个问题,被虐的怀疑人生啊。

第一个问题

我写的一个接口需要对客户端传来的字符串进行RSA公钥加密操作,然后将加密字符串传给调用方私钥解密。加密解密代码网上都有,测试的公钥私钥对已经提供了,因为我这边接口需要用公钥加密,所以我就把公钥放到配置文件里,通过读取配置来获得公钥。没啥逻辑,然后一顿biubiu就完成了代码编写。因为解密的逻辑不在我这,所以我就在本地写了一个解密方法来测验。一开始用postman测了下接口返回了一段加密字符串,然后用我的本地解密方法对字符串进行解密,成功解密,美滋滋。本来准备转测了,一想还有中文没试,就测了一下发现解密出来的字符串是乱码一堆问号???:

  1. 是不是加密方法写错了,然后我就把加密方法copy到本地,用本地的方法加密解密,结果不管中文英文都可以解密成功,有点挑战啊;
  2. 是不是从配置文件里获取的公钥有问题,然后我就在对应的位置加了debug日志,结果用对比工具对比没有区别,稳住不慌;
  3. 那是不是在获取请求、提供响应时的字符集转码问题,然后把获取的请求和发送响应的数据打上日志,结果还是一样的没有被转码,难受;
  4. 然后我把解密解密方法都写在接口里,这回总可以了吧,然而还是出现乱码。为什么在本地运行没有问题,编译发布后在服务器上就会出现问题呢,头疼;
  5. 难道是本地和服务器的jdk版本不同引起的?然后我分别查看了下本地和服务器上的java -version 发现都是1.8.。。有毒;
  6. 是Tomcat的原因吗,毕竟本地是main方法运行测试,服务器上是tomcat,然后自己搭建了一个简易web工程,springMVC利用浏览器的请求获取对应的接口,确实会出现乱码,问题是定位出来了,但是怎么改呢,Tomcat的service.xml的< Connector URIEncoding=“UTF-8” connectionTimeout=“20000” port=“8080” protocol=“HTTP/1.1” redirectPort=“8443”/>是UTF-8啊,这怎么办啊 ;
  7. 折腾了两天后,那既然不支持中文,那就把中文转成非汉字的符号,加密解密之后再转回来不久行了么,嘻嘻,最后用了URLencode和URLdecode就解决了。

第二个问题

还有一个需求涉及到两个接口,主要逻辑是:一个同步接口用来把一批新增和删除的数据同步到数据库中并删除对应的缓存,另一个接口是用来获取根据条件查询对应的数据,先从缓存中获取,如果查不到就会从数据库中查询对应的数据,然后不管查没查到对应的数据都会存对应的数据入缓存。然后编写完对应的代码,自测转测,以为没啥问题了,然而bug无处不在。测试说日志显示数据是从缓存中获取的,而查redis数据库查不到对应的数据。
面对这个问题我首先想到了三个方案:

  1. 是我的代码逻辑写错了,没有做相应的判断。结果经过三个人的火眼金睛,确定代码是没有问题的;
  2. 那既然不是我的问题,会不会是测试登错redis数据库,数据没有被及时同步过来呢,然而并不是,redis数据库是一主3从3哨兵,我访问了7个库,都没有对应的数据;
  3. 那会不会是代码里数据库对应的配置连接有问题,找到对应的配置文件,确认是没问题了,啊头都大了。
  4. 公司的一位大佬说redis怎么被锁住了,我一想不会是这个原因吧,然而我们缓存虽然用了setnx方法存缓存,但是修改后问题还是没有被解决。。
  5. 又经过一群大佬的分析调试,最后推断可能是zookeeper集群配置问题,因为我们环境上配置zk集群有两个connecter,把其中不用的一个去掉就可以了。

问题总结

说到底还是对Tomcat不熟悉,还是得看看Tomcat的底层原理,多阅读源码。不管是分布式锁的使用还是zk集群都还不熟悉,导致问题定位不出,解决不了问题。所以学习的路还是很长的,要学的东西也很多,坚持下去就会有收获的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值