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

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

问题一:谈一谈内存优化
这个问题的前一问是“谈一谈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. Syncthing源码解析 - 源码目录说明!

    Syncthing是一个免费开源的p2p软件,Go语言编写的! 官网:https://syncthing.net/ 源码:https://github.com/syncthing/syncthing/ ...

  2. css3半圆

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 微信小程序下可以使用的MD5以及AES加密(通用)

    两段代码都来自网络 ,在小程序下的加解密结果与CS/BS等算出的结果都一致,支持汉字. 一.MD5: var rotateLeft = function (lValue, iShiftBits) { ...

  4. JDBC技术(汇聚页)

    JDBC代表Java数据库连接(Java Database Connectivity),它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API, 换句话说:JDBC是用于在Java ...

  5. 由一个场景分析Mysql的join原理

    背景 这几天同事写报表,sql语句如下 select * from `sail_marketing`.`mk_coupon_log` a left join `cp0`.`coupon` c on c ...

  6. linux下安装nginx,centos安装nginx

    初学nginx,进行简单的安装和配置. 一.依赖 openssl-fips-2.0.9.tar.gz zlib-1.2.11.tar.gz pcre-8.01.tar.gz nginx-1.8.0.t ...

  7. springboot集成JsonRpc2.0

    导入依赖的jar: 配置AutoJsonRpcServiceImplExporter: 接口文件: 实现类: 测试:

  8. 使用TortoiseSVN客户端管理IntelliJ IDEA项目的方法

    使用TortoiseSVN客户端管理IntelliJ IDEA项目的方法 今天在打开一个使用SVN管理的项目时,IntelliJ IDEA提示: Can't use Subversion comman ...

  9. 【JavaScript】动态原型模式创建对象 ||为何不能用字面量创建原型对象?

    var proto = ""; function Person(name, age, job) { this.name = name; this.age = age; this.j ...

  10. table组件选中数据回显

    table组件多选状态下,把已选择的数据回显,需要在多选列上加上一个属性 :reserve-selection="true" 实例如下: <el-table :data=&q ...