- 博客(134)
- 资源 (1)
- 收藏
- 关注
原创 ER图是什么?
ER图分为实体、属性、关系三个核心部分。实体是长方形体现,而属性则是椭圆形,关系为菱形。ER图的实体(entity)即数据模型中的数据对象,例如人、学生、音乐都可以作为一个数据对象,用长方体来表示,每个实体都有自己的实体成员(entity member)或者说实体对象(entity instance),例如学生实体里包括张三、李四等,实体成员(entity member)/实体实例(entity instance) 不需要出现在ER图中。ER图的属性(attribute)即数据对象所具有的属
2022-05-16 19:50:28 44284 1
原创 类图是什么?
UML类图,UML中的一种重要图形,是在面向对象语言用中用来表示一个类。如下图所示(它由两部分组成,类和类之间的关系):动物UML类图01 类类是具有相似结构、行为和关系的一组对象的描述符,是面向对象系统中最重要的构造块。如下图所示,就表示一个类:三个格子从上至下分别表示:类名称(如果是接口,就使用斜体表示) 类的特性(一般是类的字段和属性,可以没有) 类的操作(一般是类的方法或行为)它们前边的符号有以下几类:“+”表示public “-”表示private
2022-05-16 19:48:48 40901 12
原创 ThreadLocal 详解
线程本地变量。当使用 ThreadLocal 维护变量时, ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程。每个线程都有一个 ThreadLocalMap ( ThreadLocal 内部类),Map中元素的键为 ThreadLocal,而值对应线程的变量副本。
2024-10-28 16:40:42 795
原创 Docker-compose
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。
2024-04-11 10:02:43 1155
原创 EasyExcel使用,实体导入导出
实体与excel列的映射创建实体类使用 @ExcelProperty、@ExcelIgnore 等注解标识导出列;@ExcelIgnore 表示忽略此字段@ExcelProperty 用于标识列 value属性设置列的名称,index属性设置设置列的序号 从 0 开始@Data/*** @description: 使用@ExcelIgnore注解忽略此字段**//*** @description: 使用@ExcelProperty标识列。
2024-01-31 18:43:58 1521
原创 Java自定义注解
Java自定义注解一般使用场景为:自定义注解+拦截器或者AOP配合使用,可以用来设计自己的框架,也可以用于开发中的权限校验Java注解是什么,以下是引用自维基百科的内容Java注解又称Java标注,是JDK5.0版本开始支持加入源代码的特殊语法元数据。ava语言中的类、方法、变量、参数和包等都可以被标注。和Javadoc不同,Java标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java虚拟机可以保留标注内容,在运行时可以获取到标注内容。当然它也支持自定义Java标注。
2024-01-17 22:40:02 1046
原创 JVM垃圾回收
JVM(Java虚拟机)的垃圾回收是自动管理内存的过程,用于回收不再使用的对象并释放内存资源。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。这种自动化的内存管理机制极大地减轻了开发人员对手动释放内存的负担,提高了开发效率。垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序的结束,被保留的空间无法被其它对象使用,甚至可能导致内存溢出。
2023-11-02 13:48:27 266
原创 MySQL锁机制
锁是计算机协调多个进程或线程并发访问某一资源的机制,那为何要加入锁机制呢?因为在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。当并发事务同时访问一个共享的资源时,有可能导致数据不一致、数据无效等问题。例如我们在数据库的读现象中介绍过,在并发访问情况下,可能会出现脏读、不可重复读和幻读等读现象。
2023-10-15 14:42:33 403
原创 Netty全面了解, 使用,有这一篇就够了
详细介绍Netty的核心概念、特点和优势。解释非阻塞I/O和事件驱动的基本原理,以及Netty在这方面的应用。强调Netty的高性能、低内存消耗和良好的可定制性。
2023-10-06 15:35:51 1108
原创 RabbitMQ 安装 示例 全面了解有这一篇就够了
RabbitMQ是2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,简称MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法,由Erlang(专门针对于大数据高并发的语言)语言开发,可复用的企业消息系统,是当前最主流的消息中间件之一,具有可靠性、灵活的路由、消息集群简单、队列高可用、多种协议的支持、管理界面、跟踪机制以及插件机制。1.消息 就是数据,增删改查的数据。例如在员工管理系统中增删改查的数据。
2023-10-04 19:19:10 2191
原创 CompletableFuture 异步编排
一个业务逻辑有很多次的循环,每次循环之间没有影响,比如验证1万条url路径是否存在,正常情况要循环1万次,逐个去验证每一条URL,这样效率会很低,假设验证一条需要1分钟,总共就需要1万分钟,有点恐怖。问题:不过CPU执行哪个线程的时间和顺序是不确定的,即使设置了线程的优先级,因此使用多线程的风险也是比较大的,会出现很多预料不到的问题,一定要多熟悉概念,多构造不同的场景去测试才能够掌握!不用阻塞队列也是可以的,不过实现起来比较麻烦而已,有好用的为啥不用呢。然后继续上一段的任务(里面包含了串行,AND,OR)
2023-10-04 00:44:25 1528
原创 JVM性能调优-二.流程步骤实践
在内存相对紧张的情况下,可以按照上述的方式来进行内存的调优, 找到一个在GC频率和GC耗时上都可接受的一个内存设置,可以用较小的内存满足当前的服务需要。但当内存相对宽裕的时候,可以相对给服务多增加一点内存,可以减少GC的频率,GC的耗时相应会增加一些。一般要求低延时的可以考虑多设置一点内存, 对延时要求不高的,可以按照上述方式设置较小内存。如果在垃圾回收日志中观察到OutOfMemoryError,尝试把Java堆的大小扩大到物理内存的80%~90%。
2023-09-13 15:08:31 3355
原创 分库分表---理论
上面虽然已经把商品库分成3个库,但是随着业务的增加一个订单库也出现QPS过高,数据库响应速度来不及,一般mysql单机也就1000左右的QPS,如果超过1000就要考虑分库。而切分之后,数据可能分布在不同的节点上,此时Join带来的问题就比较麻烦了,考虑到性能,尽量避免使用Join查询。,修改代码,所有涉及到分库分表的表的增、删、改的代码,都要对新库进行增删改。同时,再有一个数据抽取服务,不断地从老库抽数据,往新库写,把一个表的多个字段分别拆成多个表,一般按字段的冷热拆分,热字段一个表,冷字段一个表。
2023-09-12 11:51:53 3254
原创 Ribbon
Ribbon是一个为客户端提供负载均衡功能的服务,它内部提供了一个叫做ILoadBalance的接口代表负载均衡器的操作,比如有添加服务器操作、选择服务器操作、获取所有的服务器列表、获取可用的服务器列表等等。
2023-09-11 15:20:17 2946
原创 Eureka服务注册与发现
(1) Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。(2) Eureka 主管服务注册与发现,在微服务中,以后了这两者,只需要使用服务的标识符(==就是那个在每个服务的yml文件中取得服务名称==),就可以访问到服务,不需要修改服务调用的配置文件。(3) Eureka遵循AP原则(高可用,分区容错性),因为使用了自我保护机制所以保证了高可用。
2023-09-11 14:57:09 3586
原创 SpringCloud理解篇
目前的微服务并没有一个统一的标准,一般是以业务来划分将传统的一站式应用,拆分成一个个的服务,彻底去耦合,一个微服务就是单功能业务,只做一件事。与微服务相对的叫巨石。Spring的三大模块:SpringBoot(构建),Spring Cloud(协调),Spring Cloud Data Flow(连接)
2023-09-11 14:47:50 2816
原创 BIO NIO AIO演变
1 IO,NIO,AIO区别IO 阻塞同步通信模式,客户端和服务器连接需要三次握手,使用简单,但吞吐量小。NIO 非阻塞同步通信模式,客户端与服务器通过Channel连接,采用多路复用器轮询注册的Channel。提高吞吐量和可靠性。AIO 非阻塞异步通信模式,NIO的升级版,采用异步通道实现异步通信,其read和write方法均是异步方法。
2023-09-11 14:21:45 2953
原创 JVM性能调优-一.思路方向
(6)吞吐量优先的应用:一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代.原因是,这样可以尽可能回收掉大部分短期对象,减少中期的对象,而年老代尽存放长期存活对象.对于GC的性能主要有2个方面的指标:吞吐量throughput(工作时间不算gc的时间占总的时间比)和暂停pause(gc发生时app对外显示的无法响应)。(2)Survivor空间中所有对象大小的总和大于survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,而无需等到年龄阀值。阀值大小一般为15。
2023-09-11 14:18:03 2952
原创 GC 算法与种类
相同点(1)三个算法都基于根搜索算法去判断一个对象是否应该被回收,而支撑根搜索算法可以正常工作的理论依据,就是语法中变量作用域的相关内容。(2)在GC线程开启时,或者说GC过程开始时,它们都要暂停应用程序(stop the world)。区别三种算法比较:效率:复制算法>标记-整理算法>标记-清除算法;内存整齐度:复制算法=标记-整理算法>标记-清除算法内存利用率:标记-整理算法=标记-清除算法>复制算法。
2023-09-11 14:14:42 3019
原创 常用JVM配置参数
上方参数的意思是说,执行printstack.bat脚本,而这个脚本做的事情是:D:/tools/jdk1.7_40/bin/jstack -F %1 > D:/a.txt,即当程序OOM时,在D:/a.txt中将会生成。上方日志的意思是说,GC之前,用了4M左右的内存,GC之后,用了374K内存,一共回收了将近4M。
2023-09-11 14:13:05 3440
原创 多线程-阻塞队列
在这篇博客中我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。
2023-09-11 13:57:01 2701
原创 ThreadLocal
什么是ThreadLocal?顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。注意:ThreadLocal不是用来解决共享对象的多线程访问问题的。
2023-09-11 13:51:53 2682
原创 ThreadPoolExecutor
官方API解释线程池的好处:(1)通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。(2)对线程进行一些维护和管理,比如定时开始,周期执行,并发数控制等等。
2023-09-11 13:47:16 2639
原创 volatile关键字
一般来说,处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证程序中各个语句的执行先后顺序同代码中的顺序一致,但是它会保证单线程程序最终执行结果和代码顺序执行的结果是一致的。什么意思呢?看下面例子a = 1;b = a;//写后读。a = 1;a = 2;//写后写。a = b;b = 1;//读后写。//以上语句不可重排,因为一旦重排会影响单线程最终执行结果a=1;b=2;//读后读,这个是可能重排的,因为这个执行先后顺序调换,不会影响执行结果。
2023-09-11 13:43:11 2669
原创 synchronized、Lock
如果我们创建的多个线程,存在着共享数据,那么就有可能出现线程的安全问题:当其中一个线程操作共享数据时,还未操作完成,另外的线程就参与进来,导致对共享数据的操作出现问题。关于synchronized一定要记住两点:(1)锁(既对象)一定是要唯一,否在锁无效。(2)对于同步代码块中的synchronized一定要放在共享变量上,否在也可能会达不到预期效果三、Lock简介Lock和synchronized 不同的是synchronized 会自动释放锁,而Lock必须手动释放,如果没有释放就可能造成死锁。
2023-09-11 13:40:22 2672
原创 线程生命周期、线程通讯
有关线程生命周期就要看下面这张图,围绕这张图讲解它的方法的含义,和不同方法间的区别。yield()让当前正在运行的线程回到就绪,以允许具有相同优先级的其他线程获得运行的机会。但是,实际中无法保证yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次选中。同时yield()不会放弃锁资源,所以有可能会出现死锁。1)第一个很重要的区别就是,wait方法必须正在同步环境下使用,比如synchronized方法或者同步代码块。
2023-09-11 13:31:15 2679
原创 docker镜像 容器 仓库
要想列出已经下载下来的镜像,可以使用命令。表示镜像的仓库源镜像的标签镜像ID镜像创建时间镜像大小其中仓库名、标签在之前的基础概念章节已经介绍过了。镜像 ID 则是镜像的唯一标识,一个镜像可以对应多个标签。如果要删除本地的镜像,可以使用命令,其格式为:docker image rm [选项] [ ...]其中,可以是镜像短 ID镜像长 ID镜像名或者镜像摘要我们可以用镜像的完整 ID,也称为长 ID,来删除镜像。
2023-09-08 22:14:01 2880
原创 docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。特性容器虚拟机启动秒级分钟级硬盘使用一般为 MB一般为 GB性能接近原生弱于系统支持量单机支持上千个容器一般几十个。
2023-09-08 21:52:53 2115
原创 Sentinel 部署 配置
在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以通过 RPC 相互调用,在 Spring Cloud 中可以用 RestTemplate + LoadBalanceClient 和 Feign 来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证 100% 可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。
2023-09-08 21:44:50 2060
原创 SpringBoot通过自定义注解实现日志打印
在我们日常的开发过程中通过打印详细的日志信息能够帮助我们很好地去发现开发过程中可能出现的Bug,特别是在开发层的接口时,我们一般会打印出请求参数和Response响应结果,但是如果这些打印日志的代码相对而言还是比较重复的,那么我们可以通过什么样的方式来简化日志打印的代码呢?@Retention: 用来修饰注解,是注解的注解,称为元注解。@Target:用来说明对象的作用范围@Documented:用来做标记使用/**
2023-09-08 13:07:11 779
原创 SpringBoot中自定义注解
本文主要记录在SpringBoot中对注解的操作,如自定义注解自定义注解配置SpringBoot全局异常处理完成参数校验自定义注解完成数据脱敏Aop与自定义注解的配合在下面的自定义注解中,需要注意的有两点注解的每个属性都有默认值,也可以不给默认值,但是在使用时就必须给没有默认值的字段属性赋值!@Constraint注解,此注解主要用于自定义注解关联约束验证器,至于怎么理解约束验证器,如定义了一个注解,约定了使用范围和每个属性的用处,那么怎么校验自定义注解被使用时是否符合你的要求呢/**
2023-09-08 12:04:54 1204
原创 MySQL主从复制与读写分离
配置好了MySql的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡。读写分离和负载均衡是MySql集群的基础需求,MaxScale就可以帮着我们方便的实现这些功能。MaxScale是MySql的兄弟公司MariaDB开发的,现在已经发展得非常成熟。MaxScale是插件式结构,允许用户开发适合自己的插件。
2023-09-04 13:49:30 244
原创 Nginx 部署 配置
什么是nginx?是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。什么是反向代理?反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
2023-09-01 23:43:38 541
原创 springCloudAlibaba详解
其中,命名服务负责服务的注册和发现,配置服务负责配置的管理和发布,服务治理负责服务的负载均衡和流量控制。Spring Cloud Alibaba 作为整套的微服务解决组件,只依靠目前阿里的开源组件是不够的,更多的是集成当前的社区组件,所以 Spring Cloud Alibaba 可以集成 Zuul,所以在开源社区,夹带了不少私货,这部分组件。阿里巴巴无疑是国内开源技术领域的最有影响力的公司之一,已经有Dubbo、Druid,FastJson等成功的开源组件,再加上阿里不遗余力的推广,社区发展也非常快。
2023-08-31 16:36:52 766
原创 性能瓶颈分析及调优
如果CPU User非常高,需要查看消耗在哪个进程,可以用top(linux)命令看出,接着用top –H –p 看哪个线程消耗资源高,如果是java应用,就可以用jstack看出此线程正在执行的堆栈,看资源消耗在哪个方法上,查看源代码就知道问题所在;JVM参数不合理,容器配置不合理,慢SQL,慢事务,数据库设计不合理,程序架构规划不合理,程序本身设计有问题(串行处理、请求的处理线程不够、无缓冲、无缓存、生产者和消费者不协调等),造成系统在大量用户方位时性能低下而造成的瓶颈。
2023-08-30 15:43:28 215
原创 Elasticsearch集群内的原理
索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。技术上来说,一个主分片最大能够存储 Integer.MAX_VALUE - 128 个文档:一个副本分片只是一个主分片的拷贝。而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。一个运行中的 Elasticsearch 实例称为一个 节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。
2023-08-30 15:42:18 383
原创 Elasticsearch入门介绍
要了解ES首先就要弄清楚下面的几个概念,这样也不会对ES产生一些误解:1 近实时ES并不是一个标准的数据库,它不像MongoDB,它侧重于对存储的数据进行搜索。因此要注意到它不是实时读写的,这也就意味着,刚刚存储的数据,并不能马上查询到。当然这里还要区分查询的方式,ES也有数据的查询以及搜索,这里的近实时强调的是搜索....2 集群在ES中,对用户来说集群是很透明的。你只需要指定一个集群的名字(默认是elasticsearch),启动的时候,凡是集群是这个名字的,都会默认加入到一个集群中。
2023-08-30 15:41:28 644
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人