置顶「Linux/UNIX系统编程」检测进程的存在

#### 1. 发送空信号 &emsp;使用`kill()`时将`sig`(信号编码)指定为 0(空信号),可以检测指定进程 ID 的进程是否存在。<br><p></p> - 若调用失败,且`errno`为`ESRCH`,则说明目标进程不存在; - 若调用失败,且`errno`为`EPERM`,则说明进程存在,但无权向目标进程发送信号; - 若调用成功,则说明进程存在且有权向进程………


置顶「网络编程」Json Web Token(JWT)

### 一、身份认证 &emsp;常见的服务器端身份认证机制有两种,分别为:<br><p></p> #### 1.基于 session 的认证机制 &emsp;HTTP 是一种无状态的协议,这意味着若无登录态维持机制,则每次请求时都需要提交用户名与密码进行身份验证,而 session 机制就是用于在服务器端记录用户的登录状态。<br><p></p> &emsp;session 是一串在服务器生成………


置顶「Django」基于类的视图

&emsp;对于视图层,除了可以用函数作为视图(`FBV`),还可以用类作为视图(`CBV`),即在类中定义方法对应 http 的各种请求方法。使用 CBV 可以使用类具有的一些特性,如继承、多态等。 - 所有类视图在映射到 url 时,都需调用视图的`as_view()`类方法。 ```python path("/index",views.MyView.as_view(),name="MyVi………


「数据库」MySQL 游标

&emsp;游标是一种指针,能够用于遍历包含多条数据记录的结果集。<br><p></p> 游标的特性: - 只读 - 不滚动:游标只能向一方向前进,且不可跳过任一行 <p style="margin-top:-20px">&emsp;</p> 游标的优点: - 允许程序对于查询语句返回的结果集中的每一行独立地执行相同或不同的操作,而不是对整个集合执行同一个操作; <p style="mar………


「数据库」MySQL 存储过程

&emsp;MySQL 支持四种类型的可执行对象: - 存储函数:返回一个能用于 SQL 表达式的计算结果; - 存储过程:可被外部程序调用的一段代码,经编译创建并保存在数据库中; - 触发器:在特定的表被修改时自动执行的程序; - 事件:周期性执行的一段代码 <p style="margin-top:-25px">&emsp;</p> &emsp;存储过程与存储函数很相似,但它们有如下………


「数据库」数据库的四大特性与四个隔离级别

### 四大特性 ##### 1. 原子性(Atomicity) &emsp;事务包含的所有操作要么全部成功,要么全部失败回滚。 <br> ##### 2. 一致性(Consistency) &emsp;事务执行之前与执行之后都必须处于一致性状态,即事务不能改变数据的完整性。<br><p></p> &emsp;例:A 有 200 块钱,B 有 300 块钱,当 A 转了 100 块给 B 之后………


「数据库」数据库设计的三大范式

&emsp;为简历冗余较小、结构合理的数据库,设计数据库时需遵循一定规则,即范式。范式是某一种设计要求的总结。<br><p></p> &emsp;实际开发中最常见的范式有三种: <p style="margin-top:-25px">&emsp;</p> #### 1. 第一范式(1NF) &emsp;第一范式是最基本的范式,**要求数据库表的每一列都是不可分割的原子数据项**。**第一范式能够………


「网络编程」HTTPS 原理分析

&emsp;HTTP 请求都是明文传输的,若 HTTP 请求被拦截,则容易泄露请求中的敏感数据。为了解决这个问题,Netscape 公司制定了 HTTPS 协议用于加密传输。HTTPS 协议也是一种应用层协议,本质上是在 HTTP 与传输层之间加一层 SSL/TLS 协议,其结构如下: <center><img src="/media/blog_image/file_1608025528000………


「Linux/UNIX系统编程」线程:更多细节

&emsp;Linux 上有两种 POSIX 线程实现:LinuxThreads 与 NPTL。 <br> ### 一、线程栈 &emsp;创建线程时,都会创建一个线程栈,大小固定。<br><p></p> &emsp;偶尔,也需要改变线程栈的大小。在通过线程属性对象创建线程时,调用函数`pthread_attr_setstacksize()`可设置线程属性,从而设置线程栈的大小。而使………


「Linux/UNIX系统编程」线程:线程取消

&emsp;有时候,需要将一个线程取消,即向线程发送一个请求,要求其立即退出。<br><p></p> &emsp;遭到取消而终止的进程若尚未分离,则为了防止变为僵尸进程,必须由其他线程进行连接(join)。连接之后,返回至`pthread_join()`中第二个参数的将是特殊值 PTHREAD_CANCELED。 <br> ### 一、取消一个线程 &emsp;`pthread_cancel(………


「Linux/UNIX系统编程」线程:线程安全和线程存储

&emsp;想要实现线程安全,一般的做法有: 1. 同步(使用互斥量保护临界区中对全局或静态变量的访问) 2. 仅调用可重入函数(即不使用全局或静态变量的函数) 3. 线程特有数据 4. 线程局部存储(对全局或静态变量进行拷贝) &emsp;以下逐一介绍: <br> ### 一、 线程安全(可重入性) &emsp;若函数同时供多个线程安全调用,则称之为线程安全函数。<br><p></p>………


「Linux/UNIX系统编程」线程:线程的同步与协同

### 一、保护对共享变量的访问:互斥量(同步) &emsp;线程的优势之一在于:能够通过全局变量共享信息。不过这种便捷需要付出额外的同步代价。<br><p></p> &emsp;为避免线程更新共享变量时所出现的问题,必须使用 **互斥量** 来确保同时仅有一个线程可以访问某项共享资源。<br><p></p> &emsp;互斥量有两种状态:已锁定和未锁定。任何时候至多只有一个线程可以锁定该………


「Linux/UNIX系统编程」线程

### 一、概述 &emsp;同一程序中的所有线程会共享同一份全局内存区域,其中包括初始化数据段(.data)、未初始化数据段(.bss),以及堆栈内存段。多线程程序内存布局示例: <center><img src="/media/blog_image/微信截图_20201201012959646.png" width="420px" style="margin-top:20px;margi………


「Linux/UNIX系统编程」进程的创建与程序的执行

### 一、进程记账 &emsp;打开进程记账功能后,内核会在每个进程终止时将一条记录信息写入系统级的进程记账文件。这条记账记录包含了内核为该进程维护的多种信息,包括终止状态以及消耗的 CPU 时间。<br><p></p> &emsp;如果进程的信息并未由父进程监控,则可用使用进程记账来获取。<br><p></p> &emsp;Linux 的进程记账属于可选内核组件,可通过 CONFIG_BSD………


「Linux/UNIX系统编程」程序的执行

### 一、执行新程序 execve() &emsp;系统调用`execve()`能将新程序加载到某一进程的内存空间,并丢弃旧有程序的代码段、数据、栈以及堆段。<br><p></p> &emsp;在执行了各种 C 语言函数库的运行时启动代码以及程序的初始化代码后,新程序会从`main()`函数处开始执行。 ```c #include <unistd.h> int execev(co………


「Linux/UNIX系统编程」进程的终止与子进程的监控

### 一、进程的终止 _exit()/exit() &emsp;通常,进程有两种终止方式: - 异常,由信号引发,可能产生核心转储 - 使用`_exit()`系统调用正常终止 - 从 main 函数中返回(显式或自动),通过`return n`返回相当于执行`exit(n)`调用,因调用`main()`的运行时函数会将`main()`的返回值作为`exit()`的参数。 ………


「Linux/UNIX系统编程」进程的创建

### 一、创建新进程 fork() &emsp;`fork()`创建子进程,**子进程获得父进程的<u>数据段</u>、<u>堆</u>、<u>栈</u>和<u>执行文本段</u>的拷贝**。 ```c #include<unistd.h> pid_t fork(void); // In Parent:returns ID of child on success, or -1 o………


「Linux/UNIX系统编程」文件 I/O 缓冲

&emsp;在操作磁盘文件时,出于效率考虑,系统调用 I/O 和 C 标准库 I/O 函数(stdio函数)都会对数据进行缓冲。<br><p></p> &emsp;对于系统调用 I/O 而言,一次磁盘操作分为两个步骤: 1. 将磁盘数据读取到内核缓冲区 2. 将数据从内核缓冲区读取到用户空间缓冲区 <br><br> ### 一、文件 I/O 的内核缓冲:缓冲区高速缓存 &emsp;**系统调………


「Linux/UNIX系统编程」文件 I/O 模型

### 一、文件描述符 &emsp;文件描述符是一个非负整数。所有执行 I/O 操作的系统调用都需要使用文件描述符,以指代打开的文件。<br><p></p> &emsp;每个进程都拥有三个特殊的描述符,称标准文件描述符: <center><img src="/media/blog_image/file_1606982782000.png" width="675px" style="marg………


「网络编程」服务器端 I/O 模型

&emsp;Unix/Linux 服务端编程的场景下,有 5 种常见的 I/O 模型: - 阻塞式 I/O - 非阻塞式 I/O - I/O 复用 - 信号驱动式 I/O - 异步 I/O <p style="margin-top:-15px">&emsp;</p> #### 一、阻塞式 I/O &emsp;在默认情况下,所有套接字都是阻塞的。 <cente………