【广州.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世界之大,各个行业各个应用各个角度都可能得出不同的观点,因此我的以上观点并不一定适用于你。本文不对你采取本文观点所造成的损失负责。

补充《解析“60k”大佬的19道C#面试题(上)》的更多相关文章

  1. 解析“60k”大佬的19道C#面试题(上)

    解析"60k"大佬的19道C#面试题(上) 先略看题目: 请简述async函数的编译方式 请简述Task状态机的实现和工作机制 请简述await的作用和原理,并说明和GetResu ...

  2. 解析“60k”大佬的19道C#面试题(下)

    解析"60k"大佬的19道C#面试题(下) 在上篇中,我解析了前 10 道题目,本篇我将尝试解析后面剩下的所有题目. 姐妹篇:解析"60k"大佬的19道C#面试 ...

  3. 100道c++面试题(上)

    1. new, delete, malloc, free关系 new/delete是c++的运算符,delete会调用对象的析构函数: malloc/free是c/c++的标准库函数,free只释放内 ...

  4. 509道Java面试题解析:2020年最新Java面试题

    <Java面试全解析>是我在 GitChat 发布的一门电子书,全书总共有 15 万字和 505 道 Java 面试题解析,目前来说应该是最实用和最全的 Java 面试题解析了. 我本人是 ...

  5. 19道常见的JS面试算法题

    最近秋招也做了多多少少的面试题,发现除了基础知识外,算法还是挺重要的.特意整理了一些常见的算法题,添加了自己的理解并实现. 除此之外,建议大家还可以刷刷<剑指offer>.此外,左神在牛客 ...

  6. 「剑指offer」27道Mybatis面试题含解析

    1.什么是Mybatis? Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement等繁杂 ...

  7. 【19道XSS题目】不服来战!

    记得第一次接触xss这个概念是在高中,那个时候和一个好基友通过黑客X档案和黑客手册.第一次接触到了除了游戏以外的电脑知识,然后知道了,原来电脑除了玩游戏还可以搞这些,从此两人一发不可收拾的爱上了玩黑这 ...

  8. 2019年19道java经典面试题(附答案)

    1.不可变对象 指对象一旦被创建状态不能再改变.任何修改都会创建一个新的对象,如 String.Integer及其它包装类. 2.能否创建一个包含可变对象的不可变对象? 可以.不要共享可变对象的引用就 ...

  9. 【19道XSS题目】不服来战!(转)

    [19道XSS题目]不服来战! 记得第一次接触xss这个概念是在高中,那个时候和一个好基友通过黑客X档案和黑客手册.第一次接触到了除了游戏以外的电脑知识,然后知道了,原来电脑除了玩游戏还可以搞这些,从 ...

随机推荐

  1. Linux下多线程复制文件(C)

    Linux下实现多线程文件复制,使用<pthread.h>提供的函数: int pthread_create(pthread_t *thread,const pthread_attr_t ...

  2. 2019DDCTF部分Writeup

    -- re Windows Reverse1 通过DIE查壳发现存在upx,在linux上upx -d脱壳即可,拖入IDA,通过关键字符串找到关键函数: main函数中也没有什么,将输入的字符串带到s ...

  3. 5种方法获取url中文件的扩展名

    /** * strrchr - 查找指定字符在字符串中的最后一次出现 * strrpos — 计算指定字符串在目标字符串中最后一次出现的位置 * end — 将数组的内部指针指向最后一个单元 * pa ...

  4. 曹工说Spring Boot源码(21)-- 为了让大家理解Spring Aop利器ProxyFactory,我已经拼了

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  5. 自制一个可编辑QueryString的类URLModifier

    有些情况下,需要 新增/删除/替换 url中的部分Querystring中的参数,而.net自带的Uri类只能解析,不能编辑,,并且如果是Relative类型的链接,转成Uri类型之后,很多参数又不能 ...

  6. 如何成为一名高级C++程序员

     C++这门语言从诞生到今天已经经历了将近30个年头.不可否认,它的学习难度都比其它语言较高.而它的学习难度,主要来自于它的复杂性.现在C++的使用范围比以前已经少了很多,java.C#.python ...

  7. Pro SQL Server Internal (Dmitri Korotkev)电子书翻译P8-14(12w)

    数据行与数据列 数据库的控件逻辑上分成8KB的页,这些页从0开始,连续排序,对特定的文件ID和页码有借鉴意义.页码编号一定是连续的,当SQL服务器中的数据库文件增加时,新的数据页从最高的页码开始编码. ...

  8. Windows 10 右键 在此处打开 CMD

    1. 打开注册表 # 1. 使用快捷键打开 “运行” # win + r # 2. 在 “运行” 中输入 # regedit # 3. 回车 2. 创建与设置 OpenCMDHere # 1. 切换到 ...

  9. 一文看懂js中元素的客户区大小(clientWidth,clientHeight)

    元素的客户区 元素的客户区大小,指的是元素内容及其内边距所占据的空间大小. 相关属性如下: 1. clientWidth:元素内容区宽度+元素左右内边距 2. clientHeight:元素内容区高度 ...

  10. JS基础入门篇(十八)—日期对象

    1.日期对象 日期对象: 通过new Date()就能创建一个日期对象,这个对象中有当前系统时间的所有详细信息. 以下代码可以获取当前时间: <script> var t = new Da ...