最近参加了工作后的第一次面试,虽然最终没谈成,但是收获还是不少,不管是技术还是面试经验还是得多多积累呀。

这一次面试与在学校时候参加过的面试区别还是挺大的。
校园招聘的面试问的问题似乎都比较具体,直接针对技术点,这样的问题如果知道就是知道,不知道嘛就是不知道。。。
而这一次面试问的问题大多都非常粗犷,似乎是面试官想让自由发挥的空间更大,也就是尽量把自己理解的内容说出来就好。。。
然而我有好几个问题都是能说而没说。。估计给面试官留下了不好的印象。以下记录几个回答得非常糟糕的技术问题,各位面试者以我为戒。。。

问题一:谈一谈内存优化
这个问题的前一问是“谈一谈C#的内存管理”,我回答得非常简洁“CLR通过GC来回收内存”。。。
听到这一问我就有点懵B了,这是在问我怎么优化GC算法吗?!我真是对GC的算法实现一窍不通啊,于是草率地做出了回答:
不知道。。。。。(然后俩人沉默数秒)

事后分析:
首先不管面试官问的是不是GC的算法优化,我当时的回答肯定是让面试官无语了,不光是让人觉得技术上深度不够,而且可能让人觉得面试态度不端正。
而且就算是对“优化”说不出什么内容,也可以说说“渣化”嘛,从反面来说一说自己的理解总还是比啥都说不出来好得多的。

所以更好的回答应该是这样的:
1)不要构造一个体积很大的struct。
因为值类型是可能被分配在栈上的,它占用的空间是没有办法被GC来管理的,何时释放内存就得靠自己了。
2)如果实在要构造一个大体积的struct,那么针对这个类型的方法参数应该考虑使用ref。
因为按值传参的时候值类型会被完完全全的复制一遍,不仅费空间而且也费时间,不需要保留副本的时候直接传址就会提高效率了。
3)释放非托管资源用IDisposable而不是析构函数。
因为析构函数被调用的时机是极度不确定的,即使运行过析构函数的对象也得等到下一次GC才会被回收。而IDisposable就没有这俩缺点了。
4)WeakReference。
对于一个占空间很大,构造起来不麻烦的对象,使用弱引用是个不错的选择。

问题二:C#能不能写非托管代码
接到这个问题我也是非常没底,因为自己没拿C#写过什么非托管代码啊,而秉着“宁可信其有不可信其无”的原则,又觉得可能会存在实现非托管代码的方法。。。
支吾了一阵后,想到了会不会问的是指针呢?然后就说了这么一嘴。。。

事后分析:
严格来说C#是个编程语言,托不托管的全靠编译器。然而面试官显然不是问这个。。。
再说unsafe代码吧,它仍然是依赖于CLR,接受类型检查,所以我觉着应该是托管的。NGen也离不了CLR,还是托管。。。
.NET Native这种就不知道该咋算了,我理解的是它把CLR精简以后一起给编译成本地代码了,貌似也还是没有完全脱离CLR。
后来百度到了一个神奇的东西,C#写的操作系统。。。神人所为
http://en.wikipedia.org/wiki/SharpOS_%28operating_system%29

更好的回答:
把自己的理解给说出来就好了,比啥都不说强。。。

问题三:谈一谈绑定和依赖属性
这个问题问到了我的技术盲区。。。虽然以前看过WPF的书,可是长久不用又不回头温故,早就忘得差不多了。早知今日,当初就不把这书的事往简历上头写了。。。
面试的时候只是隐约记得有个INotifyPropertyChanged,就回答了依赖属性的set方法里头触发个了事件实现了绑定。。。

事后分析:
把源码一翻就发现不管是DependencyProperty还是DependencyObject都和INotifyPropertyChanged没有半毛钱关系。。。
那么这绑定是通过什么来实现的呢,于是继续翻源码。。。
从FrameworkElement.SetBinding入手,一直翻到了BindingExpressionBase。看到这个类里头有个ValueChanged事件,顿时觉得真相离我不远了。。。
然而继续往下翻,死活没找到DependencyObject.SetValue和这个事件的关联。。。
最后实在没招了只能Debug跟源码,每个看上去可疑的方法都F11进去一探究竟,费老大功夫了真是。。。
然后跟到了这个方法DependencyObject.NotifyPropertyChange这名字怎么这么眼熟呢。。。ORZ

更好的回答:
这个真没法答。。。只能怪平时没温故了

最后想说的是,应届生找工作其实还是有优势的,校招的时候企业会更看重学生的未来增量,当前存量不会奢求。
同时大型企业会比中小企业更看重增量,因为中小企业担不起那个风险嘛,要让他们拿成本去赌应聘者的成长性太难了。

记一次C#面试的更多相关文章

  1. 记一次HashMap面试

    记一次HashMap面试 从网上已经身边同事朋友的面试情况来看,面试HashMap几乎是必问的,网上也很多类似的文章,但是真面起来,发现还是有很多点可以深抠的.本篇就结合一次面试经历说一下之前没有注意 ...

  2. 对于大学4年的反思(续),记我的ThoughtWorks面试

    之前我写了一篇对于大学四年的反思,时隔一个月,为什么我这么快就要来写这篇续章呢?主要有两个原因,第一是感谢静子姐姐,记得知乎上有个回答里面说过人生需要有贵人的帮助,遇到贵人是一件很幸运的事情.我想,静 ...

  3. 记一次Java面试问题点总结

    引言 昨日接了一个阿里外包的电话面试,问了一些技术问题感觉到自己是真的菜,接触Java开发已经也有一段时间,技术方面说来惭愧,一直以来只是局限于框架工具的用法,也没有进行了解其实现的原理,更重要的是一 ...

  4. Java Web架构知识整理——记一次阿里面试经历

    惭愧,从一次电面说起.我个人在某国企做一名软件设计师,国企大家都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统.驱动和工具软件的开发,语言基本都是C/C++.最近也想跳槽,刚好有幸得到了一次阿里 ...

  5. 记一次 Google 面试经历

    本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 这是我上周去面试的地方.很顺利,我觉得——至少我认为我已经尽我所能,并且无论发生什么事情对我都是有帮助的. 由于 ...

  6. 记一次ThreadPoolExecutor面试

    ThreadPoolExecutor点滴 线程池应该也是面试绕不开的一个点,平时大家也没少用,但其实也有一些小Tips还是值得记录一下. Constructor public ThreadPoolEx ...

  7. 记一次前端面试~终于拿到理想中的offer!

    2019年已经过去一半,终于拿到一直想去的公司offer,也算是实现了今年的一个小目标. 由于这家公司是我从去年到现在最想去的公司,本次换工作一直没有投,希望先积累下面试经验再投. 没有想到居然先在b ...

  8. 记一次被面试的final问题

    ---- 前言 今天面试被问到了,我们都知道final修饰的东西是不可变的,那么是值不可变还是其地址不可变?一脸懵逼,回来查阅一番,总结一下 --- final与数据 在日常行为下,一般数据指的都是基 ...

  9. <面试题分享> 记两次58面试

    说明 来北京找工作,有个猎头看我的简历不错,帮我投了两个58同城的面试,投的都比较高,题也注重原理,较难,这里分享出来,给有需要的人和自己提个醒,保持空杯 面试题内容 2019.05.07 北京58企 ...

随机推荐

  1. GO语言官方中文教程!

    官方中文教程网址:https://tour.go-zh.org/basics/1 推荐理由:简洁,一句废话没有,对于初学者可以让大家快速掌握GO语言! 注意问题:如果不能访问,你懂的! 教程截图:

  2. 63. 不同路径 II leetcode JAVA

    题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 现在 ...

  3. Java50道经典习题-程序17 猴子吃桃问题

    题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,见只 ...

  4. 【Oracle 12c】最新CUUG OCP-071考试题库(56题)

    56.(14-14) choose the best answer: You need to create a table with the following column specificatio ...

  5. VIO的Bundle Adjustment推导

    IMU模型和运动积分 $R_{\tiny{WB}} \left( t +\Delta{t} \right) = R_{\tiny{WB}} \left( t \right) Exp\left( \in ...

  6. WebLogic “Java 反序列化”过程远程命令执行

    WebLogic “Java 反序列化”过程远程命令执行 详细信息: https://www.seebug.org/vuldb/ssvid-89726 说明: 反序列化是指特定语言中将传递的对象序列化 ...

  7. flask接收前台的form数据

    转自 http://www.cnblogs.com/wanghaonull/p/6340096.html 我主要是想了解 request.form.get('username') 这一部分

  8. JavaScript基础总纲

    如果前人种好了树那我们干嘛不去享受阴凉,然后花费时间去为大树的成长进一份力. 我发现一个站点写的很全面写很系统,我总结主要分为一些几个模块: 一,JavaScript 教程(基础) 二,JavaScr ...

  9. FutureTask与Fork/Join

    在学习多线程的过程中,我们形成了一种思维习惯.那就是对于某个耗时操作不再做同步操作,让他分裂成一个线程之后执行下一步,而线程执行耗时操作.并且我们希望在我们需要它返回的时候再去调用它的结果集.好比我们 ...

  10. C#-输入输出,类型,运算符,语句的练习——★判断年份是否是闰年★

    //输入一个年份,判断是否是闰年 //(能被4整除却不能被100整除的,年份世纪年份能被400整除的是闰年) Console.Write("请输入一个年份:"); int year ...