2024最新!!Java后端面试题(4)看这一篇就够了!!!!

七、异常

  1. throw 和 throws 的区别?
  • throw用来显式地抛出一个异常,而throws则用于在方法声明中指明该方法可能抛出的异常。简单来说,throw是抛出异常的实际动作,throws是告知调用者这个方法可能会抛出哪些异常的声明。
  1. final、finally、finalize 有什么区别?
  • final是一个修饰符,用来表示不可改变的,比如常量、无法被继承的类、不可重写的方法。
  • finally是用于捕获异常时,保证一定会执行的代码块,即使捕获的异常没有处理。
  • finalize是一个方法,它会在垃圾回收器确定没有引用指向对象后,自动调用,用于清理资源。
  1. try-catch-finally 中哪个部分可以省略?
  • 你可以省略catch部分,仅保留tryfinally。在这种情况下,即使没有捕捉到异常,finally块中的代码依然会执行。
  1. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
  • 是的,不管catch中有没有return语句,finally块中的代码都一定会执行。即使在catch中抛出异常或者returnfinally块都会执行。
  1. 常见的异常类有哪些?
  • 常见异常类包括:
    • NullPointerException:空指针异常。
    • ArrayIndexOutOfBoundsException:数组越界异常。
    • ClassCastException:类型转换异常。
    • IOException:输入输出异常。
    • SQLException:数据库访问异常。
    • IllegalArgumentException:非法参数异常。

八、网络

  1. http 响应码 301 和 302 代表的是什么?有什么区别?
  • 301表示永久重定向,告诉客户端所请求的资源已被永久移动到新 URL。302表示临时重定向,资源临时在新位置,客户端仍应使用原有 URL。因此,301在SEO上更有利,因为它告知搜索引擎新地址是永久的。
  1. forward 和 redirect 的区别?
  • forward是服务器内部的转发,客户端只会看到一个请求,URL不变;而redirect是客户端收到回应后会发送一个新的请求,URL会变化。这意味着forward无法携带参数,而redirect可以。
  1. 简述 tcp 和 udp的区别?
  • TCP是面向连接的协议,保证数据包的顺序和完整性,适合需要可靠性的应用,比如HTTP。而UDP是无连接的,不保证发送顺序,适合对速度敏感但不需要可靠性的应用,比如视频直播。
  1. tcp 为什么要三次握手,两次不行吗?为什么?
  • 三次握手用来确保双方都能发送和接收信息,第一次握手是客户端发起连接请求,第二次是服务端确认连接,第三次是客户端确认收到。两次握手无法确保连接的可靠性,可能导致数据丢失或连接成立失败。
  1. 说一下 tcp 粘包是怎么产生的?
  • 粘包是指多个TCP数据包被合并成一个包发送,或者一个数据包被分成多个小包发送。产生的原因主要是因为TCP是面向流的协议,数据的边界不是固定的,当发送方进行快速发送时,接收方可能接收到粘在一起的数据。
  1. OSI 的七层模型都有哪些?
  • 七层模型包括:
    • 物理层:传输位流(电缆、光缆等)。
    • 数据链路层:点对点之间的传输(如MAC地址)。
    • 网络层:路由选择与转发(如IP协议)。
    • 传输层:确保数据完整性(如TCP、UDP)。
    • 会话层:管理会话的建立与管理。
    • 表示层:数据格式转换与加密。
    • 应用层:用户与应用的交互(如HTTP、FTP等)。
  1. get 和 post 请求有哪些区别?
  • GET请求在URL中传递数据,并且数据长度有限,适合获取资源。POST请求将数据放在请求体中,包含的数据量大且没有长度限制,适合创建或更新资源。此外,GET请求是幂等的,而POST可能会造成副作用。
  1. 如何实现跨域?
  • 跨域请求可以通过以下几种方式实现:
    • CORS(跨域资源共享)是最常见的方法,通过设置HTTP头来允许特定域的访问。
    • JSONP可以用于GET请求,通过脚本标签的方式来跨域。
    • 反向代理,即通过后端服务代理数据请求。
  1. 说一下 JSONP 实现原理?
  • JSONP(JSON with Padding)通过动态生成<script>标签,实现跨域请求。请求的响应是一个函数调用,将数据作为参数传递给该函数。由于浏览器支持跨域加载<script>标签,JSONP可以绕过同源策略。

九、设计模式

  1. 说一下你熟悉的设计模式?
  • 我比较熟悉的设计模式包括:
    • 单例模式:确保一个类只有一个实例,并提供全局访问。
    • 工厂模式:提供一个接口用于创建对象,但具体实现由子类决定。
    • 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象状态改变时,其它依赖对象会收到通知并自动更新。
    • 策略模式:定义一系列相似的算法,将它们封装起来并使它们可以相互替换。
  1. 简单工厂和抽象工厂有什么区别?
  • 简单工厂模式将对象的创建和使用分离,客户端通过工厂类来获取对象,而抽象工厂模式则提供一个接口来创建一系列相关或相互依赖的对象。简单工厂通常是针对某一类产品,而抽象工厂则是工厂类和产品类的抽象,更加具有灵活性。

十、Spring/Spring MVC

  1. 为什么要使用 spring?
  • Spring框架提供了松耦合的架构,支持控制反转(IoC)和面向切面编程(AOP),使得代码更加模块化,易于测试和维护。另外,Spring具有丰富的生态系统,能够集成各种框架和技术。
  1. 解释一下什么是 aop?
  • AOP(面向切面编程)是一种编程范式,用于将横切关注点(如日志、事务管理、安全性)分离出业务逻辑代码,提高代码的可重用性与维护性。
  1. 解释一下什么是 ioc?
  • IoC(控制反转)是一种设计原则,它将对象的创建与对象的使用分离。在Spring中,通过IoC容器来管理对象的生命周期和依赖关系,让对象不再自己创建依赖。
  1. spring 有哪些主要模块?
  • Spring主要模块包括:
    • Spring Core:IoC和依赖注入。
    • AOP:面向切面编程。
    • Data Access/Integration:数据访问和集成模块。
    • Web:Web开发模块。
    • Spring MVC:基于请求响应的Web框架。
    • Spring Security:安全框架。
    • Spring Boot:快速构建Spring应用的工具。
  1. spring 常用的注入方式有哪些?
  • Spring有三种常用的注入方式:
    • 构造器注入:通过构造函数传递依赖。
    • setter方法注入:通过setter方法进行依赖注入。
    • 接口注入:通过实现特定接口的方式进行依赖注入。
  1. spring 中的 bean 是线程安全的吗?
  • Spring中的单例Bean是线程安全的,因为它们是单一实例在整个应用中共享的。但如果Bean的属性是可变的,你需要保证自身的线程安全。对于作用域为Prototype的Bean,则每次请求都会创建新实例,不存在线程安全问题。
  1. spring 支持几种 bean 的作用域?
  • Spring支持多种Bean作用域:
    • singleton:单例,默认作用域。
    • prototype:原型,每次请求都创建新的Bean。
    • request:Web环境下,每个HTTP请求都会生成一个Bean。
    • session:Web环境下,每个HTTP会话都会生成一个Bean。
    • globalSession:在Portlet环境下,每个全局会话生成一个Bean。
  1. spring 自动装配 bean 有哪些方式?
  • Spring自动装配有几种方式:
    • byType:根据类型进行自动装配。
    • byName:根据Bean名称进行装配。
    • constructor:通过构造方法进行装配。
    • @Autowired注解:用于标注要自动装配的字段、方法或构造函数。
  1. spring 事务实现方式有哪些?
  • Spring支持两种事务管理方式:
    • 声明式事务管理:通过XML配置或注解(如@Transactional)来管理事务。
    • 编程式事务管理:通过TransactionTemplate手动管理事务。
  1. 说一下 spring 的事务隔离?
  • Spring支持五种事务隔离级别:
    • DEFAULT:使用数据库默认隔离级别。
    • READ_UNCOMMITTED:允许读取未提交的数据。
    • READ_COMMITTED:只能读取已提交的数据。
    • REPEATABLE_READ:在同一事务中多次读取,相同数据一致性。
    • SERIALIZABLE:最高隔离级别,完全避免并发。
  1. 说一下 spring mvc 运行流程?
  • Spring MVC流程:
    1. 客户端发送请求。
    2. DispatcherServlet接收请求并根据URL找到对应的Controller。
    3. Controller处理请求并返回Model和View。
    4. ViewResolver根据逻辑视图名找到具体的视图。
    5. DispatcherServlet将Model传递给视图,生成最终的HTML响应返回给客户端。
  1. spring mvc 有哪些组件?
  • Spring MVC的主要组件包括:
    • DispatcherServlet:中央控制器,负责请求调度。
    • Controller:处理请求的业务逻辑。
    • ModelAndView:封装模型数据和视图信息。
    • ViewResolver:解析视图。
    • HandlerMapping:映射请求到具体的Controller。
  1. @RequestMapping 的作用是什么?
  • @RequestMapping用于将HTTP请求的URL映射到对应的Controller方法,从而定义该方法如何处理请求,包括请求方法、URL模式等。
  1. @Autowired 的作用是什么?
  • @Autowired注解用于自动装配Bean,可以标注在字段、构造方法或setter方法上,Spring会根据类型或名称自动匹配并注入依赖对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值