此文章仅做参考,或许会有错误出现。
面试问题:
你对http协议的理解?
是互联网上应用最广泛的一种超文本传输协议,所有的www文件都必须遵守这个协议,目的是为了提供一种发布和接收html页面的方法,是一个客户端和服务器端的请求和应答标准,也就是TCP,通过使用web浏览器,网络爬虫等其他工具。客户端发起一个到服务器端指定接口的http请求,(默认端口80),这个客户端一般称为用户代理(user agent) 可以通过浏览器进行抓包,分析网络数据包的内容
说说百度搜索的过程
当输入框内容发生改变时,即时向数据库发送请求,返回关键字的接口,进行检索排序,然后输出接口内容
说说你对restful API的理解
< Get/Post/Put/Delete 对应数据库的增删改查
说说常用的http状态码
200 成功 300 重定向 400 客户端请求错误(服务器未能理解请求) 403 用户没有权限,禁止访问 404 服务器无法找到被请求的页面 500 服务器处理错误(请求未完成,服务器遇到未知错误) 503 服务不可用 服务器维护或者过载
常用的抓包工具
< chrome浏览器
如何跟后端调接口
- 自己制作模拟数据
- 使用mock模拟数据生成器
用过mock没有
有/没有
工作流程
1外包
- 需求确认(外包,自身产品)
- 产品部门-产品原型图
- 制定开发计划(前端-后端-UI)
- 后端架构师:系统架构设计(数据库,中间件(消息队列),web服务器,开发框架,负载均衡,安全(防火墙),部署(人工,自动化),接口设计)制定接口
- 前端:切图,写页面,写逻辑,模拟数据(mock数据)
- 写接口,单元测试。测试环境更新,前后端联调(请求地址,请求方式,请求参数,是否有应答,应答格式对不对,前端处理应答对不对)
- 转测试
- 产品发布上线
关于网络 TCP/IP
DNS: 域名解析服务(域名->IP地址)
P:协议 protocol
TCP:传输控制协议(三次握手,四次挥手,保证数据接收)
UDP:用户数据报协议(飞秋,不保证数据一定能接收到)
HTTP:超文本传输协议 web协议
TCP: Http(80) Https(443) Ftp(21) MySQL(3306) Oracle() node-express(3000)
Ipconfig 查询IP地址
pinghost : 检测对方网络是否可达
telnet host port : 检测对方服务(端口)是否可达
netstat -ano | findstr 80 : 检测本机的网络状态(established listening 监听)
Service 端口号作为标识
如何检查本机的服务? 任务管理器
Netstat –ano |findstr 80
Http 协议-jQuery ajax
$.ajax({
Type:”GET/POST/PUT/DELETE”
})
Restful API Get/Post/Put/Delete 对应数据库的增删改查
Get http://www.a.com/class: 返回班级列表
Post http://www.a.com/class: 创建班级
Get http://www.a.com/class/{id} 查询班级id为 xx 的详情 Get http://www.a.com/class?id=1
Post/Put http://www.a.com/class/{id} 修改班级id为 xx 的班级Post http://www.a.com/class/update
Delete http://www.a.com/class/{id} 删除班级id为 xx的班级 Gethttp://www.a.com/class/delete?id=1
Mock数据
部门的接口定义
创建部门 Post http://host/dept
查列表 Get http://host/dept
查单个部门 Get http://host/dept/5 dept_id=5
更改 Put http://host/dept/5
Post http://host/dept/5
Puthttp://host/dept data={id :5,name:’xx’}
删除 Delete http://host/dept/5
接口测试工具:jMeter Postman
MySQL
mysql -uroot -p123456 school
show databases; //显示当前有哪些数据库
useschool; // 选择某个数据库
show tables; //查看当前库中有哪些表
MySQL(CRUD增删改查)
insertinto tb_XXX(c1,c2,c3) values(v1,v2,v3),(v11,v21,v31); //create
deletefrom tb_XXX where c1=v1; //delete
update tb_XXX set c2=v2, c3=v3 where c1=v1; //update
select * from tb_XXX; //retrieve
select count(id) from tb_clazz;
select max(id) from tb_clazz;
select min(id) from tb_clazz;
select avg(id) from tb_clazz;
select distinct(grade) from tb_clazz;#查询所有的grade,并去重
select count(distinct(grade)) from tb_clazz;#查询所有的grade,去重并统计总数
通过wireshark网络抓包,理解IPTCP和Http
ip层:源地址和目的地址
tcp层:数据包和端口
http层:业务数据,遵循http协议,GET POST PUT DELETE
http包的请求头:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Host: c.test.com:81
If-None-Match: W/"f-HqIupv97l3gT6dQKo51RzRh6gec"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
RestfulAPI(表现层状态转移)
CRUD对应http的四种请求方式(getpostputdelete)
GET http://host/dept
POST http://host/dept
DELETEhttp://host/dept/1
Web服务器
WebServer流程:
- 接收请求TCP/Http连接
- 创建子线程
- 解析地址
- 根据地址找到方法(服务。接口)
- APP:解析参数
- APP:数据库查询
- APP:拼返回数据包
- 给浏览器应答
- 断开tcp连接,线程释放
nginx,tengine,squid,express,apache-httpd
应用服务器tomcat
动静分离,负载均衡,CDN,缓存Redis,分布式
Web服务器-nginx
nginx启动:start nginx
测试配置文件:nginx-t
重启:nginx-sreload
关闭:nginx-sstop
重点:nginx.conf的配置
负载均衡配置
动静分离配置
Web服务器-express
如何生成express项目?
如何启动express项目?
bin/www.js
app.is 引入路由模块和配置url-路由的映射
routers目录下,创建路由模块
Linux
cd / | 切换目录 |
dir ls ls -l ll | 查看当前目录 |
useradd tom passwd tom | 创建用户 修改密码 |
su | 切换到root |
su - www | 切换到www用户 |
pwd | 显示当前的路径 |
cat profile | 输出文件内容 |
mvdirAdirB | 移动目录或文件(类似重命名) |
mv dirA /usr/local/dirB | 移动目录 |
touch fileA | 创建一个文件fileA |
vi命令
vi两种模式:编辑模式和命令模式
命令模式下
a进入编辑模式
esc退出编辑模式
:wq 保存并退出
环境变量配置 vi /etc/profile,
vi /etc/profile
最后一行后新增一行,输入
export PATH=$PATH:/usr/local/node/bin:/usr/local/nginx/sbin
按esc退出编辑模式,输入:wq 保存并退出。并执行下面的语句让环境变量生效。
source /etc/profile
nginx安装
yum install pcre pcre-devel openssl openssl-devel gcc -y
wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar zxf nginx-1.14.0.tar.gz
cd nginx-1.14.0
./configure
make
make install
node安装
cd/usr/local
wget https://nodejs.org/dist/v10.4.1/node-v10.4.1-linux-x64.tar.xz
xz -d node-v10.4.1-linux-x64.tar.xz
tar xf node-v10.4.1-linux-x64.tar
mv node-v10.4.1-linux node
#执行测试,检查node版本
node -v
npm install -g pm2
MySQL
wgethttps://cdn.mysql.com//Downloads/MySQL-5.5/mysql-5.5.60-linux-glibc2.12-x86_64.tar.gz
[root@vm172-31-0-13 www]# mv mysql-5.5.60-linux-glibc2.12-x86_64 /usr/local/mysql
- 查询当前安装过的mysql
yumlist installed |grep mysql
- 卸载yum安装过的mysql
yum remove mysql-community-client.x86_64 mysql-community-common.x86_64 mysql-community-libs.x86_64 mysql-community-release.noarch mysql-community-server.x86_64
- 下载mysql的rpm安装包
wget http://www.alipapa.vip:8081/db/MySQL1.zip
wget http://www.alipapa.vip:8081/db/MySQL2.zip
- 解压缩zip包
yuminstallzipunzip-y
unzipMySQL1.zip
unzipMySQL2.zip
- 安装rpm文件
rpm -ivh MySQL-shared-compat-5.6.36-1.el6.x86_64.rpm MySQL-shared-5.6.36-1.el6.x86_64.rpm MySQL-devel-5.6.36-1.el6.x86_64.rpm MySQL-client-5.6.36-1.el6.x86_64.rpm MySQL-server-5.6.36-1.el6.x86_64.rpm
- 修改配置文件
cp /usr/share/mysql/my-default.cnf /etc/my.cnf
编辑/etc/my.cnf,设置datadir=/app/mysqldata
- 设置mysql的数据文件夹
mkdir /app/mysqldata
chown -R mysql:mysql /app/mysqldata
- 初始化mysql数据库
/usr/bin/mysql_install_db
- 启动mysql服务
service mysql start
- 重置mysql密码
/usr/bin/mysqladmin -u root password '123456'
- 登录mysql,配置远程权限
use mysql;
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123456";
GRANT ALL PRIVILEGES ON dongshi.* TO dongshi@"%" IDENTIFIED BY "123456";
flush privileges;
tar.gz包
- 下载,解压并重命名目录
cd /usr/local
wget https://cdn.mysql.com//Downloads/MySQL-5.5/mysql-5.5.60-linux-glibc2.12-x86_64.tar.gz
tar zxf mysql-5.5.60-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.5.60-linux-glibc2.12-x86_64 /usr/local/mysql
- 更改配置文件/etc/my.cnf
[mysql]
default-character-set = utf8
[mysqld]
skip-name-resolve
port = 3306
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /tmp/mysql.sock
max_connections = 200
character-set-server = utf8
default-storage-engine = INNODB
lower_case_table_names = 1
max_allowed_packet = 16M
log-bin = /usr/local/mysql/binlog/replicalog
server-id = 1
binlog_format = row
[mysqld_safe]
log-error = /usr/local/mysql/log/mysql.log
pid-file = /usr/local/mysql/log/mysql.pid
- 编辑/etc/profile, 配置PATH,增加 :/usr/local/mysql/bin; 并执行source /etc/profile
export PATH=$PATH:/usr/local/node/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin
- 创建日志目录并配置文件归属;
mkdir /usr/local/mysql/log
touch /usr/local/mysql/log/mysql.log
mkdir /usr/local/mysql/binlog
chown -R mysql:mysql /usr/local/mysql
- 安装启动脚本mysqld
cd /usr/local/mysql/support-files
cp mysql.server /etc/init.d/mysqld
- 安装数据库文件
cd /usr/local/mysql/scripts
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
- 启动mysql服务:
service mysqld start
如果启动失败,则删除/
- 重置mysqlroot密码
mysqladmin -u root password 'ds123456'
- root登陆mysql,配置远程访问权限:
use mysql;
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "ds123456";
flush privileges;
express项目的运行
- 安装pm2:npm install -g pm2
- cd /app/list/bin; cp www xx
- 启动xx项目:
pm2 start xx
pm2 start www --name='xx'
pm2 start www --name='xx'--watch
pm2list
pm2deleteidnum
pm2 start idnum
pm2 stop idnum
pm2 stop all
pm2 show xx
nginx+express
mpvue