应用的场景:SDK校验token的场景下面需要查询KS表,KS表中大概有4600万条数据
两点: 2.1).每次协商秘钥都需要重新写入一条数据覆盖原来的数据,写的时候会同时写入数据库和缓存中,数据的写入耗时不大(小批量的数据) 2.2)耗时主要是数据的查询,在数据的查询时,做了两个方面的优化 a.增加缓存,将查询的结果按(passid+machinecode),info)的方式存入缓存,下次再来查询的时候,直接从缓存中 读取,大大加快速度 b.对查询的表增加索引,对经常需要作为查询条件的列设置索引,如查询ks的时候就是以(passid,machinecode)作为 查询的列,对这个两个列做一个联合的索引,查询的时候能够提高查询的效率。
3)通过将实时性要求不高的请求处理方式有同步的改为异步的方式来提高程序的效率(每天需要推送的号码大概在110W条) 在客户端发送取号请求后,服务端获取到手机号码以后需要向第三方推送,如果推送给第三方存在很多不确定 的因素,如网络状况不好,第三方提供的地址不可用等情况,会造成服务器一致等待第三方的响应而影响性能 在此可以将同步的推送改为异步的推送,采用卡夫卡消息队列的方式去推送号码给第三方。 4)将经常变化的数据存储到文件,再从文件中读取到缓存,由于程序无法实时监测到数据库的更新,但却可以 可以实时监测到文件的更新,故对于经常需要修改的数据存放在文件中,程序可以实时监测到变化再重新加载一次 3.熟悉了常用的加解密算法,并能做一些常用的安全加密算法 1)常用的加解密算法,DES,AES对称加解密短发,RSA非对称加解密算法(RSA运用在协商秘钥的过程当中) 2)常见的数字签名算法,MD5数字签名,SHA-1数字签名,使用场景:对参数进行签名,防止在网络传输中被篡改 4.掌握了一些定位于分析问题的技能 1).利用调试模式,在开发阶段能够方便的跟踪代码,定位具体的问题 2).在上线维护阶段则要注意日志的打印,以下的几个关键地方需要打印日志: a.调用外部接口的时候 b.对数据库进行操作的时候 c.接收和返回给前端的时候 5.java的FTP和多线程的方式 在对接boss的模块中用到了这两个知识点 1.FTP服务器的搭建 2.利用java编写FTP客户端程序 java多线程方面 用到的模式是多个线程来处理同一批数据,如何防止多个线程之间不会存在冲突呢? 使用vector防止多个线程同时读取数据的时候发生冲突 三.在工作的过程当中有没有碰到什么样的问题 1.是在研发线上面部署了多套多线程的程序,多套程序的线程同时读取一个目录线面的文件处理 开始的时候时候以为只有一套,,把这套程序给关掉了,发现数据仍然在被读取,结果发现是在别的地方也存存在相同的 程序,定位到是多套程序之间相互造成干扰的原因,后来只开启一套程序开发测试 2.二是在linux服务器上面的日志文件读写权限的问题 以root用户的身份将文件拷贝到服务器上面之后,再用普通用户启动的时候,发现一直没有日志显示 查看了tomcat的启动的服务日志后发现是没有日志文件的读写权限。将文件的所有者改为普通用户后,再次启动程序发现 可以写入日志 3.在java异常处理的时候里层的方法在方法里已经做了try catch处理但是同时又有抛出异常的声明, 在外层的时候运用try catch无法捕捉到这个异常,导致外层的try块里面出异常了没有执行catch语句块,而是直接执行下面的语句。 4.网关白名单的改造 将经常变化的数据存储到文件,再从文件中读取到缓存,由于程序无法实时监测到数据库的更新,但却可以 可以实时监测到文件的更新,故对于经常需要修改的数据存放在文件中,程序可以实时监测到变化再重新加载一次5.把推送给第三方的方式有实时的改为异步的
三.在工作中有注意过在技术积累方面
1.在技术方面有没有有意思的做一些自己感兴趣的技术的积累?
在技术方面现在很多公司都要求掌握SpringMVC,SpringMVC可以说是这几年来开发的大潮流,有自学Spring方面的一些东西,最近在一个新的项目中采用了
spring boot来做开发,想加强一下自己这方面的能力。