当前位置: 首页 > 编程日记 > 正文

.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)

过去几年都在忙着找项目,赶项目,没有时间好好整理深究自己在工作中学到的东西。现在好了,趁着找工作的这段空余时间,正好可以总结和再继续夯实自己的.Net, C#基本功。在05年的时候,Scott Hanselman(微软的一个Principal Program Manager)在他的博客上列出了一张清单, 清单上是关于"一个好的.Net程序员应该知道的东东 What Great .NET Developers Ought To Know (More .NET Interview Questions)". 昨天认真的把这张清单读过一遍之后, 发现自己还是有不少的问题根本不知道答案, 不少的问题只能给出个模糊的答案. 于是萌生一个想法, 不防花点时间把这些问题一个一个的回答一遍, 应该对自己对别人都会有帮助吧.

说干就干. 他的清单里对所有问题分了六个大类. 接下来的几天里我就开始每天都回答一类的问题. 今天就先从C#语言篇开始.

1.列出override跟new用法的不同. 什么是shadowing?  (Juxtapose the use of override with new. What is shadowing?)

简单的讲, 子类的override, 将忽略父类用virtual修饰的同名方法. 但子类的new, 将被父类用virtual修饰的同名方法所遮盖. 听起来有点抽象, 用下面代码演示一下, 就明了了.
1 public class Animal
2 {
3 public virtual string DoSomething()
4 {
5 return "I can breathe";
6 }
7 }
8
9 public class Bird : Animal
10 {
11 public override string DoSomething()
12 {
13 return "I can fly";
14 }
15 }
16
17 public class Cat : Animal
18 {
19 public new string DoSomething()
20 {
21 return "I can run";
22 }
23 }

1 var animal = new Animal();
2 animal.DoSomething() // I can breathe
3  var bird = new Bird();
4 bird.DoSomething() // I can fly
5  var cat = new Cat();
6 cat.DoSomething()   // I can run

1 var animal = new Animal();
2 animal.DoSomething() // I can breathe
3  Animal bird = new Bird();
4 bird.DoSomething() // I can fly
5  Animal cat = new Cat();
6 cat.DoSomething()   // I can breathe

override 跟 new 的差别在上述运行结果中就现露无疑了. 当cat是Animal的时候, cat.DoSomething()只能用父类的函数. 但是bird.DoSomething()还是用自己override的函数.
2. 解释virtual, sealed, override 跟 abstract 的用法 (Explain the use of virtual, sealed, override, and abstract.)
virtual: 允许被子类重写.
sealed: 不允许被继承.
override: 在子类使用, 重写在父类中用virtual, abstract 或 override修饰的函数.
abstract: 只能被继承, 不能被实例化. 函数本身不能有实现代码, 但是可以有属性
3. 解释Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d 这行里每个部分的重要性跟用法 (Explain the importance and use of each component of this string: Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d)
Foo.Bar: Assembly(程序集)的名字,
Version: 版本号, 就像 ASP.MCV 1.0, 2.0, 3.0
Culture: 这个程序集适用的文化环境
PublicKeyToken: 原作者在发布此程序集的时候生成, 用来鉴别这个程序集是否被别人修改过
4. 解释public, protected, private, internal 的不同 (Explain the differences between public, protected, private and internal)
public: 所有的地方都能调用
protected: 自己跟子类可以用
private: 只能自己的类里面用
internal: 只能当前程序集里用
protected internal: 是指protected or internal的用法
5. 使用Primary Interop Assembly (PIA)的好处是什么? (What benefit do you get from using a Primary Interop Assembly (PIA)?)
这个问题我完全不懂, 上网找了一下解释, 也看不懂. 谁懂这个问题? 请赐教.
6. UNite 是通过什么机制知道要测试哪一个方法的? (By what mechanism does NUnit know what methods to test?)
从来没有想过这个问题, 参考了一下网上的答案, 是通过attributes. 其他人有什么更加详细的解释吗?
7. catch(Exception e){throw e;} 和 catch(Exception e){throw;}的区别 (What is the difference between: catch(Exception e){throw e;} and catch(Exception e){throw;})
前者不保留原先的stacktrace, 后者保留原先的stacktrace.
8. What is the difference between typeof(foo) and myFoo.GetType()?
typeof(foo), foo 是类, 在编译的时候执行,myFoo.GetType(), myFoo 是类的一个实列,在运行时执行。沿用上面Bird跟Animal的例子
1 var bird = new Bird();
2  if (bird.GetType() == typeof(Animal))
3 {
4 // can not go in here
5  }
6
7  if (bird is Animal)
8 {
9 // can go in here
10   Console.WriteLine("bird is an Animal");
11 }

9. Explain what’s happening in the first constructor: public class c{ public c(string a) : this() {;}; public c() {;} } How is this construct useful?
public a(string a) : this() {} 调用base constructor public c(){}. 好处是当base constructor c()有逻辑时(e.g. 初始化域)可以避免重复代码。
10. "This" 是什么?可以用在static函数中吗? (What is this? Can this be used within a static method?)
this 代指当前实例本身, 不可以用在静态函数中。因为静态函数不需要实例来调用的

转载于:https://www.cnblogs.com/lipu/archive/2010/11/12/interview_questions_by_Scott_Hanselman.html

相关文章:

一个小小的AI训练营竟然卧虎藏龙

年前,我来到了一个近墨者黑的地方,黑的不能再黑。。。这个神秘的组织叫做 21 天入门机器学习训练营。讲真的,当初报名这个训练营,我是冲着机器学习来的,主要是好奇想转型,而且听说这个课程对小白很友好&…

【Qt】QCamera查询和设置摄像头的分辨率

查询和设置摄像头分辨率的API QCamera::supportedViewfinderResolutions() QCamera::setViewfinderSettings() 设置摄像头帧率、比例、分辨率、格式的类:QCameraViewfinderSettings 使用注意事项 查询和设置摄像头分辨率时,需要在摄像头启动后调用&a…

附录G Netty与NettyUtils

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beliefer/article/details/77450134 注:本文是为了配合《Spark内核设计的艺术 架构设计与实现》一书的内容而编写,目的是为了节省成本、方便读者查阅。…

grails日志系统的研究

对于grails的日志输出,我真的是给弄吐血了。开始以为很简单,后来发现grails封装log4j做的有点太多了,很多东西的封装理解了觉得还挺合理,但是不理解的话真是无比迷茫。对于是否有必要做这么多强制性约束,我保留意见...…

给老婆写个Python教程

作者 | 水风 来源 | 水风知乎问答 如何挑战百万年薪的人工智能! https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw 什么是code code就是一种语言,一种计算机能读懂的语言。计算机是一个傻逼,他理解不了默认两可的任何东西。比如&#xf…

SpringBoot的修改操作

今天学习SpringBoot 的 CRUD 操作,练习 修改操作 时,发生了如下的异常: [nio-8080-exec-7] .m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.dao.InvalidDataAccessApiUsa…

【Qt】QImage、QPixmap、QBitmap和QPicture

简述 Qt 提供了四个用于处理图像数据的类: QImage、 QPixmap、 QBitmap和QPicture。QImage是为 I/O 设计和优化的, 用于直接像素访问和操作, 而QPixmap是为在屏幕上显示图像而设计和优化的。QBitmap继承自QPixmap,用在位深为1(黑白图片)上。…

ASP.NET,IIS7.0 上传大视频文件报错

一、问题概述: 最近开发上传视频文件的功能。基本流程已经跑通了,可是上传30M以上的文件时就会报错。 二、资料海洋瞎扑腾 从网上查了一些资料,一般都是下面这种说法: 看着步骤倒是也不算繁琐,可是本人照着步骤做了却没…

【imx6】Unable to find the ncurses libraries的解决办法

问题描述 在执行make menuconfig时,报错: Unable to find the ncurses libraries… 解决方法 安装ncurses和ncursesw库 sudo apt-get insatll ncurses-dev sudo apt-get insatll ncursesw-dev 注意:ncursesw库是ncurses的升级版本&#…

Elasticsearch6.1.3 for CRUD

为什么80%的码农都做不了架构师?>>> 一、创建文档 [root AOS2 AutoTest01:/root]#curl -X PUT 9.1.6.140:9200/students/class1/1?pretty -d > { > "first_name": "changwei", > "last_name": "…

指纹锁就安全了?防火防盗还得防AI

整理 | 一一 出品 | AI科技大本营(ID:rgznai100) 如何挑战百万年薪的人工智能 https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw 近日,你应该看到了社交媒体上对于网站 ThisPersonDoesNotExist.com,生成无数不存在人脸的铺天…

迪杰斯特拉算法(C语言实现)

迪杰斯特拉算法(C语言实现) 如上图,求以a为源点到个顶点的最短路劲。 #include "stdio.h"#include "stdlib.h"//用一个最大数表示顶点之间不相关#define MAX 999//设置顶点个数#define MAX_VERTEX_NUM 7//表示顶点之间不…

小米半年来最大调整:成立技术委员会,雷军称技术事关生死存亡

整理 | 琥珀出品 | AI科技大本营(ID:rgznai100)昨晚,小米集团组织部下发正式文件,宣布了最新一轮组织架构调整,任命了崔宝秋为集团副总裁,集团技术委员会主席,并且在核心管理岗位上共任命了 14 …

【驱动】在内核源码中添加驱动程序

以wifi驱动(RTL8188EUS驱动)为例 添加源码 将源码rtl8188EUS添加到drivers/net/wireless/rtl818x/目录下 添加Kconfig 在drivers/net/wireless/rtl818x/rtl8188EUS添加Kconfig,内容如下: config RTL8188EUtristate "Realtek 8188E USB WiFi&qu…

怎么让wordpress用sqlite3 搭建轻量级博客系统

wordpress 默认是用mysql作为数据库支持,这个对个人站长来说还是有点麻烦了些。特别是如果以后网站备份迁移就有点事多了。 之前用django开发自己的博客感觉其实用sqlite3作为数据库插好,就是一个文件而已。备份网站,直接打包整个目录即可方便…

IBM蓝色基因/Q将采用NAND闪存存储

IBM将在计划中的高性能“怪兽”——蓝色基因/Q中采用NAND闪存存储。 这是一款采用水冷方式的高性能计算系统,IBM在近日的SC10大会上展示了其原型机的组件。 蓝色基因/Q将采用的闪存是来自SMART的XceedIOPS MLC NAND产品,它使用34nm制程工艺&…

全球超2万名开发者调研:Python 3渗透率至84%

编辑 | suiling 出品 | Python大本营(ID:pythonnews) 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_sourcecxrs_bw 在2018年秋季,Python软件基金会与JetBrains发起了年度Python…

【Qt】QWidget对样式表设置边框无效的解决方法

1、现象 在对QWidget使用样式表时无效 QWidget#MyWgt{border:1px solid gray; }2、原因 原因是QWidget只支持background、background-clip和background-origin属性。 3、解决方法 3.1 使用QFrame代替QWidget,QFrame继承自QWidget,并且带有框架属性 …

break continue

break 终止整个循环体,执行循环后的代码; continue 终止单次的循环,整个循环体还是会继续执行转载于:https://www.cnblogs.com/RonnieQin/p/8430783.html

CSSA email list

UCSD: cssamailman.ucsd.eduUChicago: cssalists.uchicago.edu 转载于:https://www.cnblogs.com/stoneresearch/archive/2010/11/30/4336484.html

LVS原理详解(3种工作方式8种调度算法)--老男孩

一、LVS原理详解(4种工作方式8种调度算法)集群简介集群就是一组独立的计算机,协同工作,对外提供服务。对客户端来说像是一台服务器提供服务。LVS在企业架构中的位置:以上的架构只是众多企业里面的一种而已。绿色的线就…

【Qt】QMainWindow最大化按钮是灰色(不能最大化)的解决方法

解决方法 设置最大尺寸为16777215,并且使能Qt::WindowMaximizeButtonHint(默认就是使能的,不执行也可以) const QSize MAIN_SIZE_MAX QSize(16777215, 16777215); this->setMaximumSize(MAIN_SIZE_MAX); this->setWindow…

“AI明星”地平线B轮融资6亿美元!

整理 | 一一 出品 | AI科技大本营(ID:rgznai100) 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_sourcecxrs_bw 2 月 27 日,人工智能芯片技术的 AI 创业企业地平线(Horizon Robotics)宣布&a…

C++深拷贝与浅拷贝

浅拷贝就是成员数据之间的一一赋值:把值赋给一一赋给要拷贝的值。但是可能会有这样的情况:对象还包含资源,这里的资源可以值堆资源,或者一个文件。。当 值拷贝的时候,两个对象就有用共同的资源,同时对资源可…

【OpenCV】使用过的函数汇总

1、类 Mat:矩阵matrix,opencv2中主要用来封装图片数据 InputArray:输入参数 ,约等于Mat OutputArray:输出参数,约等于Mat Rect:表示矩形 2、函数 imread();//从文件中读取图片到Mat中 imwrit…

春招来袭!程序员如何拿下硅谷顶级公司200万年薪?

还记得那个在去年,用 6 天时间参加了 LinkedIn、Yelp、Apple、亚马逊、Facebook 和 Google 的面试,并拿下了 6 份 Offer 的“别人家的程序员”吗?之后,他又在这几份工作中进行了选择,一步步谈下了 30 万美元&#xff0…

wake_lock_timeout的使用方法【转】

本文转载自:http://blog.csdn.net/liuxd3000/article/details/44224849 今天有用到用ec43_GPIO的中断来唤醒系统,将系统从深度休眠中唤醒并保证系统wakup 一段时间用过了,方法如下,有同样使用的童鞋可以参考一下!1. …

函数05 - 零基础入门学习C语言36

第七章:函数05 让编程改变世界 Change the world by program 函数的嵌套调用 嵌套定义就是在定义一个函数时,其函数体内又包含另一个函数的完整定义。 然而,C语言不能嵌套定义函数,但可以嵌套调用函数,…

【linux】可执行程序执行时报错-sh: ./mxc_v4l2_tvin.out: No such file or directory的解决方法

问题 在imx6开发板上执行 ./mxc_v4l2_tvin.out时报错: -sh: ./mxc_v4l2_tvin.out: No such file or directory 原因查找 1、路径问题:确定在当前目录下有该程序,没问题; 2、使用ls -l查看可以执行权限,没问题&…

展望2018:WebRTC大规模商用元年

历经6年长跑,WebRTC终于在去年迎来了1.0标准(candidate recommendation)的发布,而它也将成为2018年视频通信商业应用场景爆发的主要技术推动力。一站式WebRTC通信技术提供商Zealcomm公司创始人、CEO冯昶对WebRTC在国内外发展历程、…