TIPS
Linux学习笔记
# Linux分类
- Ubuntu 界面华丽, 有完善的管理系统和软件支持
- centOs 很多公司在生产环境不是centOs, 来源于RHEL
- Debian 内核非常小, 非常稳定, 适用于硬盘空间小内存小的机器
- RedHat 基于Linux
Linux: FHS协议 (file system hierarchy standard) 文件层次化系统
根目录路径:

- /usr (Unix software resource) 软件主要执行程序
- /var (variable) 系统运行相关
- /bin 可执行文件
- /sbin 也是存放可执行文件, 只允许管理员
- /boot
- /dev
- /etc 安装的配置文件
- /home 用户目录 /root在根目录下
- /opt 第三方软件目录
# 常用命令
- cd 进入
- cd .. 回到上一级目录
- cd ~ 回到当前的主文件夹
- ls ll 查看文件
- ls -al 可以查看到隐藏文件
- mkdir 创建一个路径
- mkdir -p test1/test2 如果前面的路径没有则会自动创建
- rmdir 删除空的路径
- rm -rf 删除路径所有文件
# 文件权限
第一个字符
- 普通文件的文件权限第一个字符为 "-"
- 目录文件的文件权限第一个字符为 "d"
- 字符设备文件的文件权限第一个字符为 "c", 块设备文件的文件权限第一个字符为 "b"
- 符号链接文件的文件权限第一个字符为 "s"
后面分三组, 每组三个字符:
第一组: 表示当前所属用户的权限
第二组: 当前所属组的权限
第三组: 其他用户的权限
r 有权限读
w有权限写
x有权限执行
rwx: 二进制表示 4 2 1, 可以用一个数代表一组的权限, 比如3代表 -wx
pwd 展示当前所处的路径
vi编辑中
- h往左, j往下, k往上, l往右, 加数字表示往哪个方向移动多少
- 翻页: ctrl + F B 翻半页 Ctrl + D U
- + 光标移到下一个非空格行
- 0 回到行首 $回到行尾 G最后一行 gg开头一行
- / 向下查找最近的 ? 向上查找
- tail 文件 查看文件最后十行
- tail -f 文件 修改时会自动刷新
- tail -20f 查看20行
- cat 文件名 |grep "" 过滤带有关键字的行 也可以再加grep多层过滤
- chmod rwx 加权限
# HTTP协议
五层网络协议
- 应用层 (浏览器HTTP, FTP, DNS, SMPT, Telnet)
- 传输层 (TCP/UDP)
- 网络层 (IP, ICMP)
- 数据链路层 (如何传输)
- 物理层
七层网络协议
- 应用层
- 表示层 (加密格式转换)
- 会话层 (解除或者建立和其他节点的建立)
- 传输层
- 网络层
- 数据链路层
- 物理层
返回码
- 200 成功
- 404 没找到
- 302 重定向
- 502 服务器错误
- 304 多次请求出现
HTTP (hypertext transfer protoc)
- reque: 请求头, 数据体 (文本格式, 二进制格式 (带有分隔符)
- response: 返回头, 返回体
- cache control可否缓存
- public: 可以被任何中间服务器缓存, 包括服务器代理服务器
- private: 只能被一个东西缓存, 服务器可以, 代理服务器不能
- no-cache: 不要相信缓存, 使用缓存前要向服务器验证
- only-if-cached: 只要有缓存就不请求服务器
到期时间:
- max-age: 缓存的最大时间, 单位s
- max-stale: 表示客户端可以接受过期资源, 但不能超过自己所设的过期时间
- min-fresh: 表示客户端希望在指定时间内获得最新的响应
重新验证加载:
- must- revalidate 在使用缓存之前验证资源状态, 如果资源过期则不能使用
- proxy-revalidate: 和上面的相同, 适用于共享缓存
- no-store不适用缓存
- no-transform: 不许对缓存资源进行资源转换
# 后端的规范与思想
分层
web层 (接受和发送http请求, 封装)
业务逻辑层 (服务层: XXXService)
DAO层
DateBase (DB) : 存数据 业务: 对对象进行操作 如果要存储: 对象转为数据 如果要读取: 数据转为对象
持久层: 存在磁盘上
文件, 数据库
每层的命名:
- web层: LoginController (接受参数, 判断是否非法, 传给服务层)
- 服务层: LoginService (获取这个用户的密码, 进行比较)
- DAO: LoginDAO (从数据库获取数据, 并转换为对象)
- Domain: User
模块化
- Es6导入和导出
- Require ("") 引入模块, 如果是自己的则需要写全路径
- exports和module.exports开始都是指向同一个对象 (exports == module.exports 为true) , 如果修改属性则是都可以访问, 如果直接修改对象则导出的永远是 module.exports
Nodejs的模块是运行在一个函数中, 相当于有五个参数 exports, require, module, __filename, __dirname
# Socket
事件
- connect
- data: 发送的信息
- end
- timeout
- error
- close
属性
- remoteAddress 远端的地址
- remotePort 端口
- localAddress
- localPort
方法
- setTimeout
- write: 发送消息
- setEncoding
- end: 关闭
# Server
事件
- server.on("",function(){})
- listening: 服务启动触发
- connection: 有新的连接触发, 有一个参数socket
- close: 关闭
- error: 出错
方法
- listen: 启动监听
- close: 关闭
- address: 查看地址
# fs文件系统
fs.write(path, data, options, callback)
options: 可选参数, 该参数是一个对象, 用于指定在写入文件时需要使用的选项, 该对象包括的属性有flag属性, mode属性, encoding属性
- flag属性表示对该文件执行何种操作
- mode属性可以用于指定该文件被打开时的读写权限, 默认值为066 (可读可写 rwx) , 该属性值是用一个3位数字表示文件或目录所有者, 所属组以及其他人的读写权限, 1表示可执行权限, 2表示可写权限, 4表示可读权限
- encoding属性可以用于指定以何种字符编码方式将内容写入到文件中, 默认的编码方式是"utf8", 也可以改成"base64", "ascii"或者其他的字符编码方式
flag参数:
| 参数 | 说明 |
|---|---|
| r | 以读取模式打开文件, 如果文件不存在抛出异常 |
| r+ | 以读写模式打开文件, 如果文件不存在抛出异常 |
| rs | 以同步的方式读取文件 |
| rs+ | 以同步的方式读取和写入文件 |
| w | 以写入模式打开文件, 如果不存在则创建 |
| wx | 类似 w, 但是如果路径存在, 则文件写入失败 |
| w+ | 以读写模式打开文件, 如果文件不存在则创建 |
| wx+ | 类似 wx+, 但是如果路径存在, 则文件读写失败 |
| a | 以追加模式打开文件, 如果文件不存在则创建 |
| ax | 类似 a, 但是如果路径存在, 则文件追加失败 |
| a+ | 以读取追加模式打开文件, 如果文件不存在则创建 |
| ax+ | 类似 a+, 但是如果路径存在, 则文件读取追加失败 |
| 参数 | 可读 | 可写 | 可创建 | 可追加 |
|---|---|---|---|---|
| r | √ | |||
| r+ | √ | √ | ||
| rs | √ | |||
| rs+ | √ | √ | ||
| w | √ | √ | ||
| wx | √ | √ | ||
| w+ | √ | √ | √ | |
| wx+ | √ | √ | ||
| a | √ | √ | √ | |
| ax | √ | √ | √ | |
| a+ | √ | √ | √ | √ |
| ax+ | √ | √ | √ | √ |
TIPS
r表示读, w表示写, a表示可追加写入
带s表示同步, 带x表示排他性, 意思是自己操作的时候别人不能操作, +表示如果是读则还可以写, 如果是写则还可以读
# 数据库数据类型
- 整数 int
- 长整数 bigint(21) 括号里面为长度, 一般用21
- 浮点数 float
- 双精度浮点数 double
- 字符串 varchar(16)
- 文本 text
# 创建表SQL语句
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'student id',
`stu_num` int(11) NOT NULL COMMENT 'student num',
`name` varchar(32) NOT NULL COMMENT 'student name',
`age` int(11) NOT NULL COMMENT 'student age',
`class` int(11) NOT NULL COMMENT 'student class',
PRIMARY KEY (`id`),
UNIQUE KEY `student_stu_num_uindex` (`stu_num`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
2
3
4
5
6
7
8
9
- ENGINE表示数据库引擎, 主要用两个: MYISAM和InnoDB
- MYISAM: 适用于读很多, 写非常少, 写是表级锁
- InnoDB: 适用于读较多, 写也较多, 行级锁
分别修改数据库, 表和字段的编码格式
alter database school character set utf8;
alter table student default character set utf8;
alter table student convert to character set utf8;
2
3
-- 计算查询到的个数
select count(1) from student;
-- 对所有的年龄求和
select sum(age) from student;
-- 对某个字段求平均数, as是给查询的字段去一个新的字段名
select avg(age) as avg_age from student;
-- 按照班级分组, 并求每个组的人数
select count(1) from student group by class;
-- limit后面有两个参数, 第一个表示偏移量 (偏移量为页数减一乘以每一页的个数)
-- 第二个表示每一页多少个, 用作分页显示, 即表示一页两个, 2, 2表示前面偏移两个, 即第二页再显示两个
select * from student limit 2, 2;
-- 按id倒序排列
select * from student order by id desc ; order by id desc
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
web层引 service 层, service 层引 dao 层, dao 层访问数据库