26届JAVA 学习日记——Day14

2024.11.21周四

今天仍然在补充基础知识,项目进度较慢,明天再回顾一下Java8的新特性。

八股

操作系统

什么是缓冲区溢出?

缓冲区溢出是一种常见的计算机安全漏洞,它发生在程序试图将过多的数据写入缓冲区(即一块用于临时存储数据的内存区域)时。缓冲区有固定的大小,如果写操作超出其边界,就会覆盖邻近内存区域的数据,这可能导致不可预测的行为,包括程序崩溃或更严重的安全漏洞。

计算机网络

计算机网络各层有哪些协议?

OSI七层模型:

国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Model),也就是 OSI 网络模型,该模型主要有 7 层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。

  • 应用层,负责给应用程序提供统一的接口;(浏览器、电子邮箱客户端)
  • 表示层,负责将数据转换称兼容另一个系统能识别的格式;
  • 会话层,负责建立、管理和终止表示层实体之间的通信会话;
  • 传输层,负责端到端的数据传输;(TCP、UDP)
  • 网络层,负责数据的路由、转发、分片;(IP、路由器、三层交换机)
  • 数据链路层,负责数据的封帧和差错检测,以及MAC寻址;(网络交换机)
  • 物理层,负责在物理网络中传输数据帧;(电缆、光纤、无线电频率)

TCP/IP模型

事实上,我们比较常见,也比较实用的是四层模型,即TCP/IP 网络模型,Linux 系统正是按照这套网络模型来实现网络协议栈的。

TCP/IP协议被组织成四个概念层,其中有三层对应于ISO参考模型中的相应层。TCP/IP协议簇并不包含物理层和数据链路层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议协同工作。

TCP/IP 网络通常是由上到下分成 4 层,分别是应用层,传输层,网络层和网络接口层

  • 应用层,支持HTTP、SMTP等最终用户进程
  • 传输层,处理主机到主机的通信(TCP、UDP)
  • 网络层,寻址和路由数据包(IP)
  • 网络接口层,通过网络的物理电线、电缆或无线信道移动比特
TCP和UDP协议的区别?
  • 连接:TCP是面向连接的传输层协议,传输数据前要先建立连接;UDP是不需要连接,即刻传输数据。
  • 服务对象:TCP是一对一的两点服务,即一条连接只有两个端点;UDP支持一对一、一对多、多对多的交互通信。
  • 可靠性:TCP是可靠交付数据的,数据可以无差错、不丢失、不重复,按序到达;UDP是尽最大努力交付,不保证可靠交付数据。但是我们可以基于UDP传输协议实现一个可靠的传输协议,比如QUIC协议。
  • 拥塞控制、流量控制:TCP有拥塞控制和流量控制机制,保证数据传输的安全性;UDP则没有,即使网络非常拥堵,也不会影响UDP的发送速率。
  • 首部开销:TCP首部长度较长,会有一定的开销,首部在没有使用「选项」字段是 20 个字节,如果使用「选项」字段则会变长。UDP首部只有8个字节,并且是固定不变的,开销较小。
  • 传输方式:TCP是流式传输,没有边界,但保证顺序和可靠;UDP是一个包一个包的发送,是有边界的,但可能会丢包和乱序。
TCP为什么需要三次握手和四次挥手?

TCP为什么需要三次握手建立连接

  • 三次握手才能 阻止重复历史连接的初始化(主要原因)
  • 三次握手才能 同步双方的初始序列号
  • 三次握手才能 避免资源浪费

为什么 TCP 需要四次挥手关闭连接:

服务器收到客户端的 FIN 报文时,内核会马上回一个 ACK 应答报文,但是服务端应用程序可能还有数据要发送,所以并不能马上发送 FIN报文,而是将发送 FIN 报文的控制权交给服务端应用程序。

HTTP和HTTPS协议的区别?
  • HTTP是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS则解决HTTP不安全的缺陷,在TCP和HTTP网络层之间加入SSL/TLS安全协议,使得报文能够加密传输。
  • HTTP连接建立相对简单,TCP三次握手之后便可进行HTTP的报文传输。而HTTPS在TCP三次握手之后,还需进行SSL/TLS的握手过程,才可进入加密报文传输。
  • 两者的默认端口不一样,HTTP默认端口是80,HTTPS默认端口号是443。
  • HTTPS协议需要向CA(证书权威机构)申请数字整数,来保证服务器的身份是可信的。

算法

今日暂无该内容学习。

项目

苍穹外卖

项目过程中解决的一些问题:
BeanUtils.copyProperties()
BeanUtil是Spring框架中的实体相关工具类,其包位置是package org.springframework.beans,在开发过程中发现OrdersVO需要承载的许多成员变量都来自Orders,当时我以为这个方法只能将同名的方法传递到该类中,因此花了很多时间去和接口文档中的参数对比找新的实体类。

但是实际上该方法具有以下特性:

  • 如果OrderVO继承自 Orders,则 BeanUtils.copyProperties 也会复制父类 Orders 的属性。
  • 有一个ignore的参数,能选择性将某些变量的复制取消(如主键id)。

接口文档参数:

OrderVO:

java 复制代码
package com.sky.vo;

import com.sky.entity.OrderDetail;
import com.sky.entity.Orders;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class OrderVO extends Orders implements Serializable {

    //订单菜品信息
    private String orderDishes;

    //订单详情
    private List<OrderDetail> orderDetailList;

}
相关推荐
Narutolxy1 分钟前
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
开发语言·golang·gin
Hello.Reader9 分钟前
全面解析 Golang Gin 框架
开发语言·golang·gin
禁默19 分钟前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Cachel wood26 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Code哈哈笑29 分钟前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
gb421528732 分钟前
springboot中Jackson库和jsonpath库的区别和联系。
java·spring boot·后端
程序猿进阶32 分钟前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
qq_4336184434 分钟前
shell 编程(二)
开发语言·bash·shell
zfoo-framework40 分钟前
【jenkins插件】
java