自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL数据库相关知识

1、常用知识点2、优化3、原理。

2024-07-11 19:37:27 293

原创 ArrayList集合安全

CopyOnWriteArrayList add() 方法。

2023-08-27 15:23:43 163

原创 CAS相关知识

CAS(比较并交换),它是一条CPU并发原语,它的功能是判断内存中某个位置的值是否和期望值一致,如果一致的话就去更该为新的值,这个过程是原子的。Unsafe类中的compareAndSwapInt方法,是native方法能够实现原子操作的本质是硬件层面的。有些业务场景,仅仅只关注值是否一样是不够的,需要监控中间的值有没有变过,这时候就需要在修改之后也修改版本号了。ABA问题的复现和解决代码。

2023-08-27 11:35:46 174

原创 JAVA volatile 关键字

当 age变量没有被volatile关键字修饰的时候,AAA线程中修改的age的值,已经在主内存里面更新了,但是没有通知到main线程,所以main线程里面age的值还是10,会一直在while循环里面。当某个线程在自己的工作内存中修改了某个主内存中的变量副本,并将该数据在主内存中进行了刷新,就会第一时间通知到其他线程该变量的值已经改变并更新该变量的值,这就是。各个线程不能直接操作主内存的变量,只能通过操作主内存的变量副本来实现线程间的通信。线程加锁前必须将主内存的数据加载到线程的工作内存中。

2023-08-10 20:14:13 744

原创 算法的时间复杂度

算法的时间复杂度

2023-02-15 22:39:27 137 1

原创 线程的生命周期

线程的生命周期简述

2022-09-17 10:19:49 127

原创 MYSQL索引 EXPLAIN

MySQL聚集索引和非聚集索引 - 爱写bug的程序员 - 博客园MySQL的Innodb存储引擎的索引分为聚集索引和非聚集索引两大类,理解聚集索引和非聚集索引可通过对比汉语字典的索引。汉语字典提供了两类检索汉字的方式,第一类是拼音检索(前提是知道该汉字读音),比如https://www.cnblogs.com/zsmzsm/p/15596877.html数据库常见知识点总结-最左前缀匹配原则、EXPLAIN 命令详解 - xuwc - 博客园参考: https://blog.csdn.net/kqqkqq

2022-05-19 14:25:41 184

原创 SpringAop学习之细节

package com.sf.jin;import com.sf.annotation.Service.Calculator;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * @author JinJian * @version .

2022-03-28 21:00:02 754

原创 初识Log4j2框架

日志框架比较:slf4j、log4j、logback、log4j2slf4j:是对所有日志框架的一种规范,并不是一个框架的具体实现,因为接口并不能独立使用,需要和具体的日志框架(如log4j、logback、log4j2等)配合使用。日志实现(log4j、logback、log4j2)log4j是apache实现的一个开源日志组件logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现Log4j2是log4j 1.x和logb

2022-02-27 22:12:18 150

原创 Spring框架学习07之面向切面编程(AOP)

OOP:面向对象编程。AOP:面向切面编程,基于OOP基础之上的新编程思想。指在程序运行期间,将某段代码动态地切入到指定方法地指定位置进行运行地编程方式,即面向切面编程。场景:计算器运行计算方法的时候进行日志记录加日志记录:1)直接写在方法内部,不推荐,修改麻烦。日志记录:辅助功能;业务逻辑:核心功能;相耦合了;2)我们希望,辅助功能在核心功能运行期间动态地加上去,可以使用动态代理来将日志代码动态地在目标代码运行前后加上。动态代理的缺点:1、写起来难2、JDK默认的动态代

2022-02-22 22:31:39 213

原创 Spring框架学习04——Spring注解

通过给bean上面加上某些注解,可以快速地将bean注入到IOC容器中spring有四个注解@Controller:控制器层@Service:业务逻辑层@component:通用@Repository:持久层这些注解都能将bean注入IOC容器,可以顺便选一个使用,但是推荐按照上面写的加注解,方便别的程序员理解程序使用注解将bean注入IOC容器的步骤(1)在需要注入IOC容器的bean上面加上注解(2)添加扫描基础包<context:component-scan> (.

2022-02-20 09:34:18 205

原创 Spring框架学习之06---@Autowired注解自动装配流程

@Autowired自动装配的流程: @Autowired private LoaderTaskService loaderTaskService;@Autowired首先是按照类型(如LoaderTaskService类型)去容器中找相应的组件类似于loaderTaskService = ioc.getBean(LoaderTaskService.Class)这样的效果。1、找到一个就直接装配上2、找不到的话就会抛异常3、找到多个的话就再以默认变量名(如loade

2022-02-16 20:23:27 1244

原创 Spring框架学习05 引用外部属性文件和基于XML的自动装配

使用Spring创建数据库连接池,加载外部属性文件dbconfig.properties<!--加载外部属性文件,classpath类路径下面--> <context:property-placeholder location="classpath:dbconfig.properties"></context:property-placeholder> <!--数据库连接池用单实例是最好的,一个项目就一个连接池,一个连接池里面有许多连接,数据.

2022-02-13 11:10:47 585

原创 Java程序是怎么跑起来的

https://baijiahao.baidu.com/s?id=1661337254820605204&wfr=spider&for=pchttps://baijiahao.baidu.com/s?id=1661337254820605204&wfr=spider&for=pc

2022-01-26 11:43:13 957

原创 JAVA面向对象之成员变量和局部变量

疯狂JAVA5.3成员变量和局部变量package com.crazyJava.chacpter03.Methods;/** * @ClassName: VariableTest * @Description:成员变量和局部变量 * @Author: 01412126 * @Date: 2022/1/25 9:33 *//** 变量分为成员变量和局部变量* 成员变量:类变量和实例变量,其作用范围是整个类** 局部变量:形参(方法签名中定义的变量)其作用范围是整个方法* 方

2022-01-25 20:13:39 234

原创 Java面向对象之方法详解

疯狂JAVA5.2方法详解方法的所属和参数传递机制package com.crazyJava.chacpter03.faceObject;/** * @ClassName: ParameterPassingTest * @Description:5.2.2 方法的参数传递机制 * @Author: 01412126 * @Date: 2022/1/24 17:33 *//** 5.2.1 方法的所属* 1、Java里面的方法要么属于类要么属于对象,有static修饰的方法属于.

2022-01-25 09:12:55 278

原创 Java面向对象之类和对象

对应疯狂Java5.1节成员变量、方法和构造器package com.crazyJava.chacpter03.faceObject;import org.junit.Test;/** * @ClassName: ClassAndObjectTest * @Description: 5.1.2 定义类 * @Author: 01412126 * @Date: 2022/1/24 14:28 *//* *Java类的作用有哪些? * (1)定义变量 * (2)创建对象 .

2022-01-25 08:27:10 66

原创 Java Optional类

创建Optional实例Optional对象可能包含值也可能为空 @Test public void test02(){ Optional<User> u = Optional.empty(); u.get(); }使用上面那种方法创建Optional实例,如果使用get()方法访问u变量的值会报NoSuchElementException。我们也可以使用ofNullable()和of()方法来创建包含值的Optional.

2022-01-17 16:27:47 576

原创 Spring框架学习03——bean的作用域/静态工厂/实例工厂

bean的作用域:使用scope标签分别创建单实例和多实例的bean单实例的bean: (1)在容器启动完成之前就已经创建好了对象,保存在容器中了 (2)任何获取都是获取同一个对象 (3) 没有用scope标签指定,bean时多实例的时候默认是单实例多实例的bean: (1)容器启动完成的时候不会主动去创建对象,只有在获取这个bean的时候才会去创建 (2)每次获取这个bean的时候都会重新创建一个新的对象 <bean id = "person04" class="com.sf.j

2021-12-12 20:51:31 238

原创 Spring框架学习02——在xml文件里面为bean的属性赋值

实验一:按照bean的类型从IOC容器里面获取bean(这样就不需要强制转换) @Test public void test02(){ ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); Person person01 = context.getBean(Person.class); System.out.println(person0

2021-12-12 16:07:39 625

原创 IOC和AOP概述

DI(依赖注入):容器知道哪个组件(类)运行的时候,需要注入另一个组件(类);容器通过反射的形式,将容器中准备好的对象注入(利用反射给对象赋值)。只要是容器管理的组件,都能使用容器提供的强大功能。...

2021-12-12 10:02:45 371

原创 Spring框架学习01——简介

框架:高度抽取可重用代码的一种设计,具有高度的通用性,形成某一个领域的解决方案。Spring:是一个容器(可以管理所有组件(类))的框架,主要功能有IOC和AOP两大块。Spring的优良特性:(1)基于Spring开发的应用中的对象可以不依赖Spring的API(2)依赖注入(DI):IOC最经典的实现(3)面向切面编程:AOP(4)容器:Spring是一个容器,因为它包含并且管理应用对象的声明周期(5)组件化:Spring使用简单的组件配置组合成一个复杂的应用,(6)

2021-12-07 22:46:34 192

原创 Kafka API

Producer API:4.1.1 消息发送流程:kafka的producer发送消息采用的是异步放松的方式。在消息发送过程中,涉及到两个线程——main线程和sender线程,以及一个线程共享变量RecordAccumulator。main线程把消息发送给RecordAccumulator,sender线程再不断地从RecordAccumulator里面拉取消息发送到kafka broker。main线程里面经过send(ProducerRecord)方法——拦截器——序列化器——分区.

2021-12-07 21:35:25 952

原创 JAVA线程池

使用线程池创建新的线程背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。思路:提前创建好多个线程,放入线程池里面,使用时直接获取,使用完成后再放回池子里面。可以避免频繁地创建和销毁线程,实现重复利用。可以类比于城市地公共交通。好处:(1)提高响应速度(减少了创建新线程的时间)(2)降低资源消耗(重复利用线程池里面的线程,不需要每次都创建新的线程)(3)便于线程管理 corePoolSize:核心池的大小 maximumPoolSize:最大线程

2021-12-07 21:35:09 32

原创 SpringMvc之拦截器

SpringMvc提供了拦截器机制,允许允许目标方法之前进行一些拦截工作,或者目标方法运行之后执行一些操作;Filter: 是JavaWeb里面的HandlerInterceptor: 是SpringMvc里面的一个接口PreHandle:在目标方法运行之前调用该方法;返回的是一个boolean类型的变量,如果是true就放行,如果是false就不放行。PostHandle::在目标方法运行之后调用该方法AfterCompletion:在请求完成来到目标页面的之后运行该方法。(.

2021-12-07 21:34:55 218

转载 Docker和K8S

如何通俗解释Docker是什么? - 知乎Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各…https://www.zhihu.com/question/28300645要解释清楚Docker,首先要说解释清楚容器(Container)的概念。要解释容器的话,需要从操作系统说起。太深入的一两本书都说不清楚,直接引用维基的说法,操作系统就是管理计算机的硬件软件和资源,并且为软件运行提供通用服务的系统软件。硬件管理,包括分配CPU时间、内存;从网络

2021-12-07 20:15:39 142

原创 SpringMVC框架学习01——简介

MVC框架:新的软件架构模式M:model模型,封装和映射数据(javabean)V:视图层,界面显示工作(.jsp)C:Controller控制器,控制整个网站的跳转逻辑SpringMVC框架对MVC的理解:首先前端来了一个请求后会有一个前端控制器将这些请求派发到可以处理的控制器,相应的控制器再去调用Model层去处理这些请求返回数据模型,返回的数据模型又会到前端控制器那里,前端控制器再去寻找对应的视图来将这些数据渲染到页面,渲染完成之后再将这些页面响应回去。在IDEA..

2021-12-06 22:40:13 309

原创 JAVA线程之间的通信

线程通信涉及到的三个方法:(1)wait():一旦执行此方法当前线程进入阻塞状态,并释放同步监视器(2)notify():一旦执行此方法就会唤醒被wait的另一个线程。如果存在多个被wait的线程,唤醒优先级高的线程。(3)notifyAll():一旦执行此方法就会唤醒所有被wait的线程说明:(1)wait()、notify()、notifyAll()三个方法必须在同步代码块或同步方法里面使用(2)wait()、notify()、notifyAll()三个方法的调用者必须是同步代码块或同步.

2021-11-28 15:09:12 4178

原创 JAVA线程安全问题

卖票的过程中出现了线程安全问题,有重票和错票的问题。 为什么会出现这个问题? 当某个线程在操作卖票的过程中尚未完成卖票操作,其他线程也参与进来操作卖票,就会出现线程安全问题,(主要是共享数据(nums)的问题) 怎么去解决这个问题? 当某个线程在操作卖票的时候,其他线程不能参与进来,直到这个线程操作完成(即使这个线程阻塞了也得等这个线程执行完成),其他线程才能进来。 java里面我们通过同步机制来解决线程安全问题 方式一:同步代码块 synchronized(同步监视器){ } ..

2021-11-28 10:06:41 3928

原创 JAVA线程的生命周期

JDK里面Thread.State类定义了线程的几种状态。要想实现多线程,必须在主线程中新建新的线程对象。Java语言使用Thread类及其子类对象来表示线程,它的一个完整的生命周期一般要经过以下几个周期。创建:当一个Thread类及其子类对象被创建并声明的时候,新生的线程对象属于创建状态。就绪:处于新建状态的线程被strat()后,将进入线程队列等待cpu时间片,此时它已经具备了运行的条件就等着cpu给其分配运行的资源。运行:当就绪状态的线程被调度并获得了CPU资源时便进入了运行状态,ru

2021-11-27 10:17:28 217

转载 Java实例化子类的对象时会先调用父类的构造器(super关键字)

为什么在实例化子类对象时,会先调用父类的构造器?子类继承父类后要想获取到父类的属性和方法,必须调用父类的构造器对父类进行初始化才可以在哪里调用的父类构造器呢?一般在子类构造器的第一行会隐式地调用super(),即调用父类的构造器。(1)如果父类没有定义空参构造器,则必须在子类构造器的第一行显示地调用super(参数)以调用父类的构造器。(2)如果子类构造器第一行写了this(),则隐式的super()就会消失。this()和super()不能同时出现,如果子类构造器第一行写了this()

2021-11-12 23:23:20 1322

原创 Java之多线程

程序、进程和线程的概念:程序:为完成特定任务,用某种语言编写的一组指令的集合。即一段静态的代码,静态的对象。进程:是程序的一次执行过程,或是正在运行的一次程序。是一个动态的过程,有产生、存在和消亡的过程--------生命周期。如运行中的QQ、运行中的mp3。程序是静态的,进程是动态的。进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。线程:进程可以进一步细化为线程,是一个程序内部的一条执行路径。(1)若一个进程同一时间并行多个线程就是支持多线程的。(2)线程作为调

2021-11-10 22:19:18 56

原创 JAVA集合之Map

Map 双列数据,存储key-value对 HashMap:作为Map的主要实现类,线程不安全,效率高,可以存储null值的key和value LinkedHashMap:可以保证在遍历Map时,按照添加的顺序遍历map。 原因是底层在HashMap存储元素的基础上面,添加了指向前一个和后一个map元素的指针。 对于频繁遍历的map操作可以考虑使用LinkedHashMap。 TreeMap:保证按照添加key-value对进行排序,...

2021-10-26 20:47:10 3133

原创 JAVA集合之Set

package com.sf.jinjian.collection;import com.sf.jinjian.data.Employee;import org.junit.Test;import java.util.*;/** * @author JinJian * @version 1.0 * @date 2021/10/23 14:58 * * 1、Set接口存储的是无序的不可重复的元素,主要实现类有 * HashSet:作为Set接口的主要实现类,线程不安全,可以存储..

2021-10-24 21:53:37 1595

原创 集合之List接口

鉴于Java中数组用来存储数据的局限性,我们通常使用list替代数组。List集合类中元素有序且可以重复,集合中每个元素都有其对应的顺序索引。List的实现接口主要有ArrayList LinkedList Vector。

2021-10-24 21:48:39 32

原创 Git简介

Git是一个免费的开源的分布式版本控制工具,它具有廉价的本地库,可以暂存区域和多个工作流分支等特新。版本控制:是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制最重要的是可以记录文件的修改情况,可以看见文件历史版本方便进行版本切换。版本控制工具:(1)集中式版本控制工具:集中化的版本控制系统诸如 CVS、 SVN 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。缺点:这么做显而易见的缺点

2021-10-24 20:06:17 1733

原创 Java集合之迭代器

package com.sf.MavenLearning0930;import org.junit.Test;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;//使用迭代器接口Iterator遍历集合/*(1)Iterator对象称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素。 GOF给迭代器模式的定义为,提供一种方法访问一个容器对象里面的各个.

2021-10-19 20:16:47 243

原创 JAVA里面的注解(Annotation)

(1)Annotation其实就是代码里面的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。(2)Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器、方法、成员变量、参数、局部变量的声明,这些信息被保存在Annotation的"name = value"对中。(3)在JavaSE里面,注解.

2021-10-15 17:51:04 71

原创 Java 集合

一、集合框架的概述1、集合和数组都是对多个数据进行存储的操作,简称JAVA容器。此时的存储主要指的是内存层面,不涉及到持久化的存储。2.1、数组存储的特点(1)数组一旦初始化后,数组的长度就确定了。(2)数组一旦定义好,其元素类型也就确定了,我们只能操作指定类型的数据了。比如String[] arr, int[] arr2.2、数组在存储多个数据方面的缺点(1)数组一旦初始化以后,其长度就不能再改变(2)数组中提供的方法十分有限,比如删除、增加、插入数据等操作非常不方便而且效率不高(3)获

2021-10-14 10:39:25 41

原创 Maven

之前学过的技术,如控制层、业务逻辑层和持久层的那些技术已经可以做一个完整的项目了,为什么还需要maven?之前学过技术存在的问题:(1)一个项目都在一个工程里面 如果项目十分庞大的时候就不适合用PACKAGE来划分模块,最好是一个模块就是一个工程,这样利于分工协作 借助于maven就可以将一个项目分为多个工程。(2)项目中需要的jar包必须手动复制,粘贴到WEB-INF/BIN目录下面这样带来的问题是:同样的jar包重复出现在不同的项目工程里面,一方面浪费存储空间,另外也让工程比...

2021-10-09 17:22:49 83

精通spring4.x代码

精通spring4.x代码

2022-01-24

空空如也

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

TA关注的人

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