对于12306系统的核心分票段模型,别把它想得太复杂了_热点聚焦
2023-04-23 07:13:43 来源:

【本文来自《在外行看来,铁路自主选座非常容易实现,但懂行的程序员才知道这根本做不到》评论区,标题为小编添加】

你把问题想复杂了。下面几个需求,12306是不需要实现的。


(资料图)

1. 把几个座位的不同段行程合成一个完整的全程行程。

2.买一张票包含两个及以上不连续行程。

3.一张票包含两种或以上席位级别。

抛除这几个问题后,其实基本模型比较简单:

一列车座位(铺位)总数,乘降站数。构成了一个基本矩阵,行对应座位,列对应乘降区间。比如,一列500个席位的列车,有二十个站,那么就是十九个乘降区间。这就得到一个500*19的矩阵,每个元素有三个状态:空,锁,占。

那么卖票就是对这9500个元素的操作。每次操作的元素都是同一行(座位)的连续若干元素。

这不就是C语言基本内存分配模型么?一毛一样。一次分配若干长度的一段连续内存,分配成功返回首地址,不成功返回零…

中间不断做统计,统计各区间间存在的对应内存段的数量。这就是对外显示的可购票量。

购票请求经排队后,一个个来,成功就返回成功,失败就返回失败。反正看到显示有票并不保证能买到。

回到选座问题上来。统计区间可售票数的时候,分abcdf位置分别统计,要哪个位置的座就先从这个位置的列表中找一个,没有就找其他表里。哪个位置都没有就是查找失败,没票了。

12306的难度主要在于并发量大,请求分流与排队系统。至于核心分票段模型,别把它想得太复杂了。你们所认为的复杂性,不过是是那三个“不需要实现的问题”带来的。

关键词:
责任编辑:zN_2340