自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 资源 (3)
  • 收藏
  • 关注

原创 Spring Data JPA进一步学习

上次有介绍Spring Data JPA 接口实现的第一个接口JpaRepository,这次说一下动态查询, 第二个接口JpaSpecificationExecutor进行操作和Spring Data JPA 如何操作多表接口有简单几个方法:主要是参数就是查询条件有关于分页的查询,需要实现对应的Pageable接口,可以看到有一个都是使用的接口Specification,下面来说一下:进入接口可以看见它只实现了一个方法 若是多个参数进行对此进行规则构造 然后将多个属性进行逻辑拼接此方法有三

2021-12-05 20:41:32 668

原创 Spring Data JPA基础学习

上次有写到JPA的相关知识,接下来说一下Spring Data JPASpring Data JPA 是Spring基于ORM框架、JPA规范封装的一套JPA应用框架,开发者可以使用很简单的代码就进行数据库的访问与操作。在日常使用中Spring Data JPA 开发让我们解脱了DAO层的操作,基本所有的CRUD都可以进行使用它实现;它的简单方式在于我们在书写代码时候只需要在Dao层实现两个接口就可以了,JPA框架已经给我封装好了方法直接使用。Spring Data JPA的特点:提供了统一的接口

2021-12-02 21:25:49 600

原创 来看JPA,你学你也会

提到JPA、我们先说一说ORM思想ORM:Object-Relational Mapping表示对象关系映射。我们在使用面向对象语言时候,通过ORM建立实体类与数据库表之间的关系,就可把对象映射到关系型数据库中,到达操作实体就可以操作数据的目的。向我们学习的Mybatis就是常见的ORM框架的实现,还有我们要学习的JPA、Hibernate框架都是ORM思想的实现引入:关于以前的JDBC操作,我们知道需要书写SQL语句加载驱动、建立连接、创建处理对象、占位符号进行赋值、执行语句、使用结果集进行

2021-12-02 21:13:17 1215

原创 快速排序、堆排序、归并排序

归并排序:public static void p(int arr[],int L,int R){ if(arr.length()==0||arr==null) return; if(L==R) return; int mid = L+((R-L)>>1); p(arr,0,mid); p(arr,mid+1,R); merge(arr,L,mid,R);}public static void merge(int arr[],int L,i

2021-10-19 21:20:32 93

原创 数据库删表的区别

数据库删表区别删表有三种方式:delete:经常使用 进行删除表数据truncate:用于删除表数据 速度相比delete较快drop:删除表结构和数据,慎用区别:delete删除数据时候只是将数据设置不可见,而不会释放磁盘空间(innodb执行引擎下)在数据量较大的情况下,不建议使用,删除数据会走一个类似缓存,进行Committed提交就可进行删除,删除数据后自增主键不会重新开始truncate:删除数据库数据,直接删除数据但是不删除表结构,执行立即生效,不能返回,清空数据自增主键归

2021-10-17 19:43:34 330

原创 SpringBoot的自动装配

SpringBoot的自动装配:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。SpringBoot项目无需各种配置文件,一个main方法,就能把项目启动起来。那么我们看看SpringBoot是如何进行自动配置和启动的。SpringBoot所具备的特征有:(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的J

2021-10-16 18:23:52 280

原创 SpringBoot的Run方法

SpringBoot的Run方法:先跟踪启动类的run方法进去之后还实现有一个run方法,继续进入到这里,可以看到有一个SpringApplication的构造器,进入进入this到这里的代码就显示的多了,分析一下:源码注释的解释是:创建一个新的实例。将加载应用程序上下文来自指定主源的bean此方法主要进行:前面进行判断是什么类型的Web,后面进行加载实例类型:进入WebApplicationType,有三种类型,分别是REACTIVE(响应式Web),NONE(不是Web)

2021-10-16 18:14:30 1448

原创 涨姿势:JVM还分Client模式和Server模式?

看了一些GC的知识,发现了对应的垃圾回收器有对应的模式,快来学习一下!根据java -version 就能查到对应的Java虚拟机的工作模式原来java的虚拟机hotspot 还分server模式和client模式两种。可以看到是HotsPot的Server 运行模式。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采

2021-09-04 15:46:13 183

原创 空间分配担保

空间分配担保参数:HandlePromotionFailure每次进行Minor GC之前会进行老年代最大可用连续空间是否大于新生代所有对象的总空间,大于的话进行Minor GC,否则去进行判断是否开启允许空间分配担保失败,开启的话进行检测老年代最大连续空间是否大于以往Minor GC晋升到老年代空间大小的平均值,大于则进行Minor GC,否则可能会进行FUll GC...

2021-09-04 15:03:41 67

原创 ConcurrentHashMap的get、put方法分析

面试常问道会问到JUC,常见的就是CHM了,来说一下CHM不同版本的方法操作JDK7的CHM的底层实现是分段segment数组实现的,segment里面包含HashEntry,每个HashEntry又组成一个链表。常用方法get方法:首先获取segment的锁;然后进行根据Hash算法定位到具体的桶的位置;如果桶不为空的话,并且根据判断第一个结点就是需要插入的位置,直接替换旧值;否则的话逐个进行遍历寻找,不存在冲突的话创建一个新结点进行头插,如果桶为空的话,进行创建结点直接插入;之后进行判

2021-09-03 12:13:04 966

原创 关于使用浏览器本地存储的相关问题

记录一个浏览器本地存储数据的一些格式转换问题最近有一个练习项目做有个关于买东西进行购物车数据本地存储LocalStorage,当登录之后将本地存储的数据直接转存到服务器,存储的时候是将每个Obj对象存进去,获取本地存储使用就出现问题,存储的是对象数组,而使用的需要数组形式使用了this.$qs.stringify()进行序列化,也使用的JSON.stringify进行序列化,都未能达到预期的结果,(可能是使用有误)最后解决的是使用一个数组,将每一个数据都添加到此数组里面来进行发送请求,使用一个中变

2021-09-01 20:18:18 127

原创 Vue-CLI发送请求参数的问题

记录一个参数格式的问题:使用axios发送请求时候改半天不知道这个数据咋么转换 xxx[] xx 而后台进行参数接收不到nullthis.$axios.delete("/delete", { params: { ids: ids }, paramsSerializer: (params) => { return this.$qs.stringify(params, { indices: false }); },

2021-09-01 19:56:45 67

原创 讲清楚fail-fast和fale-safe有什么区别?

fail-fast:快速失败。fail-fast 机制是Java集合(Collection)中的一种错误机制。 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的结构进行了修改(增加、删除),则会抛出Concurrent Modification Exception(并发修改异常)。这是HashMap集合的机制,如果在循环Map集合时去改变集合的数据,就会报出ConcurrentModifitionException错误。原理:源码中实现是通过modCount实现,modCount就是修改次数的

2021-09-01 16:58:51 228

原创 Mysql的主从复制

Mysql的主从复制:什么是主从复制:是指将主数据的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对这些日志进行重新执行,从而是从数据库和主数据库的数据保持一致。主从复制的原理:主数据库需要开启binlog日志功能,文件用于记录数据库的变化;从数据库使用中继日志Relay Log;一共需要开启三个线程,master的Binlog Dump线程,slave开启IO线程和SQL线程;先在从库上启动复制;首先创建slave的IO线程进行连接主数据库;master的Binlog

2021-08-16 11:55:04 209 1

原创 SpringMVC的执行过程

SpringMVC的执行过程流程描述客户端发送请求给核心控制器(DispatchServlet),核心控制器获得请求后,根据请求的url在处理器映射器中查找对应handler对象(控制器对象)处理器映射器将找到的Handler对象返回给核心控制器核心控制器委派处理器适配器HandlerAdapter执行Handler(有一系类的执行链HandlerExecutionChain )处理器适配器HandlerAdapter将请求转给Handler对象执行具体业务处理器对象Handler,调用Mo

2021-08-13 17:23:39 78

原创 SpringBean的生命周期

SpringBean的生命周期:Spring容器可以管理singleton作用域的Bean的生命周期singleton在此作用域下,Spring能够精确的知道该Bean何时作用域被创建,何时初始化完成,以及何时被销毁。prototypeprototype作用域的Bean, Spring只 负责创建,当容器创作用域建了Bean实例后,Bean的实例就交给客户端代码来管理,Spring容器将不再跟踪其生命周期。特别要记住一点,Spring是根据beanDefinition来创建Spring b

2021-08-13 17:17:36 103

原创 如何解决Spring中的循环依赖?

Spring如何解决循环依赖:什么是循环依赖?所谓循环依赖举个栗子:A对象里面需要依赖B对象;B对象里面需要A对象public class A { @Autowired B b;}@Componentpublic class B { @Autowired A a;}A对象自己依赖自己@Componentpublic class A{ @Autowired A a;}创建对象的时候,先创建A发现需要B对象,然后去看B对

2021-08-13 17:11:21 104

原创 Redis相关问题

Redis相关问题哨兵组件的主要功能:集群监控:负责监控机器是否正常的运行消息通知:如果某个机器发生故障进行消息警报故障转移:主机宕机进行转移到其他的机子配置中心:告诉用户新的主机的ip地址redis为什么速度快?Redis使用的是单线程IO的形式,数据都存储在内存中,速度非常快,没有锁竞争数据结构简单,而对数据的操作也非常简单使用多路IO复用模型,非IO阻塞,采用多路 I/O 复用技术可以让单个线程高效的处理多个网络连接请求(尽量减少网络 IO 的时间消耗);高效的数据结

2021-07-27 19:58:57 71

原创 全文检索功能(Lucene)

Lucene:全文检索技术概念:先创建索引,然后再对索引搜索的过程就是全文检索技术;索引一次创建多次使用,表现为每次的查询速度很快。索引:一个为了提高查询速度,创建某种数据结构的集合。数据的分类:结构化数据:格式、长度、数据类型固定例如数据库的数据,非结构化数据:格式、长度、数据类型不固定word文档、pdf文档等等数据的查询结构化数据的查询:sql语句简单、查询速度快非结构化数据:查询某个关键字?条件复杂,查询难度大顺序扫描法字符串匹配(顺序扫

2021-07-16 16:37:51 1005

原创 Spring Data JPA学习(2.0)

Spring Data JPA概述:​ 基本:封装了JPA规范的框架​ 极大的简化了数据库访问层代码,SpringDataJpa我们的Dao层只需要写接口,就自动有了增删改查、分页查询等方法;​ 特性:提供统一的接口,可避免我们再次重复编写基础的DAO类遵循JPA规范,同时也提供了灵活的数据访问方式;通过方法名即可自动生成HQL语句;通过接口自动注入实现类,实现非常简单Spring Data JAP 和JPA规范和hibernate的关系:JPA是一套具有ORM思想的规范,内部是抽象

2021-07-15 18:17:48 433 2

原创 Spring Data JPA学习(1.0)

关于以前的JDBC://SQL语句String sql = "insert into xx(xx,xx,xx) values(xx,xx,xx); ";//加载驱动:Class.forname(com.mysql.jdbc.Driver);//建立连接Connection con = DirverManager.getCon(username,password,url,driver);//创建预处理对象PreparedStatment psmt = con.prepareStatment(s

2021-07-15 13:54:01 106

原创 Redis学习5.0(补充)

经典的KV、DB读写模式Cache Aside Pattern读的时候:先读缓存,缓存没有进行数据库查询,然后取出数据后进行放入缓存,同时返回响应;更新的时候:先更新数据库,再删除缓存。为什么不是更新缓存,而是删除缓存?很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。比如更新的值而是需要多个表之间都有的关系进行计算,才算出最新的缓存的值。最直接的是,你这个数据是否会访问得到,如果你去持续进行数据更新,而此数据基本不会访问到,实属没有必要。实际上是需要使用了再采取缓存。就像

2021-07-14 15:15:04 80

原创 Redis学习4.0(缓存雪崩、击穿、穿透)

缓存击穿:和缓存雪崩相似,雪崩是大面积的数据失效,而缓存击穿是由某一个热点数据key在不停的发生压力,在key失效时候,承受高并发的巨大压力,击穿缓存,进入数据库进行重大打击。处理方法:设置某个热点数据永不过期或者设置多个热点数据失效时间随机即可。使用互斥锁更新,保证同一个进程中针对同一个数据不会并发请求到 DB,减小 DB 压力。缓存穿透:是指我们的缓存和数据库都没有的数据,而用户还在不断的进行发送请求。数据库的id一般从1开始自增的。如果进行id为-1或者很大的不存在的数据时,产生数据

2021-07-13 16:17:28 148

原创 Redis学习3.0(持久化RDB&AOF)

持久化操作redis是基于内存的数据库,数据存储在内存上,服务器重启或者出现什么意外情况会导致数据丢失。这里可以持久化数据放入硬盘的文件中。永远存储数据,在需要时将保存的数据进行恢复。端口连接号:6379持久化机制:RDB方式(快照方式):将当前数据状态以快照的形式记录下来进行保存,储存格式简单,关注点在数据上。AOF方式(日志方式):将操作数据的过程以日志的方式记录下来,存储格式复杂,关注在操作数据的过程。RDB持久方式:默认方式在一定的时间间隔中。检测key的变化,

2021-07-13 16:15:37 150

原创 Redis学习2.0(布隆、哨兵、分布式、缓存一致性)

Redis进阶:redis特点:Redis采用单线程模式处理请求采用了非阻塞的异步事件处理机制;缓存数据都是内存操作IO事件不会太长,单线程可以避免线程上下文切换产生的代价。Redis支持持久化,所以Redis不仅仅可以作为缓存,还可以作为NoSQL数据库。相比Memcache 相比,Redis很大的优势是除了K-V之外还支持多种数据格式。Redis提供主从同步机制,以及Cluster集群部署能力,可以提供高可用服务。HyperLogLog:关于基数统计基数统计(Cardina

2021-07-11 22:10:50 159 1

原创 数据库索引以及索引结构

索引:是用来帮助MySQ高效的获取数据的数据结构。就相当于一本字典的目录,方便查找;索引本身也不小,一般存在磁盘上的文件中;一般所说的索引都是B+树结构。索引的优点:高效率进行数据的检索,降低数据库查询数据的IO成本;降低数据排序成本,降低CPU的消耗,通过索引类进行数据排序;索引的缺点:创建索引会占据磁盘空间;索引提高查询效率,但是会降低更新表的效率。都有哪些索引?主键索引:用于标识索引列的值唯一,不允许有空值;唯一索引:用于标识索引列的值唯一,但是运行有空值;

2021-07-02 17:36:44 734

原创 Redis的五种基本数据结构与基本操作

数据结构:存储的是key-values的形式key是字符串,values是五种数据结构String 字符串Hash 哈希类型(Map格式)List 列表类型set 无序集合Sortedset 有序集合命令操作String:String是Redis中最基本的类型,String类型是二进制安全的,redis的string可以存储任何数据,如图 片、对象等。存储:set k-v获取:get k删除:del kstrlen k

2021-06-29 17:19:20 90

原创 JVM内存模型:

JVM内存模型:主要分以下几部分:主要说法:堆是线程共享的内存区域,栈是线程独享的内存区域。堆中主要存放对象实例,栈中主要存放各种基本数据类型、对象的引用。java内存分配过程中,是对象的引用指向内存的区域,然后进行初始化操作。但是堆是全局变量共享的,因此在同一个时间内可能会有两个线程进行对象的创建,如果有两个对象同时指向了一个内存区域,该如何解决?为了解决这个并发操作,对象的内存分配一定是一个同步控制。但是无论使用什么去解决都会影响内存的效率。由于对象的分配是一个高频操作,此处说明

2021-06-28 20:16:29 91 1

原创 java类加载器的了解

java类加载器的了解:BootstrapClassLoaderEXTClassLoaderAppClassLoader首先JVM将java源文件编译成.class字节码文件,然后用类加载器将class文件载入到内存供我们使用。可以看出ClassLoader在其中扮演着非常重要的作用。AppClassLoader的parent是ExtClassLoader。ExtClassLoader的parent为null。现在总结下类加载的整个过程:(1) 从缓存中查找这个cl

2021-06-27 10:50:14 35

原创 Spring代理的简单了解

代理:代理就是一个中介,不仅仅可以实现某种目的还可以加上额外的操作的方式。静态代理和动态代理的区别在于生成字节码的时机;静态代理:由程序员创建的代理类或者工具生成的代码再对其进行编译。缺点:代理类只能代理一个委托类(满足单一职责前提),意味着多个代理对应多个委托类;运行之前必须要确定代理类动态代理:在程序运行后通过反射创建生成字节码再由JVM加载而成。字节码随用随创建,不修改源码就可以增强方法。public interface IProducer { public void sal

2021-06-26 16:52:02 739

原创 Spring的七种事务传播行为

Spring的七种事务传播行为:事务传播行为类别说明PROPAGATION_REQUIRED如果当前没有事务,就新建立一个事务,如果已经存在一个事务,就加入到这个事务中。(Spring使用的默认事务传播行为)PROPAGATION_SUPPORTS支持当前事务,如果没有当前事务,就以非事务方式执行。PROPAGATION_MANDATORY使用当前的事务,如果没有就抛出异常。PROPAGATION_REQUIRED_NEW新建事务,如果当前存在事务,把当前事务

2021-06-26 16:12:02 74

原创 MVCC、事务以及事务的隔离级别

事务隔离级别:未提交读(Read UnCommitted):最不安全的隔离方式,一个事务可以读到另一个事务未提交的数据。另一个事务存在回滚的情况。提交读(Read Committed):一个事务提交之后,它作出的改变才能够被别的事务看到。可重复读(Repetable Read):一个事务读可以读取到其他事务提交的数据,但是在RR隔离级别下,当前读取此条数据只可读取一次,在当前事务中,不论读取多少次,数据仍然是第一次读取的值,不会因为在第一次读取之后,其他事务再修改提交此数据而产生改变。序列化(Ser

2021-06-25 20:58:26 413

原创 线程池的基本了解

线程池:线程池提供了一种限制和管理资源(包括执行一个任务)。每个线程池还维护一些基本统计信息,例如已完成任务的数量。使用线程池的好处:降低线程创建和销毁线程而产生的系统开销;提高相应速度,创建相对从线程池里面取速度较快;提高线程的可管理性:常用的线程池有哪些:newFixedThreadPool:创建固定大小(线程个数)的线程池newSingleThreadPool:创建单线程的线程池newscheduleThreadPool:创建具有时间的线程池newCacheThreadPool:创

2021-06-06 20:46:55 81

原创 ThreadLocal基本了解

ThreadLocal解决的问题:主要解决的是数据隔离,在多线程的情况下防止自己的变量被修改 。见名知意本地线程,也就是说每个线程都会在ThreadLocal中存放一份属于自己独有的数据,所以它是线程安全的。相当于Web的域对象,session的作用域是一个会话,而ThreadLocal的作用域就是基本线程。基本数据结构:ThreadLocal底层是通过ThreadLocalMap静态内部类实现的,这个ThreadLocalMap就是一个KV的Map集合,底层是一个Entry对象数组,Entry对

2021-05-29 15:10:06 302

原创 AQS:AbstractQueuedSynchronizer :同步队列器

AQS:AbstractQueuedSynchronizer :同步队列器​ AQS中维护了一个int 的变量代表共享资源 和一个FIFO线程等待队列,多线程进行资源争抢会被阻塞进入此队列。队列把它叫做同步等待队列,这个队列的作用是将想要得到这个锁的线程进行保存起来,当获取了资源就进行执行基于AQS有一个同步组件,叫做ReentrantLock,在这个组件里,state代表获取锁的线程数,Volatile int state 代表共享资源,使用Volatile修饰,保证多线程下的可见性,当state为

2021-05-29 11:41:47 137

原创 volatile细节

volatile细节:/**使用volatile和不使用volatilevolatile保证不同线程对共享变量操作的可见性,也就是说一个线程修改了volatile修饰的变量,当修改写回主内存时,另外一个线程立即看到最新的值。*/public class Volatile { /*volatile*/ boolean running = true; void m() { System.out.println("m start"); while (run

2021-05-22 19:21:46 84 1

原创 乐观锁和悲观锁

乐观锁和悲观锁:CAS:Compare And Swap 比较和替换 是乐观锁的一种是一种轻量级锁,在java的JUC中很多工具类的时效件都基于CAS的;CAS保证线程安全的方法:线程在读取数据时候不进行加锁,在准备写会数据的时候先去查询原值,操作的时候比较原始是否被修改,若未被其他先修改则写回,若已被修改,则重新执行读取流程。存在的问题:ABA问题:线程1进行读数据A,但是操作时间长没写回数据;线程2进行读数据A;然后线程2进行CAS对比原来还是A,可以修改为B;线程3进行

2021-05-22 19:12:13 125

原创 响应头的常用设置

几种常用的方法 //设置响应码 response.setStatus(200); //设置响应头为定位到某一个网页或者某一个资源位置 response.setHeader("location","指定的url位置"); //重定向的方式进行跳转页面 response.sendRedirect("指定的url位置"); //服务器告诉客户端本次相响应体数据格式以及编码格式 文本方式进行响应

2021-05-11 15:21:28 2398

原创 yield方法和wait方法

yield方法和wait方法yield()方法属于高风亮节方法,可以调用跟自己同级的线程 也不会释放锁wait()方法是Object对象的方法,使用时候调用对象的wait方法导致当前对象放弃对象的锁,只有调用notify方法或者notifyAll方法才会唤醒 。会释放锁 join对象也可以sleep()方法是休眠方法,是Thread类的静态方法,调用时不会释放锁。通俗的说法就是一般抱着锁睡觉。成员变量放在heap堆区局部变量放在栈区堆区:只存放类对象,线程共享方法区:又叫静态存储区

2021-05-08 10:07:09 591

原创 node.js安装测试nrm ls报错

使用nrm ls 产生错误internal/validators.js:124throw new ERR_INVALID_ARG_TYPE(name, ‘string’, value);^[TypeError [ERR_INVALID_ARG_TYPE]: The “path” argument must be of type string. Received undefinedat validateString (internal/validators.js:124:11)at Objec

2021-05-07 11:27:04 431

java相关资源.txt

java开发包

2021-03-07

史上最全的Java面试题独家整理.zip

面试题

2021-03-07

RedisAndJedis.zip

关系型数据库和非关系型数据库

2021-03-07

空空如也

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

TA关注的人

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