工作履历
我工作时间也比较长了,曾经就职于宗亲科技,猫扑网,宏天德美,芒果网。在这些公司曾经做过基础开发,涉及一些商品,订单,日志,权限等一些功能。这些公司让我印象最深的是猫扑网,主要是牛人比较多,团队气氛也比较轻松。现在他们有很多个出来运营了自己的公司,比如找原料网,群接龙,猎狗等。我来讲对我印象比较深刻的几件事情。
认真对待自己做的事情
我曾经的技术团队里有个人,大学学的是林业专业,凭着自己对开发的喜爱,硬是通过自学转入技术的行业。他的开发过程一般是慢于我们一点,但是到了测试环节,却没有几个bug是他的,每次从他身边走过基本都在扩展学习,这让我很是好奇他是怎么做到的,和他的接触和交流知道,开发完都会留出1到两天进行自我测试,反复测试,平时会和别人讨论些技术问题,真的把写代码当成一份事业去做,才导致他提交的代码质量很高。
而我们的普通的软件工程师做法基本是开发完就放任自流了。到测试和上线时就把命运交给了测试。但是上线时总有一些覆盖不到的点,那又要上线,怎么办?只能加班了。这个人后来去了阿里。认真和热爱去做一件事情,做同一件事情你肯定能比别人走得稳走得远。
把每一件事情做好
平常看似简单的事情,做好了不一定简单。我拿互联网短链接来讲,也就是短url。正常我们的第一反应就是寻找一个算法实现长短的转换,但是我们仔细深入思考会发现不存在这种算法,假如短链接是50位长,那存在的总数为62的50次方。62为大写字母26位,小写字母26位,数字10位那他也是有个极限的,而世界上的上的链接他无法容纳。
另一种想法是hash碰撞,碰撞冲突后往后加1,2,3。这样理论是可以但是hash冲突高的连接返回时间会很慢。
而我采用累加的方式,过来一个长连接记数加1,只需要控制好计数就可以,发问题简化为计数的控制即可。
问题1:62进制怎么存储,其实我们就正常用十进制累加,最后转为62进制即可。
问题2:同一个链接转换怎么保证同一个短链接,最正常的方式是key-value对应,用空间换取时间。但是这样比较浪费空间,而我采用存储最近使用的链接,过期策略采用LRU策略。比如过期时间是1小时,1小时内的读取缓存,过期后的连接怎从新生成链接。看似简单的短url生成,其实每一步都不简单。需要我们认真对待,拿到一个需求,其实耗时的是理清楚每一个思路。而不是一上来就进行代码编写。上面是我工作的心德吧。
试用期的工作
主要做了三个迭代
第一个迭代
因为旧版使用flex的原因,给客户造成一些版权的问题,所以把用印组件改造为h5。
重写了是用印组件其中包括了右击菜单,验证,打印属性,用印属性,用印备注,拖章,骑缝章,自动用印等功能,。
第二个迭代
因为大文件传输慢和不安全的原因,进行了大文件拆分和安全传输。大文件采用了断点续传技术进行加载。安全传输采用二进制异或进行加解密
第三个迭代
是加入微缩的功能和上下附件的切换。
前端模块化
其中在这期间自己加入了前端模块化开发的规范,规范了工程目录,css,类拆分,编译压缩混淆输出,最重要的加入了自动化测试,使输出的代码得到保证。
通过这一期间的工作,熟悉了业务,和工作方式,公司对于印章管理这一块的业务积累很深厚。
未来三年规划
分为两大方面,一个是项目上的,一个是个人的。
目前我觉得比较需要优化及规范的是技术框架。
比如数据库事物的管理,实力对象的托管还是没有这些概念。
微服务
项目内技术框架的改造,规范maven目录规范,服务分层,大的服务切分为微服务架构。
Spring的IOC控制反转引入,看我们现在项目的代码,数据库事务的控制是手动控制的,service靠new进行实例化,无形给开发人员增加了难度。分布式配置依赖于linux操作系统的文件夹共享,诸多不太合理的地方进行改造。
前端模块化开发
前面已经说过了。其中在这期间自己加入了前端模块化开发的规范,规范了工程目录,css,类拆分,编译压缩混淆输出,最重要的加入了自动化测试,使输出的代码得到保证。
单元白盒测试的引入与规范
一方面能减少代码修改的出错概率,能减少bug产生率,能减少测试的工作量。迫使测试人员去仔细的思考软件的实现;可以检测代码中的每条分支和路径;揭示隐藏在代码中的错误;对代码的测试比较彻底;最优化。一次重构代码,没有单元测试的情况下是灾难的,你要重新覆盖所以测试,有了单元测试,你只需要覆盖主要业务即可。
个人规划
学习
Javascript举例
作为开发而言,技术更新是非常快的,那js而言。市面上已经出现很多个常用框架,比如VUE,Jquery,react,SASS,Grunt有些名词听都没有听过。你怎么能应用于平常开发呢,只有通过业务的学习提升来解决问题。
保持学习的习惯
学习分享
我以前会组织一周一次分享,内容不定,可以js,css,java甚至一篇文章。这种会议是高效的,你没有弄明白,你是不可能讲的明白的。这样一方面督促每一个人的学习能力,另一方面提升讲解能力,还有一点通过分享也是让大家相互熟悉的一个过程。
语言
语言能力作为一项基本必备技能我主要从下面几个方面考虑:
口头语言表达能力和书面语言表达能力、宣传鼓动能力、说服能力、幽默能力、演讲能力。
简单的讲就是不仅要把一件事情讲明白,而且要把一件事情讲的吸引人。
一方面增加自己的写作,仿佛高考之后就很少写作了。高考前兼职就是写作的顶峰。
这个我没有太多经验,只能从平时的观察,思考和练习中提升了。
管理
古话曾讲:"千军易得,一将难求"。说明将在团队中的重要性。拿我身边的群接龙来讲,他们也和大多数互联网公司一样,经历了前期开心创业,中期业务困扰和后期业务突破。很多互联网公司都死在了业务拓展上。在业务困扰的时候,也是老板最忧愁的时候,没有老板顶住外界巨大的压力,根本无法突破公司的困难。
管理能力对我而言确实比较薄弱。因为在上家公司确实深深感受到带领团队比自己写好代码更难,自己写好代码很容易,让大家一起写好代码却挺难的,因为每一个人思想不一样,每个人性格不一样,怎么把大家连起来,拧成一股绳确实是一门学问。
目前我从几点出发。
平时注重细节,周围的人是时刻看着自己。
区分事情的重要程度,优先做重要程度高的事情。
追求完美,一个高级开发不只快速完成分配的任务,还有无bug的完成,不能一直依赖产品和测试。还需要自己反复测试,杜绝问题的产生。
团队氛围,多和伙伴们的沟通,闲时组织些体育运动等。
自我评价
能按时按质量的完成工作任务,工作上还是比较积极主动,对于一些难点能快速解决处理,知识方面比较全面,团队合作还是比较愉快的。
技术
技术扎实,无论从前端还是后端,前端的JavaScript,CSS,Nodejs。后端的java,spring,mybatis等都是很熟悉的。
架构能力,可以搭建分布式系统,规范项目开发,熟悉多线程并发开发。
管理
比较欠缺,只能通过观察,思考,书本学习,和实践进行提升。