每隔一段时间都要思考一下自己目前的处境、分析自己的各种特质、探索自己内在的追求。不要因循苟且。
今天早上上班打卡,提醒我我已经入职一年了,是的这是我第二份工作,已经工作快满两年了。已经好久没有更文了。这篇简短的随笔就记录下最近的思考。
①数据量级变化,你的代码颤抖吗?
最近做的一个需求,线上发版后。只有在某个账号下(线上账号),点击该功能查询数据,才会出现服务器异常。
最终排查及优化:我在程序中进行数据拼装,而当前账号的数据循环是百级套多个万级的循环,导致查崩了;说白了,就是代码效率太低了,没有考虑到万级的数量计算!那我干脆就利用SQL关联查询数据,不在代码中进行循环组装数据了,以此来提高效率。后来又想到,为什么不用缓存呀!存入redis中。
当数据的数量级从上升到万级百万级时,我们就不能局限于功能的实现,而要更多考虑性能问题。开始可能要进行缓存,当数量级变大后,要考虑分库分表,做集群等等
这个问题的出现,让我立刻联想到在第一家公司我们几个实习生做的一个园区管理系统,都没有考虑到后期项目,如果存在万级,百万级的数据处理问题,那么后期维护起来就会越来越麻烦,要进行项目优化。
②原来如此的精髓在于你问问题的深度
近来有两件小事,让我觉得问问题的深度决定你是否能捅破那一层窗户纸。有一种相见恨晚的感觉!
前段时间,在研究spring源码 (你知道我晕了多少次吗,自己体会去吧……),然后手写自己的一个minispring框架时,发现,原来spring是继承了httpservlet呀,这不就是刚开始做servlet程序的内容嘛,说白了spring就是在servelt程序基础上,封装优化演变为spring的,瞬间恍然大悟!
关于servlet,早已经模糊了,于是从头到尾找教程模仿了一遍,天呢,这个课程的内容,大学的时候学过,好吧,我都早已经忘了,只记得学过!看完才意识到servlet,可以理解为后台处理请求的原生代码,后面的spring 分明就是基于它而来的。
系统的看完servlet后,关于后面衍生出jsp,看到jsp被jsp container 先转译为jsp_servlet.java文件,然后再执行编译为.class文件,然后将响应的结果返回给浏览器。我们都知道编译,但是你知道怎么转译吗?tomcat是如何转译的?转译后的文件内容是什么?
我一步一步深究下去,发下转译后的文件在\tomcat\work\Catalina\localhost\_\org\apache\jsp
下,打开这个文件发现,竟然有实现了httpjspbean,探究到底 httpjspbean也是继承了servlet,说白了 jsp就是一个servlet! 细细看这个转译的文件,还发现了单例模式的应用,以及内置对象的初始化……
而这,我在翻看我之前的简书文章,发现之前有记过笔记,而然,当时并不能深刻理解为什么会转译,是如何转译的?转译的内容是什么?只是记住了这个请求流程!为什么我在学校的时候没有在深问一层呢?!不然也不至于云里雾里,估计当时就是不能深刻理解吧,真的是打脸,相识恨晚。这种融会贯通的体验,可能就是差了种打破砂锅问到底的精神,差了这种问问题的深度,当然,这也与实践过程中的思考密不可分!
③……
未完待续,随笔仅作记录,改日精简优化!