自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 搜索引擎ES介绍和认知

注意:从Elasticsearch6开始一个索引里面只能有一个类型,后续计划删除类型这个概念,从ES6开始一般让索引名称和类型名称一致。倒排索引:从词语到文章,可以将文章的词语分词后简历词语的索引,当我们检索词语的时候,可以立刻定位出文章的位置,时间复杂度O(1)正排索引:就是从文章到词语的检索,如果我们想检索一个单词,先要找到n个文章,在找到每个文章中的M个词语,复杂度O(N*M).这是因为es存储数据使用的是倒排索引,那什么是倒排索引呢,对应的什么又是正排索引呢?二、ES和传统的关系型数据库的类比。..

2022-08-30 10:57:40 803 1

原创 spring底层原理 bean的创建过程,以及解释循环依赖问题

注意此处创建bean的过程分为两部分,先通过反射实例化对象,然后给属性赋值,此处A的属性假设是依赖B,B的属性有依赖A,就会导致循环依赖,需要三级缓存解决。很明显,构造方法要求实例化A前,把B先实力化,可是当我去实力化B的时候,三级缓存里面根本就没有A,因为A都没实例化成功,还没放入三级缓存,所以最终导致A和B都不能实例化成功。2.如果是原型模式,即使是属性注入也会有问题,当A实例化后,注入B时,B去实例化后注入A,因为是原型模式,会重新生成一个A,然后又重新生成B,导致死循环。// 获取引用的类加载器。.

2022-08-17 16:06:44 326

原创 java支持的三种网络模型BIO,NIO,AIO

为了解决这种连理了连接但是不发送数据的情况,我们可以使用示例中的多线程来解决,每一个连接就创建一个线程,实际开发中可定是要用线程池来处理,避免并发高,资源打满对服务器造成压力。从实例中可以看出,服务端一个线程在非阻塞的接受客户端连接,然后放入到一个channel集合中,不停的死循环遍历集合,执行每一个连接的请求。在这个是实例中,服务端的accept方法当没有客户端的连接会阻塞在这里,但是这不是阻塞的关键,没有连接我阻塞这也很合理。一个有效的请求开启一个线程处理,当后端资源没有准备好,read不会阻塞。...

2022-08-12 17:49:38 273

原创 ShardingSphere-数据库分库分表简介

一、简介shardingsphere 是一套开源的分布式数据库中间件的产品。旗下有两个比较重要的产品sharding jdbc 和sharding proxy1.sharding jdbc :从图中可以清楚看到,是嵌入到应用程序中,所有的分库分表逻辑都是有开发人员自己控制,功能相对灵活,但是对业务侵入性较大。可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架2.sharding proxy:从图中中可以清晰看到,他是独立部署的,目前支持mysql和postgresql。对业务零侵

2022-07-12 20:26:12 657

原创 kafka简单介绍

kafka是一个分布式的,支持数据分区,多副本,基于zookeeper协调的分布式消息系统。上个文章介绍了rabbitmq,他和kafaka的最大区别就是kafak是分布式的,并发处理能力强大。broker:消息中间处理节点,一个kafka节点就是一个broker,可以组成集群produce:生产者,向broker发送消息的客户端consumer:消费者,从broker读取消息consumer group:消费组,每个consumer对应一个组,一条消息可以被多个消费组消费,但是每个消费组里面只能

2022-07-11 10:21:54 1790

原创 消息中间件之RabbitMQ知识架构疏导

一.MQ概述消息队列,在分布是系统之间进行通信,保存消息的容器mq的优势:1.应用解耦库存系统的出错,可能影响订单系统出错。加上中间件MQ降低系统耦合2.异步提速3.削峰劣势:增加了中间件,系统维护成本和复杂度增加3.常见MQ产品二、RabbitMQ从图形中可以看出,RabbitMQ和其他产品的特点在于,交换机和队列的概念,所有的消息都是由交换机绑定到队列从而实现消息传递,即使在直连或者工作模式中看不到交换机的配置,其实是使用了默认的交换机。相关概念:Broker:接收和

2022-07-07 18:10:06 261

原创 mysql innodb 存储引擎的特性—行锁剖析

先放上一张思维导图,没办法很穷只能用免费版的模板,毕竟我还在每天吃土,没钱办会员。看懂这个图,其实对于 innodb 存储引擎的特性你已经掌握了。一、mysql的常用存储引擎myisam:不支持事务,表锁。数据文件和索引文件分开,文件可压缩innnodb:支持事务,行锁(可升级为表锁),支持主外键等。今天主要讨论innodb的存储引擎,其他不多做补充。二、事物的隔离级别先在网上随意找个图,说下结论,在mysql的 innodb搜索引擎下,默认的RR可重复读级别下,是可以解决幻读的。图中并不准确,

2022-06-29 12:13:00 404

原创 zookeeper基础点扫盲,不需要知道很多你也遇不上,我说的

zookeeper

2022-06-27 16:22:36 225

原创 redis缓存穿透,缓存击穿,缓存雪崩解决方案

请大家了解下redisson,在之前讲过的分布式锁和下面讲的布隆过滤器还有读写锁都需要使用到redisson.

2022-06-23 16:14:39 205

原创 高并发下之redis锁优化实战

背景:模拟商城秒杀活动减库存,给定库存300代码:前提条件:模拟集群部署模式下,对库存操作,所以启动两个Tomcat实例,8080和9080端口。并用nginx做负载均衡,配置见下图;启动redis,然后再启动两个实例,用jmeter压测,通过访问80端口,让nginx监听去交给对应的服务执行请求,1秒200个请求试下,压测配置如下图:查看结果:可以发现在库存重复扣减了,一件商品多卖,出现超卖,显然不正确。这个时候怎么解决呢?有些道友可能会说这是因为没有加锁,所以在8080的服务器里面看到了

2022-06-14 17:06:46 298 1

原创 Redis主从、哨兵、集群模式介绍

Redis架构通俗讲解

2022-06-13 17:03:52 1177

原创 redis单线程问题强制梳理门外汉扫盲

Redis扫盲误区

2022-06-10 17:46:00 162

原创 上线文切换

操作系统内存管理操作系统有用户空间与内核空间两个概念,目的也是为了做到程序运行安全隔离与稳定,以32位操作系统4G大小的内存空间为例Linux为内核代码和数据结构预留了几个页框,这些页永远不会被转出到磁盘上。从0x00000000到0xc0000000(PAGE_OFFSET)的线性地址可由用户代码和内核代码进行引用(即用户空间)。从0xc0000000(PAGE_OFFSET)到0xFFFFFFFFF的线性地址只能由内核代码进行访问(即内核空间)。内核代码及其数据结构都必须位于这1GB的地址空间中,但

2022-05-07 15:54:02 120

原创 java线上诊断工具Arthas-实战案例

前面文章提到过JVM调优工具可以使用Arthas。也听我的朋友阿凯吹过牛逼,说线上排查问题使用他很丝滑。首先我就来简单介绍下他的作用:(粘贴官网)Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。举个栗子:当你遇到如下问题,你可以永远相信Arthas1.我

2022-04-14 20:19:08 1294

原创 mysql优化-Explain工具介绍

explain管金子可以模拟优化区,分析查询语句的性能瓶颈。加上该关键字都只是返回了执行计划的信息,而不是执行SQL语句,当然子查询还是会执行。explain中的关键列作出以下解释1.ID:查询语句的编号,编号越大,执行的优先级越高,相同编号大小自上而下执行2.select_type:查询的的复杂度;有以下几个类型:simple 简单的查询,没有子查询和union derived:from后的子查询,mysql将其生成一个临时表(优先级最高) subquery:

2022-04-02 16:11:30 675

原创 mysql索引数据结构浅谈个人理解

一句话总结:索引是一种排好序的数据结构先来讨论下一些简单的树形结构:二叉搜索树:简单来讲一个父节点,左子节点放小于更节点数,右子节点放大于父节点数看起来不错,为什么索引不用这种结构呢,因为他有个致命缺点,单边增长,假如我们数据是自增插入的,看看结构是什么样我的天啊,这和链表有什么区别,加入我很不幸的查询的是最大一个数,你得把整个数据挨个查出来,时间复杂度o(n).平衡二叉树:任意节点的子树的高度差都小于等于 1,也就是放置了单边增长问题。(实际应用不使用,多使用红黑树)平衡的方式:最小不平衡

2022-04-01 17:11:26 938

原创 jvm调优工具及命令

1.jps显示当前所有java进程pid的命令2. jinfo用于观察、修改运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数。jinfo -flags pidjinfo -sysprops pid3.jmap(Java Memory Map)命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小。jmap -heap:打印jvm 内存整体使用情况-his.

2022-01-14 15:26:45 318

原创 垃圾回收算法

一:垃圾回收算法分代收集理论:众所周知,垃圾回收一般值对我们的堆区做垃圾回收堆区我们2:1分为老年代和年轻代,所以针对不同的区域采用不同的算法。1.标记-复制:每次只使用其中一半的空间,将另一半空间清除后复制整理到另一半,孙然会浪费一般空间,但是复制的空间减小,效率高(年轻代采用的收集算法,应为都是朝生夕死的对象,所以存活的需要复制的对象很少)2.标记-清除:每次将垃圾对象删除后,就不做处理了,内存空间很分散,导致可利用率降低3:。标记-整理:每次将垃圾对象删除后,将标记对象整理为连续的,剩余空.

2022-01-14 15:25:30 113

原创 jvm类加载器/类加载过程/对象创建过程

共勉互学,如有误区请指出:一:jvm虚拟机加载我们class,需要依靠类加载器。什么是类加载器,其实就是一个对象,这个对象什么时候创建的,简单指出就是操作系统调用底层文件jvm.dll文件创建而出(c++s实现),一共有三种类加载器,引导类加载器,扩展类,应用类。那么问题来了,搞这么多加载器干嘛,个人理解为了隔离和规定,因为他每个加载器只加载对应的路径的.class文件引导类:JRE的lib目录下的核心类库扩展类:JRE的lib目录下的ext扩展目录中的应用类:自己写的类介绍先类的加载过程:.

2022-01-14 15:23:39 481 1

原创 jvm内存模型

2022-01-14 15:22:01 101

原创 tomcat整体架构图

tomcat整体架构图

2022-01-14 15:15:02 268

原创 浅谈Java内置锁synchronized理解

第一需要知道在jdk1.5以前,synchronized是较重量级的,但是jdk1.8后做了优化。其性能能和李二狗写的reentrancelock一教高下。(平生不识李二狗,学透并发也枉然)再次先友情提示下:CAS可以先了解下,简单来说就是比较与交换,类似于乐观锁得概念,在对旧值做修改前,先从内存中取出当前值是否域旧值相等,如果相等就说明没有人修改,可以将新值替换旧值完成修改。(再次说明下CAS有两个确定,1.不满足条件一直做自旋循环可能导致CPU标高2.ABA问题,可以通过加版本号解决。扯得有点多了,但

2021-11-19 14:49:22 233

原创 springmvc单例模式线程安全问题

1、在@Controller/@Service等容器中,默认情况下,scope值是单例-singleton的,也是线程不安全的。2、尽量不要在@Controller/@Service等容器中定义静态变量,不论是单例(singleton)还是多实例(prototype)他都是线程不安全的。3、默认注入的Bean对象,在不设置scope的时候他也是线程不安全的。4、一定要定义变量的话,用ThreadLocal来封装,这个是线程安全的5.如果单例Bean,是一个无状态Bean,也就是线程中的操作不会对Be

2021-01-08 10:02:27 1092 3

空空如也

空空如也

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

TA关注的人

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