软件开发新手入门五大核心技能之计算机基础常识(五)

简介: 教程来源 http://vbzcj.cn/ 本章系统讲解网络与数据库核心知识:涵盖OSI/TCP/IP模型、IP/端口、TCP三次握手/四次挥手、HTTP协议、DNS解析;以及SQL基础、索引优化、ACID事务、NoSQL(如Redis)等,理论结合Python实战示例。

第五章 网络基础 —— 让程序互联

5.1 OSI 七层模型与 TCP/IP 四层模型
image.png
TCP/IP 四层模型(实际使用):

应用层(HTTP、DNS、SSH)

传输层(TCP、UDP)

网络层(IP)

网络接口层(以太网)

5.2 IP 地址与端口
IPv4 地址: 32 位,点分十进制,如 192.168.1.1。分为 A/B/C/D/E 类,私有地址范围:

10.0.0.0 ~ 10.255.255.255

172.16.0.0 ~ 172.31.255.255

192.168.0.0 ~ 192.168.255.255

端口: 0~65535,0-1023 为系统保留(如 80 HTTP, 443 HTTPS, 22 SSH, 3306 MySQL)。

# Linux 查看端口监听
netstat -tuln
ss -tuln

# 测试端口连通
telnet google.com 80
nc -zv google.com 80

5.3 TCP 三次握手与四次挥手
三次握手建立连接:

Client -> SYN (seq=x) -> Server

Server -> SYN+ACK (seq=y, ack=x+1) -> Client

Client -> ACK (seq=x+1, ack=y+1) -> Server

# 使用 socket 模拟 TCP 客户端
import socket

# 创建 socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器(发起三次握手)
client.connect(('www.baidu.com', 80))

# 发送 HTTP 请求
request = b'GET / HTTP/1.1\r\nHost: www.baidu.com\r\n\r\n'
client.send(request)

# 接收响应
response = client.recv(4096)
print(response[:100])  # 打印前100字节

# 关闭连接(四次挥手)
client.close()

四次挥手断开连接:

Client -> FIN -> Server

Server -> ACK -> Client (半关闭)

Server -> FIN -> Client

Client -> ACK -> Server

TCP 与 UDP 对比:
image.png

# UDP 客户端示例
import socket

udp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_client.sendto(b'Hello UDP', ('8.8.8.8', 53))  # DNS 服务器
data, addr = udp_client.recvfrom(1024)
print(data)

5.4 HTTP 协议基础
HTTP(超文本传输协议)是 Web 的基石。请求/响应模型,无状态。

HTTP 请求结构:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
(空行)
[可选的请求体]

HTTP 响应结构:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
(空行)
<html>...</html>

常见状态码:
image.png
用 Python 启动一个简单的 HTTP 服务器:

# 极简 HTTP 服务器(Python 内置)
# 在终端执行: python -m http.server 8000

# 自定义 HTTP 服务器
from http.server import HTTPServer, BaseHTTPRequestHandler

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(b'<h1>Hello, World!</h1>')
        self.wfile.write(f'<p>Path: {self.path}</p>'.encode())

    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'Received: ' + post_data)

server = HTTPServer(('localhost', 8080), MyHandler)
print('Server running on http://localhost:8080')
server.serve_forever()

5.5 DNS 域名解析
将域名(如 www.google.com)转换为 IP 地址。

# 使用 nslookup 查询
nslookup www.google.com

# 使用 dig 获取详细信息
dig www.google.com

# 查看本地 hosts 文件
cat /etc/hosts   # Linux/macOS
type C:\Windows\System32\drivers\etc\hosts   # Windows
# Python DNS 解析
import socket

# 域名解析
ip = socket.gethostbyname('www.github.com')
print(f"github.com -> {ip}")

# 获取完整信息
info = socket.gethostbyname_ex('www.github.com')
print(info)  # (hostname, alias_list, ip_list)

# 反向解析
hostname = socket.gethostbyaddr('8.8.8.8')
print(hostname)  # ('dns.google', [], ['8.8.8.8'])

第六章 数据库基础 —— 持久化与查询

6.1 关系型数据库与 SQL
关系型数据库基于表和关系,使用 SQL(结构化查询语言)。

SQL 分类:

DDL(数据定义语言):CREATE, ALTER, DROP

DML(数据操作语言):SELECT, INSERT, UPDATE, DELETE

DCL(数据控制语言):GRANT, REVOKE

建表与约束:

-- 创建学生表
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT CHECK (age >= 0 AND age <= 150),
    email VARCHAR(100) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 创建课程表
CREATE TABLE courses (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100) NOT NULL,
    credits INT DEFAULT 3
);

-- 创建选课表(多对多关系)
CREATE TABLE enrollments (
    student_id INT,
    course_id INT,
    grade DECIMAL(3,2),
    PRIMARY KEY (student_id, course_id),
    FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE,
    FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
);

常用 SQL 查询:

-- 基本查询
SELECT * FROM students;
SELECT name, age FROM students WHERE age > 18 ORDER BY age DESC;

-- 聚合函数
SELECT COUNT(*), AVG(age), MAX(age), MIN(age) FROM students;

-- 分组查询
SELECT age, COUNT(*) FROM students GROUP BY age HAVING COUNT(*) > 1;

-- 多表连接(INNER JOIN)
SELECT s.name, c.title, e.grade
FROM students s
JOIN enrollments e ON s.id = e.student_id
JOIN courses c ON c.id = e.course_id;

-- 子查询
SELECT name FROM students 
WHERE id IN (SELECT student_id FROM enrollments GROUP BY student_id HAVING COUNT(*) >= 3);

-- 分页
SELECT * FROM students LIMIT 10 OFFSET 20;

6.2 索引的原理与使用
索引类似书的目录,可以加速查询但会降低写入性能。

B+ 树索引(InnoDB 默认):

-- 创建单列索引
CREATE INDEX idx_name ON students(name);

-- 创建复合索引(注意列顺序)
CREATE INDEX idx_age_name ON students(age, name);

-- 唯一索引
CREATE UNIQUE INDEX idx_email ON students(email);

-- 查看索引
SHOW INDEX FROM students;

-- 删除索引
DROP INDEX idx_name ON students;

索引失效场景:

-- 在索引列上使用函数
SELECT * FROM students WHERE YEAR(created_at) = 2024;  -- 索引失效

-- 隐式类型转换
SELECT * FROM students WHERE phone = 13800138000;  -- phone 是 varchar,索引失效

-- 使用 LIKE 以通配符开头
SELECT * FROM students WHERE name LIKE '%张三';  -- 索引失效

-- OR 条件中只要有一列无索引,全表扫描
SELECT * FROM students WHERE id = 1 OR age = 20;  -- age 无索引则全表

-- 复合索引不满足最左前缀
-- 对于 idx_age_name (age, name)
SELECT * FROM students WHERE name = '张三';  -- 索引失效

6.3 事务与 ACID
事务是一组 SQL 操作的逻辑单元,要么全部成功,要么全部失败。
image.png
事务隔离级别(从低到高):

READ UNCOMMITTED:脏读、不可重复读、幻读都可能

READ COMMITTED:避免脏读(PostgreSQL 默认)

REPEATABLE READ:避免脏读和不可重复读(MySQL 默认)

SERIALIZABLE:避免所有并发问题,性能最差

-- MySQL 事务示例
START TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 检查约束
SELECT balance FROM accounts WHERE id = 1;
-- 如果余额为负数,回滚
ROLLBACK;

-- 否则提交
COMMIT;

-- 设置隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

演示脏读、不可重复读、幻读:

-- 脏读(隔离级别 READ UNCOMMITTED)
-- 事务A: UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- 事务B: SELECT balance FROM accounts WHERE id = 1;  -- 读到未提交的修改
-- 事务A: ROLLBACK;  -- 事务B 读到脏数据

-- 不可重复读(READ COMMITTED 下可能发生)
-- 事务A: SELECT balance FROM accounts WHERE id = 1;  -- 100
-- 事务B: UPDATE accounts SET balance = 200 WHERE id = 1; COMMIT;
-- 事务A: SELECT balance FROM accounts WHERE id = 1;  -- 200,前后不一致

-- 幻读(REPEATABLE READ 下可能发生)
-- 事务A: SELECT COUNT(*) FROM students WHERE age > 18;  -- 5
-- 事务B: INSERT INTO students (name, age) VALUES ('new', 19); COMMIT;
-- 事务A: SELECT COUNT(*) FROM students WHERE age > 18;  -- 6,新增一行(幻影)

6.4 NoSQL 简介
NoSQL 适用于大规模数据、高并发、灵活模式的场景。
image.png

# Redis 示例(Python)
import redis

r = redis.Redis(host='localhost', port=6379, db=0)

# 字符串
r.set('key', 'value')
print(r.get('key'))  # b'value'

# 哈希
r.hset('user:1', mapping={'name': 'Alice', 'age': 25})
print(r.hgetall('user:1'))  # {b'name': b'Alice', b'age': b'25'}

# 列表(可用作队列)
r.lpush('queue', 'task1', 'task2')
print(r.rpop('queue'))  # b'task1'

# 设置过期时间(秒)
r.setex('temp', 10, 'expire soon')

来源:
http://uklgy.cn/

相关文章
|
4月前
|
存储 人工智能 自然语言处理
AI大模型工具深度运用实践:AI如何帮助企业获客?AI营销流程与智能体自动化应用案例解析
本文深度解析AI大模型与智能体在企业获客中的实战应用,涵盖AI内容营销、用户精准分析、销售助手提效、自动化营销流程及智能客服系统构建,揭示AI如何降本增效、赋能营销全链路,助力企业迈向智能化运营新阶段。(239字)
467 1
|
5月前
|
前端开发 JavaScript Serverless
阿里云宜搭对接使用完全指南:从连接到集成的全方位解析
本文系统性地阐述了阿里云宜搭低代码开发平台与外部系统对接的多种技术方案与实践路径。文章从宜搭平台的架构特性出发,深入讲解了连接器机制、远程API调用、数据源配置、服务回调、OpenAPI开放接口以及FaaS函数计算集成等六大核心对接方式。通过详细的配置步骤、丰富的代码示例(涵盖Java、Python、JavaScript等语言)和真实业务场景的剖析,帮助开发者全面掌握宜搭的集成能力。文章还涵盖了鉴权配置、跨域处理、性能优化、安全管控等高级话题,并提供了常见问题的解决方案。无论是简单的数据查询同步,还是复杂的业务流程编排,读者都能从中找到适合的对接策略与实施方法。
|
5月前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
2443 4
|
运维
ETCD系列之一:简介
本文介绍etcd使用场景,工作原理。
78480 161
|
5月前
|
Ubuntu Linux KVM
虚拟机搭建教程(二)
教程来源 https://zlpow.cn/ 本文详解Windows、Linux三大平台虚拟化实战:Windows下用VMware安装Ubuntu 24.04(含Tools与快照),VirtualBox部署CentOS Stream 9;Linux主机通过KVM命令行及virt-manager搭建高性能虚拟机,覆盖配置、联网、增强工具与管理全流程。
|
5月前
|
人工智能 弹性计算 运维
从零入门 OpenClaw 功能详解与阿里云部署保姆级教程
当下AI智能体已经从专业开发领域走入普通办公、个人生活与运维开发场景,OpenClaw作为目前人气极高的开源自动化智能体框架,凭借宽松开源协议、私有化部署特性、强大任务执行能力,收获大量使用者关注。
974 0
|
3月前
|
运维 安全 测试技术
宜搭自动化流程未触发?阿里云国际版注册:三步排查条件配置与权限
不少团队把宜搭表单和自动化流程接好后,却卡在一个尴尬环节:数据明明已提交,流程实例却纹丝不动。一条漏触发的流程,可能意味着审批延误、数据“静默丢失”甚至业务断点。宜搭自动化流程未触发排查,最忌讳一上来就推翻配置重做,应该先从现象里抓出条件逻辑和权限的交叉盲区。
363 24
宜搭自动化流程未触发?阿里云国际版注册:三步排查条件配置与权限
|
2月前
|
人工智能 DataWorks 监控
DataWorks AI助理实践:Flink作业健康度巡检
DataWorks AI助理(DataClaw)深度打通Flink等引擎层监控,支持Flink自动巡检作业失败事件、27项核心指标及2类系统事件,智能分级(P0-P3)并推送钉钉告警,实现任务全生命周期统一观测与异常闭环。
293 2