Reclutamiento escolar: los proyectos de comida para llevar y centros comerciales ya no son populares, ¡elijo 12306!

Dirección del sitio web oficial: magestack.cn

12306 El servicio de emisión de boletos ferroviarios es un sistema clave relacionado con la vida y los viajes de todos, incluidos los servicios de membresía, emisión de boletos, pedidos, pagos y pasarela.

Este proyecto tiene como objetivo permitir que los estudiantes dominen rápidamente las habilidades del diseño de sistemas distribuidos, especialmente adecuado para estudiantes interesados ​​en aprendizaje distribuido y de alta simultaneidad. Si desea comprender en profundidad y aplicar los principios de diseño de los sistemas distribuidos, este proyecto será un buen recurso de aprendizaje.

El proyecto incluye códigos como caché, cola de mensajes, subbase de datos y subtabla, y patrones de diseño. A través de estos códigos, puede comprender completamente los puntos de conocimiento básicos del sistema distribuido.

En el diseño del sistema, se adopta la arquitectura de microservicio JDK17 + SpringBoot3 y SpringCloud para construir un servicio de compra de boletos 12306 eficiente y confiable bajo alta concurrencia y gran volumen de datos.

Para facilitar el aprendizaje de todos, el sistema ofrece dos versiones:

  • Versión del servicio de agregación SpringBoot: adecuado para pruebas e implementación, puede iniciar directamente aggregation-serviceel servicio de agregación y el servicio de puerta de enlace.
  • Versión de microservicio de SpringCloud: adecuada para aprender a diseñar microservicios y puede iniciar servicios de pago, pedido, usuario, ticket y puerta de enlace, respectivamente.

De acuerdo con sus propias necesidades de aprendizaje y uso, elija la versión adecuada para comenzar. La versión de microservicio se centra en el diseño de aprendizaje y la versión de servicio de agregación se centra en la prueba y la implementación. Elija la versión correcta para aprender y usar de acuerdo con las necesidades de la escena.

¿Por qué los estudiantes eligen 12306?

Entre mis lectores hay muchos grupos de estudiantes e informan que la competencia por las pasantías y los reclutas de otoño se ha vuelto muy feroz. El contenido del proyecto de todos es básicamente el mismo, y la mayoría de ellos se aprenden y completan viendo videos en la estación B.

Esta situación dificulta que los estudiantes con calificaciones académicas promedio obtengan invitaciones para entrevistas. La razón por la que digo estudiantes con educación promedio es porque he visto algunos estudiantes con mejor educación que solo escribieron algunos proyectos de comida para llevar y de centros comerciales, pero debido a su educación, pueden obtener invitaciones para entrevistas de grandes fábricas con relativa facilidad.

¿Cómo juzgar el contenido de oro del currículum de un estudiante? Normalmente ordenados por:

Escuela y educación> Experiencia premiada> Prácticas y experiencia laboral> Proyectos> Certificados> Habilidades profesionales>  …

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

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

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

项目质量怎么样?

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

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

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

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

  1. 首先检查当前列车的一等座余票是否足够。如果余票不足,直接向客户端返回购票请求失败的响应。
  2. 获取所有车厢中有两个座位余票的车厢,并对这些车厢进行遍历,按照下述流程执行。
  3. 首先检查所有车厢中是否存在一等座车票的相邻座位。如果所有车厢中都没有相邻座位,进入下一步逻辑。
  4. 接着检查是否有车厢中包含两个不相邻的一等座座位?因为同车厢两座位相邻座位没有的话,就退而找同车厢不相邻座位。
  5. 如果以上逻辑都无法满足,那么最后选择分配不同车厢的不相邻座位。这种情况下,由于已经确认一等座的余票充足,因此一定能够成功完成购票。

通过以上步骤,购票系统能够在高铁一等座票余票充足的情况下,合理地分配座位,确保乘车人出行时有良好的座位体验。同时,如果余票不足,系统会优先满足乘车人顺利购票的需求。

项目文档

项目基础架构

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. 车票查询功能

img

2. 提交订单页,选择乘车人下单

img

3. 高铁在线选座页面

常见问题答疑

P: La audiencia son los estudiantes, pero hay tantas soluciones de diseño de código, ¿pueden los estudiantes entenderlo?

R: En el documento se preparan dos partes de información, una es para explicar los detalles de implementación técnica, a través de los cuales puede dominar bien la tecnología central; la otra parte es para hablar sobre cómo implementar el sistema de cero a uno; a través de la combinación de los dos documentos, puede absorber fácilmente el diseño 12306 en el sistema.

P: ¿Cómo escribir el proyecto 12306 en mi currículum?

R: Al final de la biblioteca de documentos, el hermano Ma le proporcionó los puntos destacados, las dificultades y las soluciones que 12306 escribió en su currículum. En segundo lugar, también se resumirán las preguntas de la entrevista de los socios pequeños que asistieron a la entrevista a través de 12306, de forma gratuita para que todos puedan aprender y usar.

P: ¿Es necesario mirar el sistema 12306 después de trabajar durante varios años?

R: Creo que es necesario, aunque los estudiantes que ya están trabajando no pueden aplicar este proyecto a sus hojas de vida, el buen diseño en el sistema puede ser sustituido en sus propios proyectos para mejorar los aspectos más destacados y las dificultades de sus proyectos.

documentación del proyecto

¡Un total de más de 100 documentos técnicos básicos! Ayudarlo a comprender y comenzar rápidamente con el sistema 12306.

La documentación del proyecto incluye tres partes, inicio rápido, documentación técnica básica y desarrollo cero a uno. Según sus propios intereses, puede optar por aprender más sobre la tecnología central o reproducir el sistema de cero a uno.

Supongo que te gusta

Origin juejin.im/post/7259757499254718524
Recomendado
Clasificación