该系列的第一篇在此:Java Web技术经验总结一,主要包含我在日常工作中的经验和心得体会(如有不足之处欢迎指出)。

  1. Maven的使用经验

    • 依赖的scope有test、provided、compile等。test:一般是单元测试场景使用,在编译环境加入classpath,但打包时不会加入,如junit等;provided:表示容器或者JDK已经提供该依赖,打包时不需要打包入war;compile:默认范围,在工程环境的classpath(编译环境)和打包(如果是WAR包,会包含在WAR包中)时候都有效。
  2. JVM相关参考资料

    • Minor gc vs Major gc vs Full gc
    • JDK内置工具的使用:JDK内置工具的使用和例子
  3. JVM观察和调试相关的命令

    • 排查full gc问题,可以通过命令jstat -gccause java_pid 1s查看gc发生的原因
    • 观察gc.log的时候:(1)GC开头的都是Young GC;(2)CMS-initial-mark标识,且没有full字样的,是old区的GC;(3)带full字样的是fgc(例外情况:-XX:+ExplicitGCInvokesConcurrent,这个参数会把full gc转成cms gc,因此gc.log中不会有full gc字样)。
    • 查看JVM进程:ps -ef|grep java
    • 查看JVM内存占用信息:
      sudo -u admin /opt/taobao/java/bin/jstat -gccause ${PID} 1000 1000
    • dump内存:
      sudo -u admin /opt/taobao/java/bin/jmap -F -dump:live,file=/home/admin/heap.bin ${PID}
  4. 线上机器每隔一个小时full gc问题排查

    • 参考文章

      • 1. tomcat 7.0中full gc频繁
      • 2. JVM中的ExplicitGCInvokesConcurrent选项
    • 排查思路
      • 首先,怀疑jdk版本问题,升级之后依然存在,排除
      • 第二,怀疑tomcat版本问题,由7.0.26.1升级到7.0.54.1之后消失
      • 分析gc.log,每隔一小时出现一次cms收集,最开始认为这不是full gc;后查询资料发现ExplicitGCInvokesConcurrent选项会将full gc转换成cms gc,因此gc.log中没有“full gc”字样;然后根据参考文章1和参考文章2定位问题。
    • 结论:tomcat 7.0.26.1版本中的JreMemoryLeakPreventionListener,该监听器每隔一个小时会触发一次System.gc()。根据tomcat官方的bug fix报告可知,在7.0.28版本将该间隔fix成Long.MAX_VALUE了。
  5. 在单元测试中加载配置文件

    • 在spring项目中,使用Mockito+JUnit测试业务逻辑时,有时需要读取一些外部配置文件(例如biz.properties),可以参考Spring下的单元测试(JUnit)--加载配置文件。
    • 可以考虑使用@Properties定位配置文件、使用@Value注入配置属性;不过在这种情况下,需要解决不同环境下的属性配置问题;
    • 可以考虑通过暴露set接口,在单元测试中设置对应的属性,从而避免处理外部配置文件的先关技术。
  6. Mockito + Spring + AssertJ是Spring项目中写单元测试的最佳组合,优点有:轻量、简洁、可以测试web层(拦截器、过滤器等)、可以测试异常分支。

  7. log4j中的日志级别有:DEBUG、INFO、WARN、ERROR(级别依次变高),在生产环境中一般采用ERROR级别、在开发环境中使用DEBUG级别。如果日志级别为DEBUG级别 ,则代码中的logger.debug()logger.info()logger.warn()logger.error()等日志都会打印;如果日志级别为WARN,则只会打印WARN和ERROR日志。参考:日志级别的选择

  8. 给Controller的@RequestMapping方法加日志,通过AOP不容易加(有解决方案),一个比较迂回的方法是,让Controller使用一个Service代理(包含一个process方法),拦截这个process方法比较容易。

  9. Java Web的最佳实践:Spring Boot + Thymeleaf,基础技术包括:Spring + HTML + CSS。JSP,Velocity和FreeMarker,那是上一代的模板引擎,应该尝试一下新的东西。参考:Thymeleaf官网

  10. 数据库部分,企业级Java Web要求的知识架构很多,后端就包括数据技术,最常用的是关系型数据库MySQL,可以阅读下列文章补充一点知识点。当然,最常用、最有效的参考资料是官方文档。

    • 如果有人问你数据库的原理,叫他看这篇文章
    • MySQL加锁处理分析
    • caoz的“如何应对并发”系列
  11. 常用概念,PV:请求次数/day;UV:不同uuid的个数/day。对于自己负责的业务,有两个日志是必须的:BI日志和业务监控日志——BI日志用于计算业务指标,可以指导运营和产品的动作、业务日志用于研发同学监控自己服务的稳定性、机器的使用率、接口的QPS等指标。

  12. 服务的稳定性,需要良好的监控保障,主要包括几个方面:系统监控、应用监控(JVM)、业务监控(PV/UV/RT)和调用链路监控等。

Java Web技术经验总结(二)相关推荐

  1. 深入分析Java Web技术内幕(二)

    DNS域名解析 第一步:浏览器检查缓存中有没有这个域名对应的解析过的IP地址,有则解析结束. 第二步:如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果.host ...

  2. 深入分析Java Web技术内幕读书笔记(二)浅析DNS域名解析过程

    上一篇文章<浅析Web请求过程>讲述的是如何发起HTTP请求,对于请求发起过程中很重要的一个步骤--DNS解析过程的描述是一带而过,本篇文章将跟着DNS解析过程来分析域名是如何解析的. 一 ...

  3. JAVA WEB技术

    JAVA WEB技术 一. 基本概念 Web开发:(web.网页的意思!) 1. 静态web 1. html.css 2. 提供给所有人看的数据始终不会发生变化! 2. 动态web 1.淘宝.几乎所有 ...

  4. 深入分析Java Web技术内幕读书笔记(一)浅析Web请求过程

    随着Web技术的快速发展,互联网的网络架构已经从传统的C/S架构转变为B/S架构,B/S架构相较于传统的C/S架构,有诸多优点,例如:提供了统一的操作方式,简化了用户的学习成本:便捷的开发方式大大提高 ...

  5. 深入分析Java Web技术内幕pdf

    下载地址:网盘下载 内容简介  · · · · · · <深入分析Java Web技术内幕(修订版)>新增了淘宝在无线端的应用实践,包括:CDN 动态加速.多终端化改造. 多终端Sessi ...

  6. 基于Java Web技术的动车购票系统

    毕 业 设 计 中文题目 基于Java Web技术的动车购票系统 英文题目 Train ticket system based on Web Java Technology 毕业设计诚信声明书 本人郑 ...

  7. java图片管理系统_基于Java Web技术的图片管理系统的设计与实现.doc

    基于Java Web技术的图片管理系统 的设计与实现 本科毕业设计 目 录 第1章 引言6 1.1 课题研究目的及意义6 1.2 课题研究的内容7 2.1 用户功能需求7 图片收藏数据库查询系统图片收 ...

  8. Java Web 实习笔记(二)

    Java web实习笔记目录导航 1. Java Web 实习笔记(一) 2.Java  Web 实习笔记(二) 3.Java Web 实习笔记(三) 4.Java Web 实习笔记(四) 笔记(一) ...

  9. Java Web技术路线总结

    Java Web技术路线总结 2017/10/12 星期四 19:47:52 Edit by Core Chan 此总结仅用于个人学习,仅供参考. 目前技能点: java SE除了swing/awt等 ...

最新文章

  1. 现今主流计算机语言,现今主流的Python图形化界面主要有哪些
  2. 首届CCF真题5-任务调度
  3. 【学术相关】西湖大学教授:都说不唯论文,那我们发表论文是为了什么?
  4. Split和正则表达式的区别
  5. 【每日进步】September 2012
  6. 零美术基础逆袭成为动画师!你需要怎么做?
  7. 软件工程学习总结(2)——大部分的软件工程其实就是管道作业
  8. Linq的Distinct方法的扩展
  9. win7 计算机定时关机脚本,win7定时关机命令是什么 如何设置定时关机【图解】...
  10. onenote登录显示服务器问题,onenote启动不了怎么回事 onenote为什么登录显示无法连接...
  11. FFmpeg命令(七)、 音频与视频合并成视频
  12. JSjavascript获取B站bilibili哔哩哔哩分P播放列表并以excel文件保存本地
  13. 流量压力折射移动互联网困局
  14. java多线程提交,如何按照时间顺序获取线程结果,看完你就懂了 | Java工具类
  15. 微信公众号获取的实时坐标和高德地图坐标系的转换
  16. 校园安全教育APP的设计与实现
  17. Dubbo-05 20190317
  18. 组件图知识点(UML)
  19. 数据处理分析模块 Pandas(3)
  20. vue中用户自定义短信模板设置,功能为点击添加有光标时在光标后面拼接数据,没光标时在短信模板后面直接拼接数据

热门文章

  1. openssl md5算法 —— Linux下(字符串加密、文件加密)
  2. 每天5分钟玩转python3算法:选择排序
  3. 1.1.12 增加页眉横线
  4. vmware克隆虚拟机
  5. display 的 32 种写法
  6. Oracle 环境下 GoldenGate 集成抽取(Integrated Capture)模式与传统抽取模式(Classic Capture)间的切换...
  7. enterText与typeText
  8. Maven Jrebel 多模块热部署方案
  9. go实现命令行的工具cli
  10. 一小时Docker教程