java面经查缺补漏之第二天(坚持,加油,搞点像人的活动,嘿嘿)

这是第二天,希望自己可以坚持住,安利一个面试复习资料

https://blog.csdn.net/qq_41901915/article/details/103672370

话不多说,上题!!!

1.ThreadLocal 类的底层实现是怎么实现的?使用场景 是什么?

暂略

3.list 如何实现的异步消息队列?

暂略

4.Redis 在单线程下实现高并发的?核心的机制是什么?

限制redis的瓶颈不是CPU,而是网络带宽和内存大小。

5.为什么 Redis 会这么快?

(1)纯内存操作,避免大量访问数据库,减少直接读取磁盘数据,redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度快;

(2)单线程操作,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;

(3)采用了非阻塞I/O多路复用机制。

(4)灵活的数据结构。

(5)持久化,AOF和RDB。

6.写JAVA后端,客户说系统慢,怎么排查 ?

从数据库角度:是否用了什么查询较慢,数据量巨大的语句。

从JVM角度:是否因为jvm的参数不合适,使得产生大量的GC。

7.面试时的算法题的结构都是没有定义好的需要自己定义与构建,如链表,树什么的。

在此就不举例了,希望自己和读者以后刷题的时候注意一下构建的部分。

8.TCP粘包是什么?

简单的来说就是没有控制好边界,导致两个包连在了一起。 

9.TCP服务端如何保证失序的包按序到达 ?

TCP为每个包分配了序列号。

10.索引为什么能加快查询效率 ?

索引就是通过事先排好序,从而在查找时可以应用二分查找等高效率的算法。
一般的顺序查找,复杂度为O(n),而二分查找复杂度为O(log2n)。当n很大时,二者的效率相差及其悬殊。

索引的缺点:索引是有大量数据的时候才建立的,没有大量数据反而会浪费时间

12.什么是CAS机制?

参考https://www.cnblogs.com/myopensource/p/8177074.html

13.java线程池?

简单来说就是存放线程的一个池子,用的时候就从里面拿,不用的时候就放回去。

好处:请求时,线程已经存在,减少了相应的时间。另外,适当调整线程数也可以防止出现资源不足的情况。

说明:

我们知道不用线程池的话,每个线程都要通过new Thread(xxRunnable).start()的方式来创建并运行一个线程,线程少的话这不会是问题,而真实环境可能会开启多个线程让系统和程序达到最佳效率,当线程数达到一定数量就会耗尽系统的CPU和内存资源,也会造成GC频繁收集和停顿,因为每次创建和销毁一个线程都是要消耗系统资源的,如果为每个任务都创建线程这无疑是一个很大的性能瓶颈。

14.linux的指令也要有所熟悉,比如只写一行指令找出所有python程序并Kill ?

ps命令查找进程PID再用kill命令终止进程的方法。

15.海量数据的排序?

这个地方我查了一些网上的解答,没有找到什么让我很满意的,但大都推荐快速排序和堆排序。

16.接口和抽象类有什么区别?

类型 abstract class Interface
定义 abstract class关键字 Interface关键字
继承 抽象类可以继承一个类和实现多个接口;子类只可以继承一个抽象类 接口只可以继承接口(一个或多个);子类可以实现多个接口
访问修饰符 抽象方法可以有publicprotecteddefault这些修饰符 接口方法默认修饰符是public。你不可以使用其它修饰符
方法实现 可定义构造方法,可以有抽象方法和具体方法 接口完全是抽象的,没构造方法,且方法都是抽象的,不存在方法的实现
实现方式 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
作用 了把相同的东西提取出来,即重用 为了把程序模块进行固化的契约,是为了降低偶合
发布了481 篇原创文章 · 获赞 502 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/qq_41901915/article/details/104433415