发表于: 2025-05-23 20:30:14

0 59


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)

web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?

Servlet 配置:通过<servlet>和<servlet-mapping>标签定义Servlet以及其对应的URL模式,决定哪个Servlet处理特定的请求。

Filter 配置:使用<filter>和<filter-mapping>来设置过滤器,可以对请求或响应进行预处理或后处理。

Listener 配置:通过<listener>标签注册监听器,用于监听Web应用中ServletContext、HttpSession和ServletRequest等对象的生命周期事件。

上下文参数(Context Parameters):利用<context-param>为整个Web应用程序定义初始化参数,可通过ServletContext访问这些参数值。

加载Spring配置:通过指定<context-param>中的contextConfigLocation参数来确定Spring配置文件的位置,并使用ContextLoaderListener作为监听器自动加载Spring的应用上下文。

Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?

Spring MVC和Struts都是用于构建Java Web应用的MVC框架,但Spring MVC凭借其基于Spring生态系统的优势,提供了更高的灵活性和更简洁的配置方式(支持注解和Java配置),易于与其他技术和框架集成。相比之下,Struts虽然也有良好的扩展性,但其配置较为依赖XML,架构相对固定。此外,Spring MVC拥有活跃的社区支持和持续更新,确保了技术的先进性和稳定性。因此,更倾向于选择Spring MVC,主要是因为它能够提供更强的灵活性、更好的维护性以及与现代开发实践更好的兼容性。

什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些? 

Web Service 是一种基于标准协议(如 HTTP、SOAP、WSDL)实现的跨平台、跨语言的服务调用技术,广泛用于企业级系统间的通信。常见的实现框架包括 Apache CXF、Axis2、Spring Web Services 和 Jersey 等。由于 SOAP 协议结构复杂、性能开销大、开发维护成本高,Web Service 常被认为“太重”,不适合轻量级或敏捷开发场景。然而,它在安全性、事务支持和标准化方面具有优势,因此银行、大型国企等对系统稳定性与互操作性要求较高的行业仍在广泛使用。随着 RESTful API 的兴起,越来越多企业开始转向更简洁高效的轻量级接口方案。

什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?

TCP/IP协议是互联网通信的核心标准,其中TCP(传输控制协议)通过三次握手确保可靠连接:

第一次握手(SYN):客户端发送连接请求;

第二次握手(SYN+ACK):服务器确认请求并回应;

第三次握手(ACK):客户端确认响应,建立双向通信。

必须三次握手的原因:

两次握手无法防止历史重复连接(导致资源浪费),且服务器无法确认客户端的接收能力;

四次握手冗余,第三次握手已确保双向通信可靠。

三次握手完美平衡了效率与安全性,是TCP可靠传输的基础。

什么是http协议?get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?

HTTP协议是用于传输超文本的应用层协议,基于请求-响应模型,具有无状态、明文传输(HTTPS加密)的特点。GET和POST是两种主要请求方法:GET通过URL传参,适合数据查询(可缓存,长度受限);POST通过请求体传参,适合数据提交(更安全,无长度限制)。Content-Type定义了数据格式,常见类型包括application/json(API交互)、application/x-www-form-urlencoded(表单提交)和multipart/form-data(文件上传)。HTTP适用于Web页面加载、API通信等场景,但不适合实时性要求高的应用。HTTP状态码分为五类:1xx(信息)、2xx(成功,如200)、3xx(重定向,如301)、4xx(客户端错误,如404)、5xx(服务器错误,如500),用于快速定位请求问题。现代扩展包括HTTPS(加密)和HTTP/2(性能优化)。

了解maven的module。

 什么是Maven Module?

Maven Module是Maven项目的子模块,通过父子工程(多模块项目)将一个大型项目拆分为多个独立但关联的子项目。每个Module是一个独立的Maven项目,拥有自己的pom.xml,但继承父工程的配置。

2. 为什么使用Module?

代码解耦:将不同功能拆分为独立模块(如web、service、dao),便于维护。

依赖管理:统一管理公共依赖(如Spring、JDBC),避免重复。

独立构建:可单独编译、测试、打包特定模块,提升效率。

复用性:通用模块(如工具类)可被其他项目引用。

3. Module的核心配置

父工程pom.xml

<project>

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>

    <artifactId>parent-project</artifactId>

    <version>1.0.0</version>

    <packaging>pom</packaging> <!-- 父工程必须为pom类型 -->

    

    <!-- 声明子模块 -->

    <modules>

        <module>web</module>

        <module>service</module>

        <module>dao</module>

    </modules>

    

    <!-- 统一管理依赖版本 -->

    <dependencyManagement>

        <dependencies>

            <dependency>

                <groupId>org.springframework</groupId>

                <artifactId>spring-core</artifactId>

                <version>5.3.8</version>

            </dependency>

        </dependencies>

    </dependencyManagement>

</project>

子模块pom.xml

<project>

    <parent>

        <groupId>com.example</groupId>

        <artifactId>parent-project</artifactId>

        <version>1.0.0</version>

    </parent>

    

    <artifactId>web</artifactId> <!-- 子模块无需groupId和version -->

    <packaging>jar</packaging> <!-- 子模块可为jar/war -->

    

    <!-- 引入依赖(版本由父工程管理) -->

    <dependencies>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-core</artifactId>

        </dependency>

    </dependencies>

</project>

为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?

为什么使用REST风格?

REST(Representational State Transfer)是一种基于HTTP协议的架构风格,核心优势包括:

标准化

统一使用HTTP方法(GET/POST/PUT/DELETE)对应CRUD操作,降低学习成本。

例如:GET /users(查询用户) vs POST /users(创建用户)。

无状态性

每个请求包含所有必要信息,不依赖服务器会话(适合分布式系统)。

资源导向

将数据抽象为资源(URI表示),如/orders/1代表ID为1的订单。

可缓存性

利用HTTP缓存机制(如Cache-Control)提升性能。

前后端分离友好

返回JSON/XML数据,与前端框架(React/Vue)无缝对接。

二、不用REST的接口定义方式

1. 传统RPC风格(如SOAP/XML-RPC)

特点:

基于动作(动词)命名接口,如getUser()、createOrder()。

通常使用单一HTTP方法(如POST),通过请求体区分操作。

生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?

总结为一段话

生成JSON的常见方式包括手动拼接(不推荐)、Java原生库(如org.json)、Gson、Jackson、Fastjson和JsonTaglib。手动拼接易出错且不安全;Gson简单易用但功能较基础;Jackson性能强且与Spring深度集成,适合复杂场景;Fastjson性能最优但安全性存疑;JsonTaglib则专为JSP设计,能自动转义字符防止XSS攻击,适合传统MVC项目。推荐优先使用Jackson(REST API)或JsonTaglib(JSP页面),避免手动拼接。选择时需权衡性能、安全性和开发效率,例如高安全需求选JsonTaglib,高性能场景选Jackson,而Fastjson仅建议用于内部系统。

一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?

一份完整的接口文档应清晰、结构化,涵盖以下核心部分:

基础信息

接口名称:简明描述功能(如“用户登录”)。

请求地址:完整的URL(如/api/v1/login)。

请求方法:GET/POST/PUT/DELETE等。

Content-Type:请求/响应的数据格式(如application/json)。

请求参数

Query参数:URL中的参数(如?page=1)。

Body参数:JSON/XML格式的字段说明(含类型、是否必填、示例)。

Header参数:如Authorization: Bearer token。

响应示例

成功响应:HTTP状态码(如200)、数据结构及示例。

错误响应:不同错误码(如400、500)及错误信息。

鉴权方式:描述认证机制(如JWT、OAuth2.0),以及如何传递Token。

版本控制:API版本号(如/v1/),兼容性说明。

调用限制:频率限制(如100次/分钟)、IP白名单等。

示例代码:提供CURL、Postman或各语言(Python/Java)的调用示例。

变更记录:版本更新日志(如新增字段、废弃旧接口)。

衡量API设计好坏的准则,优秀API的特征

一致性

命名规范统一(如资源用名词复数/users,动作用HTTP方法)。

响应结构一致(如所有接口返回{code, data, message})。

可读性:接口自描述(如GET /users/{id}比GET /getUser更清晰)。文档完整,无需额外解释即可调用。

幂等性:相同请求多次执行结果一致(如PUT/DELETE)。

安全性:敏感数据加密(HTTPS)、防SQL注入/XSS。

扩展性:通过版本号(/v1/)支持迭代,兼容旧版。

Http的Header里面包含哪些字段,每个字段都有哪些含义?

通用字段:控制连接、缓存、时间等基础行为。

请求头:客户端声明能力(如支持的格式、认证信息)。

响应头:服务器返回元数据(如数据类型、Cookie)。

安全字段:保护应用免受攻击(如 HSTS、XSS 防护)。

明天计划的事情:(一定要写非常细致的内容)

遇到的问题:(遇到什么困难,怎么解决的)

收获:(通过今天的学习,学到了什么知识)



返回列表 返回列表
评论

    分享到