导航:首页 > 源码编译 > 程序员算法面试题

程序员算法面试题

发布时间:2023-06-07 17:28:41

java面试题:3道问答题!

1:堆栈都是内存的可用区域,但是 堆的速度慢容量大,栈的速度快容量小。一个64K的字符串,自然放在堆。栈的内存是很宝贵的。
2:接口和抽象类都是面向对象编程的特点,都是可继承(实现)为明确的类。一般:所描述的事物(事件)属于很抽象的,则先使用接口表达这个事物,然后使用抽象类实现划分出各种分类事物。例如:List 接口下有抽象类:AbstractSequentialList<E> AbstractList<E>等,然后才有LinkedList ArrayList
3:如果这两个重复的数字没有说出其大小。并且数组是有序的,那就挨着比较2个相邻的数。或者:
int i=0;
Set<Integer> set=new HashSet<Integer>();
for(;i<array.length;i++)
if(set.add(array[i])) break;

array[i];//就是了

㈡ 你要面试一个程序员,应该问他什么问题

首先面试程序员分有没有经验
面试没有经验的程序员就随便问问点ssm,ssh五大框架问题,多线程什么的,再问问是否会点前端技术
有经验就看看他的简历,问他简历项目上的问题,可以围绕着简历上的项目问,通过他的回答涉及到的技术点之类的,拓展出去问其他的

㈢ java程序员面试问题,你在项目中遇到什么困难,你是怎么解决的,说简单了又不像,有哪些复杂的困难,解决

生 : 30岁,我的程序员梦想
作 者: redbridge (雪燃)

30岁,开始实现我的程序员梦,从一个编程爱好者,从一个业余的程序员,一个水平不高的程序员,一个半道出家的程序员......
我的经历到这里就告一段落了,五年里跳了五次槽,不知道和大家比算不算多J,没有什么太多起伏,但我想很多朋友可能会和我有类似的经历,不知道能不能引起你们的共鸣。我想对我上面所说的话给一个总结:

1. 如果你觉得自己应该追求什么,不管遇到什么困难千万不要放弃,一定要坚持下去。
2. 不要因为自己年轻就找理由挥霍时间,少玩一点SC、CS、魔兽3、传奇、魔力或者…….,多看点书,多练练题。
3. 如果你还是在校的学生,英语很差,专业课也很差。没关系,想怎么学计算机就怎么学计算机吧。其它地只要能混到毕业证就行了。除非你对自己的未来没有信心。(当然,如果你的理想不仅仅是要做一个程序员,那你别丢掉英语。)
4. 如果你不是科班出身,想要转行而不知该怎么开始的话,建议你先看两类书:(1)计算机原理;(2)数据结构和算法。(看数据结构之前先看C语言)。
5. 什么时候努力都不晚,关键是你明白要努力了,大器晚成总比一事无成要好的多。
6. Java、.net、C++、PB、VB、Delphi、汇编到底应该学哪个?我的经验,哪个最简单就先学哪个、公司用哪个你就学哪个、哪个和你有缘(比如刚好你认识一个愿意帮助你的Delphi高手)你就学哪个,如果你都学,或者三天两头的换,我可以告诉你结果肯定是什么都不会,不要心浮气燥,他们都只是工具,学精一门其它的就相通了,重要的是掌握编程的思想。如果你问我面向对象(好像现在已经是面向需求了)、UML、WebLogic、WebService、软件工程、XML…….应该怎么学呀,对不起,这些我也确实不是都会,但请相信,你先实实在在的写上十万行以上的代码以后,那些东西你自然就慢慢会了。
7. 不要以为程序员的工资都很高,程序员之间的水平差异也大。公司衡量一个人的待遇标准是他能给公司带来多大的效益。如果你体现了自己的价值,公司会主动给你加薪的,当然你也可以自己主动提,但一定要在你表现出了自己的价值之后。
8. 轻易不要跳槽,如果非要跳,也要保持工作经验上的延续,而不是从新开始,不然就会象我一样走很多弯路。
9. 如果你以为程序员都是熬夜熬出来的,那么你错了,因为它的代价就是缩短你的青春!大家不要象我一样,真的,熬夜一点也不好!记住老毛的话:如有恒,何须三更起,半夜眠;最怕莫,三天打鱼两天晒网,竹篮打水一场空!
10. 这一点是我觉得最精华的一点:“君子性非异也,善假于物也。”这句话的本意是一个水平很高的人本身并不一定很高明,关键是他善于利用别人的高明!我在这里做个借鉴,就是要充分利用自己身边的资源,不放过任何一个可以提高自己的机会。大家不要误会,这里的假于物可不是指抄袭别人的源代码,而是指通过学习别人的源代码把他的思想扩展到自己的思想里去。
注:上面的十大“精华”纯属我个人的“谬论”,您自己看着消化,有用的收下,没用的请拖入“回收站”。如果你觉得这些总结不过是一些浮华之词,那请你先问问自己:“是不是在行动上都真正做到了。”
这就是我,一个不算优秀,不算勤奋;玩能玩通宵,学也学能学通宵;对梦想的追求很执着;到了30才开始真正写程序;一个很平凡但又不甘于平凡的人……我的经历相信很多朋友都有过的,我现在也不能算是一个成功人士,但我相信我的经历却是值得大家借鉴的,因为我终究代表了一类人。
最后我还想说一点:现在很多朋友都抱怨中国的软件业环境太差,前途渺茫。确实是这样,我有同感。不过我想软件业不过是千万个行业中的一种,每一个行业总是会有起落的,中国的软件业环境差有她的历史原因,我们不要总是简单地和印度相比。抱怨没有意义,已经这样了,抱怨不能使她变好,希望我们每一个人多贡献一份自己的力量,总有一天她会变的比印度还好,甚至比美国还好。
最后:希望所有的程序员和拥有成为程序员梦想的朋友们在新的一年里心想事成,万事如意。请相信我:明天不一定更美好,但美好的一天一定会来!

㈣ java程序员面试题

项目开发的一般流程:
1.需求分析
a) 参考以前的成功项目
b) 实地考查
c) 向专家请教

然后产生需要分析文档
2.概要设计
a) 分析文档,对整个项目模块进行划分洞碰粗

根据需求分析说明书进行概要设计,为将来详细设计提供文档支持
总体设计 (设计理念/软硬件环境/约束)
用例设计 (需求用例纳镇/系统框架)
接口与类设计 (分层设计/类图)
出错处理设计 (异常设计)
维护设计 (系统还原与备份)

概要设计说明书

3.详细设计
a) 对概述设计中的模块进行细化,使用数据结构和算法进行描述
根据概要设计进行详细设计,为将来程序员编码提供文档支持
模块设计
模块功能清单
IPO图
模块开发优先级
界面设计
数据库设计 (表/视图/存储过程/触发器/约束)

详细设计说明书

4.编码和测试
a) 采用你所熟悉的编程语言(客户要求)进行实现
b) 测试分类:单元测试(Junit),集成测试,系统上线

编码与测试
根据详细设计说明书进行编码和测试
程序员/软件开发工程师/高级软吵高件开发工程师

项目整合与联合测试
项目子模块之间的拼接
系统整体测试
测试计划/测试报告
5.交互和维护

php程序员面试都会遇到哪些问题

看初级的还是高级的,
初级的看项目经验,当然不用太多的经验就行,一般只会问你php,mysql,js,jquery这几方面
高级的问的广度和深度很明显: 看过php源码吗,框架看过源码吗,C语言能力怎么样,linux怎么样,负载均衡,集群能力,算法能力等

android 面试,算法题。

final int size = data.length;
for(int i = 0; i< size; i++){
if(data[i] == 0xffffffff)
data[i] = 0x80ffffff;
}

不知道你是不是这个意思。

㈦ 进入IT企业必读的200个 .NET面试题的目 录

第1章 应聘开发职位的技巧和禁忌 1
程序员在准备面试的过程中,有时会过分注重技术上的准备工作,事实上,一些非技术的准备工作也相当重要。掌握好应聘技术职位过程中的软技巧、准备一份出色的简历、提高警惕避免在应聘中触犯一些禁忌,可以大大地提高面试的成功率。在开始面试时,还要把握一些强势的招聘网站,给自己一个展现自我的平台。本章从了解、准备、开始,层层渐进,让读者对整个程序员面试的过程有个全局性的掌握。
1.1 技术职位需要怎样的人才——了解大环境 1
1.1.1 对技术的执着和热情 1
1.1.2 对编程始终抱有认真的态度 1
1.1.3 实事求是的态度和谦逊的品质 1
1.1.4 适合应聘公司的文化 1
1.2 一份出色的个人简历——面试准备 2
1.2.1 一份简历不宜超过一页 2
1.2.2 永远准备中文简历 2
1.2.3 不要在个人简历上注明希望薪水 2
1.2.4 简历模板 2
1.3 展现自我——开始发简历 3
1.3.1 应聘渠道 3
1.3.2 应聘流程 7
1.4 真正的面试——开始面试 8
1.4.1 笔试 8
1.4.2 面试 10
1.4.3 电话面试 10
1.4.4 网络考试 10
1.5 面试中的一些禁忌 11
1.6 小结 12
第2章 .NET框架基础 13
本章覆盖了.NET面试笔试中常见的.NET框架技术题。此类题目侧重于考查应聘者对于.NET机制的深入了解,彻底理解.NET的运行机制,并且熟悉一个.NET系统常用的管理部署方法。
2.1 .NET基础概念 13
2.1.1 什么是CTS、CLS和CLR 13
2.1.2 开发和运行.NET程序需要的
最基本环境是什么 15
2.1.3 .NET是否支持多编程语言开发 15
2.1.4 CLR技术和COM技术的比较 17
2.1.5 什么是程序集和应用程序域 18
2.2 .NET运行机制 20
2.2.1 .NET程序被编译成什么形式的代码 20
2.2.2 JIT是如何工作的 22
2.2.3 简述程序集的加载机制 23
2.2.4 如何配置程序集的版本策略 25
2.3 生成、部署和管理 27
2.3.1 如何生成强签名的程序集 27
2.3.2 如何把程序集放入GAC中 29
2.3.3 延迟签名及其作用 30
2.3.4 程序集的版本分哪几部分 32
2.4 名企面试真题 32
2.5 小结 33
第3章 .NET类型语法基础 34
本章覆盖了.NET面试笔试中最基础的语法和类型题。纵观.NET的面试题,此类题目涉及了最基础的知识点,其难度也相对最小。但是应聘者如果对此类的面试题回答得不正确或者不完整,将会给面试官留下技术水平较差的印象,建议读者对本章的题目做到深刻理解和掌握。
3.1 基础类型和语法 34
3.1.1 .NET中所有内建类型的基类是什么 34
3.1.2 System.Object中包含哪些方法,哪些是虚方法 35
3.1.3 值类型和引用类型的区别 37
3.1.4 简述装箱和拆箱原理 40
3.1.5 C#中是否有全局变量 43
3.1.6 struct和class的区别,
struct适用哪些场合 43
3.1.7 类型的初始化器何时被调用 44
3.1.8 C#中方法的参数可以有哪几种传递方式 47
3.1.9 C#中string和String有什么区别 50
3.1.10 .NET支持哪几种可访问性级别,C#实现了其中的哪几种 50
3.1.11 简述属性的特点及属性和方法的异同 51
3.1.12 简述C#中的浅复制和深复制 54
3.1.13 简述C#中的循环语法和各自的特点 57
3.1.14 C#中的using语句有什么作用 60
3.2 内存管理和垃圾回收 62
3.2.1 简述.NET中堆栈和堆的特点和差异 62
3.2.2 执行string abc=aaa+bbb+ccc共分配了多少内存 64
3.2.3 .NET中GC的运行机制 66
3.2.4 Dispose方法和Finalize方法在何时被调用 67
3.2.5 GC中代(Generation)是什么,一共分几代 70
3.2.6 GC机制中如何判断一个对象是否仍在被使用 71
3.2.7 .NET的托管堆中是否可能出现内存泄漏现象 72
3.3 面向对象的实现 75
3.3.1 C#中类可以有多个父类、可以实现多个接口吗 75
3.3.2 简述C#中重写、重载和隐藏的概念 76
3.3.3 为什么在构造方法中调用虚方法会导致问题 78
3.3.4 在C#中如何声明一个类不能被继承 82
3.4 异常的处理 82
3.4.1 如何针对不同的异常进行捕捉 82
3.4.2 如何使用Conditional特性 84
3.4.3 如何避免类型转换时的异常 86
3.5 名企面试真题 88
3.6 小结 89
第4章 字符串、集合和流的使用 90
字符串、集合和流在程序中处理数据时经常被用到,这些代码的编写将直接影响到系统的正确性和效率。本章将包含关于字符串、集合和流的常见面试题,并且通过分析这些题目和知识点,帮助读者梳理这些方面的知识。
4.1 字符串处理 90
4.1.1 System.String是值类型还是引用类型 90
4.1.2 StringBuilder类型有何作用 91
4.1.3 如何在String和Byte[]对象之间进行转换 92
4.1.4 简述BASE64编码的作用以及C#中对其的支持 94
4.1.5 SecureString的实例如何被分配和释放 96
4.1.6 什么是字符串池机制 98
4.2 常用集合和泛型 99
4.2.1 Int[]是引用类型还是值类型 99
4.2.2 数组之间如何进行转换 100
4.2.3 解释泛型的基本原理 102
4.2.4 什么是泛型的主要约束和次要约束 104
4.2.5 .NET中是否可用标准模板库(STL) 105
4.3 流和序列化 106
4.3.1 什么是流,.NET中有哪些常见的流 106
4.3.2 如何使用压缩流 109
4.3.3 Serializable特性有何作用 111
4.3.4 .NET提供了哪几种可进行序列化操作的类型 113
4.3.5 如何自定义序列化和反序
列化的过程 116
4.4 名企面试真题 119
4.5 小结 119
第5章 常用类和接口 120
.NET除了提供运行引擎之外,还提供了丰富的内建类型。理解这些类型的作用和机制,能够帮助程序员减少代码工作,编写高效简洁的代码。而有时候误用类型,则会导致性能的降低,更严重时则会为系统带了潜伏的bug。本章将介绍一些经常出现在.NET面试中的类型和接口。
5.1 类型的基类System.Object 120
5.1.1 是否存在不继承自System.Object类型的类 120
5.1.2 在System.Object中定义的三个比较方法有何异同 122
5.1.3 如何重写GetHashCode方法 125
5.2 时间的操作System.DateTime 127
5.2.1 DateTime如何存储时间 127
5.2.2 如何在DateTime对象和
字符串对象之间进行转换 127
5.2.3 什么是UTC时间,如何转换到UTC时间 130
5.3 IFormattable和IformatProvider的使用 131
5.3.1 如何使用IFormattable接口实现格式化输出 131
5.3.2 如何告诉类型格式化输出的方式 133
5.4 管理文件和文件夹的类型 135
5.4.1 如何操作文件和文件夹 135
5.4.2 如何实现文件和文件夹的监控功能 139
5.5 .NET中的定时器 141
5.5.1 .NET提供了哪几个定时器类型 141
5.5.2 .NET的内建定时器类型
是否会发生回调方法重入 146
5.6 名企面试真题 151
5.7 小结 151
第6章 .NET中的高级特性 152
本章的内容覆盖了诸如委托、事件、反射和特性等.NET框架中的高级特性。对这些特性的掌握和成熟运用,往往成为.NET程序员从入门级进阶到中级的判断标准。也正因为如此,此类题目在.NET技术笔试、面试中被大量采用。读者在阅读本章时,应力求做到知其然更知其所以然,充分理解各种特性在.NET框架下是如何实现的,这样的设计如何提高了程序的灵活性和可扩展性。
6.1 委托 152
6.1.1 请解释委托的基本原理 152
6.1.2 委托回调静态方法和实例方法有何区别 154
6.1.3 什么是链式委托 154
6.1.4 链式委托的执行顺序是怎么样的 156
6.1.5 可否定义拥有返回值的方法的委托链 157
6.1.6 委托通常可以应用在哪些场合 159
6.2 事件 165
6.2.1 请解释事件的基本使用方法 165
6.2.2 事件和委托有何联系 167
6.2.3 如何设计一个带有很多事件的类型 169
6.2.4 用代码表示如下情景:猫叫、老鼠逃跑、主人惊醒 173
6.3 反射 175
6.3.1 请解释反射的基本原理和其实现的基石 176
6.3.2 .NET提供了哪些类型来实现反射 179
6.3.3 如何实现动态地发射程序集 184
6.3.4 如何利用反射来实现工厂模式 188
6.3.5 如何以较小的内存代价保存
Type、Field和Method信息 194
6.4 特性 196
6.4.1 什么是特性,如何自定义一个特性 196
6.4.2 .NET中特性可以在哪些元素上使用 198
6.4.3 有哪几种方法可以获知一个元素是否申明某个特性 200
6.4.4 一个元素是否可以重复申明同一个特性 202
6.5 名企面试真题 204
6.6 小结 204
第7章 .NET多线程编程 205
多线程编程是每个技术框架下都需要面对的问题,在多CPU、多核的硬件架构逐渐普及的今天,多线程编程也渐渐变得更加重要。本章将集中覆盖关于.NET中多线程编程的面试题。
7.1 多线程编程的基本概念 205
7.1.1 请解释操作系统层面上的线程和进程 205
7.1.2 多线程程序在操作系统里是并行执行的吗 206
7.1.3 什么是纤程 207
7.2 .NET中的多线程编程 208
7.2.1 如何在.NET程序中手动控制多个线程 208
7.2.2 如何使用.NET的线程池 212
7.2.3 如何查看和设置线程池的上下限 215
7.2.4 如何定义线程独享的全局数据 217
7.2.5 如何使用异步模式读取一个文件 221
7.2.6 如何阻止线程执行上下文的传递 223
7.3 多线程程序的线程同步 227
7.3.1 什么是同步块和同步块索引 227
7.3.2 C#中的lock关键字有何作用 229
7.3.3 可否使用值类型对象来
实现线程同步 232
7.3.4 可否对引用类型对象自身进行同步 233
7.3.5 什么是互斥体,Mutex类型和Monitor类型的功能有何区别 235
7.4 名企面试真题 238
7.5 小结 238
第8章 ASP NET应用开发 239
ASP NET是微软公司提供的编写动态网站的技术框架,其特点是基于.NET框架基础,所有ASP NET程序都可以使用针对.NET的语言编写。在微软公司的Visual Studio开发平台中,实现了拖放控件等便捷的功能,使得ASP NET应用程序的开发效率得到了较大的提高,近些年来ASP NET技术逐渐成为网站开发的主流技术之一,本章将覆盖一些常见的关于ASP NET开发的面试题。
8.1 ASP NET应用开发基础 239
8.1.1 请解释ASP NET以什么形式运行 239
8.1.2 常见的HTTP Code有哪些 242
8.1.3 GET请求和POST请求有何区别 245
8.1.4 介绍ASP NET的页面生存周期 247
8.2 控件和页面 249
8.2.1 什么是静态页面,什么是动态页面 250
8.2.2 请简述ViewState的功能和实现机制 251
8.2.3 Session有哪几种存储方式,之间有何区别,如何进行设置 255
8.2.4 如何嵌套使用GridView控件 259
8.2.5 列举几种实现页面跳转的方法,并说明其实现机制 263
8.2.6 请解释<%# Eval(source)%>的功能和实现机制 270
8.2.7 ObjectDataSource控件有何作用 273
8.3 验证和安全 277
8.3.1 如何使用正则表达式来验证一个
上海市电话号码 277
8.3.2 介绍ASP NET验证控件的功能和
使用方法 280
8.3.3 如何防止SQL注入式攻击 287
8.4 名企面试真题 289
8.5 小结 289
第9章 .NET中的数据库开发 290
大部分系统都会包含数据库应用。数据库应用设计往往成为系统设计中最重要的组成之一,这其中不止包括数据库的架构、库结构的设计,也包括了程序访问数据库策略的设计。在.NET的程序开发中,ADO NET已经成为访问数据库最主要的组件框架。本章将覆盖和数据库访问及ADO NET有关的常见面试题,具体会覆盖ADO NET基本概念、数据库的链接、数据库读写等主题。
9.1 ADO NET和数据库程序基础 290
9.1.1 什么是关系型数据库 290
9.1.2 如何通过SQL语句来实现行列转换 291
9.1.3 ADO NET支持哪几种数据源 293
9.2 ADO NET和数据库的连接 295
9.2.1 请简要叙述数据库连接池的机制 295
9.2.2 如何提高连接池内连接的重用率 298
9.2.3 一个连接字符串可以包含哪些属性 300
9.2.4 CommandBehavior.CloseConnection有何作用 302
9.3 使用ADO NET读写数据库 305
9.3.1 ADO NET支持哪两种方式来访问关系数据库 305
9.3.2 什么是强类型的DataSet 309
9.3.3 请解释SqlDataAdapter的
基本工作机制 312
9.3.4 如何自动生成SqlDataAdapter的
更新命令 316
9.3.5 如何实现批量更新的功能 319
9.4 名企面试真题 321
9.5 小结 321
第10章 XML的应用和处理 322
XML可算是近10年来最炙手可热的技术之一,由于其跨平台的特性,很多技术应用都选择基于XML来进行发展。在.NET中,对XML的支持和应用随处可见。例如配置文件的格式、数据结构的表示、Web Service应用等,都是以XML语法为基础的。本章将详细覆盖常见的关于XML本身及其在.NET中应用的面试题。
10.1 XML的基本特性 322
10.1.1 什么是XML 322
10.1.2 简述XML的常用领域及其优势 323
10.1.3 XML中<![CDATA[ ]]>标签的作用 324
10.1.4 XML规范是否允许空的属性值 325
10.1.5 XML中如何处理诸如“<”的字符 326
10.1.6 XML中的命名空间如何使用 328
10.2 使用.NET组件读写XML 330
10.2.1 .NET中操作XML的基本类型有哪些 330
10.2.2 如何使用XmlDocument类型操作XML文档的节点和属性 334
10.2.3 如何使用XPath来指向带有属性的节点 337
10.2.4 .NET中如何验证一个XML文档的格式 338
10.2.5 .NET中XML文档和关系模式如何转换 340
10.3 利用XSLT处理XML文档 344
10.3.1 什么是XSLT,XSLT有何作用 344
10.3.2 如何使用XSLT中的模板 346
10.3.3 如何在XSLT文档中调用
其他XSLT文档 349
10.3.4 如何在代码中使用XSLT文档 351
10.4 名企面试真题 353
10.5 小结 353
第11章 Web Service的开发与应用 354
Web Service是一种网络服务,形式非常类似于当前智能手机上的应用。通过通用的规范,Web Service技术允许使用者访问网络上每一个Web Service所提供的服务。在网络快速发展的今天,这种基于网络的分布式服务已经被广泛地应用。本章将讨论关于.NET中如何应用Web Service的面试题。
11.1 SOAP和Web Service的基础概念 354
11.1.1 请简述SOAP协议 354
11.1.2 什么是WSDL,它有何作用 356
11.1.3 Web Service中如何处理附件 357
11.2 使用.NET开发Web Service 360
11.2.1 如何在.NET中创建Web Service 360
11.2.2 WebMethod特性包含哪些属性,各有何用处 363
11.2.3 如何生成Web Service代理类型 367
11.2.4 请简述.NET中Web Service的异常机制 368
11.3 Web Service的安全机制 371
11.3.1 请简要介绍WS-Security的签名机制 371
11.3.2 WS-Security规范申明了哪几种身份验证的方法 373
11.4 名企面试真题 375
11.5 小结 375
第12章 .NET Remoting分布式应用开发 376
在企业级应用开发中,分布式开发占据了越来越重要的地位。.NET Remoting是一种可扩展性很高的分布式开发技术,相对于DCOM、CORBA、RMI等分布式开发技术而言,.NET Remoting拥有着众多独特的优势。.NET Remoting是一个庞大的技术话题,如果详细展开的话可能要占据一本书的篇幅。本章主要针对那些经常出现在.NET面试中的、与Remoting基础相关的面试题。
12.1 .NET Remoting框架基础 376
12.1.1 请简要介绍.NET Remoting的运行机制 376
12.1.2 请列举.NET Remoting机制中有哪些组件可以扩展替换 379
12.1.3 请简述.NET Remoting生存周期机制 384
12.2 使用.NET Remoting进行分布式应用开发 387
12.2.1 请介绍服务端激活模式和客户端激活模式的区别 387
12.2.2 请简述Remoting中有哪几种远程调用方式 390
12.2.3 Remoting机制中如何处理以ObjRef为参数的方法调用 393
12.2.4 请简述Remoting中配置文件的使用 397
12.2.5 如何在客户端和服务器端共享远程对象类型 400
12.3 名企面试真题 404
12.4 小结 404
第13章 代码和算法 405
无论是面试还是笔试,算法和代码的问题都是必不可少的,其区别仅在于笔试中更侧重于应聘者书写代码的能力,而面试中则更注重于应聘者的设计能力和算法思路。本章着重覆盖了一些在.NET面试中经常出现的和代码、算法有关的面试题,并且给出了解答思路和实现示例。
13.1 基础算法题 405
13.1.1 请实现一个快速排序算法 405
13.1.2 请实现一个二分查找算法 406
13.1.3 请实现一棵二叉树的中序、后序遍历 408
13.1.4 请写出一个奇偶分割算法 413
13.1.5 请实现一个简单的最短路径算法 414
13.2 程序设计题 423
13.2.1 请编程实现斐波拉契数列问题 423
13.2.2 请设计窗口程序演示八皇后问题 425
13.3 名企面试真题 432
13.4 小结 432
第14章 .NET中的单元测试 433
单元测试是软件开发中必不可少的一个环节,单元测试的优劣直接影响到集成测试、系统测试的效果,甚至会影响到最终产品的质量。大多数开发团队对单元测试非常重视,并且要求程序员掌握相应的知识。本章将覆盖在.NET面试中经常出现的关于单元测试的面试题。
14.1 单元测试基础概念 433
14.1.1 请简述单元测试的作用和其优点 433
14.1.2 请举例说明TDD开发方式的流程 434
14.1.3 请编写实现阶乘功能模块的测试用例 437
14.2 使用NUNIT进行单元测试 439
14.2.1 如何使用NUNIT来进行单元测试 439
14.2.2 如何对NUNIT的测试用例进行分类 442
14.2.3 请解释SetUp、TearDown、TestFixtureSetUp和
TestFixtureTearDown 446
14.3 名企面试真题 448
14.4 小结 448

㈧ 谁有程序员的面试题,例如东软公司,或其他公司的程序员面试题

程序员面试一直是社区乐于讨论的热门话题。
这篇文章是站在面试官角度对于程序员面试问题的一个阶段性反思和经验总结。
【目标】
相信和不少朋友一样,有了几年工作经验成为Senior后就开始了面试别人的经历。作者在最初这个阶段只是按照自己的想象把”找到基础好的程序员“,”找到算法能力优秀的程序员“,”找到有Android开发经验的程序员“等作为面试的目标。但是,实际的经历告诉作者,尤其是按“基础好”,“算法好”这些目标招到的人最终效果并不好。比如,有的面试者基础知识和算法掌握情况不错,进程、线程、内存等概念清晰,基本的Hash,二叉树,快速排序等数据结构和算法也比较熟悉,但是进公司后在实际工作中表现得很糟糕。后来,作者才发现原来是作者的面试目标出了问题,作者原先的面试方法更像是大学的算法或操作系统期末考试,按照这种方法让许多并不合适的人通过了面试,同时也可能错过了许多合适的人。
后来,作者的反思是,从公司的角度讲,面试的根本目的是找到"能够干好工作"的人,而“高学历”,“算法好”,“基础好”,“有经验”这些都是表象而不是根本,它们并不能直接和“工作好”划等号。
【方法】
目标明确了,但接下来的问题是假设面试者是一个黑盒系统,“工作好”不是直接可观测变量,你所能直接观测的变量是基础、算法、经验、学历、性格、谈吐、年龄等等。所以,实际上,你只能从“基础好”,“算法好”等可以直接观测的量去推测“工作好”的概率,这就是一个在“X好“条件下"工作好“的条件概率问题:P(工作好 | X好)。
根据这个模型,面试所应该考察哪些方面就很明显了,那就是选择那种最具有区分性的方面来考察。比如,考察面试者的体型特征没有太大意义,因为P(工作好|高),P(工作好|矮),P(工作好|胖),P(工作好|瘦)的概率都差不多;所以,体型特征不具有区分性,这不是面试所应该关注的内容。
面试官应当结合职位的要求明确哪些因素具有比较好的区分性。比如,如果要招一名技术门槛比较高的3D游戏引擎开发工程师,面试者A具有3D游戏引擎开发的经验,但是在基础知识和算法面试方面表现一般;面试者B相反,基础知识和算法面试表现很好,但没有游戏开发经验,而你只能选择其一。你选谁呢?其实,这就是两个条件概率问题P(工作好|经验好,基础一般,算法一般)和P(工作好|没经验,基础好,算法好)。这个问题就留给面试官来判断了,就作者个人而言,对于技术门槛较高需要技术积累的职位,经验更加说明问题,因此,作者更倾向于面试者A。
下面,作者再结合自己的经验谈谈对面试中常见方面的看法。
【算法】
算法是Google和MS等大公司面试所重点考察的内容。作者个人很喜欢算法,曾经参加ACM/ICPC拿过北京赛区的13名。但是,就个人经验来看,作者所接触过的绝大多数开发职位而言,算法都不适合作为考察面试者优劣的主要因素。对于普通的非算法性开发职位,考察面试者的算法就相当于考察他打乒乓球好不好一样,与目标“工作好”的相关性太低。就作者个人的经验来看,差不多P(工作好|算法好)=50%,也就是算法面试没有太大的区分性。
甚至,还有一种很不好的情况特别多地出现在算法好的面试者身上,作者称之为“只磨刀,不砍柴”。什么意思呢?有类人只对什么A*算法,异步编程,JVM类加载机制这种纯技术问题感兴趣,对实现用户需求毫无兴趣。这类人看起来有一定的技术能力,但是对公司来讲贡献十分有限,甚至不如技术一般但认真负责的人。所以,一旦遇到面试者算法好,作者就特别留意考察会不会是这种“只磨刀,不砍柴”的人。
另外,虽然作者个人不了解Google和MS,但作者对于其特别重视考察算法能力的面试策略是持怀疑态度的。即使在这样的世界级大公司,算法虽然重要,但可以想象在项目实施过程所遇到的各种各样问题中,算法问题绝大多数时候不会是主要瓶颈,没有到那种需要每个人都是算法高手的情况。实际上,绝大多数项目真正难点并不是一两个算法瓶颈,甚至也不是单点的技术瓶颈,而是系统性的组织、协调、设计、开发问题,有大量的看起来不是那么有技术含量的脏活累活,也有许多问题是由于信息不足,并不是技术能力强就能克服这些困难。一个团队最好优势互补,有人算法强,有人业务分析能力强,有人擅长后端服务,有人擅长前端界面,有人聪明,有人踏实,这是最好的。如果按照“算法好”的单一标准选材,必定会把许多优秀的人才拒之门外。
补充:在更多地了解了Google和Facebook等一流公司的面试细节之后,作者对这个问题的认识有了一定的改变,实际上这些公司在面试过程中并不完全强调技巧性很强的算法,而是更加注重编码(Coding)能力,只是在进行编码测试的过程中往往是通过一些简单算法题来进行的。作者对于这种面试方法越来越欣赏,并且也作为了作者们公司面试过程中的重点环节,因为编码能力的测试是十分必要的,它有着知识性问题无法取代的作用,如果一个面试者连“判断一个字符串是否是另一个字符串的子串”这样的题目都无法正确并快速地实现,那么基本上可以直接排除了。作者这里所强调的是不必考察高难度的算法问题,并非不重视编码能力测试,请读者不要误解
【基础】
基础面试是指考察诸如指针使用、进程线程概念等基础知识的面试,十分类似于大学期末考试题。作者曾经以为基础面试十分重要,但是现在不这么看了。在工作中基础的确是重要的,但是在面试过程中,它必须具有区分性才有意义,也就是说P(工作好|基础好)的概率要高,那么考察指针使用,进程线程区别这样的基础题目才有它的意义。作者的实际经验是,基础面试并不具有很好的区分性,和算法一样, 差不多P(工作好|基础好) = 50%。同时,基础面试是最容易准备的,中国人有长期的应试教育经验,要准备几个把玩指针题目太容易了。
作者曾经遇到过这样的面试者,他的C语言基础和编译、链接等原理掌握得非常好,给作者留下了深刻的印象,作者给的面试结论是:知识面不宽,只会C语言,但基础很扎实,建议录用。后来的事情证明了那个结论的前半部分是对的,但是”建议录用“错了。他在实际工作中表现得一塌糊涂,不理解需求,不理解整体架构;同时,上班时间不是花在项目上,而是花在阅读诸如《程序员的自作者修养》之类的书籍上。最后,这位同事由于长期“不出活”离开了公司。
基础不是不重要,而是“基础好”不足以说明面试者能干好工作,因为基础是属于局部性知识,而实际工作需要综合性能力,二者有天壤之别。C语言、操作系统能考高分,但是不会写程序的人在大学作者们还见得少吗? 软件开发就像盖房子,综合能力是设计和搭骨架,基础知识是码砖。张小龙原先Foxmail是Delphi开发的,他它不懂C#,你如果要招聘一个开发.NET Email客户端的人,你考察他对CLR掌握得好不好有意义吗? 让张小龙来开发一个C#版的Foxmail真的会有困难吗? 你招一个精通C#但没有Email客户端开发经验的人来真的比张小龙靠谱吗?
作者说基础知识不重要,和古人说的“不积洼步无以至千里”是不是矛盾呢?不矛盾!“洼步”与“千里”是一种可累加关系,但再多的“基础知识”都累加不成“综合能力”。学习软件开发要像持续集成一样,一开始就是一个完整的系统,虽然规模不大,问题很多,但它麻雀虽小五脏俱全,从小系统到大系统,从简单系统到复杂系统逐步演化。
所以,基础好本身不足以说明太多的问题,必须进一步考察综合能力。对于基础面试表现不好的面试者,如果时间允许也要进一步考察,有的面试者其实是有能力的,只是没有进行充分的准备。最理想的状态当然是基础和综合能力俱佳,若不能兼顾,应当综合能力优先。
【经验】
这里所说的经验不是通过工作了多少年来衡量的,而主要是指面试者的经历,比如,是否完整地实现过一个软件,或作为主要开发者完成过一个项目。经验的重要性在于它能说明一个人的综合能力。从项目的性质、规模和难度,面试官就可以大致判断出面试者的综合能力。如果一个面试者一直在大公司负责一个小模块的开发维护,那么基本可以判断他不具备独立或作为主要开发者承担一个项目的能力,只适合在另一家大公司做类似的事情。对于门槛较高需要长期技术积累的职位,相关经验更显得尤为重要,比如,Linux内核开发,JVM开发,游戏引擎开发,数据库实现,高级UX等。对于这类职位,没有经验的面试者即使综合素质不错也是需要长时间的学习和积累才能胜任。所以,基本上如果确定了你的职位属于此类,那么相关经验毫无疑问应该成为首选因素,换句话说,P(工作好 | 相关经验好)的概率是非常高的。
通过项目经验判断面试者的优劣比通过基础和算法测试更加靠谱,所以,面试过程中面试官应该花比较多的时间听面试者介绍项目经验,并进行深入地探讨交流,了解面试者的知识面、思维能力、表达能力等。同时,可以结合项目提一些基础知识和算法的问题,比如,如果面试者做过C++相关的项目,那就可以问他如何进行内存管理?是否熟悉智能指针?如果面试者的回答不能令人满意,那么就基本上可以判断他的项目做得不是很好。
要注意的是,经验也是一个多维度的事物。比如,C++股票交易中间件系统,这就涉及(C++,中间件,股票) 3个维度。假如面试者A做过C++股票交易客户端,面试者B做过C的股票交易中间件。从语言角度看,A最匹配,从项目性质看,B最匹配,你如何选择?这就是在多个维度中,哪个维度更重要的问题,就这个例子而言,作者个人更倾向于B,因为作者认为中间件开发经验是主要矛盾,而从C切换到C++并不是问题。所以,面试官需要判断哪一种经验是主要的,而哪一种经验是次要的。比如,作者们招聘Android应用开发,这个职位的Android技术门槛并不高,它的真正难点在于做出好的用户体验(UX)。所以,如果一个面试者没有Android的经验作者们是可以接受的,但是作者希望他在UX方面有经验,至少做过其他平台的移动应用开发。
【性格】
现在,作者来谈作者认为最重要的因素:性格。这可能是许多初为面试官的朋友所难以想象的,怎么会是性格最重要呢?说实话,当作者意识到这一点时,作者自己也很惊讶!说白了,还是 P(工作好|性格好)的概率最高啊。作者的实际经验是,如果一个人的性格好,他能把工作做好的可能性是最高的,性格好远比基础好、算法好要靠谱。
一个人如果技术上有缺陷,经验上有不足,但性格好,在团队中是很容易由其他人来补位的,他自己也很容易逐渐补起来;相反,如果一个人的性格不好,所有的技术优势经验优势都发挥不出来,甚至还会起到负作用,而且性格缺点很难改变。作者一直谈到实际工作所需要的是综合性的能力,这种综合能力的发挥中性格是至关重要的。项目中不止会遇到技术问题,要涉及沟通、协调,不同的人不同的部门既有合作又有磨擦,如何处理这些事情都需要一个良好的性格。可以说,在开发团队里让你与众不同的不是你从哪个学校毕业,也不是你过去的经验,而是你的性格
当然,性格是一个复杂的东西,它包含了很多的方面,并非所有方面都是程序员面试所需要关注的。作者的经验是可以重点考察这些方面:
1) 态度积极还是消极。有的面试者在谈吐中就会自然给你一种积极上进的感觉,或者你可以在他的经历中发现他积极的因素,这些都不是太难看出来的。相反,有的面试者你能明显感觉到他的消极情绪。积极性在工作中是十分重要的,积极的人能给团队带来朝气,也更易于合作。基本上,如果确定面试者属于态度积极的,他通过作者这一关的可能性就会大大增加;相反,如果确定属于态度消极的,即使技术能力不错作者也会十分谨慎。
2) IQ。作者的经验是,总体来看,聪明的人在工作中的表现更为优秀。在面试中要考察一个人是否聪明并不一定要像Google和MS那样找些专门测试IQ的智力题,其实,你只需要看他讨论问题是不是很有逻辑性,思考和说话是不是反应敏捷就可以做出大致的判断。另外,眼睛是人心灵的窗户,一个人聪明与否,眼睛是会说话的。不过,聪明也不完全是优点,比如,当公司或项目遇到困难时,往往是聪明人先跑掉了,坚守的往往是IQ一般的人。
3) 语言表达能力。语言表达能力也是程序员十分重要的一项素质,它关系到项目中的沟通是否顺畅。面试官可以看看面试者能否用简明的语言介绍清楚曾经做过的项目,能否抓住要点,能否考虑到听者的相关背景。一般来讲,语言表达能力强的人综合能力都不会太差。(面试网 www.mian4.net)
4) 是否具有用户意识。有人说程序员是做研发的,哪来什么用户?只有销售、市场人员才会和用户打交道。其实,这是完完全全的错误认识。你写一个模块,甚至一个API,只要有别人用,他就是你的用户。有的程序员设计一个模块或是一个软件总是习惯于从使用者的角度来考虑,尽量地方便使用者,这就是一种良好的用户意识。具有良好的用户意识的人更能考虑别人的感受和整体的需要,而不是单纯地从自己和局部来思考问题。当面试者谈及过去的项目经验时,面试官可以常常站在用户的角度对其进行提问,从这个过程中观察其是否具有良好的用户意识。
5) 如何应对质疑和压力。面试官应该对面试者的回答以及以往项目进行合理的质疑,看看他如何应对。曾经有一位面试者谈到做游戏登录服务器的经历,作者就问:“如果登录服务器挂了,怎么办呢”?他说原先虽然没有考虑这个问题,但是可以怎么怎么改进。其实,大家都理解项目中有各种不完美,这里面原因很多,只要面对质疑和压力能从容应对努力往好的方向思考解决就可以了,不需要掩饰缺陷,更不应该有情绪。作者遇到过有的面试者,一旦你对其项目提出质疑,他马上产生反抗情绪,或不高兴,或不承认有问题,这很容易一下子看出来他在工作中容不得质疑和批评,这种人要想合作就很困难。
6) 个性特点。许多面试者喜欢在简历上写“精通C++/Linux“,这些字眼看得人麻木,如果有人写”喜欢C++/Linux“,作者就会有一种眼前一亮的感觉。“精通”是没有感情色彩的叙述,而“喜欢”包含了面试者的个性,作者更愿意看到面试者的个性。作者相信对某样东西真正的热情远比你当前对它的掌握程度更为重要。其实,N年的经历告诉作者们,同一个班的同学,同一个项目组的同事,虽然每天所学的知识,所接触的工作都是相同的,但其实每个人的成绩和表现差异是十分明显的。那么,到底本质的差异是什么呢?其实,就是每个人的个性。是个性使得有的人业余时间去打球,有的人业余时间去看书,有的人喜欢Linux,有的人喜欢Mac。一个人在团队中扮演的角色也和他的个性有很大的关系。面试官应该引导面试者展现自己的个性,并判断其是否有益于团队。
【总结】
最后总结起来,作者的经验是:
1) 面试官的目标是找到”工作好“的人,一定要围绕这个目标来进行面试,如果把面试当成了算法或操作系统期末考试这就走入了误区;
2) 面试过程是通过学历、性格、基础、经验、算法等可以测试的因素去综合判断面试者“工作好”的概率;

3) 在各种因素中,性格 > 经验 > 基础 > 算法。性格是最重要的,如果性格不好,所有技术能力都会大打折扣,而且技术缺陷容易弥补,性格缺陷很难改变;经验体现了一个人的综合能力,你可以从面试者过去的经历中判断他能从事哪种工作,不能从事哪种工作;基础和算法则主要起到辅助参考的作用,基础好的程序员一般适应性比较强,学新技术更快,但是切忌单纯从基础来判断一个人的能力。
更多程序员面试问题请登陆楚湘人才网

㈨ 75道程序员面试逻辑测试题(附答案)(1)

【1】 假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5升和6升。问题是如何只用这2个水壶从池塘里取得3升的水。

由满6向空5倒,剩1升,把这1升倒5里,然后6剩满,倒5里面,由于5里面有1升水,因此6只能向5倒4升水,然后将6剩余的2升,倒入空的5里面,再灌满6向5里倒3升,剩余3升。

【2】 周雯的妈妈是豫林水泥厂的化验员。一天,周雯来到化验室做作业。做完后想出去玩。"等等,妈妈还要考你一个题目,"她接着说,"你看这6只做化验用的玻璃杯,前面3只盛满了水,后面3只是空的。你能只移动1只玻璃杯,就便盛满水的杯子和空杯子间隔起来吗?"爱动脑筋的周雯,是学校里有名的"小机灵",她只想了一会儿就做到了。请你想想看,"小机灵"是怎样做的?

设杯子编号为ABCDEF,ABC为满,DEF为空,把B中的水倒进E中即可。

【3】 三个小伙子同时爱上了一个姑娘,为了决定他们谁能娶这个姑娘,他们决定用手枪进行一次决斗。小李的命中率是30%,小黄比他好些,命中率是50%,最出色的枪手是小林,他从不失误,命中率是100%。由于这个显而易见的事实,为公平起见,他们决定按这样的顺序:小李先开枪,小黄第二,小林最后。然后这样循环,直到他们只剩下一个人。

那么这三个人中谁活下来的机会最大呢?他们都应该采取什么样的策略?

小林在轮到自己且小黄没死的条件下必杀黄,再跟菜鸟李单挑。

所以黄在林没死的情况下必打林,否则自己必死。

小李经过计算比较(过程略),会决定自己先打小林。

于是经计算,小李有873/2600≈33.6%的生机;

小黄有109/260≈41.9%的生机;

小林有24.5%的生机。

哦,这样,那小李的第一枪会朝天开,以后当然是打敌人,谁活着打谁;

小黄一如既往先打林,小林还是先干掉黄,冤家路窄啊!

最后李,黄,林存活率约38:27:35;

菜鸟活下来抱得美人归的几率大。

李先放一空枪(如果合伙干中林,自己最吃亏)黄会选林打一枪(如不打林,自己肯定先玩完了)林会选黄打一枪(毕竟它命中率高)李黄对决0.3:0.280.4可能性李林对决0.3:0.60.6可能性成功率0.73

李和黄打林李黄对决0.3:0.40.7 0.4可能性李林对决0.3:0.7 0.6 0.70.7 0.6可能性成功率0.64

【4】 一间囚房里关押着两个犯人。每天监狱都会为这间囚房提供一罐汤,让这两个犯人自己来分。起初,这两个人经常会发生争执,因为他们总是有人认为对方的汤比自己的多。后来他们找到了一个两全其美的办法:一个人分汤,让另一个人先选。于是争端就这么解决了。可是,现在这间囚房里又加进来一个新犯人,现在是三个人来分汤。必须寻找一个新的方法来维持他们之间的和平。该怎么办呢?按:心理问题,不是逻辑问题

是让甲分汤,分好后由乙和丙按任意顺序给自己挑汤,剩余一碗留给甲。这样乙和丙两人的总和肯定是他们两人可拿到的最大。然后将他们两人的汤混合之后再按两人的方法再次分汤。

【5】 在一张长方形的桌面上放了n个一样大小的圆形硬币。这些硬币中可能有一些不完全在桌面内,也可能有一些彼此重叠;当再多放一个硬币而它的圆心在桌面内时,新放的硬币便必定与原先某些硬币重叠。请证明整个桌面可以用4n个硬币完全覆盖。

要想让新放的硬币不与原先的硬币重叠,两个硬币的圆心距必须大于直径。也就是说,对于桌面上任意一点,到最近的圆心的距离都小于2,所以,整个桌面可以用n个半径为2的硬币覆盖。

把桌面和硬币的尺度都缩小一倍,那么,长、宽各是原桌面一半的小桌面,就可以用n个半径为1的硬币覆盖。那么,把原来的桌子分割成相等的4块小桌子,那么每块小桌子都可以用n个半径为1的硬币覆盖,因此,整个桌面就可以用4n个半径为1的硬币覆盖。

【6】 一个球、一把长度大约是球的直径2/3长度的直尺.你怎样测出球的半径?方法很多,看看谁的比较巧妙

把球放在平面上,把直尺的一边卡在平面上,一边卡在球上,球与尺子的接触点到平面的距离就是球的半径.因为直尺长度约为直径的2/3>半径,所以能测量.

【7】 五个大小相同的一元人民币硬币。要求两两相接触,应该怎么摆?

底下放一个1,然后2 3放在1上面,另外的4 5竖起来放在1的上面。

【8】 猜牌问题S先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌:红桃A、Q、4黑桃J、8、4、2、7、3草花K、Q、5、4、6方块A、5。约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉P先生,把这张牌的花色告诉Q先生。这时,约翰教授问P先生和Q先生:你们能从已知的点数或花色中推知这张牌是什么牌吗?于是,S先生听到如下的对话:P先生:我不知道这张牌。Q先生:我知道你不知道这张牌。P先生:现在我知道这张牌了。Q先生:我也知道了。听罢以上的对话,S先生想了一想之后,就正确地推出这张牌是什么牌。请问:这张牌是什么牌? 方块5

【9】 一个教授逻辑学的教授,有三个学生,而且三个学生均非常聪明!一天教授给他们出了一个题,教授在每个人脑门上贴了一张纸条并告诉他们,每个人的纸条上都写了一个正整数,且某两个数的和等于第三个!(每个人可以看见另两个数,但看不见自己的)教授问第一个学生:你能猜出自己的数吗?回答:不能,问第二个,不能,第三个,不能,再问第一个,不能,第二个,不能,第三个:我猜出来了,是144!教授很满意的笑了。请问您能猜出另外两个人的数吗?

经过第一轮,说明任何两个数都是不同的。第二轮,前两个人没有猜出,说明任何一个数都不是其它数的两倍。现在有了以下几个条件:1.每个数大于02.两两不等3.任意一个数不是其他数的两倍。每个数字可能是另两个之和或之差,第三个人能猜出144,必然根据前面三个条件排除了其中的一种可能。假设:是两个数之差,即x-y=144。这时1(x,y>0)和2(x!=y)都满足,所以要否定x+y必然要使3不满足,即x+y=2y,解得x=y,不成立(不然第一轮就可猜出),所以不是两数之差。因此是两数之和,即x+y=144。同理,这时1,2都满足,必然要使3不满足,即x-y=2y,两方程联立,可得x=108,y=36。

这两轮猜的顺序其实分别为这样:第一轮(一号,二号),第二轮(三号,一号,二号)。这样分大家在每轮结束时获得的信息是相同的(即前面的三个条件)。

那么就假设我们是C,来看看C是怎么做出来的:C看到的是A的36和B的108,因为条件,两个数的和是第三个,那么自己要么是72要么是144(猜到这个是因为72的话,108就是36和72的和,144的话就是108和36的和。这样子这句话看不懂的举手):

假设自己(C)是72的话,那么B在第二回合的时候就可以看出来,下面是如果C是72,B的思路:这种情况下,B看到的就是A的36和C的72,那么他就可以猜自己,是36或者是108(猜到这个是因为36的话,36加36等于72,108的话就是36和108的和):

如果假设自己(B)头上是36,那么,C在第一回合的时候就可以看出来,下面是如果B是36,C的思路:这种情况下,C看到的就是A的36和B的36,那么他就可以猜自己,是72或者是0(这个不再解释了):

如果假设自己(C)头上是0,那么,A在第一回合的时候就可以看出来,下面是如果C是0,A的思路:这种情况下,A看到的就是B的36和C的0,那么他就可以猜自己,是36或者是36(这个不再解释了),那他可以一口报出自己头上的36。(然后是逆推逆推逆推),现在A在第一回合没报出自己的36,C(在B的想象中)就可以知道自己头上不是0,如果其他和B的想法一样(指B头上是36),那么C在第一回合就可以报出自己的72。现在C在第一回合没报出自己的36,B(在C的想象中)就可以知道自己头上不是36,如果其他和C的想法一样(指C头上是72),那么B在第二回合就可以报出自己的108。现在B在第二回合没报出自己的108,C就可以知道自己头上不是72,那么C头上的唯一可能就是144了。

史上最雷人的应聘者

【10】 某城市发生了一起汽车撞人逃跑事件,该城市只有两种颜色的车,蓝15%绿85%,事发时有一个人在现场看见了,他指证是蓝车,但是根据专家在现场分析,当时那种条件能看正确的可能性是80%那么,肇事的车是蓝车的概率到底是多少?

15% 80%/(85%×20%+15% 80%)

【11】 有一人有240公斤水,他想运往干旱地区赚钱。他每次最多携带60公斤,并且每前进一公里须耗水1公斤(均匀耗水)。假设水的价格在出发地为0,以后,与运输路程成正比,(即在10公里处为10元/公斤,在20公里处为20元/公斤......),又假设他必须安全返回,请问,他最多可赚多少钱?

f(x)=(60-2x)*x,当x=15时,有最大值450。

450×4

【12】 现在共有100匹马跟100块石头,马分3种,大型马;中型马跟小型马。其中一匹大马一次可以驮3块石头,中型马可以驮2块,而小型马2头可以驮一块石头。问需要多少匹大马,中型马跟小型马?(问题的关键是刚好必须是用完100匹马) 6种结果

【13】 1=5,2=15,3=215,4=2145那么5=?

因为1=5,所以5=1.

【14】 有2n个人排队进电影院,票价是50美分。在这2n个人当中,其中n个人只有50美分,另外n个人有1美元(纸票子)。愚蠢的电影院开始卖票时1分钱也没有。问:有多少种排队方法使得每当一个拥有1美元买票时,电影院都有50美分找钱

注:1美元=100美分拥有1美元的人,拥有的是纸币,没法破成2个50美分

本题可用递归算法,但时间复杂度为2的n次方,也可以用动态规划法,时间复杂度为n的平方,实现起来相对要简单得多,但最方便的就是直接运用公式:排队的种数=(2n)!/[n!(n+1)!]。

如果不考虑电影院能否找钱,那么一共有(2n)!/[n!n!]种排队方法(即从2n个人中取出n个人的组合数),对于每一种排队方法,如果他会导致电影院无法找钱,则称为不合格的,这种的排队方法有(2n)!/ (n-1)!(n+1)! 种,所以合格的排队种数就是(2n)!/[n!n!]- (2n)!/[(n-1)!(n+1)!] =(2n)!/[n!(n+1)!]。至于为什么不合格数是(2n)!/[(n-1)!(n+1)!],说起来太复杂,这里就不讲了。

【15】 一个人花8块钱买了一只鸡,9块钱卖掉了,然后他觉得不划算,花10块钱又买回来了,11块卖给另外一个人。问他赚了多少?

2元

【16】 有一种体育竞赛共含M个项目,有运动员A,B,C参加,在每一项目中,第一,第二,第三名分别的X,Y,Z分,其中X,Y,Z为正整数且X>Y>Z。最后A得22分,B与C均得9分,B在百米赛中取得第一。求M的值,并问在跳高中谁得第二名。

因为ABC三人得分共40分,三名得分都为正整数且不等,所以前三名得分最少为6分,40=5 8=4 10=2 20=1 20,不难得出项目数只能是5.即M=5.

A得分为22分,共5项,所以每项第一名得分只能是5,故A应得4个一名一个二名.22=5*4+2,第二名得1分,又B百米得第一,所以A只能得这个第二.

B的5项共9分,其中百米第一5分,其它4项全是1分,9=5+1=1+1+1.即B除百米第一外全是第三,跳高第二必定是C所得.

【17】 前提:

1 有五栋五种颜色的房子

2 每一位房子的主人国籍都不同

3 这五个人每人只喝一种饮料,只抽一种牌子的香烟,只养一种宠物

4 没有人有相同的宠物,抽相同牌子的香烟,喝相同的饮料

提示:1 英国人住在红房子里

2 瑞典人养了一条狗

3 丹麦人喝茶

4 绿房子在白房子左边

5 绿房子主人喝咖啡

6 抽PALLMALL烟的人养了一只鸟

7 黄房子主人抽DUNHILL烟

8 住在中间那间房子的人喝牛奶

9 挪威人住第一间房子

10抽混合烟的人住在养猫人的旁边

11养马人住在抽DUNHILL烟的人旁边

12抽BLUEMASTER烟的人喝啤酒

13德国人抽PRINCE烟

14挪威人住在蓝房子旁边

15抽混合烟的人的邻居喝矿泉水

问题是:谁养鱼???

第一间是黄房子,挪威人住,喝矿泉水,抽DUNHILL香烟,养猫;! f/ [% a: 6 L! J. Q9 x第二间是蓝房子,丹麦人住,喝茶,抽混合烟,养马;+ o8 _0 S) L8 i' E' u第三间是红房子,英国人住,喝牛奶,抽PALL MALL烟,养鸟;/ N9 o/ n2 M# U" c第四间是绿房子,德国人住,喝咖啡,抽PRINCE烟,养猫、马、鸟、狗以外的宠物;7 P5 l) G, G, |; C, {7 V第五间是白房子,瑞典人住,喝啤酒,抽BLUE MASTER烟,养狗。

【18】 5个人来自不同地方,住不同房子,养不同动物,吸不同牌子香烟,喝不同饮料,喜欢不同食物。根据以下线索确定谁是养猫的人。

10.养鱼的人住在最右边的房子里。

11.吸万宝路香烟的人住在吸希尔顿香烟的人和吸“555”香烟的人的中间(紧邻)

12.红房子的人爱喝茶。

13.爱喝葡萄酒的人住在爱吃豆腐的人的右边隔壁。

14.吸红塔山香烟的人既不住在吸健牌香烟的人的隔壁,也不与来自上海的人相邻。

15.来自上海的人住在左数第二间房子里。

16.爱喝矿泉水的人住在最中间的房子里。

17.爱吃面条的人也爱喝葡萄酒。

18.吸“555”香烟的人比吸希尔顿香烟的人住的靠右

第一间是兰房子,住北京人,养马,抽健牌香烟,喝茅台,吃豆腐;2 G7 x% z0 v; C第二间是绿房子,住上海人,养狗,抽希尔顿,喝葡萄酒,吃面条;% C2 k4 o8 t" p6 L* x第三间是黄房子,住香港人,养蛇,抽万宝路,喝矿泉水,吃牛肉;& N" S% x# o3 a; g第四间是红房子,住天津人,抽555,喝茶,吃比萨;7 5 s. J# d, Q/ N% N' O# ]第五间是白房子,住成都人,养鱼,抽红塔山,喝啤酒,吃鸡。

【19】 斗地主附残局

地主手中牌2、K、Q、J、10、9、8、8、6、6、5、5、3、3、3、3、7、7、7、7

长工甲手中牌大王、小王、2、A、K、Q、J、10、Q、J、10、9、8、5、5、4、4

长工乙手中牌2、2、A、A、A、K、K、Q、J、10、9、9、8、6、6、4、4

三家都是明手,互知底牌。要求是:在三家都不打错牌的情况下,地主必须要么输要么赢。问:哪方会赢?

无解地主怎么出都会输

【20】 一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能拿到最大的一颗?

先拿下第一楼的钻石,然后在每一楼把手中的钻石与那一楼的钻石相比较,如果那一楼的钻石比手中的钻石大的话那就把手中的钻石换成那一层的钻石。

阅读全文

与程序员算法面试题相关的资料

热点内容
许志安演的电影有哪些 浏览:822
odbc文件夹是什么 浏览:391
男主用铁链囚禁女主的小说 浏览:913
sift算法harris算法 浏览:241
python命令行模式 浏览:459
新妈妈韩国电影中的辅导老师是谁 浏览:388
php邮箱验证代码 浏览:404
光猫伪装命令 浏览:175
安卓高端机为什么都用曲屏 浏览:419
老电影大全 战争片 浏览:971
有没有小电影得网址网站 浏览:378
奥特曼电影排行榜前十名 浏览:580
安卓光遇账号过期怎么找回 浏览:476
现金宝宝app在哪里能下载 浏览:277
二战女教师慰安妇电影 浏览:270
传说对决录像在哪个文件夹 浏览:136
不用充钱就能看电视剧的网站 浏览:562
卧式空气压缩机 浏览:137
合川排课管理系统源码 浏览:439