自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2024-2-28

elementUI下来菜单绑定点击事件:

2024-02-28 10:36:17 72

原创 前端vue,后端springboot。如何防止未登录的用户直接浏览器输入地址访问

前端,使用Vue框架来实现前端路由拦截:设置需要登录校验的页面:

2023-11-04 18:49:17 347

原创 经验总结2023-11-2

fsdfsdf

2023-11-02 19:57:48 87

原创 二叉树2..

116. 填充每个节点的下一个右侧节点指针//同步记录当前节点的next;//递归左右子节点,left的next就是right,right的next是next的left或者空class Solution { public Node connect(Node root) { connectNode(root,null); return root; } public void connectNode(Node node,Node next){

2021-08-31 13:51:38 41

原创 leetcode top100

和为K的子数组

2020-08-13 12:42:45 235

原创 sql中注意

1.有聚合函数(count sum avg max)的。不用where 用 group by xxx having count2.group by必须放在 where 前面3.筛选不同列的行数用count(distinct column_name)

2019-10-04 19:52:04 159

原创 主键索引和非主键索引

对于一张数据表,ID为主键非主键索引和主键索引的区别是:非主键索引的叶子节点存放的是主键的值,主键索引的叶子节点存放的是整行数据。其中,非主键索引又称为二级索引,主键索引又称为聚簇索引。根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。1、如果查询语句是 select * from table where ID = 100,如果是主键索引则只需要搜索ID这颗B+树。2.如果查...

2019-09-07 22:44:49 2081

原创 线程调用start和run的区别

直接调用start方法是启动线程。此时线程处于就绪状态并没有真正运行,当线程要运行的时候会调用run方法执行线程中的任务从而实现异步执行。如果直接调用线程的run方法则是一个普通方法调用。总而言之,start是线程的启动者,run是线程任务的运行者。...

2019-09-07 09:33:30 213

原创 红黑树

平衡二叉树严格要求所有节点左右子树的高度差不超过1。在执行插入或者删除操作的时候,只要不满满足上述条件就要通过旋转来保持平衡。他比较适合于查找多而插入和删除比较少的情况。而红黑树是一种弱平衡二叉树,对平衡的要求没有二叉平衡树高。红黑树中定义:1.每个节点不是红色就是黑色的2.根节点必须为黑色。3.每个叶子节点(树尾端NULL节点)都是黑色的。4.如果一个节点是红色的,那它两个儿子节点都是...

2019-09-07 05:40:17 103

原创 group by和order by区别

order by指的是行的排序方式,默认为升序,order by后面必须出现排列字段名。group by指的是分组。需要有聚合函数,比如sum、count、avg配合使用。https://blog.csdn.net/sinat_40692412/article/details/81200133#commentBox...

2019-09-06 21:04:06 240

原创 MyBatis工作原理

运行的时候,先加载全局配置文件mybatis-config.xml。然后需要通过SqlSessionFactoryBuilder来构建SqlSessionFactory,https://blog.csdn.net/weixin_33755649/article/details/93175743https://blog.csdn.net/u010890358/article/details/80...

2019-09-06 12:09:58 120

原创 使用explain分析sql执行效率

Explain语法:explain select … from … [where …]例如:explain select * from news;输出:±—±------------±------±------±------------------±--------±--------±------±-----| id | select_type | table | type | possi...

2019-09-02 16:41:44 179

原创 数据库连接池!

创建数据库连接是一个非常消耗时间和资源的操作,如果对于每个数据库操作都去建立数据库连接,然后操作执行完毕后关闭连接,那效率会非常低下。而数据库连接池它可以集中管理数据库连接,在系统初始化的时候创建多个数据库连接,然后集中管理他们。我们可以自己定义一个数据库连接池,步骤是:1.编写一个类MyDataSource实现DataSource接口。2.用Class构造器一次创建十个连接,将其保存在Li...

2019-09-01 16:30:47 157

原创 数据库连接池面试

数据库连接池了解吗, 有什么好处?有了解数据库连接池吗?17.自己如何设计数据库连接池数据库连接池代码数据库连接池用的哪个? 数据库连接是线程安全的吗?MyBatis 中其实是有数据库连接池的,那么为什么要有数据库连接池?为什么不可以来一个我就创建一个 JDBC 连接?数据库连接池了解哪些那单例我们一般用来做什么?只需要一个对象的场景,比如数据库连接池、文件系统这种会用线程池吧。...

2019-08-31 15:38:42 1254

原创 分库分表

当业务规模持续增大的时候,数据量非常庞大,比如电商平台会包含用户、商品、评价、订单等几个模块,比较简单的做法就是对于每个模块建立一张表,放在一个数据库中。但是随着业务规模增大、访问量增大,就不得不对数据库进行重新拆分,将原本四个模块的数据分别放在四个数据库中从而提高系统的效率。分表有两种方式,分别是水平拆分和垂直拆分。垂直拆分是根据数据库中的列进行的,如果某个表的字段比较多,就可以建立一张扩展表...

2019-08-31 11:23:22 226

原创 分库分表问题汇总

MySQL分库分表原理MySQL主从怎么保证数据一致性,有哪些同步机制数据量大了,数据库怎么处理(扯了分库分表,RedisCluster做缓存)mycat分库分表了解吗?原理说一下。500万数据怎么处理?如何分库分表?数据库事务,分库分表,水平垂直,分表之后怎么查询,说他们现在分表是分了8000多个9、订单数大千万级,数据库怎么优化分库分表,答了水平分表,解释了一下垂直分表5、分库...

2019-08-31 08:27:14 195

原创 topK问题

1.从一亿个数中,找到最大的前m个方案1:采用最小堆,首先读取前m个数字构建最小堆,构建这个最小堆的时间复杂度为mlogm;然后遍历后面的数,如果后面的元素比堆顶元素小,则忽略这个数,如果比堆顶元素大,就将堆顶元素替换成这个数然后重新构建小顶堆。直到1亿个数全部遍历完为止。这种方案的时间复杂度为 nmlogm。方案2:采用分治法,就是将一亿个数分成100份,每一份是100万个数,然后找到每份数...

2019-08-30 10:48:50 171

原创 模板方法模式

模板方法模式就是指定义一个算法框架,将一些步骤的实现延迟到子类。例子:冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样,要求复用那些相同步骤的代码。public abstract class CaffeineBeverage { final void prepareRecipe() { boilWater(); brew(); ...

2019-08-29 16:38:42 142

原创 策略模式

策略模式指的是:定义一系列算法,封装每个算法,使得它们可以相互转换。例子:设计一个鸭子,它可以动态地改变叫声。这里的算法族是鸭子的叫声行为。public interface QuackBehavior { void quack();}public class Quack implements QuackBehavior { @Override public vo...

2019-08-29 16:21:15 113

原创 装饰者模式

https://www.jianshu.com/p/c06a686dae39https://blog.csdn.net/jason0539/article/details/22713711?utm_source=app

2019-08-29 15:16:40 121

原创 线程池

JDK创建线程池的方式Executors.newFixedThreadPool(int num):创建固定大小的线程池。用于执行长期的任务。Executors.newSingleThreadPool():创建单个线程的线程池。用于一个任务一个任务执行的场景。Executors.newCacheThreadPool():创建采用一定调度机制的线程池,不确定线程数目。用于执行负载较轻的服务器。...

2019-08-28 14:30:43 339

原创 callable接口与futuretask

创建线程的第三种方式,实现callable接口。与runnable接口比起来,这种方式是有返回值的。将callable通过futuretask进行封装。然后将futuretask传入新建的一个线程,启动线程。通过futuretask可以实现异步获取任务执行结果,比如一些任务执行需要花费很长的时间,那就可以先让主线程先去执行任务,主线程结束自己的任务以后再去获取结果。...

2019-08-28 09:36:56 173

原创 适配器模式

Callable接口

2019-08-28 09:29:10 109

原创 阻塞队列

当阻塞队列是空的时候,从队列中获取元素的操作会被阻塞;当队列为满的时候,往队列中添加元素的操作会被阻塞。BlockingQueue是阻塞队列接口,它有几个实现类。常见的是ArrayBlockingQueue,它是由数组组成的有界阻塞队列,默认大小是10;还有LinkedBlockingQueue,它是由链表组成的有界队列,但是默认大小为INTER_MAXVALUE,所以可以认为它无界。还有Syn...

2019-08-27 18:14:19 129

原创 Spring的传播行为、隔离级别

spring的传播行为指的是当多种事务同时存在的时候,spring如何处理这些事务的行为。PROPAGATION_REQUIRED:如果当前没有事务就创建一个事务,如果当前有事务就加入该事务。这是最常见的配置。PROPAGATION_SUPPORTS:如果当前存在事务就加入该事务,如果当前没有事务就以非事务执行。ROPAGATION_MANDATORY:如果当前存在事务就加入该事务,如果当前...

2019-08-26 21:57:29 158

原创 反射

一、反射概念与意义关于反射,首先有两个概念。首先是静态编译,它就是在编译期间确定类型,绑定对象;然后是动态编译,它就是在运行期间确定类型绑定对象。动态编译能够在很大程度上发挥java语言的灵活特性,体现了多态的应用,降低了类之间的耦合关系。反射就是利用动态编译的特点,动态地加载类,在运行期间获得类的全部信息。例子:若是不用反射,它是这样的:interface fruit{ p...

2019-08-26 14:20:49 125

原创 可重入锁

直观理解:不会给家里的厕所门上锁,之后锁大门是什么可重入锁就是指可以重复可以递归调用的锁。在同一个线程中,外层函数获得锁以后,内层函数仍然能获得锁。(它最大的作用就是避免死锁)原理可重入锁的实现原理是让每个锁关联一个线程持有者和计数器,当计数器为0的时候表示没有任何线程持有该锁;当有一个线程请求锁成功以后,JVM会记下持有锁的线程并将计数器的值置为1;此时如有其他线程请求锁则必须等待;而如...

2019-08-26 09:06:34 129

原创 JUC

juc:java.util.concurrentAQS是juc的核心,它是多线程访问共享资源的框架,许多同步类的实现都依赖于它,比如CountDownLatch、CyclicBarrier、Semaphore。CountDownLatch用来控制一个线程或者多个线程等待多个线程。它维护了一个计数器,每次调用countdown方法的时候计数器值就会减1,减到0的时候那些调用await的方法就会被...

2019-08-25 15:11:42 274

原创 进程通信方式

1.管道:管道支持半双工通信方式,数据只能单向流动;只有具有父子关系或者兄弟关系的进程才能使用管道通信。2.命名管道:与管道相比,它能支持非亲缘关系的通信。3.消息队列:消息队列是由消息组成的链表,进程A可以向消息队列中写数据,进程B可以从消息队列读取数据,与管道比起来,消息队列能进行全双工通信,且能传递更多信息。4.信号量:用来控制多个线程对共享数据的访问。5.共享内存:共享内存就是多个...

2019-08-25 12:36:38 105

原创 数据库三范式

第一范式第一范式指的是属性不能拆分,比如说用户有电话号码这个属性,而这个电话号码实际上可以拆分为手机号和座机号。第二范式第二范式指的是在满足第一范式的基础上,要求非主属性完全依赖于键码。比如说一个订单详情表中会有多件商品,那么主键就是订单id,然后这条数据还有商品id,商品名称,商品价格这些属性。但是商品名称,商品价格实际上是依赖于商品id的,而不是依赖于主键订单id。所以这是不满足第二范式...

2019-08-25 09:25:40 203

原创 CAS

CAS:compare and swap,翻译起来就是比较并交互。CAS有三个操作数,分别是内存值V,旧的预期值A,要修改的值B。只有当内存值和预期值相同的时候,才会把内存值修改为B,否则就什么也不做。CAS可能会出现ABA的问题,如果一个值原来是A,变成了B,然后又变成A,那么使用CAS检查就会发现它的值没有变化,而实际上是变化了。可以通过版本号来解决这个问题,每次变量更新的话就把版本号加1,...

2019-08-23 13:24:14 89

原创 观察者模式

观察者设计模式定义了一种一对多的依赖关系,让多个观察者同时监听某一主体对象。这个主题对象在变化时会通知所有观察者,让它们自动更新自己。结构图Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具...

2019-08-23 09:45:33 105

原创 MVCC

是InnoDB存储引擎实现隔离级别的一种方式,可以实现可提交读和可重复读。可以替换行级锁,减小开销。(事务版本号是系统版本号,每开启一个事务,系统版本号会递增)MVCC通过在每个行记录后面保存两个隐藏的列来实现。这两个列分别是这个行的创建本号、删除版本号。对应着这个数据行的创建时间和删除时间。insert:将当前事务版本号作为创建版本号delete:将当前的事务版本号作为删除版本号。se...

2019-08-22 16:30:49 92

原创 封锁协议

为了解决数据库并发一致性问题,采用封锁协议来解决。一级封锁协议:事务T要修改数据A时必须加写锁,直到事务结束才能释放锁。可以解决丢失修改的问题。二级封锁协议:在一级封锁协议的基础上,在读取数据时加读锁,读取以后马上释放读锁。可以解决脏读的问题。三级封锁协议:在二级封锁协议基础上,在读取数据时加读锁,直到事务结束才释放锁。可以解决不可重复读的问题。...

2019-08-22 14:01:54 342

原创 Arraylist插入、删除、扩容

ArrayList插入:在指定位置插入元素,将该原来在该位置的元素极其后面的元素向后移动一个单位,时间复杂度o(n)。删除:删除指定位置的元素,将该元素后面的元素全部向前移动一个单位,复杂度o(n)。扩容:Arraylist默认数组默认大小为10,当容量不足时,使用grow方法扩容,容量为原来的1.5倍。使用arrays.copyof将原来的数组复制到新的数组。...

2019-08-22 11:36:05 444

原创 ClassNotFoundException 和 NoClassDefFoundError 的区别

当应用程序尝试用类加载器去加载Class文件的时候,如果没有在classpath中找到指定的类就会抛出ClassNotFoundException。我们使用Class.forName和Classloader.loadClass在运行时加载类的时候,如果类没有被找到就会导致JVM抛出ClassNotFoundException。在JVM加载一个类的时候,如果这个类在编译器是可用的,但是在运行时找不...

2019-08-22 09:28:25 360

原创 数据库和数据库实例

数据库数据库是文件的集合,是一种依照某种数据模型组织起来,然后存放在存储容器中的数据集合。数据库实例数据库实例是程序,是位于用户和操作系统之间的一层数据管理软件,引用程序只有通过数据库实例才能和数据库打交道。数据库是由一个个文件组成的(一般是二进制文件),要对这些文件进行增删改查,不能直接操作这些二进制文件,这时候就要用数据库实例来完成...

2019-08-22 09:24:17 469

原创 redis缓存穿透、缓存击穿、缓存雪崩

一、缓存穿透缓存穿透指的是缓存和数据库中都没有数据,而用户不断地发起请求,比如发起id为-1的数据请求。这种用户很可能是攻击者,会加大数据库压力。解决方案:1.在接口做校验,比如对id做校验,对于id<=0的直接拦截。2.如果缓存和数据库中都没有数据,那就直接保持空数据,设置数据为key-null,然后设置一个短一点的过期时间,比如30秒。二、缓存击穿指的是缓存中没有数据,但是数...

2019-08-21 15:32:18 68

原创 永久代和元空间的区别

永久代和元空间最大的区别在于元空间不再虚拟机中而是使用本地内存,元空间大小只受本地内存限制。参数-XX:MetaspaceSize和-XX:MaxMetaspaceSize可以调整元空间大小。之所以用元空间永久代中存储字符串和数组容易出现性能问题和内存溢出;而且类和方法信息难以确定,要指定永久代大小不容易,太小容易导致永久代溢出,太大容易导致老年代溢出。而且,在永久代进行GC复杂度高,效率低。...

2019-08-20 11:05:40 2282

原创 JDK8特性

1.接口可以有默认方法,用default修饰;不需要由实现类实现这个方法。2.接口可以声明和实现静态方法。3.同一个地方允许重复注释。4.JVM内存区的永久代被metaspace替换。JVM参数-XX:PerSize和-XX:MaxPerSize被XX:MetaSpace和XX:MaxMetaSpace替换。...

2019-08-20 10:44:34 109

Multiple Drone-Cell.pdf

无人机部署论文,用户分布为二维泊松分布,采用的是粒子群算法。

2019-05-18

空空如也

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

TA关注的人

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