Java Web技术经验总结
2018-06-18 01:30:23来源:未知 阅读 ()
-
接口的权限认证,使用拦截器(HandlerInterceptorAdapter),参考:第五章 处理器拦截器详解——跟着开涛学SpringMVC。注意:推荐能使用servlet规范中的过滤器Filter实现的功能就用Filter实现,因为HandlerInteceptor只有在Spring Web MVC环境下才能使用,因此Filter是最通用的、最先应该使用的
-
“@Autowired”的含义是:ListableBeanFactory接口定义的<T> Map<String, T> getBeansOfType(Class<T> var1) throws BeansException;,即获取类型T的所有实例,并存放在一个Map中:key集合是这些实例的包名、value集合是这些实例本身。
-
接口层应该实现如下目标(参考:SpringMVC4.1之Controller层最佳实践):
-
统一的响应体、请求体,规避Map、List作参数或者响应结果的方式(尤其是参 - 数用Map来包装,这种代码有时候看起来真的让人很沮丧)
-
统一的错误信息
-
统一的请求数据校验
-
统一的接口异常捕获
-
MySQL建表的时候,可以按照下列顺序考虑
-
表名,以及备注
-
字段定义,以及备注,注意按照下列顺序定义字段!
-
id,主键,自增
-
按照字段的使用频率依次定义(字段的顺序为什么重要:);
-
可为空的字段要提供默认值;
-
修改时间(mtime)
-
创建时间(ctime)
-
索引和约束(强文推荐:如何应对并发(1):关于数据索引)
-
唯一键(对于有唯一约束的表,插入数据时应使用insert ... on duplicate语句,参考insert on duplicate语法)
-
普通索引
-
组合索引
-
使用@Async注解,可限定某个类的所有方法或者某个方法进行异步处理,属于对线程池技术的封装。参考官方文档:Annotation Support for Scheduling and Asynchronous Execution,另外,CSDN这篇博文也不错:Spring异步任务处理,@Async的配置和使用。
-
<task:executor/>标签对应的实现类是ThreadpoolExecutor
-
pool-size(core-size和max-size):有异步请求到达时,如果当前线程数小于core-size时,则启动一个新线程提供服务;如果当前线程数达到core-size,则将新请求放入Blockqueue;如果BlockQueue也满了,则启动新线程提供服务,直到线程池内的线程数达到max-size;
-
queue-capacity:BlockQueue的大小
-
keep-alive:超过core-size的那部分线程,任务完成后在线程池中存活的时间;
-
rejection-policy:线程池内线程超过max-size之后,对于新来的服务请求的处理策略(忽略、抛异常或者改为同步调用)。
-
线程池的大小:可根据Little定律(队列中任务的平均数量等于进入速率和平均停留时间的乘积)估算。
-
需要通过日志打印验证@Async确实起作用了,可能有三个坑:(1)内部调用不能异步;(2)不能重复扫描,确保带@Async注解的方法所在的类只被Component-Scan扫一次;(3)必须是public的,不能是public static的。参考文章如下:
-
Spring的两种任务调度Scheduled和Async
-
Spring Async not working
-
Spring中的xxxAware接口是spring框架中的常用模式,经常用于在spring启动阶段通过这类接口提供的setXxx方法给spring管理的bean赋值。Aware接口有点监听者、回调函数或者观察者模式的感觉。在启动过程中,Spring会检查每个bean是否实现了某些个xxxAware接口,如果发现一个,则调用对应的方法,给bean提供相应的信息。参见stackoverflow答案:BeanNameAware and BeanFactoryAware。常见的xxxAware接口有:BeanNameAware、BeanClassLoaderAware、BeanFactoryAware。
-
工作中的软件开发,要做到哪些方面?敏捷开发并不是野蛮开发,最关键的特性是小步快跑,作为开发者,还是要从下列几个方面考虑问题:
-
需求评审,产出需求文档
-
设计评审,产出设计文档
-
代码开发(尽量使用最佳实践,注意要写基本的单元测试)
-
基本功能开发
-
日志记录
-
异常处理
-
入参检查
-
返回结果生成
-
异步任务处理
-
代码review:自己review => 高级开发者review;核心代码需要团队review
-
测试
-
功能测试(正常case、异常case)
-
性能测试(压力测试)
-
稳定性测试
-
发布
-
风险评估(影响范围、后果)
-
回滚预案(应急处理方案、服务降级等)
-
灰度发布(流量灰度、用户灰度、地域灰度等)
-
在spring中不能通过new一个实例来使用,否则在mockito测试的时候没法预设行为;在spring中要使用其他组件,必须通过xml或者注解方式,由spring容器负责装配。
-
单元测试,推荐使用Mockito框架,理由有三:(1)可专注于被测试对象;(2)不需要建立复杂的bean依赖关系;(3)DSL描述性语言简单易懂。参考文章:反模式的经典 - Mockito设计解析 在项目开发中,建议配合使用Mockito和Assertj写单元测试。
-
实现定时任务,可使用Quartz框架,参考:Spring 调度工具Quartz cron 表达式的格式
作者:杜琪
链接:https://www.jianshu.com/p/86e915d616c4
來源:简书
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:Tomcat结构
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash