秋招面试少?现在换12306还来得及!

历经数月开发以及文档编写,仿 12306 铁路购票系统的代码和面试相关文档终于写好啦!

自打宣传后,一个月时间收获 2.5k Star,这个增长以及受欢迎程度是我没想到的。

为啥之前没见在掘金推过呢?因为之前面试文档一直没补充完备,直到昨天才全部完成。主要原因在代码设计都是按照企业真实业务设计的,速度就快不了。

老规矩,这篇文章从几个纬度给大家说明:我为什么写这个项目?项目质量怎么样?如何学习?

为什么写这个项目?

我的读者中有很多学生群体,他们反馈说实习和秋招的竞争变得非常激烈。

导致这个问题的根源之一,就是大家写的简历基本上千篇一律,项目经验这块不是某外卖就是某商城,亦或者xxx后台管理系统。

1. 为什么某外卖和商城面试少?

为什么说某外卖和商城项目是面试邀约少,我总结了两点原因:

  1. 写这些项目的同学太多了。我向其他公司的朋友询问了下,大部分学生在投递简历时选择了类似的项目,这导致了一种"审美疲劳"的现象。为什么不选择一些具有个性的项目来丰富简历呢?此外,我还了解到一些公司的 HR 明确表示,带有商城或秒杀的项目简历基本上不会考虑。
  2. 学生们的回答都变得千篇一律。这让我想起了《邪不压正》中的一句台词:"都是一个师傅教的,破不了招啊。"放到这个情境下也同样适用,因为他们都是通过观看一个项目的视频来学习,所以回答几乎一模一样。甚至一些学历较好的同学写了这些项目也遇到了阻碍,他们问道:"为什么我写了这个外卖项目,但面试官却不怎么问呢?"原因也是一样的,被问得太多次了,再问也就那么回事了。

这些项目并不是不好。从初学者的角度来看,这些项目绝对够用了。教学老师的经验非常丰富,能够带领学生入门。这也是这些项目如此受欢迎的原因之一。

然而,随着计算机行业的不断发展,我们可以看到行业内竞争的不断加剧。从最早做过项目会写代码,到商城秒杀项目的流行,再到如今商城秒杀项目大众化的普及,这都是竞争激烈的体现。

如何破局?我认为,我们可以寻找那些小众但有亮点的项目,使我们的简历与其他同学的简历有所区别。想象一下,如果你是一个面试官,你会选择看那些千篇一律的简历,还是那些具有独特亮点的小众项目的简历呢?

2. 如何在简历上写个亮眼项目

大家的项目内容基本雷同,大多都是通过观看 B 站上的视频来学习并完成的。

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

如何判断一份学生的简历含金量怎么样?通常由以下项进行排序:

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

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

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

为了实现这一目标,我决定选择一个能够在简历中成为亮点,引起面试官兴趣,并且大家熟知的项目------12306铁路购票系统。

项目质量怎么样

1. 12306 项目介绍

12306 铁路购票服务是与大家生活和出行相关的关键系统,包括会员、购票、订单、支付和网关等服务。

这个项目旨在让学习者可以快速掌握分布式系统设计的技巧,尤其适合对高并发、分布式感兴趣的同学学习。如果想深入理解和应用分布式系统的设计原则,这个项目将会是一个很好的学习资源。

项目中包含了缓存、消息队列、分库分表、设计模式等代码,通过这些代码可以全面了解分布式系统的核心知识点。

为了方便大家学习,该系统提供了两种版本:

  • SpringBoot 聚合服务版本:适合测试和部署,可以直接启动 aggregation-service 聚合服务和网关服务。
  • SpringCloud 微服务版本:适合学习微服务设计,可以分别启动支付、订单、用户、购票和网关服务。

根据自己的学习和使用需求,选择合适的版本启动即可。微服务版本侧重学习设计,聚合服务版本侧重测试和部署。请根据场景需要,选择正确的版本进行学习和使用。

2. 技术架构

在系统设计中,采用最新 JDK17 + SpringBoot3&SpringCloud 微服务架构,构建高并发、大数据量下仍然能提供高效可靠的 12306 购票服务。

通过学习 12306 项目,不仅能了解其运作机制,还能接触最新技术体系带来的新特性,从而拓展技术视野并提升自身技术水平。

下方的架构图全面描述了项目的服务集合、组件库列表和基础设置层等要素,有助于用户快速了解 12306 平台的顶层设计和业务细节,从零到一进行构建。

虽然我画图能力一般,但是为了画出美观些的架构图,尽力了兄弟们。

优质的项目必备一份完善的架构图,自夸一下 😎

3. 前后端分离

12306 前端系统实现了与官网极为接近的业务逻辑和 UI 展示。

在学习过程中,通过类似官网的前端系统直接调试后端服务,可以避免纯通过接口测试的繁琐。这种真实场景的模拟,使得学习过程更加流畅高效。

1)登录注册页面。

2)购票页面。

3)订单确认页面。

4)高铁列车选座页面。

5)订单确认页面。

6)订单支付页面。

4. 项目文档完整

共计 100+ 核心技术文档!帮助你深入了解以及快手上手 12306 系统。

项目中的文档包括三部分,快速开始、核心技术文档以及从零到一开发。可根据自己的兴趣选择深入了解核心技术或从零到一复刻系统。

5. 视频教学

最早规划只有文档没有视频,后来和星球几位同学沟通后,认为 12306 主要面向学生校招,可能有些同学的看文档接收效果一般,就想着同时也录制视频。

目前核心文档已近尾声,视频正在不断更新中,请大家耐心等待。已有视频教学如下:

怎么保证这不是个 Demo 工程?

很多同学有这样的疑问,怎么保证这个 12306 项目不是个 Demo 工程呢?

首先,项目代码就是开源的,完全可以自己去求证。其次,我有这个信心开源出来,就不怕被大家质疑。

从工程上来说,说个扣减列车站点余票的案例,大家一看便知。

1. 列车购票余量扣减

刚接触 12306 的大部分同学可能会误以为,如果购买了从北京南到南京南的车票,只会扣减北京南到南京南站点的车票。但实际情况并非如此。购买了北京南到南京南的列车票时,会扣减沿途站点的库存。

假设购买商务座,列车站点间的初始库存是一致的。下面是购买北京南到南京南车票的流程图示:

再来一个进阶版本的,如果购买济南西到杭州东的车票,流程图如下所示。大家可能会比较疑惑,为什么要扣减北京南到南京南、北京南到宁波、北京南到杭州东以及北京南到宁波?这是因为中间车票被购买了,北京南作为始发站,只能购买北京南到济南西的车票。

2. 缓存数据库一致性

我们采用了一种确保缓存和数据库一致性的方案,使用 Canal 监听 Binlog 模式。该方案将数据库的数据变更通过 Canal 转发给消息队列的特定 Topic。客户端应用程序可以监听该消息队列的 Topic,以保持缓存与数据库的一致性。

时序图如下所示:

3. 支持海量抢票请求

如果按照普通的流程去设计高并发抢票流程,那系统肯定挂的不能再挂了。所以,实际设计中,加入了令牌限流算法、本地锁、分布式锁、分段锁、分库分表等技术进行扩展系统并发能力。

如果用户来购票,根据所选择的乘车人数量以及座位类型去令牌容器中获取,获取成功则表示余票充足,可以进入接下来的选票以及下单流程,获取失败则直接返回。

值得一提的是购票接口有两个版本,第二个版本进行了大量的重构,这也是为什么 12306 能支持海量并发的原因。

4. 创建订单

电商流程多是订单服务调用商品进行扣减 SKU,但是咱们这里反过来了,通过购票服务调用订单服务。

以下流程是订单服务中的流程图:

如何学习

Gitee 仓库地址:gitee.com/nageoffer/1...

12306 铁路购票系统学习总体分为三块:业务梳理、组件库开发以及业务系统开发。

上述这些内容,以及详细的学习文档和视频,都可以在「拿个offer-开源&项目实战」社群专属内容中找到。

一位 211 学校的社群用户在我的指导下顺利拿下快手 Offer!虽然我没去过快手,自己教过的同学去了也挺开心的 😄

我用12306项目拿下快手秋招!

截至目前,已经有很多同学去拿 12306 去面试了,有几个进度快的同学已经拿了 offer,进度慢的也在走流程过程中。以下是回馈给我公司面试真题的一个列表。这个系列将来会越来越多。

问题答疑

Q:没学过 SpringCloud 可以加入星球学习么?

A:可以的,咱们 12306 有 SpringBoot 版本和 SpringCloud 版本,启动 SpringBoot 看就好了。

Q:马上要秋招了,现在换 12306 学习时间需要花费多久?

A:一般的话,根据社群里的同学反馈,跟着文档走下来应对面试,大概 5-10 天就好。

Q:随着 12306 项目的流行,会不会成为像商城和外卖一样的烂大街项目?

A:早就是优势!可以预见 12306 项目一定会火,会被更多同学用到校招上。但是预期最近两年没什么问题。

Q:面向人群是学生,但是里面这么多的代码设计方案,学生能看明白么?

A:文档中准备了两部分资料,一部分是讲解技术实现细节,通过该部分可以很好掌握核心技术;另一部分是讲如何从零到一实现系统;通过两种文档结合,可以很好吸收 12306 系统中的设计。

Q:如何把 12306 项目写到我的简历上?

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

关于我

开源爱好者,业务架构师。一个不是在造轮子,就是在造轮子路上的程序员,追求优雅编码。

业余时间自主推出过几个开源项目,获得了用户很好的反馈。通过开源项目认识了许多志同道合的伙伴。

2021.6 月开源线程池框架 Hippo4j 至今,收获接近 6k Star,40+ 企业生产正式使用。下一个阶段尝试向 Apache 社区提交项目孵化申请。

2022 年贡献 Apache 顶级数据库中间件项目 ShardingSphere。同年,历经三个月持续贡献,被社区提名 Apache ShardingSphere Committer

关于写代码,2021 年至今已写近 15 万行代码,包括不限于 Hippo4j、CongoMall、12306 等项目。

还记得刚毕业时技术经理说过:"程序员写过 10 万行代码,可以称之为技术高手"。我不是技术高手,但正在不断努力,以期成为这样的程序员。

相关推荐
邹霍梁@开源软件GoodERP7 小时前
《手札·开源篇》从开源到商业化:中小企业的低成本数字化转型路径 ——以Odoo为数据中台低成本实现售前售中一体化
开源
说私域11 小时前
基于开源2 + 1链动模式AI智能名片S2B2C商城小程序的内容创作与传播效能探究
人工智能·小程序·开源
小乌龟快跑12 小时前
React Hooks 隔离机制和自定义 Hooks
react.js·面试
小乌龟快跑12 小时前
React Function Component 中闭包形成原因及解决方法
前端·面试
小菜鸟博士14 小时前
手撕Vision Transformer -- Day1 -- 基础原理
人工智能·深度学习·学习·算法·面试
奥顺互联V15 小时前
yes镜像站群/PHP驱动的镜像站群架构实践
开发语言·架构·开源·php
qq_4593403919 小时前
大厂面试题备份20250201
面试
x-cmd20 小时前
[250202] DocumentDB 开源发布:基于 PostgreSQL 的文档数据库新选择 | Jekyll 4.4.0 发布
数据库·postgresql·开源
小众AI1 天前
AI-on-the-edge-device - 将“旧”设备接入智能世界
人工智能·开源·ai编程
customer081 天前
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源