2022年Java大厂面试必备100题.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年Java大厂面试必备100题.docx》由会员分享,可在线阅读,更多相关《2022年Java大厂面试必备100题.docx(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2022年Java大厂面试必备100题(一)一、基础篇1、讲讲什么是泛型?【仅供参考】Java泛型是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类 型参数。声明的类型参数在使用时用具体的类型来替换。泛型最大的好处是可以提高代码的复用性。以List接口为例,我们可以将 String、Integer等类型放入List中,如不用泛型,存放String类型要写 一个List接口,存放Integer要写另外一个List接口,泛型可以很好的解 决这个问题。2、String s = new String(xyz”)创建了几个字符串对象?【仅供参考】一个或两个。如果字符串常量池已经有“xyz”,
2、则是一个;否则,两个。 当字符创常量池没有“xyz”,此时会创建如下两个对象:一个是字符串字面量xyz所对应的、驻留(intern)在一个全局共享的字符 串常量池中的实例,此时该实例也是在堆中,字符串常量池只放引用。另一个是通过new String()创建并初始化的,内容与xyz”相同的实例,也是 在堆中。3、Java的特点?【仅供参考】Java具有平台独立性和移植性。Java有一句口号:Write once, run anywhere, 一次编写、到处运行。这也是 Java的魅力所在。而实现这种特性的正是Java虚拟机JVM。已编译的Java程 序可以在任何带有JVM的平台上运行。你可以在w
3、indows平台编写代码,然后 拿到linux上运行。只要你在编写完代码后,将代码编译成.class文件,再把 class文件打成Java包,这个jar包就可以在不同的平台上运行了。Java具有稳健性。Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。 Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证 编译程序能捕捉调用错误,这就导致更可靠的程序。1、我们知道了,无论我们如何设置初始容量,HashMap都会将我们改成2的 幕次方,也就是说,HashMap的容量百分之百是2的幕次方,因为HashMap太 依赖他了。2、HashMap的默认加载因子是0
4、.75,虽然可以修改,但是出于安全考虑,除 非你经过大量测试,请不要修改此值,HashMap使用此值基本是平衡了性能和 空间的取舍。3、HashMap扩容的时机是,Node数组中的元素数量 负载因子*容量,如 果负载因子是0.75,容量是16,那么当容器中数量达到13的时候就会扩容。 还有,如果某个链表长度达到了 8,并且容量小于64,则会用扩容代替红黑 树。4、HashMap扩容的时候,不管是链表还是红黑树,都会对这些数据进行重新 的散列计算,然后缩短他们的长度,优化性能。在进行散列计算的时候,会进一步优化性能,减少减一的操作,直接使用&运 算。可谓神来之笔。5、迭代器Iterator是什么
5、?【仅供参考】Iterator接口提供遍历任何Collection的接口。我们可以从一个 Collection中使用迭代器方法来获取迭代器实例。迭代器取代了 Java集合框 架中的Enumeration,迭代器允许调用者在迭代过程中移除元素。6、说一下runnable和callable有什么区别?【仅供参考】runnable没有返回值,callable可以拿到有返回值,callable可以看作是 runnable的补充。7、synchronized 的作用?【仅供参考】在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环 境下,控制synchronized代码段不
6、被多个线程同时执行。synchronized既可 以加在一段代码上,也可以加在方法上。8、CyclicBarrier 和 CountDownLatch 的区别【仅供参考】(1) CountDownLatch简单的说就是一个线程等待,直到他所等待的其他线程 都执行完成并且调用countDown。方法发出通知后,当前线程才可以继续执 行。(2) cyclicBarrier是所有线程都进行等待,直到所有线程都准备好进入 await ()方法之后,所有线程同时开始执行!(3) CountDownLatch的计数器只能使用一次。而CyclicBarrier的计数器 可以使用reset()方法重置。所以C
7、yclicBarrier能处理更为复杂的业务场 景,比如如果计算发生错误,可以重置计数器,并让线程们重新执行一次。(4 ) CyclicBarrier还提供其他有用的方法,比如getNumberWaiting方 法可以获得CyclicBarrier阻塞的线程数量。isBroken方法用来知道阻塞的 线程是否被中断。如果被中断返回true,否则返回falseo9、线程池都有哪些状态?【仅供参考】RUNNING:这是最正常的状态,接受新的任务,处理等待队列中的任务。 SHUTDOWN:不接受新的任务提交,但是会继续处理等待队列中的任务。 STOP:不接受新的任务提交,不再处理等待队列中的任务,中断
8、正在执行任务 的线程。TIDYING:所有的任务都销毁了,workCount为0,线程池的状态在转换为 TIDYING状态时,会执行钩子方法terminated。TERMINATED; terminated。方法结束后,线程池的状态就会变成这个。10、多线程的价值?【仅供参考】(1)发挥多核CPU的优势多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的,采 用多线程的方式去同时完成几件事情而不互相干扰。(2)防止阻塞从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会 因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效 率。但是单核CPU我们
9、还是要应用多线程,就是为了防止阻塞。试想,如果单 核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧, 对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前 就停止运行了。多线程可以防止这个问题,多条线程同时运行,哪怕一条线程 的代码执行读取数据阻塞,也不会影响其它任务的执行。(3)便于建模这是另外一个没有这么明显的优点了。假设有一个大的任务A,单线程编程, 那么就要考虑很多,建立整个程序模型比较麻烦。但是如果把这个大的任务A 分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多 线程分别运行这几个任务,那就简单很多了。11、Java反射机制的
10、作用有什么?【仅供参考】作用有在运行时判断任意一个对象所属的类;(2)在运行时构造任意一个类 的对象;(3)在运行时判断任意一个类所具有的成员变量和方法;(4)在运行时 调用任意一个对象的方法。12、反射机制的优缺点:【仅供参考】优点能够运行时动态获取类的实例,提高灵活性;(2)与动态编译结合 Class. forName ( com. mysql. jdbc. Driver, class); 加载 MySQL 的驱动类 缺点:使用反射性能较低,需要解析字节码,将内存中的对象进行解析。 其解决方案是:通过setAccessible(true)关闭JDK的安全检查来提升反射速 度;多次创建一个类
11、的实例时,有缓存会快很多;ReflflectASM工具类,通过 字节码生成的方式加快反射速度。13、反射的缺点?【仅供参考】1、性能问题。Java反射机制中包含了一些动态类型,所以Java虚拟机不能够对这些动态代 码进行优化。因此,反射操作的效率要比正常操作效率低很多。我们应该避免 在对性能要求很高的程序或经常被执行的代码中使用反射。而且,如何使用反 射决定了性能的高低。如果它作为程序中较少运行的部分,性能将不会成为一 个问题。2、安全限制。使用反射通常需要程序的运行没有安全方面的限制。如果一个程序对安全性提 出要求,则最好不要使用反射。3、程序健壮性。反射允许代码执行一些通常不被允许的操作,
12、所以使用反射有可能会导致意想 不到的后果。反射代码破坏了 Java程序结构的抽象性,所以当程序运行的平台 发生变化的时候,由于抽象的逻辑结构不能被识别,代码产生的效果与之前会 产生差异。14、反射的实现方式都有什么?【仅供参考】获取Class对象,有4种方法:(1)Class. forName(“类的路径”);类 名.class; (3)对象名.getClass() ; (4)基本类型的包装类,可以调用包装类的 Type属性来获得该包装类的Class对象。15、java中,抽象类与接口之间有什么区别?【仅供参考】.一个类可以实现多个接口,但却只能继承最多一个抽象类。2 .抽象类可以包含具体的方
13、法,接口的所有方法都是抽象的。3 .抽象类可以声明和使用字段,接口则不能,但接口可以创建静态的 final常量。4 .接口的方法都是public的,抽象类的方法可以是public, protected, private或者默认的package;5 .抽象类可以定义构造函数,接口却不能。16、什么是设计模式?你是否在你的代码里面使用过任何设计模式?【仅供参考】设计模式是世界上各种各样程序员用来解决特定设计问题的尝试和测试的方 法。设计模式是代码可用性的延伸 17、什么是代理模式?【仅供参考】代理模式是给某一个对象提供一个代理,并由代理对象控制对原对象的引用。 优点:代理模式能够协调调用者和被调用
14、者,在一定程度上降低了系统的耦合度; 可以灵活地隐藏被代理对象的部分功能和服务,也增加额外的功能和服务。 缺点:由于使用了代理模式,因此程序的性能没有直接调用性能高;使用代理模式提高了代码的复杂度。举一个生活中的例子:比如买飞机票,由于离飞机场太远,直接去飞机场买票 不太现实,这个时候我们就可以上携程App上购买飞机票,这个时候携程App 就相当于是飞机票的代理商。18、什么是简单工厂模式?【仅供参考】答:简单工厂模式又叫静态工厂方法模式,就是建立一个工厂类,对实现了同 一接口的一些类进行实例的创建。比如,一台咖啡机就可以理解为一个工厂模 式,你只需要按下想喝的咖啡品类的按钮(摩卡或拿铁),它
15、就会给你生产一杯 相应的咖啡,你不需要管它内部的具体实现,只要告诉它你的需求即可。优点:工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例, 客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模 式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象; 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的 参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆 量;通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具 体产品类,在一定程度上提高了系统的灵活性。缺点:不易拓展,一旦添加新的产品类型,就不得不修
16、改工厂的创建逻辑;产品类型较多时,工厂的创建逻辑可能过于复杂,一旦出错可能造成所有产品 的创建失败,不利于系统的维护。19、说一下JVM运行时数据区?【仅供参考】不同虚拟机的运行时数据区可能略微有所不同,但都会遵从Java虚拟机规 范,Java虚拟机规范规定的区域分为以下5个部分:程序计数器(Program Counter Register):当前线程所执行的字节码的行号指 示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执 行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能,都需 要依赖这个计数器来完成;Java虚拟机栈(Java Virtual Machine
17、 Stacks):用于存储局部变量表、操作 数栈、动态链接、方法出口等信息;本地方法栈(Native Method Stack):与虚拟机栈的作用是一样的,只不过虚 拟机栈是服务Java方法的,而本地方法栈是为虚拟机调用Native方法服务 的;Java堆(Java Heap): Java虚拟机中内存最大的一块,是被所有线程共享 的,几乎所有的对象实例都在这里分配内存;方法区(Methed Area):用于存储已被虚拟机加载的类信息、常量、静态变 量、即时编译后的代码等数据。20、Java中都有哪些引用类型?【仅供参考】强引用:发生gc的时候不会被回收。软引用:有用但不是必须的对象,在发生内存
18、溢出之前会被回收。弱引用:有用但不是必须的对象,在下一次GC时会被回收。虚引用(幽灵引用/幻影引用):无法通过虚引用获得对象,用 PhantomReference实现虚引用,虚引用的用途是在gc时返回一个通知。三、Web篇1、TCP和UDP的区别【仅供参考】1、TCP :面向连接,UDP :面向无连接2、TCP :传输效率低,UDP :传输效率高(有大小限制,一次限定在64kb之 内)3、TCP:可靠,UDP :不可靠2、0SI的七层模型都有哪些?【仅供参考】物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。 数据链路层:负责建立和管理节点间的链路。网络层:通过路由选择算法,
19、为报文或分组通过通信子网选择最适当的路径。 传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。 会话层:向两个实体的表示层提供建立和使用连接的方法。表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。3、说一下tcp粘包是怎么产生的?【仅供参考】tcp粘包可能发生在发送端或者接收端,分别来看两端各种产生粘包的原因: 发送端粘包:发送端需要等缓冲区满才发送出去,造成粘包;接收方粘包:接收方不及时接收缓冲区的包,造成多个包接收。4、解释一下什么是aop?【仅供参考】aop是面向切面编程,通过预编译方式和
20、运行期动态代理实现程序功能的统一 维护的一种技术。简单来说就是统一处理某一 “切面”(类)的问题的编程思想,比如统一处理 日志、异常等。5、Autowired的作用是什么?【仅供参考】Autowired它可以对类成员变量、方法及构造函数进行标注,完成自动装配的 工作,通过Autowired的使用来消除set/get方法。6、RequestMapping的作用是什么?【仅供参考】将http请求映射到相应的类/方法上。7、为什么我们需要 spring-boot-maven-p 1 ugin?【仅供参考】spring-boot-maven-plugin提供了一些像jar 一样打包或者运行应用程序的
21、命令。1、spring-boot:run 运行你的 SpringBooty 应用程序。2、spring-boot: repackage重新打包你的jar包或者是war包使其可执 行3、spring-boot: start 和 spring-boot: stop 管理 Spring Boot 应用程 序的生命周期(也可以说是为了集成测试)。4、spring-boot:build-info生成执行器可以使用的构造信息。8、常用注【仅供参考】这个注解是方法级别上的注解,主要添加在Configuration或SpringBootConfiguration注解的类,有时也可以添加在Component注解
22、的 类。它的作用是定义一个Bean。9、spring boot核心配置文件是什么?【仅供参考】spring boot核心的两个配置文件: bootstrap (. yml 或者 .properties) : boostrap 由父 ApplicationContext 加载的,比applicaton优先加载,且boostrap里面的属性不能被覆盖; application (. yml 或者. properties):用于 spring boot 项目的自动化 配置。10、什么是 Spring Data?【仅供参考】Spring Data的使命是在保证底层数据存储特殊性的前提下,为数据访问提供
23、 一个熟悉的,一致性的,基于Spring的编程模型。这使得使用数据访问技 术,关系数据库和非关系数据库,map-reduce框架以及基于云的数据服务变得 很容易。为了让它更简单一些,Spring Data提供了不受底层数据源限制的 Abstractions 接口。11、spring cloud的核心组件有哪些?【仅供参考】Eureka:服务注册于发现。Feign:基于动态代理机制,根据注解和选择的机器,拼接请求url地址,发 起请求。Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔 离,避免了服务雪崩的问题
24、。Zuul:网关管理,由Zuul网关转发请求给对应的服务。12、什么是 spring cloud?【仅供参考】spring cloud是一系列框架的有序集合。它利用spring boot的开发便利性 巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息 总线、负载均衡、断路器、数据监控等,都可以用spring boot的开发风格做 到一键启动和部署。13、如何重新加载Spring Boot上的更改,而无需重新启动服务器?【仅供参考】这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入 式tomcat将重新启动。Spring Boot有一个开发工具(DevToo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 Java 面试 必备 100
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内