0%

从0到1开发一个SpringBoot入门Demo

项目打包方法

  • 终端输入 mvn clean install 命令,等待控制台输出 BUILD SUCCESS,在 target 目录生成一个 .jar

  • 复制 .jar 包的路径,例如 /Users/evan/IdeaProjects/boot-demo/target/1.jar ,控制台输入 cd /Users/evan/IdeaProjects/boot-demo/target/ ,输入 ll 可以查看内容。

  • 使用 java -jar 1.jar 即可运行启动应用,直接访问项目 ;也可以修改端口,java -jar 1.jar --server.port=8081

什么是 IoC

1 IOC 是控制反转, Inversion of Control。
2 控制反转不是一种语法,不是类或方法,它是一种设计模式
3 当A类依赖于B类,如果不使用控制反转,A类要主动创建B类的对象,也就是new B类,这时候控制权在A类的手中,这就是主动控制; 使用控制反转,A类只要声明自己需要B类,而控制权交给Spring容器,Spring容器在A需要B类的时候为其注入B类即可,这时候控制权在Spring容器手中,即控制反转了。
4 好处是什么呢?控制反转后A类与B类的耦合性就降低了,程序更加灵活。
5 比如,一家公司为了卫生和清洁,需要有人打扫卫生,这家公司可以自己聘用一个保洁,就是将管理保洁的权利控制在自己手中,自己new一个保洁,那么这个保洁请假、调休、年终福利、婚丧嫁娶都要操心,太麻烦了,公司和这个保洁紧紧地绑在 一起,给公司带了了很大的负担。
公司决定采用控制反转模式,将保洁管理的权限交给物业来做,自己需要保洁的时候,由物业来分配一个保洁即可,公司和保洁直接就就没有什么关系了,松耦合了,这时候物业公司就是Spring容器,公司将保洁的控制权反转给了物业公司,当公司需要保洁的时候,物业公司将一个保洁注入到公司即可。
这就是控制反转模式。

IoC,Inversion of Control 作为一种设计模式,主要通过解耦组件之间的依赖关系,提升代码的可维护性、可扩展性和测试性。以下是 IoC 好处的一些实例及具体体现:

实例 1:可替换的数据库访问层

  • 场景:在开发一个多数据库支持的系统时,例如需要支持 MySQL 和 MongoDB。

  • 实现
    使用接口来抽象数据库操作逻辑,例如定义一个 DatabaseService 接口。然后实现 MySQLDatabaseServiceMongoDBDatabaseService 两个具体类。
    通过 IoC 容器将具体实现注入业务层代码中。

  • 体现的好处灵活性:切换数据库实现时,只需要更改注入配置,而不需要修改业务代码。可测试性:在单元测试时,可以注入一个 Mock 的 DatabaseService,无需真实数据库环境。

实例 2:解耦日志记录模块

  • 场景:应用需要支持不同的日志库(如 Log4j、SLF4J 或自定义日志系统)。

  • 实现
    定义一个 Logger 接口,并提供多个实现类,如 Log4jLoggerSLF4JLogger。通过 IoC 容器将具体实现注入需要记录日志的模块。

  • 体现的好处解耦:模块依赖于 Logger 接口,而非具体实现,日志实现的变更不会影响业务逻辑。可扩展性:可以轻松添加新的日志实现,无需修改现有代码。

实例 3:实现可扩展的通知服务

  • 场景:在系统中需要向用户发送多种类型的通知,例如短信、邮件、微信消息等。

  • 实现
    通过定义一个 NotificationService 接口,将 SMSNotificationServiceEmailNotificationServiceWeChatNotificationService 等实现类注入不同的上下文。

  • 体现的好处开闭原则:新增通知方式时,只需增加实现类和注入配置,不需更改原有代码。可测试性:测试时可以注入 Mock 实现,而不触发实际通知发送。

实例 4:Web 应用中的控制器与服务解耦

  • 场景:Web 控制器需要调用业务逻辑,但不同业务逻辑模块可能会发生变动。

  • 实现
    控制器通过依赖注入方式获取服务对象,而不是直接创建具体服务类实例。例如,使用 Spring 框架时,控制器通过 @Autowired 注解获取服务实例。

  • 体现的好处职责单一:控制器只负责调用服务,服务的实现逻辑可以独立修改。便于测试:控制器的单元测试中,可以注入模拟服务,而无需真实服务逻辑。

实例 5:动态替换算法实现

  • 场景:在一个搜索应用中,不同场景下需要使用不同的排序算法(如按相关性排序或按时间排序)。

  • 实现
    定义一个 SortAlgorithm 接口,通过 IoC 容器注入 RelevanceSortTimeSort 的实现到搜索模块。

  • 体现的好处易于扩展:添加新的排序算法时,不需要修改现有代码。降低耦合:搜索模块只依赖于抽象接口,而与具体排序实现无关。

总结

IoC 的核心好处通过以下方面体现:

  1. 代码解耦:模块之间通过接口交互,降低直接依赖。
  2. 易于扩展:新增功能时只需实现接口并配置注入,无需修改已有逻辑。
  3. 提高测试性:通过注入 Mock 实现,单元测试无需依赖外部系统。
  4. 统一管理依赖:依赖由 IoC 容器管理,简化了对象的创建和生命周期管理。
    这些好处在实际项目中大大提升了开发效率和代码质量,同时也让项目更容易维护和扩展。

打开项目结构

视图 > 解决方案资源管理器

设置启动项

新建 C++ 空项目,导入对应源文件、头文件、资源文件。

TODAY

今天看了一个某位大一做的简易电动自行车充电管理系统,感觉就是一坨,懒得看了。

Visual Studio 导入现有项,并不会复制一份文件,类似于复制过来一个文件路径。

WHAT IS NTD ?

通常 NTD 是指新台币,New Taiwan Dollar。

WHAT IS STUMIS ?

Student Management Information System 学生管理信息系统

过拟合

过拟合(Overfitting)是机器学习中的一种现象,指模型在训练数据上表现得非常好(即误差很小),但在测试数据或新数据上表现得很差。换句话说,模型过于“记住”了训练数据的细节和噪声,而没有学习到数据的总体规律或本质特征。

过拟合的表现

  1. 训练集误差很小:模型在训练集上的预测表现非常好。

  2. 测试集误差很大:模型在测试集上的表现却很差,无法很好地推广到新数据。

  3. 对噪声过于敏感:模型可能学习到了训练数据中的噪声和异常值,而不是数据的真实模式。

为什么会发生过拟合?

  1. 模型太复杂
  • 模型的自由度过高(如神经网络的层数或参数过多),能够拟合训练数据中的每个细节。
  1. 训练数据不足
  • 训练数据量过少,使得模型容易记住数据,而不是泛化规律。
  1. 训练时间过长
  • 模型训练时间过长,逐渐对训练数据“死记硬背”。
  1. 数据噪声
  • 数据中包含较多的噪声或无关特征,模型将这些噪声也视为模式。

如何防止过拟合?

  1. 增加数据量
  • 收集更多的训练数据,帮助模型更好地学习数据的总体分布。
  1. 简化模型
  • 减少模型的复杂度(如降低神经网络的层数、减少参数数量)。
  1. 正则化
  • 添加正则化项(如L1或L2正则化),限制模型参数的大小,防止过于复杂。
  1. 使用验证集
  • 在训练过程中通过验证集监控模型性能,防止训练时间过长。
  1. 提前停止(Early Stopping)
  • 在验证集误差开始增大时停止训练。
  1. 数据增强
  • 使用数据增强技术生成更多变种的训练数据(如图像旋转、裁剪等)。
  1. Dropout(神经网络中常用):
  • 随机丢弃一部分神经元,防止网络过于依赖特定节点。

过拟合的简单例子

假设你要用一个模型拟合一个散点图(如预测房价):

  • 欠拟合(Underfitting):模型是一个简单的直线,未能捕捉数据的非线性关系。
  • 正常拟合(Good Fit):模型是一条合理的曲线,能较好地预测数据趋势。
  • 过拟合(Overfitting):模型是一条非常复杂的曲线,完美拟合了每一个点,但在新数据上预测效果很差。
    通过平衡模型的复杂度和训练数据量,同时引入合适的正则化手段,可以有效地减轻过拟合问题。

ABC : American-born Chinese

“ABC” : American-born Chinese

美国出生的华裔


Welcome to 2025 🎉

Let’s embrace the future with colors and possibilities!

**HELLO, 2025** - Let's make this year unforgettable with passion and creativity!
**HELLO, 2025** - A year filled with new adventures and success.
**HELLO, 2025** - Keep pushing boundaries and pursuing your dreams!
**HELLO, 2025** - New challenges, new opportunities. Embrace them all!
**HELLO, 2025** - Let the creativity flow and bring your ideas to life!
**HELLO, 2025** - The future is bright, let's shine together!
HELLO, 2025
HELLO, 2025
HELLO, 2025
HELLO, 2025

TCP报文段的窗口字段的含义

TCP报文段的窗口字段表示的是接收方的接收窗口

(蒙错了,蒙的发送方的接收窗口)

主机到另一个主机经过两个switch,一个router,几次ARP?

不太好查

CSMA/CD为什么不适用于无线网络

  • 碰撞检测困难

    • 在无线网络中,设备之间的信号是通过空气传播的,信号会受到衰减和干扰。设备无法像有线网络中那样清晰地检测到碰撞,因为发送信号的设备可能无法接收到从其他设备发出的信号,尤其是在距离较远或信号被遮挡的情况下。这导致无法有效地判断是否发生了碰撞。
  • 隐蔽终端问题

    • 在无线网络中,不同设备的信号传播范围有限,因此某些设备可能无法直接接收到其他设备的信号,这就出现了隐蔽终端问题(Hidden Terminal Problem)。即某些设备无法察觉到其他设备正在发送数据,可能导致它们在信道上同时发送数据而发生碰撞。
  • 信道共享

    • 无线网络是共享信道的,每个设备都共享同一个频谱。在无线通信中,如果所有设备都使用 CSMA/CD 的方式,频繁的碰撞和重试会导致网络效率低下。因此,无线网络通常采用其他机制(如 CSMA/CA)来避免碰撞。

(自己就写了碰撞检测困难的问题,甚至没写CSMD/CA更适合,因为自己没具体学这个协议,怕写错了)

NAT(网络地址转换)不允许使用 “广播地址”“多播地址” 作为私有网络地址。

感觉自己写错了。

配置访问互联网地址

蒙错了估计

网络协议三要素

语法、语义和时序

PING使用的是 ICMP 报文的哪个类型 ?

回送请求或回答

TCP/IP是一个工业标准而非国际标准

数据链路层三个任务

(1)封装成帧

(2)透明传输

(3)差错检测

广播域和冲突域

1. 广播域 (Broadcast Domain)

  • 定义:广播域是指通过广播数据帧(如 ARP 请求)可以被传播到的所有网络设备的范围。
  • 特点
    • 所有同一广播域内的设备都会接收到广播帧。
    • 通过路由器可以隔离广播域,交换机不会隔离广播域。
  • 影响因素
    • 设备过多会导致广播流量增大,影响网络性能。
    • VLAN(虚拟局域网)可以创建多个独立的广播域。

2. 冲突域 (Collision Domain)

  • 定义:冲突域是指在使用共享传输介质的网络中,多个设备可能同时发送数据,导致数据冲突的范围。
  • 特点
    • 常见于传统的集线器(Hub)或使用共享以太网的网络中。
    • 交换机(Switch)可以隔离冲突域,每个端口是一个独立的冲突域。
    • 数据冲突会导致重传,降低网络效率。

题目一

以太网帧FCS字段的功能是(  A )    

A. 差错检测             B. 确保数据按照顺序到达   

C. 流量控制             D. 标识本地网络中的设备

FCS 字段,就是 Frame Check Sequence,用于差错检测,一般用 CRC 计算生成 FCS 字段。

Ethernet 帧格式 :

前导符 起始符 目MAC地址 源MAC地址 类型/长度 数据 PAD CRC

题目二

当进入网络的数据流量超过网络的载送能力时,将引起网络的吞吐率急剧下降,这时必须启用网络( 拥塞控制 )。

拥塞控制的作用对象是网络中的所有设备(如路由器、交换机等),它通过调节发送方的发送速率来避免网络中某个部分因过载而导致的性能下降。

流量控制的作用对象是接收方,确保接收方能够跟得上发送方的速度,不会因缓冲区满而丢弃数据。流量控制是为防止接收方缓冲区溢出所需要的。

题目三

以太网技术规范不包括(A )。

A. 网络层 B. 物理层 C. 数据链路层 D. 介质访问控制层

以太网的技术规范主要有以下三个层次 :

  • 物理层(Physical Layer):定义了网络的硬件设备和传输媒介的标准,例如电缆、光纤、网络接口等。
  • 数据链路层(Data Link Layer):负责在两个直接相连的设备之间传输数据帧,包括数据的封装、错误检测等。
  • 介质访问控制层(MAC Layer):是数据链路层的一部分,负责管理设备如何访问传输介质以及如何控制冲突等。

物理层接口的特性

  • 机械特性:接线器的形状和尺寸、引脚数目和排列、固定和锁定装置等。

  • 电气特性:电压范围。

  • 功能特性:指明某条线上的出现的某一电平的电压有何意义。

  • 过程特性:指明对于不同功能的各种可能事件的出现顺序。

题目四

当前因特网IP的版本是( )。
A. IPv6 B. IPv3 C. IPv4 D. IPv5

当前因特网的版本是 IPV4.

TCP三次握手、四次挥手

1、建立连接

(1)SYN = 1,seq = x

(2)SYN = 1, ACK = 1, seq = y, ack = x + 1

(3)ACK = 1,ack = y + 1, seq = x + 1

2、释放连接

(1)FIN = 1, seq = u

(2)ACK = 1, seq = v, ack = u + 1

(3)FIN = 1, ACK = 1, seq = w, ack = u + 1

(4)ACK = 1, seq = u + 1, ack = w + 1

计算机网络最基本的功能是数据通信,最主要的功能是资源共享

CSMA/CD

在使用CSMA/CD协议时,一个站不可能同时发送和接收。

数据链路层的三个基本功能

(1)封装成帧 :将分组封装成帧

(2)透明传输 :避免消息符号跟帧定界符号混淆

(3)差错检测 :防止出错的无效数据帧继续传播

RIP和OSPF路由信息交换方式的不同

(1)RIP是距离向量路由协议 ;OSPF是链路状态路由协议

(2)RIP仅向相邻路由器发送信息,发出的路由信息为该路由器的路由表 ;OSPF向本自己系统内所有路由器发送信息,发送的路由信息为该路由器的链路状态信息

(3)RIP定期和相邻路由器交换信息 ;OSPF只有链路状态信息发生变化时才洪泛信息

针对支持子网掩码的路由器,写出IP分组转发的算法

1、从收到的分组的首部提取目的IP地址 D。

2、先用各网络的子网掩码和D逐位相与,看是否匹配。如果匹配,直接交付分组 ;否则,间接交付,执行 3

3、若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一条路由器 ;否则,执行 4

4、对路由表中的每一行的子网掩码和 D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 5。

5、若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行 6。

6、 报告转发分组出错。

4-19

某单位分配到一个地址块,129.250/16。该单位有4000台机器,平均分布在16个不同的地点。试给每一个地点分配一个地址块,并算出每个地址块中IP地址的最小值和最大值

给定的地址块是 129.250.0.0/16,划分为 16 个子网,从主机号里面借 4 位,选择的子网掩码是 /20,每个子网提供 4096 个地址。

子网编号 子网地址 最小IP地址 最大IP地址
1 129.250.0.0/20 129.250.0.0 129.250.15.255
2 129.250.16.0/20 129.250.16.0 129.250.31.255
3 129.250.32.0/20 129.250.32.0 129.250.47.255
4 129.250.48.0/20 129.250.48.0 129.250.63.255
…… …… …… ……
16 129.250.240.0/20 129.250.240.0 129.250.255.255

4-20

一个数据报长度4000字节(固定首部长度)。现在经过一个网络传送,但此网络能够传送的最大数据长度为1500字节。试问应该划分为几个短些的数据包片?各个数据报片的数据字段长度、片偏移字段长度和MF标志应为何值?

数据报片 数据字段长度 (字节) 片偏移 (单位:8字节) MF (More Fragments 标志)
1 1480 0 1
2 1480 185 1
3 1020 370 0

5-38

注意执行慢开始的时候,如果 $2\times cwnd > ssthresh$ , 则下一个 RTT 后的 $\text{cwnd}$ 等于 $\text{ssthresh}$,而不等于 $2\times cwnd$ ,即 $\text{cwnd}$ 不能越过 $\text{ssthresh}$ 值。

RTT 1 2 3 4 5
cwnd 1 2 4 8 9
RTT 6 7 8 9 10
cwnd 10 11 12 1 2
RTT 11 12 13 14 15
4 6 7 8 9

内核

将一些与硬件紧密相关的模块诸如中断处理程序,各种常用设备的驱动程序,以及运行频率较高的模块都安排在紧靠硬件的软件层次中,并让他们常驻内存,以提高 OS 的运行效率,并对之加以特殊的保护。通常将这一部分称为 OS 的内核。

操作系统特征

  • 并发(Concurrence)

多个事件在同一时间间隔之内发生。

  • 共享(Sharing)

系统中的资源可供内存中多个并发的进程共同使用。

  • 虚拟(Virtual)

时分复用技术 / 空分复用技术。

  • 异步(Asynchronism)

进程是以人们不可预知的速度向前推进的。

链接方式

  • 静态链接

  • 装入时动态链接

  • 运行时动态链接