Java Web技术经验总结(二)
该系列的第一篇在此:Java Web技术经验总结一,主要包含我在日常工作中的经验和心得体会(如有不足之处欢迎指出)。
Maven的使用经验
- 依赖的scope有test、provided、compile等。test:一般是单元测试场景使用,在编译环境加入classpath,但打包时不会加入,如junit等;provided:表示容器或者JDK已经提供该依赖,打包时不需要打包入war;compile:默认范围,在工程环境的classpath(编译环境)和打包(如果是WAR包,会包含在WAR包中)时候都有效。
JVM相关参考资料
- Minor gc vs Major gc vs Full gc
- JDK内置工具的使用:JDK内置工具的使用和例子
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}
- 排查full gc问题,可以通过命令
线上机器每隔一个小时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了。
- 参考文章
在单元测试中加载配置文件
- 在spring项目中,使用Mockito+JUnit测试业务逻辑时,有时需要读取一些外部配置文件(例如biz.properties),可以参考Spring下的单元测试(JUnit)--加载配置文件。
- 可以考虑使用@Properties定位配置文件、使用@Value注入配置属性;不过在这种情况下,需要解决不同环境下的属性配置问题;
- 可以考虑通过暴露set接口,在单元测试中设置对应的属性,从而避免处理外部配置文件的先关技术。
Mockito + Spring + AssertJ是Spring项目中写单元测试的最佳组合,优点有:轻量、简洁、可以测试web层(拦截器、过滤器等)、可以测试异常分支。
log4j中的日志级别有:DEBUG、INFO、WARN、ERROR(级别依次变高),在生产环境中一般采用ERROR级别、在开发环境中使用DEBUG级别。如果日志级别为DEBUG级别 ,则代码中的
logger.debug()
、logger.info()
、logger.warn()
和logger.error()
等日志都会打印;如果日志级别为WARN,则只会打印WARN和ERROR日志。参考:日志级别的选择给Controller的@RequestMapping方法加日志,通过AOP不容易加(有解决方案),一个比较迂回的方法是,让Controller使用一个Service代理(包含一个process方法),拦截这个process方法比较容易。
Java Web的最佳实践:Spring Boot + Thymeleaf,基础技术包括:Spring + HTML + CSS。JSP,Velocity和FreeMarker,那是上一代的模板引擎,应该尝试一下新的东西。参考:Thymeleaf官网
数据库部分,企业级Java Web要求的知识架构很多,后端就包括数据技术,最常用的是关系型数据库MySQL,可以阅读下列文章补充一点知识点。当然,最常用、最有效的参考资料是官方文档。
- 如果有人问你数据库的原理,叫他看这篇文章
- MySQL加锁处理分析
- caoz的“如何应对并发”系列
常用概念,PV:请求次数/day;UV:不同uuid的个数/day。对于自己负责的业务,有两个日志是必须的:BI日志和业务监控日志——BI日志用于计算业务指标,可以指导运营和产品的动作、业务日志用于研发同学监控自己服务的稳定性、机器的使用率、接口的QPS等指标。
服务的稳定性,需要良好的监控保障,主要包括几个方面:系统监控、应用监控(JVM)、业务监控(PV/UV/RT)和调用链路监控等。
Java Web技术经验总结(二)相关推荐
- 深入分析Java Web技术内幕(二)
DNS域名解析 第一步:浏览器检查缓存中有没有这个域名对应的解析过的IP地址,有则解析结束. 第二步:如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果.host ...
- 深入分析Java Web技术内幕读书笔记(二)浅析DNS域名解析过程
上一篇文章<浅析Web请求过程>讲述的是如何发起HTTP请求,对于请求发起过程中很重要的一个步骤--DNS解析过程的描述是一带而过,本篇文章将跟着DNS解析过程来分析域名是如何解析的. 一 ...
- JAVA WEB技术
JAVA WEB技术 一. 基本概念 Web开发:(web.网页的意思!) 1. 静态web 1. html.css 2. 提供给所有人看的数据始终不会发生变化! 2. 动态web 1.淘宝.几乎所有 ...
- 深入分析Java Web技术内幕读书笔记(一)浅析Web请求过程
随着Web技术的快速发展,互联网的网络架构已经从传统的C/S架构转变为B/S架构,B/S架构相较于传统的C/S架构,有诸多优点,例如:提供了统一的操作方式,简化了用户的学习成本:便捷的开发方式大大提高 ...
- 深入分析Java Web技术内幕pdf
下载地址:网盘下载 内容简介 · · · · · · <深入分析Java Web技术内幕(修订版)>新增了淘宝在无线端的应用实践,包括:CDN 动态加速.多终端化改造. 多终端Sessi ...
- 基于Java Web技术的动车购票系统
毕 业 设 计 中文题目 基于Java Web技术的动车购票系统 英文题目 Train ticket system based on Web Java Technology 毕业设计诚信声明书 本人郑 ...
- java图片管理系统_基于Java Web技术的图片管理系统的设计与实现.doc
基于Java Web技术的图片管理系统 的设计与实现 本科毕业设计 目 录 第1章 引言6 1.1 课题研究目的及意义6 1.2 课题研究的内容7 2.1 用户功能需求7 图片收藏数据库查询系统图片收 ...
- Java Web 实习笔记(二)
Java web实习笔记目录导航 1. Java Web 实习笔记(一) 2.Java Web 实习笔记(二) 3.Java Web 实习笔记(三) 4.Java Web 实习笔记(四) 笔记(一) ...
- Java Web技术路线总结
Java Web技术路线总结 2017/10/12 星期四 19:47:52 Edit by Core Chan 此总结仅用于个人学习,仅供参考. 目前技能点: java SE除了swing/awt等 ...
最新文章
- 现今主流计算机语言,现今主流的Python图形化界面主要有哪些
- 首届CCF真题5-任务调度
- 【学术相关】西湖大学教授:都说不唯论文,那我们发表论文是为了什么?
- Split和正则表达式的区别
- 【每日进步】September 2012
- 零美术基础逆袭成为动画师!你需要怎么做?
- 软件工程学习总结(2)——大部分的软件工程其实就是管道作业
- Linq的Distinct方法的扩展
- win7 计算机定时关机脚本,win7定时关机命令是什么 如何设置定时关机【图解】...
- onenote登录显示服务器问题,onenote启动不了怎么回事 onenote为什么登录显示无法连接...
- FFmpeg命令(七)、 音频与视频合并成视频
- JSjavascript获取B站bilibili哔哩哔哩分P播放列表并以excel文件保存本地
- 流量压力折射移动互联网困局
- java多线程提交,如何按照时间顺序获取线程结果,看完你就懂了 | Java工具类
- 微信公众号获取的实时坐标和高德地图坐标系的转换
- 校园安全教育APP的设计与实现
- Dubbo-05 20190317
- 组件图知识点(UML)
- 数据处理分析模块 Pandas(3)
- vue中用户自定义短信模板设置,功能为点击添加有光标时在光标后面拼接数据,没光标时在短信模板后面直接拼接数据