- 博客(139)
- 资源 (45)
- 收藏
- 关注

原创 Servlet 是线程安全的吗?
概要Servlet 默认是单例模式,在web 容器中只创建一个实例,所以多个线程同时访问servlet的时候,Servlet是线程不安全的。 那么 web 容器能为每个请求创建一个Servlet的实例吗?当然是可以的,只要Servlet实现SingleThreadModel接口,就可以了。SingleThreadModel该接口为每次请求创建一个servlet实例。此接口没有方法,跟Seriali
2017-09-07 11:00:14
19820

原创 Tomcat Filter 自己动手实现
Filter 简介Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。 它主要用于对用户请求进行预处理,也可以对HttpServletR
2017-09-07 10:59:26
3607

原创 使用DelayQueue 和 FutureTask 实现java中的缓存
使用DelayQueue、ConcurrentHashMap、FutureTask实现的缓存工具类。DelayQueue 简介DelayQueue是一个支持延时获取元素的无界阻塞队列。DelayQueue内部队列使用PriorityQueue来实现。队列中的元素必须实现Delayed接口,在创建元素时可以指定多久才能从队列中获取当前元素。只有在延迟期满时才能从队列中提取元素。DelayQueue非常
2017-08-01 18:11:44
2862

原创 局部变量和常量的性能分析
前两天群里有人问,下面的代码1 比代码2运行时间上慢了100ms,这是问什么? 请看下面的两个代码片段:代码1for(int i=0; i<Integer.MAX_VALUE; i++){ sum+=i;}代码2for(int i=0, len=Integer.MAX_VALUE; i<len; i++){ sum+=i;}我本地使用的JDK1.8执行的,但每次执行这两段的时间
2017-07-20 10:24:05
2021

原创 多线程并发下的单例模式
定义:单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。下面通过代码分析下java中,各种单例模式写法的优缺点。1、饿汉模式示例1.1public class Singleton { private Singleton() {} private static Object INSTANCE = new Object(); public
2017-06-26 14:55:36
1882

原创 深入分析JVM逃逸分析对性能的影响
逃逸分析(Escape Analysis)逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,称为方法逃逸。甚至还有可能被外部线程访问到,譬如赋值给类变量或可以在其他线程中访问的实例变量,称为线程逃逸。方法逃逸的几种方式如下:public class EscapeTest { public static Object obj; public
2017-06-26 14:53:44
5671
3

原创 Trie Tree 实现中文分词器
前言继上一篇HashMap实现中文分词器后,对Trie Tree的好奇,又使用Trie Tree实现了下中文分词器。效率比HashMap实现的分词器更高。Trie Tree 简介Trie Tree,又称单词字典树、查找树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无
2017-05-17 23:58:20
4706

原创 java内存模型
前言 在学习java多线程并发编程前,必须要了解java内存模型,只有了解java内存模型,才能知道为什么多线程并发时会出现数据不一致,什么时候需要加锁同步等各种问题。下面只是简单阐述下java内存模型及其相关的概念。内存模型简介 java的并发采用的是共享内存模型(而非消息传递模型)。 Java内存模型(Java Memory Model)描述了Java程序中各种变量(共享变量)
2017-04-28 23:07:09
1686

原创 JVM 内存模型
内存划分java虚拟机按照运行时内存使用区域划分如图: 区域 是否线程共享 是否会内存溢出 程序计数器 否 不会 java虚拟机栈 否 会 本地方法栈 否 会 堆 是 会 方法区 是 会一、程序计数器(Program Counter Register) 程序计数器就是记录当前线程执行程序的位置,改变计数器的值来确定执行的下
2017-04-20 23:26:46
1590
原创 mysql 升级5.7 客户端连接 提示 Table ‘performance_schema.session_variables‘
mysql 升级5.7 客户端连接 提示 Table 'performance_schema.session_variables'
2022-12-17 14:24:53
288
转载 java 成神之路
感觉自己技术不错的小伙伴们,看看有没有自己欠缺知识点,赶快补起来吧。java成神之路一、基础篇JVMJVM内存结构堆、栈、方法区、直接内存、堆和栈区别Java内存模型内存可见性、重排序、顺序一致性、volatile、锁、final垃圾回收内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定JVM参数及调优Java对...
2018-07-02 13:37:03
1625
原创 获取当前执行代码的类、方法、行数信息
package cn.com.infcn.tool.utils;/** * Class工具类 * * @author jijs * @version 1.0 */public class ClassUtils { /** * 获取调用的类名 * * @return String */ public static Stri...
2018-07-02 13:35:54
7330
原创 MTU 和 MSS 区别
MTU: Maximum Transmit Unit,最大传输单元,即物理接口(数据链路层)提供给其上层(通常是IP层)最大一次传输数据的大小;以普遍使用的以太网接口为例,缺省MTU=1500 Byte,这是以太网接口对IP层的约束,如果IP层有<=1500 byte 需要发送,只需要一个IP包就可以完成发送任务;如果IP层有> 1500 byte 数据需要发送,需要分片才能完成发...
2018-07-02 13:33:59
30098
2
原创 TCP 请求头
TCP 请求头结构Source Port(源端口):源端口号 (占用16位),发送端程序端口Destination Port(目的端口):目的端口号(占用16位),接收端程序端口Sequence Number(发送数据序号):用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节在数据流中的序号;主要用来解决网络报乱序的问题;(占用32位)Ac...
2018-07-02 13:32:44
4717
原创 TCP 三次握手 和 四次挥手
概述我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手。三次握手下图为三次握手的流程图 下面通过我们 wireshark 抓包工具来分析三次握手 第一次握手建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;(x 是随机生成的一个...
2018-07-02 13:30:54
942
原创 路由器 和 交换机 傻傻分不清楚
概述交换机一般用在局域网,负责局域网中,根据 Mac 地址进行数据交换转发。 路由器用在城域网、广域网,根据 IP 地址进行不同网段的数据交换转发。交换机交换机有二层、三层、四层的,一般我们说的交换机都是二层交换机。 因为交换机(二层交换机)只能识别Mac地址,所以他不带路由功能,一般只在局域网中使用。但是他有一个很重要的特性,每个端口数据流量相同,不会因为某个端口数据流量...
2018-07-02 13:29:53
1923
1
原创 NIO 之 FileChannel
概述文件通道总是阻塞式的,因此不能被置于非阻塞模式。现代操作系统都有复杂的缓存和预取机制,使得本地磁盘 I/O 操作延迟很少。网络文件系统一般而言延迟会多些,不过却也因该优化而受益。 面向流的 I/O 的非阻塞范例对于面向文件的操作并无多大意义,这是由文件 I/O 本质上的不同性质造成的。对于文件 I/O,最强大之处在于异步 I/O( asynchronous I/O),它允许一个进程可以从操...
2018-06-05 15:40:51
1659
原创 mysql 启动出错问题排查
概述由于服务器不正常关机导致了 mysql 服务启动不了,提示: 错误 1067:进程意外终止。具体错误提示如下: 看到这个错误,大家的第一反映就是去网上查询 mysql 1067 相关的问题。结果查出来好多解决方案,尝试了多种解决方案,结果都不可用。解决思路由于出现 1067 这个问题可能是多种原因导致的。这里我们应该分析 mysql 的日志信息,通过日志来具体分析是什...
2018-06-05 15:38:30
2358
原创 凯撒加密算法(最简单的对称加密)
凯撒算法 概述凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 2 位,则 字母 A 将变为 C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则变为 A,字母 Z 变为 B。 因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文: “Jgnnq...
2018-06-05 15:36:27
16257
原创 RSA 非对称加密原理(小白也能看懂哦~)
RSA 加密原理 步骤 说明 描述 备注 1 找出质数 P 、Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) = (P-1)(Q-1) - 4 计算公钥E 1 < E < φ(N) E的取值必须是整数 E 和 φ(N) 必须是互质数 5 计算私...
2018-06-05 15:35:09
106568
25
原创 NIO 之 Channel
可参考之前写过的文章:NIO 之 Channel实现原理概述通道( Channel)是 java.nio 的主要创新点。它们既不是一个扩展也不是一项增强,而是全新、极好的 Java I/O 示例,提供与 I/O 服务的直接连接。 Channel 用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据。Channel 接口定义public in...
2018-06-05 15:33:21
1711
原创 NIO 之 MappedByteBuffer
可参考: MappedByteBuffer以及ByteBufer的底层原理概述Bytebuffer分为两种:间接地和直接的,所谓直接就是指MappedByteBuffer,直接使用内存映射(java的话就意味着在JVM之外分配虚拟地址空间);而间接的ByteBuffer是在JVM的堆上面的。间接缓冲区就是我们通常说的堆缓冲区。 直接缓冲区 java内部是使用 DirectByteBu...
2018-06-05 15:32:28
2369
原创 NIO 之 Buffer 图解
可参考之前的文章:NIO 之 ByteBuffer实现原理 下面是对之前文章的一个补充Buffer 类 结构对于每个非布尔原始数据类型都有一个缓冲区类。尽管缓冲区作用于它们存储的原始数据类型,但缓冲区十分倾向于处理字节。概述缓冲区 Buffer 内部就是用数组实现的。 Buffer 包含了下面4个属性:容量( Capacity) 缓冲区能够容纳的数据元素的最大...
2018-06-05 15:31:14
1761
转载 浅谈UML类图中类之间的5种关系
什么是UML类图?类图显示了一组类、接口、协作以及他们之间的关系。在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统。类加上他们之间的关系就构成了类图,类图中还可以包含接口、包等元素,也可以包括对象、链等实例。 类与类之间的关系类与类之间的关系可以根据关系的强度依次分为以下五种:依赖关系(Dependency)—关联关系(Associatio...
2018-05-15 09:38:40
3370
1
原创 Java IO 之 管道流 原理分析
概述管道流是用来在多个线程之间进行信息传递的Java流。 管道流分为字节流管道流和字符管道流。 字节管道流:PipedOutputStream 和 PipedInputStream。 字符管道流:PipedWriter 和 PipedReader。 PipedOutputStream、PipedWriter 是写入者/生产者/发送者; PipedInputStream、PipedR...
2018-05-15 09:36:32
4972
1
原创 Java IO 之 SequenceInputStream 原理解析
概述今天给大家分享一个比较有意思的 IO 流。SequenceInputStream ,听名字顾名思义。SequenceInputStream 流可以把多个 InputStream 合并为一个 InputStream . 按照指定的顺序,把几个输入流连续地合并起来,使用起来像一个流一样。并且使它们像单个输入流一样出现。每个输入流依次被读取,直到到达该流的末尾。然后“序列输入流”类关闭这个流...
2018-04-14 10:32:08
2694
原创 java 序列化 原理解析
序列化相关文章: * Java 序列化 之 Serializable * Java 序列化之 Externalizable * Java 序列化 之 单例模式。阅读本文章之前,务必要阅读上面的三篇文章。 这篇文章是围绕上面三篇文章的原理进行剖析的。 因为 ObjectInputStream 和 ObjectOutputStream 类比较复杂,这里只解析跟上面三篇文章相关的内容。...
2018-04-14 10:31:23
2897
1
原创 Java 序列化 之 单例模式
序列化相关文章: * Java 序列化 之 Serializable * Java 序列化之 Externalizable当我们使用Singleton模式时,应该是期望某个类的实例应该是唯一的,但如果该类是可序列化的,那么发序列化后还会是单例的吗?下面我们通过如下示例一来验证一下:示例一User 类User 类是单例模式,使用的饿汉模式,在类加载的时候就创建对象实例。...
2018-04-14 10:30:16
2652
原创 Java 序列化之 Externalizable
相关文章: Java 序列化 之 SerializableJDK中除了提供 Serializable 序列化接口外,还提供了另一个序列化接口Externalizable,使用该接口之后,之前基于Serializable接口的序列化机制就将失效。Externalizable 的序列化机制优先级要高于 Serializable 。Externalizable 源码分析 从源码中,我们...
2018-04-14 10:27:22
2304
原创 Java 序列化 之 Serializable
概念序列化:就是把对象转化成字节。 反序列化:把字节数据转换成对象。对象序列化场景:1、对象网络传输 例如:在微服务系统中或给第三方提供接口调用时,使用rpc进行调用,一般会把对象转化成字节序列,才能在网络上传输;接收方则需要把字节序列再转化为java对象。2、对象保存至文件中 例如:hibernate中的二级缓存:把从数据库中查询出的对象,序列化转存到硬盘中,下次...
2018-04-06 16:33:44
2262
原创 Java 对象占用内存大小
Java 对象如果想要了解java对象在内存中的大小,必须先要了解java对象的结构。HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)java 对象头Mark Word HotSpot虚拟机的对象头(Object Header)包括两部分信息,第一部分用于存储对象自身的
2018-01-22 13:35:25
5202
1
原创 生成 Heap Dump 的几种方式
Heap Dump 概述Heap Dump 是 Java进程所使用的内存情况在某一时间的一次快照。以文件的形式持久化到磁盘中。 Heap Dump的格式有很多种,而且不同的格式包含的信息也可能不一样。但总的来说,Heap Dump一般都包含了一个堆中的Java Objects, Class等基本信息。同时,当你在执行一个转储操作时,往往会触发一次GC,所以你转储得到的文件里包含的信息通常是有
2018-01-22 13:34:14
29016
1
原创 window 查找 java 进程中占用cpu比较高的线程
概述公司内部的一个产品 (java 开发的) 运行在 window 虚拟机上,运行一段时间后CPU飙升,然后想查看是哪个线程占用。 折腾了一下午,终于定位到该线程。下面我们通过两种方式定位到占用cpu比较高的线程。 * 1. 使用Process Explorer,第三方工具定位,使用比较简单,容易上手。 * 2. 使用window自带的perfmon 性能监控工具进行监控,功能强大,
2018-01-22 13:32:44
3956
原创 Spring 事务传播行为
如果对事务不了解的可以先看下,我的上一篇文章: 数据库事务详解概述一般SSH的项目都是使用三层架构即Controller、Services、DAO。 Spring 的事务一般都在Services定义,而Controller、DAO都不定义事务。 那么 Services 方法调用 Services 的方法,事务是怎么执行的? 有些人说不建议Service 调用Service,或者如
2018-01-18 11:36:25
2316
原创 数据库事务详解
概述事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。 * ACID 事务具有4个基本特征,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID。隔离级别 ACID这4个特征中,最难理解的是隔离性。在标准SQL规范中,定义了4个事务隔离级别,
2018-01-17 14:30:53
2350
原创 聚簇索引和二级索引
聚簇索引索引和数据存储在一块( 都存储在同一个B*tree 中)。 一般主键索引都是聚餐索引 Mysql中InnoDB引擎的主键索引为聚簇索引,MyISAM存储引擎采用非聚集索引非聚簇索引索引数据和存储数据是分离的。二级索引(辅助索引)二级索引存储的是记录的主键,而不是数据存储的地址。以Mysql的InnoDB为例 主键是聚集索引 唯一索引、普通索引
2018-01-17 14:29:50
8932
1
原创 数据库索引为什么使用B+树?
概述B tree: 二叉树(Binary tree),每个节点只能存储一个数。 **B-tree:**B树(B-Tree,并不是B“减”树,横杠为连接符,容易被误导) B树属于多叉树又名平衡多路查找树。每个节点可以多个数(由磁盘大小决定)。 B+tree 和 B*tree 都是 B-tree的变种索引为什么是用B树呢?一般来说,索引本身也很大,不可能全部存储在内存中,因此索
2018-01-17 14:28:46
3154
原创 硬盘基本知识(磁头、磁道、扇区、柱面)
概述盘片(platter)磁头(head)磁道(track)扇区(sector)柱面(cylinder)盘片 片面 和 磁头硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。 如
2018-01-17 13:50:18
7680
原创 网络传输 相关概念
单工如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。 例如: 无线广播,数据只能从发送到传输到接收端。半双工如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。 例如:HTTP协议 同一时刻数据只能单向流动,客户端向服务端请求数据或者服务器向客户端响应数据。全双工如果在任意时
2018-01-17 13:49:18
2111
HTML5 世界地图 划分世界区域并显示国家名
2017-12-20
jdk源码share.rar
2017-09-07
openjdk8 源码 包括 jvm的实现
2017-09-07
JAVA网络编程 第4版.pdf
2017-09-07
MySQL必知必会(文字版).pdf
2017-09-07
Java数据结构和算法.(第二版).pdf
2017-09-07
Java RESTful Web Service实战.pdf
2017-09-07
MySQL性能调优与架构设计--全册.pdf
2017-09-07
mysql技术内幕InnoDB存储引擎.pdf
2017-09-07
深入java虚拟机 周志明
2017-09-07
javaFX 基础教程
2015-05-26
GB8567-2006计算机软件文档编制规范
2014-05-06
axis 实现 webservice 例子
2012-08-24
web 编译器
2011-12-06
JNI实例 Java调用DLL c++调用Java
2010-11-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人