Java研发进阶之路
文章平均质量分 96
总结作者在阿里、微店的学习Java经验, 展示一条如何走向高级研发工程师的学习道路. 在本专栏中包括但不限于以下技术: JavaSE、EE、设计模式、JVM、 缓存、数据库、MQ、RPC... 希望通过这些技术的结合, 真正实现互联网项目高性能、高可靠性、高伸缩性的目标.
菜鸟-翡青
给时光以生命
展开
-
简洁的Java8
再次回到阿里, 感觉变化好大: 一是服务资源Docker化, 最牛逼的阿里DB团队竟然把DB放到了容器中, 还放到了线上环境; 二是全集团Java8(记得离开时还是1.6、1.5, 甚至还有1.4), 在外面创业公司都还停留在1.7的时代, 阿里竟率先使用了Java8, 而且还做了高性能的定制, 因此阿里人也就有机会在生产环境体验到Java8如丝般的顺滑流畅. 而本篇就从对Java8影响最大的`Stream`开始说起原创 2017-07-09 18:17:20 · 7110 阅读 · 6 评论 -
JVM初探- 使用堆外内存减少Full GC
使用堆外内存减少Full GC - JVM大部分主流互联网企业线上Server JVM选用了CMS收集器(如Taobao、LinkedIn、Vdian), 虽然CMS可与用户线程并发GC以降低STW时间, 但它也并非十分完美, 尤其是当出现Concurrent Mode Failure由并行GC转入串行时, 将导致非常长时间的Stop The World原创 2017-01-13 11:00:40 · 16705 阅读 · 7 评论 -
JVM初探- 内存分配、GC原理与垃圾收集器
JVM初探- 内存分配、GC原理与垃圾收集器 JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念上可简单认为new时分配外, 我们着重介绍后面的3个步骤:VM内存分配策略: 对象内存主要分配在新生代Eden区, 如果启用了本地线程分配缓冲, 则优先在TLAB上分配, 少数情况能会直接分配在原创 2016-12-30 20:45:21 · 12217 阅读 · 20 评论 -
Spring MVC 实践 - Component
Spring MVC 实践标签 : Java与WebConverter Spring MVC的数据绑定并非没有任何限制, 有案例表明: Spring在如何正确绑定数据方面是杂乱无章的. 比如: Spring总是试图用默认的语言区域将日期输入绑定到java.util.Data, 如果想要使用不同的日期格式(format),就需要Converter的协助.Spring提供了Converter接口来原创 2016-07-05 15:26:36 · 5749 阅读 · 1 评论 -
Spring MVC 实践 - Base
Spring MVC 实践标签 : Java与WebSpring Web MVC Spring-Web-MVC是一种基于请求驱动的轻量级Web-MVC设计模式框架, Spring MVC使用MVC架构思想, 对Web层进行职责解耦,使用请求-响应模型将数据、业务与视图进行分离, 简化开发.MVCMVC(模型-视图-控制器)是一个以设计界面应用程序为基础的架构模式,通过分离模型-视图-控制器在应原创 2016-07-05 14:47:48 · 8058 阅读 · 1 评论 -
Spring 实践 -拾遗
Spring 实践标签: Java与设计模式Junit集成前面多次用到@RunWith与@ContextConfiguration,在测试类添加这两个注解,程序就会自动加载Spring配置并初始化Spring容器,方便Junit与Spring集成测试.使用这个功能需要在pom.xml中添加如下依赖:pom.xml<dependency> <groupId>org.springframew原创 2016-03-12 08:52:13 · 5417 阅读 · 3 评论 -
Spring 实践 -AOP
Spring 实践标签: Java与设计模式AOP引介AOP(Aspect Oriented Programing)面向切面编程采用横向抽取机制,以取代传统的纵向继承体系的重复性代码(如性能监控/事务管理/安全检查/缓存实现等). 横向抽取代码复用: 基于代理技术,在不修改原来代码的前提下,对原有方法进行增强.Spring AOP 历史1.2开始, Spring开始支持AOP技术(Sprin原创 2016-03-07 08:32:50 · 5582 阅读 · 1 评论 -
Spring 实践 -IoC
Spring 实践标签: Java与设计模式Spring简介 Spring是分层的JavaSE/EE Full-Stack轻量级开源框架.以IoC(Inverse of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程)为内核, 取代EJB的臃肿/低效/脱离现实. 主页http://spring.io/ IoC与DIIOC:原创 2016-03-09 07:43:58 · 4893 阅读 · 2 评论 -
Servlet - Upload、Download、Async、动态注册
Upload、Download、Async标签 : Java与WebUpload-上传 随着3.0版本的发布,文件上传终于成为Servlet规范的一项内置特性,不再依赖于像Commons FileUpload之类组件,因此在服务端进行文件上传编程变得不费吹灰之力.客户端要上传文件, 必须利用multipart/form-data设置HTML表单的enctype属性,且method必须为POST原创 2016-05-11 07:47:27 · 9661 阅读 · 4 评论 -
Servlet - Listener、Filter、Decorator
Listener、Filter、Decorator标签 : Java与WebListener-监听器Listener为在Java Web中进行事件驱动编程提供了一整套事件类和监听器接口.Listener监听的事件源分为ServletContext/HttpSession/ServletRequest三个级别:ServletContext级别 Listener 场景 ServletConte原创 2016-05-08 11:17:48 · 7350 阅读 · 1 评论 -
Servlet - 会话跟踪
会话跟踪标签 : Java与Web会话跟踪 HTTP本身是“无状态”协议,它不保存连接交互信息,一次响应完成之后即连接断开,下一次请求需要重新建立连接,服务器不记录上次连接的内容.因此如果判断两次连接是否是同一用户, 就需要使用会话跟踪技术来解决.常见的会话跟踪技术有如下几种:URL重写: 在URL结尾附加会话ID标识,服务器通过会话ID识别不同用户.隐藏表单域: 将会话ID埋入HTML表单隐原创 2016-05-03 10:51:24 · 13867 阅读 · 2 评论 -
Servlet - 基础
Servlet - 基础标签 : Java与WebHTTP协议 HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器(Browser)和万维网服务器(WebServer)之间互相通信的规则.其主要特点可简单概括如下: 1) 简单快速: 客户端向服务器请求服务时,只需传送请求方法和路径, 因此使得HTTP服务器的程序规模小,通信速度原创 2016-04-26 07:18:10 · 13339 阅读 · 3 评论 -
MyBatis 实践 -动态SQL/关联查询
MyBatis 实践标签: Java与存储动态SQL动态SQL提供了对SQL语句的灵活操作,通过表达式进行判断,对SQL进行拼接/组装.if对查询条件进行判断,如果输入参数不为空才进行查询条件的拼接.mapper<select id="selectUser" resultType="com.fq.domain.User" parameterType="com.fq.domain.User">原创 2016-02-28 19:39:49 · 7474 阅读 · 4 评论 -
MyBatis 实践 -配置
MyBatis 实践标签: Java与存储Configurationmybatis-configuration.xml是MyBatis的全局配置文件(文件名任意),其配置内容和顺序如下:properties : 属性(文件)加载/配置settings : 全局配置参数typeAliases : 定义类型别名typeHandlers : 类型处理器objectFactory : 对象工厂p原创 2016-02-28 17:54:56 · 6767 阅读 · 2 评论 -
MyBatis 实践 -Mapper与DAO
MyBatis 实践 -Mapper与DAO标签: Java与存储MyBatis简介MyBatis前身是iBatis,是一个基于Java的数据持久层/对象关系映射(ORM)框架. MyBatis是对JDBC的封装,使开发人员只需关注SQL本身,而不需花费过多的精力去处理如注册驱动、设置参数、创建Connection/Statement、解析结果集等JDBC过程性代码.MyBatis基于XML原创 2016-02-28 15:34:23 · 36771 阅读 · 2 评论 -
JDBC基础
JDBC基础标签: Java与存储 JDBC(Java Database Connectivity)代表Java编程语言与数据库连接的标准API,然而JDBC只是接口,JDBC驱动才是真正的接口实现,没有驱动无法完成数据库连接. 每个数据库厂商都有自己的驱动,用来连接自己公司的数据库(如Oricle, MySQL, DB2, MS SQLServer). 下面我们以MySQL为例,JDB原创 2016-02-22 09:49:02 · 6779 阅读 · 10 评论 -
JVM初探 -JVM内存模型
JVM是每个Java开发每天都会接触到的东西, 其相关知识也应该是每个人都要深入了解的. 但接触了很多人发现: 或了解片面或知识体系陈旧. 因此最近抽时间研读了几本评价较高的JVM入门书籍, 算是总结于此. 本系列博客的主体来自 深入理解Java虚拟机(第二版) 和 实战Java虚拟机 两部书, 部分内容参考 HotSpot实战 和 深入理解计算机系原创 2016-12-02 18:47:48 · 52604 阅读 · 5 评论 -
Maven 核心原理
Maven 是每一位Java工程师每天都会接触的工具, 但据我所知其实很多人对Maven理解的并不深, 只把它当做一个依赖管理工具(下载依赖、打包), Maven很多核心的功能反而没用上.原创 2016-11-05 11:18:38 · 45302 阅读 · 20 评论 -
网络与RPC
网络与RPC标签 : Java基础 Java为网络编程提供的java.net包封装了底层通信细节, 包含了大量的基础组件以及TCP/UDP协议的编程接口, 使得开发者可以专注于解决问题, 而不用关注通信细节.基础组件java.net包下包含如下网络基础组件:InetAddress 代表一个IP地址,提供了获取IP地址、主机名、域名,以及测试IP地址是否可达等方法; Inet4Address原创 2016-08-15 13:00:13 · 7353 阅读 · 3 评论 -
Java 集合
Java 集合标签: Java基础集合/容器Java集合由Collection Map两个接口派生而出,Collection代表序列式容器,Map代表关联式容器.CollectionCollection作为List Queue Set等序列式容器的父接口, 提供了一些公共基础方法:update相关方法: boolean add(E e) boolean addAll(Collection原创 2016-02-07 10:52:36 · 6392 阅读 · 4 评论 -
Java 解析 XML
Java 解析 XML标签: Java基础XML解析技术有两种 DOM SAXDOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点: 便于实现增 删 改 查缺点: XML文件过大可能造成内存溢出SAX方式 采用事件驱动模型边读边解析:从上到下一行行解析,解析到某一元素, 调用相应解析方法 优点: 不会造成内存溢出,缺点:原创 2016-01-31 07:23:08 · 7128 阅读 · 4 评论 -
Java 并发基础
Java 并发基础标签: Java基础线程简述 线程是进程的执行部分,用来完成一定的任务; 线程拥有自己的堆栈,程序计数器和自己的局部变量,但不拥有系统资源, 他与其他线程共享父进程的共享资源及部分运行时环境,因此编程时需要小心,确保线程不会妨碍同一进程中的其他线程;多线程优势 进程之间不能共享内存,但线程之间共享内存/文件描述符/进程状态非常容易.系统创建进程时需要为该其分配很多系统资源(原创 2016-01-24 23:08:53 · 6655 阅读 · 4 评论 -
Java I/O 扩展
Java I/O 扩展标签(空格分隔): Java基础NIO Java 的NIO(新IO)和传统的IO有着相同的目的: 输入 输出 .但是NIO使用了不同的方式来处理IO,NIO利用内存映射文件(此处文件的含义可以参考Unix的名言一切皆文件)来处理IO, NIO将文件或文件的一段区域映射到内存中(类似于操作系统的虚拟内存),这样就可以像访问内存一样来访问文件了.Channel 和 Buffe原创 2016-01-16 09:18:45 · 9152 阅读 · 1 评论 -
Java I/O
Java I/O标签: Java基础 Java的I/O功能通过java.io包下的类和接口来支持,在java.io包下主要包括输入/输出两种IO流,每种输入/输出流又可分为字节流和字符流两大类.字节流支持以字节(8位)为单位的IO操作,而字符流则以字符(16位-Java中)为单位进行IO操作. 除此之外,Java的IO流还使用装饰者模式,将IO流分成底层节点流和上层处理流,节点流直原创 2016-01-16 08:49:42 · 5000 阅读 · 5 评论 -
Java 反射
Java 反射标签: Java基础动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。(引自: 百度百科)var execString = "alert(Math.floor原创 2016-01-04 07:39:46 · 8956 阅读 · 8 评论 -
Java与正则表达式
Java与正则表达式标签: Java基础正则 正如正则的名字所显示的是描述了一个规则, 通过这个规则去匹配字符串. 学习正则就是学习正则表达式的语法规则正则语法普通字符字母, 数字, 汉字, 下划线, 以及没有特殊定义的标点符号都是普通字符. 表达式中的普通字符在匹配一个字符串时, 匹配与之相同的一个字符.转义字符 字符 解释 \n 换行符 \t 制表符 \^ \$原创 2016-01-03 07:59:55 · 6161 阅读 · 4 评论 -
Java 中的日期与时间
Datejava.util.Date对象表示一个精确到毫秒的瞬间; 但由于Date从JDK1.0起就开始存在了,历史悠久,而且功能强大(既包含日期,也包含时间),所以他的大部分构造器/方法都已Deprecated,因此就不再推荐使用(如果贸然使用的话,可能会出现性能/安全方面的问题);下面我仅介绍它还剩下的为数不多的几个方法(这些方法的共同点是Date与毫秒原创 2016-01-02 08:17:22 · 10372 阅读 · 7 评论 -
Java注解实践
Java注解实践标签: Java基础 注解对代码的语意没有直接影响, 他们只负责提供信息给相关的程序使用. 注解永远不会改变被注解代码的含义, 但可以通过工具对被注解的代码进行特殊处理.JDK 基本Annotation 注解 说明 @Override 重写 @Deprecated 已过时 @SuppressWarnings(value = "unchecked")原创 2016-01-01 05:39:54 · 5346 阅读 · 3 评论 -
Java 注释
Java 注释 五月份得知入职YunOS, 开始学习Java, 断断续续学习和使用Java将近半年, 越来越喜欢这个工具, 因此后来被阿里拥抱变化之后, 拿到的的所有的offer都是Java研发; 一路走来, 踩了很多坑, 也有了一点小小的心得, 那就用博客的形式把他记录下来吧… 写的第一篇Java的博客, 就从最基础的Java注释开始!引 程序员圈有一个笑话 最讨厌在写代码的时原创 2015-11-18 23:48:25 · 8105 阅读 · 12 评论