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;

}
相关推荐
Mr.Pascal5 分钟前
刚学php序列化/反序列化遇到的坑(攻防世界:Web_php_unserialize)
开发语言·安全·web安全·php
爱米的前端小笔记14 分钟前
前端八股自学笔记分享—页面布局(二)
前端·笔记·学习·面试·求职招聘
小尤笔记17 分钟前
利用Python编写简单登录系统
开发语言·python·数据分析·python基础
飞升不如收破烂~19 分钟前
Spring boot常用注解和作用
java·spring boot·后端
秦老师Q20 分钟前
Java基础第九章-Java集合框架(超详细)!!!
java·开发语言
计算机毕设源码qq-383653104121 分钟前
(附项目源码)Java开发语言,215 springboot 大学生爱心互助代购网站,计算机毕设程序开发+文案(LW+PPT)
java·开发语言·spring boot·mysql·课程设计
ashane131424 分钟前
Java list
java·windows·list
袁庭新31 分钟前
Cannal实现MySQL主从同步环境搭建
java·数据库·mysql·计算机·java程序员·袁庭新
无尽的大道32 分钟前
深入理解 Java 阻塞队列:使用场景、原理与性能优化
java·开发语言·性能优化
建群新人小猿37 分钟前
会员等级经验问题
android·开发语言·前端·javascript·php