- 博客(59)
- 资源 (11)
- 问答 (5)
- 收藏
- 关注
原创 mysql 权限apparmor=“DENIED“问题
简单记录下,最近安装一个mysql,但是修改了对应的数据文件的目录,也就是在/etc/mysql修改了对应配置文件修改了datadir 导致mysql无法启动,因为mysql是采用mysql用户启动,非root用户,所以去把的权限赋给mysql用户,大致就是权限都给了之后还是不对,利用查看具体的错误信息,出现类似的错误,开始还有别的目录显示这样,带着应该都是类似的问题。
2024-05-26 11:21:20
477
原创 下载文件出现302状态码处理
但是如果返回的是302状态码,那么就下载失败了,302 就是重定向的状态码,代表这个资源需要你去自己重定向到另一个地址进行下载,这时候如果在地址栏,浏览器可以处理,如果是在自己处理的请求逻辑里面,就需要自己判断状态码了,然后取response返回的header的Location字段的值,需要重定向的地址会存放到这里,这样就是个简单的跟随302重定向的demo,防止服务端出现302死循环或者潜逃过多,也可以设置最多重定向几次,可以加变量进行控制。这里提供一个使用hutool的跟随302的demo。
2024-01-22 16:22:56
1468
原创 Lock还是Synchronized怎么选
Lock更加适合高并发的情况,因为synchronized虽然进行了优化,但是这个锁升级的过程,在遇到高并发的时候都会升级成重量级锁,跟原来没太大的差别,Lock的性能不随着并发的增高明显降低,更加适应高并发的情况,在竞争度比较低的时候synchronized因为存在偏向锁,偏向锁的效率基本接近无锁,效率也比较高。
2023-12-01 18:48:28
240
原创 KMP算法
可能表达有些简陋,还是总结下,整体思想就是怎么简化查找字符串是不是存在的问题,减少遍历,即加了一个额外的数组,来存前面的共同的前缀的,跳到前一个匹配的完全匹配的位置继续匹配,达到了不需要回退长字符串,减少回退短字符串的效果,最主要的就是next的生成,怎么找到前一个共同前缀的位置,后面进行对比的思想是类似的。
2023-11-30 19:13:54
136
原创 RPC实现简单解析
提供服务可以采用netty或者别的也可以,然后服务暴露就需要自己完成去暴露了,这里没主动去解析,主要考虑的调用端,调用时候根据对应的注解,去生成代理对象进行注入,地址可以提供负载,然后进行调用,返回值通过回调的方式,回调之后通过改变对应的对象的状态,对其进行唤醒,就可以取到对应的返回值,一次rpc调用完成。
2023-11-15 19:00:37
772
原创 mysql 间隙锁
mysql 默认是可重复读的隔离级别,这种默认会有幻读,幻读指的什么现象呢,就是在同一个事物中前后两次查到的结果不一致,那么mysql是怎么解决幻读的呢,这就是mvcc。
2023-10-30 18:46:11
156
原创 一致性hash负载均衡
可以看到dubbo为了处理数据倾斜的问题,默认虚拟160个节点,然后根据地址加上对应的值,然后又采用每一位数字的hash算法进行散列,得到的值,采用的数据结构就是TreeMap,是一个可排序的Map,可以直接向上取,ceilingEntry,数据过来之后hash得到值,然后取对应的节点,TreeMap兼具一定的查找性能能。
2023-10-29 09:31:21
698
原创 按照权重负载的实现
大致总结下实现原理呢,就是把所有的服务提供者先列出来,放入到对应的map,有存储对应的服务者的权重信息,然后给其一个记录值 cur,然后每次遍历这些服务提供者,对其cur加上对应的权重值,然后找到cur最大的,选中让其执行,选中执行的,执行一次之后把对应的cur减去总的weight,举个例子,默认cur大家开始都是0,现在开始遍历。就是这样一遍遍的选择,选择cur最大的,因为cur是根据权重增加的,所以,权重大的被选中的次数更高,实现的很巧妙,也不至于出现不均衡。先看下dubbo怎么实现的,关键代码如下。
2023-10-28 14:11:46
135
原创 快速排序Java
快速排序就是主要在找一个数据的位置,partition就是在对一个数字找到对应的位置,大于他的放右边,小于他的放左边,这样得到了一个元素的位置,并且将一个数组的排序,分为了左右两边的排序,然后再对左右两边的进行同样的排序操作,递归即可完成对应的排序。
2023-10-24 22:38:53
690
原创 Java 两个线程实现生产者和消费者的问题
这里的await 就等于synchronized的wait ,signal等于synchronized的notify,signalAll等于synchronized的notifyAll方法,都需要在持有锁的情况下进行使用。
2023-10-24 22:15:14
200
原创 Synchronized 的wait 和notify
这里需要注意的点就是当前wait之后,代码块执行的位置记录不会改变,下次唤醒之后,获取到锁的话,直接执行,不会重新走上面判断,wait需要在持有锁的时候使用,notify和notifyAll也是。
2023-10-24 21:56:49
159
原创 设计模式-责任链模式
这里就是责任链模式的实现了税率的计算,只要是责任链,基本套路就是一样的,可以定一个基类,然后子类就去继承,然后实现对应的处理逻辑,可以在父类里面直接调用下一个,然后子类里面实现当前符合的计算逻辑,最后加一个Chain类进行组链,调用链的计算方法就可以了。这里先实现了一个基本的Handler(其实也可以不用,因为这里实际上只给了一个实现handler),当有多个的时候需要一个共同的父类。这里是具体的实现的一个段的一个率的计算方式。遇到一个面试的场景题目,让实现税率的计算。增加一个链的类,用来组对应的链结构。
2023-08-23 18:16:37
681
原创 ConcurrentHashMap 1.8源码分析
分析下1.8的ConcurrentHashMap是怎么进行实现的,怎么保证数据安全的,跟1.7的差别在哪,做了哪些优化,还是从构造方法开始看吧构造参数简单看下得到的是并发粒度默认的是1,初始化的容量含义跟之前的HashMap存在差别,之前是在*加载因子,现在直接作为实际的容量,去除以加载因子,得到需要初始化的数组长度,接下来还是看下put方法逻辑吧简单总结下,跟1.7的差别是不使用分段锁了,如果没有hash冲突直接cas替换下,不成功的话,再锁头节点进行安全操作,在synchronized里面操作,然后
2023-08-17 15:31:06
134
原创 ThreadLocal原理
ThreadLocal是常用的存储线程独有变量的,怎么实现的每个线程独有的,并且实现的线程间安全的呢,听说的内存泄漏是什么情况,有什么影响?简单总结下put的过程,获取当前线程,然后找到线程的成员变量threadLocals,如果变量未初始化,就初始化一个map放进去,如果已经初始化过的,就直接key为ThreadLocal本身,value为存入的值,创建的map赋值给Thread的成员变量threadLocals,所以这里就能看出来为什么线程独有,线程安全,因为数据就是存储在线程里面,可以认为就是线程私
2023-08-16 20:04:05
98
原创 Springboot自动装配原理
springboot的自动装配有@EnableAutoConfuration注解来实现的,注解为一个复合注解,里面存在@AutoConfurationPackage 这里是在扫描指定的包下的,不指定就是启动类所在的目录下的,里面也是在@Import 一个实现了BeanDefinitionRegistrar 的类来实现把对应的包交给其进行后续扫描创建BeanDefinition,这里在扫描自己写的代码。
2023-08-14 16:28:31
422
原创 Semaphore 原理分析
简单总结下吧,Semaphore 通过AQS的state来控制并发数量,也分为公平和非公平,但是使用的是共享锁,这样就能根据数量进行唤醒,AQS提供的方法tryAcquire 让子类实现的,返回正数代表可以继续向后唤醒,返回0自己得到资源可以执行,就通过这样的形式来控制并发。
2023-08-14 16:10:37
139
原创 CountDownLatch 源码解读
countDownLatch是在利用AQS的共享锁来实现的,主要就是设置一个初始的值,然后await是在判断state是不是为0,为0的时候就返回1,也就是继续向后传播,会唤醒后续所有的等待节点,countDown是在对设置的state减1,这里countDownLatch自己实现的tryRelease方法,就是对其减1,然后判断结果是不是为0,为0的时候返回true对排队的进行唤醒。
2023-08-11 11:27:07
123
原创 AQS分析
常说的AQS工具类就是 AbstractQueuedSynchronizer� 常见的ReentrantLock,Semaphore,CountDownLatch 都是基于它实现的并发控制,你也可以基于AQS比较简单的实现自定义的锁,下面看下AQS里面一些主要方法是怎么进行实现的。简单看下Node 的成员变量可以看到里面定义了一个Node结构,存放了waitStatus来表明现在节点的状态,-1,-2,-3 代表不同的等待状态,1为取消,然后定义了持有的线程,和前后节点,即是个双向链表结构,简单了解下结构
2023-08-10 13:48:36
110
原创 ReentrantLock分析
ReentrantLock是常用的控制并发安全的lock实现了,里面主要包含lock()加锁方法,unlock()释放锁的方法,内部又分为公平锁和非公平锁,简单看下怎么实现的吧简单提下lock自己平时怎么用的Sync 内部类Sync 主要定义了锁的一些常用操作,可以看到它继承了AbstractQueuedSynchronizer,这里才是重要的,这里后面单独文章分析下,然后公平锁和非公平锁继承Sync,差别就在于加锁这点总结可以看到ReentrantLock里面主要就是内部类提供了公平锁和非公平
2023-08-08 15:53:29
110
原创 分布式锁原理实现
分布式锁对应的就是单机锁了,可以参考ReentrantLock,需要实现分布式锁的功能,那么锁的资源一定是大家共享的,那就需要一个中间件来承担这个锁资源的角色,常见的就是使用redis来实现,可以使用其key-value形式,把锁作为key,线程的id作为value,然后是不是需要给锁设置超时,不超时带来的问题就是如果发生异常,或者服务器宕机没释放锁,那么就造成死锁,如果设置超时时间有什么问题呢,如果超时时间内对应的业务没处理完成怎么办,如果锁直接被释放了,那保证不到并发安全了,所以要对超时时间进行维护,释
2023-08-08 15:26:32
107
原创 ConcurrentHashMap1.7 源码浅析
分析过HashMap的1.7的版本的结构,但是HashMap是线程不安全的,多线程触发扩容还会发生死循环问题,那么ConcurrentHashMap 就是解决这个问题的,这是一个线程安全的Map,那么对应的内部实现是怎么样的,简单分析下,和HashMap相同的位置就不多做重复分析了这是个最基础的构造方法,需要的参数有容量,扩容因子,这是和HashMap相同的地方,但是多了一个并发水平选项,这里默认值是16,也就是并发粒度的控制,最多可以16个线程同时加锁对Map处理,我们看下具体怎么做的。从构造方法来看,
2023-08-04 09:55:09
177
原创 HashMap1.8原理浅析
HashMap的结构和原理经常会被问到,比较经典的结构存储,1.8又对之前1.7做了较大优化,所以经常放在一起对比,这里分析下1.8的实现,并且总结下和1.7之间的差别。构造方法里面基本一致,就是赋值下对应的容量和扩容因子,不过对比1.7的确认数组长度提前,计算长度算法改变了下,不影响大局比较关键的还是HashMap的put方法,可以说是map里面的核心,下面来看下put的实现这里put的流程简单总结下,如果数组未初始化先调用resize进行初始化,然后计算对应的位置,如果hash不冲突直接存入,has
2023-08-02 21:46:09
289
原创 HashMap1.7原理浅析
HashMap大家通常喜欢拿1.7和1.8进行比较,虽然现在基本都升级成java8了,但是有时候会聊到,有些原理会搞不太清楚,那么就来确认下1.7的各个参数的含义以及怎么进行插入和扩容的。
2023-08-01 19:34:07
287
原创 ThreadPoolExcuter源码阅读
总结下,就是线程是不是常驻线程,会不会超时,怎么进行控制的,主要就是通过getTask里面进行区别对待的,使用工作队列的take()和poll()来进行区别设置超时时间,超时的再执行消除,然后返回的task就是null,由上层执行销毁线程的操作。简单总结下,判断下添加工作线程,线程池是不是运行状态,是不是达到了设置的核心线程和最大线程限制,不符合条件的直接返回添加失败,符合条件的进行添加,如果添加成功,跳出循环,没添加成功就继续循环cas添加。可以自定义线程的拒绝策略,默认提供拒绝策略主要分为四种。
2023-08-01 15:47:59
75
原创 OpenFeign设置超时时间的几种情况
这样就可以设置contextId对应的超时时间,contextId不与服务名字重复,feign优先按照contextId进行查找自定义超时配置,无contextId的时候使用服务名字找。可以拆分一个类进行设置contextId,然后对这个contextId进行设置。如果还想更细粒度的区分也可以通过contxtId进行区分。相对hapi-service这个服务生效的配置。默认给openfeign设置超时时间。这样可以单独对一个服务进行设置。如果想对某一个服务生效,比如。
2023-07-06 15:45:28
4229
原创 集合之List问题分析
java基础的面试题少不了要问集合,集合呢,总的来分,List,Set,Map,今天就分析下ListList 的印象大概是 集合,有序,元素可重复等等List的子类常见的有ArrayList,LinkedList,Vector,那么三个实现类具体什么区别呢,为啥大家都喜欢问这三个区别呢ArrayList对于ArrayList 主要应该是 内部数组实现,对于查询效率较高,对于增删效率相对较低,那么为什么查询效率就高,增删效率就低呢?主要是内部是数组实现的,当新增元素的时候,需要移动数组,有时需要阔容
2021-03-27 15:51:59
182
原创 空指针不打印堆栈信息怎么办?
遇到空指针异常 ,但是看不到堆栈信息,这怎么排查问题,只需要加一个jvm参数就可以搞定了-XX:-OmitStackTraceInFastThrow
2021-03-18 11:19:27
922
原创 HashMap源码阅读(二,关键方法理解)
HashMap(jdk1.8)HashMap的初始化容量,当输入为25的时候,n等于24,转成二进制为1100,右移1位为0110,将1100与0110进行或("|")操作,得到1110。接下来右移两位得11,再进行或操作得1111,接下来操作n的值就不会变化了。最后返回的时候,返回n+1,也就是10000,十进制为32。按照这种逻辑得到2的n次幂的数,容量为int类型,int的范围内的所有数,经过方法的位运算都会产生2的N次幂,HashMap的容量总是2的n次幂,利于HashMap后续查找。/**
2020-09-16 09:49:34
121
原创 HashMap源码阅读(一,默认的参数说明)
HashMap(jdk1.8)默认的初始化大小,当不指定Map的大小的时候默认值 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16默认的负荷系数,其实就是HashMap用到的需要阔容的阈值,默认为0.75,无特殊要求最好不动他,比如HashMap的容量是16,负荷系数是0.75,那么当map里面存了12个值的时候已经达到了需要阔容的阈值,当再新增值的时候,会发生阔容,值的大小影响到map的hash碰撞
2020-09-14 18:33:56
210
原创 微信支付签名验证失败的问题
微信签名验证失败(两个地方遇到)第一个在统一下单的时候签名验证失败去微信社区里面查了下,有些人是自己代码错的,但是我拿的微信sdk的demo代码做的改造,然后检查几遍也没看出来问题,我用的是小程序支付,code获取openid没问题,证明我的appid,appsecret没问题,看到有人说是商户密钥问题,其实商户密钥也没问题,可能是微信设置完没生效吧,多重置几遍之后好了,统一下单关键代码public Map<String, String> wxPay(String openId, Str
2020-09-11 09:08:30
3941
原创 记录下微信回调的处理
标题微信的回调消息业务用到了微信的回调,就是动态二维码,别人扫了关注公众号之后会给服务器进行发送消息,包括普通的关注,取消关注也会消息发送,微信对话等,都会转发到自定义的服务器在微信公众号的基本设置,服务器配置设置url,启动之前就需要验证,开始启用之后会调用服务器接口服务器需要专门一个接口来处理微信消息,验证参数,正确的才会进行处理,这个接口不能有任何权限限制,应该为都可以访问,但是接口内部对接口参数进行验证@RequestMapping(value = "/dealMessage", pro
2020-09-08 09:29:43
834
原创 vue design pro部署nginx刷新404问题
遇到nginx部署vue design pro的项目,正常访问,但是刷新会404,需要在nginx加个配置,记录下try_files $uri $uri/ /index.html;
2020-09-04 18:19:36
323
原创 idea使用gradle进行build时报错 Cause: zip END header not found
idea刚开始使用gradle遇到idea的提示,选个ok,结果不能正常使用了提示 Cause: zip END header not found这里应该是idea把gradle-wrapper.properties文件改了,导致的暂时没明白改了需要相应的做出别的什么修改,就想着先用着,于是就把这个文件恢复成默认的就行了,我又创建的gradle的项目,拷贝出来的默认的文件内容distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/d
2020-09-03 17:58:11
4465
原创 一个nginx和tomcat的限制大小的坑
现在很多java web服务都会是nginx+tomcat的,但是有遇到前端传的参数,在后台的日志打印的是参数为空,找前端对峙了好几遍,而且是数据量比较大的时候会发生,请求会到服务器,但是没有参数,查阅资料得知nginx和tomcat都会有参数的最大限制,tomcat默认是2M,可以在connector里面增加参数maxPostSize=“20971520” 代表20M,maxPostSize="...
2020-05-05 22:33:03
434
原创 mintui loadmore 上拉遇到的一些问题
使用mintui的loadmore组件的时候遇到的一点问题在使用loadmore的时候,上拉获取更多数据的时候遇到的几种问题初始化的时候死循环请求接口开始把loadmore加上的时候,加上就会导致死循环请求接口,浏览器无响应,因为loadmore初始化的时候auto-fill默认为true,就是会请求数据填满窗口,当你没数据的时候需要设置allLoaded 为true进行标识没数据了,需要在...
2020-05-05 16:52:05
768
1
原创 Centos7配置静态ip并使其能上网
最近安装的centos7的虚拟机,因为默认使dhcp的导致重启可能会变ip,导致使用的时候ip不确定,很不方便,所以配了静态ip,但是导致不能上网了。网上搜了很多的资料,但是都没解决我的问题,最后是多个整合才搞定最终是改了三个文件,这个文件名会根据网卡名称导致稍微差别vim /etc/sysconfig/network-scripts/ifcfg-ens33 改了几个位置,主要是这几个属...
2020-04-22 10:05:54
485
原创 vue怎么处理需要在body上加class样式的需求呢
html里面是可以在body上面添加class样式来达到自己想要的效果,但是如果改成vue的单页面应用,就没有body这个属性了,那需要怎么才能把样式加上呢,肯定不能直接在template标签上加吧,比如<html> <body class ="grayColor"> </body></html>这样的页面样式转换到vue中需要怎么动呢,...
2020-04-18 14:14:23
3995
tomcat源码运行缺少jar
2021-09-29
Tampermonkey.zip
2020-11-02
Another-Redis-Desktop-Manager.1.3.8.rar
2020-09-16
jTessBoxEditor-2.2.0 .zip
2019-06-10
wkhtmltopdf怎么打印vue页面 ,我打印出来的是空白页面
2019-11-25
Chrome浏览器操作阿里云的RDS控制台进行手工sql查询很卡
2019-11-04
html转word(java)不要中文乱码的,转换比较好的
2019-09-11
vue2.0 vue-scroller
2018-10-18
vue2.0整合swiper4.0的兼容性问题
2018-10-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人