自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不见其长,日有所长

技术学习、总结、分享

  • 博客(322)
  • 收藏
  • 关注

转载 使用jstack排查线上故障:高CPU占用

一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。我们以当时出现的实际故障为例,来介绍怎么定位和解决这类问题。top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。ps命令:Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。

2022-10-08 17:00:23 2229 1

转载 java程序CPU使用率高可能的原因

在Java并发编程方面,如何在多线程环境中设置合理的线程数,那我们需要了解两个概念:计算密集型要进行大量的计算、逻辑判断等操作,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数,我们设置线程数一般是:计算机。计算密集型任务由于主要消耗CPU资源,因此,代码运行效率至关重要。Python这样

2022-07-01 11:24:22 11786 1

转载 解决BeanNotOfRequiredTypeException办法(@Autowired和@Resource注解的不同)

一般在使用的方式注入的 出现的,具体是由于spring采用代理的机制导致的,看使用的代码:不能使用的动态代理注入,原因是的动态代理不支持注入,只支持方式注入;可以使用动态代理注入;如果要使用的方式,必须使用代理;当然了推荐使用的方式,基于接口编程的方式!使用也是可以的,建议试一下这个注解:3种配置,只要使用一种即可,设置为即使用的方式代理对象。附:的代理判断逻辑:...

2022-06-22 10:42:54 3778

原创 outlook的<规则和通知>闪退问题解决

点击的按钮闪退,无法创建和管理规则。关闭;找到的路径:我的路径为:执行清除所有规则命令:在命令行中执行:

2022-06-13 11:22:46 3099 2

原创 java中将方法当作参数传递的方式

1. 使用consumer接口在Java8中引入了一个函数式接口Consumer的对象,该对象可以把方法作为参数进行传递。接口定义:@FunctionalInterfacepublic interface Consumer<T> { void accept(T t); default Consumer<T> andThen(Consumer<? super T> after) { Objects.requireNo

2021-11-25 19:50:29 25140 1

转载 Java中为什么要同时重写equals()和hashcode()方法

1. 背景 String a=new String("123"); String b=new String("123");我们知道,在java中 a == b 比较的是对象的在内存中的物理地址,equals()方法的作用本来和==相同,也是比较两者的物理地址,但String类重写了equals()方法,于是String类的equals方法变成了比较两个字符串对象的字符串内容是否相等。2. equals()和hashcode()方法需要同时重写的原因首先,我们要明白ha

2021-11-12 17:45:26 1088

转载 Elasticsearch的match和match_phrase查询

1. match_phasematch_phase习语匹配,查询确切的phase,在对查询字段定义了分词器的情况下,会使用分词器对输入进行分词,然后返回满足下述两个条件的document:1.match_phase中的所有term都出现在待查询字段之中2.待查询字段之中的所有term都必须和match_phase具有相同的顺序{ "foo":"I just said hello world" }{ "foo":"Hello world" }{ "foo":"World Hello" }

2021-10-28 09:41:51 1264

转载 关于@RequestBody无法获取boolean类型请求参数的解决

1. 问题描述不知道大家在用java写后台接口与前端联调时有没有遇到过这个坑,就是我使用@RequestBody来修饰AddUpdateDecisionFlowRequestVo对象进而来接收前端的请求时,AddUpdateDecisionFlowRequestVo对象里面的isStart这个boolean类型的变量是没有接收到任何值的,如下图所示:private boolean isStart;从上图可看到,怎么好端端的isStart请求参数变成了start了呢,从网上google了下,发现有

2021-09-29 17:42:21 1350

转载 Java中泛型的使用

1. 概述在前面学习集合时,我们知道了集合中是可以存放任意对象的,只要把对象存储到集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作时,必须采用类型转换。比如下面程序:public static void main(String[] args) { List list = new ArrayList(); list.add("abc"); list.add("def"); list.add(123);// 由于集合没有做任何限定,任何类型

2021-09-15 10:57:48 395

转载 轻松理解Hbase面向列的存储

1. 前言从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,请各位看官注意这一点。1.1 行式存储传统的数据库是关系型的,且是按行来存储的。如下图:其中只有张三把一行数据填满了,李四王五赵六的行都没有填满。因为这里的行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有。1.2 列式存储为了与传统的区别,新型数据库叫做非关系型数据库,是按列来存储的。如下图:初次看列式存储稍微有点懵,下面给出行存与列存的转换:原来张三的一列(单元格)数据对应现在

2021-08-28 10:20:41 780

转载 为什么 OLAP 需要列式存储

1. OLTP和OLAP简介对数据库稍有了解的读者都知道,在线事务处理(Online Transaction Processing,OLTP)和在线分析处理(Online Analytical Processing,OLAP)是数据库最常见的两种场景,这两种场景不是唯二的两种,从中衍生出来的还有混合事务分析处理(Hybrid Transactional/Analytical Processing、HTAP)等概念。在线事务处理是最常见的场景,在线服务需要为用户实时提供服务,提供服务的过程中可能要查询或

2021-08-28 09:47:58 410

转载 Java List转String数组与String数组转List

1. String数组转ListString title = "\t 10月上旬\t 10月中旬\t 10月下旬"; String[] arrTitles = title.split("\t");List<String> titleList = Arrays.asList(arrTitles);1.1 方法一(不推荐)List<String> titleList = Arrays.asList(arrTitles);titleList结果:注意:Arrays.

2021-08-28 09:25:30 9610

转载 Elasticsearch Suggester详解

1. 前言现代的搜索引擎,一般会具备"Suggest As You Type"功能,即在用户输入搜索的过程中,进行自动补全或者纠错。 通过协助用户输入更精准的关键词,提高后续全文搜索阶段文档匹配的程度。例如在Google上输入部分关键词,甚至输入拼写错误的关键词时,它依然能够提示出用户想要输入的内容:如果自己亲手去试一下,可以看到Google在用户刚开始输入的时候是自动补全的,而当输入到一定长度,如果因为单词拼写错误无法补全,就开始尝试提示相似的词。那么类似的功能在Elasticsearch里如何实

2021-08-25 19:42:16 686

转载 Elasticsearch 7.x : 刷新周期 refresh_interval

1. 简介当数据添加到索引后并不能马上被查询到,等到索引刷新后才会被查询到。 refresh_interval 配置的刷新间隔。refresh_interval 的默认值是 1s。单位:如果是指定的纯数字,单位是毫秒。当 refresh_interval 为 -1 时,意味着不刷新索引。ms: 毫秒s: 秒m: 分钟当需要大量导入数据到ES中,可以将 refresh_interval 设置为 -1 以加快导入速度。导入结束后,再将 refresh_interval 设置为一个正数,例

2021-07-08 15:36:01 3983

转载 Docker Volume原理及使用

1. Volume原理想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的。Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(译者注:镜像栈顶部)添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读

2021-06-23 16:42:26 24469

转载 Docker 核心技术与实现原理

1. 前言提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段使用的玩具了。作为在生产环境中广泛应用的产品,Docker 有着非常成熟的社区以及大量的使用者,代码库中的内容也变得非常庞大。同样,由于项目的发展、功能的拆分以及各种奇怪的改名 PR,让我们再次理解 Docker 的整体架构变得更加困难。虽然 Docker 目前的组件较多,并且实现也非常复杂,但是本文不想过多的介绍 Docker 具体的实现细节,我们更想

2021-06-21 17:28:55 275

转载 二叉树遍历(递归实现前序/中序/后序遍历)

1. 准备工作我们先定义一棵普通的二叉树,如下图2. 前序遍历通过递归进行遍历:如果二叉树为空,则操作返回;如果非空,否则从根结点开始,然后遍历左子树,再遍历右子树。前序遍历的结果是:ABDGHEICFJK为什么会遍历出这种结果,请看上面对前序遍历的描述:先遍历左边,然后在遍历右边。JAVA代码如下://前序遍历 public static void preTraversal(Node node){ if(null!=node){ System.out.println(nod

2021-06-17 10:11:14 1247

转载 java代码构建二叉树(二叉查找树)

1. 前言1.1 二叉树定义二叉树是N个结点的有限集合,该集合或者为空集,或者由一个根节点跟两棵互不相交的、分别称为根节点的左子树或者右子树的二叉树组成。1.2 二叉树的特点每个结点最多有两个子树左子树跟右子树是有序的树中某个结点只有一棵子树,也要区分是左子树还是右子树1.3 二叉树的形态空二叉树只有一个根结点根结点只有左子树根结点只有右子树根结点既有左子树,又有右子树2. java构建二叉树代码示例2.1 二叉树的存储结构以二叉链表存储为例

2021-06-16 16:10:03 4499

转载 java获取一个时间段内的所有年份/月份/天

代码示例:public enum DateUnit { YEAR("year"), MONTH("month"), DAY("day"); private String unit; DateUnit(String unit) { this.unit = unit; } public String getUnit() { return this

2021-06-10 15:31:10 3907

转载 Elasticsearch 技术分析(九):全文搜索引擎Elasticsearch,这篇文章给讲透了!

1. 前言之前已经分享过Elasticsearch的使用和原理的知识,由于近期在公司内部做了一次分享,所以本篇主要是基于之前的博文的一个总结,希望通过这篇文章能让读者大致了解Elasticsearch是做什么的以及它的使用和基本原理。2. 生活中的数据搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种:结构化数据 和 非结构化数据。结构化数据: 也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。指

2021-05-20 17:46:03 435

转载 Elasticsearch 技术分析(八):剖析 Elasticsearch 的索引原理

1. 前言创建索引的时候,我们通过Mapping 映射定义好索引的基本结构信息,接下来我们肯定需要往 ES 里面新增业务文档数据了,例如用户,日志等业务数据。新增的业务数据,我们根据 Mapping 来生成对应的倒排索引信息 。我们一直说,Elasticsearch是一个基于Apache Lucene 的开源搜索引擎。Elasticsearch的搜索高效的原因并不是像Redis那样重依赖内存的,而是通过建立特殊的索引数据结构–倒排索引实现的。由于它的使用场景:处理PB级结构化或非结构化数据,数据量大且需

2021-05-19 16:27:00 271

转载 关于MySQL的wait_timeout连接超时问题报错解决方案

1. 问题描述想必大家在用MySQL时都会遇到连接超时的问题,如下图所示:### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 47,795,922 milliseconds ago. The last packet sent successfully to the server was 47,795,92

2021-05-09 16:38:24 4001

转载 关于数据库mysql连接超时以及连接池超时的一些问题

1. 数据库连接超时数据库连接超时是指当服务连接到数据库但不对其做任何操作时等待到一定时间之后,这个链接就会与数据库断开,当再次对数据库进行操作时会报数据库连接超时或者连接关闭异常。mysql的连接默认最长等待时间为28800s也就是8个小时。解决办法:重新建立连接;把链接等待超时timeout设置长一点1.1 查看mysql连接最大超时时间查看mysql数据库服务连接最大超时时间,默认是28800S也就是8小时show global variables like '%timeout%';

2021-05-09 16:12:02 14141

转载 MySQL CST时区协商问题导致的数据库时间戳错误

1. 背景插入timestamp类型与datetime类型数据比预计结果早13在这里插入代码片小时2. 原因如果说相差8小时不够让人惊讶,那相差13小时可能会让很多人摸不着头脑。出现这个问题的原因是JDBC与MySQL对 “CST” 时区协商不一致。因为CST时区是一个很混乱的时区,有四种含义:美国中部时间 Central Standard Time (USA) UTC-05:00或UTC-06:00澳大利亚中部时间 Central Standard Time (Australia) UTC+0

2021-05-08 14:57:30 901

转载 JAVA:finally块中的代码什么时候被执行

1. 当try{}有return语句,finally{}有return语句1.1 代码示例public class TestFinally{ public static int testFinally1() { try{ return 1; }catch(Exception e){ return 0; }finally{ System.out.println("ex

2021-05-07 11:12:48 531

转载 ElasticSearch检索时特殊字符处理

1. 处理措施ElasticSearch检索时,出现特殊字符而没有做正确的处理,那么ElasticSearch将无法识别这条检索语句,则会抛出异常,此时就的对检索语句进行转义;例如:String title = "title+-&&||!(){}[]^\"~*?:\\";title = QueryParser.escape(title); // 主要就是这一句把特殊字符都转义,那么lucene就可以识别searchRequestBuilder.setQuery(QueryBuil

2021-04-27 10:40:04 3655

转载 @RequestParam和@RequestBody的使用

0. 前言发现一篇讲@RequestParam和@RequestBody的区别的文章,感觉写的挺好。在编写项目的过程中,老出现前后端传递参数格式不一致、不统一的问题,@RequestParam和@RequestBody的区别,避免大家遭遇同等错误;1. @RequestParam注解@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RequestPara

2021-04-27 10:30:51 2765 1

转载 当我们在谈论内存的时候,我们在谈论什么

0. 前言内存,是程序员绕不过的一道坎。写过C和C++的人想必都会对内存的手动分配和释放难以忘怀,在Java中,得益于JVM的自动垃圾回收(GC)机制,大部分情况下编程并不需要关心内存的分配与回收。当然,有了GC并不意味着就万事大吉了,如果不了解其中的原理,以错误的姿势滥用GC,很有可能翻车酿成不可估量的损失。在经历过一次严重的线上故障之后,本文试图深入分析JVM的内存管理机制,探索如何监控和避免内存使用量过高的场景出现。难免有错误之处,还请各位指正。1. 内存是什么?这个问题看似很好回答:内存不就

2021-04-23 14:27:58 168

转载 ElasticSearch索引数据版本(_version)控制(5.4版本)

1. 用于处理冲突通常,当数据库因为请求冲突发生幻读问题时,有两种解决策略:悲观并发控制如:行级锁;乐观并发控制如:写操作时发现数据发生变化,操作失败。ElasticSearch采用乐观并发控制。Elasticsearch是分布式的,当文档被创建、更新或删除,文档的新版本会被复制到集群的其它节点。Elasticsearch即是同步的又是异步的,意思是这些复制请求都是平行发送的,并无序(out of sequence)的到达目的地。这就需要一种方法确保老版本的文档永远不会覆盖新的版本。这时就用到

2021-04-09 20:11:51 2773

转载 JSONObject转换为Map(String, Integer)对象

1. 示例代码import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.TypeReference;JSONObject obj = new JSONObject();{ obj.put("key1", "value1"); obj.put("key2", "value2"); obj.put("key3", "value3");}Map<String, Integer> params = JSONO

2021-04-02 16:30:39 3822

转载 k8s学习笔记:缩扩容&更新

1. 前言自动缩扩容是现代化的容器调度平台带给我们的最激动人心的一项能力。在上规模的业务系统中我们无时无刻不面临着这样的难题:用户的流量往往随着时间波动,甚至偶尔出现不可预测的峰值(毛刺流量),每当流量增加时都需要手工的对应用进行扩容,峰值流量消失后又需要将扩容的机器回收,运维起来费时费力。幸运的是,k8s这样的容器调度平台正在逐渐帮助我们解决这样的问题,它带来的AutoScaler功能目前已经支持在多个不同维度上的弹性缩扩容,可以根据应用的负载情况进行自适应。尽管在一些较为苛刻的场景下,由于容器启动速

2021-03-26 16:32:24 1834 1

转载 k8s学习笔记:介绍&上手

1. 前言:服务网格演变史还记得17年的夏天,我第一次接触docker,立刻就被容器化的新颖理念以及它带来的种种优势所震撼了。容器化带给业界的冲击是巨大的,不到短短一年的时间里,容器化的部署和运维就已经彻底替代传统机器部署成为了主流,同时docker也为服务端的发展形态带来了非常多的可能性,使得“微服务”这一架构如雨后春笋般生长起来,迅速成熟当服务的载体由虚拟机器变为容器后,部署和运维的粒度更小了,但从宏观的角度来看,一个完整的服务系统变得更加零碎和复杂了 —— 数量众多的微服务以及承载他们的容器交织成

2021-03-25 18:04:59 331

转载 Docker 基础 : Dockerfile

0. 前言Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像。我们会先介绍 Dockerfile 的基本结构及其支持的众多指令,并具体讲解通过执行指令来编写定制镜像的 Dockerfile。1. 基本结构Dockerfile 由一行行命令语句组成,并且支持已 # 开头的注释行。一般而言,Dockerfile 的内容分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。例如:# This dockerfile uses the

2021-03-24 17:54:03 92

转载 Docker镜像进阶:了解其背后的技术原理

1. 什么是 docker 镜像?docker 镜像是一个只读的 docker 容器模板,含有启动 docker 容器所需的文件系统结构及其内容,因此是启动一个 docker 容器的基础。docker 镜像的文件内容以及一些运行 docker 容器的配置文件组成了 docker 容器的静态文件系统运行环境:rootfs。可以这么理解,docker 镜像是 docker 容器的静态视角,docker 容器是 docker 镜像的运行状态。我们可以通过下图来理解 docker daemon、docker 镜

2021-03-12 17:38:39 418

转载 Docker入门

0. 前言2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业。但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?本文就来详细解释,帮助大家理解它,还带有简单易懂的实例,教你如何将它用于日常开发。1. 环境配置的难题软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,

2021-03-12 16:08:52 101

转载 Cache与Buffer的区别

首先cache是缓存,buffer是缓冲,虽然翻译有那么一个字的不同,但这不是重点。个人认为他们最直观的区别在于cache是随机访问,buffer往往是顺序访问。虽然这样说并没有直击本质,不过我们可以待分析完毕之后再来讨论真正的本质。为了说明这个问题,让我将他们分开来说:read cache(读缓存),read buffer(读缓冲),write cache(写缓存),write buffer(写缓冲)。无论缓存还是缓冲,其实本质上解决的都是读写速度不匹配的问题,从这个角度,他们非常相似。首先讨论读缓存跟读

2021-03-08 17:30:35 3703 2

转载 JDBC中connection.isClosed 和 connection.isValid的区别

isClosed:是判断一个connection是否被关闭,而是否被关闭是停留在java程序层的判断,不会去检测是否与数据库连通。意思是,你在程序运行过程中,即使把数据库关了,对于一个之前未被关闭的connection来说,调用connection.isClosed依然为false。但是如果用已经不能使用的connection访问数据库导致一次异常之后,connection则会自动设置为true。isValid:是检测connection是否有效,它会尝试与数据库作连接,即如果Connectio..

2021-03-05 10:03:12 4688 1

转载 Java监听者模式

1. 前言什么是监听器监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。。为什么我们要使用监听器?监听器可以用来检测网站的在线人数,统计网站的访问量等等!监听器组件监听器涉及三个组件:事件源,事件对象,事件监听器当事件源发生某个动作的时候,它会调用事件监听器的方法,并在调用事件监听器方法的时候把事件对象传递进去。我们在监听器中就可以通过事件对象获取得到事件源,从而对事件源

2021-02-04 14:58:39 1079

原创 Java8 Steam API中groupingBy和flatMap方法的使用

1. groupingBy分组器/** * 使用java8 stream groupingBy操作,按城市分组list */@Testpublic void groupingByTest() { Map<String, List<Employee>> employeesByCity = employees.stream().collect(Collectors.groupingBy(Employee::getCity)); Syste

2021-01-28 11:25:59 1758

转载 Java可重入锁ReentrantLock

1. ReentrantLock的概念ReentrantLock是一个可重入的独占锁(/互斥)锁。可重入:指任意线程在获取到锁之后能够再次获取该锁而不会被阻塞。独占:每次只能有一个线程能持有锁;与之相应的时共享锁,则允许多个线程同时获取锁,并发访问,共享资源,ReentrantReadWriteLock里的读锁,它的读锁是可以被共享的,但是它的写锁是独占的。ReentrantLock继承了Lock接口,其内部类Sync继承了队列同步器AQS,Sync有两个子类:公平锁FairSync和非公平锁N

2021-01-18 14:48:55 181

空空如也

空空如也

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

TA关注的人

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