- 博客(41)
- 收藏
- 关注
原创 JVM 类加载机制2
1.隔离加载类。在某些框架内进行中间件与应用的模块之间进行隔离,把类加载到不同的环境。2.修改类加载方式。3.扩展加载源。比如:从数据库、网络、电视机顶盒进行类加载。4.防止源码泄漏。比如:编译时字节码进行加密,需要通过自定义类加载器对字节码进行解密还原。
2024-09-27 09:00:00
622
原创 JVM 类加载机制1
在JVM虚拟机实现规范中,通过ClassLoader类加载器把*.class字节码文件(文件流)加载到内存,并对字节码文件内容进行验证、准备、解析和初始化,最终形成可以被虚拟机直接使用的java.lang.Class对象,这个过程被称作类加载。类是在运行期间第一次使用时,被类加载器动态加载至JVM。JVM不会一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。
2024-09-26 22:03:45
832
原创 JVM 基本组成
如果是热机状态,正常情况下,集群中的一半的机器可以勉强支撑负载流量,但由于刚启动的JVM均是解释执行,还没有进行热点代码统计和JIT动态编译,导致机器启动之后,当前 1/2 发布成功的服务器马上全部宕机。2为了提高执行效率,JVM还会在运行期间,JVM通过热点代码的统计分析,识别高频的方法调用,循环体、公共模块等,当超过阈值时,JVM会基于JIT 即时编译器(just-in-time compiler)将热点代码转换成机器码,直接交给CPU执行,提高执行效率。1JVM的执行方式以解释执行为主。
2024-09-26 18:00:03
1194
原创 线程池分类及常见方法
线程池内部维护了若干个线程,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待。
2024-09-25 19:28:10
853
原创 线程的状态及常用方法
线程的状态有以下6种:New、Runnable、Blocked、Waiting、Timed Waiting、Terminated。join()方法用于实现线程插队,调用完毕后会释放锁。sleep()方法用于实现线程休眠,调用完毕后不会释放锁。interrupt()方法用于设置该线程的中断状态为true。yield()方法用于让出CPU执行。JVM的线程调度模型:分时调度模型和抢占式调度模型。
2024-09-25 16:10:26
873
原创 多线程基础
程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,可以理解为程序是包含静态代码的文件。例如:浏览器软件、音乐播放器软件等软件的安装目录和文件。进程是程序的一次执行过程,是系统运行程序的基本单位。在Windows系统中,每一个正在执行的exe文件或后台服务,都是一个进程,由操作系统统一管理并分配资源,因此进程是动态的。例如:正在运行中的浏览器就是一个进程,正在运行中的音乐播放器是另一个进程,同理,正在运行中的QQ和WPS等都是进程。操作系统运行一个程序,即是一个进程从创建,运行到消亡的过程。
2024-09-20 15:00:00
1292
原创 微服务通信
Feign是Spring Cloud提供的⼀个声明式的伪Http客户端, 它使得调⽤远程服务就像调⽤本地服务⼀样简单, 只需要创建⼀个接⼝并添加⼀个注解即可。Nacos很好的兼容了Feign, Feign默认集了Ribbon, 所以在Nacos下使⽤Fegin默认就实现了负载均衡的效果官⽅地址: https://github.com/OpenFeign/feignFeign可以⽀持很多的⾃定义配置,如下表所示:类型作⽤说明修改⽇志级别。
2024-09-20 10:00:00
927
原创 微服务注册中⼼2
我们最终的⽬的,是修改nacos中的配置后,微服务中⽆需重启即可让配置⽣效,也就是配置热更新。微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项⽬启动。Nacos⼀⽅⾯可以将配置集中管理,另⼀⽅可以在配置变更时,及时通知微服务,实现配置的热更新。当配置越来越多的时候,我们就发现有很多配置是重复的,这时候就考虑可不可以将公共配置⽂件提取出来。不同服务之间实现配置共享的原理类似于⽂件引⼊,就是定义⼀个公共配置,然后在当前配置中引⼊。
2024-09-19 10:44:32
1222
原创 微服务注册中⼼1
Nacos 致⼒于帮助您发现、配置和管理微服务。Nacos 提供了⼀组简单易⽤的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。nacos的作⽤就是⼀个注册中⼼,⽤来管理注册上来的各个微服务是 Netflixfa 发布的⼀个负载均衡器,有助于控制 HTTP 和 TCP客户端⾏为。在 SpringCloud 中,Nacos⼀般配合Ribbon进⾏使⽤,Ribbon提供了客户端负载均衡的功能,Ribbon利⽤从Nacos中读取到的服务信息,在调⽤服务节点提供的服务时,会合理的进⾏负载。
2024-09-19 10:32:39
1291
原创 Reflection反射
在Java中,除了int等基本类型外,Java的其他类型全部都是class(包括interface)。例如:●String●Object●Runnable●Exception●...Java 反射机制是 Java 语言的一个重要特性。在学习 Java 反射机制前,大家应该先了解两个概念:编译期和运行期。编译期:是指把源码交给编译器编译成计算机可以执行的文件的过程。在 Java 中也就是把 Java 代码编成 class 文件的过程。
2024-09-11 19:29:11
905
原创 微服务基础知识
SOA 全称为 Service-Oriented Architecture,即⾯向服务的架构。它可以根据需求通过⽹络对松散耦合的粗粒度应⽤组件(服务)进⾏分布式部署、组合和使⽤。⼀个服务通常以独⽴的形式存在于操作系统进程中。站在功能的⻆度,把业务逻辑抽象成可复⽤、可组装的服务,通过服务的编排实现业务的快速再⽣,⽬的:把原先固有的业务功能转变为通⽤的业务服务,实现业务逻辑的快速复⽤。通过上⾯的描述可以发现 SOA 有如下⼏个特点:分布式、可重⽤、扩展灵活、松耦合。
2024-09-11 19:08:59
1305
原创 spring boot Bean的生命周期
一.Bean 实例化的基本流程Bean 实例化的基本流程Spring容器在进行初始化时,会将xml配置的的信息封装成一个BeanDefinition对象,所有的BeanDefinition存储到一个名为beanDefinitionMap的Map集合中去,Spring框架在对该Map进行遍历,使用反射创建Bean实例对象,创建好的Bean对象存储在一个名为singletonObjects的Map集合中,当调用getBean方法时则最终从该Map集合中取出Bean实例对象返回。
2024-09-10 21:13:10
1325
原创 Redis2
官方推荐两个都启用,如果对数据不敏感,可以选单独用RDB,不建议单独用 AOF,因为可能会出现Bug如果只是做纯内存缓存,可以都不用。
2024-09-10 10:30:00
2034
原创 Redis1
一个神奇的网站问题现象海量用户高并发罪魁祸首——关系型数据库性能瓶颈:磁盘IO性能低下扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群解决思路降低磁盘IO次数,越低越好 —— 内存存储去除数据间关系,越简单越好 —— 不存储关系,仅存储数据Nosql解概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库特征:1. 数据间没有必然的关联关系2. 内部采用单线程机制进行工作。
2024-09-06 17:56:59
1061
原创 spring boot
随着动态语言的流行(Ruby、Scala、Node.js), Java的开发显得格外的笨重;繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术整合难度大。在上述环境下,Spring Boot由此诞生,它的设计是为了使您能够尽可能快地启动和运行。它使用 “习惯优于配置” (项目中存在大量的配置,而 Spring Boot 内置一个习惯性的配置,让你无须手动进行配置)的理念让你的项目快速运行起来。使用 Spring Boot 很容易创建一个独立运行(运行jar,内嵌。
2024-09-06 10:00:00
1611
原创 RocketMQ
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消费者)例如:寄快递。
2024-09-04 17:25:41
1169
原创 ElasticSearch
创建文档:POST /{索引库名}/_doc/文档id { json文档 }查询文档:GET /{索引库名}/_doc/文档id删除文档:DELETE /{索引库名}/_doc/文档id修改文档:全量修改:PUT /{索引库名}/_doc/文档id { json文档 }增量修改:POST /{索引库名}/_update/文档id { "doc": {字段}}JavaRestClient操作elasticsearch的流程基本类似。
2024-09-03 19:35:08
811
原创 kafka及异步通知文章上下架
消息中间件对比特 性ActiveMQRabbitMQRocketMQKafka开 发 语 言javaerlangjavascala单 机 吞 吐 量万级万级10万级100万级时 效 性msusmsms级以内可 用 性高(主从)高(主从)非常高(分布 式)非常高(分布 式)功 能 特 性成熟的产品、较全的 文档、各种协议支持 好并发能力强、 性能好、延迟 低MQ功能比较 完善,扩展性 佳只支持主要的MQ功能, 主要应用于大数据领域。
2024-09-03 17:40:43
1768
原创 Swagger
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger,就是把相关的信息存储在它定义的描述文件里面(yml或json格式),再通过维护这个描述文件可以去更新接口文档,以及生成各端代码。而Springfox-swagger,则可以通过扫描代码去生成这个描述文件,连描述文件都不需要再去维护了。所有的信息,都在代码里面了。代码即接口文档,接口文档即代码。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。
2024-08-30 16:23:46
958
原创 微服务事务管理
但是当我们把三件事情看做⼀个"业务",要满⾜保证“业务”的原⼦性,要么所有操作全部成功,要么全 部失败,不允许出现部分成功部分失败的现象,这就是分布式系统下的事务了。XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接⼝,⼏乎所有主流的数据库都对 XA规范提供了⽀持。在分布式系统中,系统间的⽹络不能100%保证健康,⼀定会有故障的时候,⽽服务有必须对外保证服务。
2024-08-30 14:56:00
1442
原创 微服务保护
什么是雪崩问题?微服务之间相互调⽤,因为调⽤链中的⼀个服务故障,引起整个链路都⽆法访问的情况。可以认为:限流是对服务的保护,避免因瞬间⾼并发流量⽽导致服务故障,进⽽避免雪崩是⼀种预防措施。超时处理线程隔离降级熔断是在部分服务故障时,将故障控制在⼀定范围,避免雪崩。是⼀种补救 措施。Sentinel是阿⾥巴巴开源的⼀款微服务流量控制组件。官⽹地址:https://sentinelguard.io/zhcn/index.html。
2024-08-29 19:36:52
849
原创 springcloud 网关
Spring Cloud Gateway 是 Spring Cloud 的⼀个全新项⽬,该项⽬是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的⽹关,它旨在为微服务架构提供 ⼀种简单有效的统⼀的 API 路由管理⽅式。更可怕的是,Cookie 往往⽤来 保存⽤户的登录状态,如果⽤户没有退出登录,其他⽹站就可以冒充⽤户,为所欲为。最初,它的含义是指,A⽹⻚设置的 Cookie,B⽹⻚不能打开,除⾮这两个⽹⻚"同源"。
2024-08-21 19:46:54
874
原创 spring boot自动配置
EnableAutoConfiguration 注解内部使用 @Import(AutoConfigurationImportSelector.class) 来加载配置类。配置文件位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当 SpringBoot 应用启动时,会自动加载这些配置类,初始化Bean并不是所有的Bean都会被初始化,在配置类中使用Condition来加载满足条件的Bean。
2024-08-18 23:24:18
1256
2
原创 spring操作数据库
加@Repository标签,set方法换为@Autowired标签。功能:对实体类自动,动态生成getset,无参有参.....@Before====>@Test运行之前。@After=====>@Test运行之后。@Test======>可以运行的方法。1.idea安装插件(只做一次)核心类:QueryRunner。类:获取service层数据。.update() 增删改。类:sql语句,继承接口。.query() 查询。DataConfig类。类:获取dao层数据。2.注解(修饰方法)
2024-08-08 19:26:18
473
原创 spring
Spring框架在J2EE企业级应用的开发与设计的核心理念之上,追求简洁、轻量级的开发方式,让系统具备更好的健壮性和可扩展性。重量级技术向轻量级开发过度。企业级应用指的是 大规模、性能和安全要求高、业务复杂、灵活多变 的大型 WEB 应用程序。
2024-08-08 19:18:25
586
原创 高级数据查询语句
3. SQL Interface: SQL接口 接收用户的SQL命令,并且返回用户需要查询的结果。--把内层的查询结果当成临时表,供外层sql再次查询。临时表要使用一个别名。从右表(table_2)中返回所有的记录,即便在左(table_1)中没有匹配的行。select tid,tname,if(tsex=1,'女','男')tsex,从左表(表1)中返回所有的记录,即便在右 (表2)中没有匹配的行。-- 表头为第一个结果集的,起别名给第一个结果集才有用。-- 通过第一张表的结果进行on条件匹配 后筛选。
2024-07-31 21:40:36
766
原创 DML数据操作语句和基本的DQL语句
- 日期 使用字符串的形式书写日期格式(yyyy-MM-dd HH:mm:ss)-- where 子句 中的条件是对表中每一条数据进行判断,后不能跟聚合函数。-- truncate 删(数据,索引)(阶段,只留下表结构)-- insert into 表名(字段名,字段名...)-- update 表名 set 字段名=值,字段名=值。-- delete 只删 数据(抹掉数据,空间还在)-- select 字段名,字段名 from 表名。-- drop 全删(数据,索引,表结构)
2024-07-30 23:34:41
581
原创 MySQL简介
三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。
2024-07-29 23:23:18
851
原创 vim网路和安全操作
网络:一组相互连接的计算机多台计算机组成,使用物理线路进行连接作用:数据交换,资源共享IP地址 : 唯一标识网络上的每一台计算机IP 地址:32位,由4个8位二进制数组成IP表示方法:点分十进制IP地址 = 网络ID +主机ID网络ID:标识计算机或网络设备所在的网段主机ID:标识特定主机或网络设备。
2024-07-28 19:32:40
778
原创 Linux进程,权限
(8)删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link ,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。p:管道文件(FIFO)也是一种特殊的文件类型,他主要 的目的解决多个程序同时访问一个文件所造成的错 误问题,first-in-first-out。进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。使用该命令可以将一些较长的命令进行简化。
2024-07-28 08:00:00
565
原创 Linux介绍和文件管理
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux的内核版本 4.18.0-16-generic 由5部分组成,用(.或-)号隔开4:主版本号,18:次版本号(奇数为开发板,偶数为稳定版),0:修订版本号16:微调版本号,generic:对多内核特殊性体现(针对大型企业)
2024-07-26 18:06:01
1023
原创 压缩文件的解析方式
我们要先创建一个ZipOutputStream,通常是包装一个FileOutputStream,然后,每写入一个文件前,先调用putNextEntry(),然后用write()写入byte[]数据,写入完毕后调用closeEntry()结束这个文件的打包。首先要创建一个ZipInputStream,通常是传入一个FileInputStream作为数据源,然后,循环调用getNextEntry(),直到返回null,表示zip流结束。
2024-07-11 18:50:35
393
1
原创 String为什么是不可变的?
String内的所有涉及对字符数组进行修改的方法,都会重新创建一个字符串对象,将修改后的值放在新String对象中,原字符串不会改变。
2024-03-27 18:44:57
306
原创 数组常见算法代码总结
双指针遍历的方式进行查找:通过两个下标,分别从数组头部和尾部,同时对该无序数组进行遍历,将数组中的每个元素与指定元素进行比较,从而确定该数组中是否存在指定元素。二分查找的效率高效,是因为它在匹配不成功的时候,每次都能排除剩余元素中一半的元素。冒泡排序的特点是,每一轮循环后,最大的一个数被交换到末尾,因此,下一轮循环就可以“排除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。遍历的方式进行查找:可以通过对该无序数组进行遍历,将数组中的每个元素与指定元素进行比较,从而确定该数组中是否存在指定元素。
2024-03-27 09:00:00
1125
原创 Arrays工具类的常见方法总结
可以通过调用Arrays.binarySearch()的方法,进行查找:由于该方法是基于二分查找法实现,数组必须处于有序状态。否则返回-1或“-”(插入点)。结果:index5 = -5, index6 = 2,index7 = -2, index8 = -4, index9 = -2。参数:fill(int[] a, 【int fromIndex, int toIndex】, int val)结果:index1= -5, index2 = 2, index3 = -1, index4 = -7。
2024-03-26 20:17:43
1051
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人