自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (1)
  • 收藏
  • 关注

原创 MongoDB——基础篇(文档操作)

文章目录新增单个插入批量插入查询无条件查询测试条件查询条件对照表逻辑对照表测试查询标签为mongodb且收藏数大于等于50的book正则表达式查询排序分页更新操作符更新单个文档更新多个文档upsertreplacefindAndModify删除新增单个插入insert:若插入的数据主键已经存在,则会抛DuplicateKeyException异常,提示主键重复,不保存当前数据> db.createCollection("emps"){ "ok" : 1 }> db.emps.in

2022-05-26 00:57:28 565

原创 MongoDB——入门篇(安装、启动、关闭、MongoShell)

文章目录安装、启动和关闭环境安装配置环境变量启动服务方式一方式二:利用配置文件启动服务关闭服务方式一方式二Mongo ShellJavaScript支持Mongo Shell常用命令常用命令创建集合安全认证常用权限创建管理员账号用户认证创建应用数据库用户安装、启动和关闭环境CentOS Linux release 7.9.2009安装wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.6.tgztar -z

2022-05-25 23:00:32 1097

原创 MongoDB——入门篇(介绍)

基本介绍MongoDB是一个文档数据库,它以JSON为数据模型,由C++编写,旨在为WEB应用提供可扩展的高性能数据存储方案。MongoDB支持的数据结构非常松散,其数据格式是BSON,即Binary JSON,BSON是类似于JSON的二进制形式的存储格式,同JSON一样可以支持内嵌式的文档对象和数组对象,也因此可以存储较为复杂的数据类型。MongoDB最大的特点是其支持的查询语言非常强大,其语法类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大功能,且还支持对数据建立索引。原则上

2022-05-25 22:59:17 580 1

原创 @Qualifier

介绍@Qualifier限定哪个bean应该被自动注入。当Spring无法判断出哪个bean应该被注入时,@Qualifier注解有助于消除歧义bean的自动注入。使用public interface StockService {}@Componentpublic class StockServiceImpl1 implements StockService {}@Componentpublic class StockServiceImpl2 implements StockServ

2022-05-16 00:47:23 154

原创 @Value

介绍@Value是springframework.bean包下的核心注解之一,它可以将配置文件中的值或是bean注入到变量中。使用读取配置文件中的值@Value("${anno.ip}")String ip;@Value("${anno.pwd:123654}")String pwd;public void test() { System.out.println("ip=" + ip); System.out.println("pwd=" + pwd);}打印结果:ip

2022-05-16 00:46:48 565

原创 @Priority

介绍@Priority与@Order类似,@Order是Spring提供的注解,@Priority是JSR 250标准,都是值越小优先级越高;与@Order不同,@Priority可以控制组件的加载顺序,因此@Priority侧重于单个注入的优先级排序;@Priority优先级比@Order更高,两者共存时优先加载@Priority;@Primary是优先级最高的,如果同时有@Primary、@Order、Ordered的话,@Primary注解的Bean会优先加;。使用public int

2022-05-16 00:46:07 1160

原创 @Primary

介绍当有多个相同类型的bean时,使用@Primary来赋予bean更高的优先级。使用public class StockService {}不使用@Primary@Componentpublic class StockServiceImpl1 implements StockService{}@Componentpublic class StockServiceImpl2 implements StockService {}@Componentpublic class Or

2022-05-16 00:45:18 93

原创 @Order

介绍@Order或者Ordered接口的作用是定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序(区别于@Priority);默认是最低优先级,值越小优先级越高。package org.springframework.core.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.

2022-05-16 00:44:47 139

原创 @Lookup

介绍@Lookup用于单例组件引用prototype组件。单例组件使用@Autowired方式注入prototype组件时,被引入prototype组件也会变成单例的;@Lookup可以保证被引入的组件保持prototype模式。(@Bean方式失效)使用使用方法注入的方法需要满足以下语法要求<public|protected> [abstract] <return-type> theMethodName(no-arguments);public|protected要求

2022-05-16 00:43:59 151

原创 @DependsOn

介绍该注解用于声明当前bean依赖于另外一个bean。所依赖的bean会被容器确保在当前bean实例化之前被实例化。使用标注在带有@Component注解的类上面;使用@DependsOn注解到类层面仅仅在使用@ComponentScan方式时才有效;如果带有@DependsOn注解的类通过XML方式使用,该注解会被忽略;只有通过这种方式会生效;标注在带有@Bean 注解的方法上面;。@Componentpublic class ProducerService {

2022-05-16 00:43:23 180

原创 @Conditional

介绍@Conditional注解是一个条件装配注解,主要用于限制@Bean注解在什么时候才生效;@Conditional可以自定义条件进行装配或者不装配;@Conditional本身还是一个父注解,派生出大量的子注解;可以按需加载;(Conditional注解是Spring4.0就有的,旗下的子注解是SpringBoot1.0有的)可以加载类或者方法上;加载类上的含义所有的方法都按照这个条件装配、加载方法上只有该方法进行条件装配;Conditional注解和所有子注解首先必须依托@Configu

2022-05-16 00:42:45 77

原创 @Autowired

介绍在服务启动的时候,实现bean的依赖注入。使用加在构造函数上当一个对象只有一个构造方法时,Spring在实例化对象时会默认选择该构造方法来进行实例化,无需添加@Autowired注解;只有存在多个构造方法时,才需要通过添加@Autowired注解的方式来告诉Spring应当选择哪个构造方法来进行实例化;如果构造方法上带有了@Autowired注解,那么即使该构造方法不是public修饰的,也可以被实例化;实例化带参数的构造方法时,Spring会先实例化构造方法中参数对象。情景一:

2022-05-16 00:42:17 160

原创 深入Java线程池(源码)

文章目录**线程池与线程对比****线程****线程池**为什么要用线程池?常用线程池的比较三种常见创建线程池的方法,用哪个多?线程池7大参数为什么要用阻塞队列,普通队列不可以吗?拒绝策略当线程数到达了核心线程数后,为什么新的请求进来要先添加到队列中而不是直接创建新的线程?线程池工作原理ThreadPoolExecutor源码分析类结构运行状态execute()addWorker()WorkerrunWorker()getTask线程池与线程对比线程public class ThreadTest {

2022-05-04 01:29:30 184

原创 深入理解ReentrantLock(源码)

ReentrantLock同时支持公平锁和非公平锁以及可重入是ReentrantLock的两大重要特点。那么,你知道它的实现原理吗?了解类关系ReentrantLock实现了Lock接口。public class ReentrantLock implements Lock, java.io.Serializable Sync是ReentrantLock内部的一个抽象类,它继承了AQS,也就是抽象队列同步器。abstract static class Sync extends AbstractQ

2022-04-27 01:09:38 88

原创 AQS之ReentrantLock

AQS什么是AQSJUC包下的大多数同步器的实现都需要围绕等待队列、条件队列、独占获取、共享获取等基础行为,而这些行为正是由AQS来实现的。AQS全称是AbstractQueuedSynchronizer,意为抽象队列同步器。JDK中提供的大多数同步器,例如Lock、Barrier、Latch等,一般都是通过一个内部类Sync来继承AQS,将同步器所有调用都映射到Sync对应的方法上来实现的。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I7M7dDvN-1650992

2022-04-27 01:07:47 161

原创 MySQL之事务

事务事务及其特性事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。原子性(Atomicity) :事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。一致性(Consistent) :在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规 则都必须应用于事务的修改,以保持数据的完整性。隔离性(Isolation) :数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独 立”环境执行。这意味着事务处理过程中的

2022-04-18 01:33:09 683

原创 MySQL之sql优化实战

sql优化实战全值匹配联系联合索引原理EXPLAIN SELECT * FROM employees WHERE age = 22 AND position ='manager';[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wkwJIECn-1650216677819)(E:\file\学习\课后总结\MySQL\assert\image-20220418003554360.png)]EXPLAIN SELECT * FROM employees WHERE

2022-04-18 01:31:53 431

原创 MySQL之explain

Explain工具介绍使用在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL,如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中。使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。变种explain extended:会在 explain 的基础上额外提供一些查询优化的信息。紧随其后通过 sho

2022-04-18 01:30:58 538

原创 MySQL之索引

什么是索引?是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据更通俗的说,索引就相当于目录索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针,它是要占据物理空间的索引的优缺点索引的优点:1、大大加快数据查询速度索引的缺点:1、维护索引需要耗费数据库资源2、索引需要占用磁盘空间3、当对表的数据进行增删改的时候,因为要维护索引,速度会受到影响索引的分类a.主键索引设定为主键后数据库

2022-04-18 01:30:11 188

原创 MySQL之慢查询

慢查询?如何定位?根据慢查询日志explain工具分析sql执行计划慢查询日志?概念Mysql慢查询,即慢查询日志,是Mysql提供的一种日志记录方式,用来记录在Mysql中响应时长超过阈值的sql。如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响开启默认关闭set global slow_query_log=on设置阈值默认10秒set global long_query_time=1;慢查询日志的文件名和路径show glob

2022-04-18 01:28:35 1286

原创 深入Synchronized

文章目录深入Synchronized线程安全问题临界区( Critical Section)Synchronzedsynchronized的使用底层原理synchronized的字节码指令序列**Monitor(管程/监视器)****MESA模型****wait()的正确使用姿势****notify()和notifyAll()分别何时使用****Java语言的内置管程synchronized****Monitor机制在Java中的实现**Java对象的内存布局对象头**使用JOL工具查看内存布局**对象如何

2022-04-05 13:09:57 329

原创 Java线程休眠(LockSupport)

Java休眠线程Thread.sleep()必须指定休眠时间休眠时线程状态为TIMED_WAITTING需要捕获InterrupedException异常休眠期间不会释放所持有的锁 public static void main(String[] args) { final String LOCK = "lock"; new Thread(() -> { synchronized (LOCK) {

2022-04-04 22:24:46 4468

原创 深入理解CAS

非阻塞同步之CAS概念互斥同步同步是指多个线程并发访问共享数据时,保证共享数据在同一个时刻只被一条(或者是一些,当使用信号量的时候)线程使用;互斥是实现同步的一种手段,临界区、互斥量和信号量都是常见的互斥实现方式。**互斥是方法,同步是目的。**互斥同步是一种最常见的也是最主要的并发正确性保障手段。互斥同步属于一种悲观的并发策略,不论共享的数据是否发生竞争,它都会进行加锁,而这会导致用户态到内核态的转换,因此互斥同步面临的主要问题是进行阻塞唤醒带来的性能开销,同时这种同步方式也被

2022-04-04 16:14:07 615

原创 深入理解Java线程

文章目录1.线程基础1.1进程和线程1.1.1进程1.1.2线程1.1.3进程和线程的区别1.1.4进程间通信的方式1.2线程的同步互斥1.2.1概念1.2.2线程同步互斥的控制方法1.3上下文切换1.3.1概念1.3.2查看CPU上下文切换情况1.3.3查看进程 / 线程的上下文切换情况1.4线程生命周期(操作系统层面)1.5查看进程线程的方法1.5.1**windows**1.5.2**linux**1.5.3**Java**1.6Linux系统中线程的实现方式1.7内核模式和用户模式 (Kernel

2022-03-29 23:26:53 1296

原创 JMM(Java内存模型)

JVM与JMMJVM(java虚拟机)Java虚拟机在运行程序时会把它管理的内存划分为以上几个区域,每个区域都有各自的用途以及销毁时机。 蓝色区域代表所有线程共享的数据区域,而绿色部分代表的是各个线程的私有数据区域。方法区(Method Area):方法区属于线程共享的内存区域,又称Non-Heap(非堆),主要用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,根据Java 虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError 异常

2022-03-10 18:10:37 602

原创 volatile(二)

volatile内存语义volatile的特性可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性(基于这点,我们通过会认为volatile不具备原子性)。volatile仅仅保证对单个volatile变量 的读/写具有原子性,而锁的互斥执行的特性可以确保对整个临界区代码的执行具有原子性。 64位的long型和double型变量,只要它是vol

2022-03-10 18:04:54 246

原创 内 存 屏 障

JVM层面的内存屏障在JSR规范中定义了4种内存屏障:LoadLoad屏障:(指令Load1; LoadLoad; Load2),在Load2及后续读取操作要读取的数据被访问前, 保证Load1要读取的数据被读取完毕。LoadStore屏障:(指令Load1; LoadStore; Store2),在Store2及后续写入操作被刷出前,保证Load1 要读取的数据被读取完毕。StoreStore屏障:(指令Store1; StoreStore; Store2),在Store2及后续写入操

2022-03-10 17:28:23 169

原创 如何保证JMM可见性

什么是JMM可见性?可见性是JMM三大特性之一,指的是当一个线程修改了共享变量的值,其他线程都可以看到修改后的值。如何保证可见性?/** * @author sonnie guo * @version 1.0 * @className VisibilityTest * @description * @date 2022/2/20 22:21 */public class VisibilityTest { private boolean flag = true; priva

2022-03-10 14:34:56 438

原创 Java8 日期时间类的使用

文章目录Java8 日期时间类的使用获取当前日期获取当前时间获取年月日信息处理特定日期周期性时间检查闰年日期计算日期比较计算日期间隔Clock时钟类处理时区获取当前时间戳格式化日期Java8 日期时间类的使用Java 8日期时间API的重点提供了javax.time.ZoneId 获取时区。提供了LocalDate和LocalTime类。Java 8 的所有日期和时间API都是不可变类并且线程安全,而现有的Date和Calendar API中的java.util.Date和SimpleDate

2022-02-22 10:45:12 347

原创 springframework-scan(求指正)

文章目录AnnotationConfigApplicationContextrefresh()ClassPathBeanDefinitionScanner.classregisterBeanDefinition()registerBeanDefinition()checkCandidate()isCompatible()processCommonDefinitionAnnotations()applyDefaults()generateBeanName()determineBeanNameFromAnnot

2022-01-16 20:24:47 486

原创 函数式编程

文章目录函数式编程概述为什么要用函数式编程?概念优点Lambda表达式概念核心原则语法格式练习练习1练习2练习3省略规则Stream概述入门练习Author&BookgetAuthorList()打印年龄大于50的作家匿名内部类写法Lambda写法常用操作创建流单列集合双列集合练习数组中间操作filtermapdistinctsorted无参带参limitskipflapMap终结操作forEeachcountmax&mincollectListSetMap查找与匹配anyMatchallM

2021-12-24 11:49:10 103

原创 线程池(一)

文章目录线程池1.Callable接口Callable: 返回结果并且可能抛出异常的任务。Runnable和Callable的区别:Future接口FutureTask类Callable两种执行方式借助FutureTask执行借助线程池来运行2.为什么要用线程池,线程池的优势?3.如何使用线程池?4.线程池分类5.线程池使用 步骤6.线程池7大参数7.线程池底层原理/工作机制?8.线程池的拒绝策略**拒绝策略是什么?**JDK内置拒绝策略(以下内置策略均实现了RejectedExecutionHandler

2021-05-19 07:06:18 133

原创 JUC(5)——可重入锁

可重入锁1.概述可重入锁又名递归锁。它是指一个线程在外层获取锁之后,再进入该线程内部的方法时就会自动获得这把锁,不会因为之前获取了这把锁后没有释放而阻塞。Java中的synchronized和ReentrantLock都是可重入锁。可重入锁的优点在于可以在一定程度上避免死锁。2.分类2.1 隐式锁即synchronized同步锁(默认是可重入锁)在一个由synchronized关键字修饰的方法或代码块的内部调用本类的其他synchronized修饰的方法或代码块时,是永

2021-05-19 07:02:20 107

原创 JUC(6)——阻塞队列

文章目录阻塞队列1.什么是阻塞队列?2.为什么要使用阻塞队列?3.阻塞队列的分类4.阻塞队列的核心用法4.1抛出异常4.2返回布尔4.3一直阻塞4.4超时退出4.5SyschronousQueue阻塞队列1.什么是阻塞队列?[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p7IzPIyN-1621378757606)(C:\Users\ThinkPad\AppData\Roaming\Typora\typora-user-images\image-202103270114

2021-05-19 07:00:49 211

原创 JUC(4)——线程安全

文章目录线程安全如何保证线程安全互斥同步==主要手段==synchronized关键字实现原理synchronized是重量级操作锁优化Lock特点如何选择synchronized和Locksynchronized 和 lock 的区别非阻塞同步CAS算法1.基本概念2.底层实现3.ABA问题4.如何解决ABA问题?无同步方案**线程本地存储**之ThreadLocal基本介绍使用场景ThreadLocal原理ThreadLocal内存泄漏问题并发工具线程安全如果一段代码可以保证多个线程访问的时候正确操

2021-05-19 06:58:29 535 1

原创 volatile(一)

volatile1.基本概念volatile是JVM提供的轻量级的同步机制,他基本遵守了JMM的规范。volatile主要用来确保将变量的更新操作通知到其他线程。当把变量用volatile修饰后,编译器不会对该变量进行指令重排序;volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此读取volatile类型的变量时总会返回最新写入的值;在访问volatile变量时不会执行加锁操作,因此不会使执行线程阻塞。2.三大特性可见性package com.example.juct

2021-05-19 06:55:49 153

原创 JUC(2)——JMM

文章目录JMM1.概念2.主内存与工作内存3.三大特性可见性如何实现?原子性如何保证?**Java中的原子操作实现**有序性如何保证?JMM1.概念JMM,即Java内存模型,它的设计是为了屏蔽各种硬件和OS的内存方法差异,从而实现Java程序在各种平台下都能达到相同的内存访问效果。2.主内存与工作内存JMM定义了程序中各种变量的访问规则,也就是在JVM中将变量值存储到内存中和将变量值从内存中取出这样的底层细节。 【此处的变量和Java语言中的变量有所区别,它包括了实例字段、静态字段和构成数组对象

2021-05-19 06:54:20 146

原创 JUC(1)——线程

文章目录1.进程和线程进程概念结构特征进程通信线程概念2.进程和线程的区别3.多线程?概念线程上下文切换什么是线程上下文切换?**减少上下文切换的方法?**守护线程与用户线程创建线程的四种方式线程的生命周期1.进程和线程进程概念进程就是为了更好的描述和控制多道程序环境下程序的并发执行,实现操作系统的并发性和共享性。进程是应用程序在内存中的运行过程,是系统进行资源分配和调度的一个独立单位,这里的系统资源指的是CPU,存储器及其他设备服务于某个进程的时间,因此进程一定是一个动态的、过程性的概念。每个

2021-05-19 06:51:11 174

原创 Kafka中的消息是否会丢失?

Kafka中的消息是否会丢失?要确定Kafka的消息是否丢失或重复,从两个方面分析入手:消息发送和消息消费。消息发送​ Kafka消息发送有两种方式:同步(sync)和异步(async),默认是同步方式,可通过producer.type属性进行配置。Kafka通过配置request.required.acks属性来确认消息的生产:0—表示不进行消息接收是否成功的确认;1—表示当Leader接收成功时确认;-1—表示Leader和Follower都接收成功时确认;综上所述,有6种

2021-05-04 18:12:12 435

原创 Redis和Memcached的简单对比

Redis和Memcached的对比Redis相比Memcache要有更多的数据类型,支持更丰富的数据操作;Redis6.0之前是单线程,而Memcache是多线程,因此,Redis在存储小数据时候性能要比Memcache更高;Memcache没有原生的集群模式,需要依靠客户端来实现集群中分片写入数据,但Redis是原生支持集群的。...

2021-05-04 18:11:45 53

mybatis-generator-demo.zip

mybatis-generator-demo【提供实例代码】

2022-01-09

空空如也

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

TA关注的人

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