博文环保知识竞赛简答题面试简答题

阿里2015校招面试回忆(成功拿到offer) - 博客 - 伯乐在线
& 阿里2015校招面试回忆(成功拿到offer)
| 标签: , ,
继上次《》文章过后,大家都希望除了题目之外,最好能给出自己当时的回答情况,看看有没有什么回答技巧,这样更有参考价值。
嗯,建议的很对,因此这次对于阿里的面试回忆,我下面以对话的形式尽可能复现我当初的面试场景。
声明:下面只复述我觉得有参考价值的面试题,实际面试题比这多些(有些不记得了),需要找工作的请认真看完(对Java方向的同学更有帮助),不需要的大牛们请一笑置之。
2. 阿里面试回忆
在说具体的面试场景之前,一个小插曲很有必要说一下:
由于我面的是Java开发,但当时负责人员给我安排了一个C++面试官(在面试官桌子上放着一个“C++方向”的牌子),然后我就跟负责人说“我是面Java方向的,不是C++方向的”,结果那个面试官笑呵呵的说“没关系,在我这面一样的,如果你不懂C++,我可以不问你C++语言方面的细节问题”,当时我心里想:虽然我C++学的和Java差不多,就算面C++也没有问题。但是既然面试官这么说了,肯定不问C++了,Java估计也不会问(C++方向的工程师不一定懂Java呢),应该是问数据结构、算法、网络、操作系统方面的问题了。虽然都有所准备,面起来也可以,但是鉴于两个方面的原因,我还是没答应在这面。
(1)据说阿里90%都是招Java工程师,如果在这面后面肯定会以为我是面C++的,胜算就少了;
(2)我这几个月基本上都在专研Java方向的知识,也研究了不少JDK源码和Java相关的项目,感觉自己的Java方向知识有了一个质的提高,因此希望面试官能够考查和检验我这方面的知识。
因此我当时跟那个面试官说“不好意思,我还是希望能面Java方向的知识”,那个面试官依旧笑呵呵“如果你对Java知识的确非常自信,那么可以给你换个Java方向的面试官”,然后我只能说“是的,我有研究过很多JDK源码,也做了不少Java项目”。最后,我出去找负责人给我安排Java方向的面试官,负责人说“那你要等会儿才行,估计要半个小时”。“哦,没关系,那我等会吧”,心里想:等不怕,方向搞错了才要命。
说上面这段插曲的目的是想告诫大家,如果你有比较明确的方向,比如“我以后一定要做C++/Java方向的开发”,那么一定要强调出来。如果像阿里这样每个面试官都有个方向牌那很容易搞定,如果没有则可以在面试一开始的自我介绍或找其它机会说出来让面试官知道,可能有人认为语言不重要,关键是算法、数据结构、操作系统云云……是的,很多面试官都跟我说过:在以后的工作过程中,语言不重要,重要的是你以后做的东西是不是你感兴趣的,但是我认为语言在面试过程中是有非常大的关系的,如果你是C++方向,那么面试官可能会问你一些虚函数机制、Linux下的内存分配策略、内存管理、常用系统调用等这方面的知识;如果你主攻Java,可能会问集合类区别、可研究过jdk源码、数据库等方面的知识。
因此面试的第一步就是让面试官明确知道你主攻的语言方向(可能也有较好的面试官会在提问之前首先问你懂Java还是C++),如果你两个方向都非常懂并且没有比较偏爱的方向,那就无所谓了。
一面:技术面(大概40 minutes)
半个小时没到,终于给我安排了个Java方向的面试官,这次交流非常愉快。下面的“面”代表面试官。
第一阶段:自我介绍
面: 请简单自我介绍下。
我: 我是XX大学计算机专业的一名XX,我研究生期间的方向是XX,……(方向简单描述)。12年暑期在XX公司实习了4个月,做的是XX(在一所不知名的本地小公司实习过)……(其它重要项目的简述)。另外,自己是名开源积极分子,有,而且今年暑期参加了CSDN举办的开源夏令营活动,做的是……
阶段总结:上面只是我自己当时的一个简单自我介绍,经验不足讲的比较乱,而且忘了讲自己十分热衷技术,平时喜欢写技术博客等事情(有些情况下可以加分呢)。建议大家都定制好自己的版本,讲出自己的亮点。
第二阶段:介绍研究生期间的论文项目,针对介绍提出几个相关的技术问题
面: 好,我看下简历。(然后对着我的简历看了十几秒,指着我的第一个项目)这是你刚说的研究生的论文项目吧(我嗯),那你把这个项目详细说下。
我: 我从项目的选题(为啥要做这个方向)、项目采用的技术、新颖的地方、最终达到的效果(由于我做的是某个算法的性能提高,那么我就会讲速度提高了多少?空间压缩了多少?)这几个方面详细介绍了自己的项目。
下面就是针对我的叙述具体问了几个技术相关点,这没什么好说的,因为每个人做的项目不一样,问的东西也不一样。
阶段总结:其实要求讲的这个项目是用C++写的而不是Java,不过没关系,对于项目而言,语言就不是很重要了,关键是项目的架构、所采用的技术、能达到什么样的效果。面试官选的项目一般要么是简历中项目经验的第一个、要么是有他感兴趣的、要么项目做的时间比较长的,因此建议在写简历时,把你认为最有把握的项目放在第一位(而不是传说中的要按时间倒序来写项目经验),没太大把握的不要写(被抽问到就惨了)。只要你真真正正的吃透了被抽到的项目,那么这个项目提问阶段是完全easy的。
第三阶段:Java方向的知识,包括JVM原理、垃圾回收机制等
面: 你Java学的怎么样?
我: 还可以,有研究过部分JDK源码,比如常用的集合类如HashMap/Hashtable、ArrayList/LinkedList、Vector等,还有Java5之后的并发包JUC如concurrentHashMap、Executor框架、CopyOnWrite容器等。自己很欣赏Java巧妙的垃圾回收机制,看过周志明的《深入理解Java虚拟机》,因此对JVM相关的知识有所掌握……
面: 嗯,学的挺深的,那你把JVM的结构和类加载原理说下。
我: 马上拿起桌上的笔和纸,把虚拟机运行时包含的几个数据区和执行引擎画了下,包括方法区、虚拟机栈、本地方法栈、堆和程序计数器,然后介绍每个区域有什么作用,最后讲ClassLoader的类加载机制,还顺便说了下双亲委派机制。
面: (面试官点头表示满意)你刚刚说Java的GC机制很巧妙,那么它的巧妙之处在哪里?
我: 我从两个方面说下自己的理解:一是Java的内存分配原理与C/C++不同,C/C++每次采用malloc或new申请内存时都要进行brk和mmap等系统调用,而系统调用发生在内核空间,每次都要中断进行切换,这需要一定的开销,而Java虚拟机是先一次性分配一块较大的空间,然后每次new时都在该空间上进行分配和释放,减少了系统调用的次数,节省了一定的开销,这有点类似于内存池的概念;二是有了这块空间过后,如何进行分配和回收就跟GC机制有关了,然后我详细介绍了GC原理、画图表示年轻代(Eden区和Survival区)、年老代、比例分配及为啥要这样分代回收(我认为巧妙就在于这里),有了GC基本结构后,我又详述了下GC是具体如何进行内存分配和垃圾回收的。
面: (面试官一直点头表示对我回答的赞同)嗯,看来你对这块的确掌握了,对了,你说你参加的CSDN开源夏令营项目是阿里的是吧(我点头),这个夏令营是什么情况?
我: 我简单介绍了CSDN举办此次夏令营的目的,顺便说道此次夏令营活动当初有2000多人报名参加,最终只筛选出60多名,自己凭着开题报告和对开源的热爱赢得了导师的青睐得以入选。
面: 你导师是谁?
我: 淘宝的XX。
面: 哦,他啊,我认识呢,他是……(后面就简单闲聊了几句,该阶段结束,面试官让等会儿准备二面)
阶段总结:上面的对话有人看了过后可能会说:好简单啊,问的题目都是你会的,当然能过啦。是的,其实这是有技巧在里面的,就是要想办法“先下手为强”,啥意思?即让自己成为主动摊牌者而不是被动回答者,找机会跟面试官说自己熟练掌握了哪些方面的知识、自己喜欢专研什么等等,就像上面我所做的,一开始摊牌说明自己掌握的知识处在哪些地方,引导面试官去问你想让他问的知识点,这样达到双赢的目的(你爽了,面试官也轻松了,因为他不用老是猜你可能知道哪些东西然后试探性的问你这个会吗那个了解过吗)。
二面:技术面 + HR面(大概1 hour)
一面很轻松的就过了,但是二面就相对而言有些吃力,问的完全是项目相关,而且不是我最熟的研究生期间的论文项目,而是另外两个项目,由于复习不到位,某些地方回答的不完善。
第一阶段:自我介绍,同上
第二阶段:介绍面试官感兴趣的两个项目,一个与推荐系统相关,另一个与Java web相关
面: 介绍下你简历上的这个电影个性化推荐引擎,使用的是哪种推荐算法?
我: 改进的基于用户的协同过滤推荐算法。
面: 那好,那你从项目的基本架构、所使用的算法原理、如何改进的、数据如何处理这几个方面介绍下你的项目吧。
我: 我首先画了下项目的架构图,据此图详细讲了下UserCF的原理及如何使用用户的社交数据和六维理论改进传统的UserCF,并写出了改进后的算法公式。然后又说这个项目的数据多大,代码中采用什么数据结构进行处理的。
面: (介绍原理中提到了利用用户相似性来作为推荐的一个参考,面试官追问)那用户的相似性你怎么算的?
我: (汗,这个有个计算公式,我不太记得了,最后根据自己的理解讲了下余弦相似性的计算方式,公式没写全,面试官问公式里的根号怎么算的,我说直接用Java的库函数)
面: 你这数据哪来的?有几类数据?数据的存储格式是什么?
我: (该项目时间有点久了,前几天只复习了项目的整体架构和算法原理,忘了看具体的数据了,这里只能凭自己的记忆讲了下数据的存储格式,回来后发现自己讲的虽然没错但不够具体)
附:该电影个性化推荐引擎我早已经放到了上面,是自己在老师的指导下做的,纯算法,还比较简单有待于改进。
介绍完了这个项目,马上面试官又看中了另一个Java web相关的项目,马上追问。
面: 嗯,你这个XX系统是用ssh2框架做的,那你对这个框架熟吗?
我: 嗯,当时在公司实习时对ssh的掌握程度只是会使用级别,那时候没时间去研究框架背后的原理。后来有闲暇时间后,我就深入研究了下这几个框架的原理,还看了部分spring的源码,学到了不少知识。
面: 嗯,那你把这三个框架都介绍下。
我: 我开始按自己的理解按Hibernate、Struts、Spring的顺序开始讲,Hibernate讲到它的使用原理及与iBATIS的对比,顺便说了下现在似乎大家更倾向于使用iBATIS、myBATIS这样更加灵活的轻量级框架。struts讲了下它的作用就是“将请求与视图分开”,然后讲述从输入url到使用struts处理的控制流程(struts从tomcat那接管、action处理),然后也说struts现在似乎也不那么倾向于使用因为它有漏洞。最后重点讲了下重头戏Spring,详细讲述了它解耦的功能、AOP原理及自己有利用动态代理简单模拟实现过一个简单的AOP功能、IOC(DI)等。最后说,从web应用层面上看,Hibernate属于持久层,struts属于表示层,而Spring却贯穿所有于所有层(表示层、业务层、持久层),Spring也有自己的MVC模块、web模块及JDBC和DAO模块,只是很少使用,也就是只用一个Spring也是完全可以的。
面: (点头表示肯定)你刚说到struts有漏洞,那么Hibernate是安全的吗?有没有可能发生xss攻击和sql注入攻击?
我: (汗,这个问题真心没想过,对Hibernate的掌握没有Spring那么深,只能硬着头皮按自己的理解回答)这个问题没想过,不过我觉得框架没有绝对的安全,Hibernate是用来操作数据库的,hql语句里也有select、where判断,应该有可能发生sql注入攻击,xss攻击就不太清楚了。(这个回答太糟了)
面试官没说啥,一直在电脑上写着什么东西。这时候旁边的HR终于发话了。
HR: 你本科是哪的?为什么选择考研?
我: 开始说出我的“发家史”,从一所不知名的小二本考到了中科大,……
HR: 那你技术上是怎么学习的?
我: 又从本科说起,本科技术很差,到了研究生期间才真正开始技术上的修炼,……balabala
HR: 你的职业规划是什么?
我: ……(每个人的想法不一样)
HR: 你最大的优势是什么?
我: (自己吹吧,也要根据实际情况看)
阶段总结:再次说明项目的重要性,第一个项目有些记忆模糊,答的有瑕疵,这里要引以为戒(一定要对项目知根知底),第二个项目感觉答的还可以,不过Hibernate安全问题没答出来,我觉得只要你其它问题答的很好,有个别问题答不出来是不会影响最终的offer的。HR面也很重要,你得说通了,需要提前考虑好常见问题的回答。
第三阶段:到你提问了
自由发挥阶段,可以问问公司内部的培养计划、晋升机制、是否经常有大牛分享技术让我们学习等等……
(1)整个面试过程中没让写代码,没问Linux下的一些知识,也没问操作系统、计算机网络相关,我觉得可能是Java面试更倾向于从项目中问相关的技术问题,如果你没项目或项目不多,那么就可能问这些计算机基础知识了。
(2)由于之前内推电面的失败,让我丧失了一些小自信,因此在这次阿里的整体面试过程中还是有些紧张,大家请引以为戒,务必在面试中保持淡定的心态,就当是和朋友在一起交流技术问题。
(3)最后,希望我上面对话形式的面经能够给正在找工作或以后找工作的同学们带来一些借鉴意义,希望你们能够从中看出某些问题的答题技巧和所做的准备工作。
—————
我的微博:@
关于作者:
新浪微博:,个人博客:
为作者带来更多读者;为读者筛选优质内容;专注IT互联网。
我极少给人写评论,作者能将如此生涩难懂的公式以图形的方式讲解出来,让人由衷钦佩,感谢分享。当代中国的...
汇集优质的Python技术文章和资源。人生苦短,我用Python!
JavaScript, CSS, HTML5 这里有前端的技术干货!
关注安卓移动开发业界动态,分享技术文章和优秀工具资源。
关注iOS移动开发业界动态,分享技术文章和优秀工具资源。
为作者带来更多读者;为读者筛选优质内容;专注IT互联网。
由数百名译者组成,立志翻译传播优秀的外文技术干货。
一个专门为IT单身男女服务的征婚传播平台。
收录优秀的工具资源,覆盖开发、设计、产品和管理等。
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线博客团队正试图以我们微薄的力量,把优秀的原创/译文分享给读者,做一个小而精的精选博客,为“快餐”添加一些“营养”元素。
欢迎关注更多频道
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选博客文章
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
(加好友请注明来意)
网站使用问题
请在询问或者反馈
& 2015 伯乐在线
赞助云主机, 赞助云存储宁夏教师招聘考试之二十个经典面试题宁夏教师招聘
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
宁夏教师招聘考试之二十个经典面试题
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口作为一个.NET程序员,应该知道的不仅仅是拖拽一个控件到设计时窗口中。就像一个赛车手,一定要了解他的爱车 & 能做什么不能做什么。
本文参考Scott Hanselman给出的,整理如下。包括WinForms,ASP.NET,XML以及C#和.NET基础相关的问题,有兴趣的自我检测一下吧~
参考答案另附在文章末尾,由于水平有限,难免有谬误,欢迎指正。
所有号称会写代码的人
进程和线程之间的区别?
什么是Windows服务,它的生命周期与标准的EXE程序有什么不同?
Windows单进程可寻址的最大内存是多少? 他们如何影响系统应用软件设计?
EXE 和DLL之间的区别?
强类型和弱类型的区别,以及其优缺点?
什么是PID, 在解决系统问题时有用吗?
一个TCP/IP端口可以被多少个进程分享?
什么是 GAC?使用 GAC 给我们带来哪些好处?
中级.NET开发者
面向接口、面向对象和面向方面编程的区别
接口和类的区别?
什么是反射?
XML web service 跟 .NET Remoting 的不同。
early-binding 和late-binding 的区别是什么?
Assembly.Load是静态引用还是动态引用?
Assembly.LoadFrom和Assembly.LoadFile,2者使用的时机有何不同?
什么是Assembly Qualified Name? 一个文件名吗? 有何不同?
这里问的是强名称概念。Assembly.Load("foo.dll")加载程序集的方法是否正确?
强签名的程序集与非强签名的程序集有何不同?
DateTime 可以为null吗?
什么是 JIT?什么是 NGEN?分别的优势和劣势是什么?
如何在.NET CLR的分代垃圾收集器管理对象的生命周期?什么是不确定性的终结?
Finalize()和Dispose()的区别?
Using()模式有用吗? IDisposable是什么? 它如何支持确定性的终结?
tasklist /m "mscor*" 命令行的作用是?
in-proc 和 out-of-proc 之间的区别是什么?
out-of-proc是基于什么技术实现的?
当你在ASP.NET中运行一个组件时,它在Windows XP, Windows 2000, Windows 2003上分别跑在哪个进程里面?
高级开发者及架构师
DateTime.Parse(myString)是否正确?
PDBs是什么? 什么场景下为了调试需要加载它?
什么是圈复杂度,以及为什么它很重要?
写一个标准的 lock() 编码方法,以及 &双重检查&代码
什么是FullTrust? GAC下的程序集拥有FullTrust吗?
代码加上需要安全权限的特性有什么好处?
gacutil /l | find /i "Corillian" 作用是?
这行命令的功能sn -t foo.dll
DCOM穿过防火墙,哪些端口需要打开? 135端口的目的是什么?
对比OOP和SOA。各有什么原则?
XmlSerializer工作原理是什么?当进程使用它时需要什么ACL权限?
为何catch(Exception)的使用通常都不是一个好办法?
Debug.Write 和 Trace.Write 的区别是什么? 应在什么时候使用它们?
Debug和Release编译有何不同? 对于程序运行速度而言是否有明显区别?为什么用,或为什么不用它?
JIT是以assembly为单位发生还是以方法为单位发生?这对于工作区有何影响?
抽象基类(abstract base class)和接口(interface)对比
a.Equals(b) 与 a == b 的区别?
在对象比较中,对象一致和对象相等分别是指什么?
如何实现.NET中的深复制操作?
对IClonable接口的理解应为?
什么是拆箱和装箱操作?
string 是值类型还是引用类型?
XmlSerializer所使用的&PropertySpecified&模式的意义是什么?它试图要解决什么问题?
为什么说out参数是.NET的败笔?它究竟怎么样?
可以把特性(attributes)放在方法的具体参数中吗?这有什么用?
C# 控件开发者
Override关键词new的含义? 有何副作用?
解释virtual, sealed, override, 和 abstract关键字。
解释一下这个字符串中的各个部分:Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=d274679d。
public, protected, private 和 internal 之间的区别?
使用Primary Interop Assembly (PIA)有什么好处?
NUnit采用何种机制进行单元测试?
catch(Exception e){} 和catch(Exception e){}的区别?
typeof(foo) 和 myFoo.GetType()之间的区别?
解释一下第一个构造函数的调用顺序:
public class c{ public c(string a) : this() {;}; public c() {;} } 这个构造函数有用吗?
This是什么?可以在静态方法中调用 this 吗?
ASP.NET (UI) 开发者
描述一下如何使用基于Form表单Post提交模拟Button1_OnClick操作。
什么是PostBack?
& 什么叫作ViewState?是什么编码?加密了吗?到底是谁在使用ViewState?
&machinekey&元素是做什么的?它在 ASP.NET下是做什么用的?
说出ASP.NET中三种Session State提供程序及优缺点。
ASP.NET会重用多个请求之间的线程吗?是否每个HttpRequest都有自己的线程?你是否应该用ASP.NET的Thread Local存储?
能否举例说明如何利用HttpHandler检查客户端上传图片格式。
HttpModule订阅的是什么类型的事件? 这对于实现有何影响?如果不打算重新编译ASP.NE应用程序,应该怎么做?
简述从任意客户端请求路由到ASP.NET的过程。
简述cookies是如何工作的,给出一个cookies滥用的例子。
解释HttpRequest.ValidateInput()的重要意义?
那些数据是通过Http Header传递的?
说出Head 中的GET和POST的区别。
说出至少6个状态码的名称及其含义
If-not-modified-since是如何工作的,如何实现?
VaryByCustom是如何工作的?
使用XML的开发者
XML Namespaces的作用是什么?
DOM适合的使用场景是什么?是否有尺寸限制?
什么是WS-I基本配置,以及为什么它很重要?
写一个使用默认命名空间和限定(前缀)命名空间一个小的XML文档。包括从两个命名空间的元素。
什么是元素和属性之间的根本区别?
格式完好的XML和有效的XML之间的区别是什么?
使用.NET你会如何验证XML?
为什么这句代码通常是不好的?什么时候好?
和 eventing-readers (Sax) 这两者间的异同。
XPathDocument中和的XmlDocument之间有什么区别?详细说明,其中一个应该被使用在其他情形。
&XML片断&与&XML文档&有什么区别
规范化形式的XML ,这是什么意思?
XML InfoSet规范与Xml DOM有什么不同? InfoSet是要解决什么问题?
比较DTD和XSD,它们的相似点与区别分别是什么?哪个更好些?为什么?
System.Xml 支持DTDs吗? 怎么支持?
XML Schema能够表示为对象图?对象图能够表示为XML Schema?
------------------------------------------------------------------------------------------------------------------------
下面是参考答案
------------------------------------------------------------------------------------------------------------------------
所有号称会写代码的人(参考答案)
进程和线程之间的区别?
一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。
这个解释很形象:
什么是Windows服务,它的生命周期与标准的EXE程序有什么不同?
Windows服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。
EXE 可执行程序通常有一个用户界面,Console或 GUI,通常由用户来启动或停止。
Windows单进程可寻址的最大内存是多少? 他们如何影响系统应用软件设计?
以32位操作系统为例,最大寻址是4G(含虚拟内存),是通过2的32次方计算的; 当物理内存小于4G时,进程访问的内存量随着虚拟内存的增加而增加,直到4G; 4GB内存实际上包含了程序的所有部分--包括可执行代码,代码加载的所有dll,以及程序运行时使用的所有变量的内容。这个4GB内存称为虚拟地址空间,或虚拟内存。
对设计有明显影响的有2点:
在.NET中区别最明显的是int的使用,在32位下和64位下存储的数据不一样(int& 4个字节32位, 8个字节64位);另外一个是编译的程序为X86则可在32、64位下同时运行。
EXE 和DLL之间的区别?
DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用程序直接或间接调用。EXE就不用说了吧~
强类型和弱类型的区别,以及其优缺点?
强类型是指尽量早的检查变量的类型, 通常在编译的时候就检查.
弱类型是指尽量推后对变量类型的检查, 通常在运行时检查。
到底哪个好? 其实各有各的好, 像ruby, javascript, 都属于week-typing, 好处是写代码的时候比较快. C#属于strong-typing, 好处是如果变量类型不对的话, 编译不会通过, Visual Studio 还会有提示. 至于写代码的速度上讲, 自从C# 3.0以来, 使用var来定义变量, 简单了很多。
什么是PID, 在解决系统问题时有用吗?
PID全称是 Process Identifier, 就是进程的一个号码, 通常当系统哪个程序不听使唤的时候, 可以用它来把这个程序关闭. 而且Debug的时候, 也有用。
一个TCP/IP端口可以被多少个进程分享?
TCP/IP端口可以被多少个进程分享
Socket socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Socket socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket1.Bind(new IPEndPoint(IPAddress.Parse(&127.0.0.1&P),8235));
socket1.Listen(10);
socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
socket2.Bind(new IPEndPoint(IPAddress.Parse(&127.0.0.1&P), 8235));
socket2.Listen(10);
Console.Read();
什么是 GAC?使用 GAC 给我们带来哪些好处?
GAC 是指 Global Assembly Cache, 用处是放在这里的程序集可以被多个程序共同调用, .NET 中的大部分程序集都在这里. 解决的问题是节省硬盘空间以及防止Dll Hell。
中级.NET开发者(参考答案)
面向接口、面向对象和面向方面编程的区别
面向接口:定义要实现某类功能应该遵循的统一规范,而具体实现过程由实现该接口的类型决定。
面向对象:强调对具有相同行为和属性事物的封装,更注重封装的完整性和功能的完整性。
面向方面:主要提供与业务逻辑无关的操作。比如系统中有多个地方都用到文件上传功能,可以使用面向方面的思想在所有上传文件之前对文件的大小、格式等信息进行过滤操作,而不是在每处上传代码里面完成对这些信息的过滤。
接口和类的区别?
接口(Interface): 不能实列化,自己没有状态,方法也没有具体的实现,被继承时,继承类需要实现接口的所有方法。接口就像租房时网上下载的一个租房合同模板。
类 (Class): 可以被实例化,有状态,被继承时,继承类也不需要重新实现被继承类中的方法。但是如果被继承类的方法中有abstract修饰的,继承类则需要实现这个方法。类像是已经被填上内容的租房合同的模板。
什么是反射?
代码在运行过程中动态获取程序集的信息,对象的信息,或者直接调用对象的方法或属性。 e.g. var i = 100; i.GetType(); 输出System.Int32。
XML web service 跟 .NET Remoting 的不同。
XML Web service: 是开放标准,使用Http/SOAP协议交互。 .NET Remoting: 是微软自己的技术,只能在.NET里面使用。
early-binding 和late-binding 的区别是什么?
early-binding: 是指编译的时候绑定,late-binding是指运行时绑定。
Assembly.Load是静态引用还是动态引用?
动态引用。
Assembly.LoadFrom和Assembly.LoadFile,2者使用的时机有何不同?
Assembly.LoadFile只载入相应的dll文件,其他文件并不会被载入。
Assembly.LoadFrom会载入dll文件及其引用的其他dll
什么是Assembly Qualified Name? 一个文件名吗? 有何不同?
这里问的是强名称概念。
它不是一个文件名,相比文件名,Assembly Qualified Name更能确定一个程序集,它包含文件名,但同时包含版本,公钥,和区域。因为同样一个名称的文件可能有不同的版本和区域,此时单独靠文件名称,可能会造成不能确定程序集的正确性。
Assembly.Load("foo.dll")加载程序集的方法是否正确?
不对,正确方式为:Assembly.Load("foo, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=da049e3")
强签名的程序集与非强签名的程序集有何不同?
通过签发具有强签名的程序集合,可以确保名称的全局唯一性!因为强名称是依赖于唯一的密钥对来确保名称的唯一性,其他人不会生成与你相同的程序集名称(不同的私钥产生的名称不同)。强名称保护程序集的版本沿袭,因为强名称的唯一性能够确保没有其他人能够生成你的程序集的后续版本。强名称提供可靠的完整性检查,通过.NET Framework安全检查后,可以确保程序集内容在生成后未被更改过!
DateTime 可以为null吗?
DateTime 不能为null。因为其为Struct,属于值类型,值类型不能为null,只有引用类型才能被赋值null。
什么是 JIT?什么是 NGEN?分别的优势和劣势是什么?
JIT(Just In Time),这是我们通过.NET编译器生成的应用程序最终面向机器的编译器
本机映像生成器 (Ngen) 是一种提高托管应用程序性能的工具。 Ngen.exe 创建本机映像(包含经编译的特定于处理器的机器代码的文件),并将它们安装到本地计算机上的本机映像缓存中。运行时可从缓存中使用本机映像,而不必使用实时 (JIT) 编译器编译原始程序集。
由于 JIT 编译器会在调用程序集中定义的单个方法时将该程序集的 MSIL 转换为本机代码,因而必定会对运行时的性能造成影响。在大多数情况下,这种性能影响是可以接受的。更为重要的是,由 JIT 编译器生成的代码会绑定到触发编译的进程上。它无法在多个进程之间进行共享。为了能在多个应用程序调用或共享一组程序集的多个进程之间共享生成的代码,公共语言运行库支持一种提前编译模式。此提前编译模式使用本机映像生成器 (Ngen.exe) 将 MSIL 程序集转换为本机代码,其作用与 JIT 编译器极为相似。但是,Ngen.exe 的操作与 JIT 编译器的操作有三点不同:
& 它在应用程序运行之前而不是运行过程中执行从 MSIL 到本机代码的转换。
& 它一次编译一个完整的程序集,而不是一次编译一个方法。
& 它将本机映像缓存中生成的代码以文件的形式持久保存在磁盘上。
如何在.NET CLR的分代垃圾收集器管理对象的生命周期?什么是不确定性的终结?
.NET的垃圾回收分为3代,可通过GC.Collect强制处理。
一个对象实例没有被任何地方引用时就称为垃圾,当内存不够是GC就会将该对象实例占用的空间清理出来
Finalize()和Dispose()的区别?
Finalize只释放非托管资源;
Dispose释放托管和非托管资源
Finalize和Dispose共享相同的资源释放策略,因此他们之间也是没有冲突的。
Using()模式有用吗? IDisposable是什么? 它如何支持确定性的终结?
有用,限定资源作用域并自动释放。
IDisposable是一个接口,有一个方法Dispose(),可以在对象出作用域的时候调用,如在Using出界后调用这个接口。
tasklist /m "mscor*" 命令行的作用是?
列出所有使用符合引号内pattern的dll的进程.
in-proc 和 out-of-proc 之间的区别是什么?
In-proc 发生在一个进程之内, Out-of-proc 发生在不同进程之间。
out-of-proc是基于什么技术实现的?
当你在ASP.NET中运行一个组件时,它在Windows XP, Windows 2000, Windows 2003上分别跑在哪个进程里面?
Xp : aspnet_Wp.exe
Windows 2000 : inetinfo.exe
Windows 2003 : w3wp.exe
高级开发者及架构师(参考答案)
DateTime.Parse(myString)是否正确?
一般使用DateTime.TryParse解析。
PDBs是什么? 什么场景下为了调试需要加载它?
PDBs是源码编译文件-全称Program Database,这个文件主要会存储对应模块(dll或者exe)内部的所有符号,以及符号对应的地址、文件名和行号。调试的时候应用程序和源文件之间的一个桥梁。
什么是圈复杂度,以及为什么它很重要?
一种代码复杂度的衡量标准。
可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的潜在风险和高的圈复杂度有着很大关系。
写一个标准的 lock() 编码方法,以及 &双重检查&代码
lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。 如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。
public class MySingleton {
private static object myLock = new object();
private static volatile MySingleton mySingleton = null;
private MySingleton() {
public static MySingleton GetInstance() {
if (mySingleton == null) { //第一次检查
lock (myLock) {
if (mySingleton == null) { // 第二次检查
mySingleton = new MySingleton();
return myS
什么是FullTrust? GAC下的程序集拥有FullTrust吗?
FullTrust即为完全信任,也称为盲目信任.
GAC:有FullTrust权限
代码加上需要安全权限的特性有什么好处?
更加灵活的设置对代码的访问权限,实现代码级保护,防止被移动代码恶意利用
gacutil /l | find /i "Corillian" 作用是?
全局程序集缓存中如果有Corillian就更新该程序集,没有就安装。
这行命令的功能sn -t foo.dll
显示程序集的公钥标记。
DCOM穿过防火墙,哪些端口需要打开? 135端口的目的是什么?
因DCOM的端口号是随机分配的,默认情况下,会分配1024以上的端口号,所以默认情况下,DCOM不能穿越防火墙。
135是远程过程调用(RPC)的默认端口
对比OOP和SOA。各有什么原则?
OOP是一种编程模型,将复杂的逻辑分解出小的模块,特性是继承,封装和多态。而SOA是一个技术框架。 SOA的思想是将业务逻辑封装成服务或者中间件提供给应用程序来调用,当然其组件化思想是继承和发扬了OOP的优点。
XmlSerializer工作原理是什么?当进程使用它时需要什么ACL权限?
XmlSerializer是将对象的属性和字段进行序列化和反序列化的,序列化成为xml数据,反序列化再将xml转换成对象。应该至少需要ACL权限中的读权限。
为何catch(Exception)的使用通常都不是一个好办法?
因为try-catch有性能损失,在性能要求高的场景下,频繁使用效果很差。同时,catch(Exception)后,可能会破坏程序的正常执行逻辑,导致阅读、调试代码难度增大。
Catch的时候应该捕捉具体的Exception类型,而不是通用的Exception
Debug.Write 和 Trace.Write 的区别是什么? 应在什么时候使用它们?
Debug只在debug状态下会输出,Trace在release下也会输出,在release下Debug的内容会消失。Debug会产生pdb文件,release不会。
Debug和Release编译有何不同? 对于程序运行速度而言是否有明显区别?为什么用,或为什么不用它?
Debug和Release编译产出物不一样,Release下无调试信息,如Assert无法使用。对程序运行速度而言,无明显区别。建议在开发环境下用Debug编译,发布环境下用Release,为了使用Assert断言。
JIT是以assembly为单位发生还是以方法为单位发生?这对于工作区有何影响?
方法,因对于一次运行,很可能只用到一个程序集中极少数类型和对象,而大部分可能并不会被使用。
抽象基类(abstract base class)和接口(interface)对比
接口(Interface)是用来定义行为规范的,不会有具体实现,而抽象类除定义行为规范外,可以有部分实现,但一个类能实现多个接口,但只能继承一个基类。接口是是一种契约,定义了继承它的类必须声明接口中的方法。
接口只有方法、属性、事件和索引符;类除了这四种成员之外还可以别的成员(如字段)。接口没有构造函数,类有构造函数。
接口不能进行运算符的重载,类可以进行运算符重载。
接口的成员没有任何修饰符,其成员总是公共的,而类的成员则可以有修饰符。派生于接口的类必须实现接口中所有成员的执行方式,而从类派生的则不然。
a.Equals(b) 与 a == b 的区别?
equals:比较两个变量的内容是否相等
==:操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
在对象比较中,对象一致和对象相等分别是指什么?
对象一致指的是引用相同。对象相等指的是内容相等。
如何实现.NET中的深复制操作?
深复制将会在新对象中创建引用类型字段引用的所有对象,改变新对象中引用的任何对象,不会影响到原来的对象中对应字段的内容。
对IClonable接口的理解应为?
ICloneable 接口可以提供创建现有对象中复制的自定义实现。
什么是拆箱和装箱操作?
拆箱就是引用类型转换为值类型,通常伴随着从堆中复制对象实例的操作
装箱就是值类型数据转换为Object类型的引用对象
string 是值类型还是引用类型?
XmlSerializer所使用的&PropertySpecified&模式的意义是什么?它试图要解决什么问题?
把不参与序列化的对象标注出来,只序列化有用的数据,而不是序列化整个对象。去除没必要的数据冗余,和提升序列化时的性能。
为什么说out参数是.NET的败笔?它究竟怎么样?
之所以说out参数不好,是因为通过out参数传值,间接了破坏了封装性和函数的可读性。但笔者认为有的时候还是很实用很方便的。
可以把特性(attributes)放在方法的具体参数中吗?这有什么用?
可以。至少比较省事。
/// &summary&The EnableWindow Function.&/summary&
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool EnableWindow(System.IntPtr hWnd, [MarshalAs(UnmanagedType.Bool)]bool enable);
C# 控件开发者
Override关键词new的含义? 有何副作用?
override new在基类没有virtual关键字的情况下必须使用。副作用是破坏了继承关系。
解释virtual, sealed, override, 和 abstract关键字
virtual:virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。例如,此方法可被任何继承它的类重写。
sealed:当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承。
override:要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 override 修饰符。
abstract:abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。
解释一下这个字符串中的各个部分:Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=d274679d
Foo.Bar: 程序集名称
Version=2.0.205.0: 程序集版本
Culture=neutral: 区域
PublicKeyToken: 程序集public密钥
public, protected, private 和 internal 之间的区别?
public:& 对任何类和成员都公开, 无限制访问;
protected: 仅仅对该类以及该类的派生类公开;
private: 仅仅对该类公开;
internal: 只能值包含该类的程序集中访问该类(只是单独的项目,而不是整个解决方案)
使用Primary Interop Assembly (PIA)有什么好处?
主互操作程序集(PIA)指的是官方发布的互操作程序集,如果电脑中安装了PIA,当你添加对类库的引用时,那么Visual Studio会自动加载PIA,微软为Office应用程序提供了PIA,如EXcel PIA就是Microsof.Office.Interop.Excel.dll,其他应用程序也类似。详见:
NUnit采用何种机制进行单元测试?
.NET 反射,为测试方法加了Attribute
catch(Exception e){} 和catch(Exception e){}的区别?
&& //CLR认为这里是异常的起始点
& //CLR不会重新设置异常的起始点
typeof(foo) 和 myFoo.GetType()之间的区别?
Typeof()是运算符而GetType是方法
GetType()是基类System.Object的方法,因此只有建立一个实例之后才能够被调用(初始化以后)
Typeof()的参数只能是int,string,String,自定义类型,且不能是实例
解释一下第一个构造函数的调用顺序:
public class c{ public c(string a) : this() {;}; public c() {;} } 这个构造函数有用吗?
先调用了this(),即无参构造函数,再调用了自身的有参的构造函数。
因为未对a参数进行处理,故无用。
This是什么?可以在静态方法中调用 this 吗?
This 用于调用当前实例,无法在 static 方法中调用 this。
ASP.NET (UI) 开发者(参考答案)
描述一下如何使用基于Form表单Post提交模拟Button1_OnClick操作。
&form method=&post& action=&test.aspx&&
&input name=&Button1& type=&submit& /&
protected void Page_Load(object sender, EventArgs e)
if (Request["Button1"] != null)
//Button1_OnClick Function Code
什么是PostBack?
页面数据从客户端通过Form的Post方法传输到服务器端的过程叫做PostBack。
& 什么叫作ViewState?是什么编码?加密了吗?到底是谁在使用ViewState?
保存服务器控件在PostBack时状态不变的技术叫做ViewState。这些状态信息被保存在前台的hidden元素中。默认为Base64编码,默认不会ViewState被加密。在页面中所有开启了ViewState的服务器控件会使用到它。
&machinekey&元素是做什么的?它在 ASP.NET下是做什么用的?
Machinekey是添加在web.config中&system&&/system&之间的一个标签。它保证cookies、viewstate加密解密时的数据不会被篡改。
说出ASP.NET中三种Session State提供程序及优缺点。
Process:优点:进程内。速度比较快,但比较难适应大型应用。
ASP.NET State Service: ASP.NET状态服务。速度,容量上折中。如果使用专用的状态服务器则可以扩展。
SQL Server Session State Management: 速度较慢。但可靠性是最强的。而且也有很高的扩展性,适合大型应用。
ASP.NET会重用多个请求之间的线程吗?是否每个HttpRequest都有自己的线程?你是否应该用ASP.NET的Thread Local存储?
当使用线程池中的线程进行异步请求操作时,多个请求间的线程是能够重用的。每个HttpRequest都有自己的线程。当线程重用时,应该使用Thread Local存储。
能否举例说明如何利用HttpHandler检查客户端上传图片格式。
检查ContentType即可。更安全的做法是解析HttpHandler。
HttpModule订阅的是什么类型的事件? 这对于实现有何影响?如果不打算重新编译ASP.NET应用程序,应该怎么做?
简述从任意客户端请求路由到ASP.NET的过程。
用户输入URL,路由将该次请求转到DNS服务器,DNS服务器将请求转向URL所指向的服务器IP,如果IIS中某个站点包含所请求主机头信息,则请求成功。
简述cookies是如何工作的,给出一个cookies滥用的例子。
服务器在告诉客户端,需要将需要一些服务器必要信息存成cookies保存在客户端中,而每次客户端访问服务器时会将cookies中的信息通过请求发送给服务器。滥用的例子比如:Cookies中保存敏感信息,用户密码。
解释HttpRequest.ValidateInput()的重要意义?
验证用户输入的所有内容,保证服务器的安全性和健壮性。
那些数据是通过Http Header传递的?
Header共包括通用头、请求消息、响应消息及消息实体等数据。
说出Head 中的GET和POST的区别。
Get方法为URL传值,POST为Form表单传值。
说出至少6个状态码的名称及其含义
200 访问成功、301 永久重定向、302暂时重定向、304服务器已缓存、404访问资源不存在、500服务器出错、504 网关超时。
If-not-modified-since是如何工作的,如何实现?
if-not-modified-since及 last-modified是保存在Request http header中的两个信息,客户端在访问资源时,对比两个信息,就能确定需要读取缓存文件还是更新本地缓存文件。Response.Content.Headers Explain &@OutputCache%& and the usage of VaryByParam, VaryByHeader.
VaryByCustom是如何工作的?
VaryByCustom,我们可以自定义输出缓存要求的任意文本。除了在OutputCache指令里面申明该属性之外,我们还得在应用程序的 global.asax 文件的代码声明块中,重写GetVaryByCustomString 方法来为自定义字符串指定输出缓存的行为。
&%@ OutputCache VaryByParam="none" VaryByCustom="CategoryPageKey" Location="server" Duration="43200" %&
这里的VaryByCustom定义的为CategoryPageKey,那么在global.asax里面我们必须定义CategoryPageKey这个字符创输出缓存的行为,见下面代码。
public override string GetVaryByCustomString(HttpContext context, String arg)
使用XML的开发者(参考答案)
XML Namespaces的作用是什么?
提供避免元素命名冲突的方法
DOM适合的使用场景是什么?是否有尺寸限制?
DOM是一种与浏览器,平台,语言无关的接口,使你可以访问页面其他的标准组件。 DOM解决了Netscape的Javascript和Microsoft的Jscript之间的冲突,给予web设计师和开发者一个标准方法,让他们来访问他们站点中的数据、脚本和表现层对像。
DOM尺寸不受限制。
什么是WS-I基本配置,以及为什么它很重要?
它由一组非专有的 Web 服务规范以及对这些旨在促进互操作性的规范的说明和修正组成
为相关Web服务更好的一起互操作的使用提供了实现的指导方针
写一个使用默认命名空间和限定(前缀)命名空间一个小的XML文档。包括从两个命名空间的元素。
&?xml version="1.0" encoding="UTF-8"?&
&to&a&/to&
&from&b&/from&
什么是元素和属性之间的根本区别?
数据本身应当存储在元素中,而有关数据的信息(元数据)应当存储在属性
属性不能很好地保持原文的结构
元素允许包括元元数据(有关信息的更深层次的信息)。
每个人对元数据和非元数据的理解是不一样的。
面对以后的变化,元素更具扩展性。
对于非常简单并且不随文档改变其形式的信息,使用属性较好。特别是样式信息和链接信息,作为属性执行起来很顺利
格式完好的XML和有效的XML之间的区别是什么?
格式完好的XML不是有效的xml
不仅要格式完好而且还要遵循一定的顺序规则
格式完好的(well-formed)XML文档包括:起始标签和结束标签应当匹配,结束标签是必不可少的;大小写应一致:XML对字母的大小写是敏感的,和是完全不同的两个标签,所以结束标签在匹配时一定要注意大小写一致;元素应当正确嵌套:子元素应当完全包括在父辈元素中。
有效的(valid)XML文档是指一个遵守XML语法规则,并遵守相应DTD文件规范的XML文档。
使用.NET你会如何验证XML?
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventCallBack);
settings.ValidationType = ValidationType.S
settings.Schemas serch= schemaS
为什么这句代码通常是不好的?什么时候好?myXmlDocument.SelectNodes("//mynode");
这个会递归搜索全部的Document节点,通常消耗会比较大。除非真的需要检索所有叫mynode的节点,那就比较好。
描述一下pull-style parsers (XmlReader) 和 eventing-readers (Sax) 这两者间的异同。
XmlReader 是一个只进、只读的游标。 它提供了对输入的快速和非缓存的流式访问。 它可以读取流或文档。 它使用户可以提取数据,并跳过对应用程序没有意义的记录。 较大的差异在于 SAX 模型是一个&推送&模型,其中分析器将事件推到应用程序,在每次读取新节点时通知应用程序,而使用 XmlReader 的应用程序可以随意从读取器提取节点。
XPathDocument中和的XmlDocument之间有什么区别?详细说明,其中一个应该被使用在其他情形。
XPathDocument 类读取 XML 文档-在内存中的快速只读表示形式
可编辑的 XmlDocument 类读取 XML 文档
&XML片断&与&XML文档&有什么区别
XML片段通常不是一个完全符合标准的XML文档,可能没有根节点,比如:&&foo&&/foo&&bar&&/bar&&。XML文档通常有一个根节点和一些由标记组成的内容。比如:&&root&&foo&&/foo&&bar&&/bar&&/root&&
规范化形式的XML ,这是什么意思?
规范化形式的XML是XML规范的一个子集。任何XML文档都可以转换为规范化形式的XML,因此将特定类型的微小差异去除却仍是该XML文档。
XML InfoSet规范与XML DOM有什么不同? InfoSet是要解决什么问题?
XML InfoSet是W3C规范,用于描述一组数据集的抽象数据模型。XML DOM是InfoSet的一个实例。
比较DTD和XSD,它们的相似点与区别分别是什么?哪个更好些?为什么?
DTD通过合法元素和属性列表定义XML文档的文档结构。XSD描述XML文档的文档结构。
System.Xml 支持DTDs吗? 怎么支持?
支持。设置XmlReaderSettings.DtdProcessing属性为DtdProcessing.Parse。设置XmlReaderSettings.ValidationType属性为ValidationType.DTD。
XML Schema能够表示为对象图?对象图能够表示为XML Schema?
阅读(...) 评论()

我要回帖

更多关于 段博文 的文章

 

随机推荐