导航:首页 > 程序命令 > 微软程序员面试题

微软程序员面试题

发布时间:2022-05-11 00:02:58

⑴ 本科毕业的程序员java)要怎么做才能进入微软

微软的官方网站上写着"我们期待具有独创性、开拓性的智者加入队伍,我们的面试程序也是为网罗这样的人才专门设计。"

听似简单。但无数被微软拒之门外的哈佛博士、麻省理工精英会告诉你,微软的面试题有多"BT"。这些被称为"恶魔试题"的考题千奇百怪,无所不有。

究竟应试者需要多高的IQ、多么完备的逻辑思维,才能打动比尔·盖茨,加入他的豪华办公楼?

最近,美国作家威廉·庞德斯撰写新书《如何搬动富士山———微软的面试难题》,揭开"微软问题"的真面孔。

光聪明没用

微软公司的招聘信箱,每个月会收到1.2万份简历。如果用A4纸打印出来,能堆得比姚明还高。

不过,微软HR们并不担心加班工作,他们有比人工筛选更高效的"秘密武器"———计算机核对搜索。每封按规格投递给微软的电子简历,会经由特定程序搜索关键词,然后录入数据库。计算机"认为"有前景的简历,HR才给应聘者一个电话应答的机会。

两轮筛选出的"胜利者"能收到一张来往华盛顿州雷蒙德的微软总部的机票。打包好头脑,准备接受"眼高于顶"的面试官们一整天超高难度的"马拉松"面试吧!

"为什么啤酒罐的两端要做成凹形设计?"

"你要怎么制造M&Ms巧克力?"

"芝加哥全体大学生的体重总和是多少?"

听到这些问题少皱眉头,它们都是微软面试最典型也最小儿科的"一星级题库"。通不过这类测试,别说微软,硅谷中的其他计算机企业都不会"接收"你。

其实,早在20年前,微软还未曾开创、硅谷还是群雄争霸时,就开始流行用这些"扯淡"考题招聘。因为计算机产业的快速变动和创新,许多企业发现,光测试应聘者的IQ远远不够,高分IQ员工往往光有一副聪明脑袋,爱说不能做。

于是,老板们开始寻求可以考查"全方位解决能力"的招聘题目,"读取"应聘者逻辑思维能力、想象力和解决问题的能力"指数"。这就是"怪考题"的老祖宗们。

为比尔设计浴室

如今,在"巨无霸"微软的推动下,这类考题愈出愈冷僻。

来看看最近比尔·盖茨最中意的考题———为他设计一个浴室。

很异想天开?可以随便回答?这么想的话你铁定无法通过微软面试!用心分析题目,应试者可以得出2个答题关键———一是要考虑符合比尔·盖茨身份、职业、性格的浴室设计方案;二是至少要提出一些让比尔·盖茨欣赏但他自己却从未想到过的设计理念。否则,比尔·盖茨干吗雇你为他设计浴室?

被微软接受的合理设计理念于是诞生了。

能够自动上锁的智能医药箱:用来存放家用药品,以便无大人陪伴的孩子进入浴室、偶遇意外时能够得到及时救治。

自动记事本:在浴室里产生奇思妙想,却又因为手湿,无法使用PDA。那么,或许比尔·盖茨需要一个声音识别设备,当他说出诸如"比尔的备忘录"等代码后,设备可以录下信息,并自动将信息发送到电子邮箱,以备随时取用。

一面物像非对称的镜子:镜子背后安装了视频屏幕,屏幕连接着四周围隐蔽的摄像机。这样,站在镜子面前,你能轻易看到你的背面图像和侧面图像,穿衣服、剪头发或者挤掉背后的暗疮就方便多了。

"面临不确定时的行动力"而非"想象力",才是微软设计这道考题的真正目的。

答对了未必得分

更令人抓狂的是:有时,应试者即使给出了题目的正确答案,却依旧无法得分。

比如"地球上有多少这样的点:你先朝南走一公里,再向东一公里,再向北1公里,这时你回到了你的起点上。"

首先你想,这不是四方形少了一个边吗?回到起点简直不可能!

然后,很快想到"极点"这个特殊地点———从北极点出发,任何方向都是南。于是从北极点出发,向三个方向分别走一公里,回到极点。于是你庆幸自己找到了答案,而且是惟一的答案。因为这样的事情在南极点上不能发生,南极点已经不能再向南了。

考官面无表情,在你的答卷上批下"汤团"一个,你和回答"没有这个点"的朋友们站在同一个叫做"淘汰"的阵营。

答案的关键正是在南极点上。

假定你站在离开南极点一公里多一些的地方走向南极。走完向南的一公里后,你还未曾达到南极点,但已经非常接近。于是你继续向东,因为实在离南极点太近,你发现不断向东走的路线形成了一个以南极为圆心,与赤道平行的圆,它的周长刚好一公里。这样一来,你回到了圆形的出发点。往北一公里后,你回到原点。这样一来,答题的点增加到了无数。

完了吗?并没有,你还可以增加一些点,比如,那个圆形的周长恰好是1/2公里、1/4公里、1/8公里......

只有回答出后面两类答案的人,才有资格被微软留下来

⑵ asp.net程序员面试

一般的流程就是一面(技术面试),技术负责人跟你聊聊你做过的一些项目以及经验,或者给你做份题等等;然后人事会简单跟你聊聊,主要看看你的性格,以及给人的感觉等(有的公司在技术面试都要经过2-3轮,我05年在微软,技术有两轮面试);然后情况好的可能会有二面,二面一般就是谈薪水待遇等,谈妥了就可以了。
机试很少的,一般都是笔试,小公司的话都没有笔试,就跟技术负责人聊聊一些技术细节他就心里有数了。笔试肯定就是一些技术方面的基础题,比如问你一个asp.net页面的生命周期、冒泡算法、数据库设计以及一些sql语句等等,有时候还会有一些智商或者性格特点方面的题目。
关于待遇,你就说一个你期望的数就行了,行不行人事部门会根据岗位情况以及你的能力来评判的,一般来说他们都会根据岗位待遇跟你的要求来“杀杀价”,你觉得你值得那个价值就坚持。

⑶ 求asp.net程序员的面试题(asp.net、javascript、mssql、xml)

1. 简述 private、 protected、 public、 internal 修饰符的访问权限。
答 . private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。

2 .列举ASP.NET 页面之间传递值的几种方式。
答. 1.使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session变量
3.使用Server.Transfer

3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
答:public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if(i > 0 && i <= 2)
return 1;
else return Foo(i -1) + Foo(i - 2);
}
}

4.C#中的委托是什么?事件是不是一种委托?
答 :
委托可以把一个方法作为参数代入另一个方法。
委托可以理解为指向一个函数的引用。
是,是一种特殊的委托

5.override与重载的区别
答 :
override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要
Override 是进行基类中函数的重写。为了适应需要。

6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
答 :
this.Server.Transfer

7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
答:
foreach (System.Windows.Forms.Control control in this.Controls)
{
if (control is System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;
tb.Text = String.Empty ;
}
}

8.请编程实现一个冒泡排序算法?
答:
int [] array = new int
;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++)
{
for (int j = i + 1 ; j < array.Length ; j++)
{
if (array[j] < array[i])
{
temp = array[i] ;
array[i] = array[j] ;
array[j] = temp ;
}
}
}

9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:不是。可以用任意类型。

10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
答:
int Num = this.TextBox1.Text.ToString() ;
int Sum = 0 ;
for (int i = 0 ; i < Num + 1 ; i++)
{
if((i%2) == 1)
{
Sum += i ;
}
else
{
Sum = Sum - I ;
}
}
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine() ;

11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
答:一般为3层
数据访问层,业务层,表示层。
数据访问层对数据库进行增删查改。
业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。
表示层为了与用户交互例如用户添加表单。
优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点: 增加成本。

12.在下面的例子里
using System;
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B()
{
y=-1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}",x,y);
}
}
当使用new B()创建B的实例时,产生什么输出?
答:X=1,Y=0

13.什么叫应用程序域?
答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。

14.CTS、CLS、CLR分别作何解释?
答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

15.什么是装箱和拆箱?
答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。

16.什么是受管制的代码?
答:unsafe:非托管代码。不经过CLR运行。

17.什么是强类型系统?
答:RTTI:类型识别系统。

18.net中读写数据库需要用到那些类?他们的作用?
答:DataSet:数据存储器。
DataCommand:执行语句命令
DataAdapter:数据的集合,用语填充。

19.ASP.net的身份验证方式有哪些?分别是什么原理?
答:10。Windwos(默认)用IIS...From(窗体)用帐户....Passport(密钥)

20.什么是Code-Behind技术?
答:代码后植。

21.在.net中,配件的意思是?
答:程序集。(中间语言,源数据,资源,装配清单)

22.常用的调用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜单选项

23..net Remoting 的工作原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。
答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。

25.请详述在dotnet中类(class)与结构(struct)的异同?
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.

26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。
}
}
}
答:if( OnNew != null )
OnNew( this, e );

27.分析以下代码,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代码执行完后,i= j=
答:i=13,j=10

28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

29.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路
答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。

32.给定以下XML文件,完成算法流程图。
<FileSystem>
< DriverC >
<Dir DirName=”MSDOS622”>
<File FileName =” Command.com” ></File>
</Dir>
<File FileName =”MSDOS.SYS” ></File>
<File FileName =” IO.SYS” ></File>
</DriverC>
</FileSystem>
请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。
答:
void FindFile( Directory d )
{
FileOrFolders = d.GetFileOrFolders();
foreach( FileOrFolder fof in FileOrFolders )
{
if( fof is File )
You Found a file;
else if ( fof is Directory )
FindFile( fof );
}
}

33.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答:解1: select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

34.面向对象的语言具有________性、_________性、________性
答:封装、继承、多态。

35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。
答:IEnumerable 、 GetEnumerator。

36.GC是什么? 为什么要有GC?
答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()

37.String s = new String("xyz");创建了几个String Object?
答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

38.abstract class和interface有什么区别?
答:
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

39.启动一个线程是用run()还是start()?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

40.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

41.构造器Constructor是否可被override?
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

42.是否可以继承String类?
答:String类是final类故不可以继承。

43.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在return前执行。

44.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,有相同的hash code。

45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。

48.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
答:都不能。

49.List, Set, Map是否继承自Collection接口?
答:List,Set是Map不是

50.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

51.数组有没有length()这个方法? String有没有length()这个方法?
答:数组没有length()这个方法,有length的属性。String有有length()这个方法。

52.sleep() 和 wait() 有什么区别?
答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级
(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

53.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

54.谈谈final, finally, finalize的区别。
答:
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此 一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中 不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为 final的方法也同样只能使用,不能重载
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会 执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理 工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

55.如何处理几十万条并发数据?
答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.

56.Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。

57.进程和线程的区别?
答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。

58.堆和栈的区别?
答:
栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。
堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。

59.成员变量和成员函数前加static的作用?
答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。

60.ASP。NET与ASP相比,主要有哪些进步?
答:asp解释形,aspx编译型,性能提高,有利于保护源码

61.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];

⑷ 程序员面试的时候考官一般问什么问题(比较流行的)

给你提供点参考信息,希望能帮助到你:

1、使用相同的工具和时间限制模拟面试训练

Google和微软都会让应聘者在白板上手工解答编程问题,但通常大部分的应聘者都是习惯于在电脑上利用编程工具系统编写程序。因此面试的时候,某些应聘者离开了熟悉的电脑光标,站在白板前感觉手足无措不知该如何起行。又或者他们不习惯在编程之时旁边有人观看,这会让他们感到紧张而无法正常思考。

在现实生活中,如果你想要横渡英吉利海峡,自然不能总是在室内游泳池练习。你必须投身于大海在波涛之中训练,在准备面试的时候也是如此。

在面试开始之前你最好向招聘单位询问面试形式和面试问题。如果招聘单位让你在某个房间考试且仅提供没有汇编程序的编辑器,那么就应该在家中按照这种情景进行练习。如果招聘公司单位让你在白板上回答问题并会安排考官在旁监督,那么你就要找一位软件工程师来扮演考官配合你练习。即使找来的考官经验不如你也没有关系,他们依然能帮助你消除在他人面前出错所带来的紧张感,这样可以让你适应有人在旁边盯着看的面试氛围。

如果你恰巧认识我并希望由我来帮你联系,那我的条件就是必须请我吃饭:如果你已经工作了就吃日本寿司大餐;如果你还是学生,那么吃比萨饼也可以。

2、在面试过程中不要对细小错误耿耿于怀

我曾不止一次的在面试过程中碰到这种情况:当应聘者知道编程问题后,他马上就想到了最佳的方案、确定了边界条件,然后开始编写程序。但在编写过程中,应聘者犯了诸如首先检查是不是操作顺序错误或忘记设定某变量等无关大局的小错误,当我指出其错误之后,应聘者立刻变得十分紧张,这种焦虑情绪影响了他在后面环节的正常发挥。

其实这种恐惧心理完全不必要。一名优秀的程序员在编程过程中出现错误也是很正常的,就像是小提琴手在演奏高难度的巴赫交响乐时也会偶尔失误。音乐会的听众可能会觉察到这些错误,但是听众绝对不会因为这种细小失误就把出色的小提琴手看作是门外汉。

即便应聘者彻底搞砸了某个编程问题,面试考官也可能会提出不同的问题并会容忍应聘者在某个问题上的失误。再退一步说,就算某次面试彻底失败,你也有机会在其它面试上补救。

我的一位同事(一个项目的技术负责人)最近面试了一个人,在开始面试时他觉得面试者的交流方式存在问题,因此开始表现的相当不友好。但经过了整个面试过程后,面试者证明了自身的能力,而我的那位同事也成了那位面试者最坚定的支持者。在过去的一年中,我从未见过这位同事如此强烈的支持哪位面试者。

所以,因此就算面试进展不顺,也务必坚持到底不要放弃。

⑸ 程序员 面试 如何回答

做一份工作,实际就是追寻梦想的过程,而为了完成梦想,必须有一个长期规划,从而指导我们选择工作。它是择业过程中最本质和最原始的参考借鉴。下载链接

为此,小云为你精选一份程序员面试书单,分为职业规划、编程技能两部分,适合刚毕业的大学生、正准备换工作的程序员们,涵盖算法工程师、Java工程师、测试等多个领域。

软技能 代码之外的生存指南约翰 Z.森梅兹 着

这是一本真正从“人”(而非技术也非管理)的角度关注软件开发人员自身发展的书。书中论述的内容既涉及生活习惯,又包括思维方式,凸显技术中“人”的因素,全面讲解软件行业从业人员所需知道的所有“软技能”。

本书聚焦于软件开发人员生活的方方面面,从揭秘面试的流程到精耕细作出一份杀手级简历,从创建大受欢迎的博客到打造你,从提高自己工作效率到与如何与“拖延症”做斗争,甚至包括如何投资不动产,如何关注自己的健康。

编程珠玑(第2版)乔恩·本特利(Jon Bentley) 着

作者虽然没有给出解决这些问题的具体代码,但始终非常富有洞察力和创造力地围绕着这些折磨程序员的实际问题展开讨论,从而引导读者理解问题并学会解决问题的技能,这些都是程序员实际编程生涯中的基本技能。

为此,本书给出了一些精心设计的有趣而且颇具指导意义的程序,这些程序能够为那些复杂的编程问题提供清晰而且完备的解决思路,书中还充满了对实用程序设计技巧及基本设计原则的清晰而睿智的描述。

PS:本书在第一版的基础上增加了3个方面的新内容:测试、调试和计量,集合表示,字符串问题,并对第一版的所有程序都进行了改写,生成了等量的新代码。

重构 改善既有代码的设计马丁·福勒(Martin Fowler) 着

软件开发的不朽经典,生动阐述重构原理和具体做法,普通程序员进阶到编程高手必须修炼的秘笈。

重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码。多年前,正是《重构:改善既有代码的设计》原版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分。《重构:改善既有代码的设计》也因此成为与《设计模式》齐名的经典着作,被译为中、德、俄、日等众多语言,在世界范围内畅销不衰。

《重构:改善既有代码的设计》凝聚了软件开发社区专家多年摸索而获得的宝贵经验,拥有不因时光流逝而磨灭的价值。今天,无论是重构本身,业界对重构的理解,还是开发工具对重构的支持力度,都与《重构:改善既有代码的设计》最初出版时不可同日而语,但书中所蕴涵的意味和精华,依然值得反复咀嚼,而且往往能够常读常新。

C和C++程序员面试秘籍董山海 着

众多高级语言都从C/C++有所借鉴,所以说C/C++的语言基础对从事软件开发的人员来说非常重要。

本书是一本解析C/C++面试题的书,可以帮助求职者更好地准备面试。《C和C++程序员面试秘笈》共包含12章,囊括了目前企业中常见的面试题类型和考点,包括C/C++程序基础,预处理、const、static与sizeof,引用和指针,字符串,位运算与嵌入式编程,C++面向对象,C++继承和多态,数据结构,排序,泛型编程,STL,算法和逻辑思维等最常见的面试题。《C和C++程序员面试秘笈》通过技术点解析、代码辅佐的方式让读者能深刻领会每个考点背后的技术。

本书紧扣面试精髓,对各种技术的剖析一针见血,是目前想找工作的C/C++程序员和刚毕业的大学生的面试宝典。

Java程序员面试宝典杨磊 着

本书对程序设计面试中Java常见的题型和常用解答技巧进行了介绍,对现代职业人如何有效求职、面试考官如何关注求职者动态等做了详细解说。本书将为您揭开知名IT企业面试、笔试的核心机密;传授程序员岗位求职的关键技巧。

编程之法:面试和算法心得July 着

本书涉及面试、算法、机器学习三个主题。书中的每道编程题目都给出了多种思路、多种解法,不断优化、逐层递进。本书第1章至第6章分别阐述字符串、数组、树、查找、动态规划、海量数据处理等相关的编程面试题和算法,第7章介绍机器学习的两个算法—K近邻和SVM。此外,每一章都有“举一反三”和“习题”,以便读者及时运用所学的方法解决相似的问题,且在附录中收录了语言、链表、概率等其他题型。

书中的每一道题都是面试的高频题目,反复出现在最近5年各大公司的笔试和面试中,对面试备考有着极强的参考价值。全书逻辑清晰、通俗易懂,适合热爱编程、算法、机器学习,以及准备IT笔试和面试,即将求职、找工作的读者阅读。

C#与.NET程序员面试秘笈靳华 着

《C#与.NET程序员面试宝典》取材于各大IT公司的历年面试题252个(包括研发类笔试及口试题目、情商及智商类题目),详细分析了应聘C#与.NET程序员职位的常见考点。《C#与.NET程序员面试宝典》主要内容包括:面试流程、基础语法和技术框架、数据访问及XML应用、高级特性及应用进阶、测试及质量保证、跨国公司经典面试题等。

软件测试工程师面试指导蔡为东 着

对于想要得到一份软件测试工程师职位的朋友来说,可能会有一些疑问,如软件测试这个行业究竟怎么样?什么样的人适合做软件测试?面试当中要注意什么?软件测试的基本知识点都有哪些?笔试都会涉及哪些内容?等等。本书将解答以上所有的疑问。

本书共6章内容,主要包括软件测试行业概貌、软件测试从业人员的基本要求、如何找工作、软件测试技术基础、典型的测试工程师笔试题等。本书内容丰富,讲解深入浅出,能让读者朋友在短时间内掌握基本的测试技术,了解求职过程的各个环节,熟悉各种类型的笔试题,领会面试技巧。本书后附有一些实用的附录,例如简历模板、新人工作指南等,尤其是“我在微软做软件测试外包”这一部分内容,寓故事性和知识性于一体,讲述了作者在国际软件巨头——微软公司做软件测试外包的亲身经历,相信对于广大的读者朋友有阅读和参考的价值。

本书适合想要从事软件测试工作的朋友,也可供初级软件测试工程师学习之用,另外也可作为大专院校软件测试培训的教材之一。

Android高薪之路李宁 着

《Android高薪之路:Android程序员面试宝典》取材于各大IT公司面试真题,所给出的试题尽可能地覆盖了Android应用开发的各个方面,而且大多数试题都有解析部分,读者可以通过这部分更深入地理解试题中所包含的技术内容,希望真正做到由点成线,举一反三。

《Android高薪之路:Android程序员面试宝典》中还将Android中涉及的各个常用技术问题进行筛选、分类。这样读者可以有的放矢,对自己还没有掌握的Android技术进行重点攻破,从而起到事半功倍的效果。除了对每道题目都有详细的解析和回答外,对相关知识点还有扩展说明。

《Android高薪之路:Android程序员面试宝典》对面试中Android常见的题型和常用解答技巧进行了介绍,它不仅能帮助求职者快速复习相关知识点,也对现代职业人如何有效求职做了详细解说。《Android高薪之路:Android程序员面试宝典》对于读者从求职就业到提升计算机专业知识都有显着的帮助。

编程之美《编程之美小组》

《编程之美—— 微软 技术面试心得》收集了约60道算法和 程序设计题目,这些题目大部分在近年的笔试,面试中出现过,或者是被微软员工热烈讨论过。作者试图从书中各种有趣的问题出发,引导读者发现问题,分析问题,解决问题,寻找更优的解法。

书中绝大部分题目都提供了详细的解说。 每道题目后面还有一至两道扩展问题,供读者进一步钻研。

书中还讲述了面试的各种小故事,告诉读者微软需要什么样的技术人才,重视什么样的能力,如何甄别人才。回答读者关于IT业面试,招聘, 职业发展的疑问。 这本书的很多题目会出现在IT 行业的各种笔试,面试中。但本书更深层的意义在于引导读者思考,和读者共享思考之乐,编程之美。

⑹ 微软程序员面试时间

很快,大概1-2天就能收到第一轮面试的安排。
微软的社会招聘面试总共是1轮电话面试+5轮线上面试(疫情原因)。候选人以内推为主,微软暂时未与猎头公司合作。简历筛选通过后,先约电话面试时间,电话面试和每轮线上面试时间都在1小时左右。电话面试通过后,大约一周以后会约线上面试时间,线上面试用的是MicrosoftTeams,5轮线上面试一天完成,效率杠杠滴~。线上面试大约一周后会告知结果,通过之后就是offer、背调等流程。
不同部门和不同面试官的面试风格、侧重点可能差别很大,但主要考察点应该没有太大出入。网上也有很多人写微软的面经,也可以多搜一些作为参考,但是他们列出的面试题在你面试的时候可能一个也不会遇到。

⑺ 跪求flex程序员面试题...急急急

1.使用Flex Bulider3建立一下新的.mxml的页面时默认的背景是蓝色的,请问用什么办法能修改掉此背景颜色,以至于下次创建时背景不是为默认的蓝色的呢?请写出你认为正确的方法.
2.使用Flex Bulider3如何跟踪程序?
3.请问enterFrame和timerEvent这2个事件有什么区别?请说下具体的使用方法和相关的使用场合?
4.请说下你理解AS3的事件机制是什么机制?你认为正确的就可以说出来.
5.请问addEventListener里面有几个参数,你能说出具体的使用方法嘛?
6.请问我想判断一个字体是否是数字,用什么办法去判断呢?
7.请问我想判断一个字符或者一个对象的类型怎么判断呢?
8.请问你了解 internal 控制符么?能说下具体使用方法和场合嘛?
9.我想在某一点不去执行任何内容,也就是说我想停止执行了,你知道要怎么做嘛?
10.请问 undefined 和 null 是否一样,如果不一样能否说出其中的区别呢?
11.创建常量知道怎么创建嘛?说下你是怎么创建的.
12.请问用什么方法自定义一个事件呢?说下具体的方式.
13.请问怎么样检测本机的内容呢,比如说,我想知道本机的操作系系,是否有视频等这些.
14.请问用什么办法解决安全域的问题?如果你不知道安全域的问题的话,可以在本机中绑定一下图片,然后再放到服务器上,就会出现此问题了.
15.有三种基本数字类型: number, int, 和uint 请问有什么区别.具体说一下.
16.parseInt此方法转化为int型的方法,请问你知道此方法的第二个参数是什么意思嘛?
17.Math.round( ), Math.floor( ) 和Math.ceil( ) 三个方法都是四舍五入,请问有什么区别?
18.请问一个数组里可以放不同的类型嘛?
19.var letters:Array = ["a", "b", "c"];我想在这个数组里搜索 ‘b’ 字符,请问怎么办?
20.怎么样转换数组为字符串,怎么样将字符串转化为数组?
21.我想创建的视图居中怎么办?
22.请问知道层级的概念嘛?如果知道请问怎么样交换2个组件的层级呢?
23.请问你知道loader,URLLoader,URLStream这个三种动态加载资源的具体使用场合,以及有什么区别嘛?
24.如何把MouseEvent 的localX 和localY 属性转化成全局坐标?
25.请问我现在有一个正方形的图片,我想把他做成圆形,有什么办法呢?前提是用flex或者as3
26.请问新创建的一个sprite能否被直接加到ui容器里?如果不能请说出用什么办法能加入.
27.我怎么设置把一个文本框,设置成一个密码框?
28.我想在文本框里只能输入abcd,有什么办法能做到呢?如果我想输入除abcd以外的其它都能输入又怎么做呢?
29.请问condenseWhite 这个属性在TextInput里是表示什么意思?
30.我现在刚创建的文件的text为 this is a text,我想设置光标在 is 上,请问怎么设置?
31.请问怎么样在文本框里添加超链接?
32.我想获取系统里的字体,请问怎么办?
33.substring( ),substr( ), slice(),请说下3种解析字符串的不同之处,以及适用场合?
34. var fruits:XML =
Apple

Orange

Pear

Watermelon

;
以下有一个字符串,我现在知道了color为orange,我想知道此color相对应的name节点的值,我应该怎么做?
35.请说下目前使用flex和后台交互的几种方法,以及适用场合.
36.我现在想在flex里调用JS方法,我要怎么办呢?
37.我想用JavaScript调用ActionScript函数,我要怎么办呢?
38.FileReference 请说下此对象的几个相关事件

组件
1.我不想在容器里显示滚动条怎么办?
2.请问Flex bulider3可以创建几种不同的项目?
3.你了解RSL嘛?请说明下RSL的使用方法,以及使用RSL为了解决什么问题?
4.请问SWC是做什么用的,怎么样自己制作一个SWC?
5.flex生成出来的文件都是很大,请问你用什么办法进行缩小呢?
6.请问 trace( NaN == NaN ) 结果为true 还是false,为什么?
7.warning: unable to bind to property ” on class ‘Object’ (class is not an IEventDispatcher) 在使用ItemRender时,经常会出现这种警告,请问想去除的话怎么办呢?
8.现在流行MVC,但是as代码有的时候还是大部分写在mxml里面,请问我想代码分离怎么办呢?
9.我想继续UIComponent重新写一个正方形的组件,我应该怎么做?请说重点部分即可.
10.常用的几个切换数据的组件比如: TabNavigator等都有属性 creationPolicy 你知道这种策略的使用方式是什么嘛?以及优,缺点呢?
11.我想在application里获取当前运行的URL,我要怎么获取.
12.请说下事件里的currentTarget 和 target的区别?
13.请列举下你常用的几种effects,并说明使用原因.
14.HBox,VBox和canvas有什么区别呢?试说出其中几点
15.请问我想在list里选中多行信息,我要怎么做呢?
16.Alert里面有几个属性,我想设置图片怎么办呢?
17.请问你是否设置过样式呢,我想动态设置样式怎么办呢?如果我想在as代码里设置样式我又要怎么办呢?
18.你能说一下UIComponent的生命周期嘛?以及相关的使用场合呢?
19.请问你是否发现过 flex3里的bug呢,请列举一些?
20.列举出flex里面的几个绑定数据对象的方式
21.请问我自己定义了一个组件,我想在组件里的属性里设置几个默认值,我要怎么设置呢?
22.callLater()方法怎么使用,为什么要使用这个方法呢?
23.请问你是否使用过mole这种方法去做项目呢?他的优,缺点是什么呢?使用组件的方式加载的话,他的优,缺点是什么呢?
24.目前网页里都有导航,请问在Flex要做导航要注意一些什么呢?以及怎么样做呢?
25.我想在一个错误的图片链接里,定义一下默认的图片怎么做呢?
26.请试写一个自定义的验证组件
27.请说明下tigger tiggerEvent 在验证组件里是什么意思,具体怎么使用呢?
28.ExternalInterface, LocalConnection 2者有什么区别?
29.你是否使用过flex的测试工具呢?请说明下具体是哪种,以及使用方式,你为什么使用这种工具?
30.我能把CSS编译成swf嘛?
31.请用as3列举下你用过的模式
32.Embed绑定图片有什么缺点?
33.TitleWindow的组件是可以拖动的,我不想让他拖动我要怎么办呢?
34.你是否使用过profile,你觉得这个工具怎么样,优,缺点是什么呢?
35.你是否做过flex 前端的性能优化,你觉得怎么做是比较完美的?
36.你是否了解E4X,请说明一下优,缺点?
37.请列举一下你知道的影响性能的几个因素?
38.请说明一下ShareObject的使用方法?以及优,缺点?
39.请列举一下,你认为不错的网站或者blog.
40.我现在给你100万做一个flex项目,你认为成功的要素在哪呢?

标签:FLEX, FLEX, 资源
flex实现微软面试题算法分析
[来源:dmh2002 | 作者:dmh2002 | 时间:2008-04-30 | 点击: 603 | 收藏本文 【大 中 小】]

题目是:统计从1至400亿之间的自然数中含有多少个1?比如1-11中,有1,10,11这三个自然数有4个1。
这是一道微软的面试题,我在网上看到的,但是没有答案,这是件很痛苦的事情,折磨人,所以我决心自己来搞定。

实际解题过程中,用递归的方法很容易,但是仅仅局限于400亿这样的数字,如果是1-1231111321这样的数字的话,就复杂多了,我在文档类里面有非常详尽的解题思路,用了3种解题的方法,因为排版麻烦,我就不重复贴在网页上了,要看的朋友下载看吧。

有可能算法不是最完美的,希望朋友们能多指教。

本来用的是flash写文档类,今天改了一下,用flex做了一个界面,方便大家计算使用。
此外这个计算器还有计算1到任意数字(如1230321)中有多少个1。
注:第一种算法有最大限制。

提供的下载为flex工程。

countNumberOneFlex.rar

腾讯的面试题

int a[]={10,20,30,40};
short *p,*q;
p=(short*)(a+1);
q=(short*)a;
a[p-q]=?

---------
假设a地址为X, a+1 = X+4, 赋值给p
q指向a的首地址X
p,q之间相差四个字节,即p-q为2个short长
所以a[p-q]-> a[2]
微软面试题---求子数组最大乘积问题
给定一个长度为N的整数数组,只允许用乘法,计算任意(N-1)个数的组合乘积中最大的一组,并
写出算法的时间复杂度。
最容易想到的就是通过一次遍历把所有(N-1)个数的组合找出来,分别计算他们的乘积,并比较
大小。由于总共有N个(N-1)个数的组合,总的时间复杂度为O(N的2次方),显然这不是最好的解决
办法。
且看下面的实现方法,当然也是比较简单的,毕竟没太多时间思考,他的时间复杂度只有O(N)。
当然肯定有其他的方式解决这个问题,blog友如果有好的方式可以贴出来分享。谢谢!

⑻ 去微软应聘需要什么条件

就一个条件:你必须是高手!

微软能够“生产”数以千计,并且忠心耿耿的百万富翁,关键原因就是微软建立了一套网罗和珍惜顶尖科技人才的机制以及“宁缺毋滥,人尽其才”的选用科技人才模式。

1、一般来说,招聘的常用捷径有:熟人推荐(企业员工和现有关系推荐)和毛遂自荐。这些方法的好处是成本低、速度快。熟人推荐还可以帮助企业找到那些在本单位表现优秀、因而并不出现在人才市场上的“潜在”人才。由于作为推荐人的企业员工通常认为自己在本企业的声誉与所荐人才的表现息息相关,因此一般不会推荐不可靠的人员。

根据微软统计,公司每年接到来自世界各地的求职申请达12万份左右。面对众多的求职者,盖茨并不满足,他认为许多优秀科技人才没有注意到微软。为了找到那些人,微软公司主要是依靠现有人才推荐。因此,在微软科技人才中有近40%是内部推荐。在国外的经营机构中,微软尽量雇用外国人,而不是采取外派人员的方式。

2、另外,微软公司可能是所有企业在招聘途径中最出其不意的——微软在自己的用户中检索人才。微软公司的网站上,每月都有12000多个用户登录,他们主要是检索资料。微软有编有一个专用程序,负责统计出用户所使用的关键词。从统计结果可分析出此人是否具有较高的计算机技能(比如是否会使用c语言),根据检索结果列出招聘对象。当然,还要打电话邀请他们前来面试。

要在激烈的市场竞争中站住脚,必须不断超越自己,超越竞争对手,微软的经验在于非常重视科技人才的心理素质。在微软,优秀科技人才的标准是不仅要有很高的专业技能,还要能承受巨大的工作压力,并勇于接受新知识,不断创新

⑼ hr面试程序员问什么问题,程序员在面试的时候的注意事项

01 和优秀开发者沟通
如果你本身没有编程背景,那就尽量找到一些优秀的开发人员给你指点迷津。
02 问专业的问题

1. 简要介绍一下你自己以及你最近在做的项目吗?
作用:这个问题可以让你更好地了解你的候选人,而谈论近期工作能了解他对工作的热情和奉献。

2. 其他时间有别的项目要做吗
作用:鉴于你的项目的时间长短和工作复杂程度,你可能只想找一个能完全投入到这个项目的人。但是很多程序员都会同时兼顾好几个项目,你要确保彼此双方的需求是什么。

3. 你是怎么看待自己的身份的?开发?产品经理?还是二者都是?
作用:理想的回答一般是‘二者都是’, 但是你要认真评估每个候选人可能给你团队带来的有利和不利影响。产品经理可以帮助设计新的功能和交互,但是你也需要足够的开发才能跟上方向从而建构你想要的内容。

4. 你会如何管理一个程序员团队?
作用:这个问题可以帮你了解候选人的领导能力和风格。

5. 告诉他们公司想要的人是怎样的。
作用:直截了当地告诉对方你的期望。像工作时间,项目长短,目标等等,这些都是对方很想知道的。就像你评价他是否适合公司一样,对方也会评价你的公司是否适合他。

03 去合适的地方招聘
你不能指望天上会掉下个好程序员给你,微软和谷歌的优秀程序员也不会自己蹦到你跟前。你的机会在于,很多这样的程序员都拥有或追求商业想法。
你可以多去一些网站、活动大赛等地方探索发掘,这比你在社交网站上找到他们的运气要大得多。

· 编程大赛
编程大赛就是程序员高手们云集在一起,合作共同完成一个软件的开发。
猿圈会定期举办此类招聘编程大赛,帮助企业挑选优质人才,提高企业品牌雇主形象。

· 开放性源代码贡献者
一些网站比如GitHub,提供在线代码存储库, 程序员可以自由对开源项目贡献自己的代码。
所以,在招聘之前,你可以先去这种网站上找一找有潜力的候选人。

· 大学
· 软件开发大会
尽可能多的去参加一些和你的产品相关的软件开发大会。

· 技术博客
你能根据他们的博客判断他们的技术技能、解决问题的能力以及写作和沟通能力。

04 没通过编程测试,坚决不录用

你只能记住一条原则,那必须是,没有让候选人参加编程测试之前,千万不能决定录用与否。

通常情况下,出于项目的紧迫,我们会倾向于选择看起来靠谱的第一个程序员,但是不拿到他的编程测试结果,不要冲动地下offer。

我也是个不懂代码的HR,但是我善于利用各种各样的工具,前段时间发现了一个猿圈测评的工具,我用它测试程序员候选人,通过测试结果判断是否值得邀约来面试,这个我觉得很赞,你可以试试看

⑽ 给来面试计算机的人,问及各问题,越多越好

一、ADO 与ADO.NET两种数据访问方式区别?

1. ADO与ADO.NET简介
ADO与ADO.NET既有相似也有区别,他们都能够编写对数据库服务器中的数据进行访问和操作的应用程序,并且易于使用、高速度、低内存支出和占用磁盘空间较少,支持用于建立基于客户端/服务器和 Web 的应用程序的主要功能。但是ADO使用OLE DB接口并基于微软的COM技术,而ADO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系架构。众所周知.NET体系不同于COM体系,ADO.NET接口也就完全不同于ADO和OLE DB接口,这也就是说 ADO.NET和ADO是两种数据访问方式。

2. 数据访问方式的历史
下面简单的回顾一下微软的数据访问方式所走过的几个阶段。

ODBC – (Open Database Connectivity)是第一个使用SQL访问不同关系数据库的数据访问技术。使用ODBC应用程序能够通过单一的命令操纵不同的数据库,而开发人员需要做的仅仅只是针对不同的应用加入相应的ODBC驱动。

DAO - (Data Access Objects)不像ODBC那样是面向C/C++程序员的,它是微软提供给Visual Basic开发人员的一种简单的数据访问方法,用于操纵Access数据库。

RDO – 在使用DAO访问不同的关系型数据库的时候,Jet引擎不得不在DAO和ODBC之间进行命令的转化,导致了性能的下降,而RDO(Remote Data Objects)的出现就顺理成章了。

OLE DB – 随着越来越多的数据以非关系型格式存储,需要一种新的架构来提供这种应用和数据源之间的无缝连接,基于COM(Component Object Model)的OLE DB应运而生了。

ADO – 基于OLE DB之上的ADO更简单、更高级、更适合Visual Basic程序员,同时消除了OLE DB的多种弊端,取而代之是微软技术发展的趋势。

ADO架构图表

3. ADO与ADO.NET对照
在开始设计.NET体系架构时,微软就决定重新设计数据访问模型,以便能够完全的基于XML和离线计算模型。两者的区别主要有:

ADO以Recordset存储,而ADO.NET则以DataSet表示。Recordset看起来更像单表,如果让Recordset以多表的方式表示就必须在SQL中进行多表连接。反之,DataSet可以是多个表的集合。ADO 的运作是一种在线方式,这意味着不论是浏览或更新数据都必须是实时的。ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用XML制作数据的一份幅本,ADO.NET的数据库连接也只有在这段时间需要在线。

由于ADO使用COM技术,这就要求所使用的数据类型必须符合COM规范,而ADO.NET基于XML格式,数据类型更为丰富并且不需要再做COM编排导致的数据类型转换,从而提高了整体性能。

4. 小结
ADO.NET为.NET构架提供了优化的数据访问模型,和基于COM的ADO是完全两样的数据访问方式。

二、DataSet与DataReader的区别

ADO.NET 提供以下两个对象,用于检索关系数据并将其存储在内存中:DataSet和DataReader。DataSet提供一个内存中数据的关系表示形式,一整套包括一些表在内的数据(这些表包含数据、对数据进行排序并约束数据),以及表之间的关系。DataReader提供一个来自数据库的快速、仅向前、只读数据流。
当使用DataSet时,经常会利用DataAdapter(也可能是CommandBuilder)与数据源进行交互。当使用 DataSet时,也可以利用DataView对DataSet中的数据应用排序和筛选。也可以从DataSet继承,创建强类型DataSet,用于将表、行和列作为强类型对象属性公开。
下列主题包括的信息涉及:使用DataSet或DataReader的最佳时机、如何优化访问它们所包含数据、以及如何优化使用DataAdapter(包括CommandBuilder)和DataView的技巧。

DataSet与DataReader
当设计应用程序时,要考虑应用程序所需功能的等级,以确定使用DataSet或者是DataReader。
要通过应用程序执行以下操作,就要使用DataSet:
r 在结果的多个离散表之间进行导航。
r 操作来自多个数据源(例如,来自多个数据库、一个XML文件和一个电子表格的混合数据)的数据。
r 在各层之间交换数据或使用XML Web服务。与DataReader不同的是,DataSet能传递给远程客户端。
r 重用同样的记录集合,以便通过缓存获得性能改善(例如排序、搜索或筛选数据)。
r 每条记录都需要执行大量处理。对使用DataReader返回的每一行进行扩展处理会延长服务于DataReader的连接的必要时间,这影响了性能。
r 使用XML操作对数据进行操作,例如可扩展样式表语言转换(XSLT转换)或XPath查询。

对于下列情况,要在应用程序中使用DataReader:
r 不需要缓存数据。
r 要处理的结果集太大,内存中放不下。
r 一旦需要以仅向前、只读方式快速访问数据。
注填充DataSet时,DataAdapter使用DataReader。因此,使用DataAdapter取代DataSet提升的性能表现为节省了 DataSet占用内存和填充DataSet需要的循环。一般来说,此性能提升只是象征性的,因此,设计决策应以所需功能为基础。

三、基本概念

1、面向对象的语言具有封装性、继承性、多态性。
2、ADO.NET中的五个主要对象Connection、Command、DataSet、DataReader、DataAdapter
3、ASP.NET中的身份验证有Windows、Forms、Passport,一般采用Forms,比较简单、适用面广
4、接口----接口定义了一组方法(Method,子程序或函数例程[译注:指Visual Basic .NET中的Sub和Function])、属性(Property)、事件(Event)和域(Field,变量或特性),这些都被声明为公有。接口也可以被另一个接口继承。任何继承了一个接口的类或结构都必须实现接口继承链中所有接口所定义的成员。
5、继承------继承是指一个类——称为子类[译注:亦称派生类],可以基于另一个类——称为基类[译注:亦称父类、超类]。继承提供了一种建立对象层次的机制。继承使得你能够在你自己的类中使用另外一个类的接口和代码。
base->访问基类的成员。
this->引用调用一个方法的当前对象。
6、抽象类-------抽象类是一种特殊的基类。除了通常的类成员,它们还带有抽象类成员。抽象类成员是指没有实现而只有声明的方法和属性。所有直接从抽象类派生的类都必须实现所有这些抽象方法和属性。
抽象方法不能实例化。这样做[译注:指实例化一个抽象类]是不合逻辑的,因为那些抽象成员没有实现。那么,不能实例化一个类有什么好处呢?很多!抽象类稳坐类继承树的顶端。它们确定了类的结构和代码的意图。用它们可以得到更易搭建的框架。这是可能的,因为抽象类具有这个框架中所有基类的一般信息和行为。
7、接口和抽象类之间的区别--------接口和抽象类关系很紧密,它们都具有对成员的抽象。
对于一个抽象类,至少一个方法是抽象方法既可,这意味着它也可以具有具体方法[译注:Concrete Method,这只是相对于抽象方法而言,面向对象中并没有这个概念]。
对于一个接口,所有的方法必须都是抽象的。
实现了一个接口的类必须为接口中的所有方法提供具体的实现,否则只能声明为抽象类。
在C#中,多重继承(Multiple Inheritance)只能通过实现多个接口得到。抽象类只能单继承[译注:C#中的单继承是指所有类作为基类的时候都只能是派生类声明中唯一的基类,而不仅仅是抽象类]。
接口定义的是一个契约,其中只能包含四种实体,即方法、属性、事件和索引器。因此接口不能包含常数(Constant)、域、操作符、构造器、析构器、静态构造器或类型[译注:指嵌套的类型]。
同时,一个接口还不能包含任何类型的静态成员。修饰符abstract、public、protected、internal、private、virtual、override都是不允许出现的,因为它们在这种环境中是没有意义的。
类中实现的接口成员必须具有公有的可访问性。
8、多态性--------多态性反映了能够在多于一个类的对象中完成同一事物的能力——用同一种方法在不同的类中处理不同的对象。例如,如果Customer和Vendor对象都有一个Name属性,则我们可以写一个事物来调用Name属性而不管我们所使用的是Customer对象还是Vendor对象,这就是多态性。
交通工具是多态性的一个很好的例子。一个交通工具接口可以只包括所有交通工具都具有的属性和方法,还可能包括颜色、车门数、变速器和点火器等。这些属性可以用于所有类型的交通工具,包括轿车、卡车和挂车。 多态性不在交通工具的属性和方法背后实现代码。相反,多态性只是实现接口。如果轿车、卡车和挂车都实现了同样的交通工具接口,则所有这三个类的客户代码是完全一样的。
C#通过继承来为我们提供多态性。C#提供了virtual关键字用于定义一个支持多态的方法。
9、结构----------结构是和类相似的一种封装构造,因为它可以包含数据、类型和函数成员。但和类不同的
是,结构是值类型,因此存放在内存中称为栈的地方。结构通常用来存入简单数据类型--
在内存中有固定大小的实体----的集合,事实上,内建的基本值类型Int32、Int64、Double
等在.NET Framework中实现为结构。
10、委托---------委托是提供对具有特定返回类型和参数列表的方法的一般引用的引用类型。它的本质上和C或C++中的函数指针相似。但和C++函数指针不同的是,委托是完全面向对象的---它们既封装方法又封装对象实例。委托是用户定义的类型,所以当定义委托时,实际上是定义一个特定类型的委托,而不是一个
具体的实例
11、.Net中的内存回收机制
垃圾回收器是用来管理应用程序的内存分配和释放的。在垃圾回收器出现以前,程序员在使用内存时需要向系统申请内存空间。有些语言,例如Visual Basic,可以自动完成向系统申请内存空间的工作。但是在诸如Visual C ++的语言中要求程序员在程序代码中申请内存空间。如果程序员在使用了内存之后忘了释放内存,则会引起内存泄漏。但是有了垃圾回收器,程序员就不必关心内存中对象在离开生存期后是否被释放的问题。当一个应用程序在运行的时候,垃圾回收器设置了一个托管堆。托管堆和C语言中的堆向类似,但是程序员不需要从托管堆中释放对象,并且在托管堆中对象的存放是连续的。
每次当开发人员使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。新创建的对象被放在上次创建的对象之后。垃圾回收器保存了一个指针,该指针总是指向托管堆中最后一个对象之后的内存空间。当新的对象被产生时,运行库就知道应该将新的对象放在内存的什么地方。同时开发人员应该将相同类型的对象放在一起。例如当开发人员希望向数据库写入数据的时侯,首先需要创建一个连接对象,然后是Command对象,最后是DataSet对象。如果这些对象放在托管堆相邻的区域内,存取它们就非常快。

四、Public、Protected、Internal、Protected internal、Private的访问权限

1、Public ------公共成员,成员对于任何人都是可见的。我们可以在类内部的和类的子孙的代码中通过使用类的实例来访问一个公有的成员。
2、Protected------保护成员,成员和私有成员类似,只能由包含它的类访问。然而,受保护成员可以由一个类的子类所使用。如果类中的一个成员可能被该类的子类访问,它应该声明未受保护的
3、 Internal/Friend--------成员对整个应用程序是公有的,但对于其他的外部应用程序是私有的。当我们希望其他应用程序能够使用当前应用程序中的包含的一个类,但又希望这个类为当前应用程序保留一定的功能时,就要用到内部/友元成员。在C#中我们使用internal,而在 Visual Basic .NET中我们使用Friend。

4、Protected internal -------包括了 Protected和Internal修饰符,成员只能由包含了基类的应用程序中的从该基类派生的子类所访问。当你希望一个类中的成员只能由其子类访问,并且拒绝其他应用程序访问该类的这个成员的时候,你就要将其声明未受保护内部成员。
5、Private -------私有成员,成员是隐藏的,只有对类本身是可用的。所有使用了一个类的实例的代码都不能直接访问一个私有成员,这个类的子类也不允许。

五、ASP.NET两个页面之间传递值的几种方式
ASP.NET 提供了卓越的事件驱动编程模型,让开发者简化了应用程序的总体设计,但是这个也造成了它固有的一些问题,例如,使用传统的ASP里,我们可以通过使用 POST方法很容易地实现页面间传递值,同样的事情,在使用事件驱动编程模型的ASP.NET就不是那么容易了,当然了,我们仍然有一些方法可以实现同样的功能。本文将试着使用不同的可能的方法来解决这个问题,但可以预见是,本文将包含使用querystring,session变量以及 server.Transfer方法来实现页面间的值传递。

使用QueryString
使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。使用这种方法的步骤如下:
1,使用控件创建web表单(form)
2,创建可以返回表单的按钮和链接按钮
3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量
4,在保存的URL里添加QueryString参数
5,使用Response.Redirect重定向到上面保存的URL
下面的代码片断演示了如何实现这个方法:
源页面代码:
private void Button1_Click
(object sender, System.EventArgs e)
{
string url;
url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;
Response.Redirect(url);
}
目标页面代码:
private void Page_Load
(object sender, System.EventArgs e)
{
Label1.Text=Request.QueryString["name"];
Label2.Text=Request.QueryString["email"];
}

使用Session变量
使用Session变量是可以在页面间传递值的的另一种方式,在本例中我们把控件中的值存在Session变量中,然后在另一个页面中使用它,以不同页面间实现值传递的目的。但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。使用Session变量传递值的一般步骤如下:
1,在页面里添加必要的控件
2,创建可以返回表单的按钮和链接按钮
3,在按钮或链接按钮的单击事件里,把控件的值添加到session变量里
4,使用Response.Redirect方法重定向到另一个页面
5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它
下面的代码片断演示了如何实现这个方法:
源页面代码:
private void Button1_Click
(object sender, System.EventArgs e)
{
//textbox1 and textbox2 are webform
//controls
Session["name"]=TextBox1.Text;
Session["email"]=TextBox2.Text;
Server.Transfer("anotherwebform.aspx";
}
目标页面代码:
private void Page_Load
(object sender, System.EventArgs e)
{
Label1.Text=Session["name"].ToString();
Label2.Text=Session["email"].ToString();
Session.Remove("name";
Session.Remove("email";
}

使用Server.Transfer
这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下:
1,在页面里添加必要的控件
2,创建返回值的Get属性过程
3,创建可以返回表单的按钮和链接按钮
4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面
5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了
以下代码综合实现上述步骤过程的代码:
源页面代码:
把以下的代码添加到页面中
public string Name
{
get
{
return TextBox1.Text;
}
}

public string EMail
{
get
{
return TextBox2.Text;
}
}
然后调用Server.Transfer方法
private void Button1_Click
(object sender, System.EventArgs e)
{
Server.Transfer("anotherwebform.aspx";
}
目标页面代码:
private void Page_Load
(object sender, System.EventArgs e)
{
//create instance of source web form
WebForm1 wf1;
//get reference to current handler instance
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.Name;
Label2.Text=wf1.EMail;
}

六、ASP.NET的Application、Session、Cookie、ViewState和Cache等变量的区别是什么?

Application是公共的,所有人都能看到,所以可以用来做聊天室,

session是私有的,每个客户端都存在一个不同的session 生存期正常是20分钟,也可以自己设定为1分钟或2个小时

cookie是保存在本机的文件,记录短小的信息,除非你让cookie过期,否则会一直存在

viewstate类似于asp中的hidden控件,用来记录页面中的控件的状态的,主要在页面间信息传递时用,

cache是缓存,用来记录已经执行过的一些数据,比如读取数据库,目的是加速显示,减少服务器的负担,过期时间也是可以自己设定的,

七、C#中接口与类的区别?

1、接口类似于类,但接口的成员都没有执行方式,它只是方法、属性、事件和索引符的组合而已,并且也只能包含这四种成员;类除了这四种成员之外还可以别的成员(如字段)。
2、不能实例化一个接口,接口只包括成员的签名;而类可以实例化(abstract类除外)。
3、接口没有构造函数,类有构造函数。
4、接口不能进行运算符的重载,类可以进行运算符重载。
5、接口的成员没有任何修饰符,其成员总是公共的,而类的成员则可以有修饰符(如:虚拟或者静态)。
6、派生于接口的类必须实现接口中所有成员的执行方式,而从类派生则不然。
那么为什么还要有接口呢?主要原因是它是一种有效的契约。类有一些成员,不考虑把这些成员组合在一起,类只是一个拥有各种方法、字段和属性的列表,但为了能以某种方式使用类,必须知道类能执行那些功能,具体的操作就是声明执行一个或多个接口的类,类执行接口的方式是从接口中派生,再提供这个接口中定义的所有成员的执行方式。

阅读全文

与微软程序员面试题相关的资料

热点内容
解压器用哪个好一点 浏览:771
什么app看小说全免费 浏览:503
sha和ras加密 浏览:823
韩顺平php视频笔记 浏览:636
阿里云ecs服务器如何设置自动重启 浏览:596
三星电视怎么卸掉app 浏览:317
如何将pdf转换成docx文件 浏览:32
dos命令批量改名 浏览:376
centosphp环境包 浏览:601
mfipdf 浏览:534
电脑解压后电脑蓝屏 浏览:295
外网访问内网服务器如何在路由器设置 浏览:856
2014统计年鉴pdf 浏览:434
linuxoracle用户密码 浏览:757
股票交易pdf 浏览:898
p2papp源码 浏览:308
记录睡眠软件app哪个好用 浏览:140
液压助力车压缩比 浏览:217
文件服务器上如何查看 浏览:975
雪花绘制源码 浏览:662