自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (4)
  • 收藏
  • 关注

原创 Spring 循环依赖解决思路完整源码分析

Spring 循环依赖问题解决思路循环依赖问题,直接代码问题如下@Service("clientServices")public class ClientServices { @Autowired private UserServices userServices; public ClientServices() { System.out.println("ClientServices Constructed"); }}@Service("userServices")public

2020-09-21 00:11:43 234

原创 MySQL:千万级数据下的优化过程探索

2020-07-23 15:02:55 142

原创 MySQL数据库表的完整性约束条件

完整性约束关键字含义DEAFAULT设置字段值为默认值UNIQUE KEY(UK)约束字段的值NOT NULL约束字段值不为空NOT NULL约束字段值不为空

2020-07-19 00:32:59 621

原创 MySQL数据库MyIASM引擎分析

MyIASM引擎MyIASM 不提供数据库事务支持,也不支持行级锁和外键。因此当执行Insert和Update更新语句时,即执行写操作时,需要锁定这个表,导致写的效率会降低。但MyIASM引擎保存了表的行数,于是当进行Select count(*) from table操作时,可以直接读取已保存的值而不需要进行扫描全表。采用的索引模式为非聚集索引 (索引和实际数据是分开的。) 。优点: 1、保存了表的行数,无需扫描全表即可获取;2、支持全文索引;3、查询速度快。适用场景: 1、不引入第三方框架且使用

2020-07-18 15:10:18 121

原创 MySQL数据库InnoDB引擎分析

InnoDB引擎InnoDB引擎提供了数据库ACID事务的支持, 并且还提供了行级锁和外键的约束。它设计的目标主要是大数据容量的数据库系统。MySQL运行时,InnoDB引擎会在内存中建立缓冲池,用于缓冲数据和索引。 但是,该引擎是不支持中文全文检索(先建立索引,再对索引进行搜索的过程就叫全文(Full-text Search))。同时,该引擎启动也比较慢,并且不会保存表的行数。当进行select * from table指令时,需扫描全表。优点: 1、支持数据库事务(ACID)以及故障恢复;2、行级

2020-07-18 01:47:15 77

原创 疫情严峻情况下:大学生合理化“宅家”

大学生合理化“宅家”姿势[一】

2020-02-16 14:57:04 619

原创 Spring 声明式事务如何编码

配置Spring的事务管理1、基于AspectJ的声明式事务<!-- 引入aop和tx命名空间 --><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <p...

2020-02-12 21:19:49 148

原创 Spring 事务的理解

对Spring 事务的理解什么是事务?事务其实就是一件事,要做就做完,中途出问题了就要恢复成原状态(等于没有做)。事务的4大特性原子性:事务必须是一个不可分割的整体。一致性:执行完数据库操作后,数据不会被破坏。例:如果从A账户转账到B账户,不可能因为A账户扣了钱,而B账户没有价钱。隔离性:对同一条数据的操作,不同事务之间应该隔离(提交之前,数据变化仅仅在事务内部,与外部隔离)。事务隔...

2020-02-12 21:02:03 175

原创 Spring AOP 的理解

AOP相关术语通知(Advice)就是你想要的功能,也就是上面说的 安全,事物,日志等。你给先定义好把,然后在想用的地方用一下。连接点(JoinPoint)这个更好解释了,就是spring允许你使用通知的地方,那可真就多了,基本每个方法的前,后(两者都有也行),或抛出异常时都可以是连接点,spring只支持方法连接点.其他如aspectJ还可以让你在构造器或属性注入时都行,不过那不是咱关...

2020-02-12 16:53:35 69

原创 Spring IOC 如何实现

Spring IOC 如何实现Spring中的org.springframework.beans和org.springframework.context构成了IoC容器的基础。BeanFactory 接口提供了一个先进的配置机制 ,使得任何类型的对象的配置称为可能。ApplicationContext 接口对 BeanFactory(是一个子接口)进行了扩展,在 BeanFacto...

2020-02-10 22:00:52 89

原创 Spring框架 IoC和DI的理解

Spring框架 IoC和DI的理解IoC(控制反转)控制反转:将创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权利转移到第三方(IoC容器)。比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。DI...

2020-02-10 21:54:44 191

原创 Spring Bean 的生命周期

Spring Bean 的生命周期Spring Bean 的生命周期:在一个bean实例被初始化时 ,需要执行一系列的初始化操作以达到可用的状态。同样,当一个bean不再被调用时, 需要进行相关的析构操作。Spring Bean Factory 负责管理在 Spring 容器中被创建的 bean 的生命周期。Bean 的生命周期由2组回调(Call Back)方法组成。1、初始化之后...

2020-02-10 20:55:19 110

原创 BeanFactory 和 ApplicationContext 的区别

BeanFactory 和 ApplicationContext 的区别BeanFactory 可以理解为含有bean集合的工厂类,BeanFacotry包含了种bean的定义,以便在收到客户端的请求时将对应的bean实例化。BeanFactory 还能在实例化对象的时候,生成协作类之间的关系。此举将 bean 自身与 bean 客户端的配置中解放出来。BeanFactory 还包含了 be...

2020-02-10 19:24:05 167

原创 乐观锁的业务场景及实现方式

乐观锁的业务场景及实现方式每次获取数据的时候,都不担心数据被修改,所以每次获取的数据的实话都不会进行加锁,但是在更新数据的时候需要判断该数据是否被别人修改过。如果数据被其他线程修改,则不进行数据更新;如果数据没有被其他线程修改,则进行数据更新。由于数据没有进行加锁,期间该数据可以被其他线程进行读写操作。比较适合读取比较频繁的场景。如果出现大量的写入操作,数据发生重复的可能性就会增大。为了保证...

2020-02-10 17:22:35 3079

原创 ABA问题

ABA问题CAS 算法实现一个重要前提需要取出内存中某时刻的数据,而在下时刻比较并替换,那么在这个时间差类会导致数据的变化。比如说一个线程 one 从内存位置 V 中取出 A,这时候另一个线程 two 也从内存中取出 A,并且 two 进行了一些操作变成了 B,然后 two 又将 V 位置的数据变成 A,这时候线程 one 进行 CAS 操作发现内存中仍然是 A,然后 one 操作成功。尽管线...

2020-02-10 17:19:55 288

原创 CAS 乐观锁

CAS 乐观锁CAS是项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。CAS操作含3个操作数——内存位置(V)、预期旧值(A)和新值(B)。如果内存位置的值和预期旧值想匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。无论哪种情况,它都会在CAS指...

2020-02-10 14:43:40 73

原创 synchronized 和 lock 的区别

synchronized 和 lock 的区别synchronized 和 lock 的用法区别synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定的代码块上,括号中表示需要锁的对象。lock(显式锁):需要显示的指定起始位置和终止位置。一般使用ReentrantLock类作为锁,多个线程中必须使用一个ReentrantL...

2020-02-10 14:28:04 126 1

原创 synchronized 实现原理

synchronized 实现原理synchronized的三种应用方式修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁。修改静态方法,作用于当前类,进入同步代码前要获得当前类的锁。修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码前要获得给定对象。synchronized的字节码指令synchronized同步块使用了monitorenter和monitor...

2020-02-09 23:06:50 88

原创 volatile实现原理

volatile实现原理在JVM底层volatile使用“内存屏障”来实现缓存一致性协议(MESI协议)它确保每个缓存使用的共享变量是一致的。其核心思想:当某个CPU在写数据时,如果发现操作的变量是共享变量,则会通知其他CPU告知该变量的缓存行是无效的,因此其他CPU在读取该变量时,发现其无效时则会从主存中读取加载数据...

2020-02-09 13:14:31 73

原创 线程安全概述

线程安全概述线程安全是多线程领域的问题。线程安全可以理解为一个方法或实例在多线程环境中使用不会出现问题。线程安全的实现方式使用synchronized关键字使用java.util.concurrent.atomic包中的原子类,例如AtomicInteger使用java.util.concurrent.locks包中的锁使用线程安全的集合ConcurrentHashMap使用vol...

2020-02-09 12:10:44 87

原创 线程的生命周期概述

线程的生命周期概述新建状态(New):当线程对象被创建后,即为新建状态。如:Thread t = new MyThread();就绪状态(Runnable):当调用线程对象的start()方法(t.start()),线程进入就绪状态。线程进入就绪状态,只是说明了线程已经做好准备了,随时等待CPU进行调度执行,即线程执行了start()方法并不一定开始执行。运行状态(Running):当CP...

2020-02-08 18:52:53 123

原创 线程池的方式与使用场景

线程池的方式与使用场景1、newFixedThreadPool:创建固定大小的线程池。线程池的大小一旦达到最大值就会保持不变,如果某个线程异常结束,线程池会补充一个新线程。2、newCashedThreadPool:创建可缓存的线程池。如果线程池的大小超过了处理任务所需的线程,那么就回收部分空闲的线程(60秒不执行任务的线程)。当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池...

2020-02-07 18:37:30 253

原创 线程池的实现原理

线程池的实现原理1、线程池判断核心线程池是否都在工作,如果不是,则创建一个工作线程来执行任务;如果核心线程池里的线程都在工作,则进入流程2。2、线程池判断工作队列是否已满,如果不是,则新提交的任务存储在这个工作队列;如果是,则进入流程3。3、线程池判断是否全部线程都处于工作状态,如果不是,则创建一个工作线程来执行任务;如果是,则交给饱和策略来处理这个任务...

2020-02-07 16:16:19 85

原创 ThreadLocal原理分析

ThreadLocal 原理分析ThreadLocal 提供了线程本地变量,它可以保证访问到的变量属于当前线程,每个线程都保存有一个变量副本,每个线程的变量都不同。ThreadLocal 相当于提供了一种线程隔离,将变量与线程相绑定。总的来说,ThreadLocal 适用于每个线程需要自己独立的实例且该实例需要在多个方法中被使用,即用于变量在线程间隔离而在方法或类间共享的场景。ThreadL...

2020-02-06 17:06:40 133

原创 CountDownLatch 与 CyclicBarrier 区别

CountDownLatch 与 CyclicBarrier 区别CountDownLatch 的作用是允许 1 或 N 个线程等待其他线程完成执行;而 CyclicBarrier 则是允许 N 个线程相互等待。CountDownLatch 的计数器无法重置;CyclicBarrier 的计数器可以被重置后使用,因此它被称为"可循环使用的栅栏"。...

2020-02-06 00:03:35 82

原创 Exchanger 原理

当一个线程到达 exchange 调用点时,如果它的伙伴线程此前已经调用了此方法,那么它的伙伴会被调度唤醒并与之进行对象交换,然后各自返回。如果它的伙伴还没到达交换点,那么当前线程将会被挂起,直至伙伴线程到达——完成交换正常返回;或者当前线程被中断——抛出中断异常;又或者是等候超时——抛出超时异常。...

2020-02-04 23:44:26 157

原创 Semaphore 原理

Semaphore 原理Semaphore可以看作是一个信号量的集合,线程可以从Semaphore中获取若干个信号量,当 Semaphore对象持有的信号量不足时,尝试从 Semaphore中获取信号的线程将会阻塞,直到其他线程释放持有的信号量释放时,阻塞的线程才会被唤醒,重新尝试获取信号量。...

2020-02-04 19:46:11 95

原创 CountDownLatch 原理

CountDownLatch 原理CountDownLatch 内部维护了一个整数n,n(要大于等于0)在 当前线程 初始化 CountDownLatch 方法指定。当前线程调用CountDownLatch的await()方法阻塞当前进程,等待其他进程调用该,CountDownLatch对象的CountDown()方法,该方法会进行n--操作,直到所有线程执行完成,n等于0,当前线程就恢复执行。...

2020-02-02 20:08:04 72

原创 sleep()、wait()、join()、yield() 区别

sleep()、wait()、join()、yield() 区别sleep()sleep()方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态,该方法既可以让其他同优先级或者高优先级的线程得到执行的机会,也可以让低优先级的线程得到执行机会。但是 sleep() 方法不会释放“锁标志”,也就是说如果有 synchronized 同步块,其他线程仍然不能访问共享...

2020-01-21 23:23:43 149

原创 创建线程的方式及优缺点

创建线程的方式继承Thread类创建线程定义父类Thread的子类,并重写父类方法中的run()方法,该方法的方法体表示了该线程要完成的任务,所以称run()方法为执行体。创建该Thread子类的实例对象。调用该线程对象的start()方法来启动该线程。继承Runnable接口创建线程定义 Runnable 接口的实现类,并重写该接口的 run() 方法,该 run() 方法的方...

2020-01-21 21:38:54 187

原创 ConcurrentHashMap 工作原理及代码实现

ConcurrentHashMap 工作原理及代码实现ConcurrentHashMap 采用了非常精妙的“分段锁”策略。ConcurrentHashMap 的主干是一个segment数组,Segment 继承了 ReentrantLock,所以它就是一种可重入锁(ReentrantLock)。一个 segment 是一个子哈希表,segment 同时维护 HashEntry 数组。并发环...

2020-01-19 23:44:53 133

原创 HashMap 工作原理及代码实现

HashMap 基于 Hashing 原理,通过 put() 和 get() 方法储存和获取对象。当将键值对传递给put()方法时,首先取key的hashCode()方法计算其hashcode值,然后找到bucket位置来存储“值对象”。当获取值对象时,通过键对象的equals()方法来找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞时,对象将会存储在链表...

2020-01-19 23:40:09 134

原创 HashMap 和 CurrentHashMap 区别

HashMap 和 CurrentHashMap 区别HashMap存储的元素为key-value对HashMap底层说白了是散列结构要将key存储到HashMap中,key类型必须实现计算hashcode方法,默认这个方法是根据对象的地址来计算的,接着还必须覆盖对象的 equals() 方法CurrentHashMap对整个桶数组进行了分段,而HashMap则没有CurrentHas...

2020-01-19 23:30:15 3579

原创 HashSet 和 HashMap 区别

HashSet 和 HashMap 区别接口:HashSet实现了Set接口,HashMap实现了Map接口存储内容:HashSet存储对象,HashMap存储键值对位置计算:HashMap 中使用键对象来计算 hashcode 值,HashSet使用成员对象计算其hashcode,两个对象可能有相同的hashcode值,equals() 方法用来判断对象的相等性,如果两个对象不同的话,那...

2020-01-17 17:22:03 1068

原创 HashMap 和 HashTable 的区别

HashMap 和 HashTable 的区别HashMap是非synchronized的,并可以接受null为键值key和值value,而HashTable不行HashMap是非synchronized,而HashTable是同步的,这意味着HashTable是线程安全的,多个线程可以共享一个HashTable,而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5中...

2020-01-17 16:44:20 51

原创 ArrayList 与 Vector 区别

ArrayList 与 Vector 区别同步性:Vector是线程安全的,它是同步的;ArrayList不是线程安全的,意味着它不是同步的。数据增长:当需要增长时,Vector 默认增长为原来一倍 ,而 ArrayList 却是原来的 50% ,这样 ArrayList 就有利于节约内存空间。如果涉及到堆栈,队列等操作,应该考虑用 Vector,如果需要快速随机访问元素,应该使用 Arr...

2020-01-17 14:17:18 101

原创 ArrayList和LinkedList区别

ArrayList和LinkedList区别ArrayList是基于索引(index)的数据结构,直接使用索引进行查找和读取数据,时间复杂度是O(1),但是要删除元素的开销却很大,数组内部需要重新组排。LinkedList 在插入和删除方面效率更高,因为在插入和删除操作中LinkedList不需要像ArrayList重新组排,在元素装满时候也不需要将当前数组重新装入另外一个新的数组中,而且A...

2020-01-17 13:57:34 114

原创 List 和 Map的区别

List 和 Map的区别List:元素有放入顺序,位置固定,元素可重复实现类:LinkedList、ArrayList、VectorLlinkedList由链表实现,内在数据元素的存储位置在内存中散乱的分布,每一个结点中除了包含内容以外,还存储了下一个结点的位置,故而增加、删除快,查找慢(从头到尾遍历)Map:元素无放入顺序,位置按键值对存储,不可重复(键的唯一性)实现类:L...

2020-01-17 12:23:24 322

原创 equals 和 ==的区别

equals 和 ==的区别== :对于基本数据类型的变量,比较其存储的值;对于引用类型的变量,比较其所指向对象的地址equals :equals方法不能作用于基本数据类型的比较。如果一个继承了Object的类没有重写equals方法,使用equals比较的是该类对象所指向的地址;如果重写了equals方法,则比较的是其所指向对象存储的内容(值)...

2020-01-17 12:12:06 45

原创 List和Set区别

List和Set区别List和Set都继承collection接口List:有放入顺序,元素可重复Set:无放入顺序,元素不可重复,位置由元素的hashcode来决定,位置固定。List实现类:LinkedList、ArrayList、Vector,Set实现类:HashSet(底层由HashMap实现)、LinkedHashSet...

2020-01-16 00:10:04 66

基于PCA算法的人脸识别

该系统是基于OpenCV3.4+VS2015来实现在视频流中检测出人脸,并对人脸进行识别(已经存在的人脸库),从而得出身份。 利用CascadeClassifier类来进行人脸检测,利用特征脸识别EigenFaceRecognizer来进行人脸识别分类器的训练,特征脸识别采用了PCA算法,每一幅图中采集80维的高维向量。最终得到的识别率在百分80%。

2019-05-11

车牌识别.docx

基于OpenCV+VS C++车牌识别,内附完整源代码和如何搭建环境配置,采用了矩特征,识别率高

2019-05-09

C++ MFC N皇后问题

基于MFC+ VS2015开发的N皇后问题,带有可视化界面,停止/启动按钮,计算耗时设置皇后数

2019-04-19

图书馆管理系统

普通用户操作界面、查阅和导出图书馆藏书数据、管理员查询和删除指定借阅信息、管理员查询管理藏书、借阅图书、归还图书及相应逾期罚款操作和条件查询图书藏书等功能

2019-04-19

空空如也

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

TA关注的人

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