10 2016 档案
摘要:Jcmd:综合工具 jcmd -l 列出当前运行的所有虚拟机 参数-l表示列出所有java虚拟机,针对每一个虚拟机,可以使用help命令列出该虚拟机支持的所有命令 jcmd [pid] help jcmd [pid] VM.uptime 查看虚拟机启动时间VM.uptime jcmd [pid] T
阅读全文
摘要:对象的Class加载 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。然后会为Class对象分配内存。 对象的内存分配 在类加载检查通过后,接下来虚拟机将为
阅读全文
摘要:程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 由
阅读全文
摘要:获取OpenJDK源码有两种方式,其中一种是通过Mercurial代码版本管理工具从Repository中直接取得源码(Repository地址:http://hg.openjdk.java.net/jdk7u/jdk7u),获取过程如以下代码所示。 hg clone http://hg.openj
阅读全文
摘要:Spring AMQP 是基于 Spring 框架的AMQP消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的 POJO的消息监听等,很大方便我们使用RabbitMQ程序的相关开发。 Spring AMQP包含一些模块,如:spring-amqp, spring-rabbit an
阅读全文
摘要:RabbitMQ在windows下的安装 RabbitMQ 它依赖于Erlang,在window上安装时,需要先安装Erlang。 首先确定你的window电脑是32位还是64位,然后下载对应版本的Erlang软件。以下的安装以window 64位电脑举例。 Erlang/OTP包 的下载地址: h
阅读全文
摘要:什么是AMQP AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。Er
阅读全文
摘要:面向对象的”六原则一法则” - 单一职责原则:一个类只做它该做的事情。(单一职责原则想表达的就是”高内聚”,写代码最终极的原则只有六个字”高内聚、低耦合”,所谓的高内聚就是一个代码模块只完成一项功能,在面向对象中,如果只让一个类完成它该做的事,而不涉及与它无关的领域就是践行了高内聚的原则,这个类就只
阅读全文
摘要:它这种设计策略完全类似于Java实现OOP的设计理念,当然Java本身的设计要比Spring复杂太多太多,但是它们都是构建一个数据结构,然后根据这个数据结构设计它的生存环境,并让它在这个环境中按照一定的规律不停地运动,在它们的不停运动中设计一系列与环境或者与其他个体完成信息交换。这样想来我们用到的其
阅读全文
摘要:Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复(线程回到就绪
阅读全文
摘要:velocity就是由template,engine,context组成。 1、首先创建一个template(如果是用在web上就是一个html文件),将需要参数化或实例化的地方用跟context有关的符号标记出来,标记时用velocity template language。而template应该
阅读全文
摘要:在MVC开发模式下,View离不开模板引擎,在Java语言中模板引擎使用得最多是JSP、Velocity和FreeMarker,在MVC编程开发模式中,必不可少的一个部分是V的部分。V负责前端的页面展示,也就是负责生产最终的HTML,V部分通常会对应一个编码引擎,当前众多的MVC框架都已经可以将V部
阅读全文
摘要:使用特定JVM参数运行服务端代码 要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是: 其中的${debug_port}是用户自定义的,为debug端口,本例以5555端口为例。 transport: 表示信息传递的连接方式, 其中,dt_socket是指用SOC
阅读全文
摘要:在一个工程中如果想要使用 SpringMVC的话,只需要两个步骤 这样就可以搞定一个最基本的Spring MVC的应用了。 对于spring MVC框架中,有三个组件是用户必须定义和扩展的: 下面是传统的配置示例: 下面是用freemaker引擎的配置示例: SpringMVC的入口是Dispatc
阅读全文
摘要:filter servlet context-param listener error-page description display-name welcome-file-list web.xml常用组件解析
阅读全文
摘要:支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一。如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构。本文将首先介绍MySQL的整体逻辑架构,然后分析MySQL的存储引擎API并介绍如何编写自己的MySQL存
阅读全文
摘要:SpringBoot核心启动类的SpringApplication。从SpringApplication.run()开始先创建SpringApplication对象,并调用该对象的run方法。 构建SpringApplication对象 初始化SpringApplication的source 初始化
阅读全文
摘要:淘宝前台系统的优化历程 2009年,系统拆分,静态文件合并,前端页面异步化和JSON化。 2010年,去DB依赖,引入缓存,提升单机QPS,关注用户体验。 2011年,优化进入深水区Velocity,BigPipe。 2012年,静态化改造。 2013年,统一Cache,CDN化,网络协议。 高访问
阅读全文
摘要:创建一个ServletContextServer类,用来初始化web应用程序的Context,并且指定Servlet和Servlet匹配的url。这里指定了两个Servlet,分别是HelloServlet和GoodbyeServlet,并分别对应/hello/*和/goodbye/*。 也可以创建
阅读全文
摘要:何为同步?JVM规范规定JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的实现细节不一样。代码块同步是使用monitorenter和monitorexit指令实现,而方法同步是使用另外一种方式实现的,细节在JVM规范里并没有详细说明,但是方法的同步同样可以使用这两个指令来实现
阅读全文
摘要:ACID特性 原子性(Atomicity)事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位。 一致性(Consistency)执行完数据库操作后,数据不会被破坏。打个比方,如果从 A 账户转账到 B 账户,不可能因为 A 账户扣了钱,而 B 账户没有加钱吧。 隔离
阅读全文
摘要:如果用最简洁的话来总结 iBATIS 主要完成那些功能时,我想下面几个代码足够概括。 iBATIS 就是将上面这几行代码分解包装,但是最终执行的仍然是这几行代码。前两行是对数据库的数据源的管理包括事务管理,3、4 两行 iBATIS 通过配置文件来管理 SQL 以及输入参数的映射,6、7、8 行是
阅读全文
摘要:Tomcat 的心脏是两个组件:Connector 和 Container,Connector 组件是可以被替换,这样可以提供给服务器设计者更多的选择,因为这个组件是如此重要,不仅跟服务器的设计的本身,而且和不同的应用场景也十分相关,所以一个 Container 可以选择对应多个 Connector
阅读全文
摘要:Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态。它们本身只是HTTP中的一个配置项,在servlet规范中也只对应一个类而已。 理解 Cookie 通俗地说就是当一个用户通过 HTTP 协议访问一个服务器的时候,这个服务器会将一些 Key/Value 键值对返回给
阅读全文
摘要:Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator)。 TreeMap底层通过红黑树(Red-Black tre
阅读全文
摘要:Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础。要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力。虽然它们是彼此
阅读全文
摘要:配置元素说明: 元素名 属性 解释 server port 指定一个端口,这个端口负责监听关闭tomcat 的请求 shutdown 指定向端口发送的命令字符串 service name 指定service 的名字 Connector ( 表示客户端和service之间的连接) port 指定服务器
阅读全文
摘要:物理内存和虚拟内存 (1)在java中,分配内存和回收内存都由JVM自动完成,甚至不需要写和内存相关的代码(2)物理内存即RAM还有寄存器(一种存储单元,用于存储计算机单元执行指令(如整形浮点等运算)的中间结果)是处理器通过地址总线连接的。地址总线:其宽度决定了一次可以存寄存器或者RAM中获取多少个
阅读全文
摘要:Web请求过程 如何发起请求:browser,httpclient http解析:chrome ,cache Dns域名解析:域名缓存 cdn:负载,动态加速,回源 Java I/O I/0类库的基本架构:字节操作,字符操作,字节字符的转化 磁盘的I/O:内核空间,用户空间,同步,异步,内存映射 网
阅读全文
摘要:Class类文件结构 Class文件是一组以8字节为基础单位的二进制流, 各个数据项目严格按照顺序紧凑排列在class文件中, 中间没有任何分隔符,这使得class文件中存储的内容几乎是全部程序运行的程序。 Java虚拟机规范规定,Class文件格式采用类似C语言结构体的伪结构来存储数据,这种结构只
阅读全文
摘要:Java 虚拟机指令集所支持的数据类型: 在 Java 虚拟机中,实际类型与运算类型之间的映射关系,如下表所示: 加载和存储指令用于将数据从栈帧的局部变量表和操作数栈之间来回传输: 将一个局部变量加载到操作栈的指令包括有:iload、iload_<n>、lload、lload_<n>、fload、f
阅读全文
摘要:类加载过程中每个步骤的顺序 我们已经知道,类加载的过程包括:加载、连接、初始化,连接又分为:验证、准备、解析,所以说类加载一共分为5步:加载、验证、准备、解析、初始化。 其中加载、验证、准备、初始化的开始顺序是依次进行的,这些步骤开始之后的过程可能会有重叠。 而解析过程会发生在初始化过程中。 类加载
阅读全文
摘要:JVM的全名是Java Virtual Machine(Java虚拟机)。它是通过模拟一个计算机的形式来实现到计算机所具有的计算功能。让我们先来看看一台真实的计算机具备计算功能的条件: 指令集 这个计算机所能识别的机器语言的命令集合。 计算单元 即能够识别并且控制指令执行的功能模块 寻址方式 地址的
阅读全文
摘要:ClassLoader是个抽象类,它还有很多子类,我们如果要实现自己的ClassLoader,一般都会继承URLClassLoader这个字类,因为这个类已经帮我们实现了大部分工作,我们只需要在适当的地方做些修改就好了,就像我们要实现Servlet时通常会直接继HttpServlet —样 。 Cl
阅读全文
摘要:java源代码(符合语言规范)-->javac-->.class(二进制文件)-->jvm-->机器语言(不同平台不同种类) 如何让java的语法规则适应java虚拟机的语法规则?这个任务由javac编译器来完成java语言规范转换成java虚拟机语言规范。 编译流程: 流程: 词法分析器:将源码转
阅读全文
摘要:一、继承关系 继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。
阅读全文