自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

the Blog of Forward

Forward ahead and never forget your original intention

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

原创 Elasticsearch 相关问题总结

Elasticsearch 相关问题总结

2022-08-04 07:50:51 327 1

原创 Elasticsearch查询过程

本文介绍了es的分布式search的查询流程分为query和fetch两个阶段,在query阶段会从所有的shard上读取相关document的docId及相关的排序字段值,并最终在coordinating节点上收集所有的结果数进入一个全局的排序列表后,然后获取根据from+size指定page页的数据,获取这些docId后再构建一个multi-get请求发送相关的shard上从_source里面获取需要加载的数据,最终再返回给client端,至此整个search请求流程执行完毕。......

2022-08-04 07:37:18 759

转载 领域驱动设计(DDD)中四种领域模型(失血、贫血、充血、胀血)

为了补大家的遗憾,在此总结下ROBBIN的领域模型的一些观点和大家的补充,在网站和演讲中,robbin将领域模型初步分为4大类:1,失血模型  2,贫血模型  3,充血模型  4,胀血模型那么让我们看看究竟有这些领域模型的具体内容,以及他们的优缺点:一、失血模型失血模型简单来说,就是domain object只有属性的getter/setter方法的纯数据类,所有的业务逻辑完全由business object来完成(又称Transaction Script),这种模型下的domain obje

2021-03-28 10:15:43 2300

原创 MySQL调优总结

开局先来一张某位大哥的图:#### 一. 表设计与数据类型尽量遵循数据库设计三大范式,一些场景可适当建立冗余字段,减少连接查询,但这样这样会破坏第三范式,视情况而定。尽量不要设置null类型字段,null类型需要额外的字段来存储,count不会统计,一些场景也会使索引失效。使用UNSIGNED无符号类型,可提高正数的数量上限,在一些不需要存储负数的情况下,将类型设置无符号数。没有太大的必要使用BigDecimal类型,可用bigint,将小数方法10^n存入,这样可以避免浮点数计算不准确和DEC

2021-03-04 07:48:07 242 2

原创 线程安全的计数器限流

网上的代码实现的计数器限流基本都不是线程安全的,如下限流器的实现:设定时间内允许通过设置的请求数public class CountLimitNotSafe { /** * 计数器归零 */ private final AtomicLong ZERO = new AtomicLong(0); /** * 计数器 */ private AtomicLong counter = ZERO; /** * 起始时间

2021-02-01 09:44:23 361 1

原创 Java反射原理总结

反射是Java 中非常重要的特性,它允许正在运行的Java程序观测,甚至是修改程序的动态行为。例如:我们可以通过Class 对象枚举出该类所有方法,我们还可以通过Method.Accessible 绕过Java 语言的访问权限,在私有的方法所在类之外的地方调用该方法。在Java 开发环境(IDE)中当我们输入对象后输入点号时,编译器会根据点号前的数据动态的展示出对象中的属性和方法。在Web开发中,我们经常使用的各种通用框架为了保证框架的可扩展性,往往都使用Java反射功能,根据配置文件中的信息来动态的

2021-01-28 07:54:52 576

原创 Java内省与反射

反射机制反射机制的优点:可以实现动态的创建对象和编译,使代码更加灵活多变,比如动态代理的实现,就是通过反射来实现代理方法的代用,比如mybatis查询生成的entity,数据就是通过反射set进去的反射机制的缺点:对性能的影响。使用反射机制基本上是一种解释操纵,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。内省机制什么是内省机制(或者说使用内省机制的好处):内省的出现有利于了对类对象属性的操作,减少了代码的数量,提高代码的可读性。在计算

2021-01-24 05:22:46 349

原创 HotSpot的垃圾回收的算法细节实现(GC Root、Safe Point)

GC Roots 枚举可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)。在进行 GC Roots 枚举时必须在一个能确保一致性的快照中进行——在整个分析期间整个执行系统看起来就像被冻结在某个时间点上,不可以出现分析过程中对象引用关系还在不断变化的情况,该点不满足的话分析结果准确性就无法得到保证。即所有正在运行的程序必须停顿,不能出现正在枚举 GC Roots,而程序还在跑的情况。GC Roots 枚举为了确保一致性的快照就必然会导致Stop T

2021-01-22 15:32:08 165

原创 如何保证Redis和MySQL数据一致性

如何保证Redis和MySQL数据一致性,这个问题真的是面试问的最多的一个问题了,所以总结一下,类似的问题,比如如何保证ES和MySQL的数据一致性,凡是涉及到数据多个地方读写,有数据一致性的需求和同步操作,以下总结的方法都可考虑。什么是数据一致性Redis和MySQL数据一致性说的是,Redis作为缓存,必须保持跟MySQL中数据一致,在更新MySQL数据的时候,Redis中也必须更新到最新的值,这样先从Redis缓存中读取的值就是我们最新的值,不会有脏数据。如何保持数据一致性强一致性思路:

2021-01-22 14:01:53 2162 3

原创 反转链表三种解法详细说明 java

package com.structure.list;import lombok.Data;import java.util.ArrayDeque;import java.util.Deque;/** * @author: yhl * @DateTime: 2020/5/18 15:36 * @Description: [理解单链表的反转(java实现) - 简书](https://www.jianshu.com/p/36ed87e1937a) */public class Link

2021-01-16 23:12:18 158

原创 Spring 为什么要使用三级缓存来解决循环依赖

抛出问题:  Spring使用三级缓存解决Bean注入循环的依赖的问题网上已经有很多源码分析的文章了,那么我们来总结一下,Spring为什么要使用三个缓存(三级缓存)来解决循环依赖问题呢,为什么不能是一个缓存,两个缓存呢?Spring中的三级缓存:DefaultSingletonBeanRegistry类的三个成员变量命名如下:/** 一级缓存 单例缓存池 缓存的是一个完整可用的bean实例*/private final Map<String, Object> singletonObj

2021-01-09 22:44:12 1380 9

原创 Elasticsearch索引原理

最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作,花了些时间学习Elasticsearch的基础理论知识,整理了一下,希望能对Elasticsearch感兴趣/想了解的同学有所帮助。 同时也希望有发现内容不正确或者有疑问的地方,望指明,一起探讨,学习,进步。介绍Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是

2021-01-02 16:18:13 261 1

原创 JVM Happens-Before 先行发生原则

JVM先行发生原则如果Java内存模型中所有的有序性都仅靠volatile和synchronized来完成, 那么有很多操作都将会变得非常啰嗦, 但是我们在编写Java并发代码的时候并没有察觉到这一点, 这是因为Java语言中有一个“先行发生”(Happens-Before) 的原则。 这个原则非常重要, 它是判断数据是否存在竞争, 线程是否安全的非常有用的手段。 依赖这个原则, 我们可以通过几条简单规则一揽子解决并发环境下两个操作之间是否可能存在冲突的所有问题, 而不需要陷入Java内存模型苦涩难懂的定

2020-12-27 12:44:28 224

转载 Redisson分布式锁实现原理

在了解分布式锁具体实现方案之前,我们应该先思考一下使用分布式锁必须要考虑的一些问题。​互斥性:在任意时刻,只能有一个进程持有锁。防死锁:即使有一个进程在持有锁的期间崩溃而未能主动释放锁,要有其他方式去释放锁从而保证其他进程能获取到锁。加锁和解锁的必须是同一个进程。锁的续期问题。常见的分布式锁实现方案基于 Redis 实现分布式锁基于 Zookeeper 实现分布式锁本文采用第一种方案,也就是基于 Redis 的分布式锁实现方案。Redis 实现分布式锁主要步

2020-12-22 10:47:46 532

原创 Spring方法中嵌套事务及事务失效的处理方法

Spring中嵌套事务及事务失效的处理方法  在Spring中处理业务逻辑的时候,大家可能会遇到与下面这段代码的类似的逻辑:  这时候,大家为了数据库数据的ACID,需要做事务处理了,即要求这两条对数据库数据的操作同时成功,如果有其中的一个操作失败了,那么数据必须回滚到第一个操作之前的状态。Spring中,可通过在想要回滚的方法上加@Transactional注解,来实现事务控制。  对...

2020-12-19 12:07:33 4436

原创 高并发系统的设计要点

高并发系统的设计要点以下为自己总结的关于高并发系统的设计要点,为大家提供一个思路,如果有不对的地方和没想到的地方,请为大家指正和补充,非常感谢。1.前端方面减少http请求http请求的开销都很昂贵,应该尽量减少http请求次数。主要手段是将javascrit,css,图片合并成一个文件,这样浏览器只需一次请求。使用浏览器缓存对网站而言,css,javascript,logo,图标这些资源更新频率低,可以设置http头中的Cache- Control和Expires属性将其缓存在浏览器中

2020-12-19 11:58:46 194 1

转载 JVM synchronized锁升级

目录一,对象头1,Mark Word2,指向类的指针3,数组长度二,实例数据三,对齐填充字节Java对象保存在内存中时,由以下三部分组成:1,对象头2,实例数据3,对齐填充字节一,对象头java的对象头由以下三部分组成:1,Mark Word2,指向类的指针3,数组长度(只有数组对象才有)1,Mark WordMark Word记录了对象和锁有关的信息,当这个对象被synchronized关键字当成同步锁时,围绕这个锁的一系列操作都和Mark Word有关。Ma

2020-10-23 10:21:12 642

转载 为什么说java里面只有值传递?

七年前,我从温和湿润的苏州回到古色古香的洛阳,抱着一幅“天下我有”的心态“约谈”了几位面试官。其中有一位叫老马,让我印象深刻。因为他当时扔了一个面试题把我砸懵了:说说 Java 到底是值传递还是引用传递吧。我当时年轻气盛,自认为所有的面试题都能对答如流,没想到被老马“刁难”了——原来洛阳这块互联网的荒漠也有技术专家啊。现在回想起来,脸上不自觉地就泛起了羞愧的红晕:当时真菜!刚好题主也在问这个问题,那我就来好好回答一下。将参数传递给方法有两种常见的方式,一种是“值传递”,一种是“引用传递”。C 语言本身只

2020-09-28 17:19:10 246

原创 Java大量定时任务,如何优化

一、缘起很多时候,业务有定时任务或者定时超时的需求,当任务量很大时,可能需要维护大量的timer,或者进行低效的扫描。例如:58到家APP实时消息通道系统,对每个用户会维护一个APP到服务器的TCP连接,用来实时收发消息,对这个TCP连接,有这样一个需求:“如果连续30s没有请求包(例如登录,消息,keepalive包),服务端就要将这个用户的状态置为离线”。其中,单机TCP同时在线量约在10w级别,keepalive请求包大概30s一次,吞吐量约在3000qps。一般来说怎么实现这类需求呢?“轮

2020-09-24 04:56:20 6118 2

原创 MySQL order by基于不同字段条件排序

MySQL order by基于不同字段条件排序在做需求的过程中,产品要求在页面查询数据的时候,在某个字段的不同值的基础上再选择不同的字段进行排序,具体需求如下:1:首先有一个基础字段follow_up_type,follow_up_type的取值分别为:1、2、3、42:先对follow_up_type进行排列,但是要求顺序为:2、1、3、4(其实每个值都代表一种含义,简单处理就是,将1和...

2020-06-22 17:59:31 4731

原创 SpringBoot Bean生命周期

首先上一张自制的自认为比较全的Spring Bean生命周期流程图:测试代码:测试bean@Datapublic class BeanLifeCycle implements InitializingBean, DisposableBean, BeanFactoryAware, BeanNameAware { private String name; public BeanLifeCycle() { System.out.println("BeanTestL

2020-05-12 15:07:17 976

原创 JVM吞吐量垃圾收集器

Parallel Scavenge收集器也是一款新生代收集器, 它同样是基于标记-复制算法实现的收集器, 也是能够并行收集的多线程收集器……Parallel Scavenge的诸多特性从表面上看和ParNew非常相似, 那它有什么特别之处呢?Parallel Scavenge收集器的特点是它的关注点与其他收集器不同, CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间, 而P...

2020-04-22 07:30:11 732

原创 Idea Tool Windows的Services中springboot项目消失

Idea Tool Windows的Services中Spring Boot项目消失idea版本:在idea比较新的版本,将RunDashboard升级成了Services,可以管理更多的服务,如下图:但是有时候我们想要管理的服务却在Services中不显示,比如打开新的idea窗口时,Services中的Spring Boot经常不显示,这是需要我们进行一个小小的设置。选择如上功能...

2020-03-28 11:41:29 6144

转载 垃圾收集器GC中parallel scavenge收集器为什么不能CMS配合使用?

首先看一下收集器的分布:1.解答parallel scavenge收集器为什么不能CMS配合使用?首先讲一下Hotspot,HotSpot VM里多个GC有部分共享的代码。有一个分代式GC框架,Serial/Serial Old/ParNew/CMS都在这个框架内;在该框架内的young collector和old collector可以任意搭配使用,所谓的“mix-and-match”。...

2020-03-15 20:40:30 710 1

转载 Synchronized方法锁、对象锁、类锁区别

synchronized关键字,我们一般称之为”同步锁“,用它来修饰需要同步的方法和需要同步代码块,默认是当前对象作为锁的对象。在修饰类时(或者修饰静态方法),默认是当前类的Class对象作为所的对象故存在着方法锁、对象锁、类锁 这样的概念一.Synchronized方法锁(也叫对象锁)1.修饰在方法上,多个线程调用同一个对象的同步方法会阻塞,调用不同对象的同步方法不会阻塞。(java对象的内...

2020-03-06 07:45:23 846

原创 Mybatis-Plus一对多及分页

Mybatis-Plus一对多及分页需求中一个商品对应多个类型的多个图片,由于商品信息和商品相关图片是分表根据商品id关联存的,所以这就涉及到了关联查询。对这个不是很了解,所以网上搜了一圈,说的那叫一个花里胡哨啊,好几种方式以及贴的代码,看的人脑阔疼,尝试出了一种比较简单的方式,分享一下。首先分享一下我的代码,两个实体类,即代表两张表。一个商品类,一个商品图片类。一个商品对应好多这张图片,这...

2020-03-03 19:55:21 5275 8

原创 Java的Scanner中关于next()、nextLine()、hasNext()、hasNextLine()的说明

java.util.Scanner 是 Java5 的新特征,用于从键盘输入内容,读取到程序当中。next() 与 nextLine() 区别next():一定要读取到有效字符后才可以结束输入。对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。next() 不能得到带有空格的字符串。nextLine()...

2019-12-14 18:20:40 7922 4

原创 Spring Cloud Feign组件负载均衡详解

Spring Cloud Feign组件实现负载均衡知道Feign组件,肯定知道还有一个Ribbon组件,我们来看一下这两个的区别。Ribbon和Feign简单介绍spring cloud的 Netflix 中提供了两个组件实现软负载均衡调用:ribbon 和 feign。Ribbon是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。它可以 在客户端 配置 RibbonS...

2019-12-10 11:57:32 650

原创 Spring Cloud Alibaba使用Nacos做注册中心,Feign负载均衡远程调用

对在Spring Cloud Alibaba使用nacos做注册和动态配置中心,feign远程调用,并实现负载均衡的学习过程做一下总结,希望大家共同进步。一. 安装nacos服务具体安装步骤可参考这篇博客:https://blog.csdn.net/qq_32352777/article/details/86560333 写的很不错,感谢作者。安装问题总结测试环境一般建议...

2019-12-09 22:25:22 1271

原创 JVM自定义类加载器及注意问题

JVM自定义类加载器及问题在看神书《深入理解Java虚拟机》时,看到类加载部分,对如何自定义一个类加载器来,加载自己想要的加载的类产生了兴趣,所以研究了一下。参考了一下网上的其他的文章 ,记录一下。首先为什么要自定义类加载器呢我们需要的类不一定存放在已经设置好的classpath下(由系统类加载器AppClassLoader加载的路径),对于自定义路径中的class类文件的加...

2019-12-05 13:45:09 677

原创 docker搭建Redis cluster集群,完全无坑笔记

docker搭建Redis cluster集群,完全无坑笔记。安装docker1.1 安装所需的软件包sudo yum install -y yum-utils device-mapper-persistent-data lvm21.2 设置稳定的存储库sudo yum-config-manager \ --add-repo \ https://download....

2019-09-19 07:45:11 2183 14

原创 对于kafka消费后不提交offset的分析总结

对于kafka消费后不提交offset情况的分析总结  最近在使用kafka的过程中遇到了一个疑问,在查阅了一些资料和相关blog之后,做一下总结和记录。  Question:消费者在消费消息的过程中,在设置为不自动提交offset,消费完数据之后如果不手动提交offset,那么在kafak中的数据会如何被处理呢?  首先简单的介绍一下消费者对topic的订阅。客户端的消费者订阅了topi...

2019-03-31 10:02:38 13049 6

原创 Spring中@Autowired、@Qualifier和@Resource的用法和关系

Spring中@Autowired、@Qualifier和@Resource的用法和关系@Autowired  Autowired就是自动装配,帮我们生成对象的实例后用Spring的IOC容器来托管。其作用是可以消除代码里的new语句,简化代码。  此注解可以写在字段上,或写在setter方法上。 其默认的是按照对象(bean)的类型来装配。即如果某个类上使用这个注解,将这个类的类型的信...

2019-03-30 12:29:18 1024

原创 springboot+kafka中@KafkaListener如何动态指定多个topic

springboot+kafka中@KafkaListener如何动态指定多个topic本项目为springboot+kafak的整合项目,故其用了springboot中对kafak的独特消费注解@KafkaListener首先,application.properties中配置用逗号隔开的多个topic。方法一:运行程序,console打印的效果如下:因为只开了一条消费者线程,所...

2019-03-27 10:38:15 45623 22

原创 HashMap的长度为2的n次方

HashMap的容量长度为2的n次方原因总结:HashMap存取时,都需要计算当前key应该对应Entry[]数组哪个元素,即计算数组下标;算法如下: /** * Returns index for hash code h. */ static int indexFor(int h, int length) { return h &amp;amp;amp;amp;amp; ...

2019-02-26 14:06:40 356

原创 如何将Java中的byte转为protobuf中bytes

Java中的byte转为protobuf中bytes  在protobuf中如果定义了bytes类型的消息传输对象 syntax = &amp;quot;proto3&amp;quot;; option java_package=&amp;quot;com.test.protobuf&amp;quot;; option java_outer_classname = &amp;quot;NettyMessage&amp;quot;; mess

2019-01-19 14:19:30 10558 2

原创 阿里ECS服务器安装 zookeeper 集群:Cannot open channel to 1 at election address 问题解决。

在阿里的ESC服务器上装ZK集群,各项配置弄好之后,zkServer.sh start 启动zk集群,jps查看zk进程,一切正常然后执行zk状态查询命令: zkServer.sh status,却得到:查看zk的日志,如果你没有配置zk的日志定向输出的话,日志一般在你执行启动命令的目录。vim zookeeper.out 打开日志文件,报出这样的错:在网上查了一圈,都说是防火墙和...

2019-01-08 11:18:02 4790 4

原创 linux 修改localhost主机名不重启生效

linux 修改localhost主机名不重启生效1.修改配置文件打开配置文件,加入自己想要的用户名 vim /etc/hostname2.设置自己想要的用户名 hostname haha关闭linux终端,重新连接,即可看到用户名变成了自己想要的。...

2019-01-05 16:04:16 6321 1

原创 sqlserver 死锁,事务(进程 ID 115)与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品。请重新运行该事务。

sql server死锁

2018-12-29 11:32:05 15634

原创 Netty客户端断线重连服务端

Netty客户端重连机制 场景: 1.Netty初次启动客户端,如果无法连接到服务端,将尝试重连。 2.在客户端与服务端保持长连接的过程中,如果连接断开,尝试与服务端重连。主要代码&amp;amp;amp;nbsp;Netty客户端启动处理类@Service(&amp;amp;quot;nettyClient&amp;amp;quot;)public class NettyClient { private final static Logger

2018-12-28 10:10:31 9197 11

空空如也

空空如也

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

TA关注的人

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