用php写一个可以抽取随机数的工具一次只抽四个怎么实现?_面试了一个32岁的程序员,场面一度很尴尬。...
招人背景
首先說一下朋友的公司招人背景,公司招聘PHP高級崗位,負責公司的B2B項目研發、并發問題的處理和解決。領導給了他兩個要求:(接下來的講述我會以朋友的第一人稱來進行)
(1)技術比較好
(2)有大項目實戰經驗。
說白了這是一個純粹的技術崗位,能夠把項目核心代碼解決好來,能夠去處理好的并發帶來的一些問題,避免一些隱患問題。
干我們這行的都懂,大廠都在清理 35 歲以上的基礎崗,如果到了這個年紀還混不到中高層管理崗位,基礎崗確實不太好找了。
現在的年輕人很厲害,很年輕就走上了管理層,所以我很慶幸公司在年齡上沒有卡人,給了很多 30+ 的程序員簡歷供我篩選,因為我也是程序員,所以我不會在年齡上有所顧慮。
所以,確實就和標題寫的那樣,這兩天我就面試了一個 32歲程序員,全程讓我都感覺有點慌……
為什么慌?主要是因為年齡比我大不少,項目經驗肯定也比我豐富得多,技術會不會很牛逼?會不會吊打我,狠狠地虐我?我真心怕 hold 不住。
但實際面試下來,場面一度尷尬,結局讓我感覺有點唏噓。
面試過程
面試者 11年工作經驗,簡歷卻只有 2 頁,可以說非常簡練,從程序員到小組長、項目經理、研發經理、技術總監都干了個遍,Java/PHP/Python/C# 也都有涉及。
從交談過程中,他說是可以做一些優化的,能夠去解決一些并發問題,自己的項目經驗也比較豐富。首先我說先問些技術問題,然后在了解一下你的相關開發項目。
我: 你有互聯網分布式相關項目開發經歷么?
面試者: 有啊,那個 XXX 項目就是
我: 好,我看到了,我看這個項目有解決一些高并發的問題,那么我們就先來講一個普通的場景,因為你項目經驗比較豐富,我就不單問技術情況了,就說說場景是如何發生和去解決的。如果有一個普通場景,就是1000個用戶下單一批商品,這個商品是多個,不是活動,但是庫存只有100,這個情況。
面試者: 這個情況的話就可以使用傳統的隊列去解決
然后他就一直在說和用隊列的處理的方式,之前他是如何處理的,首先,我不是很關心他之前做的一些業務,然后我就打斷了他,就是普通的場景,不是說做活動。
面試者:那就根據實際的情況來,可以選擇樂觀鎖的方式或者說分布式鎖的方式。
我:嗯,那你說說實現方式,這個點這樣用鎖會比較好嗎?
面試者:那樂觀鎖的話就是可以使用redis 的watch方法去做,監聽一下我們的銷量,然后配合redis事務去使用,然后就開始介紹分布式鎖。
我:額。。我在打斷一下,你使用隊列或者鎖在這種場景下都會去降低很多的這種項目的吞吐量,那這個的話不是會造成用戶的阻塞等待?這樣的話系統的吞吐量就會很差了。而且你不管前面用什么方式你最終都要落地到數據庫的,那么這個怎么處理呢?
面試者:一般來說都不會在mysql處理呀,用緩存不就可以了。
可能他項目規模都不是很大,對于這種問題只能夠去回答一些比較官方的解決方案。
我: 能介紹下服務與服務之間相互調用的時候,如果調用超時了是怎么處理的?
面試者: 超時啊,(想了幾秒后)那應該是報錯吧
我: 確定是報錯嗎?(他想了想,不說話,然后我接著說)沒有重試機制嗎?重試機制是怎樣的?
做過分布式的項目的都知道重試機制,至少讀操作要支持重試,寫操作支持重試的話被調用方還要支持冪等性,不然會造成重復寫入。
面試者: (又想了想,笑著和我說)這個項目有點久了,這個不太記得了……
然后我看了下這個項目,2014 年做的,6 年前了,他說太久不記得了,那也情有可原了。
我:好,你最近做的這個項目,能介紹下它的整體架構么?
面試者: 我們用了 Redis做虛擬庫存,用了 MQ,用了微服務……(他說了一堆,都沒說到重點)
我: 我想問的是,從上到下,這些技術是怎么承接起來的,整體的系統架構是怎樣的?(現場沒紙筆,不然我都想讓他畫圖了)
面試者: 呃……我知道你的意思,主要是我真的不知道怎么表達……(然后他不說話了,場面尷尬了)
我: (趕緊找了繼續追問了一個冪等性問題,因為做分布式的話這塊肯定是會遇到的)那你如何理解冪等性呢?
面試者:就是我們使用mq的時候我們會有一個自帶的id,然后根據這個id去判斷是否被消費,如果已經被消費,那么你就不處理。
我: 不一定就是MQ,就是比如你做一個分布式的接口,那么這個接口的冪等性如何解決?
面試者:那就只能寫一個標記了.......如果這個接口被調用了的話,那么你就標記他被調用,這樣其他地方就根據這個標記去判斷是否還可以調用……(想了半天也沒有說出好的方案)
其實這里至少有三個方案:
接口為什么要實現冪等?
前端重復提交選中的數據,后臺只產生對應這個數據的一個反應結果。
(1)token機制
當客戶端請求頁面時,服務器會生成一個隨機數token,并且將token放置到session當中,然后將token發給客戶端(一般通過構造hidden表單)。下次客戶端提交請求時,token會隨著表單一起提交到服務器端。服務器端第一次驗證相同過后,會將session中的token值更新下,若用戶重復提交,第二次的驗證判斷將失敗,因為用戶提交的表單中的token沒變,但服務器端session中token已經改變了。
(2)通過版本號實現-樂觀鎖
這個的話就要分情況,因為加鎖的話畢竟會對性能有一些影響
(3)Redis原子性
(4)去重表
利用數據庫表單的特性來實現冪等,常用的一個思路是在表上構建唯一性索引。將某個內容id與用戶id綁定建立唯一索引,每當用戶點擊這個內容時就往表中寫入一條數據,這樣重復點擊的數據就無法寫入。
然后我就問了一些他目前主要負責的項目,項目大概的規模,你自己在項目當中遇到的比較棘手的問題,你們是如何去解決的。了解了一些發展,為什么從上家公司離職這些問題。
總結
最后我把面試情況總結起來和領導說了,領導就說了一句:技術是提前。
第一次面試一個 32 歲的程序員,干了 11 年,如果還要面試做技術的崗位,這個面試情況確實不理想。也不知道他的真實經歷是不是一直在外包公司?或許真該清楚認識下自己的定位和未來的職業規劃了。
隨著我跟朋友的溝通到下來這個文章,其實我也在感慨,朋友說他也感覺更慌了,日月如梭,他也快有這么一天了,如果做不到中高層,也要去和年輕搶飯碗,沒辦法,這是現實。
年紀來了,朋友感覺自己寫代碼確實也寫不太動了,人也變得越來越焦慮不安,能干嘛去呢?路子也不多,也不知道該如何去發展!
唯一能做的就是朝著自已期望的崗位或者目標不斷努力,不斷的提升自己的硬實力和基本功,最好的貴人就是拼命努力的自己,程序員的核心競爭力就是你的技術水平,管理能力,只有這些都提升上來了,這樣才能去為日益焦慮不安的自己,迎接未來更多的機會。
其實現在也有很多年輕人很厲害,年輕有為的也不少,但是還是要記住一句話,種一棵樹最好的就是十年前,其次就是現在,如果你不去開始,那么你永遠都不會有成功之花綻放在自己人生的枝頭上。大器晚成,為時也不晚,這樣的例子也數不勝數,所以你要相信,只要自己一直在準備,找到自己的職業道路,學習規劃,機會總會到來的,總會有成功之花綻放的那一天。
如果你喜歡我寫的技術文章以及面試總結,歡迎關注收看我的視頻,并且點贊、收藏、關注我哦。
我是luke,感謝你的關注!
據說點贊,喜歡,收藏了的小伙伴升職加薪、面試必過,拿到心儀offer!
總結
以上是生活随笔為你收集整理的用php写一个可以抽取随机数的工具一次只抽四个怎么实现?_面试了一个32岁的程序员,场面一度很尴尬。...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于junit4的关于个人所得税计算的等
- 下一篇: javafx 推箱子小游戏object类