几率大的杂乱+操作系统

1.Bean的生命周期?
1)创建阶段(Created):分配存储空间,构建对象,初始化。
2)应用阶段(In Use):对象至少被一个强引用使用着。
3)不可见阶段(Invisible):该对象不再被任何强引用持有。
4)不可达阶段(UNreached)
5)收集阶段(collected):如果该对象重写了finalized()方法,则会去执行方法的终端操作。
6)终结阶段(Finalized):等待垃圾回收器对该对象空间进行回收。
7)重新分配阶段(De-allocated):所占用的内存空间进行回收或再分配。

2.各种排序的时间复杂度
在这里插入图片描述3.树结构
1)完全二叉树
设二叉树的深度为h,其他各层(1~h-1)的节点数都达到了最大个数,第h层的所有节点都连续集中在最左边。
在这里插入图片描述2)堆
堆也是一个完全二叉树。堆满足两个性质:堆的父节点大于(或小于)其他子节点;堆的左右子树也是堆。
堆分为最大堆和最小堆。最大堆是指父节点的值大于子节点的值;最小堆是指父节点的值小于子节点的值。
3)平衡二叉树
要么是一棵空树,要么左右子树的高度差不会超过1且左右子树也是平衡二叉树。
4)满二叉树
除了叶节点以外,其他所有节点都有子节点,且叶子节点在二叉树的最底层。(满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树)
在这里插入图片描述5)二叉搜索树
要么是空树,要么满足下列条件的二叉树:如果有左子树,则左子树的值小于根节点的值;如果有右子树,则右子树的值大于根节点的值;且左右子树也满足二叉搜索树。查询、插入、删除的时间复杂度为树高O(log n)。
在这里插入图片描述6)红黑树
是一种自平衡的二叉搜索树,在进行插入和删除操作时能通过特定操作保持二叉搜索树的平衡。
在这里插入图片描述7)B树
一个节点可以拥有对于2个子节点的二叉查找树。
8)B+树
它与B树的差别在于所有叶子节点和相邻的节点使用链表相连,便于区间查找和遍历。

4.泛型T,E,?和空的区别?
泛型最大的好处就是省去了强制转换,可以在编译时候检查类型安全,可以用在类、方法、接口上。使用A,B,C…Z定义的都是泛型,把T换成A也是一样的。
?表示不确定的Java类型。
T(type)表示具体的一个Java类。
K V(key value)分别代表Java键值中的key和value。
E(element)代表Element。

泛型的限定:
?extends E:接收E类型或者E的子类。
?super E:接收E类型或者E的父类。

E,T,K,V等表示固定泛型类型参数需要声明,而通配符?不需要定义就可以直接使用。

5.秒杀系统如何设计?高并发下会出现什么问题?
架构设计:
1)将请求拦截在系统上游,降低下游压力:秒杀系统特点是并发量极大,但实际秒杀成功的请求数量却很少,所以如果不在前端拦截很可能造成数据库读写锁冲突,甚至导致死锁,最终请求超时。2)充分利用缓存(Redis):利用缓存可以极大提高系统读写速度。3)消息中间件(ActiveMQ、Kafka等):消息队列可以削峰,拦截大量并发请求,这是异步处理过程。(消息队列作用:解耦、削峰、异步操作)
前端设计方案:
页面静态化:将活动页面上所有可以静态化的元素都静态化。
禁止重复提交:用户提交后按钮变灰,禁止重复提交。
用户限流:在某一段时间内,只允许用户提交一次请求,比如可以IP限流。
后端设计方案:
1)网关层
限制UserID的访问频率,针对某些恶意攻击或其他插件,在服务端控制层需要针对同一个访问ID,限制访问频率。
2)服务层
采用消息队列缓存请求,先把这些请求都写到消息队列缓存一下。利用缓存应对读请求,对典型读多写少业务,大部分请求都是查询,可以利用缓存分担数据库压力。

6.操作系统中的进程调度策略有哪些》
1)FCFS先来先服务,队列实现,非抢占的。
2)SJF最短作业优先调度算法。
3)优先级调度算法,可以是抢占式的,也可以是非抢占式的。
4)时间片轮转调度算法,可抢占的。
5)多级队列调度算法。
6)多级反馈队列调度算法。

7.虚拟内存是什么?
每个进程都有独立的地址空间,这个地址空间被分为大小相等的多个块,称为页。每页都是一段连续的地址,这些页被映射到物理内存中,但并不是所有的页都在内存中才能运行。

8.页面置换算法?
FIFO先进先出算法LRU
最近最少使用算法LFU
最少使用次数算法OPT
最优置换算法

9.面向对象的特征?
1)抽象:抽象是将一类对象共同特征总结出来构造类的过程。
2)继承:能从已有的类中继承信息,创建出新的类。
3)封装:封装是将数据和操作数据的方法绑定起来,对数据的访问只能通过访问已定义的接口。

10.解决Java集群的session共享方案?
1)客户端cookier加密
2)集群中,各个应用服务器提供了复制session的功能。
3)session持久化,利用数据库来保存session。
4)使用共享存储来保存session。
5)使用memcached来保存session。

11.了解元注解吗?
元注解是指注解的注解。如:
@Retention 注解的保留策略
@Target 注解的作用目标
@Document 包含在Javadoc中
@Inherited 注解可以被继承

12.LinkedList是单向链表还是双向链表?它的get方法的时间复杂度是多少?
双向链表 O(n)
get(int index):返回列表中指定下标处的元素。

13.深拷贝和浅拷贝的区别?
引用拷贝:创建一个指向对象引用变量的拷贝,地址值是相同的,所以它们肯定是同一个对象。
对象拷贝:创建了新的对象,但不是把原对象的地址赋给新的引用变量。
深拷贝和浅拷贝都是对象拷贝。
浅拷贝:只复制所考虑的对象,而不是复制它所引用的对象。(即只复制指针指向引用的对象)
深拷贝:拷贝整个独立的对象,把所引用的对象也重新复制一遍。深拷贝相对于浅拷贝来说速度更慢开销更大。

14.String底层原理?StringBuilder和StringBuffer的区别?
String类是final类,意味着String类不能被继承,并且它的成员方法默认是private final方法,没有提供对应的Setxxx方法,所以String类是不可变类。底层是通过char数组来保存字符串的,至于提供修改String字符串的方法,比如sub、concat、replace操作都不是在原有的字符串上进行的,而是重新生成一个新的字符串对象在上面进行操作。所以进行这些操作之后,最原始的字符串并没有发生改变。

StringBuilder和StringBuffer的区别?
a)拥有的成员属性和成员方法基本相同,但StringBuffer是线程安全的。
b)执行效率:StringBuilder>StringBuffer>String。

15.Java集合类的初始容量大小和扩容大小?
ArrayList初始容量是10,按照1.5倍扩容。
Vector初始是10,按照2倍扩容。
Stack初始是10,按照2倍扩容。
LinkedList是双向链表实现,对容量没有要求,也不需要扩容。
HashMap初始是16,按2倍扩容。
ConcurrentHashMap初始是16,按照2倍扩容。
HashTable初始是11,扩容到原来数组的2倍+1.
TreeMap是由红黑树实现,容量没有限制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值