补充《解析“60k”大佬的19道C#面试题(上)》

时间:2022-09-17 16:30:45

【广州.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题目】不服来战!&lpar;转&rpar;

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

随机推荐

  1. Python之路----------shutil模块

    高级的文件.文件夹.压缩包 处理模块 复制文件: import shutil f1 = open('test') f2 = open('test2','w') shutil.copyfileobj(f ...

  2. DROP&lowbar;SNAPSHOT&lowbar;RANGE过程不能清理表RM&dollar;&lowbar;SNAPSHOT&lowbar;DETAILS

    今天在测试.验证DROP_SNAPSHOT_RANGE不能彻底快照的过程中遇到了DROP_SNAPSHOT_RANGE无法清理WRM$_SNAPSHOT_DETAILS表中数据的情况,测试服务器版本为 ...

  3. 用soapUI生成客户端代码

    一.用soapUI生成客户端代码 方法一: 1.第一步,打开soapUI,菜单栏里的tools,选择apache CXF,如图, 2.第二步,WSDL:写上你连接服务端的地址,OutputDirect ...

  4. DevExpress XtraReports 入门三 创建 Master-Detail&lpar;主&sol;从&rpar; 报表

    原文:DevExpress XtraReports 入门三 创建 Master-Detail(主/从) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用 ...

  5. BaseAction 使用

    public class AreaAction extends BaseAction<Area> { @Autowired private AreaService areaService; ...

  6. 零基础如何自学java开发?

    开篇直奔主题,java 学习个人感觉分为两种途径,第一种是在学校,在培训机构等地方学习. 有人指导:第二种是自学,通过视频,书籍,朋友等完成学习. 本文适合 自学,且基础薄弱或者无基础的人.先介绍下我 ...

  7. Java学习之路&lpar;十二&rpar;:IO流&lt&semi;二&gt&semi;

    字符流 字符流是可以直接读写字符的IO流 使用字符流从文件中读取字符的时候,需要先读取到字节数据,让后在转换为字符 使用字符流向文件中写入字符时,需要把字符转为字节在写入文件 Reader和Write ...

  8. Cocos2dx v3&period;9项目位置和基本操作

    MainScene.lua 在Mydemo\src\app\views下 官方示例 cocos2d-win32.sln在cocos2d-x-3.9\build下 生成项目 -l指定语言,-d指定路径 ...

  9. linux内核打印级别

    1.printk()是一个内核的一个记录日志的机制,经常用来记录信息或者警告.printk可以指定输出日志的优先级,在include/linux/kern_levels.h中有相应的宏定义 #defi ...

  10. Android学习笔记&lowbar;51&lowbar;转android 加载大图片防止内存溢出

    首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...