forked from colinlet/PHP-Interview-QA
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQA.md
202 lines (136 loc) · 6.79 KB
/
QA.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# 问题与简答
## Linux 篇
### Linux 目录结构
```shell
/
├── bin #存放二进制可执行文件,常用命令一般都在这里
├── boot #存放用于系统引导时使用的各种文件
├── dev #用于存放设备文件
├── etc #存放系统管理和配置文件
├── home #存放所有用户文件的根目录
├── lib #存放着和系统运行相关的库文件
├── media #linux 系统会自动识别一些设备,当识别后,linux 会把识别的设备挂载到这个目录下
├── mnt #用户临时挂载其他的文件系统
├── opt #额外安装的可选应用程序包所放置的位置
├── proc #虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息
├── root #超级用户的主目录
├── run #是一个临时文件系统,存储系统启动以来的信息
├── sbin #存放二进制可执行文件,只有 root 才能访问
├── srv #该目录存放一些服务启动之后需要提取的数据
├── sys #存放内核相关文件
├── tmp #用于存放各种临时文件,是公用的临时文件存储点
├── usr #用于存放系统应用程序
└── var #用于存放运行时需要改变数据的文件,比如服务的日志文件
```
### Linux 基础
查看系统信息、内存信息、磁盘信息、负载信息、路由信息、端口信息、进程、登录用户、关机、重启、系统时间、用户管理、文件权限、压缩解压
### 命令与文件查找
#### which-寻找可执行文件
```text
[root@localhost ~]# which php
/usr/bin/php
```
#### whereis-特定目录寻找
```text
[root@localhost ~]# whereis php
php: /usr/bin/php /usr/lib64/php /etc/php.d /etc/php.ini /usr/include/php /usr/share/php /usr/share/man/man1/php.1.gz
```
#### find-直接搜索硬盘
```text
[root@localhost ~]# find / -name php-fpm
/run/php-fpm
/etc/sysconfig/php-fpm
/etc/logrotate.d/php-fpm
/var/log/php-fpm
/usr/sbin/php-fpm
```
### 数据流重定向
#### 数据流
数据流分为三类:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)
> /dev/null:是一个特殊的设备文件,这个文件接收到的任何数据都会被丢弃。因此,null 这个设备通常也被成为位桶(bit bucket)或黑洞
#### 管道命令
可以处理前一个标准输出信息,对标准错误输出没有处理能力
#### 截取命令
- cut:将以行为单位的字符串进行切割
- grep:分析一行字符,截取所需要的特定信息
#### 排序命令
- sort:可以依据不同的数据类型进行排序
- uniq:数据去重
- wc:统计行数、字符数
#### 参数转换
- xargs:将标准输入转换成命令行参数
### sed
sed 是一个管道命令,用于分析标准输出。支持数据的替换、删除、新增、截取特定行等功能
### awk
awk 是一个数据处理工具,sed 常常用于一整行的数据处理,awk 则倾向于将一行数据分成数据部分来处理。因此,awk 适合小型的数据进行局部处理
### 计划任务
|代表意义|分钟|小时|日期|月份|星期|指令|
|-|-|-|-|-|-|-|
|数字范围|0-59|0-23|1-31|1-12|0-7|command|
|特殊符号|意义|示例|
|-|-|-|
|\*|表示任何时刻|\*|
|,|表示分隔时段|0 3,6 \* \* \* command(3:00与6:00)|
|-|表示一段时间范围|20 8-12 \* \* \* command(8:20~12:20)|
|/n|每隔 n 段时间|*/5 \* \* \* \* command(每五分钟进行一次)|
### Vim
#### 操作模式
normal、insert、command、visual、replace
#### 翻页与移动
- `<c-f>`:向下移动一页 (相当于:ctrl + f)
- `<c-d>`:向下移动半页
- `<c-b>`:向上移动一页
- `<c-u>`:向上移动半页
`h`、`j`、`k`、`l`:`←`、`↓`、`↑`、`→`
- `nh`:向左移动 n 个字符(四个方向均可)
- `^`:移动到行首
- `$`:移动到行尾
- `nG`:移动到指定行数
- `gg`:移动到文档第一行,相当于 1G
- `G`:移动到文档最后一行
#### 查找与替换
- `/word`:输入`/`会进入 command 模式,在输入关键字回车进行搜索
- `?word`:`/`是向光标以后搜索,`?`是向前搜索
- `n`:根据搜索方向定位到下一个匹配目标
- `N`:与`n`相反方向定位匹配目标
- `:n1,n2s/word1/word2/g`:n1,n2 表示数字,替换n1行到n2行的单词
- `:1,$s/word1/word2/g`:全文替换,也可以写成`:%s/word1/word2/g`
- `:1,$s/word1/word2/gc`:全文替换,并出现确认提示
### 负载查看
使用 uptime、w、top 命令查看
`load average: 0.00, 0.01, 0.05`,系统的平均负荷,对应 1分钟、5分钟、15分钟
X 个 CPU 的电脑,可接受的系统负荷最大为 `X.0` 。将`15分钟`系统负荷作为服务器正常运行的指标
### Linux 内存管理
### 函数
malloc分配虚拟内存
mmap虚拟内存映射方法
hugepage虚拟内存映射方法,分配2MB或1GB
#### 虚拟内存
一种实现在计算机软硬件之间的内存管理技术,将程序使用到的内存地址映射到计算机内存中的物理地址
32位虚拟内存大小为0-4g,一个内存也默认大小为4kb
##### 优点
提高内存安全性
##### 特点
每个进程都有它自己的虚拟内存
虚拟内存的大小取决于系统的体系结构
### 进程、线程、协程区别
#### 进程
是一个动态概念;由程序、数据和进程控制块组成。系统进行资源分配、调度和管理的最小单位。
#### 线程
是进程的活动成分,是处理器分配资源的最小单位;可以共享进程的资源与地址空间。
#### 协程
协程是一种用户态的轻量级线程,又称微线程,英文名 Coroutine,协程的调度完全由用户控制
#### 并发执行机制
把一个处理器划分为若干个短的时间片,每个时间片依次轮流地执行处理各个应用程序,由于一个时间片很短,相对于一个应用程序来说,就好像是处理器在为自己单独服务一样,从而达到多个应用程序在同时进行的效果。
#### 多线程原理
多线程就是把操作系统中的这种并发执行机制原理运用在一个程序中,把一个程序划分为若干个子任务,多个子任务并发执行,每一个任务就是一个线程
### 进程间通信与信号机制
#### 通信方式
信号量、消息队列、共享内存、信号、管道、套接字
#### 信号机制
信号是操作系统中进程间通讯的一种有限制的方式,是一种异步的通知机制,用来提醒进程一个事件已经发送
- SIGHUP:控制台操作
- SIGINT:终止进程,`Ctrl + C`
- SIGKILL:终止进程,`kill -9`
- SIGSTOP:停止进程的执行
- SIGCONT:恢复进程的执行