自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis面试题深度解析

布隆过滤器的误判现象Redisson和Guava都对布隆过滤器进行了实现。

2024-05-28 14:27:53 995

原创 并发编程的面试题

第一种退出标志的例子:使用volatile关键字的目的是使其他线程对flag的修改对当前线程可见 避免编译器将其优化2、线程的并发安全2.1、Synchronized关键字的底层原理 当一个线程进入到Synchronized代码块之后,会让这个对象锁与这个Monitor进行关联,Monitor的Owner是否已经被别的线程持有,如果持有则进入到EntryList中进入到一个等待,并将该线程阻塞Monitor实现的锁都属于是重量级锁,你了解过锁升级吗?JMM(Java Memory Model

2024-04-25 14:56:45 331

原创 JVM的面试题

为什么会有这种内存结构的区别?因为元空间/方法区存储的都是一些常量,项目随着动态类加载的情况越来越多,这块儿内存的大小就变的越来越不可控。小了会出现系统的内存溢出,大的话又浪费内存,现在都放到了本地内存,防止堆内存溢出(OOM) 用直接内存就少拷贝了一次 初始标记是先找出跟GC ROOT直接相连的对象并发标记是找出剩下的对象

2024-04-18 16:13:08 368

原创 ThreadLocal的使用

从java官方文档中的描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文我们可以得知 ThreadLocal 的作用是:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。

2024-04-18 15:14:11 722

原创 消息中间件面试题

1、生产者服务宕机了,导致发送不成功2、交换机发送不到队列3、MQ宕机了 导致消息丢失4、消费者宕机了 没消费到消息解决第一二个问题,生产者发送消息失败解决第三个问题,MQ宕机解决第四个问题,消费端有异常。

2024-04-15 23:18:57 385

原创 微服务篇面试题

Tomcat单体可以,分布式不适合。

2024-04-08 13:13:01 437

原创 框架篇常见面试题

1、Spring框架的单例bean是线程安全的吗?2、什么是AOP?3、Spring的事务是如何实现的?4、Spring事务失效的场景5、SpringBean的声明周期6、Spring的循环依赖7、SpringMVC的执行流程8、SpringBoot自动配置原理9、Spring常见注解

2024-03-19 23:06:03 207

原创 MySQL常见面试题

insert、delete、update都会去自动添加排他锁,防止其他事务修改这行数据

2024-03-19 12:53:54 628 1

原创 快速排序+两个有序链表合并

【代码】快速排序+两个有序链表合并。

2024-03-19 09:23:52 340

原创 ES常见面试题

先细说什么叫搜索 什么叫检索搜索:是指有明确的查询边界,比如我想查询加个低于2000元的手机,这就是搜索检索:讲究相关度,没有明确的查询边界,就是全表扫描倒排索引就是到的一个映射关系。

2024-03-14 16:35:23 573

原创 Redis常见面试题

用自己的话概述:1、RBD的过程中,主进程会fork一个子进程,由于主进程操作数据是通过页表操作的,页表记录了虚拟地址与物理地址的映射关系,所以主进程就可以通过页表来操作到物理内存2、子进程会复制一份页表,这样子进程也有了读取物理内存的能力,然后子进程会将读到的物理内存的数据新进新的RDB文件来替换掉旧的RDB文件3、主进程进行读操作的时候,访问的是共享内存,主进程进行写操作的时候,会先从共享内存中拷贝一份,再去执行写操作。

2024-03-14 14:22:05 610

原创 ES完全入门

1、ES集群节点有哪些主要角色?1.1、Master1.2、Data1.3、Ingest1.4、Coordination2、Shard数量的确定

2024-03-05 12:53:38 367

原创 SpringBoot的学习

EnableAutoConfiguration就会自动的帮我们扫描所有能使用的自动配置类,并进行启用。

2024-02-22 17:49:14 369

原创 Spring的学习(上)

自己写一个简单的Spring容器,通过读取beans.xml, 获取第一个JavaBean:Monster对象,并给该对象赋值,放入到容器中,输出该对象的信息先解析beans.xml得到第一个bean的信息,beanID、Class、属性、属性值使用反射生成对象,并赋值将创建好的bean对象,放入到singletonObjects集合中提供getBean(id)可以返回对应的bean对象--配置一个Monster对象-->--1. 配置monster对象/javaBean。

2024-02-07 17:58:21 510 1

原创 面试题的学习

1、redoLog和UndoLog

2024-02-06 15:54:31 352

原创 MongoDB数据迁移

【代码】MongoDB数据迁移。

2024-02-06 14:05:22 1156

原创 反射的学习

反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息(比如成员变量、构造器、成员方法等等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到加载完类后,在堆中就会产生一个Class类型的对象(一个类只会有一个Class对象),这个对象包含了类的完整结构信息,通过这个对象得到类的结构,这个对象就像是一面镜子,透过这个镜子可以看到类的结构,所以,形象的称之为:反射Java反射机制原理图:1、在运行时判断任意一个对象所属的类2、在运行时构造任意一个类的对象。

2024-01-19 17:52:44 1585

原创 IO流的学习

什么是文件?

2024-01-18 14:55:25 307

原创 Redisson+事务=失效的场景

假设有这样一个需求:创建付款单,要求不能重复创建相同业务单号的付款单。为了保证幂等,我们需要判断数据库中是否已经存在相同业务单号的付款单,并且需要加锁处理并发安全性问题。为了避免锁在事务提交前释放,我们应该在事务外层使用锁。Controller。

2024-01-08 10:31:47 421

原创 多线程的学习

观察上面的例子,实际上是主线程和子线程一起开始跑的,如果我的期望是一条线程先跑,等这条线程跑的一定阈值后让第二条线程跑该怎么写呢?因为java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时再用继承Thread类方法来创建线程显然就不太可能了。小案例: 编写程序,该程序可以每隔1秒,在控制台输出 "hi" 当输出10次后 自动退出 使用Runable实现它。* 2、第一个线程循环随机打印100以内的整数。* 3、知道第2个线程从键盘中读取到了 "Q"* 1、在main方法中启动两个线程。

2023-11-29 20:10:31 373

原创 记录一次Mariadb的安装和数据迁移

如果 systemctl start mariadb.service报错了,记得优先去看mysql.err这个文本里显示的报错信息是哪些,最后安装完成后记得改下root密码 和 开启远程root访问。但是有一些点要注意一下,data目录不要跟链接里一样放在/usr/local/data/mysql下,要跟你的mysql中的bin目录同级。注意:新老数据库尽量保证版本不要差太多,因为mysql有些版本不同,对里面的格式要求很敏感!本次安装的是mariadb-10.5.23版本。

2023-11-22 11:13:47 176

原创 14-泛型的学习

6、静态方法/属性 不可以使用泛型!因为静态是跟类加载相关的 在类加载时 对象还没有创建。所以如果静态方法和静态属性使用了泛型 JVM就无法完成初始化。1、Tiger后面泛型,所以我们就称Tiger为自定义泛型。2、T R M 是泛型的标识符,一般都是单个的大写字母。4、普通成员可以使用泛型(属性,方法)5、使用泛型的时候 不可以初始化。T,E要求只能是引用类型。3、泛型标识符可以有多个。泛型的继承和通配符的学习。

2023-11-05 19:10:03 33

原创 ElasticSearch中的路由机制

ES能保证docid全局唯一是采用do id作为了路由,所以同样的docid肯定会路由到同一个shard上面,如果出现docid重复,就会update或者抛异常,从而保证了集群内docid唯一标识一个doc。先是创建了一个2分片0副本的索引,然后往里面插了两条数据a和b,文档a进入了编号为0的分片,文档b进入了编号为1的分片。可以总结出一个规律:ES索引中的ID唯一性是由路由来保证的,我们修改并打破了默认的路由规则,就产生了一些问题,这次带着路由值来插入数据c,路由值为key1,通过上面的结果,可以看出。

2023-11-01 15:06:19 223

原创 13-集合(基本使用+源码分析)

前面我们保存多个数据使用的是数组,但是数组也有很多不足的地方。

2023-10-31 23:09:57 41

原创 线上redisson报错的问题

项目中有用到redisson做分布式锁,在项目发版初期,并没有发生什么问题,到了一个小时后,项目开始频繁的报解析异常,跟进日志易发现有很多RedissonConnectionClosedException,此时在想,为什么Redisson的请求会被redis拒绝掉,当时由于项目紧急给的发版时间有限,就匆匆还原了版本。刚发版时由于未把连接池占满,并没有报错,后来由于消息越积越多,造成了连接池不够用,从而新需求就被拒之门外,造成了RedissonConnectionClosedException。

2023-10-27 16:23:03 209

原创 03-大数据量取并交集为什么用Set而不是List

HashMap底层数据结构是基于数组+链表,数组存储的是HashMap的键值对Node,通过对key进行哈希算法得到Node节点在数组中的具体位置,如果不同的key计算的哈希值相同,那么追加在已存在节点的后面,数组的该位置存放的就是一个链表。这要从两个容器类的实现来看了,ArrayList是基于数组实现的,HashSet是基于HashMap实现的,利用HashMap的key不重复,底层用HashMap保存的数据。这一次两个30万数据的集合,交集计算用时1分12秒,差集计算用时1分15秒。

2023-10-20 15:22:29 55

原创 12-常用类的使用

要点1:Integer m = 1;实际上是 Integer m = Integer.valueOf(1) ,再去看Integer.valueOf的源码。第一个false的原因是因为直接new的对象,那肯定是false了,两个对象在堆中的位置都不一样。演示包装类 和 基本数据类型 的相互转换,这里以int和Integer演示。第三个false的原因 看懂第二个的原因 你就知道为什么是false了。原来在 -128 ~ 127 之间是按照int的值的大小返回对象的。答案是 false true false。

2023-09-23 16:29:58 59

原创 11-枚举+注解+异常

构造器私有化,防止别人直接new对象去掉set方法,防止属性被修改在类中创建固定的对象,用public static final修饰(final往往和static搭配使用,效率更高,不会导致类加载,底层编译器做了优化处理)/****/// 演示自定义枚举实现// 描述// 3、在Season内部创建固定的对象// 定义了四个对象 final的好处 --> final往往和static搭配使用,效率更高,不会导致类加载,底层编译器做了优化处理。

2023-09-20 22:45:00 34

原创 elasticsearch别名的使用

如果有多个索引指向了同一个别名,这时又想保存数据,应该指定好要将数据保存到哪一个索引中,不然会报错。把user1和user2的别名user修改为useralias。再去查询useralias看看查出什么。再看user1和user2的别名。现在再去查询user1的别名信息。

2023-09-20 16:09:02 316

原创 10-面向对象高级(进阶)

抽象类不能被实例化抽象类不一定要包含abstract方法一旦类包含了abstract方法,则这个类必须声明为abstractabstract只能修饰类和方法,不能修饰属性和其他的抽象类也是类,类能有什么成员抽象类一样可以如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为抽象类抽象方法不能使用final、private、static来修饰,因为这些关键字都是和重写相违背的。

2023-09-16 16:35:36 42

原创 09-面向对象高级

代码块基本介绍代码块又称为初始化块,属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过 {} 包围起来但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不通过对象或类显式调用,而是加载类时,或创建对象时隐式调用基本语法[修饰符] {代码注意:①:修饰符可选,要写的话,也只能写static②:代码块分为两类,使用static修饰的是静态代码块,没有static修饰的,叫普通代码块/非静态代码块③:逻辑语句可以是任何逻辑语句(输入、输出、方法调用、循环、判断)④:;

2023-09-12 17:31:52 43

原创 08-Object详解

默认返回: 全类名 + @ + 哈希值的十六进制,方法,用于返回对象的属性信息。

2023-09-11 11:30:02 29

原创 07-面向对象中级

当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过[举例说明]子类继承了所有的属性和方法,非私有属性和方法可以直接访问,但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问。第二步:提供一个公共(public)的set方法,用于对属性判断并赋值。第三步:提供一个公共的(public)get方法,用于获取属性的值。

2023-09-04 23:08:44 37

原创 06-类与对象

java内存的结构分析1)栈: 一般存放基本数据类型局部变量2)堆: 存放对象(Cat cat ,数组等3)方法区:常量池常量,比如字符串, 类加载信息4)示意图java创建对象的流程简单分析1、先加载Person类信息(属性及方法信息在方法区,只会加载一次)2、在堆中分配空间,进行默认初始化3、把堆中的地址赋值给p(p在栈中),p就指向对象4、进行指令初始化,比如 p.name = "jack";p.age = 10;

2023-08-28 23:37:46 30

原创 05-数组

先拷贝一份,赋给新值,这样新值再怎么变,也不会影响到老变量的值,发生在栈中,拷贝的是具体数据。引用传递(地址传递):传递(拷贝)的其实是地址。值传递:值传递会把老变量的。

2023-08-23 22:49:40 36

原创 03-Mongo多数据源配置方法

需求概述:由于项目要求,要连两个地方的Mongo库,故需要搞两个mongoTemplate。mongoDB版本: 3.6.4。

2023-08-21 09:57:37 168 1

原创 04-算术运算符

凡是自己可以取名字的地方都叫标识符。赋值运算符的一些细节。

2023-08-19 23:03:57 36

原创 02-Future简单使用(在for循环中优雅使用多线程)

【代码】Future简单使用(在for循环中优雅使用多线程)

2023-08-18 17:13:50 342

原创 03-基本数据类型和String类型的转换

在程序开发中,我们经常需要将基本数据类型转成String类型。或者将String类型转成基本数据类型。基本类型转String类型:将基本类型的值 + "" 即可String类型转基本类型:通过基本类型的包装类。

2023-08-13 19:16:39 50

原创 02-强制类型转换

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型,使用时要加上强制转换符(),但是,要格外注意。

2023-08-13 18:16:20 37

空空如也

空空如也

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

TA关注的人

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