2016总结

来源:互联网 发布:伴随矩阵 编辑:程序博客网 时间:2024/05/05 06:41

遇到的问题:

作为一个初出茅庐的程序猿,写程序基本是在边探索,边感悟阶段,所以相对于老猿来说,肯定会遇到更多问题,更多的bug。可能这些问题比较基础,你们也遇到过,不过这些问题解决方案也是经过自己认真分析过错得来的。

1、程序登录漏洞。我们做的东西,基本上都是从登录进来的,不管是账户名+密码的验证方式,还是账户+短信验证码的方式,进入系统都起码要经过登录这个环节。前几个月发现我们平台重大漏洞,就是没有保证手机号和验证码的唯一性,导致有了验证码随意登录别人的帐号。这还只是程序逻辑上的问题,及早发现及早处理。还有在数据库表里发现一些奇怪的字符,不用多想,是搞事情的黑客对我们平台进行了SQL注入。一直觉得我们平台安全这方面的工作相当欠缺(代码层)。对于老的东西,也要持质疑的态度,因为前人写的,也不一定是万能的。

2、短信轰炸问题。这可能是我犯过最多错误的一类了。因为很多方面涉及到发短信的问题。第一次是短信验证码问题,当时还被通报批评我们平台的验证码后台没有做1分钟的限制,意思是,稍微懂点网络知识的人,发现你这个发短信接口是不受一分钟只能发一条限制的,用来轰炸别的手机号,那后果就是很严重了。试想一下你手机在半小时内不停的响,那时候简直想让手机原地爆炸。当然手机那么贵我是不会摔的,也不是三星爆炸7。第二次是定时器问题,当时定时器定了3点跑一次,谁知他3点后每分钟都在跑,造成有的用户最多连续收到70条短信,虽然投诉不是我接,但还是相当内疚。后来发现是定时器的配置弄错了,也是按照老的定时器规则写的,发现这么配置并不正确。还是那句话,老的东西也不一定靠谱。其他都还算是小的问题,就不再赘述了。

3、多次点击提交表单问题。我们经常会做到一些表单提交功能,有时候网络延迟慢一点啊,用户手贱喜欢多点啊,种种原因,都会造成表单提交多次的情况,在我们平台就会造成多次订购的问题。这样用户肯定有投诉过来了。解决方案就是在前端设置,每点击一次按钮就把按钮属性去掉,点第二次没反应,直到返回结果再把按钮属性加上。还有一种是每个表里字段不能有重复的,比如说帐号,这些都是不允许有两条记录的,但程序在某些情况下,前端和后端都做不到这个限制,这时候只能从数据库表级限定,不能有重复记录。这级别的限制百试百灵。

4、数据库查询语句to_charto_date问题。大方面来说是程序的边界问题,有时候一些边界值容易忽略掉,从而造成很大漏洞。

5、高并发数据不同步问题。流量银行类似银行账户,账户里有100块,我用了100,但程序上可能会出现事务没及时提交的问题,这时候还显示账户100,这种不提交事务的情况出现了银行岂不是要命。当时程序也有1/200的几率出现这样的问题,我尝试了在各个小方法大方法添加或去掉一些事务注解,当然无济于事。后来发现一个东西:乐观锁。在账户表添加一个version字段,能保证每次都能更新账户。当然,乐观锁是考虑到性能的情况,还是会有读脏数据的情况,如果对读的数据都有要求,那么就要使用悲观锁了。

 

技术建议:

1、适当使用多线程,耗时工作交给异步处理,别让用户等太久。

2、写后端程序是长年跟数据库打交道的过程,SQL优化是必不可少的,一些能优化的sql语句比如not in替换为not exists to_char替换成to_date等等。这里能减少很多耗时。

3、 书:《改善java程序的151个建议》,《JAVA并发编程实践》

4、一些重要的功能,要完善自动监控系统。写个定时器通知什么的,出现问题,能及早发现。

 

研究方向:

半年来看得比较多的都是关于大型网站构建技术。了解到一个高并发高可用网站,不仅要从大环境出发,比如服务器架构层就有集群、分布式,反向代理;数据库层有读写分离,水平拆库、垂直拆库;还有缓存中间件、消息中间件,nosql等等,很多知识需要了解。还有从很多小细节出发,也是目前阶段最需要关心的层面,如何解决一些集群的代码问题,怎么定义接口规范,能使用哪些设计模式,怎么让程序运行更快,更方便迭代。

关于开源技术,这方面实在太多了。前半年学了Spring MVC MyBatis,还有图表插件Echarts,前端框架BootStrap。看起来很多都很好,一时半会看不来,就跟H5一样,学了点皮毛,就感觉相当吃力了,主要还是觉得图像js算法实现起来有难度。目前比较感兴趣的框架是AngularJS,感觉相当有个性,Nosql打算学会redis就好了。

深入java语言基础,最近在看《java编程思想》,了解java的基础知识。可能心态比较膨胀,很想去了解java高级知识——java虚拟机的内容。当然,对1~2年内的经验的程序员来说,这个阶段对于GC、类加载机制、内存模型什么的可能看得不太懂,功夫到一定程度的时候才可能明白这些底层的东西。如果碰壁了就稍微撤退一下。能进能退,乃真正法器。

0 0