對於12306系統的核心分票段模型,別把它想得太複雜了_風聞
鼠尾-04-23 07:26
【本文來自《在外行看來,鐵路自主選座非常容易實現,但懂行的程序員才知道這根本做不到》評論區,標題為小編添加】
你把問題想複雜了。下面幾個需求,12306是不需要實現的。
1. 把幾個座位的不同段行程合成一個完整的全程行程。
2.買一張票包含兩個及以上不連續行程。
3.一張票包含兩種或以上席位級別。
拋除這幾個問題後,其實基本模型比較簡單:
一列車座位(鋪位)總數,乘降站數。構成了一個基本矩陣,行對應座位,列對應乘降區間。比如,一列500個席位的列車,有二十個站,那麼就是十九個乘降區間。這就得到一個500*19的矩陣,每個元素有三個狀態:空,鎖,佔。
那麼賣票就是對這9500個元素的操作。每次操作的元素都是同一行(座位)的連續若干元素。
這不就是C語言基本內存分配模型麼?一毛一樣。一次分配若干長度的一段連續內存,分配成功返回首地址,不成功返回零…
中間不斷做統計,統計各區間間存在的對應內存段的數量。這就是對外顯示的可購票量。
購票請求經排隊後,一個個來,成功就返回成功,失敗就返回失敗。反正看到顯示有票並不保證能買到。
回到選座問題上來。統計區間可售票數的時候,分abcdf位置分別統計,要哪個位置的座就先從這個位置的列表中找一個,沒有就找其他表裏。哪個位置都沒有就是查找失敗,沒票了。
12306的難度主要在於併發量大,請求分流與排隊系統。至於核心分票段模型,別把它想得太複雜了。你們所認為的複雜性,不過是是那三個“不需要實現的問題”帶來的。