Java面试题总结(乱序版,2020-09-19),高并发下Java程序的GC问题排查

Java面试题总结(乱序版,2020-09-19),高并发下Java程序的GC问题排查,第1张

Java面试题总结(乱序版,2020-09-19),高并发下Java程序的GC问题排查

增加新项时,如果队列满了,add会抛出异常,offer返回false。

2、poll()和remove()区别:

poll()和remove()都是从队列中删除第一个元素,remove抛出异常,poll返回null。

3、peek()和element()区别:

peek()和element()用于查询队列头部元素,为空时element抛出异常,peek返回null。

二、如何让 Java 的线程彼此同步


  1. synchronized

  2. volatile

  3. ReenreantLock

  4. 使用局部变量实现线程同步

三、你了解过哪些同步器?请分别介绍下。


1、Semaphore同步器

特征:

  • 经典的信号量,通过计数器控制对共享资源的访问

  • Semaphore(int count):创建拥有count个许可证的信号量

  • acquire()/acquire(int num) : 获取1/num个许可证

  • release/release(int num) : 释放1/num个许可证

2、CountDownLatch同步器

特征:

  • 必须发生指定数量的事件后才可以继续运行(比如赛跑比赛,裁判喊出3,2,1之后大家才同时跑)

  • CountDownLatch(int count):必须发生count个数量才可以打开锁存器

  • await:等待锁存器

  • countDown:触发事件

3、CyclicBarrier同步器

特征:

  • 适用于只有多个线程都到达预定点时才可以继续执行(比如斗地主,需要等齐三个人才开始)

  • CyclicBarrier(int num) :等待线程的数量

  • CyclicBarrier(int num, Runnable action) :等待线程的数量以及所有线程到达后的 *** 作

  • await() : 到达临界点后暂停线程

4、交换器(Exchanger)同步器

5、Phaser同步器

https://www.cnblogs.com/pamne/p/11731797.html

2020-9-24 08:25-09:00

四、如果客户端禁止 cookie 能实现 session 还能用吗?


一般默认情况下,在会话中,服务器存储 session 的 sessionid 是通过 cookie 存到浏览器里。

如果浏览器禁用了 cookie,浏览器请求服务器无法携带 sessionid,服务器无法识别请求中的用户身份,session失效。

但是可以通过其他方法在禁用 cookie 的情况下,可以继续使用session。

  1. 通过url重写,把 sessionid 作为参数追加的原 url 中,后续的浏览器与服务器交互中携带 sessionid 参数。

  2. 服务器的返回数据中包含 sessionid,浏览器发送请求时,携带 sessionid 参数。

  3. 通过 Http 协议其他 header 字段,服务器每次返回时设置该 header 字段信息,浏览器中 js 读取该 hea

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

der 字段,请求服务器时,js设置携带该 header 字段。

五、OSI 的七层模型都有哪些?


六、在 Java 中,为什么不允许从静态方法中访问非静态变量?


  1. 静态变量属于类本身,在类加载的时候就会分配内存,可以通过类名直接访问;

  2. 非静态变量属于类的对象,只有在类的对象产生时,才会分配内存,通过类的实例去访问;

  3. 静态方法也属于类本身,但是此时没有类的实例,内存中没有非静态变量,所以无法调用。

七、请解释 Spring Bean 的自动装配


Spring支持IOC,自动装配不用类实例化,直接从bean容器中取。

1、配置在xml中

2、@Autowired自动装配

八、请解释自动装配模式的区别?


有五种自动装配的方式,可以用来指导 Spring 容器用自动装配方式来进行依赖注入。

1、no

默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配。第 402 页 共 485 页

2、byName

通过参数名 自动装配,Spring 容器在配置文件中发现 bean

的 autowire 属性被设置成 byname,之后容器试图匹配、装配和该 bean 的属

性具有相同名字的 bean。

3、byType:

通过参数类型自动装配,Spring 容器在配置文件中发现 bean

的 autowire 属性被设置成 byType,之后容器试图匹配、装配和该 bean 的属

性具有相同类型的 bean。如果有多个 bean 符合条件,则抛出错误。

4、constructor

这个方式类似于 byType, 但是要提供给构造器参数,如

果没有确定的带参数的构造器参数类型,将会抛出异常。

5、autodetect

首先尝试使用 constructor 来自动装配,如果无法工作,

则使用 byType 方式。

2020-9-25 08:30-09:00

九、如何开启基于注解的自动装配?


要使用 @Autowired,需要注册 AutowiredAnnotationBeanPostProcessor,可以有以下两种方式来实现:

引入配置文件中的下引入 

在bean配置文件中直接引入AutowiredAnnotationBeanPostProcessor

十、什么是 Spring Batch?


1、什么是spring batch?

spring batch是一个轻量级的、完善的批处理框架,它主要的目的在于帮助企业建立健壮、高效的批处理应用。

spring batch是Spring的一个子项目,它使用java语言并基于spring框架作为基础开发,使得已经使用Spring框架的开发者或者是企业可以更加容易访问和利用企业服务。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5437978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存