- 博客(30)
- 收藏
- 关注
原创 面试题:聊聊Spring AOP
概念:AOP(面向切面编程) 能够将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。动态代理:Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用。实现:将与业务无关,却为业务模块所共同调用的逻辑抽取出来形成增强,然后将增强织入指定的切入点。,去创建代理对象,而对于没有实现接口的对象, Spring AOP 会使用。生成一个被代理对象的子类来作为代理。
2023-08-26 07:58:13
125
原创 HashMap的原理分析
JDK1.8 之前 HashMap 底层是 **数组和链表** 结合在一起使用也就是 链表散列。HashMap 通过 key 的 hashcode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过**拉链法**解决冲突。
2023-07-02 08:29:14
135
原创 synchronized
synchronized 关键字加到 static 静态方法和 synchronized(class) 代码块上都是是给 Class类上锁;synchronized 关键字加到实例方法上是给对象实例上锁;尽量不要使用 synchronized(String a) 因为JVM 中,字符串常量池具有缓存功能。
2023-07-02 08:00:08
107
原创 Java----反射
如果说大家研究过框架的底层原理或者咱们自己写过框架的话,一定对反射这个概念不陌生。反射之所以被称为框架的灵魂,主要是因为它赋予了我们在运行时分析类以及执行类中方法的能力。通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。
2023-07-01 08:27:21
50
原创 设计模式----策略模式
策略设计模式是一种行为设计模式。当在处理一个业务时,有多种处理方式,并且需要再运行时决定使哪一种具体实现时,就会使用策略模式。这个定义和我们的例子说的一回事儿,在支付业务中,有三种付款方式,程序运行时使用哪种方式由用户选择,根据用户选择执行不同的逻辑。1.如果在一个系统里面有许多类,它们仅仅在行为上有区别,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为;2.一个系统需要动态地在几种算法中选择一种;
2023-07-01 06:40:22
60
原创 java SPI和spring SPI
SPI 即 Service Provider Interface,字面意思就是:“服务提供者的接口”,我的理解是:专门提供给服务提供者或者扩展框架功能的开发者去使用的一个接口。SPI将服务接口和具体的服务实现分离开来,将服务调用方和服务实现者解耦,能够提升程序的扩展性、可维护性。修改或者替换服务实现并不需要修改调用方。很多框架都使用了Java 的 SPI 机制,比如:Spring 框架、数据库加载驱动、日志接口、以及 Dubbo 的扩展实现等等。SPI机制在实际开发中使用得场景也有很多。
2023-06-30 15:58:11
475
原创 linux安装zookeeper详细步骤
可以看到这里有个zoookeeper给我们的一个样例配置文件:zoo_sample.cfg,我们在配置我们自己的zk时,需要做的就是将这个文件复制一份,并命名为:zoo.cfg,然后在zoo.cfg中修改自己的配置即可。前提:由于zookeeper是使用java语言开发的,所以,在安装zookeeper之前务必先在本机安装配置好java环境!安装前首先下载安装包了。如上,一个简单的单机版zookeeper就安装好了!可以看到我们的zkServer已经启动好了。关闭zkServer的命令是。
2023-06-20 15:28:23
1350
原创 springboot整合kafka
本教程将介绍如何在 Spring Boot 应用程序中使用 Kafka。Kafka是一个分布式的发布-订阅消息系统,它可以处理大量数据并提供高吞吐量。在本教程中,我们将使用 Spring Boot 2.7.2 和Kafka 2.8.1。
2023-06-20 15:05:34
4668
2
原创 微服务负载均衡器LoadBalancer
Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器, 用来替代 Ribbon。RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。默认情况下,RestTemplate默认依赖 jdk的HTTP连接工具。WebClient是从Spring WebFlux 5.0版本开始提供的一个非阻塞的基于响应式编程的进行Http请求的客户端工具。
2023-06-08 14:42:49
129
原创 微服务负载均衡器Ribbon
目前主流的负载方案分为以下两种:1.集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如F5),也有软件的(比如 Nginx)。2.客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡。Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,如超 时,重试等。通过。
2023-06-08 14:37:05
102
原创 Alibaba微服务组件Nacos注册中心
nacos:一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。集 注册中心+配置中心+服务管理 平台
2023-06-08 14:16:09
88
原创 JAVA校招面试核心问题
校招面试,重点看下以下这些核心问题,是否掌握1. Java基础Java接口和抽象类有什么区别?String,StringBuilder和StringBuffer的区别?final、finally、finalize三个关键字的区别?==和equals的区别,给段代码判断下“ ==” 和equals的返回值。Java基本数据类型有几种,每一种的区别是什么?值传递和引用传递的区别?Java的异常体系?受检查和非受检查异常区别?序列化和反序列化。反射和泛型。2. 集合Collection的体
2023-02-03 09:02:20
223
原创 Redis实战------黑马点评2 商户查询缓存
前言什么是缓存?就像自行车,越野车的避震器举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样;同样,实际开发中,系统也需要"避震器",防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪;这在实际开发中对企业讲,对产品口碑,用户评价都是致命的;所以企业非常重视缓存技术;缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据。
2023-01-10 18:52:24
182
原创 解决黑马点评项目中实现商铺缓存与数据库的双写一致问题出现的问题,LocalDateTime在项目中的使用(LocalDateTime与前端的时间戳互转)
解决黑马点评项目中实现商铺缓存与数据库的双写一致问题出现的问题,LocalDateTime与前端的时间戳互转
2023-01-10 10:44:24
722
原创 Redis实战------黑马点评1 短信登录
在tomcat支撑起并发流量后,我们如果让tomcat直接去访问Mysql,根据经验Mysql企业级服务器只要上点并发,一般是16或32 核心cpu,32 或64G内存,像企业级mysql加上固态硬盘能够支撑的并发,大概就是4000起~7000左右,上万并发, 瞬间就会让Mysql服务器的cpu,硬盘全部打满,容易崩溃,所以我们在高并发场景下,会选择使用mysql集群,同时为了进一步降低Mysql的压力,同时增加访问的性能,我们也会加入Redis,同时使用Redis集群使得Redis对外提供更好的服务。
2023-01-09 18:51:16
286
原创 初识Redis
在存储方式、扩展性、查询性能上关系型与非关系型也都有着显著差异,总结如下:● 存储方式○ 关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响○ 非关系型数据库,他们的操作更多的是依赖于内存来操作,内存的读写速度会非常快,性能自然会好一些● 扩展性○ 关系型数据库集群模式一般是主从,主从数据一致,起到数据备份的作用,称为垂直扩展。○ 非关系型数据库可以将数据拆分,存储在不同机器上,可以保存海量数据,解决内存大小有限的问题。称为水平扩展。
2023-01-08 18:58:29
60
原创 java 正则表达式
语法示例:“.” : 匹配任何字符。“\d”:任何数字[0-9]的简写;“\D”:任何非数字[^0-9]的简写;“\s”: 空白字符:[ \t\n\x0B\f\r] 的简写“\S”: 非空白字符:[^\s] 的简写“\w”:单词字符:[a-zA-Z_0-9]的简写“\W”:非单词字符:[^\w]代码示例://.表示任意一个字符 System . out . println("你" . matches(".."));
2022-12-12 09:27:13
212
原创 java API
查看API文档,我们可以看到API文档中关于Math类的定义如下:Math类所在包为java.lang包,因此在使用的时候不需要进行导包。并且Math类被final修饰了,因此该类是不能被继承的。Math类包含执行基本数字运算的方法,我们可以使用Math类完成基本的数学运算。要想使用Math类我们就需要先创建该类的对象,那么创建对象就需要借助于构造方法。因此我们就需要首先查看一下API文档,看看API文档中针对Math类有没有提供对应的构造方法。
2022-12-12 09:17:17
124
原创 大数据之Hadoop MapReduce(二)
1)输入数据接口:InputFormat(1)默认使用的实现类是:TextInputFormat(2)TextInputFormat的功能逻辑是:一次读一行文本,然后将该行的起始偏移量作为key,行内容作为value返回。(3)CombineTextInputFormat可以把多个小文件合并成一个切片处理,提高处理效率。2)逻辑处理接口:Mapper用户根据业务需求实现其中三个方法:map() setup() cleanup ()3)Partitioner分区。
2022-11-19 16:12:02
351
原创 大数据之Hadoop MapReduce(一)
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。1)什么是序列化序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。2)为什么要序列化。
2022-11-06 19:41:20
165
原创 java 序列化
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化:把Java对象转换为字节序列的过程。反序列化:把字节序列恢复为Java对象的过程。(1).实现Serializable接口(隐式序列化)这是最简单的序列化方式,会自动序列化所有非staic和transient关键字修饰的成员变量。(2).实现Externalizable接口(显式序列化)
2022-11-05 09:02:32
117
原创 大数据之Hadoop HDFS
【Hadoop HDFS】1 HDFS概述, 2 HDFS的Shell操作, 3 HDFS的API操作, 4 HDFS的读写流程, 5 NameNode和SecondaryNameNode, 6 DataNode
2022-10-26 20:33:20
170
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人