自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 什么是依赖注入,依赖注入的方式有哪些

依赖注入方式的分类分为构造器注入,setter方式注入,属性注入和接口注入四种,自动装配中根据autowire属性的不同,会属于构造器注入或者setter方式注入。在确定依赖注入方式的过程中翻阅博客,有些博客的分类不是很准确(比如这6种 Spring 依赖注入方式,你都会吗?- 掘金 (juejin.cn)),导致需要翻阅大量的博客来进行对比验证,好在最终总结出一个相对比较合理的分类。这样的分类根据这篇文章,我们来谈一谈Spring中的属性注入-CSDN博客。

2023-12-23 17:38:41 1152 1

原创 Spring框架中用到的设计模式

通过将对象封装在一个装饰者对象中,动态地给对象添加新的行为,增强该对象的功能,无需修改其原始代码。比如FileInputStream类和装饰者BufferedInputStream类。这种设计模式在Java中的家族就有广泛应用,允许通过方式来扩展的功能,而无需修改基础的输入流实现。

2023-12-22 15:25:21 907 1

原创 面试题——ThreadLocal相关

ThreadLocal,即线程本地。如果创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个,多个线程操作这个变量的时候,实际是操作自己本地内存里面的变量,从而起到线程隔离的作用,避免了线程安全问题。

2023-12-11 22:18:47 116 1

原创 面试题——synchronized为什么是非公平锁?

非公平锁:新来的线程不会考虑entryList队列是否有等待线程,而是直接参与竞争锁。这就导致,线程尝试获取锁失败,进入阻塞队列的顺序和最终被唤醒的顺序是不一致的,也就是说你先进入队列,不代表你就会先被唤醒,因为有可能被新来的线程通过自旋抢到锁。当持有锁的线程释放锁时,该线程会执行以下两个重要操作:(1)先将锁的持有者owner 属性赋值为 null;(2)唤醒等待链表中的一个线程(假定继承者?存疑)。在这两个步骤之间,如果有其他线程刚好在尝试获取锁(例如自旋),则可以马上获取到锁。

2023-12-10 15:24:00 116 1

原创 面试题——多线程中synchronized锁的升级流程

如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为重量级锁,此过程就构成了 synchronized 锁的升级。线程A要执行同步锁的代码时,该对象被当做同步锁,线程抢到该锁时,该对象的对象头当中Mark Word字段中的锁标志位为01,偏向锁位为1,前23位记录线程A的ID,对象没有被当做锁的时候,为普通对象,Mark Word锁标志位为01,偏向锁位为0,如果失败,则说明发生竞争,

2023-12-10 13:33:43 56 1

原创 面试题—— synchronized 和 ReentrantLock 的区别

(1)两者都是可重入锁可重入锁指的是在一个线程中可以多次获取同一把锁,比如:一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法,而无需重新获得锁,两者都是同一个线程每进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。_count_recursionAQSstate(2)synchronized 依赖于 JVM 而 ReentrantLock 依赖于 API。

2023-12-09 21:59:48 83

原创 volatile原理

volatile可保证可见性(读写屏障实现)和有序性(读写屏障实现),禁止了指令重排序,无法解决指令交错的问题(即无法保证原子性)synchronized可保证原子性(不会出现指令交错的问题),可见性以及有序性(如何实现?),但不禁止指令重排序(存疑)

2023-12-09 15:05:27 86

原创 异常的分类

checked exception:受检查异常需要try-catch包一下,或者在方法签名处声明throws,否则编译不通过IOException(IO异常,比如使用某些流来读取数据,其他一些进程关闭了流;尝试读取/写入文件但没有权限),ClassNotFoundException(找不到指定类的异常,通过字符串加载类比如用Class.forName(“xx”)时找不到指定的类会报错),SQLException(SQL异常,比如登录被拒绝;表不存在;列名不存在;

2023-12-09 11:10:31 398

原创 面试题——线程的sleep()方法和yield()方法有什么区别?

不同系统的行为一致: sleep 方法在不同的操作系统和 JVM 中的行为更加一致,它通过底层操作系统的休眠机制实现。而 yield 方法则更依赖于调度器的具体实现,调度器在不同的环境(比如在单核CPU或者多核CPU下yield的效果不一样)中可能表现不一致。精准的时间控制:sleep 方法允许精确地指定线程休眠的时间,而 yield 方法只是一种提示,调度器可以忽略它。sleep()方法不考虑自身的优先级,所以会给比它优先级低的线程机会;sleep()方法比yield()方法具有更好的移植性。

2023-12-08 21:23:35 92

原创 什么是虚引用?

虚引用:如果一个对象仅持有虚引用,它就和没有任何引用一样,在任何时候都可能被垃圾回收。唯一作用就是配合引用队列监控(添加虚引用的)对象被垃圾回收的活动,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到一个引用队列中。程序可以通过引用队列知晓监控对象是否将要被回收,以便在他们被回收之前可以采取一些行动。

2023-12-08 14:34:26 59

原创 面试题——动态代理是什么?

静态代理指的是我们预先编码好一个代理类,而动态代理指的是运行时生成代理类。动态更加方便,可以指定一系列目标来动态生成代理类(AOP),而不像静态代理需要为每个目标类写对应的代理类。动态代理就是一个代理机制,动态是相对于静态来说的。代理可以看作是调用目标的一个包装,通常用来在调用真实的目标之前进行一些逻辑处理。代理也是一种解耦,目标类和调用者之间的解耦,因为多了代理类这一层。“代理也是一种解耦,目标类和调用者之间的解耦,因为多了代理类这一层。所以,代理类的出现,实现了目标类和调用者之间的解耦。

2023-12-07 20:14:30 53 1

原创 移位操作符>>与>>>以及<<

有符号数右移时,高位用相应的符号数填充;无符号数右移时,高位均用0填充;有符号数左移时,低位均用0填充;右移或者左移时,符号位也参与移动;正数和负数均用补码形式表示,其中正数的原码=反码=补码,负数的补码=原码除符号位以后的部分取反加1。

2023-12-06 20:14:49 41 1

原创 关于带符号基本数据类型的取值范围的解释

到此,再来看正0和负0的原码:0000 0000 0000 0000和1000 0000 0000 0000,补码表示中,正0的补码还是0000 0000 0000 0000,负0经过非符号位取反(1111 1111 1111 1111)加1后,同样变成了0000 0000 0000 0000,也就是正0和负0在补码系统中的编码是一样的,也就是说正0和负0的两个原码最终转换为同一个补码0000 0000 0000 0000。二进制原码最大为0111 1111 1111 1111=2^15-1=32767。

2023-12-06 19:34:18 133 1

原创 面试题——接口和抽象类的区别是什么?

接口方法修饰符都隐含public,抽象类方法修饰符可以用public,protected,无修饰符以及private(加上private不会报错,但是为了发挥抽象方法能被子类重写的作用,这里不使用private)。接口中的所有变量都隐含public static final,而抽象类中可以包含非static变量,非final变量,变量的修饰符可以是private,protected或者public或者无修饰符。从设计层面来说,抽象类是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。

2023-12-05 15:38:30 32

原创 进程间的通信方式之一信号,是如何在应用进程和内核之间交互的?

介绍进程间的通信方式之一信号,是如何在应用进程和内核之间交互的

2023-12-04 22:35:51 52

原创 WebSocket的特点

与 HTTP 协议有着良好的兼容性。

2023-12-04 19:33:36 111

原创 面试题——为什么有了HTTP还需要RPC?

既然有HTTP协议,为什么还要有RPC - 掘金 (juejin.cn)

2023-12-04 15:49:44 55

原创 面试题——SYN泛洪攻击

SYN攻击就是 攻击客户端 在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直 至超时,这些伪造的SYN包将⻓时间占用未连接队列,影响了正常的SYN,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。检测:检测SYN攻击非常的方便,当在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。SynAttackProtect机制。SYN cookies技术。

2023-12-02 19:51:26 64

原创 面试题——HTTP和HTTPS的区别

于TCP/IP而言,TLS协议属于应用层(维基百科定义,未说明理由),应用层和传输层之间(更符合http报文的加工逻辑:(完成TLS握手之后)http报文先经过TLS协议处理,再将密文交给传输层。其中TLS协议又分为上层的握手协议和下层的记录协议),或者传输层(因为SSL增强了TCP服务(更加安全了),因此,SSL应该是运输层协议。完成TCP三次握手建立连接,再进行TLS四次握手后,HTTP报文传给SSL/TLS协议进行加密,加密消息再传给TCP协议。TLS协议包括握手协议和记录协议。

2023-11-30 23:22:55 40

原创 面试题——HTTPS是如何保证安全的?

详细剖析https如何保证安全

2023-11-30 16:26:07 56

原创 Spring循环依赖问题

AService的创建生命周期:三级缓存:第三级缓存:zhouyuMap,在源码中的变量名为singletonFactories,保存没有初始化(依赖注入)的普通对象。用于在创建AService的bean对象的过程中:1创建BService时,给aService属性赋值时,AService非AOP的情况下获取AService普通对象;2创建BService时,给aService属性赋值时,AService是AOP的情况下创建代理对象时也会用到AService普通对象。

2023-10-15 14:45:43 48 1

空空如也

空空如也

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

TA关注的人

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