Java
文章平均质量分 74
yYahoo~
这个作者很懒,什么都没留下…
展开
-
面试官常问问题:Java中的128陷阱详解
(即 cache 数组的地址),所以在 -128~127 之间的数值用 == 进行比较时结果是相等(true),相当于比较的是同一元素的内存地址。这个时候,大家就疑惑了,明明都是一样的数,怎么一个判断结果就是true,一个 判断结果就是false,这就是面试常常踩坑的问题:128陷阱!其实,不只是 Integer 类,其他包装类也有类似的缓存技术,还需要去了解一下包装类,自动装箱拆箱的知识内容。揭晓答案:第一段代码的结果是true,第二段代码的结果是false。看这样两段代码,思考结果返回的是什么。原创 2024-01-15 22:14:46 · 2137 阅读 · 0 评论 -
重写equals方法为什么还要重写hashcode方法?
重写equals方法为什么还要重写hashcode方法?回归根本问题:为什么两个方法都要重写。这种情况通常发生在 set 集合去重,我们都知道 set 集合是用来保存不同对象的集合,也就是说set 集合内没有重复的元素。但有时,set集合会出现“异常”,即没有进行去重操作。原因就是:只重写了 equals 方法,但没有重写 hashCode 方法。具体分析一下,只重写equals方法,那么 set 进行去重操作时,先判断的是两个对象的 hashcode 是否相等,由于没有重写hashcode() 方法,所原创 2024-01-15 20:56:31 · 2598 阅读 · 0 评论 -
Mybatis获取参数值得两种方式:${}和#{},${}和#{}区别是什么?
${}的本质是字符串拼接,#{}的本质是占位符赋值。${} 使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;#{} 使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段赋值时,可以自动添加单引号;原创 2024-01-03 10:51:12 · 5205 阅读 · 0 评论 -
Java并发编程之锁的升级
如果多个线程轮流获取一个锁,但是每次获取锁的时候都很顺利,没有发生阻塞,那么就不存在锁竞争。只有当某线程尝试获取锁的时候,发现该锁已经被占用,只能等待其释放,这才发生了锁竞争。原创 2023-08-10 16:04:46 · 2178 阅读 · 0 评论 -
Java 中 Set集合常用方法
对象名.add()向Set集合中添加元素 (但不能添加重复元素,Set集合中不允许元素重复)如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中。原创 2023-08-09 13:05:13 · 3866 阅读 · 0 评论 -
session 和 cookie 有什么区别
cookie数据存储在客户端)自带证明自己身份信息的标记 (跨页面间变量传递 :自己携带的一些信息从后台绕一下 请求转发 缓存 到别的页面)由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证,这样服务器就能从通行证上确认客户身份了。session(数据存储在服务端)把服务器端的文件信息存储在硬盘上或是内存中。原创 2023-08-04 12:07:03 · 2056 阅读 · 0 评论 -
Java并发编程之顺序一致性
如果程序是正确的,程序的执行将具有顺序一致性(Sequentially Consistent)——即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同。同步,即排队。原创 2023-08-04 09:20:23 · 2093 阅读 · 0 评论 -
Java包装类(自动拆装箱)
为什么要有包装类?在面向对象中,“一切皆为对象”,但是基本数据类型不符合这一理念,为了让基本类型也称为对象便于类型之间的转化,数据类型之间的基本操作Integer ——>int Integer对象.xxValue()Integer ——> String Integer对象.toString()原创 2023-08-03 16:52:09 · 2126 阅读 · 0 评论 -
重排序问题(详细说明指令重排序)
在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。原创 2023-08-02 18:35:46 · 2426 阅读 · 0 评论 -
基于总线加锁和缓存锁(CPU实现原子操作的两种方式)
指内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不在总线上声言LOCK#信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性,因为。就是使用处理器提供的一个 LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。,当其他处理器回写已被锁定的缓存行的数据时,会使缓存行无效。(cache line)时,处理器会调用总线锁定。(有的CPU不支持)性能比较好。原创 2023-08-01 21:26:51 · 4562 阅读 · 0 评论 -
CAS操作——Java并发编程
CAS(Compare and swap)比较并交换操作是一种常见的并发控制方法,用于实现原子性更新共享变量的值。Java并发编程中CAS操作需要输人两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。原创 2023-08-01 20:54:31 · 2242 阅读 · 0 评论 -
MQ常见的问题
生产者的生产速率远远大于消费者的消费速率,使消息大批量的堆积在消息队列。原创 2023-07-30 23:36:31 · 2053 阅读 · 0 评论 -
定时任务——分布式任务调度
定时任务:使用延时队列可以实现定时任务,例如每隔一段时间执行某个操作,或者在特定的时间点执行某个操作。定时任务一般是有固定时间周期的,有明确的触发时间。而延时任务一般没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内执行,没有执行周期。定时任务一般批处理操作多个任务,延时任务一般是单个任务。原创 2023-07-30 22:58:29 · 2128 阅读 · 0 评论 -
延时队列DelayQueue
DelayQueue是一个无界的BlockingQueue(线程安全),用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。通俗地讲,(延时队列也是队列的一种,遵循先进先出的特点)要将延时队列和定时任务区分开!!!:在特定时间执行任务。原创 2023-07-30 14:15:34 · 2074 阅读 · 0 评论 -
Spring中声明式事务
基于Spring AOP,通过注解或XML配置实现,有助于用户将操作与事务规则进行解耦。其本质是对方法前后进行,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。本文主要对叙述。加此注解看作一个事务,要么都成功要么都失败。纯注解模式下实现事务只需要把注解驱动的注解形式@EnableTransactionManagement 加在Spring的配置类上就可以了。原创 2023-07-28 22:59:03 · 3108 阅读 · 0 评论 -
泛型和Object的区别!(为什么使用泛型好? )
当数据类型很多且不确定要使用什么类型对象时,可以使用Object;当数据类型很多且能确定使用什么类型对象时,最好使用泛型,可以在操作数据时把类型进行统一。使用Object类型在获取数据时,无法使用其特有的行为,比如不能调用属性方法;当后面会使用到对象其属性时,应该用泛型。原创 2023-07-28 15:59:22 · 3420 阅读 · 0 评论 -
简单了解一下Java中的泛型
泛型可以用来指定容器,而由编译器来保证类型的正确性。通俗易懂的讲,泛型就是限制数据类型为一种参数。原创 2023-07-28 15:32:09 · 2183 阅读 · 0 评论 -
Java 多态
是同一个行为具有不同表现形式的能力,主要用来实现动态联编(动态性)💡 形象举例:比如:现实生活中,有小宝、大宝,大宝是小宝的爸爸。有一天,小宝接到打给大宝的电话,让大宝去喝喜酒,但是大宝不在家,小宝急中生智,打扮成大宝的样子去参加宴席。到宴席后,别人都以为大宝来了,其实是小宝打扮成爸爸的样子来替代大宝的。这个故事告诉我们子类可以打扮成父类的样子去做父类能做得事情,这样的灵活性是非常强的,这顿饭对于别人来说是吃到大宝的肚子里,但是其实是吃到小宝的肚子里。原创 2023-07-27 23:20:30 · 3116 阅读 · 0 评论 -
Java 抽象类
有抽象方法的类,把相同的但是不确定的信息提取出来(父类做解耦:公共的信息提取出来),为了以后的重用,且必须使用abstract关键字所修饰。原创 2023-07-27 23:06:03 · 3119 阅读 · 0 评论 -
Java异常体系
Throwable 是 error 和 exception 的父类运行时异常也叫做非受检异常。是程序未检测出来的异常,这种异常通常是逻辑错误所引起的。例如:逻辑产生的异常只有在运行时才能被检测到。非运行异常也叫做受检异常。从语法角度上必须解决的异常,如果不处理,那么不能被编译通过。原创 2023-07-27 13:31:18 · 2018 阅读 · 0 评论 -
Spring循环依赖问题
多个bean之间相互依赖,形成了一个闭环。比如A依赖B,B依赖于C,C又依赖于A。原创 2023-07-27 11:32:03 · 2010 阅读 · 0 评论 -
Java 反射
Java是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。原创 2023-07-26 23:30:58 · 3171 阅读 · 0 评论 -
Java 对象的创建
new反射对象的复制 copy反序列化 (java ——> json)原创 2023-07-26 16:36:24 · 2017 阅读 · 0 评论 -
Java内存区域(Java虚拟机栈)
调用函数的时候,我们会为函数开辟一块内存,这块内存叫做栈帧,这个内存在Java虚拟机栈中开辟。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。对于每个执行线程,会分配一个Java栈,JVM在执行过程当中,每执行一个方法,都会为方法在当前栈中增加一个栈帧,每个栈帧的信息与具体实现相关,但一般会由3部分组成:变量区,方法参数和本地变量会放入这个位置,大小是固定的,在进行方法时会先分配好,在类定义中,会由max local来指定这块区的大小;原创 2023-07-25 22:34:33 · 2042 阅读 · 0 评论 -
简单介绍一下消息队列MQ
消息队列 MQ(Message Queue),后端通讯的中间件。它屏蔽了复杂的通讯协议,像常用的dubbo、http协议都是同步的,这两种协议很难实现双端通讯,A调用B,B也可以主动调用A,而且不支持长连接。MQ做的就是在这些协议上构建一个简单协议 —— 生产者、消费者模型。MQ带给我们的不是底层的通讯协议,而是更高层次的通讯模型,它定义了两个对象:发送数据的叫生产者,接受消息的叫消费者,我们可以无视底层的通讯协议,自己定义生产者、消费者。觉得业务需要使用mq,就可以使用,没有具体要求什么时候使用。原创 2023-07-25 22:32:12 · 2011 阅读 · 0 评论 -
Java元注解
注解可以描述为元数据,即一种描述数据的数据。其主要作⽤就是负责注解其他注解,为其他注解提供了相关的解释说明。元注解也是Java自带的标准注解,只不过用于修饰注解,比较特殊。元注解包括@Retention、@Target、@Inherited、@Documented、@Repeatable 、@Native等。原创 2023-07-24 15:17:44 · 2006 阅读 · 0 评论 -
MySQL 事务
事务:多个操作同时进行,要么同时成功,要么同时失败。事务的四大特征:一致性、原子性、隔离性、持久性。事务的并发问题:脏读、不可重复读、幻读。原创 2023-07-24 14:15:10 · 3138 阅读 · 0 评论 -
正向代理、反向代理
代理分为正向代理和反向代理。原创 2023-07-21 23:12:19 · 2016 阅读 · 1 评论 -
Java常见的集合类(集合容器)
集合类型主要有三种:List(列表)、set(集)、map(映射)原创 2023-07-18 14:36:17 · 2783 阅读 · 1 评论