自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (2)
  • 收藏
  • 关注

原创 Cookie、Session、Token、JWT详解

本文主要阐述了Cookie、Session、Token、JWT的区别,并明确了其各自使用的注意事项

2023-05-24 23:00:19 724

原创 关于跨域问题详解

本文从应用实践的角度阐述了跨域问题的三种解决方案:注解:@CrossOrign、Gateway、HttpClient。

2023-05-24 16:30:12 726

原创 Java代理模式详解

这篇文章中主要介绍了代理模式的两种实现:静态代理以及动态代理。涵盖了静态代理和动态代理实战、静态代理和动态代理的区别、JDK 动态代理和 Cglib 动态代理区别等内容。

2023-05-23 23:03:52 504

原创 MySQL之深入解析自增主键为何不连续

摘要】众所周知,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,大量的随机IO。自增主键不连续,这是大家已经熟知的知识点,但是也应该有不少朋友不知道为何自增主键不是严格递增呢?

2023-05-23 18:18:59 796

原创 缓存的作用

缓存就是把访问量高的热点数据从传统的关系型数据中加载到内存中,当用户再次访问热点数据时直接从内存中读取,减少了对数据的访问量,解决了高并发场景下容易造成数据库宕机的问题。

2023-05-22 17:22:11 1394

原创 设计模式之Builder模式

Builder构建者模式的理解,从定义到使用场景进行详细阐述。

2023-05-21 08:05:10 477

原创 简单工厂、工厂方法和抽象工厂之间的区别

设计模式中的工厂模式(Factory Design Pattern)是一个比较常用的创建型设计模式,可以细分为三种:简单工厂模式、工厂方法模式和抽象工厂模式。那么三者有什么区别吗?接下来就是本文讨论的问题。

2023-05-20 19:01:31 504

原创 MyBatis-plus的批量插入方式对比分析

Mybatis批量插入一直是开发者重点关注的问题,本文列举了Mybatis的五种插入方式进行对比分析,验证了五种批量插入的方式的优先级。

2023-05-20 18:58:26 2576 7

转载 Oracle创建新用户并授予权限

  Oracle创建新用户并授予权限的步骤网上非常多,我这里不作过多的解释,直接转发记录一波。Oracle创建新用户并授予权限

2020-09-03 15:56:46 253

原创 生产者消费式模型详解及相应的代码实现

文章目录生产者消费者模式定义优点实例实现代码生产者消费者模式定义  生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。优点解耦–生产者。消费者之间不直接通信,降低了耦合度。支持并发支持忙闲不均实例  

2020-08-25 22:48:13 235

转载 死锁问题的全面解析

进程死锁1 定义 所谓死锁是指多个进程运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵局状态,若无外力作用下,他们都无法向前推进。2 产生的原因竞争资源竞争不可剥夺资源竞争临时资源进程间推进顺序非法3 产生死锁的四个必要条件互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。环路等待条件

2020-08-25 00:16:57 171

原创 java线程全面解析

java线程全面解析文章目录java线程全面解析线程的实现方式一、继承Thread类二、实现Runable接口三、实现Callable接口四、使用线程池接口ExecutorService线程的状态变化线程的操作方法和状态线程的实现方式 java实现线程的方式有五种,分别是继承Thread类、实现Runable接口、实现Callable接口、使用线程池接口ExecutorService。下面将对其做一一介绍。一、继承Thread类 继承Thread类,本质上还是实现Runable接口,并实现

2020-08-21 12:28:48 146

原创 深度理解递归函数

目录1 什么是递归1.1 递归定义1.2 递归的实现步骤1.3 递归的分类1.3.1 线性递归1.3.2 二分递归1.3.3 尾递归1.3.4 互递归1.3.5 嵌套递归2 怎么实现递归2.1 尾递归与其他递归的区别2.1.1 递归优化2.2 动态规划的实质2.2.1 动态规划迭代实现2.2.2 动态规划递归实现2.2.3 动态规划尾递归实现1 什么是递归1.1 递归定义 所谓递归,简单点来说,就是一个函数直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问

2020-08-18 11:46:52 518

转载 九大排序算法总结

九大排序算法总结目录九大排序算法总结算法一:插入排序算法原理算法步骤实现代码算法二:希尔排序算法原理算法步骤实现代码算法三:选择排序算法原理算法步骤实现代码算法四:冒泡排序算法原理算法步骤实现代码算法五:归并排序算法原理算法步骤实现代码算法六:快速排序算法原理算法步骤实现代码算法七:堆排序算法原理算法步骤代码实现算法八:基数排序算法原理算法步骤代码实现算法九:计数排序算法原理实现代码总结算法一...

2020-03-06 11:05:41 218 1

原创 java的两个比较器

java实现比较功能的类,有两种解决方案。分别继承comparable和compartor接口。1 继承comparable  实现比较功能的类直接继承该接口,并重写compareTo方法。相关代码如下:public class BookCook implements Comparable<BookCook>{ /** * 主题 */ pr...

2019-09-21 17:50:43 431

转载 java并发编程——闭锁、同步屏障、信号量详解

1 闭锁:CountDownLatch1.1 使用场景  若有多条线程,其中一条线程需要等到其他所有线程准备完所需的资源后才能运行,这样的情况可以使用闭锁。1.2 代码实现// 初始化闭锁,并设置资源个数CountDownLatch latch = new CountDownLatch(2);Thread t1 = new Thread( new Runnable(){ pu...

2019-09-20 17:27:00 226

原创 事物的四大特性、四大隔离级别

1 什么是事物  定义: 事物就是数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。  本质: 由一个或多个sql语句组成。这些sql语句在执行过程中被当作一个整体,要么全部的sql语句执行成功,要么全部失败。不存在一部分执行成功,一部分执行失败。2 事物的四大特性2.1 原子性(Atomicity)  原子性就是将事物进行的操作捆绑成一个不可分割的单元,事物中进行的数据操...

2019-09-20 11:22:26 7392 1

转载 浏览器中输入www.jd.com之后都发生了什么?

最近碰到了以上的问题,记录一波。  当浏览器中输入www.jd.com之后,浏览器经历如下步骤:1 浏览器查找该域名的 IP 地址浏览器缓存 首先是查找浏览器缓存,浏览器会缓存DNS记录一段时间,不同浏览器保存的时常不等(2分钟到30分钟不等)。系统缓存 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用来查找这个网址的对应DNS信息。路由器缓存 如果在系统缓存里没有找到找...

2019-09-19 20:57:37 3568

原创 java并发编程:Volatile关键字和Atomic类

  在学习并发编程的时候一定要了解Volatile关键字和Atomic类。现在让我们来逐一了解。1 Volatile关键字  要想详细了解Volatile关键字就必须了解一下线程之间的可见性,什么是线程可见性呢?1.1 可见性  可见性是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程的修改结果,另一个线程马上能看到。下面举一个代码列子来说明:public cl...

2019-09-19 12:31:21 489

转载 布隆过滤器

布隆过滤器  布隆过滤器的原理非常简单,将要过滤的东西通过k个hash函数计算,映射到bitmap数组上(bitmap是逻辑上的,实际实现可以看上一篇文章),将相应的位置设置为1。至于什么误判率之类的,就不细说了,前面都有相关原理的说明。如图:代码实现  关于BloomFilter的实现,目前我从网络上找到两个版本,都是基于BitSet实现的。第一个版本比较简略,但是能完整的呈现BloomF...

2019-09-18 16:06:54 121

原创 JDK8-十大特性

1 Lambda表达式public List<Integer> list = new ArrayList<Integer>(){{ this.add(1); add(2); add(3); add(4); add(5); add(6); add(7); ...

2019-09-18 12:19:14 753

转载 面试题:UDP&TCP的区别

  看了一篇相关的文章,写的非常好,值得肯定,我直接转载一波

2019-09-17 17:35:12 159

转载 Mysql数据库几种搜索引擎

1 数据库引擎的介绍  MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL+API自己做一个引擎。下面介绍几种数据库引擎:1.1 ISAM  ISAM是一个定义...

2019-09-17 16:01:33 1040

原创 数据库的锁有哪几种?语句怎么实现

1 为什么需要锁  数据库是一个多用户共享的资源,当多个用户并发的存储数据时,数据库就会产生多个事物同时存储同一数据的情况。若对并发操作不加控制就可能读取或存取不正确的数据,破坏数据的不正确性(脏读,不可重复读,幻读等),可能产生死锁。为了解决这个问题,加锁是一个非常重要的技术,对实现数据库并发控制是一个好的方案。简单来说,当执行SQL语句事物前,应向数据库发出请求,对你访问的记录加锁。在这个事...

2019-09-17 10:18:30 4757

原创 深入理解数据库索引采用B树和B+树的原因

  要想了解这个问题,首先必须需要对数据库的存储有一定的了解。数据库文件存储的方式、从数据库读取数据的原理、减少磁盘IO操作的影响因素。1 数据库文件存储的方式  数据库文件存储都是以磁盘文件存储在系统中的,这也是数据库能持久化存储数据的原因。2 从数据库读取数据的原理  从数据库读取数据,先暂且不考虑从缓存中读取数据的情况,那就是从磁盘文件中读取数据的,我们知道从磁盘文件中读取数据是比较...

2019-09-16 16:26:26 232

原创 快速排序的原理

1 基本思想  快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。2 实现过程  以“6 1 2 7 9 3...

2019-09-16 10:37:34 379

原创 AOP实现原理

作为面向对象(OOP)的补充,切面编程(AOP)在纵向(方法增强)进一步降低了代码冗余,提高了开发效率。但我知道怎么回事,却总是不能深刻的理解。于是原理与代码结合学习,记录下来。1 实现原理  AOP的主要作用就是通过不修改源代码的方式,将非核心功能的代码组织入来实现对方法的增强。实现的关键在于使用了代理模式。代理模式的作用就是为其他代码提供一种代理,以控制对这个对象的访问。用于解决直接访...

2019-09-11 14:17:41 673

原创 spring的aop和Ioc讲讲

1 spring的概念  spring是一个开源的轻量级框架,通俗的解释一下,开源:也就是免费;轻量级:不需要依赖很多其他的东西,比如一些容器,可以提高开发调试的效率。2 spring的优点降低了组件之间的耦合性 ,实现了软件各层之间的解耦。可以使用容易提供的众多服务,如事务管理,消息服务等。容器提供单例模式支持。容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能。...

2019-09-10 16:02:28 132

原创 三种将HashMap中value值存入List中的方法

1 通过获取keyset  通过获取keyset制成迭代器,以迭代器的方式把map值添加到list中,相关代码如下:List<String> returnResult1 = new ArrayList<String>();// 获取所有的hashMap键Set<Integer> keySet = map.keySet();// 制作关键字迭代器Ite...

2019-09-10 10:50:15 12284

转载 hashmap的实现,冲突,初始容量和加载因子?怎么扩容?

1 实现原理  HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals...

2019-09-10 09:24:26 283

原创 Java中的sleep与wait区别

sleep让当前线程休眠指定时间。休眠时间的准确性依赖于系统时钟和CPU调度机制。不释放已获取的锁资源,如果sleep方法在同步上下文中调用,那么其他线程是无法进入到当前同步块或者同步方法中的。可通过调用interrupt()方法来唤醒休眠线程。wait让当前线程进入等待状态,当别的其他线程调用notify()或者notifyAll()方法时,当前线程进入就绪状态。wait方法...

2019-09-09 21:25:32 121

原创 四种创建线程的方式

最近一直在刷面试题,刷到“如何创建进程”,所以记录下来  进程一直是面试的热点问题,创建进程的方式有四种,分别是继承Thread类创建线程、实现Runnable接口创建线程、使用Callable和Future创建线程、使用线程池例如用Executor框架。1 继承Thread类创建线程  通过继承Thread类来创建并启动多线程,其代码如下:public class MyThread ...

2019-09-09 17:47:14 162

原创 线程的五种状态详解

Java中的线程的生命周期大体可分为5种状态。新建(NEW):新创建了一个线程对象。可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice),执行程序代码。阻塞(...

2019-09-09 12:10:10 240

转载 说说进程和线程的区别

如果服务器同一时间内只能服务于一个客户端,其他客户端都在傻傻的等,可见其服务器性能堪忧。因此并发编程应运而生,并发是网络编程中必须考虑的问题。实现并发的方式有多种:比如多进程、多线程、IO多路复用。1 多进程  进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分...

2019-09-09 11:21:50 163

原创 重载与覆盖的区别

最近一直在刷面试题,遇到“重载与覆盖的区别”,于是记录一波。1 重载与覆盖的区别方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系。覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。覆盖要求参数列表相同;重载要求参数列表不同。覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,...

2019-09-09 10:55:24 683

原创 抽象类和接口的含义以及区别

最近一直在刷面试题,刷到了抽象类和接口类的含义及区别,于是记录一波。1 抽象类是什么  抽象类不能创建实例,它只能作为父类被继承。抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性。抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法。抽象类不能被实例化。抽象类可以但不是...

2019-09-08 22:56:35 227

转载 struts2和springmvc的区别

最近一直在看面试题,其中有一道“struts2和springmvc的区别”,于是网上学习一波,记录下来。一、拦截机制的不同  Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter,getter吧request数据注入到属性。Struts2中,一个Action对应一...

2019-09-08 22:01:53 105

原创 蓝牙自动配对怎么实现

明年就要毕业了,所以最近开始刷面试题,碰到了一个问题“蓝牙自动配对怎么实现的?”,刚开始有点懵逼了。于是学习一波,记录下来。1 实现过程及原理  配对是建立连接的基础,任何从未配对过的设备(或曾经配对但其中一方已删除配对关系)都无法建立连接,因此配对无法绕过。配对的方式有输入pin码、输入密码、免输入的随机验证码等多种。当前XX设备与控制端的配对方式为免输入的随机验证码,两端确认6位数密码...

2019-09-08 11:53:36 10322 4

原创 build.gradle: Minimum supported Gradle version is 5.4.1. Current version is 4.10.1.

最近跑GitHub上的项目,出现标题这种提示,试探一波,发现原来是gradle版本与对应的插件不匹配的问题。因为项目是从GitHub上面下载下来的,对应的gradle版本比较老,Tool API已经被移除了,所以换了当前idea默认支持的最新版本。解决方案报错:build.gradle: Minimum supported Gradle version is 5.4.1. Current...

2019-09-04 11:59:19 17293 1

原创 html页面定位到指定位置的方法大全

最新接触了一个项目需要实现定位提示页面某个部分文本没有输入,请输入。网上百度一波,发现有3中方法(也许可能更多)。特此记录一下。1 锚点法  锚点法,就是利用href属性,URL以#elementName的形式访问某个name属性为elementName的节点。代码如下。// 其中的一种表现形式,其格式‘#name’固定不变。<a href="#anchorName">点击...

2019-09-02 22:34:42 4146

blueTooth.rar

实现自动连接蓝牙配置,有两个小程序,分别为动态注册广播和静态注册广播

2019-09-08

modelScoring.rar

SSM框架搭建的登录页面,不仅实现前端精美页面,也实现后台数据查询,功能完善,新手学习的最佳demo

2019-08-10

空空如也

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

TA关注的人

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