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;

}
相关推荐
80530单词突击赢几秒前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端
3GPP仿真实验室15 分钟前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
devmoon19 分钟前
在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
开发语言·安全·区块链·polkadot·erc-20·测试网·独立链
lili-felicity19 分钟前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
爬山算法20 分钟前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
沐知全栈开发20 分钟前
CSS3 边框:全面解析与实战技巧
开发语言
1024小神22 分钟前
SVG标签中path路径参数学习
学习
island131430 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
云姜.32 分钟前
线程和进程的关系
java·linux·jvm
是码龙不是码农34 分钟前
支付防重复下单|5 种幂等性设计方案(从初级到架构级)
java·架构·幂等性