《Java开发技术总结》由会员分享,可在线阅读,更多相关《Java开发技术总结(16页珍藏版)》请在金锄头文库上搜索。
1、JavaJava开发技术总结开发技术总结UDATA技术架构UDATA后续工作任务调度系统取代CRONTAB自助报表系统万花筒KylinAd-hoc 即席查询HiveImpala、Presto、Spark SQLJAVA-WEB技术体系开发框架:Spring-boot数据访问基础:JDBC & JdbcTemplateJPA(ORM): JAVA Persistence API(Hibernate)实时调度:Quartz接口访问:RestController项目管理:Maven,私有maven仓库其他:AOP, 注解,Filter,SSO(CAS),ServletJAVA开发坑-1:整数比较基础
2、:比较引用用=,比较数值用equals方法示例Integer a = 123;Integer b = 123;Integer c = new Integer(123);(a = b)? true(b = c)? falseInteger e = 1000; Integer f = 1000;(e = f)? false自动装箱缓存:默认:-128127-XX:AutoBoxCacheMax=300JAVA开发坑-2:空引用null引起的不直接使用引用,而是使用函数,比如:使用String.valueOf(a)而不使用a.toString(); /容易引起空指针异常函数形参中有引用类型变量时,一
3、定要先判断空引用再使用。void doSomething(String a, String b)if(a = null | b = null)return;JAVA开发坑-3:pomjar包版本冲突通过maven自带的工具:mvn dependency:tree Dverbose通过里面的信息可以看到通过里面的信息可以看到 两个两个jarjar都都commons-loggingcommons-logging存在存在依赖,但是版本不同。里面的详细信息显示引用了依赖,但是版本不同。里面的详细信息显示引用了 commons-logging:commons-logging:jar:1.1 common
4、s-logging:commons-logging:jar:1.1 去掉了去掉了commons-logging:commons-logging:jar:1.0.3 commons-logging:commons-logging:jar:1.0.3 (omitted omitted for duplicatefor duplicate)JAVA开发坑-4:Around切面注解使用前提条件Component /没有导致切面不能正产工作AspectAround切面可以拦截函数返回值publicpublicObjectdoAround(ProceedingJoinPointpjp)throwsthro
5、wsThrowableObjectobject=pjp.proceed(); returnreturnobject;/正常返回JAVA开发坑-5:减少SQL访问改进前:比如通过uid获取用户权限,以前是先获取用户,然以前是先获取用户,然后获取用户对应角色,最后循环获取每个角色的权限。后获取用户对应角色,最后循环获取每个角色的权限。改进后:自定义查询,一条改进后:自定义查询,一条SQLSQL获取用户所有权限,性能能够获取用户所有权限,性能能够提升提升3 3倍以上。倍以上。Query(value=select select * from privilege where from privilege
6、 where idid in (select in (select privilege_idprivilege_id from from role_privilege WHERE role_privilege WHERE role_idrole_id in (select in (select role_idrole_id from account_role left join role from account_role left join role on account_role.on account_role.role_idrole_id=role.=role.idid where wh
7、ere account_idaccount_id in ( select in ( select idid from account where from account where uiduid = :uid and = :uid and statusstatus = 1) and role. = 1) and role.statusstatus=1 ) and privilege.=1 ) and privilege.statusstatus=1)=1), nativeQuery = truetrue)List findByUid(Param(uiduid) String uid);JAV
8、A开发坑-6:组合索引组合索引生效原则:从左到右依次匹配为where,order by, group by后字段建立合适索引对用and连接的多个条件建立组合索引使用数据量少的列和字符串前缀来建立索引使用explain来分析索引的优劣在区分度高的列上建立索引JAVA开发坑-7:IDEAJVM优化IDEA默认的堆内存最大值和初始值都为128M,如果需要跑一些大数据集,显得很吃力。优化设置如下:-Xms4096m 初始值-Xmx4096m 最大值优化后运行效率提高10多倍。JAVA开发坑-8:权限管理权限管理设置,标准的账户、角色、权限以及关联表设计,存在问题:权限粒度设置过细,不方便使用部门接口运
9、行速度慢使用自定义注解进行数据权限验证使用自定义注解进行数据权限验证权限接口尚待完善JAVA开发坑-9:多进程争夺资源控制哨兵双机热部署,两个进程同时写数据库?防止写入重复的脏数据设置一张status表,记录当前写进程状态select for update行锁谁抢到锁,谁拥有运行的权利10.188.32.710.188.32.810.188.32.8JAVA开发坑-10:NS&Log&RALNS,命名服务,当前未上线Log基于Logback,已经上线RAL基于AOPDBRalHttpRalcom.sf.archcommons-logging1.1.0-SNAPSHOTcom.sf.archsftc-arch-data-ral1.0.0-SNAPSHOTTHANKYOU2024/8/5