官网地址:magestack.cn

12306 铁路购票服务是与我们日子和出行相关的要害体系,包括会员、购票、订单、付出和网关等服务。

这个项目旨在让学习者能够快速把握分布式体系规划的技巧,尤其合适对高并发、分布式感爱好的同学学习。假如想深化理解和应用分布式体系的规划准则,这个项目将会是一个很好的学习资源。

项目中包括了缓存、音讯行列、分库分表、规划形式等代码,经过这些代码能够全面了解分布式体系的中心知识点。

在体系规划中,采用 JDK17 + SpringBoot3&SpringCloud 微服务架构,构建高并发、大数据量下依然能供给高效牢靠的 12306 购票服务。

校招:外卖和商城项目不吃香了,我选 12306!

为了便利我们学习,该体系供给了两种版别:

  • SpringBoot 聚合服务版别:合适测验和布置,能够直接发动 aggregation-service 聚合服务和网关服务。
  • SpringCloud 微服务版别:合适学习微服务规划,能够分别发动付出、订单、用户、购票和网关服务。

依据自己的学习和运用需求,挑选合适的版别发动即可。微服务版别偏重学习规划,聚合服务版别偏重测验和布置。请依据场景需求,挑选正确的版别进行学习和运用。

校招:外卖和商城项目不吃香了,我选 12306!

学生为什么选 12306?

我的读者中有许多学生群体,他们反馈说实习和秋招的竞赛变得非常激烈。我们的项目内容基本雷同,大多都是经过观看B站上的视频来学习并完成的。

这种情况导致学历一般的学生很难取得面试邀请。我之所以说学历一般的同学,是因为我也见过一些学历较好的同学只写了一些外卖和商城项目,但因为学历加持,他们能比较轻松拿到大厂的面试邀请。

怎么判别一份学生的简历含金量怎么样?一般由以下项进行排序:

校园&学历 > 获奖阅历 > 实习和工作经历 > 项目 > 证书 > 专业技能 > ……

在全体学生中,校园和学历以及获奖阅历的份额相对较小。毕竟,超卓的校园和重要的竞赛机会有限。关于更多的同学来说,他们只能在其他方面努力以展现自己的优势。

综合来看,项目经历是许多同学能够展现自己的重要领域。具有超卓的项目经历在简历上具有非常重要的意义。关于学历一般的同学而言,具有优秀的项目经历可能会带来更多的面试邀请;而关于学历较好的同学而言,具有超卓的项目经历可能会使他们取得更好的公司机会。

为了完成这一方针,我决议挑选一个能够在简历中成为亮点,引起面试官爱好,而且我们熟知的项目——12306铁路购票体系。

项目质量怎么样?

我理解我们对挑选一个合适的项目以投入时刻和精力的担忧。选对项目既能够锻炼技能,又能够产出价值是非常重要的。

以用户服务体系为例,低并发和低数据量的体系相对简单,但高并发和海量数据的体系则需求考虑许多额外因素。

  1. 当用户在 12306 网站注册新账号或增加搭车人时,体系需验证用户提交信息的实在性和准确性。怎么有用防备用户提交虚伪信息,保障体系购票的安全
  2. 12306 的大规模用户和搭车人数据怎么挑选分库分表?挑选哪个字段作为分片键?怎么在老事务上滑润上线分库分表?出现问题怎么快速回滚?
  3. 体系支撑会员运用用户名、手机号以及邮箱等多种方法进行登录。因为登录时无法承认用户的分片键,造成的“读恳求分散”问题怎么解决?
  4. 在高并发的会员注册场景下,绝对会出现缓存穿透问题。网上鼓吹的对不存在 Key 进行缓存值设为 Null,以及布隆过滤器等都存在漏洞,怎么解决?
  5. 存在较多的敏感信息,比如会员或者搭车人的姓名、手机号、邮箱、证件号码以及住址,怎么防止数据库被攻击时造成的敏感信息泄露?

再以购票服务为例,当用户购买两个搭车人的高铁一等座票且没有选座时,座位的分配逻辑如下:

  1. 首要查看当时列车的一等座余票是否满意。假如余票不足,直接向客户端回来购票恳求失利的响应。
  2. 获取一切车厢中有两个座位余票的车厢,并对这些车厢进行遍历,按照下述流程履行。
  3. 首要查看一切车厢中是否存在一等座车票的相邻座位。假如一切车厢中都没有相邻座位,进入下一步逻辑。
  4. 接着查看是否有车厢中包括两个不相邻的一等座座位?因为同车厢两座位相邻座位没有的话,就退而找同车厢不相邻座位。
  5. 假如以上逻辑都无法满意,那么最后挑选分配不同车厢的不相邻座位。这种情况下,因为已经承认一等座的余票足够,因此必定能够成功完成购票。

经过以上步骤,购票体系能够在高铁一等座票余票足够的情况下,合理地分配座位,保证搭车人出行时有杰出的座位体会。一起,假如余票不足,体系会优先满意搭车人顺利购票的需求。

项目文档

  • 入门预备

    • 什么是 12306
    • 为什么 12306 更合适学生
    • 后端技能架构选型
    • 项目接口文档
    • 前端操控台手册
    • 怎么从零到一学习 12306
  • 快速开始

    • 项目依靠中间件环境搭建
    • 快速发动(后端)
    • 快速发动(前端)
    • 12306 用户体系建设概要
    • ……
  • 中心技能文档

    • 怎么生成大局唯一分布式 ID
    • 怎么运用 Builder 形式创立线程
    • 责任链形式重构杂乱事务场景
    • 死磕规划形式之笼统责任链形式
    • 战略形式在项目规划中用得最多
    • 怎么运用线程池不容易出毛病
    • ……
  • 手摸手从零到一完成

    • 手摸手之整理中心事务
    • 手摸手之整理数据库表结构触及
    • ……
  • 面试系列

    • 怎么把 12306 写到简历上
    • 小红书内容引荐部门一面
    • ……

项目根底架构

1. 项目工程目录介绍

├── checkstyle  || -- # 代码格局查看组件
│  ├── 12306_checkstyle.xml  || -- # 代码格局查看组件规矩装备
│  └── 12306_checkstyle_suppression.xml  || -- # 疏忽代码格局查看组件规矩装备
├── console-vue  || -- #  12306 前端操控台项目
│  ├── README.md
│  ├── babel.config.js
│  ├── jsconfig.json
│  ├── node_modules
│  ├── package.json
│  ├── public
│  ├── src
│  ├── vue.config.js
│  └── yarn.lock
├── dependencies  || -- #  12306 后端项目大局依靠版别操控
│  └── pom.xml
├── format  || -- #  12306 后端项目格局化组件
│  ├── 12306_spotless_formatter.xml  || -- #  12306 后端项目格局化组件规矩装备
│  └── license-header  || -- #  12306 后端项目开源协议头格局化
├── frameworks  || -- #  12306 根底架构组件库
│  ├── base  || -- #  12306 顶层笼统根底组件
│  ├── bizs  || -- #  12306 事务相关根底组件,比如用户上下文等
│  ├── cache  || -- # 12306 缓存根底组件
│  ├── common  || -- # 12306 公共东西包组件
│  ├── convention  || -- # 12306 项目规约组件
│  ├── database  || -- # 12306 数据库耐久层组件
│  ├── designpattern  || -- # 12306 规划形式笼统根底组件
│  ├── distributedid  || -- # 12306 分布式 ID 根底组件
│  ├── idempotent  || -- # 12306 幂等根底组件,包括 HTTP 及不同音讯行列完成
│  ├── log  || -- # 12306 日志打印根底组件库
│  └── web  || -- # 12306 Web 相关根底组件库
│  ├── pom.xml
├── resources  || -- # 12306 项目数据库初始化及其它
│  ├── data  || -- # 12306 数据库数据初始化
│  └── db  || -- # 12306 数据库初始化
├── services  || -- # 12306 后端项目调集
│  ├── aggregation-service  || -- # 12306 SpringBoot 聚合形式服务
│  ├── gateway-service  || -- # 12306 网关服务
│  ├── order-service  || -- # 12306 订单服务
│  ├── pay-service  || -- # 12306 付出服务
│  ├── ticket-service  || -- # 12306 购票服务
│  └── user-service  || -- # 12306 用户服务
│  ├── pom.xml
└── tests  || -- # 12306 单元测验调集
│  ├── general  || -- # 12306 通用单元测验
└── pom.xml
├── LICENSE
├── mvnw
├── mvnw.cmd
├── pom.xml
├── README.md

2. 后端架构依靠

技能 称号 版别 官网
1 Spring Boot 根底结构 3.0.7 spring.io/projects/sp…
2 MyBatis-Plus 耐久层结构 3.5.3.1 baomidou.com
3 HikariCP 数据库连接池 5.0.1 github.com/brettwooldr…
4 Redis 分布式缓存数据库 Latest redis.io
5 RocketMQ 音讯行列 2.2.3 rocketmq.apache.org
6 ShardingSphere 数据库生态体系 5.3.2 shardingsphere.apache.org
7 SpringCloud Alibaba 分布式结构 2022.0.0.0-RC2 github.com/alibaba/spr…
8 SpringCloud Gateway 网关结构 2022.0.3 spring.io/projects/sp…
9 FastJson2 JSON 序列化东西 2.0.36 github.com/alibaba/fas…
10 Canal BinLog 订阅组件 1.1.6 github.com/alibaba/can…
11 HuTool 小而全的东西集项目 5.8.2 hutool.cn
12 Swagger3 项目 API 文档结构 3.x swagger.io
13 Knife4j Swagger 增强结构 3.x doc.xiaominfo.com
14 Maven 项目构建办理 3.9.1 maven.apache.org
15 Redisson Redis Java 客户端 3.21.3 redisson.org
16 Sentinel 流控防护结构 1.8.6 github.com/alibaba/Sen…
17 Hippo4j 动态线程池结构 1.5.0 hippo4j.cn
18 XXL-Job 分布式守时使命结构 2.4.0 www.xuxueli.com/xxl-job
19 SkyWalking 分布式链路追寻结构 9.5.0 skywalking.apache.org
20 JetCache Java 缓存结构 2.7.3 github.com/alibaba/jet…
21 TTL 增强版 ThreadLocal 2.14.3 github.com/alibaba/tra…

怎么运用

12306 前端操控台演示环境:12306.magestack.cn

前端体系完成了与官网极为挨近的事务逻辑和 UI 展现。

在学习过程中,经过相似官网的前端体系直接调试后端服务,能够避免纯经过接口测验的繁琐。这种实在场景的模仿,使得学习过程更加流通高效。

目前前端体系还在开发中,部分事务及细节处还在调整,完成后统一给出操控台操作手册,请耐心等候。

1. 车票查询功用

校招:外卖和商城项目不吃香了,我选 12306!

2. 提交订单页,挑选搭车人下单

校招:外卖和商城项目不吃香了,我选 12306!

3. 高铁在线选座页面

校招:外卖和商城项目不吃香了,我选 12306!

常见问题答疑

Q:面向人群是学生,可是里边这么多的代码规划方案,学生能看明白么?

A:文档中预备了两部分材料,一部分是讲解技能完成细节,经过该部分能够很好把握中心技能;另一部分是讲怎么从零到一完成体系;经过两种文档结合,能够很好吸收 12306 体系中的规划。

Q:怎么把 12306 项目写到我的简历上?

A:马哥在文档库最后给我们供给了 12306 写到简历上的亮点、难点以及解决方案。其次,经过 12306 去面试的小伙伴的面试题也会进行汇总,免费供我们学习运用。

Q:工作几年的有必要看 12306 这个体系么?

A:我觉得有必要,已经工作的同学尽管没办法把这个项目应用到简历上,可是体系中好的规划却是能够代入到自己的项目中,提高自己项目的亮点以及难点。

项目文档

共计 100+ 中心技能文档!帮助你深化了解以及快手上手 12306 体系。

项目中的文档包括三部分,快速开始、中心技能文档以及从零到一开发。可依据自己的爱好挑选深化了解中心技能或从零到一复刻体系。

校招:外卖和商城项目不吃香了,我选 12306!