当前位置: 首页 > news >正文

Java面试黄金宝典37

1. 转发与重定向的区别

 

  • 定义
  1. 转发:服务器内部的一种请求处理方式,当客户端向服务器发送请求后,服务器将该请求转发到另一个资源(如 JSP、Servlet)进行处理,整个过程在服务器端完成,客户端并不知道请求被转发,且使用的是同一个请求对象和响应对象。
  2. 重定向:服务器向客户端发送一个状态码(通常为 302)和一个新的 URL,客户端接收到后会重新向新的 URL 发送请求,这是两个独立的请求。
  • 要点
  1. 地址栏变化:转发时地址栏不会改变,重定向会改变。
  2. 数据共享:转发可共享请求中的数据,重定向无法直接共享,若要共享需借助 session 等。
  3. 性能:转发性能较好,是服务器内部操作;重定向涉及客户端和服务器多次交互。
  • 应用
  1. 转发:常用于 MVC 架构中,控制器将请求转发给视图进行渲染。例如在 Spring MVC 里,控制器接收请求后,将其转发到 JSP 页面。
  2. 重定向:可避免表单重复提交问题,如用户注册成功后重定向到登录页面。

Java 代码示例

java

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

// 转发示例
@WebServlet("/forwardExample")
public class ForwardExampleServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        RequestDispatcher dispatcher = req.getRequestDispatcher("/target.jsp");
        dispatcher.forward(req, resp);
    }
}

// 重定向示例
@WebServlet("/redirectExample")
public class RedirectExampleServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.sendRedirect("/target.jsp");
    }
}

 

2. TCP 与 UDP 区别

 

  • 定义
  1. TCP:面向连接的传输协议,在传输数据前需建立连接,传输完成后断开连接。通过三次握手建立连接,四次挥手断开连接,保证数据可靠传输。
  2. UDP:无连接的传输协议,无需建立连接,直接发送数据,不保证数据可靠传输和顺序。
  • 要点
  1. 可靠性:TCP 可靠,UDP 不可靠。
  2. 连接性:TCP 面向连接,UDP 无连接。
  3. 效率:UDP 效率高,无需建立和断开连接;TCP 效率相对较低。
  4. 应用场景:TCP 适用于对数据准确性要求高的场景,UDP 适用于对实时性要求高的场景。
  • 应用
  1. TCP:常用于文件传输、网页浏览、数据库连接等场景。例如 Java 应用程序通过 JDBC 连接数据库时使用 TCP 协议。
  2. UDP:适用于视频直播、游戏、物联网设备通信等对实时性要求高的场景。

Java 代码示例

java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

// TCP 服务器示例
class TCPServer {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(8888)) {
            System.out.println("TCP Server is listening on port 8888");
            Socket socket = serverSocket.accept();
            InputStream inputStream = socket.getInputStream();
            byte[] buffer = new byte[1024];
            int bytesRead = inputStream.read(buffer);
            String message = new String(buffer, 0, bytesRead);
            System.out.println("Received: " + message);
            OutputStream outputStream = socket.getOutputStream();
            String response = "Message received";
            outputStream.write(response.getBytes());
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// TCP 客户端示例
class TCPClient {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 8888)) {
            OutputStream outputStream = socket.getOutputStream();
            String message = "Hello, Server!";
            outputStream.write(message.getBytes());
            InputStream inputStream = socket.getInputStream();
            byte[] buffer = new byte[1024];
            int bytesRead = inputStream.read(buffer);
            String response = new String(buffer, 0, bytesRead);
            System.out.println("Received from

相关文章:

  • Spring 中的事务
  • 设计模式简述(六)代理模式
  • APS相关知识
  • 鸿蒙版(ArkTs) 贪吃蛇,包含无敌模式 最高分 暂停和继续功能
  • 语法: result=labs( value);
  • 每日习题:20250407
  • NO.69十六届蓝桥杯备战|基础算法-递归初阶|汉诺塔问题|占卜DIY|FBI树(C++)
  • jsoncpp的使用
  • deepseek生成PPT 提示词模板
  • Redis 线程模型:单线程也能快如闪电?
  • Graph Attetion Networks
  • AF3 OpenFoldDataLoader类_add_batch_properties方法解读
  • QEMU源码全解析 —— 块设备虚拟化(16)
  • 语法: ptr=malloc(size)
  • Python爬虫教程009:requests的基本使用以及get和post请求的使用
  • 电脑显示器选购
  • CentOS 7服务器上快速安装mamba函数库
  • Java八股文-List
  • HCIP【路由过滤技术(详解)】
  • 告别BeanUtils!MapStruct Plus快速入门与最佳实践
  • 药理学网站建设方案/十大基本营销方式
  • 深圳网站建设sumaart/长沙正规seo优化价格
  • 网站开发与设计 信科/优化网站关键词排名软件
  • 所得税 网站建设费/建立网站的软件
  • 新疆兵团建设局的网站/网站运营优化培训
  • 女和男做搞基视频网站/seo关键词布局案例