- 博客(57)
- 资源 (3)
- 收藏
- 关注

原创 SpringCloud的手把手搭建(Eureka-Ribbon-RestTemplate-Feign)
首先让我们先明白springboot&spring&springCloud的关系springboot&spring:SpringBoot底层就是Spring,简化使用Spring的方式而已,多加了好多的自动配置;简单来说就是简化了配置,让开发上手更加容易简单Spring Cloud&SpringBoot:Spring Cloud是分布式系统的整体解决方案,底层用的SpringBoot来构建项目,Cloud新增很多的分布式的starter,包括这些starter的自动配置
2020-05-12 13:29:26
811

原创 SpringSecurity的快速搭建(ssm项目)
首先我们要知道spring security适应来干嘛,主要功能是什么,Spring Security 参考手册这是springsecurity的官方手册,如果需要详细了解可前往此处;spring的核心功能主要有三个:– 认证(认证你的角色是什么)– 授权(你能干什么)– 攻击防护(防止伪造是否)核心就是一组通过职责链的过滤器链;第一步当然是先要将相关的依赖包加入,这里我加...
2020-04-28 21:44:00
223

原创 SpringSecurity框架分析和UsernamePasswordAuthencationFilte表单认证过滤器的源码分析
进行debug断点首先是在UserDetailsService的实现类中的sql语句进行断点,项目中的首先的过滤器是applicationFilterChain 这个过滤器是tomcat容器来管理过滤器链,且作用是将项目中分散的过滤器组织起来,也就是职责链模式,简单来说因为执行的过程是一个入栈的过程,所以这个过滤器是整个指责链的头且还负责收尾;因为我们要看的是SpringSecuri...
2020-04-27 11:27:39
414
原创 EasyExcel 版本 填充模板的坑遇到的坑:NullPointerException,doFill
自己定位到analisysCellList为空,很奇怪的是,步骤同样,更换模板文件就会发生这个异常解决是更新EasyExcel到3.0.0.1之后就可以解决,不过需要注意的是相关的api会变,如cellHandler中需要覆盖的方法,原先的参数都整合进了context中异常java.lang.NullPointerExceptionat com.alibaba.excel.write.executor.ExcelWriteFillExecutor.doFill...
2021-11-16 11:35:41
5911
3
原创 PageHelper 踩坑:不安全分页
结论先行主要原因:PageHelper使用了静态的ThreadLocal参数,让线程绑定了分页参数, 这个参数如果没被使用就会一直留在那儿,当这个线程再次被使用时,就可能导致不该分页的方法去消费这个分页参数,这就产生了莫名其妙的分页。照成原因:PageHelper.setPage(1,10);if(param!=null){ list=userMapper.selectIf(param)}eles{ list=new ArrayList<User>();}//这样子如果par
2021-08-02 11:04:29
995
原创 复习-五大经典排序算法
排序算法 今天花了一下午重新复习了一边五大经典排序算法,思想理解还是挺简单,但是实现起来还是需要一点时间,有待提高;之前学习相关算法并没有记录笔记,复习的时候没有资料感觉又熟悉又陌生的感觉;所以打算特意记录下冒泡排序 思想:冒泡排序的思想很简单,两两比较,每次将最大的拍到最后。 优化:当没有发生交换,其实已经排序完毕,不用在进行排序 代码:/** * 冒泡排序 * 原理:两两排序,每次将最大的一个推到上面,分为已排序区和待排序区 * 优化:在已经
2021-07-30 17:30:38
206
原创 ReentrantLock的lock()源码过程的分析
前言ReentTrantLock其实在jdk1.6以前相比与synchronized效率上和api丰富性上是具有很大区别,但是之后的话,其实性能上差距不大,但是在api的丰富性上ReentrantLock还是有有时那为什么在1.6前synchronzed与ReentrantLock相比,性能上差很多呢?首先当是的synchronzed在当时的需要同过操作系统的互斥量来实现锁,这就需要其在用户态和内核态上进行切换,当是直接上来就是重量级锁;但是在jdk1.6之后呢hotspot对synchroni
2021-01-31 00:00:09
275
原创 2003 - Can‘t connect to MySQL server on ‘10.211.55.16‘ (61 “Connection refused“)最佳
最佳因为突然一个虚拟机崩溃了,然后重新搭建了一个虚拟机然后使用navicat 连接Mysql 老是不能连接 出现这个错误在百度查到几乎都是加套接字 ,但是我不是本地的呀解决办法一:加了一层ssh来连接可以在编辑连接那里配置终极解决办法:就是centos的默认开启了firewall查询防火墙状态:systemctl status firewalld.service关闭防火墙:systemctl stop firewalld.service永久关闭防火墙:systemctl disable fir
2020-12-18 21:21:59
394
1
原创 使用redis缓存问题
前提优化数据库io操作,一般分为两个层面,一是提高数据库sql本身的性能,二是尽量避免直接查询数据库。提高数据库本身的性能首先是优化sql,包括:使用索引,减少不必要的大表关联次数,控制查询字段的行数和列数。另外当数据量巨大是可以考虑分库分表,以减轻单点压力。尽量避免直接查询数据库重要的解决办法就是:缓存,缓存可以理解是数据库的一道保护伞,任何请求只要能在缓存中命中,都不会直接访问数据库。而缓存的处理性能是数据库10-100倍。而Redis就是作为缓存系统一般放入缓存中的大都是热点内容,并发可
2020-10-27 17:37:05
210
原创 ElasticSearch与Springboot整合
使用ElasticSearc得必备这几个前提条件1:安装2:基本概念和DSL语法的学习3:至少Java 8 环境关于es在java客户端选择一类是TransportClient 为代表的ES原生客户端,不能执行原生dsl语句必须使用它的Java api方法。另外一种是以Rest Api为主的missing client,最典型的就是jest。 这种客户端可以直接使用dsl语句拼成的字符串,直接传给服务端,然后返回json字符串再解析。两种方式各有优劣,但是最近elasticsearch官
2020-10-27 17:17:28
401
原创 [DUBBO] qos-server can not bind localhost:22222, dubbo version: 2.6.0 :springboot+dubbo2.6.0
dubbo中的QOS服务拿到dubbo服务ip,通过telnet命令远程连接到你的dubbo服务(中间没有任何认证),然后可通过offline和online命令上下线你所有的服务,这种命令的安全性不言而喻,但是它的初衷是方便开发者治理服务,比如某个服务有严重错误,开发者可以直接下线该服务而不影响其它服务(offline支持正则匹配)。从2.6.4/2.7.0以前,QOS服务的远程连接默认是开启的,最新版的没有这种问题解决办法就是关闭QOS服务但是在网上寻找的方法大都是通过配置文件修改:官方提供的相关
2020-10-26 09:00:45
667
1
原创 nginx: [emerg] open() “/usr/local/nginx/logs/nginx.pid“ failed (2: No such file or directory)
可以看到在启动的时候是无法创建pid文件1:修改nginx.conf:vim /usr/local/nginx/conf/nginx.conf:在配置文件中有个注释的地方: #pid logs/nginx.pid;将注释放开,并修改为:pid /usr/local/nginx/logs/nginx.pid;在 /usr/local/nginx 目录下创建 logs 目录:mkdir /usr/local/nginx/logs启动nginx服务:/usr/local/ngin.
2020-10-13 16:20:50
1759
原创 复习之KMP算法
今天复习下KMP算法,学习挺久了,突然想到却记不起来,今天简单复习下;首先kmp算法解决的是串匹配的问题,比如给定两个串S=“s1s2…sn” 和T=“t1t2…tm”,在主串S中查找子串T的过程称为串匹配,也称模式匹配要想解决也串匹配,其实属于易解决问题,但是随着规模的增加,时间规模也变大为什么说是易解决问题,比如BF算法,也就是不断的匹配:朴素的模式匹配算法从第一个字符开始与模式T的第一个开始比较,若相等则继续比较两者后续的字符,若不相等,则从主串的第二个开始与模式T的第一个字符进行比较;B
2020-09-22 23:30:00
168
原创 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at tk.mybatis.spring.mapper.SpringBootBindUtil$SpringBoot2Bind.bind(SpringBootBindUtil.java:129) ~[mapper-spring-boot-autoconfigure-1.2.3.jar:na] at tk.mybatis.spring.mapper.SpringBo
2020-08-14 18:10:12
3571
原创 JUC---异步回调接口CompletableFuture
一般来说异步回调配合消息中间件使用CompletableFuture的使用public static void main(String[] args) throws ExecutionException, InterruptedException { //同步,异步,异步回调 //MQ消息中除间件 //消息中间件:实现解偶 //同步 //Void 对象代表返回对象为空 CompletableFuture&
2020-08-12 23:44:31
339
原创 JUC---分支合并框架使用
什么是分支合并框架呢原理:Fork:把一个复杂任务进行分拆,大事化小(黑色箭头)Join:把分拆任务的结果进行合并(蓝色箭头)相关的类:1:ForkJoinPool拆分成多个的小任务就在这个池子运行分支合并池 类比=> 线程池2:ForkJoinTask:ForkJoinTask 类比=> FutureTask同样是实现了Future接口;所以在使用ForkJoinTask.get()一样,得执行完得出结果才会的得到值3:RecursiveTas
2020-08-12 23:36:13
281
原创 JUC---创建线程池与自定义ThreadPool线程池
为什么使用线程池线程池的优势:线程池做的工作只要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。它的主要特点为:线程复用;控制最大并发数;管理线程。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的销耗。第二:提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会销耗系统
2020-08-12 22:41:50
269
原创 JUC--阻塞队列BlockingQueue的介绍和使用
阻塞队列是一个队列,在数据结构中起的作用如下图:当队列是空的,从队列中获取元素的操作将会被阻塞当队列是满的,从队列中添加元素的操作将会被阻塞试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素试图向已满的队列中添加新元素的线程将会被阻塞,直到其他线程从队列中移除一个或多个元素或者完全清空,使队列变得空闲起来并后续新增阻塞队列的用处:在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤起为什么需要BlockingQueue
2020-08-12 21:21:42
304
原创 JUC---ReentrantReadWriteLock读写锁
读锁-共享锁:比如一行数据可以被多个线程加锁,可以给很多人去读写锁-独占锁:只能一个线程支持上锁,比如一个线程对id=2上完的锁后 又对id=1进行update,但是另外个线程对id=1这行数据上了一个写锁,所以此时对id=2上写锁的线程需要灯另外对id=1这行数据上的锁解开后才能解开,所以就造成了死锁;解决方法就是说话算话,上写锁就只做写操作,读锁也是;我们自己生产环境安装的mysql死锁检测机制默认打开,如果检测到死锁会自动解开实际环境不开,因为伤性能范围锁-间隙锁:比如对id<5 id
2020-08-12 12:00:30
153
原创 JUC---三个辅助类:CountDown/CyclicBarrier/Semaphore
1:CountDown(减少计数)让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。/** * * @Description: * *让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。 * * CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。 * 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞), * 当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。 * * 解释
2020-08-12 11:10:37
150
原创 JUC---callable接口实现异步调用/多线程
获取多线程的方法 有几种传统的是继承thread类和实现runnable接口,java5以后又有实现callable接口和java的线程池获得Callable接口:1:先从写法上来看与实现runnable有啥不同1:接口需要实现的方法名不同2:callable中的call接口需要抛异常Runnable和Callable接口都是函数式接口,都能使用lambda表达式如何使用:可以看到Thread的Api,并没有可以传入Callable的方法通过FutureTask结合使用
2020-08-11 16:04:19
977
原创 JUC-多线程锁的范围
synchronized实现同步的基础:Java中的每一个对象都可以作 为锁。三种形式:1:对于静态同步方法,锁是当前类的Class对象。public static synchronized void xxx()静态同步方法锁的是当前类的Class对象:比如有3个Person的实例,第一个实例如果先进入了这个对象没出来,其他两个实例都无法进入这个静态同步方法,因为这个静态同步方法锁的是Class对象2::普通同步方法,其锁是当前实例对象public synchronized void x
2020-08-11 15:34:13
252
原创 JAVA集合--ArrayList集合分析
今天在看HashMap源码的时候突然涉及到了ArrayList的源码,现在来回忆下:ArrayList:Arraylist是一个实现List的可变数组,可以存储所有元素包括null;在此次源码的分析上总结可以优化的问题是:因为ArrayList是自动增长,随着ArrayList中不断增加元素;自动增长的话需要进行数据的重新拷贝,所以如果可以预知数据量的多少,可以在初始化ArrayList的时候就指定其容量,这样可以减少大量的数据重新拷贝操作,因为默认容量才10;其次也可以在应用程序使用其ensureCa
2020-08-10 23:35:29
205
原创 HashMap/HashSet有时出现输出有序问题,即源码分析
我们都知道Set的集合是无序集合的,但是有时却会出现有序;HashSet/HashMap一起说是因为HashSet底层实现就是HashMapHashSet<Integer> hashSet = new HashSet<>(); hashSet.add(3); hashSet.add(1); hashSet.add(7); hashSet.add(5); hashSet.add(4); S
2020-08-10 12:08:26
755
1
原创 JUC-集合类线程不安全问题
先来看:对一个ArrayList做一个并发写操作List<String> list =new ArrayList<>(); //通过多线程来证明 for (int i = 1; i <= 90; i++) { new Thread(()->{ list.add(UUID.randomUUID().toString().substring(0,8));
2020-08-09 12:20:52
202
原创 JUC-线程间定制化通讯
默认的情况下cpu是在随机切换线程,那你邮箱多个线程可以有规律的执行,那么多线程之间需要一些协调通信;Demo:多线程按照顺序调用:A->B->C三个线程启动,要求:AA答应5次,BB答应10次,CC打印15次接着AA答应5次,BB答应10次,CC打印15次…就这样重复10轮需要线程按照这就涉及到信号量:实现:/*** 多线程按循序调用,实现A->B->C * 三个线程启动,要求: * AA答应5次,BB答应10次,CC打印15次 * 接着 * A
2020-08-09 10:18:44
237
原创 JUC-线程间通讯(sychronized/lock)
线程间通讯 :多个线程在处理同一个资源的时候,当线程处理的任务不同。默认的情况下cpu是在随机切换线程,那你邮箱多个线程可以有规律的执行,那么多线程之间需要一些协调通信;需要线程通信来帮助解决线程之间对同一个变量的使用或操作,就是多个线程在操作同一份数据时,避免对同一共享变量的争夺。也就是我们需要通过一定的手段使各个线程能有效地利用资源,这种手段即——等待唤醒机制。比如我们实现实现一个线程对该变量加1,一个线程对该变量减1,* 交替,来10轮。这个就是典型的生产者+消费者+通知等待唤醒机制使用s
2020-08-09 00:00:33
146
原创 JUC-Lock接口替代synchronized
JUC:java.util.concurrent在并发编程中使用的工具类Lock接口java官方api中给其的解释:Lock implementations provide more extensive locking operations than can be obtained using synchronized methods and statements. They allow more flexible structuring, may have quite different pro
2020-08-08 23:31:11
178
原创 多线程回顾:概念
进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。线程:通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行
2020-08-08 22:47:07
118
原创 springcloud及其五大件(常用)理解
首先回顾下springcloud的理解及其的五大组件首先官网定义springcloud:什么是SpringCloudspringcloud基于springboot,大大简化开发;springcloud并不是一个框架,而是一个微服务整体架构,或者说springcloud是一个生态圈,里面包含了很多的服务,每一个服务独立存在,相互之间互不干扰,可以直接运行。 其实springcloud就是一个完整的微服务架构,提供了所有功能,整个开发项目中所需要的架构功能微服务都有,也就是说整个springcl
2020-08-08 19:13:53
719
原创 踩坑之服务端渲染技术Nuxt--笔记
1、什么是服务端渲染服务端渲染又称SSR (Server Side Render)是在服务端完成页面的内容,而不是在客户端通过AJAX获取数据。服务器端渲染(SSR)的优势主要在于:更好的 SEO,由于搜索引擎爬虫抓取工具可以直接查看完全渲染的页面。seo即 搜索引擎优化(Search Engine Optimization),它是指通过站内优化,如:网站结构调整、网站内容建设、网站代码优化以及站外优化等方法,来进行搜索引擎优化。简单说: 通过各种技术(手段)来确保,你的Web内容被搜素引擎最
2020-08-07 21:49:16
769
1
原创 OAuth2与JWT(单点登录)
什么是单点登录?现在的应用几乎都是分布式,实现一方遍登录,分布的模块都不需要在进行登录授权比如你在百度贴吧上登录了你的百度账号,在进入到贴吧的网页版,此时你是不需要重新登录就可以访问贴吧模块那么单点登录的实现?1:使用session广播:将存入sesion的信息分发到各分布的模块中,进行复制。这种方式的话在如今局限比较大,在并发小的时候是可以用。因为这种方式限制了横向session的扩张,每个模块中的session都是所有模块的session信息2:使用redis+cookie实现:使用re
2020-07-29 23:38:24
1663
原创 JVM--GC(分代收集算法)
GC(是jvm垃圾回收分代收集算法)为什么是分代呢,因为他在每个代中采用的不同的算法;堆的内存结构总体来说:次数上频繁收集Young区次数上较少收集Old区基本不动Perm区gc的主要几种算法及分布1.引用计数法:简单来说当这个引用计数为0时 清理不过这种算法也存在缺陷:循环引用,比如你引用我,我引用你;这样的话两个都计数都不可能为0,都会成为常驻内存,引起堆爆2:复制算法(Copying)(新生区的算法)年轻代中使用的是Minor GC,这种GC算法采用的是复制算法(Co
2020-07-09 01:18:17
1905
原创 堆的参数调优
首先回顾下Java7/8之间的堆内存模型和差别JAVA8中:Perm变成元空间;如果你运行程序慢,和经常出现OOM错误,我们可以先测试进行堆的参数调优;通过Runtime.getRuntime().maxMemory()/totalMemory 我们可以考到java的总内存和初始内存;默认来说:jvm启动的初始内存是:你的内存/64jvm的最大内存大小:你的内存/4开始对的参数调优:-Xms 初始内存大小 本机内存/64-Xmx 最大内存大小 本机内存/64在idea中调节VM参数:
2020-07-09 00:51:57
242
原创 对JVM进行回顾总结篇
1:JVM全称:Java Virtual MachineJVM是一种用于计算设备的规范按照这种规范实现的虚拟机:1:HotSpot– 其实在我们java1.8中就是使用这个虚拟机2:JRockit3:J9M前面两种都是被oracle收购2:JVM的体系结构:可以看到JVM是运行在操作系统上面,而于硬件系统进行交互的是操作系统,所以JVM于硬件没有直接的交互3:根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。1:run
2020-07-08 00:03:40
191
原创 mysql-主从复制(于redis主从的差异)
原理:可以看到:主机和从机的关系;Redis 是主机将操作写在rdb文件里,然后从机拿到这个文件直接覆盖自己的数据 且初始化数据,是从头开始复制;mysql不是,mysql是从接入点开始复制;简单来说在确定从属关系的时候,从机才开始复制,复制的是确立关系之后的数据;复制原理也不一样:redis是从属关系搭起来之后,主机做什么就直接同步给从机;– mysql是直接写在二进制日志中,然后从机读取这个日志在写入relay log中,然后在读在从机中执行;MySQL复制是异步的且串行化的–
2020-06-26 00:23:16
675
原创 Mysql- 视图基本使用
简单来说视图就是:将一段查询sql封装为一个虚拟的表。这个虚拟表只保存了sql逻辑,不会保存任何查询结果作用是:1、封装复杂sql语句,提高复用性2、逻辑放在数据库上面,更新不需要发布程序,面对频繁的需求变更更灵活语法+命名规则:创建:CREATE VIEW view_nameASSELECT column_name(s)FROM table_nameWHERE condition查询:select * from view_name更新:SELECT column_na
2020-06-26 00:11:36
137
原创 Mysql优化分析-索引如何建立与sql优化
随着我们的时间的推移,相关的数据表会变得越来越大;与此同时的数据库查询也会性能下降;执行时间变长…可能出现的问题:数据过多– 这个我们得将数据进行分库分表关联了太多的表,太多join查询– 需要进行SQL优化没有充分利用到索引– 索引建立==(1:mysql会自动创建主键索引;2:需要根据实际情况,创建索引)==服务器调优及各个参数设置– 调整my.cnf配置文件身为程序员,我们工作上能够接触的可能也就是我们写的sql语句,对sql语句的优化可以说是相当必要的,优化得当效果是非常客观
2020-06-16 23:59:12
1594
原创 MYSQL存储引擎介绍
mysql一共有这几种1、InnoDB存储引擎InnoDB是MySQL的默认事务型引擎,==它被设计用来处理大量的短期(short-lived)事务。==除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。2、MyISAM存储引擎MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务和行级锁,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。3、 Archive引擎Archive档案存储引擎只支持INSERT和SELECT操作,
2020-06-16 23:01:24
104
project2007.zip
2020-04-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人