PHP

  1. CSRF 和 XSS 攻击分别是什么

  2. 抽象类和接口分别是什么

  3. 谈谈对设计模式的了解

  4. 谈谈对微服务的理解

  5. 说说垃圾回收机制

  6. 高并发的解决方案

  7. 如何防止 SQL 注入

  8. 什么事时序攻击

  9. 魔术方法有哪些

Laravel

  1. 依赖注入实现原理

  2. 常用集合方法

  3. 常用辅助函数

  4. 常用中间件

  5. 生命周期

Swoole

  1. 谈谈对协程的理解

  2. 和 php-fpm 的区别

Redis

  1. 数据类型

  2. 淘汰策略

  3. 事务机制

  4. 缓存击穿

  5. 分布式锁

  6. 集群

Vue

  1. 双向数据绑定原理

  2. 组件通信

  3. 生命周期

其他

  1. ElasticSearch

  2. MeiliSearch

  3. RabbitMQ

  4. MongoDB

  5. Kafka

MySQL 主从复制具有读写分离,提升访问性能,备份数据以及故障转移等优点。下面介绍一种最简单的配置方式:两个全新的数据实例,一个作为主库,另一个作为从库。

Read more »

网页爬虫对站点收录和推广有好处,但大量蜘蛛涌入可能会造成网站瘫痪,通过配置 Nginx 可以限制爬虫请求。在 Nginx 的配置 conf.d 目录下增加请求频率限制定义文件 user-agent-rate-limit.conf

Read more »

众所周知,kubernetes(文中简称k8s)已成为容器编排的首选工具,作为学习使用,便在虚拟机中通过`kubeadm`配置集群。本文主要参考官方文档及相关网络文章。

Read more »

Redis 主从模式

参考文档: 使用docker 搭建redis的主从复制

使用 docker-compose 简化执行命令, 对应 docker-compose.yml 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
version: '3.7'
services:
master:
image: redis
container_name: redis-master
restart: always
command: redis-server --port 6379 --requirepass master123 --appendonly yes
ports:
- 6379:6379
volumes:
- ./data/master:/data
slave1:
image: redis
container_name: redis-slave-1
restart: always
command: redis-server --slaveof master 6379 --port 6380 --requirepass slave123 --masterauth master123 --appendonly yes
ports:
- 6380:6380
volumes:
- ./data/slave1:/data
slave2:
image: redis
container_name: redis-slave-2
restart: always
command: redis-server --slaveof master 6379 --port 6381 --requirepass slave456 --masterauth master123 --appendonly yes
ports:
- 6381:6381
volumes:
- ./data/slave2:/data
1
2
3
4
5
其中:
--slaveof master 6379 设置从节点的关键语句,master指主节点的hostname
--requirepass slave456 设置密码
--appendonly yes 开启持久化,默认是AOF 模式
以上可以写到配置文件中

执行命令 docker-compose up -d 运行

Redis 哨兵模式

Redis 集群模式

假设页面上有个列表,列表中三种操作权限(增加、修改、删除),根据当前登录角色不同而不同。一般如下实现。

1
2
3
4
5
6
7
8
var lockFlag = 0; // 当前用户权限,0:新增,删除,修改;1:不能新增,不能删除,不能修改;2:不能新增、删除、修改
if (0 === lockFlag) {
// 启用所有操作按钮
} else if (1 === lockFlag) {
// 禁用新增、删除、修改按钮
} else if (2 === lockFlag) {
// 禁用新增,启用删除和修改按钮
}

如果要增加一种权限组合(如:不能新增、不能删除、修改)怎么办,再加一个else if,可以试试另一种方式引入位开关

1
2
3
4
5
6
7
8
9
10
11
12
13
// 权限定义如下:
1:新增;2:修改;4:删除
// 若当前支持新增和删除
var lockFlag = 5;
if ((1 & lockFlag) === 0) {
// 禁用新增按钮
}
if ((2 & lockFlag) === 0) {
// 禁用修改按钮
}
if ((4 & lockFlag) === 0) {
// 禁用删除按钮
}
0%