1. 程式人生 > >補充《解析“60k”大佬的19道C#面試題(上)》

補充《解析“60k”大佬的19道C#面試題(上)》

【廣州.NET技術俱樂部】微信群的周杰寫了一篇文章《解析“60k”大佬的19道C#面試題(上)》https://www.cnblogs.com/sdflysha/p/20200325-19-csharp-interview-question-from-60k-boss-1.html,寫得很好,很贊!

我做點補充。

首先這些知識真的是會在實際專案中用到的,而且還能影響到專案的成敗。如果你對高盛銀行、瑞士銀行等投資銀行和私人銀行的Fintech業務有了解的話,你可能會深有體會。

這些知識點和背後的數學原理也在我翻譯的第一本書《.NET併發實戰》裡有十分系統的講到,可惜因為新冠疫情,該書要延後到六月份才能出版。

那麼:

第一個問題,為什麼很多人反映這些知識在工作中根本用不到呢?

因為這些人的主要工作是web應用。在我所翻譯的《.NET併發實戰》一書裡面講到,web應用是尷尬的並行,所以該書使用了WPF來做案例。

 

第二個問題,為什麼很多人反映這些知識並沒有給自己帶來高工資?

還是因為這些人的主要工作是web應用。工作中用不到這些知識,這些知識並沒有給企業帶來任何商業價值。既然沒有給企業帶來任何商業價值,那麼為啥企業要給你對應的工資呢?

 

第三個問題,那麼什麼樣的工作會運用到這些知識點,從而給自己帶來高工資呢?

就.NET來講,是Windows客戶端和Office應用,一個以商業價值為導向的、以選擇最合適的技術來做專案的專案經理,如果需要做Windows客戶端和Office應用開發應用,都會首選使用.NET裡的WPF和VSTO。而WPF就會用到這些知識點,這也是我所翻譯的《.NET併發程式設計實戰》一書使用WPF來做案例的原因之一。

 

第四個問題,也在用WPF,也用到這些知識點,為啥就工資不高呢?

技術本身不賺錢,技術所帶來的商業價值才賺錢。比如製造業,本身利潤就不高,那你在製造業裡使用WPF工資不高是正常的。金融業,利潤高,如果你使用了WPF能給企業帶來價值,從而得到對應的回報就很符合邏輯了。

 

第五個問題,現在網際網路工作機會多,WPF工作機會少啊

工作機會再多,你也只能做一份工作啊。所以工作機會多不多是個偽命題。最重要工資高就可以了啊。網際網路風頭很猛,然而翻翻世界五百強,裡面有多少家網際網路企業,分別排第幾名,裡面有多少家金融企業,分別排第幾名。

我最近基本不看朋友圈和facebook了,因為看了朋友圈感覺某國要亡國了,看了facebook感覺另一個某國要亡國了,我都不知道信哪個好。IT全名叫做資訊科技,我們做資訊科技這行的,也要對資訊有個判斷能力啊。不能因為網際網路的聲音大就覺得網際網路鐵定牛。

 

第六個問題,前面的條件都滿足了,知識點都掌握了,為什麼面試沒過呢?

就我本人所瞭解到的,高盛銀行、瑞士銀行等投資銀行和私人銀行高薪職位面試肯定會問數學相關知識,你知道了這些知識點,答不上後面的數學原理,當然過不了面試啦。

 

第七個問題,連這些知識點背後的數學原理都掌握了,為啥面試還是沒過呢?

我所翻譯的《.NET併發程式設計實戰》一書連這些知識點背後的數學原理都講述了。你看了之後跑去面試,還是沒過,為啥呢?

當過面試官的同學都知道,肯定會問專案實際經驗啊。

當面試官問到,你能講講你在做實際專案中是如何運用到這些知識點的嗎?

有人就會答,每一個asp.net專案都會用到async/await啊。

然而async/await並不是什麼時候都適用的啊,能講講什麼時候不適用嗎?

這個問題就真的需要有實際專案經驗的人才能答上了,比如在不同代際技術模組邊界是不適用的,比如在單元測試中要對WPF寫的彈出對話方塊進行單元測試則不能使用await,因為使用await反而適而其反,功能都不能實現了。

好啦,你這麼回答之後,面試官接著就問第二個問題了,如何對WPF寫的彈出對話方塊進行單元測試呢?

如果按照winform的寫法來寫WPF,當然是不能對的彈出對話方塊進行單元測試啦。

但是如果是用MVVM模式來寫WPF,就變得可測試了。微軟官方文件:使用 MVVM 編寫可測試的表示層https://docs.microsoft.com/zh-cn/archive/msdn-magazine/2013/november/mvvm-writing-a-testable-presentation-layer-with-mvvm

那麼問題裡所指的彈出對話方塊是指messagebox.show和showdialog嗎?

在實際專案經驗中,當你使用MVVM模式來寫WPF的話,你肯定不會再用messagebox.show和showdialog這類方式來彈出對話方塊。這類方式明顯就不是MVVM模式,viewmodel是不知道view裡面的東西的啊。

總結:以上這些點如果你沒有實際專案經驗,真的就答不上了。

額外再說一個問題,只有async沒有await的情況下會構成狀態機嗎?

從學術和試驗性程式碼的角度來說,是會構成的。

但是在實際專案應用中,從工程應用的角度來說,是有可能不會的(web應用這種尷尬並行不是.NET併發並行研究課題中的主流)。

只要做過有商業價值的實際專案,只要使用過我正在翻譯的另外一本書《.NET記憶體管理寶典》裡的知識(該書有一千一百頁之厚,你可能要慢慢找,不過很值得你去學習),就會發現,可能是不會的,類似的原理是:“編譯器/JIT 短路評估”(“Short circuit evaluation and side effect”)。這就是一個很能考察到有沒有實際專案經驗的問題。

 

第八個問題,我已經身在高盛銀行、瑞士銀行等投資銀行和私人銀行裡面了,為啥我的工資還是不高?

你所在職位面試時有問到數學嗎?工作過程中有用到數學嗎?銀行裡這麼大,專案這麼多,有不少專案是用不到數學的,商業價值也不高。如果你所做的專案商業價值不高,用不到數學,那工資不高也是正常的啊。高盛銀行、瑞士銀行只能保證你的工資下限高於其他公司的工資下限。至於工資上限,無論是哪家公司,都是要看你給公司所創造的商業價值的啊。

 

In the end, 最近這半年,我主要精力集中在以金融科技為核心的香港.NET俱樂部上,主要研究.NET的商業價值、IT在投資銀行和私人銀行裡的應用,技術方向是WPF、VSTO和人工智慧,已經很少關注廣州.NET俱樂部了。今天看到廣州.NET俱樂部還能產出這麼高質量的文章,我內心甚感欣慰,在此對大家表示感謝。最後給大家一個信心:如果要開發windows桌面端應用和office應用,.NET還是佔據壟斷地位的。(可以回頭看看第五個問題的答案)

風險提示:.NET世界之大,各個行業各個應用各個角度都可能得出不同的觀點,因此我的以上觀點並不一定適用於你。本文不對你採取本文觀點所造成的損失負