{{ Dev-Roadmap }}
2025-11-14 22:02:39 0 举报
AI智能生成
开发者路线图
作者其他创作
大纲/内容
互联网(Internet)
互联网是如何工作的?(How does the internet work?)
什么是Http?(What is HTTP?)
浏览器和它们是如何工作的?(Browsers and how they work?)
DNS及它是如何工作的?(DNS and how it works?)
什么是域名?(What is Domain Name?)
什么是托管?(What is hosting?)
基本的前端知识(Basic Frontend Knowledge)
HTML
iframe
sandbox
子主题
子主题
CSS
Javascript
Vue
基础
属性
方法
计算属性 & 侦听属性
computed
watch
绑定
v-model
v-on
v-bind
v-show
实例属性
$data
$method
$refs
$mount
条件语句
v-if
v-else
v-else-if
循环语句
v-for
v-for="a in list"
v-for="(a,i) in list" :key="i"
遍历对象 v-for="(k,v,i) in list"
组件
注册
全局注册 Vue.component("组件名",{Vue对象})
本地注册
特点
1. data 不再是一个json对象,是一个函数
2. template的值是一个字符串, 有且只有一个根元素
生命周期
创建前后
beforeCreate
created
绑定前后
beforeMount
mounted
更新前后
beforeUpdate
updated
销毁前后
beforeDestroy
destroyed
React
操作系统和通用知识(OS and General Knowledge)
终端用法(Terminal Usage)
操作系统通常如何工作(How OSs work in General)
进程管理(Process Management)
线程与并发(Threads and Concurrency)
线程三大特性
可见性
有序性
原子性
问题
1. 一个线程池启动多少个线程合适?
子主题
基本的终端命令(Basic Terminal Commands)
内存管理(Memory Management)
进程间通信 (Interprocess Communication)
I/O 管理 (I/O Management)
I/O 模型
阻塞式 I/O<br>blocking IO<br>
非阻塞式 I/O<br>non-blocking IO<br>
I/O 复用
select/poll
epoll
信号驱动式 I/O<br>signal-driven IO<br>
异步 I/O<br>asynchronous IO<br>
分类
网络 I/O
磁盘 I/O
问题
1. C10K问题
2. select 和 epoll 的区别?水平触发和边缘触发的区别是啥?使用的时候需要注意什么?
3. epoll 储存描述符的数据结构是什么?
4. select 有描述符限制吗?是多少?
POSIX 基础 (POSIX Basics)
基本的网络概念(Basic Networking Concepts)
Linux 工具
tcpdump
nc
1. 连接; nc localhost 80
2. 模拟请求头信息后回车两次发送;GET / HTTP/1.0
strace
1. 创建文件夹; mkdir ~/strace-nginx
2. 启动; strace -ff -o ~/strace-nginx/nginx ./nginx
3. 测试连接; curl -I localhost
4. 查看进程文件; tail -100f ~/strace-nginx/nginx.3374
netstat
1. 查看; netstat -natp
lsof
1. 查看端口; lsof -i:80
编程语言 (Learn a Language)
Go
基础
数据类型
1. 布尔型
布尔型<br>布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
2. 数字类型
整型
uint8<br>无符号 8 位整型 (0 到 255)
<b>uint16</b><br><span style="color:rgb(51, 51, 51); font-family:"Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; font-size:13px; background-color:rgb(246, 244, 240);">无符号 16 位整型 (0 到 65535)</span>
uint32<br>无符号 32 位整型 (0 到 4294967295)
uint64<br>无符号 64 位整型 (0 到 18446744073709551615)
int8<br>有符号 8 位整型 (-128 到 127)
int16<br>有符号 16 位整型 (-32768 到 32767)
int32<br>有符号 32 位整型 (-2147483648 到 2147483647)
int64<br>有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
浮点型
float32<br>IEEE-754 32位浮点型数
float64<br>IEEE-754 64位浮点型数
complex64<br>32 位实数和虚数
complex128<br>64 位实数和虚数
其他数字类型
byte<br>类似 uint8
rune<br>类似 int32
uint<br>32 或 64 位
int<br>与 uint 一样大小
uintptr<br>无符号整型,用于存放一个指针
3. 字符串类型
字符串类型:<br>字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
4. 派生类型
(a) 指针类型(Pointer)
(b) 数组类型
(c) 结构化类型(struct)
(d) Channel 类型
(e) 函数类型
(f) 切片类型
(g) 接口类型(interface)
(h) Map 类型
运算符
算术运算符
相加 +
相减 -
相乘 *
相除 /
求余 %
自增 ++
自减 --
关系运算符
等于 ==
不等于 !=<br>
大于 ><br>
小于 <
大于等于 >=
小于等于 <=
逻辑运算符
逻辑与 &&
逻辑或 ||
逻辑非 !
位运算符
赋值运算符
简单赋值 =
相加后再赋值 +=
相减后再赋值 -=
相乘后再赋值 *=
相除后再赋值 /=
求余后再赋值 %=
左移后赋值 <<=
右移后赋值 >>=
按位与后赋值 &=
按位异或后赋值 ^=
按位或后赋值 |=
其他运算符
返回变量存储地址 &
指针变量 *
条件语句
if 语句<br>if 语句 由一个布尔表达式后紧跟一个或多个语句组成。<br>
if...else 语句<br>if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。<br>
if 嵌套语句<br>你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。<br>
switch 语句<br> switch 语句用于基于不同条件执行不同动作。<br>
select 语句<br> select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。<br>
注意:Go 没有三目运算符,所以不支持 ?: 形式的条件判断。
循环语句
循环处理语句
for 循环<br>重复执行语句块<br>
循环嵌套<br> 在 for 循环中嵌套一个或多个 for 循环<br>
循环控制语句
break 语句<br> 经常用于中断当前 for 循环或跳出 switch 语句<br>
continue 语句<br>跳过当前循环的剩余语句,然后继续进行下一轮循环。<br>
goto 语句<br>将控制转移到被标记的语句。<br>
设计模式
创建型模式
结构型模式
行为型模式
内置类型和函数
内置类型
值类型
引用类型:(指针类型)
内置函数
内置接口error
Rust
Java
基础
数据类型
运算符
流程控制
面向对象编程
JavaSE
C#
node/JavaScript/TypeScript<br>
Python
Ruby
Lua
基础
数据类型
无效值 nil
布尔值 boolean
双精度浮点 number
字符串 string
函数 function
C数据结构 userdata
协同程序(线程) thread
表 table
运算符
算术运算符
加 +
减 -
乘 *
除 /
取余 %
乘幂 ^
负号 -
关系运算符
等于 ==
不等于 ~=<br>
大于 ><br>
小于 <
大于等于 >=
小于等于 <=
逻辑运算符
逻辑与 and
逻辑或 or
逻辑非 not
其他运算符
连接符 “..”
一元运算符,返回字符串或表的长度 “#”
Lua + Redis
OpenResty
项目
Orange
Kong
包管理
opm
luarocks
PHP
基础
数据类型
字符串 string
整型 int
浮点型 float
布尔 boolean
数组 array
对象 object
资源 resource
无效值 NULL
运算符
框架
laravel
生命周期
源码分析
yii
生命周期
1. 用户提交指向入口脚本“web/index.php”的请求
2. 入口脚本会加载配置数组,并创建一个应用实例用于处理请求
3. 应用会通过“request”应用组件,解析被请求的路由
4. 应用创建一个“controller”实例,具体处理请求
5. “controller” 创建一个“action”,并执行相关的“filter”
6. 如果有一个“filter”验证失败,“action”就会取消
7. 如果全部的“action”验证成功,“action”就会执行
8. “action”加载一个数据模型,通过模型从数据库中获取数据
9. “action”渲染一个视图,并为视图提供数据
10. 结果返回给“response”应用组件
11. “respone”应用组件把结果返回给用户浏览器
源码分析
tp
生命周期
源码分析
入口文件
类的自动加载
函数 : spl_autoload_register()
流程
1. 获取文件路径, 获取当前
2. 验证文件是否【autoload_static.php】
1. 属性 prefixDirsPsr4 【命名空间 与 路径的对应】
2. 属性 prefixLengthsPsr4 【命名空间 与 长度的 对应】
3. 属性 fallbackDirsPsr4
4. 属性 calssMap 【内容从类库映射文件中读取】
1. 映射文件需手动生成
2. 生成映射文件的命令【php think optimize:autoload】
2. 找到文件之后 将文件【require】
3. 类的别名
1. 方法 class_alias 的使用
2. 存在别名的类 ,可以直接访问 【栗子: \Config::get('xx', 123)】
4. 类的自动加载
1. 主要功能就是查找类文件
3. 查找文件的几种方式
1. 从属性classMap中查找
子主题
4. 加载自定义类
5. composer 自动加载
1. 调用 composer install **/**
2. 更新 autoload_static.php 文件
子主题
问题
1. PHP7 、PHP8 新特性
2. in_array 时间复杂度
3. PHP 匿名函数bind与bindTo方法使用总结
4. PHP如何修改SESSION的生存时间
5. php数组合并用加号和用array_merge()的区别
版本控制系统(Version Control Systems)
Git 基本用法 (Basic Usage of Git)
仓库托管服务 (Repo hosting services)
GitHub
Gitlab
Bitbucket
Gogs
数据库<br>Databases<br>
关系型数据库<br>Relational Databases<br>
MySQL
版本
5.1
InnoDB 设为默认引擎
5.7
8.0
问题
1. mysql 使用JSON_EXTRACT() 取json值
子主题
MariaDB
MS SQL
Oracle
PostgreSQL
非关系型数据库<br>NoSQL Databases<br>
Document MongoDB, CouchDB
Column DBs Cassandra
Time series InfluxDB, TimescaleDB
Realtime Firebase, RethinkDB
Redis<br>Remote Dictionary Server<br>
基本数据类型
字符串<br>String<br>
字符串
SET
GET
MSET
MGET
STRLEN
数值
INCR
DECR
INCRBY
DECRBY
Bitmap
SETBIT
BITCOUNT
BITPOS
BITOP
列表<br>List<br>
栈(先进后出)<br>同向操作
LPUSH<br>LPOP
RPUSH<br>RPOP
队列(先进先出)<br>反向操作
LPUSH<br>RPOP
RPUSH<br>LPOP
数组
LSET
LLEN
LRANGE
LTRIM
阻塞 单波队列
BLPOP
BRPOP
哈希<br>Hash<br>Map(k-v)
HSET
HGET
HMSET
HMGET
HVALS
HKEYS
HGETALL
集合<br>Set<br>
无序<br>去重
SADD
SCARD
SMEMBERS
SREM
交并差
SINTER
SUNION
SDIFF
SINTERSTORE
SUNIONSTORE
SDIFFSTORE
随机事件
SRANGEMEMBER
count 正
count 负
SPOP
有序集合<br>Zset<br>
默认排序<br>左小右大
ZADD
ZRANGE
ZRANGEBYSCORE
ZRANK
ZRERANK
集合操作<br>交并差
ZINTER
ZUNION
ZDIFF
ZINTERSTORE
ZUNIONSTORE
ZDIFFSTORE
扩展
管道<br>Pipelining
发布/订阅<br>Pub/Sub
PUBLISH
SUBSCRIBE
Lua脚本
事务<br>Transactions<br>
MULITI
EXEC
WATCH
布隆过滤器<br>BloomFilter
回收策略
volatile-lru
volitile-ttl
volitile-random<br>
volatile-lfu
allkeys-lfu
allkeys-lru
allKeys-random
noeviction
过期判定原理
1. 被动访问时过期
2. 主动周期轮询判定 (增量)
HyperLogLog
PFADD
PFCOUNT
PFMERGE
使用场景
缓存
不需要强一致性的数据
缓存状态数据,过滤有效请求,这种缓存服务无状态,能保证服务器动态扩缩容(ex:商品售罄状态)
秒杀
描述 :有限的时间内抢有限的商品
关键字
setnx(抢锁)
watchdog(解决key过期,业务未过期)
红锁(解决单点故障,多台独立实例,保证加锁过半)
分布式场景
集中缓存,解决session共享问题
子主题
持久化
AOF
文件:appendonly.aof
配置
# 默认关闭<br>appendonly yes<br>
# 设置文件名<br>appendfilename appendonly.aof<br>
# 每次写入一条数据执行一次fsync,它能确保数据一条都不丢,但结果就是性能非常非常的差,吞吐量很低<br># appendfsync always<br># 每隔一秒执行一次fsync,这个是最常用,生产环境一般都这么配置,性能很高,QPS还是可以上万的<br>appendfsync everysec<br># 不主动执行fsync ,redis将数据写入os cache就撒手不管了,然后后面os自己会时不时有自己的策略将数据输入磁盘,不可控了<br># appendfsync no
命令
bgrewriteaof
子主题
RDB
文件:dump.rdb
配置
# 设置 dump 的文件名<br>dbfilename dump.rdb
# 工作目录<br>dir ./
# save <seconds> <changes><br># 每隔900s, 有1个key发生改变则触发save<br>save 900 1<br>save 300 10<br>save 60 10000<br>
命令
save
bgsave
集群
解决的问题
单点故障
单机容量有限
压力
遵循原理
AKF
CAP
方式
主备
主从
主从 + 哨兵
关键字
二进制安全
雪崩、穿透、击穿
问题
数据库其他<br>More about Databases<br>
对象关系映射(ORMs)<br>Object Relational Mapping<br>
事务<br>Transactions<br>
定义 :由一系列数据库操作组成的一个完整的逻辑过程
四个特性ACID
原子性 (或称不可分割性)<br>Atomicity<br>
一致性<br>Consistency<br>
隔离性<br>Isolation<br>
持久性<br>Durability<br>
事务隔离级别
索引
索引概念 :<br>索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据<br>
索引模型<br>
Hash索引
B+ Tree索引
聚簇索引
简介:
类型
聚簇索引
非聚簇索引
关键字
回表
索引覆盖
联合索引(最左前缀匹配)
索引下推(5.7版本之后默认开启)<br>
主键
复合主键
联合主键
存储引擎
InnoDB
MyISAM
Memory
CAP定理<br>CAP Theorem<br>
一致性<br>Consistency<br>
可用性<br>Availability<br>
分区容错性<br>Partition tolerance<br>
分片策略<br>Sharding Strategies<br>
数据复写<br>Data Replication<br>
问题
索引优化
N+1 问题<br>N+1 Problem<br>
学习API<br>Learn about APIs<br>
HATEOAS
Open API 说明和 Swagger<br>Open API Spec and Swagger<br>
身份验证<br>Authentication<br>
REST
Read Roy Fielding’s Paper
子主题
JSON APIs
SOAP
OAuth
缓存<br>Caching
CDN<br>Content Delivery Network<br>
服务端<br>Server Side<br>
Redis
Memcached
客户端<br>Client Side<br>
网页安全 <br>Web Security Knowledge<br>
为什么不使用MD5<br>MD5 and why not to use it<br>
SHA族<br>SHA Family<br>
scrypt<br>
bcrypt<br>
哈希算法<br>Hashing Algorithms<br>
web服务器漏洞
XSS(跨域脚本攻击)<br>Cross Site Scripting
CSRF(跨域请求伪造)<br>Cross-Site Request Forgery
SSRF (服务端请求伪造)<br>Server-Side Request Forgery<br>
测试<br>Testing
持续集成与持续部署<br>CI / CD<br>
测试
集成测试<br>Integration Testing<br>
单元测试<br>Unit Testing<br>
功能测试<br>Functional Testing<br>
设计和开发原则<br>Design and Development Principles<br>
架构模式<br>Architectural Patterns<br>
单体式应用<br>Monolithic Apps<br>
优化方向
无锁化
隔离化(分库分表)
缓存
过滤有效请求
子主题
微服务<br>Microservices<br>
SOA(面向服务的架构)<br>Service-Oriented Architecture<br>
CQRS 和事件溯源<br>CQRS and Event Sourcing<br>
无服务化<br>Serverless<br>
搜索引擎<br>Search Engines<br>
Elasticsearch
Solr
设计<br>Design<br>
GOF 设计模式<br>GOF Design Patterns<br>
领域驱动设计<br>Domain Driven Design<br>
测试驱动开发<br>Test Driven Development<br>
设计模式<br>Design Pattern<br>
三大分类
创建型模式<br>Creational Pattern<br>
结构型模式<br>Structural Pattern<br>
行为型模式<br>Behavioral Pattern<br>
六大原则<br>SOLID<br>
单一职责原则<br>Single Responsibility Principle
开闭原则<br>Open Closed Principle
里氏替换原则<br>Liskov Substitution Principle
迪米特法则<br>Law of Demeter
接口隔离原则<br>Interface Segregation Principle
依赖倒置原则<br>Dependence Inversion Principle
KISS
YAGNI
DRY
集群<br>Cluster<br>
负载均衡集群(高扩展)<br>Load Balance Cluster<br>
简介:负载均衡(Load Balance)是集群技术(Cluster)的一种应用。<br>将大量的并发请求分担到多个处理节点,从而提高并发处理能力。<br>由于单个处理节点的故障不影响整个服务,负载均衡集群同时也实现了高可用性。<br>
Web负载均衡
DNS轮询
CDN(内容分发网络)<br>Content Delivery Network<br>
IP负载均衡
简介:IP负载均衡是基于特定的TCP/IP技术实现的负载均衡。<br>比如NAT、DR、Turning等<br>
硬件设备实现
F5-BIG-IP-GTM(简称F5)
缺点:价格高
软件实现
LVS (Linux虚拟服务器)<br>Linux Virtual Serve<br>
基于网络地址转换技术<br>VS/NAT<br>
基于IP隧道技术<br>VS/TUN<br>
基于直接路由技术<br>VS/DR<br>
子主题
HAProxy<br>
Nginx
高可用性集群<br>High Availability Cluster<br>
简介:提高冗余单元,避免单点故障
子主题
高性能计算集群<br>High Performance Computing Cluster<br>
简介:将单个重负载的请求分散到多个节点进行处理,<br>最后再将处理结果进行汇总<br>
性能优化
方向
响应时间优化
吞吐量优化
方式
分表分库
CDN
中间件(MQ)
消息代理<br>Message Brokers<br>
RabbitMQ
Kafka
容器化 vs 可视化<br>Containerization vs Virtualization<br>
Docker
rkt
LXC
网络通信
WebSockets
TCP<br>Transmission Control Protocol<br>
简介:是一种面向连接的、可靠的、基于字节流的传输层通信协议
问题
1. 三次握手
2. 四次挥手
UDP
Http
网页服务器<br>Web Servers<br>
Nginx
高性能
OpenResty
Apache
老牌
Caddy
MS IIS
仅用于widows
Tomcat
Java
Servelet容器
图数据库<br>Graph Databases<br>
Neo4j
GraphQL
中文网
Apollo
Relay Modern
面试
1. 语言基础
2. 框架源码,生命周期
3. 关系型数据库,事务,索引
4. 非关系型数据库,Redis
5. 消息中间件,RabbitMQ,Kafka
6. 设计模式
三大分类
六大原则
7.时间/空间 复杂度
8. 网络通信
OSI七层
TCP/IP协议族
TCP
UDP
9. 操作系统
I/O
常用命令
10. 业务场景
1. C10K<br>
全称:Concurrent 10,000 connections<br>
子主题
2. stock 库存超卖
1. 小型项目:前端防抖+库存字段无符号
2. 中小型项目:乐观锁或悲观锁。
3. 高并发场景:分布式锁 + 消息队列
4. 超高并发场景:限流 + 消息队列 + 预扣库存。
子主题
关键字
滑动时间窗口算法
令牌桶算法
hystrix & sentinel
熔断
限流
降级
服务隔离
kafka
背压
流式计算
Topic
MBA & MEM
BASE & CAP
容器化改造
0 条评论
下一页