自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试官常问问题:Java中的128陷阱详解

(即 cache 数组的地址),所以在 -128~127 之间的数值用 == 进行比较时结果是相等(true),相当于比较的是同一元素的内存地址。这个时候,大家就疑惑了,明明都是一样的数,怎么一个判断结果就是true,一个 判断结果就是false,这就是面试常常踩坑的问题:128陷阱!其实,不只是 Integer 类,其他包装类也有类似的缓存技术,还需要去了解一下包装类,自动装箱拆箱的知识内容。揭晓答案:第一段代码的结果是true,第二段代码的结果是false。看这样两段代码,思考结果返回的是什么。

2024-01-15 22:14:46 2275

原创 重写equals方法为什么还要重写hashcode方法?

重写equals方法为什么还要重写hashcode方法?回归根本问题:为什么两个方法都要重写。这种情况通常发生在 set 集合去重,我们都知道 set 集合是用来保存不同对象的集合,也就是说set 集合内没有重复的元素。但有时,set集合会出现“异常”,即没有进行去重操作。原因就是:只重写了 equals 方法,但没有重写 hashCode 方法。具体分析一下,只重写equals方法,那么 set 进行去重操作时,先判断的是两个对象的 hashcode 是否相等,由于没有重写hashcode() 方法,所

2024-01-15 20:56:31 2652

原创 Mybatis获取参数值得两种方式:${}和#{},${}和#{}区别是什么?

${}的本质是字符串拼接,#{}的本质是占位符赋值。${} 使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;#{} 使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段赋值时,可以自动添加单引号;

2024-01-03 10:51:12 5296

原创 分代收集 + 垃圾回收算法

1. 弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的2. 强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象就越难以消亡3. 跨代引用假说(Intergenerational Reference Hypothesis):跨代引用相对于同代引用来说仅占极少数💛 收集器应该将Java堆划分出不同的区域,然后将回收对象依据其年龄()分配到不同的区域之中存储。显而易见,,那么把它们集中放在一起,

2023-08-16 11:28:18 3340

原创 Java并发编程之锁的升级

如果多个线程轮流获取一个锁,但是每次获取锁的时候都很顺利,没有发生阻塞,那么就不存在锁竞争。只有当某线程尝试获取锁的时候,发现该锁已经被占用,只能等待其释放,这才发生了锁竞争。

2023-08-10 16:04:46 2280

原创 Java 中 Set集合常用方法

对象名.add()向Set集合中添加元素 (但不能添加重复元素,Set集合中不允许元素重复)如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中。

2023-08-09 13:05:13 4356

原创 MySQL刷题遇到的盲点(五)窗口函数

用来对表分组( partition 子句可以省略,省略就是不指定分组):是对分组后的结果进行排序专用窗口函数。如:rank, dense_rank, row_number等专用窗口函数。聚合函数。如sum,avg, count,max, min等因为窗口函数是对where或者group by子句处理后的结果进行操作,所以窗口函数原则上只能写在select子句中。窗口函数具备了我们之前学过的group by子句分组的功能和order by子句排序的功能。那么,为什么还要用窗口函数呢?

2023-08-07 10:32:03 3228

原创 MySQL刷题遇到的盲点(四)lead,date_add,datediff函数

字段名称:从后面的行里取哪个字段;行数:取后面的第几行数据注意:这个字段可省略,省略就等同于设为1默认值:如果到最后一行了,也就是没有下一行了,这个字段填什么注意:这个字段可省略,省略就等同于设为null。

2023-08-05 15:55:04 2123

原创 session 和 cookie 有什么区别

cookie数据存储在客户端)自带证明自己身份信息的标记 (跨页面间变量传递 :自己携带的一些信息从后台绕一下 请求转发 缓存 到别的页面)由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证,这样服务器就能从通行证上确认客户身份了。session(数据存储在服务端)把服务器端的文件信息存储在硬盘上或是内存中。

2023-08-04 12:07:03 2107

原创 Java并发编程之顺序一致性

如果程序是正确的,程序的执行将具有顺序一致性(Sequentially Consistent)——即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同。同步,即排队。

2023-08-04 09:20:23 2195

原创 Java包装类(自动拆装箱)

为什么要有包装类?在面向对象中,“一切皆为对象”,但是基本数据类型不符合这一理念,为了让基本类型也称为对象便于类型之间的转化,数据类型之间的基本操作Integer ——>int Integer对象.xxValue()Integer ——> String Integer对象.toString()

2023-08-03 16:52:09 2256

原创 重排序问题(详细说明指令重排序)

在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。

2023-08-02 18:35:46 2550

原创 基于总线加锁和缓存锁(CPU实现原子操作的两种方式)

指内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不在总线上声言LOCK#信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性,因为。就是使用处理器提供的一个 LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。,当其他处理器回写已被锁定的缓存行的数据时,会使缓存行无效。(cache line)时,处理器会调用总线锁定。(有的CPU不支持)性能比较好。

2023-08-01 21:26:51 4780

原创 CAS操作——Java并发编程

CAS(Compare and swap)比较并交换操作是一种常见的并发控制方法,用于实现原子性更新共享变量的值。Java并发编程中CAS操作需要输人两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。

2023-08-01 20:54:31 2320

原创 MySQL刷题遇到的盲点(三)字符串截取

或str:要处理的字符串pos:截取位置length:截取长度注:如果位置是负数,则是从后倒数位数,到字符串结束或截取的长度str:要处理的字符串delim:分隔符count:计数如果count是,那么就是从数,的的全部内容;如果是,那么就是从右往左开始数,的的所有内容。比如从右数第二个分隔符的右边全部,再从左数的第一个分隔符的左边substring_index(substring_index(str,'.',-2),'.',1);str:被截取字段length:截取长度。

2023-07-31 11:20:04 2070

原创 MQ常见的问题

生产者的生产速率远远大于消费者的消费速率,使消息大批量的堆积在消息队列。

2023-07-30 23:36:31 2135

原创 进程、线程间通信方式

进程由线程组成 ——> 进程有的功能线程都有,所以线程的通信方式要多一些。

2023-07-30 23:21:43 2132

原创 定时任务——分布式任务调度

定时任务:使用延时队列可以实现定时任务,例如每隔一段时间执行某个操作,或者在特定的时间点执行某个操作。定时任务一般是有固定时间周期的,有明确的触发时间。而延时任务一般没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内执行,没有执行周期。定时任务一般批处理操作多个任务,延时任务一般是单个任务。

2023-07-30 22:58:29 2203

原创 延时队列DelayQueue

DelayQueue是一个无界的BlockingQueue(线程安全),用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。通俗地讲,(延时队列也是队列的一种,遵循先进先出的特点)要将延时队列和定时任务区分开!!!:在特定时间执行任务。

2023-07-30 14:15:34 2157

原创 MySQL刷题遇到的盲点(二)case函数用法

是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。可用在任何允许使用表达式的地方。CASE函数分为: 简单CASE函数 和 搜索CASE函数。

2023-07-29 15:31:12 2097

原创 MySQL刷题遇到的盲点(一)Union 和 union all的区别

union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比 union 高。

2023-07-28 23:43:36 2126

原创 Spring中声明式事务

基于Spring AOP,通过注解或XML配置实现,有助于用户将操作与事务规则进行解耦。其本质是对方法前后进行,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。本文主要对叙述。加此注解看作一个事务,要么都成功要么都失败。纯注解模式下实现事务只需要把注解驱动的注解形式@EnableTransactionManagement 加在Spring的配置类上就可以了。

2023-07-28 22:59:03 3196

原创 泛型和Object的区别!(为什么使用泛型好? )

当数据类型很多且不确定要使用什么类型对象时,可以使用Object;当数据类型很多且能确定使用什么类型对象时,最好使用泛型,可以在操作数据时把类型进行统一。使用Object类型在获取数据时,无法使用其特有的行为,比如不能调用属性方法;当后面会使用到对象其属性时,应该用泛型。

2023-07-28 15:59:22 3702

原创 简单了解一下Java中的泛型

泛型可以用来指定容器,而由编译器来保证类型的正确性。通俗易懂的讲,泛型就是限制数据类型为一种参数。

2023-07-28 15:32:09 2222

原创 Java 多态

是同一个行为具有不同表现形式的能力,主要用来实现动态联编(动态性)💡 形象举例:比如:现实生活中,有小宝、大宝,大宝是小宝的爸爸。有一天,小宝接到打给大宝的电话,让大宝去喝喜酒,但是大宝不在家,小宝急中生智,打扮成大宝的样子去参加宴席。到宴席后,别人都以为大宝来了,其实是小宝打扮成爸爸的样子来替代大宝的。这个故事告诉我们子类可以打扮成父类的样子去做父类能做得事情,这样的灵活性是非常强的,这顿饭对于别人来说是吃到大宝的肚子里,但是其实是吃到小宝的肚子里。

2023-07-27 23:20:30 3147

原创 Java 抽象类

有抽象方法的类,把相同的但是不确定的信息提取出来(父类做解耦:公共的信息提取出来),为了以后的重用,且必须使用abstract关键字所修饰。

2023-07-27 23:06:03 3159

原创 Java异常体系

Throwable 是 error 和 exception 的父类运行时异常也叫做非受检异常。是程序未检测出来的异常,这种异常通常是逻辑错误所引起的。例如:逻辑产生的异常只有在运行时才能被检测到。非运行异常也叫做受检异常。从语法角度上必须解决的异常,如果不处理,那么不能被编译通过。

2023-07-27 13:31:18 2054

原创 Spring循环依赖问题

多个bean之间相互依赖,形成了一个闭环。比如A依赖B,B依赖于C,C又依赖于A。

2023-07-27 11:32:03 2042

原创 Java 反射

Java是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

2023-07-26 23:30:58 3207

原创 Java 对象的创建

new反射对象的复制 copy反序列化 (java ——> json)

2023-07-26 16:36:24 2057

原创 Java内存区域(Java虚拟机栈)

调用函数的时候,我们会为函数开辟一块内存,这块内存叫做栈帧,这个内存在Java虚拟机栈中开辟。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。对于每个执行线程,会分配一个Java栈,JVM在执行过程当中,每执行一个方法,都会为方法在当前栈中增加一个栈帧,每个栈帧的信息与具体实现相关,但一般会由3部分组成:变量区,方法参数和本地变量会放入这个位置,大小是固定的,在进行方法时会先分配好,在类定义中,会由max local来指定这块区的大小;

2023-07-25 22:34:33 2098

原创 简单介绍一下消息队列MQ

消息队列 MQ(Message Queue),后端通讯的中间件。它屏蔽了复杂的通讯协议,像常用的dubbo、http协议都是同步的,这两种协议很难实现双端通讯,A调用B,B也可以主动调用A,而且不支持长连接。MQ做的就是在这些协议上构建一个简单协议 —— 生产者、消费者模型。MQ带给我们的不是底层的通讯协议,而是更高层次的通讯模型,它定义了两个对象:发送数据的叫生产者,接受消息的叫消费者,我们可以无视底层的通讯协议,自己定义生产者、消费者。觉得业务需要使用mq,就可以使用,没有具体要求什么时候使用。

2023-07-25 22:32:12 2069

原创 Java元注解

注解可以描述为元数据,即一种描述数据的数据。其主要作⽤就是负责注解其他注解,为其他注解提供了相关的解释说明。元注解也是Java自带的标准注解,只不过用于修饰注解,比较特殊。元注解包括@Retention、@Target、@Inherited、@Documented、@Repeatable 、@Native等。

2023-07-24 15:17:44 2039

原创 MySQL 事务

事务:多个操作同时进行,要么同时成功,要么同时失败。事务的四大特征:一致性、原子性、隔离性、持久性。事务的并发问题:脏读、不可重复读、幻读。

2023-07-24 14:15:10 3174

原创 正向代理、反向代理

代理分为正向代理和反向代理。

2023-07-21 23:12:19 2050 1

原创 vue路由 & nginx路由

两者区别!!!vue:拼接(拼接时将本身和后面的都拼接到target后面)nginx:替换(将本身和前面的都替换为target,后面的照常放在那即可)

2023-07-21 23:08:47 2552 1

原创 数据结构 —— 队列

队列是一种特殊的线性表,出队和入队分别在队列头和尾进行,所以需要两个变量:front(队头)、rear(队尾)。:允许插入的一端 (rear):允许删除的一端 (front)front随着数据的出队而变化,rear随着数据的入队而变化,两个游标默认指向-1。

2023-07-21 22:56:23 2058 1

原创 数据结构 —— 栈(Java)

栈是一种特殊的线性表,只允许在固定的一端进行插入和删除。:允许插入和删除的一端:不允许插入和删除的一端。

2023-07-20 11:18:35 2055

原创 JDK、JRE、JVM关系

JDK(Java Development Kit)是用于支持Java程序开发的最小环境,是 Java 语言的软件开发工具包(SDK),包含: Java程序设计语言,Java虚拟机,Java类库。主要工作是进行编译,生成 .class 文件(通过javac xx.java 将.java文件 变成 .class文件)

2023-07-19 16:05:27 3159

原创 数据结构 —— 归并排序

归并排序方法就是把一组n个数的序列,折半分为两个序列,然后再将这两个序列再分,一直分下去,直到分为n个长度为1的序列。然后两两按大小归并。如此反复,直到最后形成包含n个数的一个数组。原有两个有序数组:创建一个长度为两个序列长度和的数组,s1、s2游标在原序列进行遍历,按大小比较放入新数组中。先将一个无序序列拆分成小组,再进行有序序列合并。

2023-07-18 18:25:02 2086 1

空空如也

空空如也

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

TA关注的人

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