- 博客(137)
- 资源 (1)
- 收藏
- 关注
原创 性能瓶颈分析及调优
如果CPU User非常高,需要查看消耗在哪个进程,可以用top(linux)命令看出,接着用top –H –p 看哪个线程消耗资源高,如果是java应用,就可以用jstack看出此线程正在执行的堆栈,看资源消耗在哪个方法上,查看源代码就知道问题所在;JVM参数不合理,容器配置不合理,慢SQL,慢事务,数据库设计不合理,程序架构规划不合理,程序本身设计有问题(串行处理、请求的处理线程不够、无缓冲、无缓存、生产者和消费者不协调等),造成系统在大量用户方位时性能低下而造成的瓶颈。
2023-08-30 15:43:28
244
原创 Elasticsearch集群内的原理
索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。技术上来说,一个主分片最大能够存储 Integer.MAX_VALUE - 128 个文档:一个副本分片只是一个主分片的拷贝。而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。一个运行中的 Elasticsearch 实例称为一个 节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。
2023-08-30 15:42:18
395
原创 Elasticsearch入门介绍
要了解ES首先就要弄清楚下面的几个概念,这样也不会对ES产生一些误解:1 近实时ES并不是一个标准的数据库,它不像MongoDB,它侧重于对存储的数据进行搜索。因此要注意到它不是实时读写的,这也就意味着,刚刚存储的数据,并不能马上查询到。当然这里还要区分查询的方式,ES也有数据的查询以及搜索,这里的近实时强调的是搜索....2 集群在ES中,对用户来说集群是很透明的。你只需要指定一个集群的名字(默认是elasticsearch),启动的时候,凡是集群是这个名字的,都会默认加入到一个集群中。
2023-08-30 15:41:28
658
原创 Elasticsearch基础
Elasticsearch 不仅存储文档,而且 _索引 每个文档的内容使之可以被检索。适当的 HTTP 方法 或 谓词 : GET`、 `POST`、 `PUT`、 `HEAD 或者 `DELETE`。Elasticsearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。Elasticsearch 是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索。索引名称 类型名称。默认的,一个文档中的每一个属性都是 被索引 的(有一个倒排索引)和可搜索的。
2023-08-30 15:38:30
893
原创 ELK原理和介绍
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
2023-08-30 15:30:55
1170
原创 LRU淘汰策略执行过程
Redis无论是惰性删除还是定期删除,都可能存在删除不尽的情况,无法删除完全,比如每次删除完过期的 key 还是超过 25%,且这些 key 再也不会被客户端访问。这样的话,定期删除和堕性删除可能都彻底的清理掉。如果这种情况长时间持续下去,可能会导致内存耗尽,所以Redis必须有一个完善的内存淘汰机制来保障。这就是我们这一篇的重点,Redis内存自动淘汰机制。
2023-08-23 12:37:30
664
原创 Redis过期数据的删除策略
Redis 是一个kv型数据库,我们所有的数据都是存放在内存中的,但是内存是有大小限制的,不可能无限制的增量。想要把不需要的数据清理掉,一种办法是直接删除,这个咱们前面章节有详细说过;另外一种就是设置过期时间,缓存过期后,由Redis系统自行删除。这边需要注意的是,缓存过期之后,并不是马上删除的,那Redis是怎么删除过期数据的呢?主要通过两个方式惰性删除通过定时任务,定期选取部分数据删除。
2023-08-23 12:33:39
959
原创 nacos 部署 配置
注意:如果有需要设置nacos用户名和密码(一般都需要),上面pom中添加的nacos的版本必须在0.3.6以上。注意:此处注解中的autoRefreshed 和nacos.xml中的auto-refreshed都需要加上才能实现自动刷新。spring配置文件中可能会有一些数据库相关配置,redis相关配置的引用,打包之后去target下检查一下是否引用成功。注解方式是在类上面加获取nacos配置信息的相关注解。spring项目使用nacos有两种配置方法,分别是注解方式和xml方式。
2023-04-21 19:20:17
9211
2
原创 spring getway的配置
是由于路由转发规则默认转发到商品微服务( http://127.0.0.1:9002/productservice/product/1 )路径上,而商品微服务又没有 product-service 对应的映射配置。重新启动网关,我们在浏览器访问 http://127.0.0.1:8080/product-service/product/1,会抛出 404。比如在网页上请求 http://localhost:8080/product-service/product,此时会将请求转发到 htt。
2023-04-21 19:16:46
966
1
原创 阿里 Arthas (阿尔萨斯)工具的使用
结论:arthas 可以通过启动时指定不同的端口来监听不同的java程序,每次如果采用exit或者quit退出,都会保留实例,下次可以通过指定上次相同的端口,进入同一个实例,但是进入同一个实例,只能再次监听同一个java程序,不能使用同一个实例两次监听不同的程序,会报错端口冲突,告诉你三种解决办法;③通过java -jar arthas-boot.jar再次进入,因为没有指定监听的端口号,所以跟上一次共用的同一个session,也就是监听的25985的进程。③再次查看3658端口占用情况,发现未被占用了;
2023-04-21 19:12:07
3988
1
原创 Redis 分布式锁解决方案
分布式系统设计是实现复杂性和收益的平衡,既要尽可能地安全可靠,也要避免过度设计。Redlock 确实能够提供更安全的分布式锁,但也是有代价的,需要更多的 Redis 节点。在实际业务中,一般使用基于单点的 Redis 实现分布式锁就可以满足绝大部分的需求,偶尔出现数据不一致的情况,可通过人工介入回补数据进行解决,正所谓“技术不够,人工来凑”!。
2023-04-21 19:09:04
1323
1
原创 强引用和弱引用区别
在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。同样,弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。在一个方法的内部有一个强引用,这个引用保存在Java栈中,而真正的引用内容(Object)保存在Java堆中。强引用是使用最普遍的引用。当这个方法运行完成后,就会退出方法栈,则引用对象的引用数为0,这个对象会被回收。
2023-03-28 14:30:10
770
原创 缓存一致性问题
在面临缓存穿透的时候,我们其中一个解决方案是:查询数据库如果没有数据,则约定一个空数据格式放入缓存中,当再次查询的时候,先查询缓存,发现是一个空数据格式,则直接返回空,避免数据库被瞬间流量击垮。如果在删除缓存后,马上有新线程查询缓存,新线程发现缓存不存在(刚被删),新线程查询数据库后将数据放于缓存,老线程删除数据库成功。缓存一致性问题的表现:同一份数据,缓存中的数据与数据库中的数据不一致,那么上升到业务层面就有着千奇百怪的现象了,比如每次读都是读的老数据,或者每次读是一份过时的数据等。如果删除缓存失败呢?
2023-03-28 13:30:59
218
原创 spring加载bean流程解析
然后,再注册到一个ConcurrentHashMap中,在spring中具体的方法就是registerBeanDefinition(),这个Map存的key是对象的名字,比如Person这个对象,它的名字就是person,值是BeanDefination,它位于DefaultListableBeanFactory类下面的beanDefinitionMap类属性中,同时将所有的bean的名字放入到beanDefinitionNames这个list中,目的就是方便取beanName;
2023-03-07 16:59:56
1084
1
原创 什么是Netty
Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络 IO 程序,是目前最流行的 NIO 框架,Netty 在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,知名的 Elasticsearch 、Dubbo 框架内部都采用了 Netty。③服务器端用一个线程通过多路复用搞定所有的 IO 操作(包括连接,读、写等),编码简单,清晰明了,但是如果客户端连接数量较多时,当对应多个读时,还是会出现阻塞现象,当这种情况发生时将无法支撑高并发的场景。
2023-03-06 21:03:47
2524
1
原创 创建线程的几种方式
注意:因为要通过Thread对象来开启线程,上面给出了Thread类的构造方法,没有直接的方法可以传入Callable,所以我们要对其进行加功。所以提供了一个FutureTask类,通过它可以获取返回的结果。且它间接实现了Runnable接口,所以可以传入Thread的构造函数。注意:开启线程要使用start()方法,run()方法只是普通的方法调用。实际上的创建线程还是通过本地方法,Java本身并不能开启线程。注意:这里要通过Thread对象来开启线程。方式四:通过线程池创建。
2023-03-06 20:49:00
269
原创 springboot 自动装配
@ComponentScan。, 还记得在创建上下文中我们最后一张图,我们注册了一些BeanFactoryPostProcessor。中获取所有全类限定名,便可提供给上层方法进行获取,最后创建对应的BeanDefinition。类型的后置处理方法,在该方法获取所有注册的BeanFactoryPostProcessor。有这么一个注解, 因此,这里selector.selectImports。
2023-03-02 19:58:44
269
原创 java 集合
Java是在JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递常见的有泛型类、泛型接口、泛型方法语法T:tape 类型E:element元素K:key键值V:value值叫做类型占位符,表示一种引用类型。提供代码的重用性防止类型转换异常,提高代码的安全性特点:无序,无下标,元素不可重复方法:均继承Collection接口存储结构:红黑树基于排列顺序实现元素不重复。实现了SortedSet接口,对集合元素自动排序。
2022-08-20 15:20:22
6150
原创 九.Redis 集群(cluster 模式)
Redis 集群(包括很多小集群)实现了对 Redis 的水平扩容,即启动 N 个 redis 节点,将整个数据库分布存储在这 N 个节点中,每个节点存储总数据的 1/N,即一个小集群存储 1/N 的数据,每个小集群里面维护好自己的 1/N 的数据。Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。该模式的 redis 集群特点是:分治、分片。普通方式登录:可能直接进入读主机,存储数据
2022-08-07 11:09:19
6820
原创 八.Redis 主从复制
主机数据更新后根据配置和策略, 自动同步到备机的 master/slaver 机制,Master 以写为主,Slave 以读为主,主从复制节点间数据是全量的。
2022-08-07 11:08:31
6367
原创 七.Redis 持久化之 AOF
AOF 文件持续增长而过大时,会 fork 出一条新进程来将文件重写 (也是先写临时文件最后再 rename),redis4.0 版本后的重写,是指把 rdb 的快照,以二进制的形式附在新的 aof 头部,作为已有的历史数据,替换掉原来的流水账操作。AOF 采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当 AOF 文件的大小超过所设定的阈值时,Redis 就会启动 AOF 文件的内容压缩,只保留可以恢复数据的最小指令集,可以使用命令 bgrewriteaof。...
2022-08-07 11:07:41
7562
原创 四. Redis 事务、锁机制秒杀
Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis 事务的主要作用就是串联多个命令防止别的命令插队。...
2022-08-07 11:00:58
6330
原创 三.Redis 的发布和订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。
2022-08-07 11:00:08
6615
原创 一.Redis 概述
Redis 是一个开源的 key-value 存储系统。和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string (字符串)、list (链表)、set (集合)、zset (sorted set –有序集合) 和 hash(哈希类型)。这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。...
2022-08-07 10:55:58
6316
原创 多态的实现
多态实现条件在Java中要实现多态,那么必须要满足以下几个条件,缺一不可:必须在继承体系下子类必须要对父类中的方法进行重写通过父类的引用调用重写的方法多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法。运行结果👇在上述代码中,分割线上方的代码是类的实现者 编写的,分割线下方的代码是类的调用者编写的当类的调用者在编写eat();这个方法的时候,参数类型为Animal(父类),此时在该方法内部并不知道,也并不关注当前的animal引用指向的是哪个类型(哪个子类)的实例。.
2022-06-07 21:21:46
9136
原创 Java中的多态:什么是多态?
Java中的多态:什么是多态?多态性是面向对象编程的三大重要特征之一,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。对面向对象来说,多态分为编译时多态和运行时多态。 其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。Java实现多态有 3
2022-05-27 21:12:18
9582
1
原创 业务架构图是什么?
业务架构图想表达什么?有什么用?给谁看?答1:架构图需要表达是业务系统之间的关系,帮助你梳理业务结构。答2:将复杂的业务逻辑简单化,降低理解难度。答3:给用户以及各层级领导。所以经过分解,我们知道了业务架构是什么。答案很简单:业务架构图是一种表达业务层级和关系的工具。业务架构服务于业务目标,通过描绘业务上下层关系,梳理一整套完整、简单的业务视图,降低业务系统的复杂度,提高客户理解度,最终给客户最直观的业务体现。业务架构类型常用的业务架构分层有2种:上中下结构:资源层—数据
2022-05-16 19:45:57
10797
原创 什么是原型图设计?
原型设计是产品设计过程中最重要的步骤之一,但是原型设计仍然让一些设计师和项目团队感到头疼。原型几乎可以是任何东西,草图或者是完美的高保真界面。究竟是什么原型?“原型”的最基本定义是“最终产品的仿真或样本版本,用于发布之前方便测试。” 原型的目标是在花费大量时间和金钱进入开发产品前,让开发者快速的了解产品创意。原型图对于是否能启动开发起着至关重要的作用。它还可以提前避免需要改进的地方。假设你用你的产品理念的草案给客户演示,你会如何想如何设计该产品。然后,您可以不断的调整您的初始猜测并修改原型。
2022-05-16 19:39:40
9938
原创 面向过程与面向对象的区别
在开发阶段,我们都知道,如果对一个功能进行扩展,如果只是一味地对方法进行修改,可能会造成一些问题,诸如可能会引入新的bug,或者增加代码的复杂度,对代码结构造成破坏、冗余,还需要重新进行全面的测试。子类一定是增加父类的能力而不是减少父类的能力,因为子类比父类的能力更多,把能力多的对象当成能力少的对象来用当然没有任何问题。封装符合面向对象设计的单一性原则,一个类把自己该做的事情封装起来,而不是暴露给其他类去处理,当内部的逻辑发生变化时,外部调用不用因此而修改,它们只调用开放的接口,而不用去关心内部的实现。
2022-05-13 19:48:56
9017
原创 内存泄漏和内存溢出
内存泄露什么是内存泄漏?内存泄漏:是指程序中已动态分配的堆内存由于某种原因未释放或⽆法释放,造成系统内存的浪费,导致程序运⾏速度减慢甚⾄系统奔溃等严重后果内存泄漏的特性:内存泄漏具有隐蔽性,积累性的特征,⽐其他内存⾮法访问错误更难检测。这是因为内存泄漏产⽣的原因是内存块未被释放,属于遗漏型缺陷⽽不是过错型缺陷。此外,内存泄漏不会直接产⽣可观察的错误,⽽是逐渐积累,降低系统的整体性性能。内存溢出 :内存溢出:out of memory 指程序在申请内存时,没有⾜够的内存空间供其使⽤
2022-05-10 09:00:50
3083
1
原创 Java 中 == 和 equals 的区别?
equals: equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。==: ==比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。举个例子:==是判断两个人是不是住在同一个地址,而equals是判断同一...
2022-05-06 21:29:08
2785
原创 vue父子传值
为了更好的实现开闭原则,更好的扩展功能,我们常常将页面以组件的方式引进来,因此在前端的项目中父子传值就来了,在这里列举几种传值的方式,如果有什么不足请大家及时提醒父组件向子组件传值以及调用方法父向子传值:props父组件<template> //页面引入直接用 <children :arr="childrenList"></children></template><script>/...
2022-02-27 19:56:03
6450
原创 Android Studio 安装-超详细
步骤1 - 系统要求可以在以下的操作系统开始 Android 应用程序开发:Microsoft® Windows® 10 (64位)。所有开发 Android 应用程序需要的工具都是开源的,并且可以从互联网上下载。以下是开始 Android 应用程序编程之前需要的软件列表:Java JDK8 及以后版本 Java 运行时环境 Android Studio步骤2 - 安装 Android Studio概览Android Studio 是开发 Android 应用程序的...
2021-12-04 09:43:16
11510
2
原创 java中的数据类型转换
其他类型转StringString s = String.valueOf( value); // 其中 value 为任意一种数字类型。 字符串型转换成各种数字类型:String s = "11111"; byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt( s ); long l = Long.parseLong( s ); Floa..
2021-11-28 20:59:44
8891
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅