JAVA后端面试题(二)

1.问答题

1.什么是ThreadPoolExecutor?

ThreadPoolExecutor是线程池创建时调用的构造函数,主要参数有以下几个:**
1.corePoolSize 核心线程最大数量,简单来讲,就是线程池中的常驻线程的最大数量。**
2.maximumPoolSize 线程池中运行的最大线程数(包含核心线程非核心线程)**
3.KeepAliveTime 线程池的空闲线程(只针对非核心线程存活的最大时间
**4.Unit keepAlive的时间单位
5.WorkQueue 存放任务的阻塞队列

**6.Handle 线程饱和的时候执行的策略

2.synchronized、volatile比较和应用场景

1.volatile 关键字是线程同步的轻量级实现,所以volatile 性能肯定比synchronized 关键字要好。但是volatile 关键字只能用于变量,而synchronized 关键字还可以修饰方法以及代码块。
2.volatile 关键字能保证数据的可见性,但不能保证数据的原子性synchronized 关键字两者都能保证。
3.volatile 关键字主要用于解决变量在多个线程之间的可见性,而synchronized 关键字解决的是多个线程之间访问资源的同步性。
4.volatile不会使线程陷入阻塞。synchronized关键字会使线程进入阻塞状态。

springboot的原理是什么?starter提供的是什么?有什么优势?
spring的原理

1、 SpringBoot 在启动时会去依赖的 Starter 包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包。

2、 根据 spring.factories 配置加载 AutoConfigure 类

3、 根据 @Conditional 注解的条件,进行自动配置并将 Bean 注入 Spring Context

starter提供的是什么

starter 中整合了该场景下各种可能用到的依赖,用户只需要在 Maven 中引入 starter 依赖,SpringBoot 就能自动扫描到要加载的信息并启动相应的默认配置。

有什么优势:
springboot的优势:

1.搭建简单,开箱即用
2.配置简单,专注编码
3.部署简单,一键启动

被引用的对象一定能存活吗?

不一定,看 Reference 类型,弱引用在 GC 时会被回收,软引用在内存不足的时候,即 OOM 前会被回收,但如果没有在 Reference Chain 中的对象就一定会被回收。(1.弱引用:只要垃圾回收机制一运行,不管JVM的内存空间是否够,都会回收该对象的占用内存。 2.软引用:当内存充足的时候不会被回收,当内存不充足的时候会被回收)

用过哪些开发数据结构?cyslicbarrier什么功能?

用过HashMap、ArrayList等开发数据结构。
cyslicaBarrier功能是让所有线程都等待完成后才会继续下一步行动。

Servelet生命周期内调用方法的过程

(1)在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址。
(2)浏览器根据ip地址和端口号访问服务器,组织http请求信息发送给服务器。
(3)服务器收到请求后首先根据Host请求头判断当前访问的是哪台虚拟主机。
(4)服务器根据http请求头中的请求URI判断当前访问的是哪个web应用。
(5)服务器根据http请求头中的请求URI判断当前访问的是web应用中的哪个web资源。
(6)检查web应用的web.xml文件,如果根据路径找到具体的servlet处理类的全路径名交给该servlet处理,如果找不到就交给缺省servlet处理。
(7)这个过程中浏览器只知道自己发出来http请求,不久就收到了http响应,浏览器不知道也不关心服务器内部是如何处理的。浏览器和服务器之间的关系是非常单纯的,只有HTTP协议。
(8)解析请求、封装RequestResponse对象、创建Servlet、调用Service方法都是服务器自动进行的,开发人员只需要写好Servlet配置进容器中即可,无需操心具体的底层实现。

阐述实例变量和静态变量的区别:

1.静态变量要加static,而实例变量不用
2.实例变量必须创建对象后才可以通过这个对象来使用,我们才能使用这个实例变量。静态变量属于类,不属于某个实例变量,只要JVM加载了类的字节码,不用创建类的实例对象也可以分配空间,并被使用。
3.一个类的静态方法不能调用类的非静态变量与静态方法,这是它的局限性
4.static修饰的静态变量类加载后只有一块内存空间,可以被一个类的实例对象所共享。

列举常用的设计模式和应用场景

1.工厂模式的定义与使用场合:现在需要创建几个对象,且这几个对象有共同特征,则不需要具体创建各个对象,而是创建对象工厂类即可。一般常用静态工厂模式。

2.单例模式的定义及使用场合:只有一个对象实例被创建,分成饿汉式和懒汉式,懒汉式的对象实例初始为null,有一个私有的无参构造方法,当有线程请求的时候判断为空创建对象实例;饿汉式的对象
实例一加载就创建好了。
3.代理模式的定义与使用场景:一个代理类代表一个真实类的功能,通过访问代理类来实现对真实类的访问。比如买火车票这件小事:黄牛相当于是火车站的代理,我们可以通过黄牛买票,但只能去火车站进行改签和退票。
又比如需要对原有的方法进行修改,就是采用一个代理类调用原有的方法,以避免修改原有代码。

4.生产者-消费者模式的定义与使用场景:生产者把数据放入缓冲区,而消费者从缓冲区取出数据。

5.策略模式的定义与使用场合:一个系统需要动态地在几种类似的算法中选择一种。

2.填空题

1. 6+5%3+2的值是什么__

10

2. System.out.print{4|3}输出的结果是什么__

7
解析:
因为4=0100
3=0011
_______
7=0111

所以4|3=0111=7

3.Math.round(11.5)等于__,10<<3等于多少__

12, 80
解析:Math.round()就是数学中的四舍五入
10的二进制是1010,左移三位是1010000,也就是80
也可以看成10*2^3=80

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十三豆啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值