- 博客(23)
- 收藏
- 关注
原创 Redis01 - 基础
Memcache和Redis的区别Memcache: 代码层次类似Hash支持简单数据类型不支持数据持久化存储不支持主从不支持分片Redis数据类型丰富支持数据磁盘持久化存储支持主从支持分片为什么Redis能这么快100000+QPS(QPS即query per second,每秒内查询次数)完全基于内存,绝大部分请求是存粹的内存操作,执行效率高数据结构简单,对数据操也简单采用单线程,单线程也能处理高并发请求,想多核也可以启动多实例使用多路I/O复用模型,非阻塞IO
2021-03-01 00:27:14
129
原创 Spring03 - 事务
ACID 原子性( Atomic ): 事务包含的全部操作要么全部执行,要不全部不执行 一致性( Consistency ): 事务应确保数据库的状态,从一个一致的状态,转变为另一个一致的状态例:转账 A+B = 2 不管怎么操作,结构必须是2 隔离性( Isolation ): 多个事务并发执行,一个事务的执行,不应该影响其他的执行&
2021-02-18 23:30:24
119
原创 Spring02 - AOP
关注点分离:不同的问题交给不同的部分去解决面向切面编程AOP通用化功能代码的实现,对应的就是所谓的切面(Aspect)业务功能代码和切面代码分开后,架构将变得高内聚低耦合确保功能的完整性:切面最终需要被合并到业务中(Weave)AOP的三种织入方式编译时织入:需要特殊的Java编译器,如AspectJ类加载时织入:需要特殊的Java编译器,如AspectJ和AspectWerkz运行时织入:Spring采用的方式,通过动态代理的方式,实现简单AOP的主要名词概念Aspect:通
2021-02-18 12:57:03
152
1
原创 Spring01 - IOC
IOC( Inversion of Control):控制反转Spring Core 最核心的部分依赖注入( Dependency Inversion )依赖注入的方式Set注入:Setter接口注入:Interface构造函数:Constructor注解:Annotation优势避免在各处使用new来创建类,并且可以做到统一维护创建实例的时候不需要了解其中的细节应用流程读取Bean配置信息根据Bean注册表实例化Bean将Bean实例放到Spring容器中
2021-02-16 00:11:09
223
原创 学习笔记19 - synchronized
线程安全问题的主要诱因存在共享数据(也称临界资源)存在多条线程共同操作这些共享数据解决问题的根本方法:同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后在对共享数据进行操作互斥锁的特性互斥性:即在同一时间只允一个线程持有某个对象锁,通过这种特性来实现多线程的协调机制,这样在同一时间只有一个线程对需要同步对代码块(复合操作)进行访问。互斥性也称为操作的原子性可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的(即在获得锁时应
2021-02-14 21:05:15
123
2
原创 学习笔记18 - yield 和 interrupt
yield当调用Thread.yield()函数时,会给线程调度器一个当前线程愿意让出CPU使用的暗示,但是线程调度器可能会忽略这个暗示对锁行为没有影响,不会让出锁如何中断线程已经抛弃的方法:1)通过调用stop()方法停止线程,2)通过调用supend()和resume()方法目前使用的方法调用interrupt(),通知线程该中断类如果线程处于阻塞状态,那么线程将立即退出被阻塞状态,并抛出一个InterruptedException异常如果线程处于正常活动状态,那么会将该线程的
2021-02-14 19:08:58
283
原创 学习笔记17 - 锁池,等待池,notify和notifyAll
锁池假设线程A已经拥有了某个对象(不是类)的锁,而其他线程B、C想要调用这个对象的某个synchronized方法(或者块),由于B、C线程在进入对象的synchronized方法(或者块)之前必须先获得该对象锁的拥有权,而恰巧该对象的锁目前正被线程A所占用,此时B、C线程就会被阻塞,进入一个地方等待锁的释放,这个地方便是该对象的锁池等待池假设线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁,同时线程A就进入了该对象的等待池中,进入到等待池中的线程不会去竞争该对象的锁noti
2021-02-14 16:43:10
257
1
原创 学习笔记16 - sleep和wait的区别
基本差别sleep是Thread类的方法,wait是Object类中定义的方法sleep()方法可以在任何地方使用wait()方法只能在synchronized方法或synchronized块中使用主要的本质区别Thread.sleep只会让出CPU,不会导致锁行为的改变Object.wait不仅让出CPU,还会释放已经占有的同步资源锁...
2021-02-14 16:19:21
101
原创 学习笔记15 - 线程的状态
六个状态新建(New)创建后尚未启动的线程状态运行(Runnable)包含Running和Ready无限期等待(Waiting)不会被分配CPU执行时间,需要显式被唤醒例: 没有设置Timeout参数的 Object.wait()方法。 没有设置Timeout参数的Thread.join()方法。 LockSupport.park()
2021-02-14 00:29:03
77
原创 学习笔记14 - 给线程传参和处理线程的返回值
传参class MyThread1 extends Thread{ /** 2.通过变量和方法传递数据 */ @Setter private String name; /** 1.通过构造方法传递数据 */ public MyThread1(String name) { this.name = name; } /** 3.使用回调函数 */ public void process(String name){
2021-02-12 23:24:01
138
原创 学习笔记13 - Thread和Runnable 是什么关系
示例/** Runnable接口 */public class MyRunnable implements Runnable{ private String name; public MyRunnable(String name) { this.name = name; } @Override public void run() { System.out.println(name); }}/** Thread类 */
2021-02-09 22:49:18
88
原创 学习笔记12 - start和run的区别
示例: private static void attack(){ System.out.println("当前线程为: " + Thread.currentThread().getName());}public static void main(String[] args) { Thread t = new Thread(){ @Override public void run(){ attack(
2021-02-09 22:28:42
159
原创 学习笔记11- 进程和线程的区别
进程进程独占内存空间,保存各自运行状态,相互间不干扰且可以互相切换,为并发处理任务提供了可能。线程共享进程的内存资源,相互间切换更快速,支持更细粒度的任务控制,使进程内的子任务得以并发执行。进程是资源分配的最小单位,线程是CPU调度的最小单位 所有与进程相关向关的资源,都被记录在PCB中 进程是抢占处理机的调度单位;线程属于某个进程,共享其资源 线
2021-02-08 23:07:23
126
原创 学习笔记10 - java GC(垃圾回收)垃圾收集器
stop-the-word JVM由于要执行GC而停止了应用程序的执行 任何一种GC算法中都会发生 多是GC优化通过减少 stop-the-word 发生的时间来提升程序性能safepoint 分析过程中对象引用关系不会发生变换的点 产生safepoint的地方:方法调用,循环跳转,异常跳转等 安全点数量得适中JVM运行模式
2020-08-17 17:21:12
136
原创 学习笔记09 - java GC(垃圾回收)算法
标记 - 清除算法(Mack and Sweep)标记:从根集合进行扫描,对存活的对象进行标记清除:对堆内存从头到尾进行线性遍历,回收不可达对象内存缺点:会导致内存碎片化如图:如果新元素需要三个连续的内存空间,没有则会一直触发GC,直到复制算法(Copying)1)分为对象面和空闲面2)对像在对象上创建3)存活的对象被从对象面复制到空闲面4)将对象面所有对象内存清楚商用的虚拟机基本用这个算法回收粘性带不用考虑随眠期概况,只需要移动堆顶指针按顺序分配,需要是一次性清除。优
2020-07-24 15:13:53
128
原创 学习笔记08 - java GC(垃圾回收)标记算法
对象被判定为垃圾的标准: 没有被其他对象引用判定对象是否为垃圾的算法: 引用计数算法 可达性分析算法引用计数算法判断对象的的引用数量:通过判断对象的引用数量来决定对象是否可以被回收每个对象实例都有一个引用计数器,被引用+1,完成引用-1任何引用计数为0的对象实例可以被当作垃圾收集几乎不打断程序执行,对实时性要求高的程序有利优点:执行效
2020-07-17 23:30:53
186
原创 学习笔记07 - java内存模型
内存简介:JVM架构图Runtime Data AreaStack:堆栈Heap:堆Method Area:方法区PC Register:程序计数器Native Method Stack:本地方法栈JDK8 - JVM 内存模型:线程私有:程序计数器(字节码指令 no OOM)虚拟机栈(java方法 SOF& OOM)本地方法栈(native方法 SOF & OOM)线程共享:MetaSpace(元空间)(类加载信息 OOM)堆(数组和对象 OOM)
2020-07-17 00:19:33
132
原创 学习笔记06 - java类的加载方式
隐式加载:new显示加载:loadClass,ForName等,需要调用 .newInstance() 获取实例,不支持传入函数,需要使用反射机制类的装载过程 加载:通过classLoader加载class文件字节码,生成class对象。 连接: 检查:检查加载的class的正确性和安全性。 准备:为变量分配
2020-07-10 23:54:50
118
原创 学习笔记05 - java ClassLoader双亲委派机制
自底向上检查是否已装载,自顶向下尝试加载类例(加载A.class) 首先先检查 Custom(自定义) ClassLoader,有则返回,否则继续向上寻找,App ClassLoader --> Ext ClassLoader --> BootStrap ClassLoader 在哪一个加载器找到,就在那个加载器返回。 若都没有装载,则从BootStrap ClassLoader 开始到相应目录下寻找。
2020-07-10 23:04:46
210
原创 学习笔记04 - java ClassLoader
类从编译到执行的过程编译器将 .java 源文件编译为 .class 字节码文件ClassLoader将字节码转换为JVM中的 class对象JVM利用class对象实例化对象ClassLoader在java中有着非常重要的作用,它主要工作在class装载的加载阶段,其主要作用是从外部系统获得class二进制数据流,它是java的核心组件所有的class都是由ClassLoader进行加载的,ClassLoader负责通过将class文件里的二进制数据流装进系统,然后交给java虚拟机进行连接,
2020-07-09 22:53:32
120
原创 学习笔记03 - java反射
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用他的任意方法和属性,这种动态获取信息以及动态调用对象方法的功能称为java的反射机制。反射的作用:在运行时判断任意一个对象所属的类在运行时获取类的对象在运行时访问java对象的属性,方法,构造函数等java.lang.reflect类库里面的主要类:Field:表示类中的变量Method:表示类中的方法Constructor:表示构造方法每一个类都有一个与之相对应的class对
2020-07-07 23:19:37
97
原创 学习笔记02 - JVM如何加载.Class文件
jvm是内存中的虚拟机,存储在内存Java虚拟机:Class Loader : 根据特定格式,加载Class文件到内存Runtime Data Area:JVM内存空间结构模型Execution Engine:对命令进行解析Native Interface(本地接口):融合不同开发语言的原生库给Java用步骤首先.Class文件通过Class Loader 加载内存,在由给Execution Engine解析class文件里对字节码交给操作系统去执行。Native Interfac.
2020-07-07 00:08:20
136
原创 学习笔记01 - 对Java对理解
理解:1.平台无关心:只需要编译一次2.GC(垃圾回收机制) 3.泛形,反射,lambd表达式4.面向对象:封装,继承,多态5.异常处理6.类库平台无关性javap 进行编译java源码,将源码编译成字节码并保存到 .class文件中javac 目录javap java自带的javac编译,生成字节码jvm解析,转换为特定平台的指令jvm解析,转换为特定平台的指令jvm解析,转换为特定平台的指令java文件.class文件JVM For LinuxJVM For WinJVM Fo
2020-07-06 22:36:39
100
空空如也
win10如何安装:虚拟机平台
2022-11-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人