自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

好记性不如烂笔头

脑子不好使,但手还能用啊

  • 博客(139)
  • 资源 (1)
  • 收藏
  • 关注

转载 Spring-AOP(Aspect Oriented Programming)

AOP(Aspect Oriented Programming):面向切面编程Spring AOP实现方式:JDK动态代理 CGLIB动态代理注:因为Spring AOP 同时支持 CGLIB、ASPECTJ、JDK动态代理,当你的真实对象有实现接口时,Spring AOP会默认采用JDK动态代理,否则采用cglib代理。基本概念:通知(Adivce) 切点(Pointcut...

2019-02-26 09:27:42 243

原创 SpringMVC-工作原理

一个完整请求的流转过程:用户:发送请求 前端控制器(DispatcherServlet):接收用户请求,并通过处理器映射器查找对应的处理器 处理器映射器(HandlerMapping):查找对应的处理器,返回给前端控制器 处理器适配器(HandlerAdapter ):根据前端控制器提供的处理器对象来调用处理器 处理器(Handler):即Controller,执行具体业务,并返回模...

2019-02-25 18:42:17 195

原创 Spring-bean的生命周期

bean的作用域:singleton:默认值,每次从IOC容器获取bean,都返回一个唯一的bean prototype:每次从IOC容器获取bean,都返回一个新的bean request:每次http请求都会获取一个新的bean,该bean在该request内有效 session:每次http请求都会获取一个新的bean,该bean在该session内有效 globalSessio...

2019-02-25 18:39:28 267

原创 Spring-注解-@Autowired原理

@Autowired注解处理器(AutowiredAnnotationBeanPostProcessor)// 在启动spring IoC时,容器会自动装载AutowiredAnnotationBeanPostProcessor后置处理器public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBe...

2019-02-25 18:32:35 184

原创 java-IO-多路复用机制

文件描述符(file descriptor)Linux中,每打开一个文件都有一个小的整数与之对应,就是文件描述符! 内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。 文件描述符是linux里面的叫法,windows里面有类似用来描述文件的叫...

2019-02-25 15:39:14 4484 1

原创 java-IO-文件通道(FileChannel)

FileChannel面向文件的通道 可以从FileInputStream、FileOutputStream和RandomAccessFile中通过getChannel()方法获得FileChannel实现文件复制// 1、当文件大小小于2GB时,这种方式没有什么大问题,但是如果文件小大超过2GB,这种方式就会数据丢失// 测试文件大小:8832KBpublic static voi...

2019-02-25 11:57:13 1256

原创 java-IO-字节数组输入输出流(ByteArrayInputStream、ByteArrayOutputStream)

字节数组输入输出流ByteArrayInputStream:将字节数组转成字节输入流 ByteArrayOutputStream:从字节数组输出流可以获取字节数组将文件转为字节数组、字节数组转为文件// 测试文件大小:2487KB// 文件转为字节数组public static byte[] ioOption() throws IOException { // 缓冲字节输入...

2019-02-23 15:56:08 3014

原创 java-IO-(BIO、NIO、AIO)

基本概念同步:多个任务之间必须有序的执行 异步:多个任务之间可以独立的执行,互不干扰 阻塞:当条件不满足时,程序会卡在那里,直至条件满足为止 非阻塞:当条件不满足时,程序不会卡在那里,同时会收到一个标志信息告知当前条件不满足 同步和异步着重点在于多个任务执行过程中,后发起的任务是否必须等先发起的任务完成之后再进行 阻塞和非阻塞重点在于请求的方法是否立即返回(或者说是否在条件不满足时被阻...

2019-02-22 16:06:17 212

原创 java-IO-文件(File)读写操作

 常用IO流体系图InputStream(输入流):用于读取数据 OutputStream(输出流):用于输出数据字节流:一次读取一个字节// 测试文件大小:2087KB// 普通字节流,一次读取一个字节public static void ioOption() throws IOException { // 获取文件 字节输入流,如果文件不存在抛出异常 Fil...

2019-02-22 16:03:55 600

转载 java-(Happens-Before)原则

Happens-Before原则程序顺序规则 锁定规则 volatile变量规则 线程启动规则 线程结束规则 中断规则 终结器规则 传递性规则 详细参考:从Java多线程可见性谈Happens-Before原则    https://segmentfault.com/a/1190000011458941...

2019-02-22 15:38:20 2146

原创 java-设计模式-代理模式

静态代理 动态代理转到:java-动态代理、静态代理    https://blog.csdn.net/m0_37524661/article/details/86732331

2019-02-22 15:20:44 94

原创 java-设计模式-原型模式(克隆模式)

为什么使用原型模式1、假如我有一个对象,如下:public static void main(String[] args) { // 创建对象 Condition condition1 = new Condition.Builder() .setStr1("aa") .setStr2("bb") .se...

2019-02-22 15:01:52 178

原创 java-设计模式-建造者模式

链式调用(手动实现方式)直接上代码//public class Condition { private String str1; private String str2; private String str3; private String str4; private String str5; private String str6; ...

2019-02-22 12:42:34 102

原创 java-设计模式-单例模式

饿汉式单例模式提前创建一个实例public class SingletonClass1 { // 初始化阶段就创建一个实例 private static final SingletonClass1 singletonClass1 = new SingletonClass1(); // 通过静态方法获取实例 public static SingletonClass1 getIns...

2019-02-22 11:07:09 107

原创 java-多线程-CyclicBarrier(循环栅栏)

CyclicBarrierCyclicBarrier barrier = new CyclicBarrier(8);CyclicBarrier 可以理解为我们田径比赛的起跑线,它定义了8个跑道 要求必须8个跑道都有人了才能跑 假如来了7人,那么7人都得在起跑线这里等着,等到凑够8人才能你跑 假如来了9人,那么从这9人中选出8人去跑,留下一人继续等到再凑够8人再一起跑 这就是Cycl...

2019-02-22 08:36:50 220

原创 java-多线程-CountDownLatch(倒计时锁)

CountDownLatch用于控制线程的执行顺序 await():阻塞当前线程,并监视计数器的值,如果计数器值不为0则一直阻塞,如果计数器值变为0则自动让行,线程继续执行 countDown():计数器值减1我们用一个简单的例子看一下场景:假设有2个小弟和3个大佬都去洗澡,小弟不能和大佬一起洗,必须等大佬都洗完了小弟才可以去洗澡// 洗澡线程public class Thread...

2019-02-21 19:03:08 506

原创 java-多线程-Semaphore(信号量)

 Semaphore(信号量) [ˈseməfɔ:(r)]:塞么for 用于控制对某个公共资源的线程访问量 acquire():获取许可,这个一个阻塞方法,假如没有获取到许可,线程会一直阻塞在这里直到获取到许可为止 release():释放占用的资源 我们用一个简单的例子看一下场景:有5个人要上厕所,但是只有2个坑位// 我们定义一个上厕所的线程// 只有2个坑位,但...

2019-02-21 15:55:06 172

原创 MySQL-locate()函数

 判断字符串(string)中是否包含另一个字符串(subStr)locate(subStr,string) :函数返回subStr在string中出现的位置// 如果字符串 string 包含 subStrlocate(subStr,string) > 0// 如果字符串 string 不包含 subStrlocate(subStr,string) = 0使用方式S...

2019-02-21 14:26:43 96903

原创 算法题-数组类

1、一个数组int[],一个数target,求数组中两个满足元素和等于target的一对索引// 给定数组int[] arr = new int[]{2,3,5,7,9,11,14,15,18};// 目标值int target = 9;// 期望结果[0,3]2、还是上面的题目,要求所有满足条件的索引集// 给定数组int[] arr = new int[]{2,...

2019-02-21 09:50:02 199

原创 网站性能优化

减少http请求合并CSS、JavaScript:将浏览器一次访问需要的JavaScript,CSS合并成一个文件,这样浏览器只需要一次请求 合并图片:多张图片合并成一张,如果每张图片都有不同的超链接,可通过CSS偏移响应鼠标点击操作,构造不同的URL。压缩js、css减少文件体积,去除不必要的空白符、格式符、注释(即对代码进行格式化)优化js、css文件位置将css放到页面最上面(尽...

2019-02-21 08:43:20 96

转载 TCP-三次握手,四次挥手

什么是三次握手、四次挥手? 为什么要进行三次握手、四次挥手?参考:程序员面试被问到“三次握手,四次挥手”怎么办?

2019-02-21 08:34:56 246

原创 java-多线程-线程池

ThreadPoolExecutor 类//java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类//ThreadPoolExecutor继承了AbstractExecutorService //AbstractExecutorService是一个抽象类,它实现了ExecutorService接口//ExecutorService又...

2019-02-20 11:53:54 117

原创 java-方法equals()和hashCode()

为什么要重写equals()和hashCode()方法public class Student { private String name; private Integer age; public Student(String name, Integer age) { this.name = name; this.age = age;...

2019-02-20 09:53:21 124

原创 java-多线程-ThreadLocal

Thread 类首先我们要知道,Thread 类内部持有一个ThreadLocal 的静态内部类ThreadLocalMap对象的引用,默认为null/* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal class. */ThreadLocal.Thread...

2019-02-20 00:37:52 113

原创 java-并发容器-CopyOnWriteArrayList

CopyOnWriteArrayList 数据结构图基于数组实现 读写分离的并发处理策略 读数据时不加锁,所有线程并发读 当有线程写数据时,先获取锁,然后复制一个新数组写入数据,然后切换数组引用指向新数组,然后释放锁CopyOnWriteArrayList 存储数据实现原理获取锁 复制一个新数组,写入元素 将数组的对象引用切换到新数组 释放锁// 新增元素public ...

2019-02-19 22:27:30 161

原创 java-并发容器-ConcurrentHashMap

ConcurrentHashMap 结构图(java7)采用分段锁机制:Segment ConcurrentHashMap 实际上是一个 Segment 数组,Segment 继承了 ReentrantLock,每次操作都会对指定的Segment 进行加锁,这样就保证每个 Segment 是线程安全的,也就实现了全局的线程安全。 Segment 是一种可重入锁(继承ReentrantLo...

2019-02-18 16:14:01 122

原创 java-静态导入

假如我们有一个工具类,里面有很多静态方法,我们要使用某个方法时应该怎么用呢? 我们直接导入这个类,如下:// 直接导入类import com.hbean.common.util.HUtil;// 然后我们要使用哪个静态方法就直接通过类名调用HUtil.md5Encrypt("xxx")我们通过静态方式导入一个类// 1、使用静态方式直接导入类的某个静态方法对象import ...

2019-02-18 11:45:19 227

转载 java-foreach实现原理

对于Array,就是转化为对数组中的每一个元素的循环引用,用下标遍历来实现 对于Collection,编译器会调用Iterable接口的 iterator方法来做循环遍历

2019-02-18 00:52:32 1689

原创 java-集合-HashMap

HashMap 数据结构图 (基于jdk1.8.0_92)数组:黄色部分 链表:绿色部分 红黑树 :粉色部分HashMap 存储数据流程图、原理利用hash()方法计算key的哈希值 判断数组是否为空或者长度为0,是则调用resize()方法进行扩容 根据哈希值算出在数组中的位置,并判断当前位置是否有数据,若没有则直接插入新数据 若有数据(发生哈希碰撞),利用equals(...

2019-02-18 00:35:47 150

原创 java-集合-LinkedList

LinkedList数据存储是基于双向链表实现的 非线程安全 实现了Deque接口,双向队列,允许在队首、队尾进行入队和出队操作(Deque继承自Queue接口) 实现了Serializable接口,支持序列化,能够通过序列化传输, 实现了Cloneable接口,能被克隆。LinkedList 数据结构LinkedList类每个元素用内部类Node(结点)表示 每个结点除了数据...

2019-02-17 21:09:44 135

转载 消息队列

使用场景:解耦:多个子系统不直接通讯,而是通过MQ 异步: 削峰:将同一时间过来的大量请求放入MQ里面,然后慢慢拉取消化优点:解耦、异步、削峰缺点:如何保证高可用?(MQ系统崩溃了怎么办) 系统复杂度提高(如何保证消息不被重复消费、消息不丢失、消息传递的顺序性) 数据一致性问题常用的MQ:Kafka ActiveMQ RabbitMQ RocketMQ如何保证消...

2019-02-17 00:08:01 159

转载 分布式锁

Redis分布式锁实现方式基于 REDIS 的 SETNX()、EXPIRE() 方法做分布式锁setnx(lockkey, 1) :如果返回 0,则说明占位失败(获取锁失败);如果返回 1,则说明占位成功(获取锁成功) expire() :命令对 lockkey 设置超时时间,为的是避免死锁问题 执行完业务代码后,通过 delete 命令删除 key(即释放锁)注:如果在setnx(...

2019-02-16 23:50:14 103

原创 Mysql-锁机制

MySQL常用存储引擎的锁机制 BDB:支持页级锁和表级锁,默认是页级锁 InnoDB:支持行级锁和表级锁,默认是行级锁 MyISAM &Memory:这两个存储引擎都是采用表级锁按锁粒度划分行锁 表锁 页锁// 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高// 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲...

2019-02-16 23:35:56 119

转载 JVM-调优

客官莫急,菜马上到! 参考: JVM调优经验分享:https://blog.csdn.net/u011683530/article/details/51013219 JVM调优总结:https://www.cnblogs.com/andy-zhou/p/5327288.html

2019-02-16 17:13:12 213

原创 JVM-垃圾回收(GC)

为什么要了解垃圾回收?排查内存溢出 排查内存泄漏 性能调优,排查并发瓶颈如何判断对象是否死亡引用计数法:有地方引用它,计数器就加1;当引用失效,计数器就减1;当计数器为0时的对象可被回收;它很难解决对象之间相互循环引用的问题 可达性分析算法:通过一系列的称为 “GC Roots” 的对象作为起点,向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相...

2019-02-16 16:46:35 160

转载 JVM-架构图

JVM被分为三个主要的子系统类加载器子系统 运行时数据区 执行引擎 参考:https://blog.csdn.net/aijiudu/article/details/72991993

2019-02-16 11:48:59 5633

原创 JVM-内存模型

运行时数据区域程序计数器:线程私有;记录指令执行的位置;这里不会出现OutOfMemoryError 虚拟机栈:线程私有;生命周期和线程一致;存储局部变量表、操作数栈、动态链接、方法出口等信息。(局部变量表:存放了编译期可知的各种基本类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference 类型)和 returnAddre...

2019-02-16 10:42:10 27489 6

原创 JVM-类加载机制

类加载器启动类加载器:非java语言实现,负责将lib目录中的可被虚拟机识别的类库加载到虚拟机内存中(如rt.jar) 扩展类加载器:负责将JAVA_HOME\lib\ext 目录中的可被虚拟机识别的类库加载到虚拟机内存中 应用程序类加载器:可以通过getSystemClassLoader()获取,负责加载用户路径(classpath)上的类库。如果没有自定义类加载器,一般这个就是默认的...

2019-02-15 17:47:48 177

原创 java-类的初始化顺序

 类的初始化过程与类的实例化过程类的初始化与类的实例化是两个完全不同的概念 类的初始化是指类加载过程中的初始化阶段对类变量按照程序猿的意图进行赋值的过程; 类的实例化是指在类完全加载到内存中后创建对象的过程。 要想创建一个类的实例,必须先将该类加载到内存并进行初始化,也就是说,类初始化操作是在类实例化操作之前进行的,但并不意味着:只有类初始化操作结束后才能进行类实例化操作public ...

2019-02-15 15:44:55 182

转载 java-基本数据类型

8 种基本数据类型、占内存的容量大小、表示的范围、字节数(1字节(Byte)=8位(Bit) )自动类型转换自动类型转换是指:数字表示范围小的数据类型可以自动转换成范围大的数据类型。  自动转换关系如下:注:实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。 参考:https://www.cnblogs.com/javastack/p/9111750.htm...

2019-02-15 15:34:35 133

lombok插件

里面包含3个版本插件,0.19-2017.3;0.19-2018.1;0.19-2018.EAP,我用的IDEA版本是2017.3.4的,插件的本地安装方法文档有写

2018-08-15

空空如也

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

TA关注的人

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