补充《解析“60k”大佬的19道C#面试题(上)》
叶伟民 人气:0【广州.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:/https://img.qb5200.com/download-x/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世界之大,各个行业各个应用各个角度都可能得出不同的观点,因此我的以上观点并不一定适用于你。本文不对你采取本文观点所造成的损失负责。
加载全部内容