1、自我介绍
略
2、你的项目有哪些界面,有哪些模块,你都做了什么,数据库是怎么设计的?
略
3、MySQL有哪些表(其实就是引擎),怎么创建数据库表
MySQL一共向用户提供了包括DBD、HEAP、ISAM、MERGE、MyIASM、InnoDB以及Gemeni这7种Mysql表类型。其中DBD、InnoDB属于事务安全类表,而其他属于事务非安全类表。
创建数据库 CREATE DATABASE 数据库名称
创建一个表
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
.......
)
4 、MySQL游标
【简介】
游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
游标充当指针的作用。
尽管游标能遍历结果中的所有行,但他一次只指向一行。
游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。
【用法】
一、声明一个游标: declare 游标名称 CURSOR for table;(这里的table可以是你查询出来的任意集合)
二、打开定义的游标:open 游标名称;
三、获得下一行数据:FETCH 游标名称 into testrangeid,versionid;
四、需要执行的语句(增删改查):这里视具体情况而定
五、释放游标:CLOSE 游标名称;
注:mysql存储过程每一句后面必须用;结尾,使用的临时字段需要在定义游标之前进行声明。
5、MySQL的左连接右连接等7个介绍一下
笛卡尔积:CROSS JOIN
要理解各种JOIN首先要理解笛卡尔积。笛卡尔积就是将A表的每一条记录与B表的每一条记录强行拼在一起。所以,如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录。
内连接:INNER JOIN
内连接INNER JOIN是最常用的连接操作。从数学的角度讲就是求两个表的交集,从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录。
左连接:LEFT JOIN
左连接LEFT JOIN的含义就是求两个表的交集外加左表剩下的数据。依旧从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录
右连接:RIGHT JOIN
同理右连接RIGHT JOIN就是求两个表的交集外加右表剩下的数据。再次从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录
外连接:OUTER JOIN
外连接就是求两个集合的并集。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录。另外MySQL不支持OUTER JOIN,但是我们可以对左连接和右连接的结果做UNION操作来实现。
USING子句
MySQL中连接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name。当模式设计对联接表的列采用了相同的命名样式时,就可以使用 USING 语法来简化 ON 语法,格式为:USING(column_name)。
所以,USING的功能相当于ON,区别在于USING指定一个属性名用于连接两个表,而ON指定一个条件。另外,SELECT *时,USING会去除USING指定的列,而ON不会。
自然连接:NATURE JOIN
自然连接就是USING子句的简化版,它找出两个表中相同的列作为连接条件进行连接。有左自然连接,右自然连接和普通自然连接之分。在t_blog和t_type示例中,两个表相同的列是id,所以会拿id作为连接条件。
另外千万分清下面三条语句的区别 。
自然连接:SELECT * FROM t_blog NATURAL JOIN t_type;
笛卡尔积:SELECT * FROM t_blog NATURA JOIN t_type;
笛卡尔积:SELECT * FROM t_blog NATURE JOIN t_type;
6、MySQL表和视图介绍一下
两者的区别
(1)视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表,而表不是。
(2)视图没有实际的物理记录,而表有。
(3)表是内存,视图是窗口。
(4)表占用物理存储空间而视图不占用物理存储空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能用创建的方式来进行修改。
(5)视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度来说,视图可以防止用户接触数据表,因而用户不知道数据表结构。
(6)表属于全局模式中的表,是实表,视图属于局部模式的表,是虚表。
(7)视图的建立和删除只影响视图本身,不影响对应的基本表。
两者的联系
(1)视图是基于基本表上建立的表,它的结构和内容都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。
(2)视图是依懒与基本表的存在而存在。
7、Redis是干什么的
在面试后端工程师 Redis 技能的时候,面试官通常问的第一个问题就是“Redis 能用来做什么?”,第一个回答往往都会是「缓存」。缓存确实是 Redis 使用最多的领域,它相比 Memcache 而言更加易于理解、使用和控制。
可是如果再进一步问“还有呢?”,大多数同学就会开始皱眉头,只有一小部分人会回答「分布式锁」。如果你就分布式锁再深入问下去,他们基本就会开始摇头:我们项目里面 Redis 的锁方法都是别人(应该是架构师)封装好的,拿过来直接使用,内部细节没有去了解过,也没有必要了解。
Redis的业务应用范围非常广泛,让我们以掘金技术社区(juejin.cn)的帖子模块为实例,梳理一下,Redis 可以用在哪些地方?
- 记录帖子的点赞数、评论数和点击数 (hash)。
- 记录用户的帖子 ID 列表 (排序),便于快速显示用户的帖子列表 (zset)。
- 记录帖子的标题、摘要、作者和封面信息,用于列表页展示 (hash)。
- 记录帖子的点赞用户 ID 列表,评论 ID 列表,用于显示和去重计数 (zset)。
- 缓存近期热帖内容 (帖子内容空间占用比较大),减少数据库压力 (hash)。
- 记录帖子的相关文章 ID,根据内容推荐相关帖子 (list)。
- 如果帖子 ID 是整数自增的,可以使用 Redis 来分配帖子 ID(计数器)。
- 收藏集和帖子之间的关系 (zset)。
- 记录热榜帖子 ID 列表,总热榜和分类热榜 (zset)。
- 缓存用户行为历史,进行恶意行为过滤 (zset,hash)。
8、Linux常用命令
1、ls命令
就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。
2、cd 命令
切换当前目录至 dirName。
3、pwd 命令
pwd 命令用于查看当前工作目录路径。
4、mkdir 命令
mkdir 命令用于创建文件夹。
5、rm 命令
删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。
6、rmdir 命令
从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。
注意:不能删除非空目录
7、mv 命令
移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。
当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。
8、cp 命令
将源文件复制至目标文件,或将多个源文件复制至目标目录。
注意:命令行复制,如果目标文件已经存在会提示是否覆盖,而在 shell 脚本中,如果不加 -i 参数,则不会提示,而是直接覆盖!
9、cat 命令
cat 主要有三大功能:
1.一次显示整个文件:
cat filename
2.从键盘创建一个文件:
cat > filename
只能创建新文件,不能编辑已有文件。
3.将几个文件合并为一个文件:
cat file1 file2 > file
-
-b 对非空输出行号
-
-n 输出所有行号
10、kill 命令
发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用"-KILL" 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。
常用参数:
-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称 -a 当处理当前进程时,不限制命令名和进程号的对应关系 -p 指定kill 命令只打印相关进程的进程号,而不发送任何信号 -s 指定发送信号 -u 指定用户
实例:
(1)先使用ps查找进程pro1,然后用kill杀掉
kill -9 $(ps -ef | grep pro1)
9、Nginx配置文件在哪个文件夹下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SaD0FC3u-1646307108016)(C:\Users\lhz\AppData\Roaming\Typora\typora-user-images\image-20220303161545494.png)]
10、Nginx有什么功能
Nginx主要功能:1、反向代理 2、负载均衡 3、HTTP服务器(包含动静分离) 4、正向代理
11、Nginx启动停止命令
在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动、停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍。
1、启动:
C:\server\nginx-1.0.2>start nginx
或
C:\server\nginx-1.0.2>nginx.exe
注:建议使用第一种,第二种会使你的cmd窗口一直处于执行中,不能进行其他命令操作。
如果需要特殊设置nginx的配置文件路径,可以这样执行start nginx -c conf/nginx.conf
2、停止:
C:\server\nginx-1.0.2>nginx.exe -s stop
或
C:\server\nginx-1.0.2>nginx.exe -s quit
注:stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。
执行 nginx.exe -s stop或者quit命令是不是不能删除进程?查看进程开了一堆nignx.exe
还有80端口在Listening,并且浏览器F5刷新还能访问页面,可能nginx.exe版本或系统的原因,用
taskkill /f /im nginx.exe > null 杀死nginx进程
3、重新载入Nginx:
C:\server\nginx-1.0.2>nginx.exe -s reload
当配置信息修改,需要重新载入这些配置时使用此命令。
12、正向代理,反向代理,负载均衡是什么
我们从遇到问题,找寻答案的思路来解释这个事情。在用户流量小、业务逻辑简单的情况下,我们可以想象,客户端(n) - 服务器(1)的架构可以完成场景所需的基本要求。但是随着用户量的提升,逻辑日趋复杂,我们可以试想,单服务器的性能问题和单点故障问题,可能直接造成系统的崩溃。那么我们会想到这样一种解决思路,我们用多台服务器(比如说3台),这三台服务器上跑同样的服务,我们只要能够做到,依据不同服务器的状态,向更加理想的服务器发送用户请求,岂不是可以解决性能问题;当这三台服务器跑着同样的服务,即便其中一台出现了故障,对于用户的请求,我们仍然可以通过幸存的服务器进行处理。
如上图所示,nginx就是图中问号的位置。它可以做两个事情,一是替我们的后端服务器接受用户请求;二是接收到请求后,判断将该请求交由哪个服务器进行处理。前者就是nginx的反向代理,而后者则是负载均衡。
啥是反向代理
有反向必然有正向,正向代理是我们最常见的一种方式,比如说FQ。我们打开浏览器想登录google,因为众所周知的原因无法访问,我们会找一个既可以被我们访问,同时也可以访问google的第三方服务器进行中转。这个server就是正向代理服务器。从这样一个场景中我们可以看出正向代理的特点:
-
客户端非常明确我们要访问的服务器地址:www.google.com,
-
代理客户端,服务器只清楚请求来自于哪个代理服务器,而不清楚源头来自哪个客户端,所以说
正向代理
屏蔽了真实客户的信息。
反向代理的场景更多用户,服务器集群分布式部署的情况,跟我们文初介绍的场景一样,大白话说,就是用户不需要知道某一个服务器的具体地址,我只要通过访问代理服务器,由代理服务器按照某一原则找到对应的业务服务器即可,由此可以分析出反向代理的特点:
-
代理服务端,客户端只知道代理服务器的地址,但不清楚真实处理自己业务逻辑的服务器地址
反向代理.png
无论是正向还是反向代理,除了上面两个场景的使用之外,还有其他的作用,试想,我们在经营一台代理服务器,它专门接受其他用户的请求,作为中转,我们是否可以做这样一件事情,对于一些热门的站点,比如google,facebook。当我们请求回来之后,将其缓存到本次硬盘,当下一次有同样请求过来的时候,我们就可以直接返还本地的资源,而不需要重复请求。可见代理还可以提高访问速度。另外,我们对于请求的过滤是不是也可以放在代理服务器上,这样业务服务器可以专心的进行后台逻辑的计算,所以代理还可以起到防火墙的作用。
实际的网络结构,正向代理和反向代理往往是同时存在:
nginx支持的负载均衡调度算法方式如下:
- weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
- ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
- fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块
- url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包