自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 收藏
  • 关注

原创 Redis为什么会变慢

链接: https://pan.baidu.com/s/1PNzhDMqkFBdKUu9_FxA5zw 提取码: euvk。

2024-04-14 15:40:42 145

原创 聊聊jvm中内存模型的坑

看图,简单来说线程中操作的变量是副本。在并发情况下,如果数据发生变更,副本的数据就变为脏数据。这个时候就会有并发问题。

2024-04-14 14:08:19 247

原创 随意聊架构

实践是检验真理的唯一标准,一句话,实践下来效果不好。钱花了,但是开发的效率并没提高多少。本身的想法很好:中台可以都大企业的一些重复的功能做一个收整,归并一些重复的系统。可以减少维护的人力和物力成本。专业的人做专业的事,提高系统的设计质量。

2024-03-30 23:11:08 395

原创 本地锁(reentrantLock)与分布式锁(reddison)的底层实现

redisson的解锁过程如下图。先判断线程是否持有该锁。如果有,则value值减1。然后判断value是否大于0,如果大于0,则给key设置一个默认的过期时间30秒;如果等于0,则可以删除key和发布一个key删除事件。因为加锁时,会设置过期时间。所以就算不主动解锁。key过期了就相当于解锁了。

2024-01-01 17:25:49 787

原创 Collections工具类整理

/int[]转List://使用Arrays.stream(ints).boxed().collect(Collectors.toList());//排序:Collections.sort, 没有返回值;默认是顺序排序。//翻转:Collections.reverse, 没有返回值;//交换元素:Collections.swap, 没有返回值;

2024-01-01 15:50:59 359

原创 ElasticSearch面试题

es的查询过程分两段,先query,再fetch。在query阶段,有协调结点向数据结点发出查询指令,数据结点会返回匹配的id和排序权重在fetch阶段,协调结点会根据排序权重重新排序,确定当前查询需要返回的数据范围。再去数据结点fetch具体的数据。es内部如何使用缓存来优化查询数据?解答这个问题,需要先了解es中索引的结构。首先,es的索引类似于mysql中的表,是用来存储文档数据的。基于分布式的特点,es将一个索引划分成多个分片,来提高索引的读写性能。

2023-12-17 15:12:05 505

原创 面试中遇到的设计题

前端:a. 一些防刷单校验,拉长整个交易流程,起到一个削峰作用b. 静态资源多CDN部署c. 前端缓存,有些页面的切换,不需要调用后端接口后端:接口性能优化:使用缓存,异步,多线程,功能降级等手段还有些高并发时保证系统稳定性的手段:扩容, 升配,限流,降级还有是想做系统隔离/数据隔离的方案 这种成本很高。

2023-11-25 21:12:56 1315

原创 英文自我介绍

用英文介绍下,我的主要工作。

2023-09-22 22:36:01 79

原创 IO面试题整理

这里的io复用指的是,负责处理input/output工作的线程的服用。相比非复用的io模型每个fd文件描述符(网络请求),都会用一个线程进行监听,复用的io模型只需使用一个线程进行监听,当发现有数据准备好的文件描述符时,会将其通知给另一个负责数据读取的线程。当请求并发量高时,这样的模型,大大减少了线程的使用。但是这个模型也有它的不足之处,比如监听fd文件描述符的线程,需要不断轮询。但大多数的轮训其实是无效的。这个问题,信号驱动的io模型可以解决。

2023-09-02 17:57:53 657

原创 后端开发专业英文单词收集

government affairs 政务 customers Delivery 客户交付 high-concurrency 高并发 system architecture design and implementation 系统架构设计和开发 use guidance 用法指导 tencent cloud product 腾讯云产品 job qualification 工作要求 Bachelor Degree 学士学位 master degree 硕士学位 Backstage/back-e

2023-05-14 16:08:12 905

原创 后端架构学习

这里的架构说的是后端的架构的发展。如果要包括前端的话,基本上采用的都是c/s的架构模式。1. 什么是后端服务的架构?怎么去理解后端架构这个词?4. 产品经理和业务架构师做的事情到底有什么不同?6. 要提高系统的复用性需要做好哪些事情?3. 日常应该怎么去积累架构的能力?2. 后端架构需要关注哪些事情?5. 架构发展的历史。

2023-01-15 11:21:24 3585

原创 kafka源码-问题整理

1. 解读kafak的read和append方法参考文章:kafka 日志段 - 搜索结果 - 知乎

2022-03-22 19:17:52 431

原创 后端存储实战课-学习笔记

本笔记内容来源极客时间-李玥老师的后端存储实战创建和更新订单时,如何保证数据准确无误重要摘要一个合格的订单系统,最基本的要求是什么?数据不能错。--说的是数据一致性的问题 订单系统的核心功能和数据: 核心功能: 创建订单; 随着购物流程更新订单状态; 查询订单,包括用订单数据生成各种报表 核心数据: 订单主表:也叫订单表,保存订单的基本信息。 订单商品表:保存订单中的商品信息。 订单支付表:保存订单的支付和退款信息。 订单优惠表:保存订...

2022-03-18 16:06:40 804

原创 effective-java读书笔记

其实书中内容,我们在工作开发中其实都是有接触到的。那本文我会从自己的角度叙述下读书前自己对某块知识点的理解。和读书后自己对某块知识点的理解。枚举类阅读前的理解:使用枚举可以面的这些好处枚举类可以用来代替静态变量来定义一些魔法值或者字符串清晰的定义业务的可选范围复用性好int枚举模式的不足:没有类型安全校验。比如商品上架状态为1,商品的商品类型为1,书中介绍的优点:...

2022-03-12 12:09:59 375

原创 lucene原理篇

都知道lucene使用倒排索引来搜索文档,哪倒排索引究竟是个什么呢?倒排索引是区分于正排索引的概念正排索引:以文档的唯一id作为索引,以文档的内容作为记录的结构倒排索引:以文档中内容的单词作为的索引,以文档的id作为内容的结构相比关系数据库使用的“like %XX%”查询,倒排索引有什么优点搜索效率更高,like“%xx%”,无法使用索引,会走全表扫描,效率差可以实现更复杂的搜索场景,like“%xx%”只能实现首尾的模糊查询倒排索引的实现倒排索引由两部分组成,一个是Term Dict

2022-03-01 23:17:33 695

原创 lucene-新增,更新,删除过程解析

lucene新增文档过程疑问:Field.Store字段的含义是?Store.YES 保存 可以查询 可以打印内容 ; Store.NO 不保存 可以查询 不可打印内容 由于不保存内容所以节省空间完成写入过程的类?DefaultIndexingChain.StoredFieldsConsumer完成字段的写入过程。lucene是如何控制写入速度的?通过flushController进行控制,执行插入动作前,需要保证排队中的flush个数和停顿的线程数为0, 否则将执行flush操作。整理下Doc

2022-02-12 18:10:11 1652

原创 es-怎么将嵌套对象打平

思路:将嵌套对象转成json格式(嵌套对象的字段不多可以这样用,字段的很多的话,可将其转换成md5),如果有多个嵌套对象,他们直接可以用空格进行隔开。分词器使用whitespace。#注意分词器使用whitespace{ "usersnew" : { "mappings" : { "properties" : { "content" : { "type" : "text", "fields" : {

2022-01-22 12:38:57 1740

原创 es-RestHighLevelClient实践

.index 接口 --新增/更新索引,内容更新是覆盖式的.update 接口 --更新索引,支持局部字段的更新,相对.index接口相比,减少了没有必要的字段更新如何使用RestHighLevelClient进行脚本更新?脚本更新的优势和劣势是什么?...

2022-01-21 17:03:45 1389

原创 如何解决系统的一致性问题

数据一致性方案

2022-01-10 08:58:54 947

原创 es-聚合性能优化

优化方案:启用 eager global ordinals 提升高基数聚合性能应用场景:● 基于 keyword,ip 等字段的分桶聚合,包含:terms聚合、composite 聚合等。● 基于text 字段的分桶聚合(前提条件是:fielddata 开启)。● 基于父子文档 Join 类型的 has_child 查询和 父聚合。global ordinals 使用一个数值代表字段中的字符串值,然后为每一个数值分配一个 bucket(分桶)插入数据时对索引进行预排序● ndex sort

2022-01-09 13:02:35 3456

原创 es-api玩法手册

创建索引预先设定好索引的setting和mapping##创建索引 mapping+settingPUT lsm-kibana_sample_data_flights{ "settings": { "number_of_shards": 5, "number_of_replicas": 1 } , "mappings" : { "properties" : { "AvgTicketPrice" : { "type" :

2022-01-09 12:43:04 594

原创 es-慢查询定位手册

步骤步骤一:查看es的slowlog可以通过启用Elasticsearch中的慢速日志来识别运行缓慢的查询。Slowlogs专门用于分片级别,这意味着只应用数据节点。仅协调 Coordinating-only/客户client节点不具备慢日志分析功能,因为它们不保存数据(索引/分片)。Slowlogs有助于回答以下问题:Slowlogs专门用于分片级别,这意味着只应用数据节点。仅协调 Coordinating-only/客户client节点不具备慢日志分析功能,因为它们不保存数据(索引/分片)。Sl

2022-01-08 13:36:53 3252

原创 elasticSearch-优化篇

查询优化建议索引设计角度:避免一个索引有过多的分片控制单个分片的大小:search 20GB, log 40GBforce merge 只读索引,较少segment数量尽可能 Denormalize(反规范化) 数据,从而获取最佳的性能不使用嵌套类型对象,使用 Nested 类型的数据。查询速度会慢几倍不使用父子关系类型对象,使用 Parent / Child 关系。查询速度会慢几百倍查询语句角度尽量将数据先行计算,然后将数据保存在es中,避免查询时使用脚本计算尽量使用Filt

2021-12-23 20:17:54 1826

原创 elasticsearch-原理篇

深入理解 Lucene 的 flush 过程https://mp.weixin.qq.com/s/wI3E2ZLncHNCd_-T3tBFPw扒一扒查询缓存的裤子https://mp.weixin.qq.com/s/q5iN2rOwkb0Bw1MXowZ6LQElasticsearch 中增加分片数量,聚合一定会变快吗?https://mp.weixin.qq.com/s/MJlgoQFFlfvUFygwZyJuAQ...

2021-11-10 19:14:59 1549

原创 elastic-基础知识

数据类型数值型 - long文本型 - text, 会被分词处理布尔型 - boolean关键字 - keyword数组,没有数组这个类型,但是支持数组这个结构dynamic mapping 动态构建mapping什么时候会动态构建mapping?不显性的创建索引,直接使用put向索引中加入文档默认Mapping支持dynamic,即dynamic=true,文档中加入新的字段时,该字段可以被搜索,数据也在_source中出现当dynamic=false,数据会存在_source

2021-11-06 11:40:09 2159

原创 elastsearch-安装上手

下载地址:https://www.elastic.co/cn/downloads/elasticsearch本地启动解压下载的es安装包打开终端,进入elasticsearch文件夹,执行bin/elasticsearch打开浏览器访问:localhost:9200, 可以看到es已正常启动本地启动es多节点终端中执行下面命令:bin/elasticsearch -E node.name=node0 -E cluster.name=geektime -E path.data=node0_

2021-11-02 21:52:34 299

原创 elasticsearch专题-如何提高es的读性能

反范式构建索引数据建模避免查询时脚本使用filter后,可以走缓存,有利于性能的提升聚合查询消耗内存避免“*”的通配符,性能差优化分片

2021-10-31 14:50:00 793

原创 elastisearch专题-如何优化es的写入性能

目标写入性能优化的目标:增大写的吞吐量,越大越好可以着手优化的方向客户端: 多线程,批量写服务器端:使用更好的硬件配置。观察CPU/IO,线程,堆栈的状况。细节服务器端的一些方案降低IO操作使用es自动生成文档的id/ 修改一些es的配置,入refresh interval减少CPU和存储的开销减少不必要的分词,减少不必要的doc_values, 文档中的字段尽量保证同样的顺序以保证压缩率尽量实现写入和分片的负载均衡,实现水平扩展shard filtering,w

2021-10-31 14:30:11 549

原创 kafka知识点整理

Kafka 是什么Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性Kafka 核心组件 Produc

2021-05-02 16:45:33 403 1

原创 领域驱动模型设计-实战

文章内容摘自:欧创新老师的DDD实战课12 | 领域建模:如何用事件风暴构建领域模型?重要知识点整理什么是事件风暴它就是我在前面多次提到的事件风暴。事件风暴是一项团队活动,领域专家与项目团队通过头脑风暴的形式,罗列出领域中所有的领域事件,整合之后形成最终的领域事件集合,然后对每一个事件,标注出导致该事件的命令,再为每一个事件标注出命令发起方的角色。命令可以是用户发起,也可以是第三方系统调用或者定时器触发等,最后对事件进行分类,整理出实体、聚合、聚合根以及限界上下文。而事件风暴正是 DDD 战

2021-04-25 19:38:44 742

原创 领域驱动模型设计-进阶

文章内容摘自:欧创新老师的DDD实战课06 | 领域事件:解耦微服务的关键重要知识点整理领域事件什么事领域事件:这种事件发生后通常会导致进一步的业务操作,在 DDD 中这种事件被称为领域事件。比如投保业务缴费完成后,触发投保单转保单的动作;也可能是定时批处理过程中发生的事件,比如批处理生成季缴保费通知单,触发发送缴费邮件通知操作;或者一个事件发生后触发的后续动作,比如密码连续输错三次,触发锁定账户的动作。 如何识别领域事件:在做用户旅程或者场景分析时,我们要捕捉业务、需求人员或领域专家口中

2021-04-18 16:28:18 371 1

原创 领域驱动模型设计-基础

文章内容摘自:欧创新老师的DDD实战课01 | 领域驱动设计:微服务设计为什么要选择DDD?重要知识点整理DDD,一种业务架构设计的方法论,可以用来指导微服务划分,执行系统在业务层面的实现 单机模式:前端,后端,数据库,文件存储服务等都放在一台服务器上,数据库驱动设计,任务总是从设计数据库字段开始 集群模式:将同一个应用部署到多台服务器上以提升服务能力,采用经典的三层架构设计(业务接入层,业务逻辑层,数据库访问层),面向对象设计,耦合高(两个模块关联性很高,例:模块之间的方法相互调用),可扩

2021-04-11 12:47:09 419

原创 java项目异步方法使用总结

一. 使用java.util.concurent包下面的CompletableFutureCompletableFuture<String> stringCompletableFuture = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(1000); System.out.println("异步线程:" + Thread.currentThread().getName());

2021-03-28 15:34:56 148

原创 Feign的简单引用和介绍

Feign在项目中的作用是什么?在调用其它服务的接口时可以使用,作用和spring的restTemplate相同。调用外部的接口会更加的简单,代码也会非常规整如何使用feign1)引入openfeign依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artif...

2021-03-27 18:04:47 1634

原创 SpringCloud-Gateway介绍

1. 什么是gateway,它可以起到什么样的作用?gateway是spring cloud提供的网关技术,提供功能如下:路由,安全,监控/埋点,限流gateway中的核心元素:route:路由,为请求匹配到对应的路由predicate:java8提供的一个函数,是路由的匹配条件filter:过滤器,在请求发出前后进行一些业务上的处理原理图:过程:客户端请求 -> Gateway Handler Mapping -> Gateway Web Handler -&g

2021-03-02 21:14:02 1975

原创 如何手写线程池

参考博文:https://www.cnblogs.com/tong-yuan/p/11639269.html把握几个细节点的概念?1. 阻塞队列选取:使用LinkedBlockingQueue,作为阻塞队列2. 向丢列中添加任务时使用offer方法,不要使用add方法。3. 线程创建成功后会以自旋的方式不断的取任务执行,用while循环的方式实现。LinkedBlockingQueue是如何实现线程安全的?add,offer,put有什么不同?offer: 使用了reentrantL

2021-01-10 15:07:26 113

原创 Oracle的常见面试题

1. 多版本并发控制首先,你可以理解oracle库中的表是有版本号的。每次commit之后,表的版本号是会发生变化的。对于读操作来说,采用的是一致性读的方式,只会读取事务开始时,最新的版本号的内容。对于更新操作来说,采用的当前读的方式:需要更新的数据是当前最新的版本得数据,会按当前最新的字段数据进行匹配。而不是事务开始时的那个版本的内容进行匹配。有个问题需要关注:如果有个开启了很久的事务,突然执行了select操作,那么它将会利用undo信息得到历史版本状态下的内容。注意这个版本号越旧需

2021-01-09 18:44:29 4678

原创 如何设计一套秒杀系统

1. 如果项目组中使用的redis是单机版的,如何处理QPS在10万+的场景?首先讨论这个问题的前提是java应用层的性能要大于redis性能,不然请求无法到达redis。那假如当前QPS是15万+,redis可以处理10万,那么另外5万,何应用可以处理呢?方案1:java本地缓存,我们还需在思考一个问题,何种数据存java本地缓存,何种数据存redis?这就需要根据缓存的特性进行分析。当前的java应用都是集群式,分布式的应用,那么本地缓存也将是多份的。除此之外,java本地缓存相对red

2020-12-13 14:54:25 153

原创 Java锁机制总结

1. 什么是线程安全问题?多线程操作公共对象时,如何保证对象数据不变脏。2. synchronized和ReentrantLock锁的区别?synchronized,在写法上变现为原生语法级别,是非公平锁,可重入锁,java 1.6版本前性能较差,reentranLock, 也是可重入锁,写法上变现为API级别的锁,相对synchronized有更多高级的功能,主要有一下三个:可实现公平锁:可以按照申请锁的时间顺序来获取锁等待可中断:持有锁的线程长期不释放锁的情况下,等待的线程可以选

2020-12-13 14:53:42 657

原创 HTTP面试题精选

1. 简述下TCP三次握手的过程,并解释采用3次握手建立连接的原因?1. 客户端发送建立连接请求,携带信息syn = 1,seq=X--第一次握手2. 服务端在收到建立连接的请求之后,服务回复确认建立连接,携带信息:syn = 1,ack = X+1, seq =Y--第二次握手(服务端准备好了)3. 客户端在收到服务端的确认信息后,向服务端回复确认连接建立通知,携带信息:ack = Y+1, seq=X+1(客户端也准备 好了)这样建立连接的原因:具体例子:“已失效的连接请求...

2020-12-12 19:48:00 648 1

空空如也

空空如也

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

TA关注的人

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