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

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

问题一:谈一谈内存优化
这个问题的前一问是“谈一谈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. SoundPool在使用

    Button playButton; SoundPool sp; int soundID_1,soundID_2; int streamID_1,streamID_2;  @Override prot ...

  2. Linux—virtualbox系统安装(1)

    安装过程 1 点击新建 2 内存大小一般512M即可 3 按照默认的硬盘空间大小8G 4 选择第一个VDI 5 选择固定大小,系统运行速度快,效率高 6 保存文件位置 7 创建成功后,点击设置,将软驱 ...

  3. 那些令人敬佩的刚学OI的大佬

    我是萌新刚学OI,请问LCT怎么写常树最小啊 我是女生刚学OI,请问树链剖分哪里写挂了? 萌新求教,这棵SBT哪里有问题啊啊啊…… 刚学OI,请问可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最 ...

  4. 在Myeclipse中查看android源码就是这么easy

    在开发android 时不能查看源码必是很不爽的一件事,看过网上一些文章后(都是2.0以前的版本,跟我的2.2最新版本的配置是不一样的)不过还是给了我启示,通过配置终于可以在myeclipse中查看源 ...

  5. iOS --高仿QQ空间页面

    1.首先分析一下qq空间页面的主要2个功能: 1)随着TableView的向上滑动导航栏的颜色渐变,变化过程是从透明变成白色. 2)随着TableView的向下滑动,图片随着offset放大. 2.首 ...

  6. C#-进制转换、基础语句、语句的总结与练习——★for循环:九九乘法表、三角形、菱形★

    //for循环嵌套练习——打一个九九乘法表 ; i <= ; i++) { ; j <= i; j++) { Console.Write(j + "×" + i + & ...

  7. python学习,day4:装饰器的使用示例2

    这个例子比较复杂 # coding=utf-8 # Author: RyAn Bi user,passwd = ' #输入用户名密码 def auth(auth_type): #装饰器第一层,确定鉴权 ...

  8. Windows网络服务渗透攻击分类

    网络服务渗透攻击分为三类 一.针对于windows系统自带的网络服务的渗透攻击 1.针对于NetBIOS的攻击 NetBIOS以运行在TCP/IP系统中的NBT协议来实现,具体包括在UDP的137端口 ...

  9. C#常用总结《一》

    集合类常用: List<T> 泛型集合 Dictionary<key,value>  字典集合 文件读取: FileStream :对各种文件读写,字节处理更好 StreamR ...

  10. hdu 3709 Balanced Number(平衡数)--数位dp

    Balanced Number Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...