Java Web技术经验总结(一)

原创 2017年01月06日 10:32:15

  • 接口的权限认证,使用拦截器(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中的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 表达式的格式

    学习Java的同学注意了!!! 
    学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java!

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。

    相关文章推荐

    javaweb开发经验总结

    通用代码进行抽取,减少代码的出错和维护量 前台js和后台js如何有校验,使用统一的校验类进行校验 通用的基础类,使用指定的文件夹或者包或者文件进行统一的管理。 开发注意标准化开发,如果查询的是相同的数...

    web前端入坑第二篇:web前端到底怎么学?干货资料!

    hi,大家好! 我的第一篇文章:【web前端到底是什么?有前途吗?】,在我没想到如此 ‘HOT’ 的情况下 得到很多好评和有效传播。 也为我近期新开的 个人前端公众号:前端你别闹(web...

    李克华 云计算高级群: 292870151 195907286 交流:Hadoop、NoSQL、分布式、lucene、solr、nutch kafka入门:简介、使用场景、设计原理、主要配置及集群搭

    问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行“随机读写”的原因是什么? 3.kafka集群consumer和producer状态...

    500G JAVA视频网盘分享

    1、JavaScript视频教程          链接: http://pan.baidu.com/s/1gd57FVH 密码: d9ei 2、JPA视频教程          链接: htt...
    • achuo
    • achuo
    • 2017年03月28日 08:03
    • 2661

    Java Web 技术经验总结

    在闲暇时间开始阅读Spring的官方文档,感觉收获很大,记录了一点笔记。 Web服务启用https之后面临性能问题,如何解决?参考QZone的解决方法:Qzone 高性能 HTTPS 实...

    关于Java Web应用程序的若干经验总结

    最近与木木一起做毕设。作为一个新手,在这里总结开发项目时的一些经验。供诸君参考。 关于Struts :经常用到的是两种地址格式,即/*和*.action,/*包括*.action。 也就是当服...
    • Acfang
    • Acfang
    • 2012年05月17日 08:58
    • 428

    这些年Java Android技术经验总结

    这些年做程序吃过的亏,所以总结出来,希望对大家有所帮助。也方便自己以后查阅。 1. Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要...

    Java Web项目开发项目经验总结

    本文是关于如何查看JavaWeb项目的方法

    JAVA WEB开发人员面试题与经验总结【持续更新】

    很多程序员在进入正式工作之后越来越不注重基础和理论,我记得老师曾经说过:“基础好,样样通,理论强,处处用。”现在有时间了,正好整理一下理论和基础,一来自己复习,二来方便一下找工作的同仁参考。 Spr...

    java技术大牛修炼记4-华为超级技术大牛的十年经验总结

    注:原文地址已找不到,尊重原创,再此写出作者姓名 人类与动物的最大不同是积累知识可以传承学习,学习他人成功的经验可以让我们少走弯路并缩短学习曲线,这里,华为大牛徐家骏的10年华为之路对每个人都有启迪和...
    内容举报
    返回顶部
    收藏助手
    不良信息举报
    您举报文章:Java Web技术经验总结(一)
    举报原因:
    原因补充:

    (最多只允许输入30个字)