补充《解析“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世界之大,各个行业各个应用各个角度都可能得出不同的观点,因此我的以上观点并不一定适用于你。本文不对你采取本文观点所造成的损失负责。
补充《解析“60k”大佬的19道C#面试题(上)》的更多相关文章
- 解析“60k”大佬的19道C#面试题(上)
解析"60k"大佬的19道C#面试题(上) 先略看题目: 请简述async函数的编译方式 请简述Task状态机的实现和工作机制 请简述await的作用和原理,并说明和GetResu ...
- 解析“60k”大佬的19道C#面试题(下)
解析"60k"大佬的19道C#面试题(下) 在上篇中,我解析了前 10 道题目,本篇我将尝试解析后面剩下的所有题目. 姐妹篇:解析"60k"大佬的19道C#面试 ...
- 100道c++面试题(上)
1. new, delete, malloc, free关系 new/delete是c++的运算符,delete会调用对象的析构函数: malloc/free是c/c++的标准库函数,free只释放内 ...
- 509道Java面试题解析:2020年最新Java面试题
<Java面试全解析>是我在 GitChat 发布的一门电子书,全书总共有 15 万字和 505 道 Java 面试题解析,目前来说应该是最实用和最全的 Java 面试题解析了. 我本人是 ...
- 19道常见的JS面试算法题
最近秋招也做了多多少少的面试题,发现除了基础知识外,算法还是挺重要的.特意整理了一些常见的算法题,添加了自己的理解并实现. 除此之外,建议大家还可以刷刷<剑指offer>.此外,左神在牛客 ...
- 「剑指offer」27道Mybatis面试题含解析
1.什么是Mybatis? Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement等繁杂 ...
- 【19道XSS题目】不服来战!
记得第一次接触xss这个概念是在高中,那个时候和一个好基友通过黑客X档案和黑客手册.第一次接触到了除了游戏以外的电脑知识,然后知道了,原来电脑除了玩游戏还可以搞这些,从此两人一发不可收拾的爱上了玩黑这 ...
- 2019年19道java经典面试题(附答案)
1.不可变对象 指对象一旦被创建状态不能再改变.任何修改都会创建一个新的对象,如 String.Integer及其它包装类. 2.能否创建一个包含可变对象的不可变对象? 可以.不要共享可变对象的引用就 ...
- 【19道XSS题目】不服来战!(转)
[19道XSS题目]不服来战! 记得第一次接触xss这个概念是在高中,那个时候和一个好基友通过黑客X档案和黑客手册.第一次接触到了除了游戏以外的电脑知识,然后知道了,原来电脑除了玩游戏还可以搞这些,从 ...
随机推荐
- flask_admin+flask_login 整合,jieba分词+echarts数据分析可视化
项目地址: https://github.com/WES6/list
- linux下好用软件全记录
开发工具 1. Shutter 抓图工具(用过linux最好的抓图工具,类似win下的Snagit) 2. RabbitVCS SVN客户端(可以和subversion媲美的svn客户端) 3. My ...
- Django中使用websocket并实现简易聊天室
django使用websocket并实现简易聊天室 django默认只支持http协议 如果你想让django即支持http协议又支持websocket协议,则需要做以下配置 前期配置 前提需要安装c ...
- Python——12类的继承
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- CSS定位属性position相关介绍
position属性用来定义元素的定位方式. 定位相关属性值 1.static 默认值 2.absolute 绝对定位 3.fixed 固定定位 4.relative 相对定位 5.sticky 粘性 ...
- USB小白学习之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析
注:这个TD_Init()只对EP6进行了配置,将其配置成为Bluk_In端口,而没有对EP2进行配置.这篇文章直接把寄存器的图片贴上来了,看起来比较杂.感兴趣的可以看下一篇文章,是转自CSDN,对E ...
- Ubuntu18.04下安装mysql5.7超详细步骤
1.首先执行下面三条命令: #安装mysql服务 sudo apt-get install mysql-server #安装客户端 sudo apt install mysql-client #安装依 ...
- JZOJ 4298. 【NOIP2015模拟11.2晚】我的天
4298. [NOIP2015模拟11.2晚]我的天 (File IO): input:ohmygod.in output:ohmygod.out Time Limits: 1000 ms Memor ...
- 【推荐算法工程师技术栈系列】分布式&数据库--tensorflow
目录 TensorFlow 高阶API Dataset(tf.data) Estimator(tf.estimator) FeatureColumns(tf.feature_column) tf.nn ...
- Subsequence POJ - 3061
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22040 Accepted: 9404 Desc ...