- 浏览: 121427 次
- 来自: ...
-
文章分类
最新评论
拿到一份对应届毕业生的面试题:
2. 问题:
a) 请描述数组(array)和链表(link list)的相同点和不同点?
答案:
都是线性有序结构,数组是一块连续的内存区,可以通过index直接存取,访问速度较快,但是插入删除要移动其他单元。增加长度时可能需要重新分配内存。占用内存较少。
链表每个存储单元有指针指到下一个单元,占用内存较多,插入删除方便快速,只需要重设指针,增加长度无需重新分配内存。
b) 哪一个占用内存少,哪一个插入删除比较快。为什么?
答案: 数组占用内存较少,不需要额外空间保存指针。插入删除要批量移动数据所以较慢。链表插入删除只需要调整指针,所以较快,要存储指针所以内存占用多。
数组是不能插入和删除的,问题应该精确一点,应该说“基于数组的数据结构”
3. 问题:
a) 请问哈希表(hashtable)是如何存储数据的?
答案: Hashtable是用来存储key和value对的数据结构, 根据设定的hash函数H(key)和处理冲突的方法将一组关键字(key)映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象”作为记录在表中存储位置,这种表便成为hashtable.
b) 是否两个键值通过hash函数产生的映射地址会一样?怎么办?
答案: 是,一般情况下,完全避免冲突是很难的。因为通常关键字集合会比目标地址空间大。哈希函数要尽量避免冲突(避免不同的关键字产生相同的hash值),使一组关键字的哈西地址尽可能的均匀分布在整个地址区间。所以有一些冲突处理方法:开放定址法,再哈希法,链地址法(用链表保存冲突的值),公共溢出区。
关于哈希表,有个与实际编程更密切的问题可以一问:为保证逻辑上的正确性,哈希表对可以作为键值的类型有什么要求?
-
C++:除容器对元素类型的标准需求外,还需overload == 和 <
-
Java:需override equals(逻辑上的正确性)和hashCode(性能)
-
C#:需override Equals(逻辑上的正确性)和HashCode(性能)
4. 问题:
a) 冒泡(bubble sort)和快速排序(quick sort)的区别?它们的时间复杂度?
冒泡:每趟排序将最大值安置到最后一个位置上,时间复杂度为 O(n平方).
快速排序法是对起泡排序法的一种改进,基本思想是通过一趟排序将待排序纪录分割成独立的两部分,其中一部分纪录的关键字均比另一部分纪录的关键字小,则可以分别对这两部分纪录继续进行排序,以达到整个序列有序。时间复杂度为 O(NlogN).
b) 在什么情况下快速排序的效果最差?
答案:输入数据逆序排列时效果最差,蜕化成冒泡
5. 问题:
a) 程序运行时,在堆(heap)和栈(stack)上分配内存有什么区别?
栈用来保存局部变量,函数返回值,参数等。在函数返回时会退栈(pop).
堆用来分配空间给动态生成的对象。
6. 问题
C/C++或者java中函数调用时传递参数有几种方法,区别是什么?
答案:传值和传引用或指针
int,float,long等primitive是传值
对值的修改会在函数返回退栈时丢失。
对象类型传引用或指针
通过指针或引用可以访问并修改对象的属性。
这个问题的答案基本上是语无伦次的,居然还有传指针这种方式
-
C++:缺省传值,不管primitive还是custom class类型,显式使用&修饰后传引用,不管primitive还是custom class类型
-
Java:只有传值一种方式,不管primitive还是custom class
-
C#:缺省传值,不管primitive还是custom class,显式使用out或ref修饰后传引用,不管primitive还是custom class
总之,参数传递方式和数据类型是没有关系的,关于这个问题,误解甚多,之前曾经也说过,其实对C++的误解倒不是很多,受害的基本都是被 业余教材耽误的Java程序员,请转载,转贴下面这段话,一定要把这个错误观念纠正过来!纠正过来!纠正过来!
“Some people will say incorrectly that objects are passed "by reference." In programming language design, the term pass by reference properly means that when an argument is passed to a function, the invoked function gets a reference to the original value, not a copy of its value. If the function modifies its parameter, the value in the calling code will be changed because the argument and parameter use the same slot in memory. If the Java programming language actually had pass-by-reference parameters, there would be a way to declare halveIt so that the above code would modify the value of one, or so that commonName could change the variable sirius to null. This is not possible. The Java programming language does not pass objects by reference; it passes object references by value. Because two copies of the same reference refer to the same actual object, changes made through one reference variable are visible through the other. There is exactly one parameter passing modepass by valueand that helps keep things simple.”
---<The Java Programming Language> 4th Edition, 2.6.5. Parameter Values
其实,在Java中,是无法写出一个swap函数,来交换两个参数的值的
a = object1 = new SomeClass();
b = object2 = new SomeClass();
swap(a, b);
assert a == object2; //这样一个swap函数是不存在的
assert b == object1; //这样一个swap函数是不存在的
7. 问题:
a) 面向对象设计的3个原则是什么?
答案:
Encapsulation(封装), Inheritance(继承), Polymorphism(多态).
首先问题本身还是不够确切,如果是问原则的话,可以回答诸如“Liskov替换原则”,“开闭原则”,“依赖倒置原则”等,甚至“包含优先继承”,“针对接口编程”等,从答案看,似乎“面向对象的3个本质特征是什么”,或者“满足哪3个特征的程序才是面向对象程序”更合适些
其次,答案也不算准确,我的理解是“多态”才是面向对象的本质特征,继承只是实现多态的一种手段,或许有复用目的,但复用与面向对象无关;举例来说:
-
不支持继承的C语言,依然可以写出面向对象的程序,使用函数指针来得到多态行为
-
如果C语言的例子不足以说明问题,那么Java总可以了吧,Java中使用反射按方法名称调用,依然可以实现多态,写出面向对象的程序,在此过程中,继承无影无踪
-
AOP,呵呵,不是Aspect,讨论Attribute Oriented足矣,此时继承依然不见踪影,而程序依然多态,依然面向对象
b) Java:
Java中class是否可以继承多少个父类?不能,只能继承一个
Java中class是否可以实现多少个接口?没有限制
Java中一个interface可以继承多少个interface?没有限制
Java中所有类都继承同一个父类吗?YES, from Object.
这样做有什么好处?Vector, Hashmap等操作Object,可应用于各种class.
这样做有什么坏处?没有编译时类型检查。JDK1.5增加了类似模板的语法来解决这类问题。
单根和多根之间的争论不是这么简单就说清楚的,不过面试题毕竟是对应届毕业生
c) C++:
class是否可以继承多个父类?是
所有类都继承一个父类吗?否
一个子类的指针可以指向一个父类的实例吗?不行。
命名空间解决什么问题?避免几个不同库中的命名冲突。
模板的用途是什么?用相同的代码处理不同的对象类型,可以有编译时类型检查。
可以定义Virtual destructor吗?是
发表评论
-
The Object Primer
2004-12-11 11:21 6081,书名 被翻译成“ ... -
错误处理规范
2004-12-11 16:47 766错误处理规范 〇、概念澄清 概念 解释 错误 ... -
Java,误解为何如此之深
2005-08-24 13:50 597前几天被电话面试,问J ... -
Java:画蛇添足的编码规范
2005-09-02 13:13 645前几天公司培训编码规范: 第n条: ... -
synchronized : 规则, 推论与实践
2007-07-23 22:32 48714.3.Synchronization. Rule ... -
交互设计: 股市帮凶
2008-05-04 21:30 659同事 Y 在线操作股票时, 把"买入"点成 ... -
交互设计: 火车上的厕所
2008-05-26 17:17 625有人在动车组的厕所前等了很久, 直到乘务员路过说厕所是被锁住了 ... -
设计原则与模式: 案例介绍--CppUnit
2008-06-01 20:15 657设计原则与模式: 案例介绍--CppUnit CppUnit ... -
工作流:形参,实参,相关数据
2004-12-11 11:40 686关于形参,实参,相关数据 一、形参(FormalParame ... -
工作流:第一次发版,过程总结
2004-12-11 11:42 718交流 即时讨论:小组成员咫尺之遥,有问题立即提出并解决 ... -
工作流:第一次发版,设计总结
2004-12-11 11:43 633整体 面向接口:消息系统,持久系统等,其实现都是可替换 ... -
Beyond Workflow : An Introduction to Vitria BusinessWare
2005-09-26 10:13 811一、简介 Busines ... -
Vitria BusinessWare: 存储与访问安全
2006-03-26 15:45 762事实上,BusinessWare使用LDAP做为存储机制和 ... -
Vitria BusinessWare: 平台与软件总线
2006-04-01 12:59 869经过一段时间的使用 ... -
Vitria BusinessWare: Web Services
2006-04-01 14:30 776BusinessWare的Web Services ... -
Web Services:自洽,编码,交换模型
2006-04-01 16:02 7051, 自洽 以前曾经写过: 目前WebServi ... -
Web Services:WSDL 1.1 规范中的几个错误
2006-04-01 16:40 746读完了WSDL 1.1的规范,令人惊讶的是发现似乎例子中有几个 ... -
C++/CLI:被忽视的集成技术
2006-05-17 20:02 791十几行代码,就使一个重要的旧系统组件,完全融入了基于.Ne ... -
AJP/JK:异构Web平台的集成技术
2006-05-25 21:44 729Tomcat Connector 可以将Tomcat ... -
Vitria BusinessWare: 事件与端口
2006-05-27 17:24 703Event BusinessWare是一个事件驱动的系统 ...
相关推荐
applicant.data
《Manual for the Applicant》(《申请人手册》)是联合国为其有志于加入该组织工作的申请者准备的一份重要文件。手册的目标受众是那些怀揣理想,希冀在全球最具有影响力的国际组织中贡献自己的力量的人们。这份手册...
《申请人手册》是一本为联合国工作人员选拔系统(inspira)求职者准备的指南,旨在帮助求职者理解和遵循申请流程。该手册于2012年发布(版本2.2),由联合国版权所有。... 知识点一:联合国职位门户和inspira系统 ...
申请人追踪系统( Applicant Tracking System,简称ATS)是企业招聘流程自动化的一种工具,它帮助企业更高效地管理和筛选求职者的申请。这种系统通常与企业的人力资源管理软件集成,能够收集、整理和过滤大量的应聘...
语言:English从LinkedIn导入候选人到Applicant.io。此Google Chrome扩展程序使您可以将LinkedIn中的个人资料直接导入Applicant.io的人才库。然后,您可以轻松地寻找合适的人才,并与候选人联系以申请您可能拥有的...
自述文件该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明...
自荐书封面是指在求职过程中,applicant向招聘单位提交的,介绍自己的技能、经验、学历和其他相关信息的文件。该文件的主要目的是为了让招聘单位了解applicant的背景和能力,以便进行初步的甄选。自荐书封面通常包括...
语言:English (United States) 100Hires是一个申请人跟踪系统和招聘软件,用于从Linkedin,Github和Gmail中寻找和雇用候选人 100Hires是一个免费的申请人跟踪系统,可用于从以下位置获取和导入候选人:Gmail,...
### 知识点一:格拉斯哥大学简介 - **历史背景**:格拉斯哥大学成立于1451年,是苏格兰最早的高等学府之一,并且在英国范围内也是历史悠久的大学。 - **学术地位**:这所综合性研究型大学在多个学科领域内享有极高...
本文将深入探讨"applicant-game"这一项目,它是一个用于Spil Games工作的申请游戏,旨在考察应聘者的JavaScript编程能力以及对游戏开发的理解。 一、JavaScript基础 JavaScript是Web开发的核心技术之一,主要用于...
Applicant Tracking System (ATS) 是一种专为招聘过程设计的软件工具,用于自动化和优化人才获取流程。在本文中,我们将深入探讨ATS的核心功能、它如何与Python编程语言结合使用,以及相关的开发和实现细节。 1. ...
CATS 是业界第一个开源申请人跟踪系统 (ATS)。 基于 LAMP 平台(Linux、Apache、MySQL 和 PHP)构建。 具有申请人跟踪、简历搜索、CRM 和用于人员配备机构和公司人力资源部门的报告仪表板。
对这些问题的回答,需要 applicant 们能够清晰、简洁地介绍自己,强调自己的优点和技能,并展示自己的人生经历和成长过程。 思路: * 请谈一下你自己的一些情况:需要applicant 们能够在2分钟内自我介绍,强调自己...
简单的包装,允许模型应用并从其他模型...composer require te7a-houdini/laravel-applicant 然后发布配置和迁移: php artisan vendor:publish --provider= " Te7aHoudini\LaravelApplicant\LaravelApplicantServ
在学习能力方面,applicant展示了自己的科研能力,熟练地进行Windows和Linux操作,并能使用VB、Delphi等语言编程。在实践能力方面,applicant强调了自己的软件开发经验,曾经开发了多个系统,如人事档案管理系统和...
懒惰的申请人。... ... ... ... ...◆如何使用〜安装〜1....〜商店模板〜1....⇒模板存储在插件中〜模板的使用〜1....在“很多用户属于项目的同时,不仅分配多...https://bitbucket.org/dhun-h/lazy-applicant-support 支持语言:English,日本語
语言:English,日本語 懒惰申请人。... 此插件有助于在Redmine的票证登记屏幕中输入工作。...◆如何使用〜安装〜1.... ⇒此刻,PC没有明显的变化。〜Store Template〜1.... ⇒它由插件添加部分将从一侧到侧面摇摆2....
实验室申请人门户这是一个单存储库,其中包含ZAP申请人门户的服务器代码和客户端代码。本地开发的必备SSL设置为了使Cookie在本地开发期间在客户端和服务器上都... 稍后,您将需要将这些文件复制/粘贴到labs-applicant-