最后更多分享:前端字节跳动真题解析
开源分享:docs.qq.com/doc/DSmRnRG… 分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。
节点:集群中的一个服务器
在分布式系统中,各个服务可能处于不同主机,但是服务之间不可避免的需要互相调用,我 们称为远程调用。
SpringCloud 中使用 HTTP+JSON 的方式完成远程调用
优势:天然的跨平台性。HTTP请求与JSON在任何平台都可以使用。
分布式系统中,A 服务需要调用 B 服务,B 服务在多台机器中都存在,A 调用任意一个服务器均可完成功能。
为了使每一个服务器都不要太忙或者太闲,我们可以负载均衡的调用每一个服务器,提升网站的健壮性。
-
常见的负载均衡算法:
-
轮询: 为第一个请求选择健康池中的第一个后端服务器,然后按顺序往后依次选择,直 到最后一个,然后循环。
-
最小连接: 优先选择连接数最少,也就是压力最小的后端服务器,在会话较长的情况下 可以考虑采取这种方式。
-
散列: 根据请求源的
IP的散列(hash)来选择要转发的服务器。这种方式可以一定程度上保证特定用户能连接到相同的服务器。如果你的应用需要处理状态而要求用户能连接到和之前相同的服务器,可以考虑采取这种方式。
A 服务调用 B 服务,A 服务并不知道 B 服务当前在哪几台服务器有,哪些正常的,哪些服务已经下线。解决这个问题可以引入注册中心;
如果某些服务下线,我们其他人可以实时的感知到其他服务的状态,从而避免调用不可用的服务。
-
流程
-
服务上线 — 注册到注册中心
-
服务调取 — 从注册中心中发现所需服务
注册中心集中管理服务列表清单
每一个服务最终都有大量的配置,并且每个服务都可能部署在多台机器上。我们经常需要变更配置,我们可以让每个服务在配置中心获取自己的配置。
配置中心用来集中管理微服务的配置信息
在微服务架构中,微服务之间通过网络进行通信,存在相互依赖,当其中一个服务不可用时,
有可能会造成雪崩效应。要防止这样的情况,必须要有容错机制来保护服务。
- 服务熔断:
设置服务的超时,当被调用的服务经常失败到达某个阈值,我们可以开启断路保护机制,后来的请求不再去调用这个服务,本地直接返回默认的数据。
多次调用某服务失败后,不再调用,返回默认数据。
- 服务降级
在运维期间,当系统处于高峰期,系统资源紧张,我们可以让非核心业务降级运行。降级:某些服务不处理,或者简单处理【抛异常、返回 NULL、调用 Mock 数据、调用 Fallback 处理逻辑】。
系统高峰期非核心业务不在处理或简单处理。
在微服务架构中,API Gateway作为整体架构的重要组件,它 抽象了微服务中都需要的公共功能 ,同时提供了 客户端负载均衡,服务自动熔断,灰度发布,统一认证,限流流控,日志统计等丰富的功能,帮助我们解决了很多API管理难题。
=================================================================
- 开启CPU虚拟化。
这里以Dell台式机为例,开机F2进入BIOS系统,如图勾选设置即可。
- 下载&安装 VirtualBox (前提条件:完成第一步开启CPU虚拟化。)
-
下载VirtualBox,我这里下载6.1版本的。
-
选择Windows hosts即可。
- 下载完成后安装即可。
- 运行VirtualBox
- 下载&安装&使用 Vagrant
Vagrant可以结合VirtualBox快速搭建虚拟机,不在需要下载镜像。
- 下载完成后安装即可。
- 验证是否安装完成。
cmd 通过 命令 vagrant来验证是否安装成功。
- 打开 window cmd 窗口,运行 Vagrant init centos/7,即可初始化一个 centos7 系统
使用命令vagrant init centos/7初始化虚拟机。
注意:vagrant init后跟的名称必须与Vagrant官方镜像仓库中的名称一致才可以。
- 运行
vagrant up即可启动虚拟机。系统 root 用户的密码是 vagrant
- vagrant 其他常用命令
- vagrant ssh:自动使用 vagrant 用户连接虚拟机。
使用命令vagrant ssh连接虚拟机,默认用户名为vagrant,可以使用linux命令。
-
vagrant reload:重启虚拟机
-
vagrant upload source [destination] [name|id]:上传文件
-
使用命令
exit;退出与虚拟机连接
- 可以在VirtualBox中对虚拟机进行管理
- 注意:在命令行中使用vagrant命令时,需要确保所在文件夹有Vagrantfile文件。
- 默认虚拟机的 ip 地址不是固定 ip,开发不方便
- 修改 Vagrantfile,查询本机IP,查询VirtualBox网关,将配置文件中IP的前三位与网关改为一致。
- 重新使用 vagrant up 启动机器即可,然后再 vagrant ssh 连接机器。
使用命令ip addr来查看虚拟机IP网络地址
- windows和linux互相ping测试均可ping通
- 默认只允许 ssh 登录方式,为了后来操作方便,文件上传等,我们可以配置允许账号密码登录
-
Vagrant ssh 进去系统之后
-
vi /etc/ssh/sshd_config
-
修改 PasswordAuthentication yes/no
-
重启服务 service sshd restart
-
以后可以使用提供的 ssh 连接工具直接连接
-
注意:VirtualBox 会与包括但不限于如下软件冲突,需要卸载这些软件,然后重启电脑; 冲突的软件:红蜘蛛,360,净网大师(有可能)等
-
vagrant创建的root账户密码默认为vagrant,可以使用
$ su root
切换用户为root,以免后续命令无权限。
- Docker简介
- 相关网址
- 安装过程
- 卸载系统之前的 docker
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装依赖包
$ sudo yum install -y yum-utils
- 确定安装地址
$ sudo yum-config-manager \
--add-repo \
download.docker.com/linux/cento…
- 安装Docker-CE
$ sudo yum install docker-ce docker-ce-cli containerd.io
- 启动Docker
$ sudo systemctl start docker
- 检查是否安装成功
- 查看Docker版本
docker -v
- 列出本地镜像
sudo docker images
- 设置开机启动
$ sudo systemctl enable docker
- 配置镜像加速
docker默认下载是从docker hub进行下载,由于是国外网站,速度较慢。
可以配置国内镜像加速:
依次执行以下命令
- 创建配件夹
sudo mkdir -p /etc/docker
- 配置镜像加速地址
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["9t35rfn5.mirror.aliyuncs.com"]
}
EOF
- 重启docker伴随线程
sudo systemctl daemon-reload
- 重启docker服务
sudo systemctl restart docker
- 下载镜像文件
$ docker pull mysql:5.7
使用sudo docker images查看镜像
- 创建实例并启动
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明
-
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
-
-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
-
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-
-v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
-
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
可以使用命令docker ps查看正在运行中的容器
创建成功后,可以通过Navicat或其他MySQL连接工具进行连接MySQL测试
- docker容器文件挂载与端口映射
-
docker run:创建新容器。
docker run一下,就会启动一个容器,容器与容器之间相互隔离,互不影响。(容器其实就是一个完整的linux系统)。 -
-p 3306:3306:将MySQL容器的3306端口映射到Linux系统的3306端口。:MySQL被安装到了
MySQL容器中,MySQL默认端口为3306,但是3306端口为MySQL容器的3306端口,如果想使用MySQL,需要把MySQL容器的3306端口映射到Linux中。在命令中,前一个3306为宿主机(这里为Linux)端口号,后一个3306为MySQL容器端口号。
-p IP:HOSTPORT:CONTAINERPORT
-
–name mysql:为容器起别名。
-
**-v:目录挂载。**MySQL配置文件、日志文件等在日常开发中经常使用,通过
-v命令,可以将MySQL容器中的目录文件夹挂载到Linux目录中。
-v Linux映射目录:容器目录
挂载完成后,可以在Linux对应目录查看文件变化。
-
-e:指定root用户密码。
-
-d:后台运行容器,并返回容器ID。
- MySQL 配置
修改MySQL字符编码,改为utf8
编辑配置文件vi /mydata/mysql/conf/my.cnf
-
进入/mydata/mysql/conf目录
-
使用命令
vi my.cnf命令编辑配置文件
-
敲击键盘
i进入插入模式 -
将配置信息复制到文件中
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
-
Esc后使用:wq命令退出 -
使用命令
docker restart mysql重启MySQL容器
- 可以进入MySQL容器查询源文件内容
- 解决MySQL连接慢的问题
在配置文件中加入如下,并重启 mysql
[mysqld]
skip-name-resolve
解释:
skip-name-resolve:跳过域名解析>
- 通过容器的 mysql 命令行工具连接
docker exec -it mysql mysql -uroot -proot
- 设置 root 远程访问
grant all privileges on . to 'root'@'%' identified by 'root' with grant option; flush privileges;
- 进入容器文件系统
docker exec -it mysql /bin/bash
- 下载redis镜像
docker pull redis
-
创建实例并启动
-
首先自己创建文件目录以及对应配置文件
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
- 创建redis实例并启动
docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
**注意:**这里指定了redis将会加载/etc/redis/redis.conf目录下的配置文件
- 使用
docker ps检查是否创建成功
- 使用 redis 镜像执行 redis-cli 命令连接
docker exec -it redis redis-cli
- 对redis做持久化存储
- 进入配置文件目录
- 编辑配置文件
-
按
i进入插入模式 -
设置redis的aof持久化保存方式
-
保存
:wq -
重启redis
docker restart redis
- 可以使用软件RedisDesktopManager对redis进行可视化管理。
- Maven
- 查询Maven和jdk版本
-
Maven配置阿里云镜像
-
找到Maven目录下的配置文件
- 配置镜像,将以下代码放到对应位置即可
nexus-aliyun
central
Nexus aliyun
- 配置JDK1.8编译项目,将以下代码放到对应位置即可。
jdk-1.8
true
1.8
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
- Idea & VSCode
-
Idea
-
指定Maven安装目录和配置文件
-
安装插件:
lombok&MyBatisX -
lombok:简化JavaBean开发
- MyBatisX:MyBatisPlus开发,快速从mapper定位到xml文件
- VSCode安装插件
-
Vetur —— 语法高亮、智能感知、Emmet 等包含格式化功能, Alt+Shift+F (格式化全文),Ctrl+K Ctrl+F(格式化选中代码,两个 Ctrl需要同时按着)
-
EsLint —— 语法纠错
-
Auto Close Tag —— 自动闭合 HTML/XML 标签
-
Auto Rename Tag —— 自动完成另一侧标签的同步修改
-
JavaScript(ES6) code snippets — — ES6 语法智能提示以及快速输入, 除 js 外还支持.ts,.jsx,.tsx,.html,.vue,省去了配置其支持各种包含 js 代码文件的时间
-
HTML CSS Support —— 让 html 标签上写 class 智能提示当前项目所支持的样式
-
HTML Snippets —— html 快速自动补全
-
Open in browser —— 浏览器快速打开
-
Live Server —— 以内嵌服务器方式打开
-
Chinese (Simplified) Language Pack for Visual Studio Code —— 中文语言包
- 安装配置git
-
下载Giteegit下载地址
-
配置 git,进入 git bash
配置用户名
git config --global user.name "username" //(名字)
配置邮箱
git config --global user.email "username@email.com" //(注册账号时用的邮箱)
-
配置 ssh 免密登录
-
配置
进入 git bash;使用:ssh-keygen -t rsa -C "xxxxx@xxxxx.com"命令。 连续三次回车。
一般用户目录下会有
或者 cat ~/.ssh/id_rsa.pub
登录进入 gitee,在设置里面找到 SSH KEY 将.pub 文件的内容粘贴进去使用 ssh -T git@gitee.com测试是否成功即可
最后
好了,这就是整理的前端从入门到放弃的学习笔记,还有很多没有整理到,我也算是边学边去整理,后续还会慢慢完善,这些相信够你学一阵子了。
做程序员,做前端工程师,真的是一个学习就会有回报的职业,不看出身高低,不看学历强弱,只要你的技术达到应有的水准,就能够得到对应的回报。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
学习从来没有一蹴而就,都是持之以恒的,正所谓活到老学到老,真正懂得学习的人,才不会被这个时代的洪流所淘汰。