2016年总结 - Java程序员
一 . 技术积累
(1)代码规范
1.1.1、通常的模块分布:一般如果你要实现一个web应用,你从后台将数据展示到前端页面,在一个比较大的公司,你少不了跟其他项目有交集(你调用他的接口,他依赖你的接口),这样下来,整个公司有很多个模块,怎么做到很好的联系。回到刚刚的模块分布,你的一个web应用,应当需要分成三个模块:core模块、service模块、web模块。web模块就是展示到页面,后台代码而言主要就controller层了,其他逻辑基本都放在core了,service模块就是一些接口类和参数dto等等,接口的实现类在core模块。这样下来,web模块只需要依赖service模块,同样的其他系统依赖你的接口也仅仅是依赖service模块,然后利用远程调用方式消费你的接口服务。
1.1.2、代码层级结构:针对后台服务项目,一般分为对外接口层、service层、Dao层。Dao层就是与数据库交接的接口层,service层主要调用Dao或者外部系统的接口,复杂的逻辑基本都放在service层;一些方法需要提供给其他模块调用的时候,就封装在对外接口层,只有对外接口层是暴露。这里说的只是层级结构,还有与层级结构无关的,也是需要归类的,比如对外部系统接口方法封装的我们放在一个目录下面,一些常量和工具类等我们放在common目录下面。当然还有其他考虑,尽量让整个模块有层次感,代码才不会太乱,更好的维护。
1.1.3、总结上面两点:可能不少猿友觉得上面啰嗦又不像代码规范,其实这两点也是代码规范的一部分,主要引导大家往结构清晰好维护的思维方向走,多思考吧。
1.1.4、对于一些需要异步处理的,不要直接new一个thread,应当使用线程池。使用线程池的时候应当对线程数量大小合理设置,一般最大不超过50个,当然还需要考虑你的IO和CPU,怎么分析网上搜搜吧。
1.1.5、容器类变量,如果变化比较大且频繁,尽量定义的时候设置初始容量大小,减少扩容带来的消耗。
1.1.6、分支判断if…else的时候,最常符合的条件处理放在前面。
1.1.7、对象比较的时候常量放前面,养成好习惯,减少空指针的出现。
1.1.8、减少synchronized中等待处理的代码,能放在外面就尽量放在外面。
1.1.9、下面到数据库了,我觉得还是在这里说了好点,一般查询比较慢,很有可能是没有建索引或者索引没用到,多去检查一下。
1.1.10、两个大表的关联查询,可以使用二次访问数据库替代,先查出A表的数据,利用关联字段再查B表的。不要一味想着一条sql搞定最好。
1.1.11、坚决避免,查全表数据或者数量大的数据,返回list加载到内存中,一不小心查了100w数据,又查得比较频繁,内存的爆了。有这种风险的改成分页查询。
1.1.12、不要select *,按需取列。
1.1.13、多考虑避免事务里面有长这连接或者长事务,如果大量种情况出现占用数据连接,会影响性能。一些无必要的逻辑可以放到事务外执行。
1.1.14、对字段的加减乘除处理放到sql,严格避免先get处理,然后运算在set到数据库里面,并发情况非常容易导致失真。
1.1.15、方法里面代码不要太长,注意封装,命名语义化,代码整洁。常挂嘴边的,没放心上,一如既往的给自己埋坑,举个博主的例子,最近把我们组长不写代码,一到代码评审我就害怕,检视到有问题的代码,毕业生吧就说这代码以前就是这样写的,问题最终肯定都落我身上,现在感觉代码是自己的孩子,只能有空自己偷偷的优化一下,怕出问题还得非常仔细。
(2) 关于数据库连接池。
可能一些猿友都少去注意吧。先来看看一些参数,这里只罗列了博主比较关注的,更多的可以自行查看一下配置。
initialSize : 默认值是 0, 连接池创建连接的初始连接数目。
minIdle : 默认是 0, 连接数中最小空闲连接数。
maxIdle : 默认是 8 ,连接池中最大空闲连接数。
maxActive : 默认值是 8, 连接池中同时可以分派的最大活跃连接数。
maxWait : 默认值是无限大,当连接池中连接已经用完了,等待建立一个新连接的最大毫秒数 ( 在抛异常之前 )。
validationQuery : 一条 sql 语句,用来验证数据库连接是否正常。这条语句必须是一个查询模式,并至少返回一条数据。一般用“ select 1 ”。
minEvictableIdleTimeMilis : 默认值是 1000 * 60 * 30(30 分钟 ) 单位也是毫秒,连接池中连接可空闲的时间。
timeBetweenEvictionRunsMilis : 默认值是 -1 ,每隔一段多少毫秒跑一次回收空闲线程的线程。
对于minEvictableIdleTimeMilis、timeBetweenEvictionRunsMilis这两个参数,timeBetweenEvictionRunsMilis必须大于1且小于minEvictableIdleTimeMilis,建议是minEvictableIdleTimeMilis的五分之一或十分之一。
(3)
对于前端的几点建议。
1.7.1、一些图片压缩后再使用,性能方面提高不小吧(可以使用熊猫图片压缩)。虽然自己前端比较菜,但是估计也有不少猿友跟我一样偶尔需要兼顾前端吧。
关于技术积累这一块,之前罗列的提纲还挺多的,写到后面感觉没什么精力了,有些三言两语似乎说不清楚啊。
二、工作心得
(1)沟通协作第一:
工作中必然少不了团队协作,积极主动去沟通的人做事总是更加靠谱。道理大家都懂。但是我们需要把想法问题,简洁明确的表达给对方。另外总是以沟通的心态面对问题,而不是抱怨。如果觉得上级分配的任务难度太大了,你可以尝试跟他沟通,获取他有很好的建议或解决方案。
(2)谨慎记录与排漏:
经常是开一两个会,测试同时偶尔找你排查一下环境问题,一天下来其实写代
码的时间并不多。一些关键点,非常建议提前记录下来,方便接回被打断的思路,同时避免一些逻辑或功能点的遗漏。
(3)思路清晰与效率:
建议动手写代码之前,建议先理清思路,关键逻辑,需求细节,这样后面写代码的时候效率比较高,而且质量也比较好。
(4)主动与多管闲事:
清楚自己的工作范围,自己心里有个界限,有些属于别人工作范围的事情,可以你提出的建议是好的,但是最好还是在合适的场景和时机提出。
(5)心态与工作状态:
程序员,总会有被坑的时候,或者不顺心的时候,尽量尝试控制一下自己的心态。
(6)可持续发展观看待技术与业务:
这点是我自己希望做到的。对于责任心而言,或者是说一个优秀的程序员。很多时候并不是完成产品提的需求就好了。多为它着想,代码可维护性和扩展性高不高。一些功能点也可以提出自己的想法,不要总是被动的接受产品的需求,业务功能拓展性好的话,可以减少产品改动需求。
三、学习方向与职业发展
(1)先广后深还是先深后广:
个人性格而言,比较偏向于实用驱动,如果在实际使用场景有用到再去深入学习,这样边学边用才能比较集中注意力。像一些同事,他们喜欢把一样东西研究得很深。
(2)业务经验也应当注重:
技术人员必然是技术优先,但是等你到了一定工作年限,其实业务经验也是非常重要了,招高级工程师的时候对业务经验也非常看重,是否有自己独特的见解。相信道理大家都懂,但是平时有没有这样的意识,有没有去做又是另外一方面了。平时也可以多学习业务方面的知识。
(3)相同的工作年限为什么当过项目经理的人更吃香:
因为他们对业务理解更加深入,代码质量问题落在他头上,项目的人员协调与时间安排规划,责任越大,思考的问题就越多,遇到的问题处理经验就越丰富。把控能力也比较强。
(4)怎样能进入学习状态,并且坚持:
要想集中注意力学习技术,需要安静的环境,需要耐得住寂寞,因此你需要没有人打扰的环境,比如在一个集体居住环境,几个朋友一起住,一般多数回想着去哪玩,朋友在玩游戏,估计也是对你的一种诱惑吧。可以早点到办公室学习或下班学习一段时间再回去。或者选择自己一个人住。
(5)如何把握住学习的时机:
学习最能集中注意力的情况是有着比较强的好奇心和求知欲。所以一般一些技术分享或者老员工讨论的问题,可能很多概念知识你都不懂,这时候你就可以去学习了解这些知识。或者你工作中遇到的问题,尽量刨根问底的去弄清楚是什么原因导致的,不要一些老司机帮忙解决了就一了了之。或者是其他同事遇到的问题,你都可以去了解一下。
(6)你更适合走一条怎样的职业道路:
刚毕业不久的猿友,一般都是会比较心浮气躁的,对技术求知欲很强,特别是一些高大上的技术,什么大数据、云计算、架构等等,有些偏向于技术研究,有些偏向于业务。大部分程序员可能都会选择偏向于技术研究的,于是乎对偏向业务的不怎么感冒,因此觉得天天做这些东西没什么意思。这时候,静下来分析一下,你到底适合哪种方向。你能否静下心来对技术研究很深入,能否耐得住寂寞。
2016年总结 - Java程序员的更多相关文章
- 2016 Java程序员的年终总结(转)
2016 Java程序员的年终总结 技术积累 (1)代码规范 1.1.1.通常的模块分布:一般如果你要实现一个web 应用,你从后台将数据展示到前端页面,在一个比较大的公司,你少不了跟其他项目有交集( ...
- 优秀Java程序员必须了解的GC工作原理(转)
一个优秀的Java程序员必须了解GC(Garbage Collection 垃圾收集)的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系 ...
- 2017年 Java 程序员,风光背后的危机
不得不承认,经历过行业的飞速发展期,互联网的整体发展趋于平稳.为什么这么说?为什么要放在 Java 程序员的盘点下说? 的确,对于进可攻前端,后可守后端大本营的 Java 程序员而言,虽然供应逐年上涨 ...
- 为什么说Java程序员到了必须掌握Spring Boot的时候?
摘要: SpringBoot的来龙去脉. 原文:为什么说 Java 程序员到了必须掌握 Spring Boot 的时候? 微信公众号:纯洁的微笑 Fundebug经授权转载,版权归原作者所有. Spr ...
- 2018年,Java程序员转型大数据开发,是不是一个好选择?
近日网上有一篇关于Java程序员职场生存现状的文章“2017年 Java 程序员,风光背后的危机”,在Java程序员圈子里引起了广泛关注和热议. 2017年,Java 程序员面临更加激烈的竞争. 不得 ...
- 人才需求之Java程序员与AI程序员
据100offer报告显示:2018年Java人才市场「高开低走」的动荡局势.整体求职难度变大,且全年波动更剧烈,淡旺季区别明显.企业发出的Java面邀总数几个季度连续下跌,Q4 甚至比去年同期下降了 ...
- [转载]一个标准java程序员的进阶过程
第一阶段:Java程序员 技术名称 内 容 说明 Java语法基础 基本语法.数组.类.继承.多态.抽象类.接口.object对象.常用类(Math\Arrarys\S ...
- Java程序员应该了解的10个面向对象设计原则
面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorat ...
- To Java程序员:切勿用普通for循环遍历LinkedList
ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...
随机推荐
- retrofit框架接口调用时候报Throwing new exception
最近在开发的时候遇到了一个很坑的问题,在三星6.0手机上请求接口时候报了一个异常:Throwing new exception 'length=1658; index=3248' with unexp ...
- css,响应鼠标事件,文字变色
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- React Refs
React Refs React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何组件上. 这个特殊的属性允许你引用 render() 返回的相应的支撑实例( back ...
- docker常用命令整理-在容器中使用service命令
在docker中使用centos镜像启动了容器并安装了相关软件,之后想用service命令启动相关服务却收到如下错误: Failed to get D-Bus connection: Operatio ...
- HDU ACM 3790 最短路径问题
最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- [MapReduce_4] MapTask 并发数的决定机制
0. 说明 介绍 && Map 个数 & Reduce 个数指定 && Map 切片计算 1. 介绍 一个 job 的 Map 阶段并行度由客户端在提交 job ...
- sublime text3最常用快捷键
Ctrl+Shift+P:打开命令面板 Ctrl+P:搜索项目中的文件 Ctrl+G:跳转到第几行 Ctrl+W:关闭当前打开文件 Ctrl+Shift+W:关闭所有打开文件 Ctrl+Shift+V ...
- MySQL内连接(INNER JOIN)
MySQL INNER JOIN子句介绍 MySQL INNER JOIN子句将一个表中的行与其他表中的行进行匹配,并允许从两个表中查询包含列的行记录. INNER JOIN子句是SELECT语句的可 ...
- eclipse添加插件实现php的增删改查
一:eclipse添加php插件 1.运行eclipse,在主界面里找到Help下的“Instal New Software”.然后在Work with中选择“All Available Sites” ...
- Django之权限管理
Django权限管理之初步完整版 项目背景:这是一个权限管理系统(给一些角色和他们的权限指URL和页面可以删除的按钮比如:增删改查) 使用到了中间件,和初始化权限,使用了admin的后台管理系统. 我 ...