业务开发算法 50 讲
黄清昊
Hashdata 数据库内核工程师,LeetCode 高赞答主,公众号微扰理论作者
23292 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
业务开发算法 50 讲
15
15
1.0x
00:00/00:00
登录|注册

34|前缀树:Web框架中如何实现路由匹配?

可能出现的新问题
减少空指针存储
动态参数的匹配逻辑
优先匹配静态路由规则
节点表示路由的一节
Trie树(更常用)
正则表达式匹配
RESTful风格接口
支持带参数的URL
映射到不同API的处理逻辑
快速解析请求URL
提供拦截器或middleware
整合网络相关逻辑
封装Web服务
空间复杂度: O(t*N)
时间复杂度: O(n)
查询操作
插入操作
初始化
结构体定义
适合前缀匹配场景
维护集合的字典序
高效的有序集合实现
基于前缀的树状存储方式
字符串排序
词频统计
路由匹配
搜索引擎关键词匹配
维护字符串集合的数据结构
也称字典树或前缀树
力扣题目:实现前缀树
查阅经典路由框架源码
动手写Web框架
优化trie树的空间效率
实现基于trie树的路由匹配逻辑
动态路由
静态路由
实现方式
动态路由
路由匹配的重要性
Web框架的作用
复杂度分析
实现
特点
应用场景
定义
参考实践
课后思考
Trie树在路由匹配中的应用
路由匹配
前缀树 (Trie树)
前缀树与路由匹配

该思维导图由 AI 生成,仅供参考

你好,我是微扰君。
不知不觉,已经到工程实战篇的最后一讲了,在这个章节中,我们一起学习了很多工程中常用的算法,如果你从事后端开发,应该或多或少有些接触,比如在 Redis、Kafka、ZooKeeper 等常用中间件里就经常出现,理解它们的核心思想,能给你的工作带来很大的帮助。
今天,我们最后来聊一聊大部分 Web 开发工程师都会用到的后端 Web 框架中的算法。

路由匹配

Web 框架的作用,我们都知道,主要就是封装 Web 服务,整合网络相关的通用逻辑,一般来说也就是帮助 HTTP 服务建立网络连接、解析 HTTP 头、错误恢复等等;另外,大部分框架可能也会提供一些拦截器或者 middleware,帮助我们处理一些每个请求可能都需要进行的操作,比如鉴权、获取用户信息。
但是所有 Web 框架,无论设计得多么不同,必不可少的能力就是路由匹配。
因为我们的 Web 服务通常会对外暴露许多不同的 API,而区分这些 API 的标识,主要就是用户请求 API 的 URL。所以,一个好用的 Web 框架,要能尽可能快地解析请求 URL 并映射到不同 API 的处理逻辑,也就是我们常说的“路由匹配”
以 Golang 中常用的 Web 框架 Gin 为例,如果用户想注册一套遵循 RESTful 风格的接口,只需要像这样,写一下注册每个路由所对应的 handler 方法就完成了:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了Trie树在Web框架中实现路由匹配的技术原理及应用。Trie树是一种高效的有序集合实现,特别适合于前缀匹配的场景,如字符串检索、敏感词过滤、搜索推荐等。文章重点讨论了Trie树的数据结构和实现方式,以及其在动态路由匹配中的应用。通过示意图和代码演示,读者可以了解Trie树的存储方式和特点,以及如何在Web框架中实现路由匹配。此外,文章还提到了Trie树的空间效率问题,并留下了课后思考题,引发读者思考如何优化Trie树的实现。总的来说,本文内容深入浅出,适合对Web框架路由匹配感兴趣的读者阅读学习。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《业务开发算法 50 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • csyangchsh
    radix trie

    作者回复: 嗯嗯 之后的加餐会讲解 radix tree

    2022-03-13
    1
  • Paul Shan
    前缀树的空间浪费可以用hashmap来优化,key对应的字母,value对应下一层的指针。这种方案在节点数量多的时候反而要浪费更大的空间,因为hashmap需要一定的空余空间,而且key之间的顺序信息也丢失了。

    作者回复: 嗯嗯 有序也是前缀树的一个很大的优势

    2022-03-12
  • peter
    请教老师一个问题: Q1:如果是中文,字符集怎么处理? 文中例子是英文,字符集确定而且很小。但如果是中文,字符集太大了,怎么处理?
    2022-03-13
    1
    1
  • nbsp;
    前缀树里字母是路径不是节点
    2022-05-16
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部