又一道软通动力7K月薪面试题——银行业务调度系统
后期補(bǔ)充:網(wǎng)友對(duì)我詬病最多的就是我?guī)蛯W(xué)生做面試題,說(shuō)這是小偷和騙子行為,在此,我對(duì)自己給學(xué)員做面試題做出如下解釋:
?(1)學(xué)員拿著面試題來(lái)找老師,學(xué)生也事先思考和嘗試后實(shí)在沒(méi)有辦法,又求職心切才想到找老師幫忙的。老師出于對(duì)題目和技術(shù)的好奇,也出于對(duì)學(xué)生的感情,才不辭勞苦去幫助做題的。明知小孩自己做不到,還不幫小孩去做,非要鍛煉孩子自己去做,現(xiàn)在估計(jì)很多父親都做不到吧。何況,學(xué)生也是我們的客戶(hù),我們不去幫一下,這個(gè)顯得太冷酷無(wú)情了。
?(2)有人說(shuō),應(yīng)該讓學(xué)生自己去做,做不出來(lái)就別去招聘單位冒充好漢,幫學(xué)生做題就是鼓勵(lì)學(xué)生行騙和作惡!從這一點(diǎn)上來(lái)說(shuō),事情做得確實(shí)有點(diǎn)不光明磊落,但用行騙和作惡來(lái)形容,就言之過(guò)重了。畢竟用人單位也不是傻子,隨便找個(gè)農(nóng)民工把結(jié)果交上去,用人單位就會(huì)錄用嗎?用人單位在做題之前就對(duì)學(xué)員進(jìn)行過(guò)一些基本的技術(shù)考核和交流,肯定也是覺(jué)得差不多了,才讓學(xué)生把題目拿回家去做的,學(xué)生做出來(lái)后,也要給他們?nèi)ブv解代碼思路的,只要學(xué)生能說(shuō)清楚代碼思路,用人單位未必真關(guān)心是學(xué)員自己?jiǎn)为?dú)做的,還是有朋友幫忙做的,因?yàn)楹芏鄦挝坏恼衅笉徫皇菍?duì)事不對(duì)人的,只要能把工作中安排的事情搞定,那就不管這個(gè)人是否是自己親自搞定的,還是靠外援搞定的,公司要的是事情的結(jié)果。很多公子哥在一些大公司都掛職“副總經(jīng)理”,難道這個(gè)公子哥真有“副總經(jīng)理”的能力嗎?不管他們有沒(méi)有,但是,他們能靠自己的關(guān)系把“副總經(jīng)理”要辦的事情辦妥,這就是公司的目的。同樣道理,公司不管學(xué)生是怎么做出來(lái),只要學(xué)生做出來(lái)了,就說(shuō)明他或他的親友團(tuán)能解決公司日后分配給他的任務(wù),才不管他是怎么解決的呢?公司也許要的就是這一點(diǎn)。如果是這樣,我們正好滿足了公司的需求,怎么能說(shuō)是行騙和作惡呢!
?(3)我歷來(lái)的一個(gè)觀念就是:對(duì)于我花時(shí)間研究透和解決過(guò)的技術(shù)問(wèn)題,只有把這些知識(shí)分享出去,才能實(shí)現(xiàn)個(gè)人價(jià)值和社會(huì)價(jià)值的更大化。如果一個(gè)人花了很多時(shí)間和精力搞明白的知識(shí)只裝在自己的肚子里,不找機(jī)會(huì)把它應(yīng)用出來(lái),那么這個(gè)知識(shí)就沒(méi)有什么價(jià)值,一個(gè)知識(shí)只有被很多人使用,被反復(fù)地使用,才能實(shí)現(xiàn)這個(gè)知識(shí)的價(jià)值最大化。所以,我把這些題目和解題思路都公布出來(lái)了,為了吸引更多人來(lái)學(xué)習(xí),我當(dāng)然要告訴大家這是面試題,并且是決定工作成敗的面試題,這也是提高大家來(lái)學(xué)習(xí)這個(gè)題目的熱情的一種激勵(lì)手法罷了,沒(méi)想到被送到了道德審判的十字架上了。
更正:
???上一篇交通燈管理系統(tǒng)原本是軟通動(dòng)力的一道面試題,由于時(shí)間久遠(yuǎn)有點(diǎn)忘記了,誤寫(xiě)成聯(lián)想利泰的。我這里也有聯(lián)想利泰出的一道類(lèi)似面試題【移動(dòng)資費(fèi)統(tǒng)計(jì)系統(tǒng)】,我將在下一篇博客中為大家講解。
背景介紹:
? 參看《交通燈管理系統(tǒng)》的介紹, 其中說(shuō)到又有另外一名學(xué)員也去了該外包公司面試,同樣也是讓他三天內(nèi)做這個(gè)交通燈管理系統(tǒng),當(dāng)我告訴另外這名同學(xué),已經(jīng)有一個(gè)同學(xué)先他一步來(lái)找我了,我只能滿足他們倆人中的一人,否則,他們就會(huì)出現(xiàn)答案雷同,最后對(duì)他們倆人都造成不利影響。另外這名同學(xué)聽(tīng)后說(shuō):"張老師,您就只管xxx同學(xué)吧,不用管我了",聽(tīng)到這種仗義的話,我還真高興,因?yàn)槲易畈粣?ài)與那些自私自利的小氣人打交道的,今天遇到這種仗義的學(xué)員,我當(dāng)然高興了。當(dāng)我做完《交通燈管理系統(tǒng)》后,立馬發(fā)郵件給了這倆名同學(xué),還特意打電話通知了一下后來(lái)的那名同學(xué),讓他把代碼改一改再去找那家軟件外包公司,免得雷同。結(jié)果后來(lái)這名同學(xué)主動(dòng)打電話給先前的同學(xué),讓他先去給那家公司交答案,他再晚一天過(guò)去。不出所料,先前的同學(xué)順利上班了,等到后來(lái)這名同學(xué)第二天去公司交答案時(shí),用人單位說(shuō):“那個(gè)交通系統(tǒng)項(xiàng)目組的人已經(jīng)招滿了,我們另外還有一個(gè)銀行的項(xiàng)目,銀行項(xiàng)目組還要招人,如果你愿意,你再回去做一個(gè)銀行系統(tǒng)的題目,如果做得出來(lái)的話,就進(jìn)入我們的銀行項(xiàng)目組。”
? 說(shuō)真的,這家軟件公司招聘的手段還真不錯(cuò),我很欣賞這種招聘方法,他們不再用常規(guī)的網(wǎng)上都找得到的面試題進(jìn)行面試了,而是直接用項(xiàng)目中的業(yè)務(wù)來(lái)選人。我想這個(gè)公司這么做,應(yīng)該也是出于無(wú)奈吧,這樣做完全就是為了防止招到那種濫竽充數(shù)的“南郭先生”,并不是要利用面試者的勞動(dòng)成果,他們公司規(guī)模很大,不至于吝嗇這么一點(diǎn)工錢(qián)。這家軟件公司是做外包的,程序員流動(dòng)性很強(qiáng),所以經(jīng)常需要招聘大量的開(kāi)發(fā)人員,但是他們以前招聘到的南郭先生實(shí)在太多,弄得他們叫苦不迭!他們招進(jìn)了很多人,面試的時(shí)候感覺(jué)這些人題目都做得好好的,但是一到工作崗位的表現(xiàn)則與面試時(shí)完全判若兩人,后來(lái)他們調(diào)查原因發(fā)現(xiàn),現(xiàn)在來(lái)面試的人都背過(guò)網(wǎng)上的面試題,所以現(xiàn)在通過(guò)面試題已經(jīng)很難選撥出真正的人才了。我們有不少學(xué)員都在這家公司工作過(guò),以前就有在這家公司上班的學(xué)員回來(lái)給我說(shuō)過(guò),他去這家公司根本就沒(méi)做面試題,而是直接上機(jī)操作通過(guò)后,這家公司說(shuō):“雖然現(xiàn)在做面試題沒(méi)有什么意義了,但是為了加強(qiáng)和復(fù)習(xí)一下基礎(chǔ)知識(shí),你還是要把這些面試題好好看一看”,這家公司給了我們的學(xué)員一套面試題,我們學(xué)員回來(lái)后一看,發(fā)現(xiàn)這套題與我整理的《就業(yè)面試寶典》差不多,幾乎沒(méi)有什么區(qū)別!
第二名同學(xué)拿回來(lái)的銀行項(xiàng)目如下:
銀行業(yè)務(wù)調(diào)度系統(tǒng)
?
原始需求文檔下載????講座ppt下載????講座源碼下載????講座視頻下載
?
模擬實(shí)現(xiàn)銀行業(yè)務(wù)調(diào)度系統(tǒng)邏輯,具體需求如下:
- 銀行內(nèi)有6個(gè)業(yè)務(wù)窗口,1 - 4號(hào)窗口為普通窗口,5號(hào)窗口為快速窗口,6號(hào)窗口為VIP窗口。
- 有三種對(duì)應(yīng)類(lèi)型的客戶(hù):VIP客戶(hù),普通客戶(hù),快速客戶(hù)(辦理如交水電費(fèi)、電話費(fèi)之類(lèi)業(yè)務(wù)的客戶(hù))。
- 異步隨機(jī)生成各種類(lèi)型的客戶(hù),生成各類(lèi)型用戶(hù)的概率比例為:
??????? VIP客戶(hù):普通客戶(hù):快速客戶(hù)? =? 1 :6 :3。
- 客戶(hù)辦理業(yè)務(wù)所需時(shí)間有最大值和最小值,在該范圍內(nèi)隨機(jī)設(shè)定每個(gè)VIP客戶(hù)以及普通客戶(hù)辦理業(yè)務(wù)所需的時(shí)間,快速客戶(hù)辦理業(yè)務(wù)所需時(shí)間為最小值(提示:辦理業(yè)務(wù)的過(guò)程可通過(guò)線程Sleep的方式模擬)。
- 各類(lèi)型客戶(hù)在其對(duì)應(yīng)窗口按順序依次辦理業(yè)務(wù)。
- 當(dāng)VIP(6號(hào))窗口和快速業(yè)務(wù)(5號(hào))窗口沒(méi)有客戶(hù)等待辦理業(yè)務(wù)的時(shí)候,這兩個(gè)窗口可以處理普通客戶(hù)的業(yè)務(wù),而一旦有對(duì)應(yīng)的客戶(hù)等待辦理業(yè)務(wù)的時(shí)候,則優(yōu)先處理對(duì)應(yīng)客戶(hù)的業(yè)務(wù)。
- 隨機(jī)生成客戶(hù)時(shí)間間隔以及業(yè)務(wù)辦理時(shí)間最大值和最小值自定,可以設(shè)置。
- 不要求實(shí)現(xiàn)GUI,只考慮系統(tǒng)邏輯實(shí)現(xiàn),可通過(guò)Log方式展現(xiàn)程序運(yùn)行結(jié)果。
解題思路
?
- 面向?qū)ο蟮姆治龊驮O(shè)計(jì):
(一)有三種對(duì)應(yīng)類(lèi)型的客戶(hù):VIP客戶(hù),普通客戶(hù),快速客戶(hù),異步隨機(jī)生成各種類(lèi)型的客戶(hù),各類(lèi)型客戶(hù)在其對(duì)應(yīng)窗口按順序依次辦理業(yè)務(wù)。
? 1.首先,經(jīng)常在銀行辦理業(yè)務(wù)的人更有利于理解本系統(tǒng),例如,我經(jīng)常陪老婆跑銀行,對(duì)銀行的這個(gè)業(yè)務(wù)算是比較熟悉了,我知道每一個(gè)客戶(hù)其實(shí)就是由銀行的一個(gè)取號(hào)機(jī)器產(chǎn)生號(hào)碼的方式來(lái)表示的。所以,我想到要有一個(gè)號(hào)碼管理器對(duì)象,讓這個(gè)對(duì)象不斷地產(chǎn)生號(hào)碼,就等于隨機(jī)生成了客戶(hù)。
? 2.由于有三類(lèi)客戶(hù),每類(lèi)客戶(hù)的號(hào)碼編排都是完全獨(dú)立的,所以,我想到本系統(tǒng)一共要產(chǎn)生三個(gè)號(hào)碼管理器對(duì)象,各自管理一類(lèi)用戶(hù)的排隊(duì)號(hào)碼。這三個(gè)號(hào)碼管理器對(duì)象統(tǒng)一由一個(gè)號(hào)碼機(jī)器進(jìn)行管理,這個(gè)號(hào)碼機(jī)器在整個(gè)系統(tǒng)中始終只能有一個(gè),所以,它要被設(shè)計(jì)成單例。
(二)各類(lèi)型客戶(hù)在其對(duì)應(yīng)窗口按順序依次辦理業(yè)務(wù) ,準(zhǔn)確地說(shuō),應(yīng)該是窗口依次叫號(hào)。
? 1.各個(gè)窗口怎么知道該叫哪一個(gè)號(hào)了呢?它一定是問(wèn)的相應(yīng)的號(hào)碼管理器,即服務(wù)窗口每次找號(hào)碼管理器獲取當(dāng)前要被服務(wù)的號(hào)碼。
? 2.如果我不是多次親身經(jīng)歷銀行的這種業(yè)務(wù),再加之積累了大量面向?qū)ο蟮膽?yīng)用開(kāi)發(fā)經(jīng)驗(yàn),我也不知道能否輕松進(jìn)行這種設(shè)計(jì),能否發(fā)掘出其中隱含的對(duì)象信息,我真說(shuō)不出具體的經(jīng)驗(yàn)是什么,就是日積月累出來(lái)的一種感覺(jué)。
(三)類(lèi)圖:
?
?????????????
- 類(lèi)的編碼實(shí)現(xiàn)
(一)NumberManager類(lèi)
? 1.定義一個(gè)用于存儲(chǔ)上一個(gè)客戶(hù)號(hào)碼的成員變量和用于存儲(chǔ)所有等待服務(wù)的客戶(hù)號(hào)碼的隊(duì)列集合。
? 2.定義一個(gè)產(chǎn)生新號(hào)碼的方法和獲取馬上要為之服務(wù)的號(hào)碼的方法,這兩個(gè)方法被不同的線程操作了相同的數(shù)據(jù),所以,要進(jìn)行同步。
源碼如下:
(二)NumberMachine類(lèi)
? 1.定義三個(gè)成員變量分別指向三個(gè)NumberManager對(duì)象,分別表示普通、快速和VIP客戶(hù)的號(hào)碼管理器,定義三個(gè)對(duì)應(yīng)的方法來(lái)返回這三個(gè)NumberManager對(duì)象。
? 2.將NumberMachine類(lèi)設(shè)計(jì)成單例。
源碼如下:
(三)CustomerType枚舉類(lèi)
? 1.系統(tǒng)中有三種類(lèi)型的客戶(hù),所以用定義一個(gè)枚舉類(lèi),其中定義三個(gè)成員分別表示三種類(lèi)型的客戶(hù)。
? 2.重寫(xiě)toString方法,返回類(lèi)型的中文名稱(chēng)。這是在后面編碼時(shí)重構(gòu)出來(lái)的。
源碼如下:
(四)ServiceWindow類(lèi)
? 1.定義一個(gè)start方法,內(nèi)部啟動(dòng)一個(gè)線程,根據(jù)服務(wù)窗口的類(lèi)別分別循環(huán)調(diào)用三個(gè)不同的方法。
? 2.定義三個(gè)方法分別對(duì)三種客戶(hù)進(jìn)行服務(wù),為了觀察運(yùn)行效果,應(yīng)詳細(xì)打印出其中的細(xì)節(jié)信息。
源碼如下:
(五)MainClass類(lèi)
? 1.用for循環(huán)創(chuàng)建出4個(gè)普通窗口,再創(chuàng)建出1個(gè)快速窗口和一個(gè)VIP窗口。
? 2.接著再創(chuàng)建三個(gè)定時(shí)器,分別定時(shí)去創(chuàng)建新的普通客戶(hù)號(hào)碼、新的快速客戶(hù)號(hào)碼、新的VIP客戶(hù)號(hào)碼。
源碼如下:
(六)Constants類(lèi)
? 1.定義三個(gè)常量:MAX_SERVICE_TIME、MIN_SERVICE_TIME、COMMON_CUSTOMER_INTERVAL_TIME。
源碼如下:
總結(jié)
以上是生活随笔為你收集整理的又一道软通动力7K月薪面试题——银行业务调度系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 联想利泰的一道做出来就给月薪7K的面试题
- 下一篇: UML建模之活动图介绍