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 ...
随机推荐
- Android之ProgressDialog的使用
ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口. ProgressDialog的创建方式有两种,一种是ne ...
- (后台)org.apache.catalina.connector.ClientAbortException: null
比如错误日志是这样的: org.apache.catalina.connector.ClientAbortException: null 那么问题基本上就是服务器准备进行response的时候,发现连 ...
- recovery log直接输出到串口
我们在调试recovery升级的时候,我们经常需要查看recovery的log,google的原始逻辑中,recovery的log并非直接输出到串口,我们需要输入命令才能获取,我们有三种方式: 第一种 ...
- 从零自学Java-8.创建第一个对象
1.创建对象:2.使用属性描述对象:3.确定对象的行为:4.合并对象:5.从其他对象继承:6.转换对象和其他类型的信息. 程序NewRoot2:计算输入数的算数平方根并输出 package com.j ...
- [20171121]rman backup as copy 2.txt
[20171121]rman backup as copy 2.txt --//昨天测试backup as copy ,备份时备份文件的文件头什么时候更新.是最后完成后还是顺序写入备份文件.--//我 ...
- 03-12_MBean层次结构
本文重点: Mbeans层次结构与WLST关系介绍 WebLogic Mbeans的类型 weblogic服务器的MBeans生命周期 Mbeans层次结构与WLST关系介绍: ...
- 自动化测试基础篇--Selenium Python环境搭建
学习selenium python需要的工具: 1.浏览器 2.Python 3.Selenium 4.FireBug(Firefox) 5.chromedriver.IEDriverServer.g ...
- python第七十一天---堡垒机
堡垒机的表结构图:
- SQL Server自动备份存储过程和视图的方法
1 建立备份数据表 CREATE TABLE [dbo].[ProcBackup]( ,) NOT NULL, [name] [sysname] NOT NULL, ) NULL, [obj_id] ...
- C#操作Exchange配置
1.客户端配置:运行gpedit.msc进入本地组策略管理器,计算机配置>管理模版>Windows组件>WinRM>WinRM客户端启用允许未加密通信:启用受信任的主机并添加e ...