每日一面---真实面试题---3

先看原题,自己心里默想一遍答案再滑到后面对比答案。答案来源于网络,欢迎指正,共同进步

一、原题

1、自我介绍

2、equals与==

3、Integer之间==

4、Integer如何放到常量池

5、volatile说一说

6、可见性有什么作用。

7、如果java内存模型中去掉了线程内存,直接修改主内存会出现什么情况。

8、单例模式说一说

9、枚举是如何防止反射破坏单例模式的

10、动态代理模式说一说

11、JDK和cglib动态代理区别

12、CAS说一说

13、TCP三次握手?两次握手行不行,为什么?

14、滑动窗口

------------------------------------------------------------------------优美的分割线------------------------------------------------------------------------

二、答案

1、自我介绍

2、equals与==

== 的作用
	基本类型:比较值是否相同
	引用类型:比较地址值是否相同

equals 的作用
	引用类型:默认情况下,比较的是地址值;不过,我们可以根据情况自己重写该方法。比较对象的成员变量值是否相同。

3、Integer之间==

当我们比较包装类的时候,如果范围在【-128127】之间,可以直接用==比较,超出这个范围要用equals,进行比较。

4、Integer如何放到常量池

Integer类在加载时,将会直接缓存-128~127之间数值的所有Integer类实例对象,存放在常量池中;
所以我们就清楚了,如果实参的值在-128~127之间,我们调用ValueOf方法时,它就从缓存中直接返回实例。此时我们使用==比较地址值,当然就会返回true

5、volatile说一说

volatile是jvm提供的轻量级的同步机制
主要有三个特性:
	可见性
	不保证原子性
	禁止指令重排

6、可见性有什么作用。

保证线程的可见性。
当共享变量发生改变时,其它线程可见。

7、如果java内存模型中去掉了线程内存,直接修改主内存会出现什么情况。

盲猜一波,欢迎指正
	等同于直接读写主内存,不用考虑可见性,但是因为没做多线程处理,会导致脏读写问题。

8、单例模式说一说

单例模式,见名知意就是只生成一个实例。
六种实现方法
	懒汉式(线程不安全)
	懒汉式(线程安全)
	饿汉式(线程安全)
	双检锁/双重校验锁(线程安全)
	登记式/静态内部类(线程安全)
	枚举(线程安全)
一般情况下,不建议使用第 1 种和第 2 种懒汉方式,建议使用第 3 种饿汉方式。只有在要明确实现 lazy loading 效果时,才会使用第 5 种登记方式。如果涉及到反序列化创建对象时,可以尝试使用第 6 种枚举方式。如果有其他特殊的需求,可以考虑使用第 4 种双检锁方式。

9、枚举是如何防止反射破坏单例模式的

反编译后的类可以看到:
	类的修饰abstract,所以没法实例化,反射也无能为力。 	

10、动态代理模式说一说

代理:顾名思义就是代为处理,换句话讲就是自己的事情自己不做让别人代替自己做。

通过java的反射机制实现对被代理对象的前置与后置增强操作

例如:aop

11、JDK和cglib动态代理区别

一、原理区别:

java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 

3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换


二、JDK动态代理和CGLIB字节码生成的区别?
 (1JDK动态代理只能对实现了接口的类生成代理,而不能针对类
 (2CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
   因为是继承,所以该类或方法最好不要声明成final 

12、CAS说一说

compare and swap (比较并交换)
是一种高效实现线程安全的方法
	1、支持原子更新操作,适用于计数器,序列发生器(就是给变量自增的工具)等场景
    2、属于乐观锁机制,号称lock-free(底层也是有加锁行为的)
    3CAS操作失败是,由开发者决定是否继续尝试,还是其他操作,因此争用CAS失败的线程不会被阻塞挂起

缺点:
	1、cpu开销大
	2、不能保证代码块的原子性
	3、会引发ABA问题

13、TCP三次握手?两次握手行不行,为什么?

    发起方(A):“你好,请问我可以跟你建立一个连接吗?”(发送请求,等待回复)
    接收方(B):“好啊,我准备好了,来吧。”
    发起方(A):“好的,谢谢,我现在开始向你发送数据了。”

	两次握手不行,三次握手是为了防止当已失效的连接请求报文段突然又传到服务端,造成双方的不一致,导致资源的浪费。


14、TCP滑动窗口

属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,提高网络吞吐量。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值