自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(145)
  • 收藏
  • 关注

原创 ThreadLocal

文章目录ThreadLocalThreadLcoal的使用引入ThreadLocal的原因(与synchronized的区别)ThreadLocal的内部结构ThreadLocalMap源码分析ThreadLocal源码分分析属性构造方法和简单方法Set方法Get方法Remove方法ThreadLoaclMap和内存泄露ThreadLocalThreadLcoal的使用线程并发 : 在多线程并发的场景下传递数据 :我们可以通过ThreadLocal在同一线程中,不同组件中传递公共变量线程隔离 :

2021-05-14 20:55:41 260 1

原创 函数式接口的简单理解

文章目录函数式接口(都只有一个需要我们实现的方法)1. 函数式接口 Function2. 供给型接口 Supplier3. 断言型接口 Predicate4. 消费型接口 Consumer函数式接口(都只有一个需要我们实现的方法)1. 函数式接口 Function@FunctionalInterfacepublic interface Function<T, R> { // 将此函数应用于给定的参数。 // 传入T 返回R的类型 R apply(T t);

2021-04-21 12:23:56 194

原创 多线程使用的三个工具类:CountDownLatch,CyclicBarrier,Semaphore

文章目录多线程使用的三个工具类:CountDownLatch,CyclicBarrier,SemaphoreCountDownLatchCyclicBarrierSemaphore多线程使用的三个工具类:CountDownLatch,CyclicBarrier,SemaphoreCountDownLatch减法计数器构造方法 public CountDownLatch(int count) { if (count < 0) throw new IllegalAr

2021-04-20 12:43:34 316

原创 ArrayList在多并发下的不安全问题以及解决方法

文章目录ArrayList在多并发下的不安全问题以及解决方法**为啥不安全**1. 使用Vector()数组来解决这个问题2. 使用Connections集合3. 使用 CopyOnWriteArrayListArrayList在多并发下的不安全问题以及解决方法为啥不安全多线程并发插入元素和读取元素的时候会出现 ConcurrentModificationException public static void main(String[] args) { ArrayL

2021-04-19 21:42:38 545

原创 对MVC的简单了解

SpringMVCMVCM model数据模型,提供要展示的数据,因此包含数据行为,可以认为是领域模型或JavaBean组件(包含数据和行为)。也就是Dao层和Service层。V view负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。C Controller接受用户请求,委托给模型进行处理,处理完之后把返回的模型数据返回给视图,由视图负责展示,也就是说控制器做了个调度员的工作。用户发请求Servlet请求接受数据,并调用对应的业务逻辑业务处理完

2021-04-12 16:04:36 82

原创 SSM整合框架流程

SSM整合框架总的配置<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans

2021-04-12 16:01:51 122

原创 Spring小结

SpringIOC :对象由Spring去创建,管理,装配。控制:水牢控制对象的创建,传统的应用程序的对象是由程序本身控制创建的,使用Spring之后,由Spring来创建的反转:程序的本身并不创建对象,而变成被动的创建对象所有的类都需要装配到bean中所有的bean都需要通过容器去取所有的bean取出来都是一个对象Spring中对象的构建 <!-- 使用默认的构造构造方法的时候 不需要配置constructor-arg 如果类中定义了构造方法就需要去 配置构

2021-04-08 16:03:23 127

原创 JVM之GC的简单理解

文章目录JVM之GC引用的分类如何判断对象可以被GC引用计数法可达性分析法finalize()垃圾回收的几种方式1. 标记复制(新生代)2. 标记清除(老年代)3. 标记整理(老年代)虚拟机hotspot垃圾收集算法之分代收集算法老年代和新生代以及永久代新生代对象如何进入老年代垃圾回收产生的影响用户体验(STW)和吞吐量垃圾收集器1. Serial收集器 (新生代收集器)2.ParNew收集器 (新生代收集器)3.Paraller Scavenge收集器 (新生代收集器)4.Serial Old 收集器

2021-03-29 20:11:22 173

原创 创建线程的四种方式

文章目录创建线程的四种方法1. 继承Thread类创建线程2. 实现Runnable接口创建线程3.实现Callable接口创建线程4.使用线程池创建线程1.对比new Thread,创建线程都比较耗时,使用线程池可以达到线程复用的目的。2. 创建线程池的方式:3. 通过线程池创建任务创建线程的四种方法1. 继承Thread类创建线程static class MyThread extends Thread { @Override public void run() {

2021-03-27 17:49:53 94

原创 数据库事务的简单理解

文章目录数据库事务的简单理解事务的概念事务的隔离级别1. 因为并发而可能出现的问题2. 为了权衡并发和隔离的矛盾,于是定义了事务的四个隔离级别如何去实现数据库中的隔离事务隔离级别的实现方式 (LBCC lock-Based Concurrent Control)1. 共享锁2.排他锁3.意向共享锁4.意向排他锁锁的算法1. 记录锁 (Record Locks)2. 间隙锁(Gap Locks)3. 临建锁(Next-key-locks)事务隔离级别的实现方式(MVCC Multi-Version Conc

2021-03-27 15:07:41 331

原创 数据库索引的简单理解

文章目录数据库索引的简单理解数据库中的数据放在哪里MySQL 索引为啥要使用索引索引使用的条件B树B+树B+树之聚合索引B+树之非聚合索引hash索引设置主键为自增int型索引优化之最左前缀原则数据库索引的简单理解索引其实就是一种排序的数据结构数据库中的数据放在哪里.frm 表的结构信息.ibd 存储索引和文件信息数据库中数据一般都存放在硬盘中,而不是内存中,每读取依次数据中的数据,叫相当于要操作一次I/O操作,速度较慢。 应用程序发起I/0操作去调动内核,找到对应的驱动程序把数据加

2021-03-26 20:37:10 255

原创 JAVA中代码块,静态代码块,构造方法的执行顺序

文章目录父类子类main方法结果结论父类package Test;public class Parent { private static String s = "abc"; private String o = "def"; static { System.out.println("Pa static"); } public Parent() { System.out.println("Pa cons"); }

2021-03-23 18:32:50 64

原创 JVM简单理解1

文章目录对JVM的简单理解java内存模型(jmm)内存溢出和内存泄露类加载类加载机制类加载器双亲委派模型对JVM的简单理解java内存模型(jmm)程序计数器 (线程私有)JVM的虚拟机是通过多线程轮转流切换并分配处理器执行时间的方式来实现,也就是在同一个时间一个cpu只会处理一个线程,而当一个线程被切换出去的时候,要想下次被切换回来的时候还在执行的那个位置,其实程序计数器中就记录了每一个线程执行到了那个位置。也就是记录了当前线程的上下文,线程具体的当前执行到了那个位置。每条线程都有自己独有

2021-03-23 18:05:23 85

原创 Synchronized关键字

Synchronized关键字synchronized是一种悲观锁乐观锁和悲观锁乐观锁设计思想 : 通一个时间点,经常只有一个线程对一个共享变量进行操作(可以理解为没有人和你抢吃的,你可以光明正大的吃)原理:线程直接操作共享变量实现 :基于CAS来实现悲观锁设计思想:同一个时间点,经常会有多个线程对一个共享变量进行操作(可以理解为有人和你抢吃的,需要偷偷藏起来吃,自己吃够了,把吃的才会拿出来)原理:线程操作变量的时候需要先加锁,再对变量进行操作实现:加锁操作CAS

2021-03-18 19:44:36 86

原创 网络知识的简单梳理

文章目录应用层协议DNSHTTPHTTPS传输层协议TCPUDP网络层协议IPICMPMTUNATARP和 RARP数据链路层PPP 点对点协议应用层协议DNS当在浏览器中输入一个网址的时候,一般的都需要进行DNS域名解析将其转化成IP地址,若是输入的直接为IP地址,则不需要解析。过程1)找浏览器的缓存查找对应的IP地址2)找操作系统的hosts文件中是否这个网址的映射3)找本机的DNS解析器缓存,是否有网址映射关系HTTPhttp请求协议1. http请求报文# 请求

2021-03-14 23:00:47 162

原创 认识Java中的异常

文章目录认识Java中的异常LBYL 和 EAFP认识异常异常的分类处理异常的方法两种方法的比较我们处理异常的时候一般是抛出异常和自己处理异常的方法相结合线程中出现异常的话认识Java中的异常LBYL 和 EAFPLBYL (look before you leap) 在操作的时候就做充分的检查EAFP (Easier to Ask Forgiveness than Permission)先操作遇到问题再处理就比如你想吃你妹妹的零食,你先问你妹妹可以吃嘛,你妹妹同意后再去吃,就是LBY

2021-01-23 21:27:00 146 1

原创 Mybatis的一级缓存和二级缓存的基本介绍

文章目录Mybatis的一级缓存和二级缓存基本介绍一级缓存二级缓存Mybatis的一级缓存和二级缓存基本介绍程序在执行的时候,它调用的对象存在于内存中,而我们为了提高性能方便快速调用,把已经被调用过的对象存在于缓存中,再次调用相同的程序或者相同的对象的时候,不必去数据库或者其他的持久化设备中查询。而Mybatis的缓存都是为了更好的执行查询语句,一旦执行增删改语句,缓存就会被清零一级缓存一级缓存的作用域是我们一个SqlSession对象,同一个SqlSession中执行相同的查询语句(查

2021-01-04 11:25:02 114 1

原创 Mybatis基本使用(2)

文章目录Mybatis基本使用(2)指定resultType 和 parameterType中的别名查询多个字段的时候 使用标签减少书写量resultMap的使用Mybatis基本使用(2)指定resultType 和 parameterType中的别名mybatis-config.xml中配置typeAlias<typeAliases> <!--<typeAlias type="net.xdclass.online_class.domain.Video"

2021-01-03 18:53:38 100

原创 Mybatis的基本使用

文章目录Mybatis基本使用使用的一般流程驼峰映射成下划线JDBCTYPE模糊查询插入数据,以及获取当前插入数据的主键执行流程如下批量插入数据 利用foreachupdate语句 以及使用 \Mybatis基本使用通过简单的xml或注解来配置映射java对象到数据库中的记录它支持自定义sql,存储过程以及高级映射使用的一般流程添加依赖包创建mybatis-config.xml 全局的配置⽂文件创建XXXMapper.xml配置⽂文件创建SqlSessionFactory⽤用SqlSe

2021-01-03 12:10:48 276

原创 线程和进程的区别

文章目录进程和线程的区别线程的优点创建一个线程中使用start() 和 run() 两种方法的区别多线程多线程在什么场景下使用,以及多线程的优点和特性。什么因素会影响多线程的效率常用API进程和线程的区别进程 : 系统分配资源的最小单位线程 :系统的调度的最小单位 ;每一个进程至少含有一个线程,即主线程(系统级别的,c语言的主线程),但是java级别的主线程即main方法;进程有自己的内存空间地址,而线程只独享指令流执行的必要资源,比如寄存器和栈由于同一进程的各线程间共享内存和资源文件,可以不通

2021-01-02 18:16:06 185

原创 多线程之 wait() 和 notifyAll() 方法

文章目录多线程之 wait() 和 notifyAll() 方法wait()notifyAll()方法使用wait()和notifytAll()方法来解决生产者消费者问题wait() 和 sleep()的区别多线程之 wait() 和 notifyAll() 方法wait()wait的方法是让当前线程进入等待状态,并且让当前线程释放对象锁。wait() 方法必须在同步代码块中使用,当我们调用wait而没有适当的锁的时候就会抛出 IllegalMonitorStateException异常。

2021-01-02 18:14:06 263 1

原创 线程不安全之volatile关键字

文章目录线程不安全之volatile关键字可见性有序性分析一下单例模式线程不安全之volatile关键字上篇博文讲了线程不安全问题https://editor.csdn.net/md/?articleId=111461834可见性就是说, 在多线程的环境下,某个共享变量A被其中一个线程修改了,其他线程就会知道有一个线程修改了这个共享变量A,然后其他线程若是要使用这个共享变量,就会直接去内存中去读取整个共享变量,而不是从自己的空间中去读取这个变量A。(线程自己的内存区域中存储着这个变量A的缓存地址

2020-12-30 23:53:12 211 1

原创 Spring中的定时任务和异步任务

定时任务有个时间专门处理某个任务SpringOBoot 自带的定时任务的框架启动类里面 @EnableScheduling开启定时任务,自动扫描定时任务业务类 加注解 @Component被容器扫描定时执行的方法加上相应的注解固定两秒执行一次@Scheduled(fixedRate = 2000)任务执行完毕之后2秒后再次执行@Scheduled(fixedDelay = 2000)corn表达式 可以定一个类似闹钟的定时任务@Scheduled(cron

2020-12-25 13:37:09 178

原创 对Spring中一些注解的总结

Spring小节基本注解1、@Controller 控制器(注入服务)用于标注控制层,相当于struts中的action层2、@Service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理3、@Repository(实现dao访问)用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.4、@Component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)区别web : 数据库设计 =&

2020-12-25 13:33:54 120

原创 简单了解Spring中的freemaker 和 thymeleaf

Spring中的freemaker 和 thymeleaffreemaker添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId></dependency>添加配置文件# freemarker配置#================

2020-12-24 17:39:25 148 1

原创 排序算法小节

冒泡排序package 冒泡排序;/** * 时间复杂度 : O(n2) * 空间复杂度 : O(1) * 稳定排序 * */public class BubbleSort { public static void commonSort(int[] nums) { for (int i = 0; i < nums.length; i++) { for (int j = nums.length-1; j > i; j--) {

2020-12-22 13:51:11 148 1

原创 关于java线程不安全问题的简述

关于java线程不安全问题的简述什么是线程不安全及其具体解析当我们执行一个Java.exe进程的时候,首先会初始化JVM参数,然后创建JVM虚拟机,再启动后台线程,最后执行就是执行我们代码行的main方法。而在JVM运行的时候会将他管理的内存分为若干个区域,每一个线程都有其独有的程序计数器,java虚拟机栈和本地方法栈,以及线程共享的Java堆和方法区(包含运行时常量池)当我们定义一个静态变量COUNT,它在被编译的时候创建于方法区。当我们创建多个线程去给COUNT执行++的操作的时候,

2020-12-20 20:09:18 164

原创 如何去设置SpringBoot中的热部署以及热部署的优点和缺点

如何去设置SpringBoot中的热部署以及热部署的优点和缺点什么是热部署就是当我们改变正在运行的应用的应用程序,但不需要重新关闭和启动应用。王者荣耀里的不关服升级就是一种热部署对于我们的java程序来说,热部署就是在运程序运行的时候我们更新了java类的文件优点我们写代码的时候就不用重新手动启动应用了,提高了开发效率缺点我们如果在线上启动热部署的话,可能会被黑客黑进去,篡改程序或者盗取重要信息,切记,线上不要用热部署。热部署只能适用于我们的本地开发如何使用热部署添加依赖

2020-12-19 15:13:55 1297 1

原创 如何在网页上创建SpringBoot项目以及这个项目的相关目录结构

创建SpringWeb项目https://start.spring.io/ 官方网页创建Spring项目网址上面红框写的是(懒得再去截图了) :最后一步 ,把这个项目下载到本地,到入idea就好了SpringBoot中的目录结构以及是如何访问静态资源的目录结构src/main/java 存放java代码为了正常启动项目,我们记住启动类一定在要放在根目录下,其他的java代码一定在启动类的同级或者同级以下src/main/resources…/static 存放静态文件…/te

2020-12-18 16:30:30 291 1

原创 Java中线程的状态以及状态的转化,线程中对于线程中断方法API的应用

Java中线程的状态以及状态的转化NEW 创建线程TIMED_WAITING 线程无限等待或者超时等待WATING 线程等待RUNNABLE 线程处于运行态(RUNNING)或者就绪态(READY)TERMINATED 终止BLOCKED 锁 线程阻塞[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8KcOfncP-1608174164451)(C:\Users\所谓爱隔山海\Desktop\QQ截图20201217095019.png)]线程中对于线程中

2020-12-17 11:03:01 82

原创 博客项目设计文档

博客设计文档设计详情filter 拦截器来进行会话管理多线程的单例模式来控制对数据库的连接通过json来进行前后端的交接 用序列化和反序列化前后端数据创建一个单独的类来进行异常处理 并且将异常原因返回给前端设计一个统一的前后端响应交接抽象类,通过其他servlet来重写抽象类的方法,提高代码的复用率设计一个JSONResponse类作为后端响应数据的模板,从而更好的实现前后端数据的交接前端设计Json + ajaxsuccess为true则返回正确的页面 为false则返回我们设

2020-12-14 14:53:23 296

原创 Java中简单的数据比较

数据的比较这个代码实现都放在了maven项目的单元测试中int数据类型的比较基本数据类型之间的比较 == 都是比较字面量 @Test public void test1_3(){// 测试通过 int i1 = 127; char c = (char) 127; Assert.assertTrue(i1 == c); } @Test public void test1_4(){// 测试通过

2020-12-13 20:11:16 534

原创 进程, 内核态与用户态, BIO和NIO

冯诺依曼体系结构输入设备: 接受某个动作,转变成执行指令。从某设备传输数据到内存。硬盘是比较特殊的输入输出设备。输出设备:数据输出到某个设备,比如显示器。 网卡是既是输入设备也是输出设备。网卡是通过驱动程序来管理。存储器:内存CPU:执行指令的设备,可以执行运算操作,数据操作,以及逻辑操作,可分为运算器和控制器。控制器:来控制运算器来进行操作。 运算器:进行操作。数据读写效率(在那个地方的效率最快)网络主机< 硬盘 (程序代码,文件) < 内存(程序执行,程序执行到内存中。有

2020-12-13 19:10:12 475

原创 JAVA中序列化和反序列化

Java中的序列化和反序化背景比如我们在两台电脑上传输数据,A电脑构造了并且发送了一段数据,但是在传输过程中需要转化成bit流才可以发送过去,而B电脑接收这段数据后,需要让人看得懂,就需要把bit流转化成这种数据。序列化和反序列化把JAVA对象转化成字节序列的过程就被称为序列化。把字节序列恢复成Java对象的过程就被称为反序列化。什么时候需要使用序列化和反序列化一般当我们需要将内存中的对象状态保存到数据库或者文件中的时候。用套子节在网络上传输数据的时候。简单的代码使用packag

2020-11-30 17:03:57 92

原创 Session和Cookie的应用和区别

Session和Cookie的应用背景我们知道http请求是一个无状态的协议并且是短连接的。也就是说每次请求响应,都会新建连接,响应完成之后就会关闭连接。但是我们有些资源需要登录之后才可以访问,但是http登录这个请求完成之后就会关闭这个连接,所以我们为了判断是否进行过登录操作(是否可以访问到敏感资源),一般就会加入Cookie字段和Session字段来判断是否进行过登录操作。SessionSession的应用就是为了保持用户的身份,让服务器端和客户端可以保持正常的会话功能,主要就是为了解决登录

2020-11-27 16:01:37 77

原创 当我们把一个web项目于部署到tomcat上的时候,是如何从浏览器上精准的找到项目中的后端资源的。

当我们把一个web项目于部署到tomcat上的时候,是如何从浏览器上精准的找到项目中的后端资源的。当当我们创建一个maven项目并且将其部署到tomcat上的时候。我们要看查看自己的项目效果是否符合自己所预期的。那木他是如何去访问自己的其中的资源的。我们在浏览器输入的是 localhost:8080/应用上下文路径/服务路径应用上下文路径 tomcat中webapps下的你部署的文件名服务路径一般就是你的资源路径。静态资源一般都在 main/webapp 这个路径下存储, 而main/weba

2020-11-25 17:08:40 341

原创 如何配置idea中内置的tomcat,以及如何部署项目到tomcat中

tomact和servlet的关系tomact是一种web服务器,也被称为Servlet容器将web项目部署到tomcat上idea专业版是内置tomcat服务器的,当我们下载好tomcat服务器之后,就可以通过在idea中启动tomcat服务器然后通过客户端也就是浏览器来访问这个web项目。如何在idea中配置tomcat呢我这个专业版2020的,版本不同情况可能不一样呀。找到你下载的tomact的路径,然后选择它,配置好之后我们的idea就可以使用tomcat了在idea中配置了to

2020-11-25 15:33:40 6906

原创 二叉树的简单理解

二叉树二叉树的定义 :二叉树是由n个节点的有限集合,该集合可以为空集,或者由一个根界定和两棵互不相交的,分别称为根节点的左子树和右子树的二叉树组成。我就可以把他理解为每一个点最多可以连三个点,但根节点最多只能连两个点。二叉树一般是具有五种形态:空二叉树,只有一个根结点,根结点只有左子树,根结点只有右子树,根结点有左子树又有右子树。但是这个不重要。我们要清楚的了解什么是完全二叉树和满二叉树满二叉树可以就是说所有的分支结点都存在左子树和右子树,并且所有的叶子都在同一层上,如图所示完全二叉树就是从

2020-11-15 19:51:15 958

原创 栈和队列的基本实现

栈和队列栈和队列都是一种特殊的链表栈栈是仅限定于在表尾进行插入和删除操作的线性表。栈就相当于一个箱子,你往里面放书,最先放进去的书,我们取得时候就要把上面的书全部拿出来才可以将第一本放进去的书拿出来。它遵循的是先进后出的规则它的底层实现可以分为顺序表和单链表两种的实现方式。它的两种实现方式插入和删除的基本操作时间复杂度都是O(1);链表实现栈package myStack;class Node { public Integer val; public Node ne

2020-11-14 16:23:37 64

原创 顺序表和单链表的区别 以及顺序表和单链表的代码

链表中顺序表和单链表的区别存储分配方式的不同顺序表一段连续的存储单元一次存储线性表的数据元素顺序表代码的实现,其本质就是一个数组和最大容量(也就是数组的长度)以及现有的长度。当我们每存储进一个数据的时候,他的现有长度增加,当增加到最大的容量的时候,我们就需要给顺序表扩容。我们很难把顺序表的空间容量全部利用。与单链表相比它无须为表中元素之间的逻辑关系增加额外的存储空间单链表 1. 采用的链式存储结构,用一组任意的存储单元存放线性表 2. 就是我们添加了一个引用,这个引用中存放了下

2020-11-13 16:04:30 1791

空空如也

空空如也

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

TA关注的人

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