自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 ThreadLocal 源码分析

ThreadLocal 源码分析 set方法 getMap方法–获取当前线程的ThreadLocal.ThreadLocalMap set方法–将key,value放入map中 replaceStaleEntry方法 private void replaceStaleEntry(ThreadLocal<?> key, Object value, int staleSlot) { ThreadLocal.ThreadLocalMap.Entry[] tab = this.table; int le

2022-05-18 14:21:22 181

原创 11g orcle clob字段类型插入报错

Cause: java.sql.SQLException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 解决方案 <insert id="batchInsert" begin <foreach collection="list" item="item" index="index" separator=";"> insert into ${tableName} ( id, error_detail, create_date ) values( #{item.id},

2022-02-16 15:35:55 880

原创 redis-动态字符串

第二章 简单动态字符串(simple dynamic string,SDS) SDS:redis的默认字符串 C字符串:字符串字面量(无须对字符串值进行修改的地方) 字符串的键值底层都是由SDS实现 SDS使用地方:字符串,AOF缓冲区(持久化机机制AOF),输入缓冲区(客户端状态) SDS的定义 struct sdshdr{ //记录buf中已使用字节的数量 //等于SDS所保存字符串的长度 int len; //记录buf中未使用字节的数量 int free; //字节数组,用于保存字符串 char b

2021-12-03 16:55:52 861

原创 JVM-案例分析-高性能硬件上的程序部署策略

案例分析 高性能硬件上的程序部署策略 场景 一个15万PV/天左右的在线文档类型网站更换硬件系统,通过升级硬件提升系统程序性能 更换后: 新的硬件系统为4核,16GB物理内存,64位CentOS5.4操作系统 Resin Web服务器 64位JDK 1.5 –Xmx:12GB –Xms:12GB 更换前: 32位操作系统 1.5GB的堆 用户只感觉到使用网站比较慢,但不会明显停顿 现象 使用一段时间后,网站经常出现长时间失去响应的情况 原因 主要原因:由于GC停顿导致 硬件方面:虚拟机运行在Server模式

2021-08-10 14:05:55 231

原创 SpringMVC源码方法执行流程

SpringMVC源码方法执行流程DispatcherServlet 类图方法调用流程 DispatcherServlet 类图 方法调用流程 servlet接口定义的方法 当用户请求到时,servlet容器调用servlet的service方法 看DispatchServlet类图,GenericServlet(抽象类)实现了Servlet接口,service()方法无方法体。HttpServlet(抽象类)继承了GenericServlet类实现了service()方法,HttpServ

2021-02-23 16:35:42 203 1

原创 策略模式+工厂模式

策略模式+工厂模式策略模式场景CashSuperCashNormalCashRebateCashReturnCashContextCashFactoryApp测试类 策略模式 策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 场景 商场不同时间段活动。正常,打折,满减,等等 CashSuper package com.healer.strategy; import com.healer.domain.Goods; impor

2020-11-02 11:38:43 1373 1

原创 MySQL

MySQL 索引本质 索引 索引是帮助MySQL高效获取数据的排好序的数据结构。 索引数据结构 二叉树 红黑树 Hash表 B-Tree 二叉树 举例 Select * from t where col2=89 普通查询: 遍历左边内容(存在磁盘)查询6次 加索引(放入数据结构): 即右边二叉树(B+树) 节点内容:key(记录地址:Ox07,Ox56)+value(34,89) 二叉树特点(左子树大于右子树的值) 查询次数2 反例 select * from t where col1=6 索引形成的

2020-09-02 17:06:36 212

原创 读书笔记(Java并发编程的艺术)四

第四章(Java并发编程的基础) 线程间通信 volatile和synchronized关键字 volatile可以修饰成员变量,告知程序任何对该变量的访问都要去共享内存访问,而对他修改必须同步刷新回共享内存,他能保证所有线程对变量访问的可见性。 synchronized:同步方法,同步代码块,能保证代码的可见性和排他性。 对象、对象的监视器、同步队列和执行线程之间的关系 任意线程对Object(Object由synchronized保护)的访问,首先要获得Object的监视器。如果获取失败,线程进入同步

2020-08-05 14:11:33 186

原创 读书笔记(Java并发编程的艺术)三

读书笔记(Java开发编程的艺术)三 第二章(Java并发机制的底层实现原理) 原子操作的实现原理 原子(本意):不能进一步分割的最小粒子; 原子操作:不可被中断的一个操作一系列操作; 术语定义 处理器实现原子操作 32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。 处理器会自动保证基本内存操作的原子性。处理器保证从系统内存中读取或者写入一个字节是原子的,意思当处理器读写时,其他处理器不能访问这个字节的内存地址。 使用总线锁保证原子性 第一机制是通过总线锁保证原子性。如

2020-07-07 17:44:33 229 1

原创 读书笔记(Java并发编程的艺术)二

第二章(Java并发机制的底层实现原理) synchronized的实现原理与应用 1.重量级锁synchronized。 2.JavaSE1.6为了减少得到锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。 3.synchronized实现同步的基础:Java中每一个对象都可以作为锁。具体表现以下三种形式。 同步方法:锁是当前实例对象。 静态同步方法:锁是当前类的Class对象。 同步代码块:锁是synchronized括号里的配置对象。 4.当一个线程试图访问同步代码块时,他

2020-06-04 15:52:59 165

原创 读书笔记(Java并发编程的艺术) 一

第一章(并发编程的挑战) 上下文切换 单核处理器通过给每个线程分配CPU时间片来实现多线程执行代码,时间片是CPU分配给每个线程的时间,因为时间片时间很短,CPU不停的切换线程执行,让我们感觉到多个线程同时执行。 CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。 但是在切换前会保存上一个任务状态(保存在PCB中,即进程控制块),下次切换任务是再从PCB中加载这个任务状态。任务从保存到再加载的过程就是一次上下文切换。 多线程一定快吗? 不一定,多线程有创建和上下文切换的开销

2020-05-22 18:13:20 174

原创 Spring-framework spring-web与spring-webmvc

Spring-framework spring-web与spring-webmvc spring-web:对远程调用和远程服务的支持; spring-webmvc:对MVC支持,包括restful协议; javax.servlet.ServletContainerInitializer文件 作用:指定ServletContainerInitializer实现类 org.springframework.web.SpringServletContainerInitializer SpringServletC

2020-05-14 16:29:47 996

原创 浅谈springMVC与servlet

通过注解的方式快速搭建web应用(不需要web.xml) ServletContainerInitializer初始化web容器 1.在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filters等,servlet规范(JSR356)中通过ServletContainerInitializer实现此功能。 2. 每个框架要使用ServletContainerI...

2020-05-08 01:19:30 430

原创 HashMap---putVal()方法源码解析

HashMap部分源码解析putVal()---JDK 1.8 putVal()—JDK 1.8 /** * Implements Map.put and related methods * * @param hash hash for key * @param key the key * @param value the value to put * @param onlyIfAbsent if...

2020-04-29 18:11:15 262

原创 Java内存区域-堆,程序计数器

Jvm运行时数据区域-堆,程序计数器 Java堆 堆:Java堆是内存中最大的的一块。Java堆是所有线程共享的的一块内存区域,此内存唯一的目的存放对象实例。几乎所有对象的实例都在这里分配内存。这一点在Java虚拟机规范中描述:所有的对象实例以及数据都要在堆上分配,但是随着JIT编译器的发展与逃逸分析技术逐渐成熟,栈上分配,标量替换优化技术将会导致一下微妙的变化发生,所有的对象都分配在堆上也渐渐的...

2020-01-16 15:12:48 275 1

原创 Java虚拟机

虚拟机第一站——Java内存区域java虚拟机运行时数据区 java虚拟机运行时数据区 方法区:各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。根据Java虚拟机规范的规定,当方法区无法满足内存分配的要求时,将抛出OutOfMemoryError异常。 虚拟机栈:线程私有,它的生命周期和线程相同。虚拟机栈描述Java方法执行的内存模型:每个...

2020-01-15 17:26:25 149

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除