- 博客(33)
- 资源 (3)
- 收藏
- 关注
原创 AQS(AbstractQueuedSynchronizer)之——独占锁的实现
public abstract class AbstractQueuedSynchronizer { // head与tail共同维护着一个先进先出的队列 private transient volatile Node head; // 头节点,指向一个空Node private transient volatile Node tail; //记录最后一个节点 ...
2019-03-14 17:46:17 239
原创 简谈TCP连接——三次握手与四次挥手
基本概念在三次握手与四次挥手的过程中,会出现一些相关概念。为了便于后文的阅读,我先把相关的解释罗列在此。SYN:SYN是Synchronize(同步)的缩写,意思是通过告知初始序号使通信双方保持步调一致,以便完成后续的数据收发检查。seq(序号初始值):首先,我们得知道,HTTP请求消息一般不会太长,一个网络包就能装的下,但如果出现了数据量比较大的情况,TCP模块就会在发送数据前先将数...
2019-03-05 21:25:44 298
原创 JVM笔记 -- 类加载机制
类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析3个部分统称为连接。在一般情况下,它们开始的顺序如上图所示。当然,在某些特定情况下,为了支持Java语言的动态绑定的特性,解析阶段可以在初始化阶段之后开始。(注:是按序开始,它们的执行通常都是互相交叉地混合进行的)加载通过一个类的...
2019-03-04 21:15:01 261
原创 JVM笔记 -- 即时编译(JIT)
编译简介在谈到JIT前,还是需要对编译过程有一些简单的了解。在编译原理中,把源代码翻译成机器指令,一般要经过以下几个重要步骤:JIT简介JIT是just in time的缩写,也就是即时编译。通过JIT技术,能够做到Java程序执行速度的加速。那么,是怎么做到的呢?我们都知道,Java是一门解释型语言(或者说是半编译,半解释型语言)。Java通过编译器javac先将...
2019-01-01 16:11:57 8515 1
原创 JVM笔记 -- 垃圾回收机制
目录对象存活判定算法引用计数算法可达性分析算法方法区的回收垃圾收集算法(GC算法)分代收集算法(Generational Collection)标记 - 清除算法复制算法标记 - 整理算法HotSpot的算法实现对象引用随着程序的运行,内存中存在的实例对象、变量等信息占据的内存越来越多,如果不及时进行内存回收,势必会带来程序性能的下降及因...
2018-12-16 16:42:04 365
原创 JVM笔记 -- Java对象模型
简介在HotSpot虚拟机中,对象在内存中的存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头(instanceOopDesc) Mark Word,主要存储对象运行时记录信息,如hashcode, GC分代年龄,锁状态标志,线程ID,时间戳等 元数据指针,即指向方法区的instanceKlass实例,虚拟...
2018-12-15 16:46:35 233
原创 JVM笔记 -- Java内存模型
Java内存模型(JMM)规定了所有的变量都存储在主内存(Main Memroy)中,每条线程还有自己的工作内存(Working Memory),线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。三个特性原...
2018-12-09 23:06:50 243
原创 JVM笔记 -- JVM内存结构
jvm内存结构组成1. 程序计数器是最小的一块内存区域,它可以看作是当前线程所执行的字节码的行号计数器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程回复等基础功能都需要依赖这个计数器来完成。线程私有:各线程都有一个独立的程序计数器,他们之间独立存储、互不影响。执行Java方法时,计数器记录正在执行的...
2018-12-02 15:54:20 268
原创 mysql常用时间列表的查询——七天内、本月、本周、某天
在mysql用分组查询做统计时,时常会遇到这样的场景——需要查询一段时间内数据统计,并按一定的时间分组查出。分组查询的sql可能很快就写出来了,但当执行后却发现,由于某个时间段没有数据,导致输出结果的时间段缺失。如下图,本意是想查询当月各天的金额统计,但由于数据缺失,导致查询结果只有部分天数输出。这个输出单纯地对于后台来说可能是没有什么问题,但要前端将它展示成图表那可就不行了!...
2018-10-09 22:54:46 11047 14
原创 HashMap(1.8)源码分析
目录一、HashMap简介1.1、简述1.2、继承结构1.3、数据结构二、源码分析2.1、常量2.2、属性2.3、方法一、HashMap简介1.1 简述在api文档中,其大致定义为基于哈希表实现的Map接口。此实现提供了所有可选的map操作,并允许key和value为null。(HashMap类大致相当于Hashtable,除了它是不同步...
2018-07-18 22:38:02 233
原创 HotSpot中的几种锁优化技术
在JDK 1.6中,HotSpot虚拟机实现不少锁优化技术来提高程序的执行效率。自旋锁自旋锁可以使线程在没有取得锁的时候不被挂起,而转去执行一个空循环。这样可以避免线程切换的开销,在锁被占用时间很短时对性能有所提高。反之,如果锁占用时间过长,那么自旋的线程只会白白消耗处理器资源。在jdk 1.6中还引入了自适应的自旋锁,即锁的自旋次数不在固定,而是根由前一次在同一个锁的自旋时间及锁的拥有者...
2018-07-12 22:44:17 352
原创 java泛型中通配符的使用详解
在java泛型中,通配符往往能提供给我们比不可变类型更多的灵活性。例如: public static void main(String[] args) { List<Number> list1 = new ArrayList<Number>(); List<Long> list2 = new ArrayList<Long>(); Lis...
2018-06-23 16:57:35 4849 1
原创 shiro框架整合ssm的简单使用
该项目仅作为简单的ssm整合shiro的demo使用,部分代码仅简单实现。该文只贴出与shiro相关的配置,完整代码可见https://github.com/Zhong-Y/shiro_ssm部分代码UserRealm.javarealm在shiro框架中用于认证、授权等操作。为了满足业务的需求,通常在使用时,使用的是继承了AuthorizingRealm的自定义realm.public clas...
2018-04-28 16:06:14 333
原创 java设计模式——适配器模式
适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。适配器又分为对象适配器和类适配器。其中类适配器是通过多继承的方式实现的,然而这在java中是不可能的,且其除了实现方式的差异外,与对象适配器并无多大区别,故在此不做介绍。对象适配器例子:通过适配器,使得WildTurkey和MallardDuck类兼容Duck//鸭子public interface D...
2018-04-14 15:17:14 178
原创 java设计模式——命令模式
定义:命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。设计模式 —— 命令模式(Command Pattern)图:百度百科 Client(客户):负责创建一个具体的命令(Concrete Command),并设置其接收者...
2018-04-13 17:30:16 171
原创 搭建及配置一个简单ssm项目的单机redis缓存
在linux下安装redis本人下的版本是redis-3.2.11.tar.gz1 、安装redis编译的c环境 yum install gcc-c++2、将redis安装包上传到Linux系统中,或通过wget命令下载也可。官网下载地址3、解压到/usr/local下 tar -zxvf redis-3.2.11.tar.gz /usr/local4、进入redis...
2018-04-04 22:05:22 726
原创 java设计模式 ——工厂模式
工厂模式一般可分为三类:简单工厂模式、抽象工厂模式、工厂方法模式。其中,简单工厂其实不是一个设计模式,反而比较像一种编程习惯。抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。工厂方法模式:定义了一个创建对象的接口,担由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类抽象工厂创建的是一个产品家族,它的方法经常以工厂方法的方式实现。简单工厂模式用一个"工厂...
2018-03-08 22:19:25 152
原创 java设计模式 ——装饰者模式
什么是装饰者模式装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 图来自百度百科例子//饮料public abstract class Beverage { //描述 String description = "Unknown Bevera...
2018-03-06 20:36:02 251
原创 springmvc中validator的使用
在springmvc.xml中配置validator <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <bean id="messageSource" class="org.spri
2017-11-14 20:23:43 1841
原创 ssm三大框架基本配置
web.xml<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java
2017-11-14 20:14:01 301
原创 springmvc基本配置
web.xml<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://ja
2017-11-14 19:57:23 147
原创 java设计模式 ——观察者模式
什么是观察者模式在对象之间定义一对多的依赖,这样依赖,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。在观察者模式中,分为推模型和拉模型两种两种模式的比较 ■推模型是假定主题对象知道观察者需要的数据;而拉模型是主题对象不知道观察者具体需要什么数据,没有办法的情况下,干脆把自身传递给观察者,让观察者自己去按需要取值。 ■推模型可能会使得观察者对象难以复用,因为观察者的update()方...
2017-11-05 19:36:56 200
原创 笔记——Ajax
什么是AjaxAJAX(Asynchronous JavaScript and XML.)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。js原生的Ajaxget请求 //创建ajax引擎对象 ---- 所有的操作都是通过引擎对象 var xmlHttp = new XMLHttpRequest(); //绑定监听 ---- 监听服务器是否已经返回相
2017-11-05 10:35:10 204
原创 eclipse中使用jstl
对于jstl-1.2的版本,只需在lib中添加jstl的jar包,然后在使用的jsp页面中加上即可。<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>Insert title here 注:若直接通过导入外面J
2017-10-15 10:50:17 516
原创 项目中遇到的中文乱码问题
执行sql语句时中文乱码数据库连接的url末尾加上?autoReconnect=true&useUnicode=true&characterEncoding=utf8如:jdbc.url=jdbc:mysql://localhost:3306/mytest?autoReconnect=true&useUnicode=true&characterEncoding=utf8Po
2017-08-25 15:51:15 280
原创 MyBatis笔记——基本配置与访问
MyBatis简介MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apachesoftware foundation 迁移到了googlecode,并且改名为MyBatis 。2013年11月迁移到Github。 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如
2017-06-07 21:19:44 332
原创 笔记——过滤器与包装器
与servlet类似,过滤器就是Java组件,请求发送到servlet之前,可以用过滤器截获和处理请求,另外servlet结束工作之后,但在响应发回给客户之前,可以用过滤器处理响应。 xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSc
2017-05-11 17:10:21 489
原创 笔记——授权与认证
定义角色tomcat-users.xml web.xml<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="ht
2017-05-10 16:21:18 384
原创 笔记——JSP(杂)
JSP最终会变成一个servletMyJSP.jsp ->MyJSP_jsp.java -> MyJSP_jsp.class -> myJSP_jsp(Servlet对象) Scriptlet: 在JSP中放入常规的Java代码指令:表达式: 表达式会成为out.print()的参数声明: 每次运行服务器方法时都会重新初始化。在JSP变成servlet时成为成员变量(
2017-05-07 17:15:03 282
原创 笔记——会话、cookie、url重写
会话容器几乎会做cookie的所有工作,如在响应中发送一个会话cookie(从请求中得到会话ID)HttpSession session = request.getSession();在服务器中请求一个会话,余下的事情会自动完成建立新的HttpSession对象 生成唯一的会话ID 建立新的Cookie对象 把会话ID与cookie关联 在响应中设置Cookie(在S...
2017-05-07 17:06:01 380
原创 笔记——重定向与请求分派
重定向例:http://localhost:8080/Test/MyJsp.jsp请求URL:http://localhost:8080/Test/相对路径,无”/”(容器会相对于原先的请求URL建立完整的URL), 如请求上述URLResponse.sendRedirect(“test.jsp”);绝对路径,有”/”(容器会相对于Web应用本身建立完整的URL,如re...
2017-05-07 17:01:35 295
原创 笔记——ServletConfig与ServletContext
ServletConfig对象每个servlet都有一个ServletConfig对象 用于向servlet传递部署时信息 用于访问ServletContext 参数在部署描述文件中部署初始化参数<servlet> <servlet-name>ParamTests</servlet-name> <servlet-cla...
2017-05-07 16:43:19 331
原创 笔记——容器与servlet的生命周期
什么是容器Servlet没有main()方法。它们受控于另一个Java应用,这个Java应用称为容器。如Tomcat如果Web服务器应用(如Apache)得到一个指向某servlet的请求,此时服务器不是把这个请求交给servlet本身,而是交给部署改servlet的容器。要由容器向servlet提供HTTP请求和响应,而且要由容器调用servlet的方法,如doPost()或doGet(
2017-05-07 16:38:29 553
ssm框架整合的全部jar包(版本较新2017-11-11)
2017-11-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人