对于一个电脑新手来讲,与其说 Markdown 是一个专门为文档而生的编程语言,还不如是个文档规范,相比 Word 的繁杂,Tex 的晦涩,它就是个非常简单的文字游戏规则。

Read more »

1. 程序注释

  • “;”开头,右边为注释内容

2. 保留字

  • 指令
  • 伪操作
  • 操作符
  • 预定义符号

符号指令系统

指令 说明
ADC 带进位加法(and with carry)
ADD 二进制数加法(add)
DEC 减一(decrease 1)
DIV 无符号数除法(divide)
IDIV 带符号数整数除法(integer divide)
IMUL 带符号数整数乘法(integer multiplication)
INC 加一(increase 1)
MUL 无符号数乘法(multiplication)
NEG 求补(negative)
SBB 带借位减法(substract with borrow)
SUB 二进制减法(substact)
XADD 交换并相加

PC 硬件的基本特征

1. 1、计算机存储单位

  1. 位 bit(Binary digit)) > 一个位表示 0 或 1
  2. 字节 > 一组 9 个相关的位称为字节,它代表内存储器和外部设备的一个存储单元
    • 每个字节由 8 个数据位和 1 个奇偶位组成(奇偶校验
    • 一个字节中的各位从右到左是按 0 到 7 编号的
    • 在存储器中的每个字节都有一个唯一的地址。第一个字节在最低的存储器单元中,编号为 0 , 第二个字节编号为 1
  3. 字 > 2 字节(16位)数据项
  4. 双字 > 4 字节(32位)数据项
  5. 匹字 > 8 字节(64位)数据项
  6. 小段 > 16字节(128位)区
  7. 千字节(KB) > 2^10等于1024字节
  8. 兆字节(MB) > 2^20等于1048576字节

2. 2、二进制数系统

位的集合可以表示任何数字的值。 - 二进制数的值是由为 1 的位及其相关的位置所决定的。

位编号 11 10 9 8 7 6 5 4 3 2 1 0
位的值 1 1 1 1 1 1 1 1 1 1 1 1
位置的值 2048 1024 512 256 128 64 32 16 8 4 2 1

3. 3、十六进制表示

十进制 二进制 十六进制 峘进制 huán
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C suì
13 1101 D
14 1110 E yuè
15 1111 F
n+1位定点数表示 \(D \geq 2^n\) \(D<2^n\) \(D \geq 0\) \(D \leq 0\) \(\times 2,D<0\) \(\div 2,D<0\) \(\times 2,D>0\) \(\div 2,D>0\)
无符号数 \(D\) \(D\) \(D\) 不存在 不存在 不存在 低位补0 高位补0
原码 \(2^n-D\) \(D\) \(D\) \(2^n-D\) 低位补0 符号位后补0 低位补0 高位补0
反码 \(D-(2^{n+1}-1)\) \(D\) \(D\) \(D+(2^{n+1}-1)\) 低位补1 符号位后补1 高位补0 低位补0
补码 \(D-2^{n+1}\) \(D\) \(D\) \(D+2^{n+1}\) 低位补0 符号位后补1 低位补0 高位补0
移码 \(D-2^n\) \(D-2^n\) \(D+2^n\) \(D+2^n\)

\([A+B]_补=[A]_补+[B]_补\) \([A-B]_补=[A]_补+[-B]_补\)

4. 逻辑门运算

A NOT
A \(\overline{A}\)
0 1
1 0
符号特征 三角形小圆圈
A B AND OR NAND NOR XOR XNOR
A B 与非 或非 异或 同或
A B \(A \cdot B\) \(A + B\) \(\overline{A \cdot B}\) \(\overline{A + B}\) \(A \oplus B\) \(A \odot B\)
0 0 0 0 1 1 0 1
0 1 0 1 1 0 1 0
1 0 0 1 1 0 1 0
1 1 1 1 0 0 0 1
输入端是直线 输入端是曲线 与门小圆圈 或门小圆圈 或门输入端多条曲线 异或门小圆圈

\(\overline{ A + B }=\overline{A} \cdot \overline{B}\) \(\overline{A \cdot B} = \overline{A} +\overline{B}\) ## 5. 带标志加法器

向高位的进位 \(C_i=A_i \cdot B_i+(A_i \oplus B_i) \cdot C_{i-1}\) 本位和 \(S_i=A_i \oplus B_i \oplus C_{i-1}\) 有符号数溢出 \(OF=C_n \oplus C_{n-1}\) 有符号数为负 \(SF=S_n\) 零标志 \(ZF=\sum S\) 无符号数溢出 \(CF=C_n \oplus C_0\)

6. 4、PC 的组成

PC 的主要组成部分是它的主板。它包括处理器协处理器主存储器接插件以及为可选电路卡用的扩展槽。这些槽和接插件为下面部件提供了出入口,比如只读存储器 ROM、随机存取存储器 RAM、硬盘、CD-ROM 设备、附加的主存储器、显示设备、键盘、鼠标、并行与串行设备、声音合成器以及高速缓冲存储器等。处理器利用高速缓冲存储器,减少对较低速主存储器的访问。

  1. 处理器

    处理器,也称中央处理器或 CPU ,用来完成所有的指令执行与数据处理。

    • 8088

6.1. 段寄存器

标志 名称
CS 代码段(Code Segment)
DS 数据段(Data Segment)
SS 堆栈段(Stack Segment)
ES 附加段指针(Extra Segment)
FS 附加段指针
GS 附加段指针

6.2. 通用寄存器

寄存器 名称 说明
EAX 主累加器(accumulator)寄存器
EBX 基址(base)寄存器
ECX 计数(count)寄存器
EDX 数据(data)寄存器
EDI 目的变址(Destination Index)寄存器
ESI 源变址(Source Index)寄存器
ESP 堆栈指针(Stack Pointer)寄存器
EBP 基址指针(Base Pointer)寄存器
EIP 指令指针(Instruction Pointer)寄存器 下一条指令的偏移地址

6.3. 标志寄存器

位编号 符号 标志(Flag) 置位符号 1 复位符号 0
0 CF 进位(carry)标志 CY(carry) NY(no carry)
1 1
2 PF 奇偶校验(parity)标志 PE(parity even) PO(parity odd)
3 0
4 AF 辅助进位(auxiliary carry)标志 AC(auxiliary carry) NA(no auxiliary)
5 0
6 ZF 零(zero)标志 ZR(zero) NZ(no zero)
7 SF 符号(sign)标志 NG(negative) PL(plus)
8 TF 陷阱(trap)标志
9 IF 中断允许(interrupt)标志 EI(enable interrupt) DI(disable interrupt)
A DF 方向(direction)标志 DN(down) UP(up)
B OF 溢出(overflow)标志 OV(overflow) NV(no overflow)
C IOPL I/O 特权级(I/O Privilege Level)
D IOPL I/O 特权级(I/O Privilege Level)
E NT 嵌套任务(Nested Task)标志
F 0
10 RF 恢复(Resume)标志
11 VM 虚拟8086模式(Virtual 8086 Mode)
12 AC 对齐检查(Alignment Check)
13 VIF 虚拟中断(Virtual Interrupt)标志
14 VIP 虚拟中断挂起(Virtual Interrupt Pending)
15 ID 标志(Identification)标识

1. Eclipse 下载

2. JAVA SE 下载(Eclipse 4.7 之后 jdk 版本最低为 1.8)

3. Eclipse 安装语言包

  • Babel Archived downloads 使用“”>Help“Install New Software...”打开安装向导 添加Babel p2存储库:http://download.eclipse.org/technology/babel/update-site/R0.16.0/photon/ 选择/安装您选择的语言包(Babel Language Packs in Chinese (Simplified)),一路同意 完成后,重启Eclipse,你应该得到一个翻译的Eclipse

  • eclipse.ini-Eclipsepedia

官网

  • expires

Nginx设置expires设定页面缓存时间 不缓存或一直使用缓存

版本简介

  • Mainline 主线开发版本,版本号为奇数
  • Stable 当前稳定版本,版本号为偶数
  • Legacy 历年稳定版本

1. 源码安装

1
2
3
4
5
6
# wget http://nginx.org/download/nginx-1.14.0.tar.gz
# tar -zxvf nginx-1.14.0.tar.gz
# cd nginx-1.14.0
# ./configure --with-http_ssl_module --with-http_v2_module
# make

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ using system zlib library

nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"

2. Nginx 操作命令

  • nginx -s reload 重新加载配置文件
  • nginx -s reopen 重新打开日志文件
  • nginx -t 测试 nginx 配置文件是否正确
  • nginx -t -c /path/to/nginx.conf 测试 nginx 配置文件是否正确
  • nginx -s stop 快速停止 nginx

3. 附:

  • NGINX 官网 www.nginx.org
  • NGINX docs nginx.org/en/docs
  • NGINX configure nginx.org/en/docs/configure.html
  • tar 命令 man.linuxde.net/tartar

JSON(JavaScript Object Notation) 是一种轻量级数据交换格式,可以对复杂数据进行表达和存储,易于阅读和理解。

Read more »

1. 重定向

在 shell 中输入命令运行程序,程序的正常输出信息(标准输出)和一些出错信息(标准错误)会通过 shell 显示在屏幕上。

有时候我们并不需要把这些输出信息(包括标准输出和标准错误)显示在屏幕上,或需要把这些输出信息保存在一个文件中,这时就需要进行输出重定向。输入重定向也是如此。

执行重定向操作的是 shell ,而不是程序。 shell 把重定向符号解释成指令,将标准输出(或标准错误)指向文件,而不是当前显示设备。输入重定向也是如此。

shell将<、>、>>解释成指令,用来把一条命令的输入或输出重定向到一个文件。

类型 操作符 用途
重定向标准输入 < 将命令中接收输入的途径由默认的键盘更改为指定的文件
重定向标准输出 > 以替换的方式将命令的执行结果输出到指定的文件,而不是直接显示在屏幕上
- >> 将命令执行的结果追加输出到指定文件
重定向标准错误 2> 清空指定文件的内容,并将标准错误信息保存到该文件中
- 2>> 将标准错误信息追加输出到指定的文件中
重定向标准输出和标准错误 &>或>& 将标准输出、标准错误的内容全部保存到指定的文件中,而不是直接显示在屏幕上

2. 管道

shell在解释命令遇到 | 时会创建管道,并创建两个进程,把标准输入输出重 定向到管道,前一个进程向管道写数据,后一个进程从管道读数据。

查找名称含有gcc的文件并使用wc计数 sudo find / -name gcc | wc –l

查找名称含有ssh的进程 ps -ef | grep ssh

分页查看内容 ls –l –R /usr/share | less

排序文件 ls | sort –r

3. 脚本

4. bash快捷键

按键 含义
^A 光标移到行首
^B 光标非破坏退格
^C 中断前台程序
^D 退出shell
^E 光标移到行尾
^F 光标右移
^G
^H
^I
^J 新行
^K 删除光标后所有字符
^L 清屏
^U 删除光标前所有字符
^R 搜索历史命令,利用关键字
ALT+. 引用上一个命令的最后一个参数
ESC+. 引用上一个命令的最后一个参数
!$ 引用上一个命令的最后一个参数

1. 阅读基础

2. 配置虚拟环境

表中命令从上往下执行即可,部分需要先切换目录,下同。本文为学习笔记,仅供参照,详细流程请阅读参考文章和官方文档。

操作 命令
- 创建虚拟环境 python3 -m venv /www/venv
- 激活虚拟环境 source /www/venv/bin/activate
- Windows下激活 .\venv\Scripts\activate
- 使用 uwsgi 部署 pip install uwsgi
- 使用 Gunicorn 部署 pip install gunicorn
- 安装环境包 pip install -r requirements
- 生成环境包 pip freeze > requirements.txt
- 退出环境 deactivate

3. Django 项目开发

操作 命令 备注
- 创建 django 项目 web django-admin startproject web 生成项目目录
- 创建应用 count python manage.py startapp count 开发使用
- 创建超级账户 python manage.py createsuperuser 开发、部署使用
- 生成迁移文件 python manage.py makemigrations 在 migrations 生成文件
- 执行迁移 python manage.py migrate
- 同步静态文件 python manage.py collectstatic 部署使用
- 启动开发服务器 python manage.py runserver 开发、测试使用

4. 配置 setting.py

- LANGUAGE_CODE = 'zh-Hans'
- TIME_ZONE = 'Asia/Shanghai'(视情况配置)
- ALLOWED_HOSTS = ['公网ip',域名'](部署前配置)
- DEBUG = False(NGINX 后配置)

5. 部署准备

- 删除 migrations 下数字开头的所有 python 文件
- uwsgi.ini
1
2
3
4
5
6
7
8
9
[uwsgi]
chdir = /www/web
module = web.wsgi:applocation
home = /www/venv
socket = 172.18.173.33:8099
stats = 172.18.173.33:9191
master = true
processes = 5
vacuum = true

6. 部署测试

- 开发服务器测试 `python36 manage.py runserver 172.18.173.33:80`
- uwsgi 部署测试 `uwsgi uwsgi.ini`
- Gunicorn 部署测试 `gunicorn -b 172.18.173.33:80 web.wsgi`

7. 配置 nginx

1
2
3
4
# 安装 uwsgi
pip3 install uwsgi
# 安装 nginx
yum install nginx

测试

nginx -t

8. 参考文章

1. 口令登录

1
ssh [-p 22] [user@]host

说明: - 默认端口22可省略 - 用户名与本地用户名相同时可省略

2. 公钥登录

1. 生成公钥
1
2
3
# 格式 
# ssh-keygen -t rsa -C "通常为邮箱" -f "私钥文件绝对路径"
ssh-keygen

说明: - 私钥口令 passphrase,若担心私钥的安全,设置一个 - 公钥 id_rsa.pub,私钥 id_rsa 2. 复制公钥至主机

1
2
3
cat pub_file_path | ssh  root@host 'cat >> .ssh/authorized_keys'
# 首次登录使用,覆盖已有的 id_rsa 之后即可无密码登录,如果设置了 passphrase 登录时需要输入 passphrase
ssh-keygen; cat ~/.ssh/id_*.pub | ssh root@host 'cat >> .ssh/authorized_keys'; ssh user@host
1
2
3
4
5
6
host ecs(主机别名)
HostName 主机地址
User 用户名
Port 22(sshd 端口号)
IdentitiesOnly yes
IdentityFile 私钥路径
1
2

PermitRootLogin yes
0%