- 博客(49)
- 收藏
- 关注
原创 并发编程的面试题
第一种退出标志的例子:使用volatile关键字的目的是使其他线程对flag的修改对当前线程可见 避免编译器将其优化2、线程的并发安全2.1、Synchronized关键字的底层原理 当一个线程进入到Synchronized代码块之后,会让这个对象锁与这个Monitor进行关联,Monitor的Owner是否已经被别的线程持有,如果持有则进入到EntryList中进入到一个等待,并将该线程阻塞Monitor实现的锁都属于是重量级锁,你了解过锁升级吗?JMM(Java Memory Model
2024-04-25 14:56:45
401
原创 JVM的面试题
为什么会有这种内存结构的区别?因为元空间/方法区存储的都是一些常量,项目随着动态类加载的情况越来越多,这块儿内存的大小就变的越来越不可控。小了会出现系统的内存溢出,大的话又浪费内存,现在都放到了本地内存,防止堆内存溢出(OOM) 用直接内存就少拷贝了一次 初始标记是先找出跟GC ROOT直接相连的对象并发标记是找出剩下的对象
2024-04-18 16:13:08
411
原创 ThreadLocal的使用
从java官方文档中的描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文我们可以得知 ThreadLocal 的作用是:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。
2024-04-18 15:14:11
764
原创 消息中间件面试题
1、生产者服务宕机了,导致发送不成功2、交换机发送不到队列3、MQ宕机了 导致消息丢失4、消费者宕机了 没消费到消息解决第一二个问题,生产者发送消息失败解决第三个问题,MQ宕机解决第四个问题,消费端有异常。
2024-04-15 23:18:57
622
原创 框架篇常见面试题
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
300
原创 ES常见面试题
先细说什么叫搜索 什么叫检索搜索:是指有明确的查询边界,比如我想查询加个低于2000元的手机,这就是搜索检索:讲究相关度,没有明确的查询边界,就是全表扫描倒排索引就是到的一个映射关系。
2024-03-14 16:35:23
1140
原创 Redis常见面试题
用自己的话概述:1、RBD的过程中,主进程会fork一个子进程,由于主进程操作数据是通过页表操作的,页表记录了虚拟地址与物理地址的映射关系,所以主进程就可以通过页表来操作到物理内存2、子进程会复制一份页表,这样子进程也有了读取物理内存的能力,然后子进程会将读到的物理内存的数据新进新的RDB文件来替换掉旧的RDB文件3、主进程进行读操作的时候,访问的是共享内存,主进程进行写操作的时候,会先从共享内存中拷贝一份,再去执行写操作。
2024-03-14 14:22:05
648
原创 ES完全入门
1、ES集群节点有哪些主要角色?1.1、Master1.2、Data1.3、Ingest1.4、Coordination2、Shard数量的确定
2024-03-05 12:53:38
413
原创 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
627
1
原创 反射的学习
反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息(比如成员变量、构造器、成员方法等等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到加载完类后,在堆中就会产生一个Class类型的对象(一个类只会有一个Class对象),这个对象包含了类的完整结构信息,通过这个对象得到类的结构,这个对象就像是一面镜子,透过这个镜子可以看到类的结构,所以,形象的称之为:反射Java反射机制原理图:1、在运行时判断任意一个对象所属的类2、在运行时构造任意一个类的对象。
2024-01-19 17:52:44
1637
原创 Redisson+事务=失效的场景
假设有这样一个需求:创建付款单,要求不能重复创建相同业务单号的付款单。为了保证幂等,我们需要判断数据库中是否已经存在相同业务单号的付款单,并且需要加锁处理并发安全性问题。为了避免锁在事务提交前释放,我们应该在事务外层使用锁。Controller。
2024-01-08 10:31:47
513
原创 多线程的学习
观察上面的例子,实际上是主线程和子线程一起开始跑的,如果我的期望是一条线程先跑,等这条线程跑的一定阈值后让第二条线程跑该怎么写呢?因为java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时再用继承Thread类方法来创建线程显然就不太可能了。小案例: 编写程序,该程序可以每隔1秒,在控制台输出 "hi" 当输出10次后 自动退出 使用Runable实现它。* 2、第一个线程循环随机打印100以内的整数。* 3、知道第2个线程从键盘中读取到了 "Q"* 1、在main方法中启动两个线程。
2023-11-29 20:10:31
406
原创 记录一次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
269
原创 14-泛型的学习
6、静态方法/属性 不可以使用泛型!因为静态是跟类加载相关的 在类加载时 对象还没有创建。所以如果静态方法和静态属性使用了泛型 JVM就无法完成初始化。1、Tiger后面泛型,所以我们就称Tiger为自定义泛型。2、T R M 是泛型的标识符,一般都是单个的大写字母。4、普通成员可以使用泛型(属性,方法)5、使用泛型的时候 不可以初始化。T,E要求只能是引用类型。3、泛型标识符可以有多个。泛型的继承和通配符的学习。
2023-11-05 19:10:03
56
原创 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
351
原创 线上redisson报错的问题
项目中有用到redisson做分布式锁,在项目发版初期,并没有发生什么问题,到了一个小时后,项目开始频繁的报解析异常,跟进日志易发现有很多RedissonConnectionClosedException,此时在想,为什么Redisson的请求会被redis拒绝掉,当时由于项目紧急给的发版时间有限,就匆匆还原了版本。刚发版时由于未把连接池占满,并没有报错,后来由于消息越积越多,造成了连接池不够用,从而新需求就被拒之门外,造成了RedissonConnectionClosedException。
2023-10-27 16:23:03
279
原创 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
114
原创 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
114
原创 11-枚举+注解+异常
构造器私有化,防止别人直接new对象去掉set方法,防止属性被修改在类中创建固定的对象,用public static final修饰(final往往和static搭配使用,效率更高,不会导致类加载,底层编译器做了优化处理)/****/// 演示自定义枚举实现// 描述// 3、在Season内部创建固定的对象// 定义了四个对象 final的好处 --> final往往和static搭配使用,效率更高,不会导致类加载,底层编译器做了优化处理。
2023-09-20 22:45:00
83
原创 elasticsearch别名的使用
如果有多个索引指向了同一个别名,这时又想保存数据,应该指定好要将数据保存到哪一个索引中,不然会报错。把user1和user2的别名user修改为useralias。再去查询useralias看看查出什么。再看user1和user2的别名。现在再去查询user1的别名信息。
2023-09-20 16:09:02
434
原创 10-面向对象高级(进阶)
抽象类不能被实例化抽象类不一定要包含abstract方法一旦类包含了abstract方法,则这个类必须声明为abstractabstract只能修饰类和方法,不能修饰属性和其他的抽象类也是类,类能有什么成员抽象类一样可以如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为抽象类抽象方法不能使用final、private、static来修饰,因为这些关键字都是和重写相违背的。
2023-09-16 16:35:36
63
原创 09-面向对象高级
代码块基本介绍代码块又称为初始化块,属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过 {} 包围起来但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不通过对象或类显式调用,而是加载类时,或创建对象时隐式调用基本语法[修饰符] {代码注意:①:修饰符可选,要写的话,也只能写static②:代码块分为两类,使用static修饰的是静态代码块,没有static修饰的,叫普通代码块/非静态代码块③:逻辑语句可以是任何逻辑语句(输入、输出、方法调用、循环、判断)④:;
2023-09-12 17:31:52
76
原创 07-面向对象中级
当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过[举例说明]子类继承了所有的属性和方法,非私有属性和方法可以直接访问,但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问。第二步:提供一个公共(public)的set方法,用于对属性判断并赋值。第三步:提供一个公共的(public)get方法,用于获取属性的值。
2023-09-04 23:08:44
71
原创 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
64
原创 05-数组
先拷贝一份,赋给新值,这样新值再怎么变,也不会影响到老变量的值,发生在栈中,拷贝的是具体数据。引用传递(地址传递):传递(拷贝)的其实是地址。值传递:值传递会把老变量的。
2023-08-23 22:49:40
53
原创 03-Mongo多数据源配置方法
需求概述:由于项目要求,要连两个地方的Mongo库,故需要搞两个mongoTemplate。mongoDB版本: 3.6.4。
2023-08-21 09:57:37
223
1
原创 03-基本数据类型和String类型的转换
在程序开发中,我们经常需要将基本数据类型转成String类型。或者将String类型转成基本数据类型。基本类型转String类型:将基本类型的值 + "" 即可String类型转基本类型:通过基本类型的包装类。
2023-08-13 19:16:39
82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人