前端面试题3

此文章仅做参考,或许会有错误出现。 

面试问题: 

你对http协议的理解?     

是互联网上应用最广泛的一种超文本传输协议,所有的www文件都必须遵守这个协议,目的是为了提供一种发布和接收html页面的方法,是一个客户端和服务器端的请求和应答标准,也就是TCP,通过使用web浏览器,网络爬虫等其他工具。客户端发起一个到服务器端指定接口的http请求,(默认端口80),这个客户端一般称为用户代理(user agent) 可以通过浏览器进行抓包,分析网络数据包的内容

说说百度搜索的过程     

当输入框内容发生改变时,即时向数据库发送请求,返回关键字的接口,进行检索排序,然后输出接口内容

                             

说说你对restful API的理解       

<  Get/Post/Put/Delete 对应数据库的增删改查

说说常用的http状态码

200 成功 300 重定向 400 客户端请求错误(服务器未能理解请求) 403 用户没有权限,禁止访问 404 服务器无法找到被请求的页面 500 服务器处理错误(请求未完成,服务器遇到未知错误) 503 服务不可用 服务器维护或者过载

常用的抓包工具 

< chrome浏览器     

如何跟后端调接口

  1. 自己制作模拟数据
  2. 使用mock模拟数据生成器

用过mock没有

有/没有

工作流程   

1外包

  1. 需求确认(外包,自身产品)
  2. 产品部门-产品原型图
  3. 制定开发计划(前端-后端-UI)
  4. 后端架构师:系统架构设计(数据库,中间件(消息队列),web服务器,开发框架,负载均衡,安全(防火墙),部署(人工,自动化),接口设计)制定接口
  5. 前端:切图,写页面,写逻辑,模拟数据(mock数据)
  6. 写接口,单元测试。测试环境更新,前后端联调(请求地址,请求方式,请求参数,是否有应答,应答格式对不对,前端处理应答对不对)                            
  7. 转测试  
  8. 产品发布上线

                                                     

关于网络 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; //查看当前库中有哪些表

MySQLCRUD增删改查)

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网络抓包,理解IPTCPHttp

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

GET http://host/dept/1

POST http://host/dept

PUT http://host/dept/1

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

  • 下载mysqlrpm安装包

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

  1. 下载,解压并重命名目录

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

  1. 更改配置文件/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

  1. 编辑/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

  1. 创建日志目录并配置文件归属;

mkdir /usr/local/mysql/log

touch /usr/local/mysql/log/mysql.log

mkdir /usr/local/mysql/binlog

chown -R mysql:mysql /usr/local/mysql

  1. 安装启动脚本mysqld

cd /usr/local/mysql/support-files

cp mysql.server  /etc/init.d/mysqld

  1. 安装数据库文件

cd /usr/local/mysql/scripts

./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

  1. 启动mysql服务:

service mysqld start

如果启动失败,则删除/

  1. 重置mysqlroot密码

mysqladmin -u root password 'ds123456'

  1. root登陆mysql,配置远程访问权限:

use mysql;  

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "ds123456"; 

flush privileges;  

express项目的运行

  1. 安装pm2:npm install -g pm2
  2. cd /app/list/bin;  cp www xx
  3. 启动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

猜你喜欢

转载自blog.csdn.net/czy279470138/article/details/90081729