- 博客(46)
- 资源 (1)
- 收藏
- 关注
原创 线程相关sleep和wait方法
wait()是让获得对象锁的线程等待,会自动释放当前线程占用的对象锁。每个Object对象都有对象锁,既然要释放当前线程占有的对象锁并让其进入WAITING状态,自然要操作对应的对象而不是当前的线程。sleep()是让当前线程暂停执行,不涉及对象类,也不需要获取对象锁。
2024-04-02 16:56:21
416
原创 浅拷贝、深拷贝、引用拷贝
浅拷贝会在堆上创建一个新的对象(区别于深拷贝的一点),如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是拷贝对象和原对象共用同一个内部对象。测试从输出结构来看person1的克隆对象和person1使用的仍然是同一个Address对象。
2024-03-19 15:53:19
274
原创 一篇文章看懂jvm&jdk&jre
java虚拟机(JVM,java virtual mechine)是运行java字节码的虚拟机。JVM有针对不同系统的特定语言实现,目的是使用相同的字节码,他们都会给出相同的结果。JDKJDK(Java Development Kit)是功能齐全的Java SDK,是提供给开发者使用,能够创建和编译Java程序的开发套件。包含了java运行环境JRE,编译java源码的编译器javacjdb调试器。
2024-03-18 14:10:36
601
原创 如何实现一个计算器
要实现的计算器功能如下:1、输入一个字符串,可以包含+ - * /、数字、括号以及空格,你的算法返回运算结果。2、要符合运算法则,括号的优先级最高,先乘除后加减。3、除号是整数除法,无论正负都向 0 取整(5/2=2,-5/2=-2)。4、可以假定输入的算式一定合法,且计算过程不会出现整型溢出,不会出现除数为 0 的意外情况。
2024-03-15 17:18:11
465
原创 重载和重写有什么区别
重载是同样的一个方法能够根据输入数据的不同,做出不同的处理。重写就是当子类继承父类的相同方法,输入数据一样,但要做出区别于父类的响应时,就要覆盖父类方法。
2024-03-14 17:19:28
403
原创 volatile和synchronized关键字
可以保证变量的可见性,但不能保证原子性。将变量声明为volatile,表示在JVM中这个变量是共享且不稳定的,每次使用都要去主存中进行读取。
2024-03-14 14:22:15
346
原创 一篇文章讲清楚HashMap
HashMap 查询、删除的时间复杂度HashMap的底层实现HashMap的长度为什么是2的幂次方HashMap和HashTable的区别
2024-03-13 17:02:44
609
原创 MySQL系列-分析SQL性能
MySQL 慢查询日志是用来记录 MySQL 在执行命令中,响应时间超过预设阈值的 SQL 语句。开启慢查询设置成功之后,使用命令进行查看。:被日志记录的代码在服务器上的运行时间。User@Host:谁执行的这段代码。Query_time:这段代码运行时长。Lock_time:执行这段代码时,锁定了多久。Rows_sent:慢查询返回的记录。:慢查询扫描过的行数。实际项目中,慢查询日志通常比较复杂,我们需要借助一些工具对其进行分析。像 MySQL 内置的。
2024-03-11 19:25:31
549
原创 String 为什么是不可变的?String 、 StringBuffer 和 StringBuilder 的区别是什么?
操作少量的数据,适合String单线程下操作大量数据,使用StringBuilder多线程操作字符串缓冲区下操作大量数据,适用StringBuffer。
2024-03-08 11:21:43
449
原创 Spring实现Bean注入的常见方式
使用java config类并在其中使用@bean注解来声明bean的注入,并使用@autowired注解进行依赖注入。通过在类的构造函数中声明需要注入的依赖,Spring容器在创建对象实例时自动注入所需的依赖。,而不需要再代码中硬编码这些依赖关系,降低组件之间的耦合度,提高代码的可维护性和灵活性。当 Spring 容器启动时会读取这些配置文件,并自动完成依赖注入。在Spring框架中,依赖注入是一种设计模式,它允许。通过实现接口,并在接口中定义注入方法来实现依赖注入。在 Spring 中,我们通常使用。
2024-03-04 17:20:26
567
原创 Mybatis-plus-generator代码生成器
2.application中加入数据库的相关配置。3.新建一个codeGenerator类。1.在pom文件中加入以下配置。直接运行main()函数即可。
2024-02-06 11:09:15
422
原创 Mybatis
推荐#{}方式取值引用:解析sql时,会将形参变量的值取出,并自动给其添加引号。无SQL注入攻击风险:先用占位符替代参数将SQL语句先进行预编译,然后再将参数中的内容替换进来。由于SQL中的语句已经被预编译过,其SQL意图无法通过非法的参数内容实现更改其参数中的内容,无法成为SQL命令的一部分,可以防止SQL注入${}方式取值引用:解析sql时,将形参变量的值直接取出,并拼接显示在SQL中。
2024-02-05 11:35:18
395
原创 ThreadPoolExecutor创建线程池
当我们不指定 RejectedExecutionHandler 饱和策略的话来配置线程池的时候默认使用的是 ThreadPoolExecutor.AbortPolicy。在默认情况下,ThreadPoolExecutor 将抛出 RejectedExecutionException 来拒绝新来的任务 ,这代表你将丢失对这个任务的处理。当最大池被填满时,此策略为我们提供可伸缩队列。当前同时运行的线程数量达到最大线程数,并且队列已经被放满任务时,触发拒绝策略。
2024-01-29 16:09:07
672
原创 java基本类型和包装类的区别
基本数据类型的局部变量放在java虚拟机栈的局部变量表中,基本数据类型的成员变量(未被static修饰)存放在java虚拟机的堆中。而包装类属于对象,对象实例存放在堆内存中。:对于基本数据类型来说==比较的是值,包装数据类型来说,==比较的是内存地址。:除了定义常量和局部变量之外,其它地方很少使用基本类型;包装类可用于泛型,而基本类型不可以。:包装类型不赋值就是null,基本数据类型都有默认值且不是null。装箱:将基本类型用它们的引用类型包装起来。:基本类型占用的内存空间小。
2024-01-18 11:04:49
596
原创 Springboot项目启动后自动停止
在创建SpringBoot项目时,Web依赖没有导入,默认以普通java项目运行导致的终止。在pom.xml文件中引入web的jar包,然后刷新maven即可。SpringBoot项目启动后自行停止。
2024-01-17 11:33:47
2156
原创 一条sql语句在MySQL中的的执行过程
假设在没有命中缓存的情况下,SQL请求就会来到分析器,分析器明确SQL要完成的功能,以及检查SQL语法是否正确。执行查询时会先查询缓存,MySQL8.0版本后移除。当客户端登录MySQL时,对身份认证和权限判断。将语句分发到对应的存储引擎执行,并返回结果。为SQL提供优化执行方案。
2024-01-15 19:47:38
379
原创 Sql基础
mysql5.5版本之前MyISAM作为默认存储引擎。mysql5.5版本之后 InnoDB是默认存储引擎。重复读,解决了幻读的问题【快照读和当前读】基于锁和MVCC(多版本控制)实现的。计算、函数、类型转换。
2024-01-15 16:02:17
387
原创 Redis面试问题整理
从节点对主节点的数据进行备份,提升容灾能力。主节点负责写,从节点负责读。如果master宕机,则从slave中选出一台作为master即可实现故障转移。
2024-01-11 15:16:42
413
原创 RocketMQ和Kafka的区别,以及如何保证消息不丢失和重复消费
4)unclean.leader.election.enable = false 当leader副本发生故障时不会从followers副本中和leader副本同步程度达不到要求的副本中选出leader,降低了消息丢失的可能性。但是这样也会带来重复消费的情况,比如,消费了一半还没提交offset突然挂掉,那么这个消息理论上会被消费两次,这种情况怎么办?当消费者刚拿到这个消息准备进行真正消费的时候,突然挂掉了,消息实际上并没有被消费,但是 offset 却被自动提交了。
2024-01-10 19:28:30
2277
原创 Java STL容器
HashMap的初始化大小是16,每次扩容,容量会变为之前的2倍。因此HashMap总是使用 2 的幂作为哈希表的大小。JDK1.8之前的版本多线程环境下扩容可能存在死循环和数据丢失的问题。【当一个桶位中有多个元素需要扩容时,多个线程同时对链表进行操作,头插法可能导致链表中的节点指向错误的位置,从而形成一个环形链表,进而使得查询元素的操作陷入死循环而无法结束】JDK1.8 版本HashMap 采用了尾插法。
2024-01-10 15:44:11
1900
原创 Java多线程的实现方式及原理
构造函数的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。FutureTask使用,实现有返回结果的非阻塞执行方法。《阿里巴巴 Java 开发手册》强制线程池不允许使用。可根据实际情况调整线程数量的线程池。延迟后运行任务或者定期执行任务。我们可以创建多种类型的。线程池创建的两种方式。只有一个线程的线程池。
2024-01-10 11:40:10
518
原创 LCR 136. 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。[4,1,9]给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.[4,5,9]给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
2024-01-08 15:55:04
453
1
原创 链表翻转-迭代/递归解法
给定单链表的头节点head,请反转链表,并返回反转后的链表的头节点。[2,1]head = [][]链表可以选用完成反转。你能否用两种方法解决这道题?
2024-01-08 15:00:03
412
产生perato随机数的c代码
2017-12-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人