- 博客(77)
- 收藏
- 关注
原创 kafka消费报错 UNKNOWN_TOPIC_OR_PARTITION
2022-05-06 13:50:38.624 [kafka-producer-network-thread | producer-1] LEVEL.WARN [traceId:] o.apache.kafka.clients.NetworkClient.handleSuccessfulResponse(1070) - [Producer clientId=producer-1] Error while fetching metadata with correlation id 6823 : {inv
2022-05-06 14:14:32
10956
3
原创 spring boot集成es报错:nested exception is java.lang.NoSuchFieldError: IGNORE_DEPRECATIONS
Factory method ‘esRestClinet’ threw exception; nested exception is java.lang.NoError starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2021-08-30 15:51:49.699 ERROR [traceId:] 3247 --- [ .
2021-08-30 16:32:54
5575
2
原创 Redis和数据库数据一致性问题
数据一致性问题如果对一致性要求极高那么不建议使用缓存.在Redis缓存中经常会遇到数据一致性问题,下面罗列几种情况1.先更新数据库,再删除缓存2.先删除缓存,再更新数据库3.双删(先删除缓存,再更新数据库,再删除缓存)情况(1): T2先更新缓存,T1再删除缓存(数据一致)情况(2): T1先删除缓存,T2再更新缓存 (数据不一致)4.延时双删策略延时双删能尽量保证,如上情况(1),但是延迟删除的时间内可能会造成脏数据.总结无论哪种都不能保证数据完全一致性,强一致性的只能
2021-08-15 11:55:24
392
原创 Random 高并发下的缺点(美团面试题) 替代方案JUC下的 ThreadLocalRandom
Random 高并发下的缺点大量CAS导致CPU飙高 Random random = new Random(); System.out.println(random.nextInt(100));一、奇怪的命名random.nextInt() 奇怪的命名,获取值为什么不是通常的 “get”, “create”,“generate”等常见的命名.random生成的随机数,并不是真正的随机,它有一个种子的概念,是根据种子值来计算【下一个】值的,如果种子值相同,那么它生成出来的随机数也必定相等,也
2021-08-07 14:58:46
618
原创 GC 的几种主要的收集方法:标记清除、标记整理、copy算法的原理、特点、各自的优劣势
搞懂垃圾回收的机制,先搞懂垃圾回收的是哪些数据,这些数据在哪块区域,所以我们先看JVM内存区域线程私有虚拟机栈:生命周期和线程相同,每个方法执行之前会被创建,保存局部变量等。进入方法前入栈和方法执行结束出栈,所以不需要进行GC本地方法栈:为虚拟机栈提供服务支持的,运行Java方法 >>> 虚拟机栈 >>> 本地方栈 。所以不需要进行GC程序计数器:线程执行字节码的行号指示器,Java虚拟机多线程是轮流切换的(上下文切换),每个线程如何知道上一次执行.
2021-01-08 17:19:49
951
1
原创 spring netty websocket 服务端开发
场景需求: 由于公司是做在线教育的,客户的定制化需求,要求同一个账号同时只能观看一个视频。(BS)分析: 刚开始想过监听浏览器的close()事件,打开视频向redis 中存一个status,关闭浏览器修改这个status。但是不能处理极端情况如: 强制杀死进程、断电等(不考虑缓存播放视频的情况)方案: 想到socket,自然想到netty对socket 的支持非常好。为什么选择netty?API使用简单,开发门槛低功能强大,预置了多种编解码器功能几行代码,就能解决粘包\拆包问题成熟、稳定
2020-09-27 11:48:16
886
原创 为什么JDK代理不像CGLib代理一样继承目标类就可以动态代理呢?
为什么JDK代理不像CGLib代理一样继承目标类反而去实现其接口呢?因为JDK代理生成的代理类,默认会继承Proxy 类,由于java是单继承,所以不能继承目标类只能实现其接口1.首先把JDK动态代理生成的类: 继承了Proxy类不能再继承2.再把gclib动态代理,生成的类:输入jdk代理类可以再main中加入System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");输入gclib代理
2020-09-02 16:26:57
505
原创 Mysql error: Query execution was interrupted, maximum statement execution time exceeded
查询执行被中断,超过了最大语句执行时间,1.查询数据库最大语句执行时间,默认为10sSELECT @@global.max_execution_time2.设置最大执行时间, 设置为30sSET global max_execution_time = 30000;
2020-08-23 17:38:23
16744
原创 Redis-cluster集群搭建
1.1 Redis-cluster介绍当高并发写请求较大时,哨兵模式并不能缓解写压力,Redis-cluster分片策略就是解决这个问题的。集群将整个数据库分为16384个槽位slot,所有key-value数据都存储在这些slot中的某一个上,一个slot槽位可以存放多个数据。集群中的每个主节点都可以处理0个至16383个槽,当16384个槽都有某个节点在负责处理时,集群进入上线状态,并开...
2020-04-02 15:16:51
421
原创 Spring @transactional注解和synchronized同时使用出现的并发问题(可重复读问题)和解决办法
今天在用jmeter进行压力测试的时候,出现了并发问题,代码如下:@Override@Transactionalpublic synchronized CouponsH5Respons getACoupons() { .....}当时很疑惑,synchronized已经放在了方法级别,不应该出现并发的情况,于是我用IDEA的条件断点,一路跟下去,发现了重复读的问题(数据库是Mys...
2020-03-25 17:20:05
3887
8
原创 Tomcat虚拟路径
在tomcat/conf/Catalina/localhost 这种方式配置虚拟路径好处:方便管理,如果配置多个虚拟路径的话不用全部配置在server.xml不用重启tomcat 增加修改即时生效。[root@instance-f4khj00x localhost]# pwd/home/app/tomcat/conf/Catalina/localhost# 进入到该目录下 创建任意文件名...
2019-12-28 23:09:19
236
原创 Docker push报错 :denied: requested access to the resource is denied
在排除没有登录和网络的原因:我还是报的如下错误原因镜像的名字没有按照规范命名:你的dockerHub用户名/镜像名字:镜像版本#我把 my_redis:v1 改成了 langxuhao/my_redis:v2 [root@instance-f4khj00x ~]# docker push langxuhao/my_redis:v2 The push refers to reposito...
2019-12-27 14:34:34
1826
原创 Docker 启动redis指定配置文件
一.docker中安装好redis后如下,我安装的是reidis5.0.5版本二.指定redis.conf 启动docker run -p 6379:6379 --name iredis -v /home/docker/redis/config/redis.conf:/etc/redis/redis.conf -v /home/docker/redis/data:/data -d redis...
2019-12-18 15:25:33
11374
5
原创 spring swagger2 + swagger-bootstrap-ui +swgger分组 。简单几步10分钟轻松搞定
界面风格: 这里我进行了分组 API 和 H51 引入相关jar包<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.2.2</version></...
2019-11-28 14:12:50
1328
原创 JSON error Could not write content: Object is null (through reference
org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Object is null (through reference chain: cn.steam.response.ResponseEntityBase["data"]->java.util.HashMap...
2019-11-19 17:14:34
2633
原创 IOException:request to write '8024' bytes exceeds size in header of '0' bytes for entry
java.io.IOException: request to write '8024' bytes exceeds size in header of '0' bytes for entry 'TBND_0.xls' at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.write(TarArchiveOutpu...
2019-10-14 16:36:10
3150
原创 微服务分布式session共享解决方案
有几种解决的方案:1.tomcat的session共享优点:不需要额外开发,只需搭建tomcat集群即可缺点:tomcat 是全局session复制,集群内每个tomcat的session完全同步(也就是任何时候都完全一样的) 在大规模应用的时候,用户过多,集群内tomcat数量过多,session的全局复制会导致集群性能下降, 因此,tomcat的数量不能太多,而且依赖tomcat容器移植...
2019-08-16 23:13:40
8297
5
原创 倒计时器CountDownLatch 和 循环栅栏:CyclicBarrier
一 概念:1.在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方法,让主线程等待被join的线程执行完之后,主线程才能继续往下执行。当然,使用线程间消息通信机制也可以完成。其实,java并发工具类中为我们提供了类似“倒计时”这样的工具类,可以十分方便的完成所说的这种业务场景。2.为了能...
2019-08-02 17:24:55
767
原创 Mybatis 一级缓存和引发的问题
一Mybatis 是默认开启一级缓存的。跟Spring结合使用的话执行的方法必须开启事务,一级缓存才有效,原因我们稍后解答。当查询数据时候,先从缓存中寻找是否存在该条数据,存在就直接取出来,不存在,向数据库发送sql查询, 然后将查询后的数据存入缓存返回给程序。二 验证1.开启事务,一级缓存有效。从日志看到确实只执行了一次查询。@Test@Transactionalpublic vo...
2019-06-20 14:00:19
6709
原创 Spring AOP动态代理的实现方式
"JDK"动态代理和"CGLIB"动态代理JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和Proxy类CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那...
2019-06-06 23:20:57
13132
2
原创 算法:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度(时间复杂度O(n))
时间复杂度:O(2n) = O(n)O(2n)=O(n),在最糟糕的情况下,每个字符将被 startIdx 和 endIdx 访问两次示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "p...
2019-05-29 14:00:30
3250
原创 Oracle xmlagg拼接函数 多行转单行
语法:xmlagg(xmlparse(content 拼接字段 || ','wellformed) order by 排序字段).getclobval()例如:取出所有的城市ID 为一行数据。select xmlagg(xmlparse(content t.ID || ',' wellformed) order by t.pid).getclobval()from DEMO t;...
2019-05-20 17:18:09
10417
10
原创 Oracle Start With (树查询)
在数据库中, 有一种比较常见得设计模式, 层级结构设计模式--创建测试表和数据create table DEMO (ID varchar2(10) primary key, DSC varchar2(100), PID varchar2(10));Insert Into DEMO values ('00001', '中国', '-1');Insert Into DEMO values ('...
2019-05-20 16:58:39
8465
原创 Oracle INSTR函数用法
一、instr函数的用法在一个字符串中查找指定的字符,返回被查找到字符的位置。二、instr参数解释instr(sourceString,destString,start,appearPosition) instr('源字符串' , '目标字符串' ,'开始位置','第几次出现')函数返回值:查找到的字符串的位置,从1开始。如果没有查找到,返回0。注意:'开始位置'和'第几次出现'不指...
2019-05-12 13:19:46
1167
原创 redis启动停止,查看redis端口
查看所有redis进程ps aux|grep redis停止rediskill -9 20024 //根据pid来暴力停止redis进程,这里我只停止了其中一个redis后台启动redis集群和sentinel并且指定配置文件启动redis[app01@gcdc-wxtest01 ~]$ cd redis/bin/[app01@gcdc-wxtest01 bin]$ ...
2019-03-11 15:16:30
32851
1
原创 linux环境下安装启动activemq
1.下载安装包activemq官网下载安装包//修改运行权限[root@xuhao app]# chmod 777 apache-activemq-5.14.5-bin.tar.gz //解压到当前目录[root@xuhao app]# tar -zxvf apache-activemq-5.14.5-bin.tar.gz 解压后的文件:3.启动mq进到bin目录下 执行...
2019-03-09 18:44:00
6134
1
原创 JSsignature_pad 无纸化电子签名(复制粘贴直接用)
&lt;!DOCTYPE html&gt;&lt;html lang="en"&gt;&lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;meta http-equiv="x-ua-compatible"
2019-03-05 10:39:28
8457
1
原创 spring mvc拦截器 需求:在controller层的方法上,使用自定义注解的方式 不拦截指定请求
原来是在controller类上实现此需求缺点:只能是整个controller类下的方法全部放开拦截,不能放开其中某个方法,颗粒度太高。1.首先是自定义的Annocationimport java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Re...
2019-03-04 22:43:58
4922
原创 设计模式之:模板模式
1.定义模板采用抽象类来定义,为什么不是接口呢?因为公共的结构化逻辑需要在抽象类中完成,只将非公共的部分逻辑抽象成抽象方法,留待子类充实实现。2.模板模式就是通过抽象类来定义一个逻辑模板,逻辑框架、逻辑原型,然后将无法决定的部分抽象成抽象类交由子类来实现,一般这些抽象类的调用逻辑还是在抽象类中完成的。这么看来,模板就是定义一个框架example : 建造房子为例共有的行为:1.安装门 2....
2019-02-18 15:55:33
163
原创 spring cloud和spring boot 区别
spring cloud是基于spring boot的一种框架,包括 eureka、ribbon、 feign、 zuul 、hystrix等Spring Boot是基于Spring的一套快速配置脚手架Spring Boot可以离开 Spring Cloud独立使用开发项目,但是 Spring Cloud离不开 Spring Bootspring boot使用了默认大于配置的理念,很多集成...
2019-02-03 20:39:35
12305
3
原创 redis 和 memcached区别是什么?
数据类型不同,redis有五种(list set string hash zset),memcached只有一种stringRedis支持数据的备份,即master-slave模式的数据备份。Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。value大小redis最大可以达到1GB,而memcache只有1MB...
2019-02-03 20:09:54
13426
原创 restTemplate报错 ClassCastException: java.util.LinkedHashMap cannot be cast to
在使用restTemplate调用接口的时候,如果返回值类型是List,那么在调用此接口时 返回值类型不能用List.class接受 应该改成 T[].class如下示例:List<UserMy> forObject = restTemplate.getForObject("http://127.0.0.1:7080/test", List.class);这样接收会报:jav...
2019-01-27 22:42:05
3368
原创 Java单例模式 饿汉、懒汉的区别?
1.懒汉式public class SingleMode { private static volatile SingleMode singleMode; //构造器私有化的同时,还需防止利用发射实例化对象,所以当实例化对象时抛出异常 private SingleMode() { if (singleMode != null) { throw new RuntimeExcep...
2019-01-25 22:55:08
639
原创 Java中会出现内存泄露吗?
内存泄漏是指不再被使用的对象或者变量一直被占据在内存中。虽然java中有垃圾回收机制,它能够将不再被使用的对象,自动从内存中清除。即使这样,java中也存在着内存泄漏的情况:当长生命周期的对象持有短生命周期的对象的引用,就很可能发生内存泄漏。尽管短生命周期的对象已经不再需要,但是长生命周期的对象一直持有它的引用导致其无法被回收。例如,缓存系统;加载一个对象放在缓存系统中,一直不去使用这个...
2019-01-24 22:52:17
1521
原创 ThreadPoolExecutor 四种策略
一、检查libevent首先检查系统中是否安装了libevent[root@xuhao ~]# rpm -qa|grep libeventlibevent-devel-2.0.21-4.el7.x86_64libevent-2.0.21-4.el7.x86_64如果安装了则查看libevent的安装路径,后续安装时需要用到[root@xuhao ~]# rpm -ql libeven...
2019-01-20 23:02:28
644
原创 spring MVC和spring boot 的区别在哪?
1.首先这两者专注的领域不同,解决的问题也不一样2.Spring MVC是基于 Servlet 的一个 MVC 框架,通过Dispatcher Servlet, ModelAndView解决 WEB 开发的问题.但是它的配置繁琐,大量 .xml、.properties文件。并且用maven管理项目的时候很容易出现jar包冲突。2.而Spring Boot 是基于Spring的一套快速开发整合包...
2019-01-19 13:32:43
10503
4
原创 图片预览插件Viewer js版本用法
//gitHub 源码有demo 和 js css 源文件https://github.com/fengyuanchen/viewerjs1.打开docs/index.html2.打开后如下3.点击图片有如下的功能
2019-01-14 17:58:46
626
原创 sql 查询出部门工资第二高的人
这是今天面试官的一个考题,数据结构如下要求查询出每个部门分数第二高的人,虽然是一个很简单的表,但远没有我想的那样简单。我的思路如下整体思路:排除掉每个部门分数最高的人,再求出部门分数最高的人。1.查询出每个部门最高分---先分组 ---再用max()函数查询出 每组(部门)分数最高的人SELECT department,MAX(score)as score FROM User GR...
2019-01-12 23:13:48
6748
3
原创 HTTP协议的8种请求类型----Get和Post的区别
一1.GET通过URL传递参数,POST是通过request body传递,GET请求在URL中传送的参数是有长度限制的,而POST没有。2.GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。3.GET是等幂的,而POST不是。幂等的意思就是一个操作不会修改状态信息,并且每次操作的时候都返回同样的结果。即:做多次和做一次的效果是一样的,在web设计上即指多次HT...
2019-01-12 16:51:33
1105
原创 Java控制并发之——volatile关键字
控制并发的三大要素:可见性、原子性、有序性。那么volatile就是控制元素的可见性下面介绍线程读取量变的过程描述:1.假设对象中有一属性:private static int money = 100; 现有2个线程对他进行操作。2.线程A、B的是从他们各自的线程工作区读取的属性值,工作区的值由主内存得到。3.现在money 在A、B中各一份,如果A中:money=money-20,...
2018-12-24 22:29:13
230
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人