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

在上篇中,我解析了前 10 道题目,本篇我将尝试解析后面剩下的所有题目。

姐妹篇:解析“60k”大佬的19道C#面试题(上)

这些题目确实不怎么经常使用,因此在后文中,我会提一组我的私房经典“6k面试题”,供大家轻松一刻。

先略看题目:

  1. 简述 LINQlazy computation 机制
  2. 利用 SelectMany 实现两个数组中元素做笛卡尔集,然后一一相加
  3. 请为三元函数实现柯里化
  4. 请简述 ref struct 的作用
  5. 请简述 ref return 的使用方法
  6. 请利用 foreachref 为一个数组中的每个元素加 1
  7. 请简述 refoutin 在用作函数参数修饰符时的区别
  8. 请简述非 sealed 类的 IDisposable 实现方法
  9. delegateevent 本质是什么?请简述他们的实现机制

解析:

11. 简述 LINQlazy computation 机制

Lazy computation 是指延迟计算,它可能体现在解析阶段表达式树求值阶段状态机两方面。

首先是解析阶段表达式树C# 编译器在编译时,它会将这些语句以表达式树的形式保存起来,在求值时, C# 编译器会将所有的 表达式树 翻译成求值方法(如在数据库中执行 SQL 语句)。

其次是求值阶段状态机LINQ to Objects 可以使用像 IEnumemrable<T> 接口,它本身不一定保存数据,只有在求值时,它返回一个迭代器—— IEnumerator<T> ,它才会根据 MoveNext() / Value 来求值。

这两种机制可以确保 LINQ 是可以延迟计算的。

12. 利用 SelectMany 实现两个数组中元素做笛卡尔集,然后一一相加

  1. // 11. 利用 `SelectMany` 实现两个数组中元素的两两相加
  2. int[] a1 = { 1, 2, 3, 4, 5 };
  3. int[] a2 = { 5, 4, 3, 2, 1 };
  4. a1
  5. .SelectMany(v => a2, (v1, v2) => $"{v1}+{v2}={v1 + v2}")
  6. .Dump();

解析与说明:大多数人可能只了解 SelectMany 做一转多的场景(两参数重载,类似于 flatMap ),但它还提供了这个三参数的重载,可以允许你做多对多——笛卡尔集。因此这些代码实际上可以用如下 LINQ 表示:

  1. from v1 in a1
  2. from v2 in a2
  3. select $"{v1}+{v2}={v1 + v2}"

执行效果完全一样。

13. 请为三元函数实现柯里化

解析:柯里化是指将 f(x, y) 转换为 f(x)(y) 的过程,三元和二元同理:

  1. Func<int, int, int, int> op3 = (a, b, c) => (a - b) * c;
  2. Func<int, Func<int, Func<int, int>>> op11 = a => b => c => (a - b) * c;
  3. op3(4, 2, 3).Dump(); // 6
  4. op11(4)(2)(3).Dump(); // 6

通过实现一个泛型方法,实现通用的三元函数柯里化:

  1. Func<T1, Func<T2, Func<T3, TR>>> Currylize3<T1, T2, T3, TR>(Func<T1, T2, T3, TR> op)
  2. {
  3. return a => b => c => op(a, b, c);
  4. }
  5. // 测试代码:
  6. var op12 = Currylize3(op3);
  7. op12(4)(2)(3).Dump(); // (4-2)x3=6

现在了解为啥 F# 签名也能不用写参数了吧,因为参数确实太长了

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

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

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

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

    [广州.NET技术俱乐部]微信群的周杰写了一篇文章<解析“60k”大佬的19道C#面试题(上)>https://www.cnblogs.com/sdflysha/p/20200325-19 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. java面试题—精选30道Java笔试题解答(二)

    摘要: java面试题-精选30道Java笔试题解答(二) 19. 下面程序能正常运行吗() public class NULL { public static void haha(){ System ...

随机推荐

  1. [PyTorch入门之60分钟入门闪击战]之训练分类器

    训练分类器 目前为止,你已经知道如何定义神经网络.计算损失和更新网络的权重.现在你可能在想,那数据呢? What about data? 通常,当你需要处理图像.文本.音频或者视频数据时,你可以使用标 ...

  2. 会编程的 AI + 会修 Bug 的 AI,等于什么 ?

    2017-02-25 Python开发者 (点击上方公众号,可快速关注) 关于人工智能未来的畅想,除了家庭服务机器人,快递无人机,医用机器人等等,Lucas Carlson 认为人工智能在另外一个领域 ...

  3. CoreGraphic

    public func UIGraphicsBeginImageContextWithOptions( size: CGSize, opaque: Bool, _ scale: CGFloat) si ...

  4. 【年度开源、工具合集】牛津计划,DMTK,Graph Engine…提高你的工作效率!

    本篇合集包括以下三个部分的内容: 1.微软亚洲研究院过去一年的所有开源合集,如分布式机器学习工具包DMTK等. 2.利用微软研究院的技术提高工作效率的工具合集,如让没有机器学习背景的开发人员也能开发出 ...

  5. SQL语句中in not in exits not exits用法比较

    exists (sql 如果返回结果集为真) not exists (sql 如果没有返回结果集为真) 如下: 表A ID NAME 1 A1 2 A2 3 A3 表B ID AID NAME 1 1 ...

  6. 通过IE私有滤镜让IE6 7 8支持背景透明,内容不透明效果。

    CSS3已经支持背景rgba的rgba透明度,这一方法可以避免元素内容也随背景一起变透明(详情请阅http://www.cssha.com/css3-new-knowledge-student).但是 ...

  7. SYC极客大挑战部分题目writeup

    Welcome 复制黏贴flag即可 我相信你正在与我相遇的路上马不停蹄 关注微信工作号回复"我要flag"即可获得flag 代号为geek的行动第一幕:毒雾初现 发现flag为摩 ...

  8. PHP数组知识点整理

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  9. CSS单位计算总结

    CSS单位总结 公共部分css body { background-color: #000; color: skyblue; margin: 0; padding: 0; } body>div& ...

  10. 2017、2018面试分享(js面试题记录)记得点赞分享哦;让更多的人看到~~

    2017面试分享(js面试题记录) 1. 最简单的一道题 '11' * 2 'a8' * 3 var a = 2, b = 3; var c = a+++b; // c = 5 2. 一道this的问 ...