当前位置: 首页 > news >正文

【网络编程】从零开始彻底了解网络编程(二)

在这里插入图片描述

本篇博客给大家带来的是网络编程的知识点,.
🐎文章专栏: JavaEE初阶
🚀若有问题 评论区见
欢迎大家点赞 评论 收藏 分享
如果你不知道分享给谁,那就分享给薯条.
你们的支持是我不断创作的动力 .

王子,公主请阅🚀

  • 要开心
    • 要快乐
      • 顺便进步
  • 1. 网络编程的目的和概念
  • 2. 网络编程中的基本概念
  • 3. Socket套接字
  • 4. 两种Java通信模型
    • 4.1 Java数据报套接字通信模型
    • 4.2 Java流套接字通信模型
  • 5. UDP数据报套接字编程

要开心

要快乐

顺便进步

1. 网络编程的目的和概念

Ⅰ 为什么需要学习网络编程?

网络资源是非常丰富的, 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。与本地打开视频文件类似,只是视频文件这个资源的来源是网络。
相比本地资源来说,网络提供了更为丰富的网络资源:

在这里插入图片描述
所谓的网络资源,其实就是在网络中可以获取的各种数据资源。
而所有的网络资源,都是通过网络编程来进行数据传输的。

Ⅱ 什么是网络编程?
网络编程指网络上的主机通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输).

在这里插入图片描述

当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程.
特殊地,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程.但是,我们一定要明确,我们的目的是提供网络上不同主机,基于网络来传输数据资源:
进程A:编程来获取网络资源.
进程B:编程来提供网络资源.



2. 网络编程中的基本概念

Ⅰ 发送端和接受端
在一次网络数据传输时:
发送端:数据的发送方进程,称为发送端。发送端主机即网络通信中的源主机。
接收端:数据的接收方进程,称为接收端。接收端主机即网络通信中的目的主机。
收发端:发送端和接收端两端,也简称为收发端。
注意:发送端和接收端只是相对的,只是一次网络数据传输产生数据流向后的概念。

在这里插入图片描述

Ⅱ 请求和响应
一般来说,获取一个网络资源,涉及到两次网络数据传输:
①:请求数据的发送
②:响应数据的发送。
好比在快餐店点一份炒饭:
先要发起请求:点一份炒饭,再有快餐店提供的对应响应:提供一份炒饭.

在这里插入图片描述

Ⅲ 客户端和服务端
服务端:在常见的网络数据传输场景下,把提供服务的一方进程,称为服务端,可以提供对外服务。
客户端:获取服务的一方进程,称为客户端。
对于服务端来说,一般是提供:
① 客户端获取服务资源.
② 客户端保存资源在服务端.

Ⅳ 常见的客户端服务端模型

最常见的场景,客户端是指给用户使用的程序,服务端是提供用户服务的程序:
① 客户端先发送请求到服务端.
② 服务端根据请求数据,执行相应的业务处理.
③ 服务端返回响应:发送业务处理结果.
④ 客户端根据响应数据,展示处理结果.(展示获取的资源,或提示保存资源的处理结果)

3. Socket套接字

Ⅰ 概念

Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。
基于Socket套接字的网络程序开发就是网络编程。

Ⅱ 分类

Socket套接字主要针对传输层协议划分为如下三类:

①流套接字

使用传输层TCP协议TCP,即Transmission Control Protocol(传输控制协议),传输层协议。
以下为TCP的特点(细节后续再说):
有连接
可靠传输
面向字节流
有接收缓冲区,也有发送缓冲区
大小不限

对于字节流来说,可以简单的理解为,传输数据是基于IO流,流式数据的特征就是在IO流没有关闭的情况下,是无边界的数据,可以多次发送,也可以分开多次接收。

② 数据报套接字
使用传输层UDP协议UDP,即User Datagram Protocol(用户数据报协议),传输层协议。
以下为UDP的特点(细节后续再学习):
无连接
不可靠传输
面向数据报
有接收缓冲区,无发送缓冲区
大小受限:一次最多传输64k

对于数据报来说,可以简单的理解为,传输数据是一块一块的,发送一块数据假如100个字节,必须一次发送,接收也必须一次接收100个字节,而不能分100次,每次接收1个字节。

4. 两种Java通信模型

4.1 Java数据报套接字通信模型

对于UDP协议来说,具有无连接,面向数据报的特征,即每次都是没有建立连接,并且一次发送全部数据报,一次接收全部的数据报。
java中使用UDP协议通信,主要基于 DatagramSocket 类来创建数据报套接字,并使用DatagramPacket 作为发送或接收的UDP数据报。对于一次发送及接收UDP数据报的流程如下:

在这里插入图片描述

以上只是一次发送端的UDP数据报发送,及接收端的数据报接收,并没有返回的数据。也就是只有请求,没有响应。对于⼀个服务端来说,重要的是提供多个客户端的请求处理及响应,流程如下:

在这里插入图片描述

4.2 Java流套接字通信模型

在这里插入图片描述

Socket编程注意事项
① 客户端和服务端:开发时,经常是基于一个主机开启两个进程作为客户端和服务端,但真实的场景,一般都是不同主机.
② 注意的IP和目的端口号,标识了一次数据传输时要发送数据的终点主机和进程.
③ Socket编程我们是使用流套接字和数据报套接字,基于传输层的TCP或UDP协议,但应用层协议,也需要考虑,这块我们在后续来说明如何设计应用层协议。
④ 关于端口被占用的问题
如果一个进程A已经绑定了一个端口,再启动一个进程B绑定该端口,就会报错,这种情况也叫端口被占用。对于java进程来说,端口被占用的常见报错信息如下:

在这里插入图片描述
此时需要检查进程B绑定的是哪个端口,再查看该端口被哪个进程占用。以下为通过端口号查进程的方式:
① 在cmd输入 netstat -ano | findstr 端口号 ,则可以显示对应进程的pid。如以下命令显示了8888进程的pid.
② 在任务管理器中,通过pid查找进程

解决端口被占用的问题:
① 如果占用端口的进程A不需要运行,就可以关闭A后,再启动需要绑定该端口的进程B.
② 如果需要运行A进程,则可以修改进程B的绑定端口,换为其他没有使用的端口.

5. UDP数据报套接字编程

1. DatagramSocket
DatagramSocket 是UDP Socket,用于发送和接收UDP数据报。
DatagramSocket 构造方法:

在这里插入图片描述

DatagramSocket 方法:

在这里插入图片描述

2. DatagramPacket
DatagramPacket是UDP Socket发送和接收的数据报。
DatagramPacket 构造方法:

在这里插入图片描述
DatagramPacket 方法:

在这里插入图片描述

3. InetSocketAddress

构造UDP发送的数据报时,需要传入SocketAddress ,该对象可以使用 InetSocketAddress来创建.
InetSocketAddress ( SocketAddress 的子类 )构造方法:

在这里插入图片描述

4. 写一个简单的 UDP 的客户端/服务器通信的程序,这个程序没有啥业务逻辑,只是单纯的调用 socket api.让客户端给服务器发送一个请求,请求就是一个从控制台输入的字符串,服务器收到字符串之后,也就会把这个字符串原封不动的返回给客户端, 客户端再显示出来.

服务器代码示例:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class test1Sever {private static DatagramSocket socket = null;public test1Sever(int port) throws SocketException {//服务器的端口号由程序猿指定则相对可控,不容易出问题,所以不必交给系统.socket = new DatagramSocket(port);//服务器需要指定端口号,而客户端不用.}public static void start() throws IOException {System.out.println("服务器启动!");while(true) {//1. 接受客户端传过来的请求DatagramPacket requestPacket = new DatagramPacket(new byte[4096],4096);socket.receive(requestPacket);//客户端传过来的数据以二进制的形式存在requestPacket中String request = new String(requestPacket.getData(),0, requestPacket.getLength());//2. 根据请求计算响应//由于此处我们只是实现一个简单的回显服务器,所以请求是什么,响应就是什么.String respond = process(request);//3. 将响应构造为packet,发回给客户端.DatagramPacket respondPacket = new DatagramPacket(respond.getBytes(),respond.getBytes().length,requestPacket.getSocketAddress());socket.send(respondPacket);//打印一个日志System.out.printf("[%s,%d] req = %s resp = %s\n",requestPacket.getSocketAddress().toString(),requestPacket.getPort(),request,respond);}}public static String process(String request) {return request;}public static void main(String[] args) throws IOException {test1Sever sever = new test1Sever(9090);sever.start();}
}

客户端代码示例:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;public class test1Client {private  DatagramSocket socket = null;private  String serverIp = "";private  int serverPort = 0;public test1Client(String ip, int port) throws SocketException {//客户端的端口号如果是由客户手动指定则容易起冲突,所以要交给系统分配.socket = new DatagramSocket();//客户端的端口号由系统自行分配.//记录对端的ip和端口号.serverIp = ip;serverPort = port;}public void start() throws IOException {System.out.println("客户端启动!");Scanner sc = new Scanner(System.in);while(true) {//1. 给服务器发送请求.System.out.println("-> ");String request = sc.next();DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),request.getBytes().length,InetAddress.getByName(serverIp),serverPort);socket.send(requestPacket);//2. 读取服务器发过来的响应DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096);socket.receive(responsePacket);//3. 把响应转成字符串显示出来String response = new String(responsePacket.getData(),0,responsePacket.getLength());System.out.println(response);}}public static void main(String[] args) throws IOException {test1Client client = new test1Client("127.0.0.1",9090);client.start();}
}

执行过程:
1.服务器先启动. 服务器启动之后,就会进入循环,执行到 receive 这里并阻塞 (此时还没有客户端过来)
2.客户端开始启动,也会先进入 while 循环,执行 sc.next.并且也在这里阻塞当用户在控制台输入字符串之后,next 就会返回,从而构造请求数据并发送出来.
3.客户端发送出数据之后,
服务器会从 receive 中返回,进一步的执行解析请求为字符串,执行 process 操作,执行 send 操作
客户端则继续往下执行,执行到 receive,等待服务器的响应
4.客户端收到从服务器返回的数据之后, 就会从 receive 中返回执行这里的打印操作,也就把响应给显示出来了.
5.服务器这边完成一次循环之后,又执行到 receive 这里.客户端这边完成一次循环之后,又执行到 sc.next 这里双双进入阻塞

这俩程序,都是在同一个主机上.并没有真正的"跨主机通信"效果,想要让其他人访问我的服务器,就得将程序放到云服务器上. 因为云服务器上有公网IP.

如果此时我想实现一个英译汉的服务器,只需要重写process
代码示例:

import java.io.IOException;
import java.net.SocketException;
import java.util.HashMap;
import java.util.Map;public class test1DictServer extends test1Sever{private Map<String,String> dict = new HashMap<>();public test1DictServer(int port) throws SocketException {super(port);dict.put("dog","小狗");dict.put("elephant","大象");dict.put("cat","小猫");}@Overridepublic String process(String request) {return dict.getOrDefault(request,"没有查询到这个词");}public static void main(String[] args) throws IOException {test1DictServer server = new test1DictServer(9090);server.start();}
}

本篇博客到这里就结束啦, 感谢观看 ❤❤❤

🐎期待与你的下一次相遇😊😊😊

相关文章:

【网络编程】从零开始彻底了解网络编程(二)

本篇博客给大家带来的是网络编程的知识点,. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺便进步 1. …...

常见浏览器 WebDriver 驱动下载

以下是常见浏览器 WebDriver 驱动的下载地址及注意事项&#xff0c;综合多个可靠来源整理而成&#xff1a; 一、Chrome 浏览器&#xff08;ChromeDriver&#xff09; 官方下载地址 http://chromedriver.storage.googleapis.com/index.html • • 版本匹配&#xff1a;需与 Chro…...

【每日八股】复习计算机网络 Day3:TCP 协议的其他相关问题

文章目录 昨日内容复习TCP 的四次挥手&#xff1f;TCP 为什么要四次挥手&#xff1f;在客户端处于 FIN_WAIT_2 状态时&#xff0c;如果此时收到了乱序的来自服务端的 FIN 报文&#xff0c;客户端会如何处理&#xff1f;何时进入 TIME_WAIT 状态&#xff1f;TCP 四次挥手丢了怎么…...

大模型在胆管结石(无胆管炎或胆囊炎)预测及治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、胆管结石相关理论基础 2.1 胆管结石概述 2.2 临床表现与诊断方法 2.3 传统治疗方法 三、大模型技术原理与应用优势 3.1 大模型基本原理 3.2 在医疗领域的应用潜力 3.3 用于胆管结石预测的可…...

LeetCode第159题_至多包含两个不同字符的最长子串

LeetCode 第159题&#xff1a;至多包含两个不同字符的最长子串 题目描述 给定一个字符串 s&#xff0c;找出 至多 包含两个不同字符的最长子串 t&#xff0c;并返回该子串的长度。 难度 中等 题目链接 点击在LeetCode中查看题目 示例 示例 1&#xff1a; 输入: s &qu…...

PG CTE 递归 SQL 翻译为 达梦版本

文章目录 PG SQLDM SQL总结 PG SQL with recursive result as (select res_id,phy_res_code,res_name from tbl_res where parent_res_id (select res_id from tbl_res where phy_res_code org96000#20211203155858) and res_type_id 1 union all select t1.res_id, t1.p…...

JavaScript 位掩码常量教程

JavaScript 位掩码常量教程 位掩码&#xff08;Bitmask&#xff09;是一种高效使用内存的技术&#xff0c;在JavaScript中可以用来存储和操作多个布尔值标志。下面我将为您介绍位掩码的基本概念、应用场景以及实践示例。 什么是位掩码常量&#xff1f; 位掩码利用二进制位&a…...

Linux守护进程

一、相关概念 QQ邮箱关于三种协议的解释&#xff1a;SMTP/IMAP服务 1.SMTP协议 SMTP&#xff08;​​Simple Mail Transfer Protocol​​&#xff0c;简单邮件传输协议&#xff09;是一种用于发送电子邮件的互联网标准。它在TCP/IP协议族中&#xff0c;通常使用25端口进行通…...

Python多进程并发编程:深入理解Lock与Semaphore的实战应用与避坑指南

引言 在多进程并发编程中&#xff0c;资源竞争问题如同“隐形炸弹”&#xff0c;稍有不慎就会导致数据不一致或程序崩溃。无论是银行转账的余额错误&#xff0c;还是火车票超卖&#xff0c;其根源都在于共享资源的无序访问。如何安全高效地管理这些资源&#xff1f;Python中的锁…...

mysql的5.7版本与8.0版本的差异与兼容性

MySQL 5.7 和 8.0 是两个重要的版本&#xff0c;它们在性能、功能、安全性等方面都有显著的改进&#xff0c;同时也存在一些兼容性问题。以下是具体的改进点和兼容性问题&#xff1a; 一、MySQL 8.0 的改进点 性能提升 优化器改进&#xff1a;MySQL 8.0 对查询优化器进行了重大…...

【Rust 精进之路之第4篇-数据基石·上】标量类型:整数、浮点数、布尔与字符的精妙之处

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025-04-20 引言:构成万物的“原子”——标量类型 在上一篇文章【变量观】中,我们深入探讨了 Rust 如何通过 let、mut、const、static 和 Shadowing 来管理变量绑定,并理解了其背后对安全性…...

LangChain4j模型参数配置全解析:释放大语言模型的真正潜力

LangChain4j模型参数配置全解析&#xff1a;释放大语言模型的真正潜力 前言 在大语言模型应用开发中&#xff0c;参数配置是连接算法理论与工程实践的关键桥梁。合理的参数设置能让模型输出更精准、响应更高效&#xff0c;而错误的配置可能导致成本激增或业务逻辑失效。本文将…...

【深度学习入门_NLP自然语言处理】序章

本部分开始深度学习第二大部分NLP章节学习&#xff0c;找了好多资料&#xff0c;终于明确NLP的学习目标了&#xff0c;介于工作之余学习综合考量&#xff0c;还是决定以视频学习为主后期自主实践为主吧。 分享一个总图&#xff0c;其实在定位的时候很迷茫&#xff0c;单各章节…...

计算机组成原理笔记(十六)——4.1基本算术运算的实现

计算机中最基本的算术运算是加法运算&#xff0c;加、减、乘、除运算最终都可以归结为加法运算。 4.1.1加法器 一、加法器的基本单元 加法器的核心单元是 全加器&#xff08;Full Adder, FA&#xff09;&#xff0c;而所有加法器都由 半加器&#xff08;Half Adder, HA&…...

AI日报 - 2025年04月21日

&#x1f31f; 今日概览(60秒速览) ▎&#x1f916; AGI突破 | O3模型性能引热议&#xff0c;Rich Sutton提出「体验时代」新范式&#xff0c;自递归AI构建仍存挑战。 新模型如O3展示高IQ&#xff0c;但AGI定义与实现路径讨论加剧&#xff0c;强调自主生成数据与体验学习。 ▎&…...

基于Python的推荐算法的电影推荐系统的设计

标题:基于Python的推荐算法的电影推荐系统的设计与实现 内容:1.摘要 本文围绕基于Python的推荐算法的电影推荐系统展开研究。背景在于随着电影数量的急剧增加&#xff0c;用户在海量电影中找到符合自身喜好的影片变得困难。目的是设计并实现一个高效准确的电影推荐系统&#x…...

【perf】perf工具的使用生成火焰图

文章目录 1. What is perf?2. perf使用2.1 perf的子工具集2.2 常用指令perf list指令格式参数perf中事件分类使用示例 perf stat指令格式参数 perf top指令格式参数交互式界面操作使用示例 perf record指令格式参数使用示例 perf report指令格式参数交互式界面操作使用示例 pe…...

Sentinel源码—6.熔断降级和数据统计的实现一

大纲 1.DegradeSlot实现熔断降级的原理与源码 2.Sentinel数据指标统计的滑动窗口算法 1.DegradeSlot实现熔断降级的原理与源码 (1)熔断降级规则DegradeRule的配置Demo (2)注册熔断降级监听器和加载熔断降级规则 (3)DegradeSlot根据熔断降级规则对请求进行验证 (1)熔断降级…...

C语言自增自减题目

一、题目引入 二、运行结果 三、题目分析 这一题中 i的初始值是2 所以执行case2中的命令i-- 表达式的值此时是2 i--完了之后i最后的值是1 由于是switch没有break 就会往下贯穿 直到遇到break为止 case3里面 i 表达式的值是2 i完了之后i的值也是2 综上所述 i的值最终的值是…...

paddleocr出现: [WinError 127] 找不到指定的程序解决办法

paddleocr是一个由百度开发开源的OCR&#xff08;光学字符识别&#xff09;工具库。它支持多种语言的文本识别&#xff0c;包括中文、英文、日文等&#xff0c;并具备高效的文本检测和识别能力。paddleocr基于PaddlePaddle深度学习框架开发&#xff0c;提供了丰富的预处理、模型…...

c++STL——list的使用和模拟实现

文章目录 list的使用和模拟实现使用部分list的结构声名默认成员函数initializer_list容量和访问操作修改操作其他接口list的迭代器迭代器的种类 list的模拟实现明确基本结构预处理函数迭代器部分(重点)思路进一步考虑最终代码operator->的重载总结 begin和end访问接口修改操…...

交换机端口安全

端口安全 端口安全(PortSecurity)通过将接口学习到的动态MAC地址转换为安全MAC地址&#xff08;包括安全动态MAC、安全静态MAC和Sticky MAC)&#xff0c;阻止非法用户通过本接口和交换机通信&#xff0c;从而增强设备的安全性。 1、安全mac地址分类 安全动态MAC地址&#xf…...

【Oracle专栏】Oracle中的虚拟列

Oracle相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 1.背景 在EXP方式导出时&#xff0c;发现 出现如下提示 EXP-00107: virtual column 不支持&#xff0c;因此采用expdp方式导出。于是本文针对oracle虚拟列进行简单介绍。 2. 相…...

shell 正则表达式与文本处理器

目录 前言 一、正则表达式 &#xff08;一&#xff09;定义与用途 &#xff08;二&#xff09;基础正则表达式 &#xff08;三&#xff09;基础正则表达式元字符 &#xff08;四&#xff09;扩展正则表达式 二、文本处理器&#xff1a;Shell 编程的得力助手 &#xff0…...

ZYNQ笔记(九):定时器中断

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; 任务&#xff1a;使用定时器 (私有定时器) 中断 实现 LED&#xff08;PS端&#xff09; 定时1s亮灭翻转 目录 一、介绍 二、硬件设计 三、软件设计 四、效果 一、介绍 Zynq系列是Xilinx(现为AMD)推出的集成了AR…...

idea中运行groovy程序报错

我的项目是使用的 gradle 构建的。 在 idea 中运行Groovy的面向对象程序报错如下&#xff1a; Execution failed for task :Person.main(). > Process command G:/Program Files/jdk-17/jdk-17.0.12/bin/java.exe finished with non-zero exit value 1* Try: Run with --s…...

具身智能零碎知识点(四):联合嵌入预测架构(JEPAs)详解

联合嵌入预测架构&#xff08;JEPAs&#xff09;详解 联合嵌入预测架构&#xff08;JEPAs&#xff09;详解一、核心思想二、技术原理1. 核心组件2. 训练目标 三、与传统方法的对比四、具体实例例1&#xff1a;视频预测&#xff08;如Meta的I-JEPA&#xff09;例2&#xff1a;多…...

linux 搭建 dvwa 渗透测试环境

linux 安装 dvwa 1、分为4个部分&#xff0c;搭建dvwa渗透测试环境2、安装centos 7.63、安装apache http server4、安装mysql5、安装php6、运行dvwa 1、分为4个部分&#xff0c;搭建dvwa渗透测试环境 本文基于centos 7.6 搭建 dvwa 渗透测试环境 安装一个linux系统安装apache…...

C++项目 —— 基于多设计模式下的同步异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计)

C项目 —— 基于多设计模式下的同步&异步日志系统&#xff08;4&#xff09;&#xff08;双缓冲区异步任务处理器&#xff08;AsyncLooper&#xff09;设计&#xff09; 异步线程什么是异步线程&#xff1f;C 异步线程简单例子代码解释程序输出关键点总结扩展&#xff1a;使…...

【Linux学习笔记】Linux的环境变量和命令行参数

【Linux学习笔记】Linux的环境变量和命令行参数 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】Linux的环境变量和命令行参数前言一.环境变量1.1基本概念1.2常见环境变量1.3和环境变量相关的命令1…...

排序算法-快速排序

描述&#xff1a; 基准值选择&#xff1a;选取数组的最后一个元素 arr[high] 作为基准值 p。初始化索引&#xff1a;i 初始化为 low - 1&#xff0c;其作用是指向比基准值小的最后一个元素的索引。遍历数组&#xff1a;借助 for 循环从 low 到 high - 1 遍历数组。若当前元素 …...

软考高级系统架构设计师-第16章 数学与经济管理

【本章学习建议】 根据考试大纲&#xff0c;本章主要考查系统架构设计师单选题&#xff0c;预计考2分左右。主要是运筹学的计算问题&#xff0c;范围广、难度大&#xff0c;超纲题较多&#xff0c;不用深究。 16.1 线性规划 线性规划是研究在有限的资源条件下&#xff0c;如果…...

爱在冰川-慢就是快

【游资大佬の搞钱心法&#x1f525;&#xff5c;小白逆袭必看冰川语录真实案例‼️】 &#x1f4a1;刚扒完爱在冰川的万字访谈 发现游资搞钱真的靠"反人性思维" 总结6条狠人法则真实案例 建议收藏反复背诵&#x1f447; 1️⃣【周期为王】&#x1f4ab; "行情…...

Mac-VScode-C++环境配置

mac上自带了clang所以不是必须下载Homebrew 下面是配置文件&#xff08;注释记得删一下&#xff09; package.json {"name": "git-base","displayName": "%displayName%","description": "%description%",&quo…...

【JAVA EE初阶】多线程(1)

这样的代码&#xff0c;虽然也能打印hello thread&#xff0c;但是没有创建新的线程&#xff0c;而是直接在main方法所在的主线程中执行了run的逻辑 start方法&#xff0c;是调用系统api&#xff0c;真正在操作系统内部创建一个线程。这个新的线程会以run作为入口方法&#xff…...

PHP伪协议读取文件

借鉴php伪协议实现命令执行,任意文件读取_ctf php文件读取-CSDN博客 总结 在ctf中常用的有data:// , php://input , php://filter &#xff0c;file:// php://input &#xff0c;data://用来执行命令 1.php://input 的用法 http://127.0.0.1/include.php?filephp://input [P…...

动态调整映射关系的一致性哈希负载均衡算法详解

一、核心原理与设计要点 双重映射结构 一致性哈希负载均衡通过 哈希环 和 槽动态分配 实现双重映射关系&#xff1a; • 哈希环构建&#xff1a;将节点&#xff08;物理或虚拟&#xff09;和数据键&#xff08;Key&#xff09;通过哈希函数&#xff08;如MD5、CRC32&#xff09…...

控制反转(IOC)和依赖注入(DI)

Target Retention Documented 元注解 Component 将类交给IOC容器管理&#xff0c;成为IOC容器中的bean Autowired 注入运行时所需要依赖的对象 因为Mabatis DAO层注解Reponsitory 基本不用了&#xff0c;现在Mapper层Mapper注解&#xff0c;这里的Mapper层相当于原来的DAO层…...

【每日八股】复习 MySQL Day1:事务

文章目录 复习 MySQL Day1&#xff1a;事务MySQL 事务的四大特性&#xff1f;并发事务会出现什么问题&#xff1f;MySQL 事务的隔离级别&#xff1f;不同事务隔离级别下会发生什么问题&#xff1f;MVCC 的实现原理&#xff1f;核心数据结构版本链构建示例可见性判断算法MVCC 可…...

【数据结构和算法】1. 数据结构和算法简介、二分搜索

本文根据 数据结构和算法入门 视频记录 文章目录 1. 数据结构和算法简介1.1 什么是数据结构&#xff1f;什么是算法&#xff1f;1.2 数据结构和算法之间的关系1.3 “数据结构和算法”有那么重要吗&#xff1f; 2. 二分搜索&#xff08;Binary Search&#xff09;2.1 算法概念2…...

4月19日记(补)算了和周日一块写了 4月20日日记

周六啊 昨天晚上又玩的太嗨了。睡觉的时候有点晚了&#xff0c;眼睛疼就没写日记。现在补上 实际上现在是20号晚上八点半了。理论上来说应该写今天的日记。 周六上午打比赛啦&#xff0c;和研究生&#xff0c;输了&#xff0c;我是替补没上场。没关系再练一练明天就可以变强…...

面试常用基础算法

目录 快速排序归并排序堆排序 n n n皇后问题最大和子数组爬楼梯中心扩展法求最长回文子序列分割回文串动态规划求最长回文子序列最长回文子串单调栈双指针算法修改 分割回文串滑动窗口栈 快速排序 #include <iostream> #include <algorithm>using namespace std;…...

微服务与 SOA:架构异同全解析与应用指南

微服务和 SOA&#xff08;面向服务的架构&#xff09;是两种不同的软件架构风格&#xff0c;它们在很多方面存在相似之处&#xff0c;但也有一些区别。以下是对它们的详细介绍&#xff1a; 一、概念 1.微服务 微服务架构将一个大型应用程序拆分成多个小型、独立的服务&#…...

Dijkstra 算法入门笔记 (适用于算法竞赛初学者) - C++ 代码版

目录 算法是做什么的&#xff1f;核心思想&#xff1a;贪就完事了&#xff01;算法前提&#xff1a;不能有负权边&#xff01;需要哪些工具&#xff1f;(数据结构)算法具体步骤关键操作&#xff1a;松弛 (Relaxation)两种实现方式 (C 代码) 朴素版 Dijkstra (O(V^2))堆优化版 …...

脑影像分析软件推荐| GraphVar介绍

目录 1.软件界面 2.工具包功能简介 3.软件安装注意事项 1.软件界面 2.工具包功能简介 GraphVar是一个用户友好的 MATLAB 工具箱&#xff0c;用于对功能性大脑连接进行全面的图形分析。这里我们介绍了该工具箱的全面扩展&#xff0c;使用户能够无缝探索跨功能连接测量的可轻…...

如何优雅地实现全局唯一?深入理解单例模式

如何优雅地实现全局唯一&#xff1f;深入理解单例模式 一、什么是单例模式&#xff1f; 单例模式是一种创建型设计模式&#xff0c;旨在确保一个类只有一个实例&#xff0c;并为该实例提供全局访问点&#xff0c;从而避免全局变量的命名污染&#xff0c;并支持延迟初始化Wiki…...

【Flutter】使用LiveKit和Flutter构建实时视频聊天应用

引言 在当今快速发展的数字世界中&#xff0c;实时视频通信已成为许多应用程序的核心功能。无论是远程工作、在线教育还是社交网络&#xff0c;高质量的实时视频功能都至关重要。LiveKit作为一个开源的WebRTC解决方案&#xff0c;提供了构建可扩展实时音视频应用所需的一切工具…...

Android Jetpack Compose 状态管理解析:remember vs mutableStateOf,有啥不一样?为啥要一起用?

&#x1f331;《Jetpack Compose 状态管理解析&#xff1a;remember vs mutableStateOf&#xff0c;有啥不一样&#xff1f;为啥要一起用&#xff1f;》 在 Jetpack Compose 的世界里&#xff0c;UI 是响应式的。这意味着当状态发生变化时&#xff0c;UI 会自动重组&#xff0…...

QT6 源(37):界面组件的总基类 QWidget 的源码阅读(下,c++ 代码部分)

&#xff08;1&#xff09; QT 在 c 的基础上增加了自己的编译器&#xff0c;以支持元对象系统和 UI 界面设计&#xff0c;有 MOC 、 UIC 等 QT 自己的编译器。本节的源代码里&#xff0c;为了减少篇幅&#xff0c;易于阅读&#xff0c;去除了上篇中的属性部分&#xff0c; 上篇…...

进程与线程:01 CPU管理的直观想法

多进程图像与操作系统核心 好从今天开始&#xff0c;我们就要开始学习操作系统&#xff0c;最核心的图像是多进程图像。前面我们讲过&#xff0c;多进程图像对操作系统来说非常重要&#xff0c;它是操作系统的核心图像。明白了它以后&#xff0c;对于理解操作系统的一大部分内…...