java面试题2020

1:String类 能被继承吗?为什么?
不能,因为String类有final修饰符,final类无法被继承。
2:ArrayList和LinkedList有什么区别?
a:ArrayList 底层是数组,而LinkedList底层是双向链表结构。
b:都是不同步的,不保证线程安全
c:插入和删除是否受元素位置的影响:ArrayList采用数组存储,所以插入和删除元素的时间受数组的复杂度影响,默认插入是在最后一位 时间复杂度是O(1),如果指定位置插入(add(int index,E element)时间复杂度就是(O(n-i)。因为在执行的时候集合中第i和第i个元素之后的(n-i)都要执行向前或向后一位的操作 LinkedList采用链表存储,所以插入,删除不受时间复杂度影响 都是近似O(1)
d:是否支持快速随机访问:LinkedList 不支持高校的随机元素访问,而ArrayList支持。快速随机访问就是通过元素的序号快速获取元素对象(对应于get(index)方法。
e. 内存空间占用: ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据)
3:g1和cms区别,吞吐量优先和响应优先的垃圾收集器选择。
Cms是以最短回收停顿时间为目标的收集器。基于标记-清楚算法实现,比较占用cpu,易造成碎片。G1是面向服务端的垃圾收集器,是JDK9的默认收集器,基于标记-整理算法实现。
可利用多核,多cpu,保留分代,实现可预测停顿,可控
4:tomcat如何调优,涉及哪些参数
硬件上选择,选择系统版本,版本选择,jdk选择,配置jvm参数,配置connector的线程数量,开启gzip压缩,trimSpaces,集群等
5:Spring加载流程(这个没学过)
Spring中bean的加载主要有三步 核心实在AbstractApplicationContext的refresh方法 1:定位到bean资源的位置 2:加载:将定位到的资源进行解析保存为BeanDefinition对象3注册:将BeanDefinition对象保存到map容器中,如果没有懒加载的bean,需要进行自动装配,调用getBean()方法创建真实的Bean保存到容器中,同时依赖自动注入
6:Spring事务的传播属性(不了解)
a、PROPERGATION_MANDATORY: 方法必须运行在一个事务中,不存在事务则抛出异常
b、PROPERGATION_NESTED:  存在事务则运行在嵌套事务中,不存在则创建一个事务
c、PROPERGATION_NEVER: 当前方法不能运行在事务中,存在事务则抛出异常
d、PROPERGATION_NOT_SUPPORT: 当前存在事务则将其 挂起
e、PROPERGATION_REQUIRED: 不存在事务则创建一个事务
f、PROPERGATION_REQUIRES_NEW: 新建一个自己的事务,不论当前是否存在事务
g、PROPERGATION_SUPPORT: 存在事务则加入,不存在也可以
Definition:定义
7:说说aop中的几个术语
核心组件:bean,context,core 单例注入是通过beanfactory进行创建,生命周期是在创建的时候的时候通过接口实现开启,循环注入是通过后置处理器,aop其实就是通过反射进行动态代理,pointout,advice等
8:volatile的原理,作用,能代替锁吗?
Volatile利用内存栅栏机制保存变量的一致性不能代替锁,其只具备数据可见性一致性,不具备原子性。
9:newCache和newFixed有什么区别,他们的原理简单概括下,构造函数的各个参数的含义是
newSingleThreadExecutor返回以个包含单线程的Executor,将多个任务交给此Exector时,这个线程处理完一个任务后接着处理下一个任务,若该线程出现异常,将会有一个新的线程来替代。
newFixedThreadPool返回一个包含指定数目线程的线程池,如果任务数量多于线程数目,那么没有没有执行的任务必须等待,直到有任务完成为止。
newCachedThreadPool根据用户的任务数创建相应的线程来处理,该线程池不会对线程数目加以限制,完全依赖于JVM能创建线程的数量,可能引起内存不足。 底层是基于ThreadPoolExecutor实现,借助reentrantlock保证并发。 coreSize核心线程数,maxsize最大线程数。

你可能感兴趣的:(面试题)