1. 接口的权限认证,使用拦截器(HandlerInterceptorAdapter),参考:第五章 处理器拦截器详解——跟着开涛学SpringMVC。注意:推荐能使用servlet规范中的过滤器Filter实现的功能就用Filter实现,因为HandlerInteceptor只有在Spring Web MVC环境下才能使用,因此Filter是最通用的、最先应该使用的

  2. “@Autowired”的含义是:ListableBeanFactory接口定义的<T> Map<String, T> getBeansOfType(Class<T> var1) throws BeansException;,即获取类型T的所有实例,并存放在一个Map中:key集合是这些实例的包名、value集合是这些实例本身。

  3. 接口层应该实现如下目标(参考:SpringMVC4.1之Controller层最佳实践):

  • 统一的响应体、请求体,规避Map、List作参数或者响应结果的方式(尤其是参 - 数用Map来包装,这种代码有时候看起来真的让人很沮丧)

  • 统一的错误信息

  • 统一的请求数据校验

  • 统一的接口异常捕获

  1. MySQL建表的时候,可以按照下列顺序考虑

  • 表名,以及备注

  • 字段定义,以及备注,注意按照下列顺序定义字段!

    • id,主键,自增

    • 按照字段的使用频率依次定义(字段的顺序为什么重要:);

    • 可为空的字段要提供默认值

    • 修改时间(mtime)

    • 创建时间(ctime)

  • 索引和约束(强文推荐:如何应对并发(1):关于数据索引)

    • 唯一键(对于有唯一约束的表,插入数据时应使用insert ... on duplicate语句,参考insert on duplicate语法)

    • 普通索引

    • 组合索引

  1. 使用@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

  1. Spring中的xxxAware接口是spring框架中的常用模式,经常用于在spring启动阶段通过这类接口提供的setXxx方法给spring管理的bean赋值。Aware接口有点监听者、回调函数或者观察者模式的感觉。在启动过程中,Spring会检查每个bean是否实现了某些个xxxAware接口,如果发现一个,则调用对应的方法,给bean提供相应的信息。参见stackoverflow答案:BeanNameAware and BeanFactoryAware。常见的xxxAware接口有:BeanNameAware、BeanClassLoaderAware、BeanFactoryAware。

  2. 工作中的软件开发,要做到哪些方面?敏捷开发并不是野蛮开发,最关键的特性是小步快跑,作为开发者,还是要从下列几个方面考虑问题:

  • 需求评审,产出需求文档

  • 设计评审,产出设计文档

  • 代码开发(尽量使用最佳实践,注意要写基本的单元测试)

    • 基本功能开发

    • 日志记录

    • 异常处理

    • 入参检查

    • 返回结果生成

    • 异步任务处理

  • 代码review:自己review => 高级开发者review;核心代码需要团队review

  • 测试

    • 功能测试(正常case、异常case)

    • 性能测试(压力测试)

    • 稳定性测试

  • 发布

    • 风险评估(影响范围、后果)

    • 回滚预案(应急处理方案、服务降级等)

    • 灰度发布(流量灰度、用户灰度、地域灰度等)

  1. 在spring中不能通过new一个实例来使用,否则在mockito测试的时候没法预设行为;在spring中要使用其他组件,必须通过xml或者注解方式,由spring容器负责装配。

  2. 单元测试,推荐使用Mockito框架,理由有三:(1)可专注于被测试对象;(2)不需要建立复杂的bean依赖关系;(3)DSL描述性语言简单易懂。参考文章:反模式的经典 - Mockito设计解析 在项目开发中,建议配合使用Mockito和Assertj写单元测试。

  3. 实现定时任务,可使用Quartz框架,参考:Spring 调度工具Quartz cron 表达式的格式

作者:杜琪
链接:https://www.jianshu.com/p/86e915d616c4
來源:简书

Java Web技术经验总结的更多相关文章

  1. Java Web技术总结(目录)

    来源于:http://www.jianshu.com/p/539bdb7d6cfa Java Web技术经验总结(一) Java Web技术经验总结(二) Java Web技术经验总结(三) Java ...

  2. 深入分析Java Web技术内幕(修订版)

    阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著   ISBN 978-7-121- ...

  3. 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写

    基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...

  4. developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章

    developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章 深入理解 Session 与 Cookie Session 与 Cookie 不管是对 Java Web ...

  5. 深入分析Java Web技术(1)

    BS网络模型的基本过程: 当我们在浏览器中输入"www.google.com"的时候,首先会请求DNS服务器对域名进行解析成都应的IP地址,然后根据这个IP地址在互联网上找到谷歌的 ...

  6. Servlet工作原理解析 《深入分析java web 技术内幕》第九章

    参考关于servblet的相关文章 侧重概况:https://blog.csdn.net/levycc/article/details/50728921 ibm的相关:https://www.ibm. ...

  7. JAVA Coder 的《深入分析Java Web 技术内幕》读书笔记

    本文基于<深入分析Java Web 技术内幕> <深入分析Java Web 技术内幕>,作者是 许令波,电子工业出版社.本文只是记录书本当中的精彩部分,作个人回顾和技术分享,请 ...

  8. 《深入分析Java Web技术内幕》读书笔记 - 第1章 深入Web请求过程

    第1章 深入Web请求过程 1 1.1 B/S网络架构概述 2 基于统一的应用层协议HTTP来交互数据. 1.2 如何发起一个请求 4 HTTP连接本质是建立Socket连接.请求实现方式:工具包如H ...

  9. 深入分析Java Web技术内幕

    深入web请求过程 发起一个http请求的过程就是建立一个socket通信的过程 HTTPClient是一个开源的实现了http请求的工具包 深入分析java I/O的工作机制 深入分析java We ...

随机推荐

  1. android webview 中 js 模板引擎的使用

    最近在项目中要求用 webview 展示几个界面, 而后台返回的不是 html 而是 json 数据. 起初用 StringBuilder 一个一个拼 html, 后来感觉太繁琐,拼一个还行,拼多了就 ...

  2. condition实现原理

    condition是对线程进行控制管理的接口,具体实现是AQS的一个内部类ConditionObject,主要功能是控制线程的启/停(这么说并不严格,还要有锁的竞争排队). condition主要方法 ...

  3. Hibernate 一对一映射(惟一外键)

  4. grep常用命令总结与基础正则

    grep 'str'用来选取含有str的行 参数: -v 反向选取 -n 显示行号 -c 计算查找到字符串的次数 -i 选取时不区分大小写 基础正则表达式符: [list] 从字符集合里选出任意一个字 ...

  5. OutSystems学习笔记。

    ew job and new software, new challenge as well. OutSystems这软件挺好上手的.虽然没有中文文档,但英文文档超级详细,堪称傻瓜版SOP 照着步骤写 ...

  6. 架构实战项目心得(七):使用SpringBoot+Dubbo+Mybatisplus+Oracle搭建后台项目框架(二)

    接下来我们将整合mybatisplus+Oracle,实现一个简单的查询.(期间踩了很多坑,遇到一些问题,还好慢慢解决了.现在是通过配置文件的方式来进行dubbo服务的注册和发布,希望以后能在学习和实 ...

  7. C#基本语法 - .Net 4.0 之 Dynamic 动态类型

      一..net4.0主要新特性 .Net4.0在.Net3.5基础上新增的主要特性有:可选参数.命名参数和Dynamic.具体请阅生鱼片的这篇博文.这里我们着重讲解C#4.0的Dynamic特性,对 ...

  8. Shiro登录校验

    shiro是一种权限认证框架,实现一个简单的登录鉴权: 1.控制器层: @Controller @RequestMapping("/blogger") public class B ...

  9. springboot mybatis 使用多数据源

    SpringBoot系列博客目录,含1.5.X版本和2.X版本 springboot2.0正式版发布之后,很多的组件集成需要变更了,这次将多数据源的使用踩的坑给大家填一填.当前多数据源的主要为主从库, ...

  10. js分离html代码的body内外部分

    //定义网页源码 str = '<!DOCTYPE html><html><head> <meta charset="UTF-8"> ...