ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:37.88KB ,
资源ID:6475085      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6475085.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一篇完整的网易笔试题.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

一篇完整的网易笔试题.docx

1、一篇完整的网易笔试题一篇完整的网易笔试题发布时间:2010-11-04 来源:应届毕业生求职网卷(研发类笔试题)第一部分(必做): 计算机科学基础1. (单选)软件设计中模块划分应该遵循的准则是: A.低内聚低耦合 B.高内聚低耦合 C.低内聚高耦合 D.高内聚高耦合2. (单选)最坏情况下时间复杂度不是n(n-1)/2的排序算法是: A.快速排序(n2) B.冒泡排序(n2) C.直接插入排序(n2) D.堆排序(nlogn)3. 哈希表中解决冲突的方法通常可以分为open addressing和chaining两类, 请分别解释这两类冲突解决方法的大致实现原理/见书4. 简单的链表结构拥有

2、很好的插入 删除节点性能, 但随机定位(获取链表第n个节点)操作性能不佳, 请你设计一种改进型的链表结构优化随机定位操作的性能, 给出设计思路及其改进后随机定位操作的时间复杂度具体参见Purely Functional Random-Access Lists.pdf大概地说,节点构成多棵相连的完全二叉树来表示(为了不浪费节点),存取顺序为前序遍历。复杂度为O( logn)这里有代码http:/www.cs.oberlin.edu/jwalker/ra-list/5. 什么是NP问题?列举典型的NP问题(至少两个)?对于一个给定的问题你通常如何判断它是否为NP问题?NP(Nondetermini

3、stic Polynomial问题)。但是对于很多问题来说,他们找不到一个多项式的解决方法,只能“尝试”很多种方案 才能够得出一个答案,这显然是很费时的,这种问题未NP问题。 NPC(NP Complete)问题,可以这么认为,这种问题只有把解域里面的所有可能都穷举了之后才能得出答案,这样的问题是NP里面最难 旅行商问题 TSP Travelling Salesman Problem子集和问题 Hamilton回路 要满足两个条件:1.封闭的环2.是一个连通图,且图中任意两点可达经过图(有向图或无向图)中所有顶点一次且仅一次的通路称为哈密顿通路。经过图中所有顶点一次且仅一次的回路称为哈密顿回路

4、。最大团问题6. 以下是一个tree的遍历算法, queue是FIFO队列, 请参考下面的tree, 选择正确的输出.1/ 2 3/ / 4 5 6 7queue.push(tree.root)while(true)node=queue.pop();output(node.value);/输出节点对应数字if(null=node) break;for(child_node in node.children) queue.push(child_node);A. 1234567B. 1245367C. 1376254D. 1327654第二部分(选作): C/C+程序设计1. 有三个类A B C定

5、义如下, 请确定sizeof(A) sizeof(B) sizeof(C)的大小顺序, 并给出理由struct AA() A() int m1;int m2;struct BB() B() int m1;char m2;static char m3;struct CC() virtualC() int m1;short m2;/8 /8 /122. 请用C+实现以下print函数,打印链表I中的所有元素, 每个元素单独成一行void print(const std:list &I)#include #include void print(const std:list &I) std:list:

6、const_iterator iter; for(iter=I.begin();iter!=I.end();iter+) printf(%dn,*iter);int main()std:list L;L.push_back(1);L.push_back(2);L.push_back(3);print(L);return 0;3. 假设某C工程包含a.c和b.c两个文件,在a.c中定义了一个全局变量foo, 在b.c中想访问这一变量时该怎么做?增加一个a.h,写上extern int foo,然后让a.c和b.c都包含a.h4. C+中的new操作符通常完成两个工作, 分配内存及其调用相应的构造

7、函数初始化请问:1) 如何让new操作符不分配内存, 只调用构造函数?2) 这样的用法有什么用?解答:(要求new显式调用构造函数,但不分配内存。)题目要求不能生成内存 还要调用构造函数 说明这个类里面没有对内部操作 但可以对外部操作 比如static的数摘录:如果我是用new分配对象的,可以显式调用析构函数吗?可能不行。除非你使用定位放置 new.class Fredpublic: Fred() coutfuck; ;int main() Fred*f=new(void*)10000)Fred(); system(pause); 其中这个10000可以是任意数,但不能为02)定位放置new(

8、placement new)有很多作用。最简单的用处就是将对象放置在内存中的特殊位置。这是依靠 new表达式部分的指针参数的位置来完成的:#include / 必须 #include 这个,才能使用 placement new#include Fred.h / class Fred 的声明void someCode() char memorysizeof(Fred); / Line #1 void* place = memory; / Line #2 Fred* f = new(place) Fred(); / Line #3 (详见以下的“危险”) / The pointers f and

9、place will be equal / .Line #1 在内存中创建了一个sizeof(Fred)字节大小的数组,足够放下 Fred 对象。Line #2 创建了一个指向这块内存的首字节的place指针(有经验的 C 程序员会注意到这一步是多余的,这儿只是为了使代码更明显)。Line #3 本质上只是调用了构造函数 Fred:Fred()。Fred构造函数中的this指针将等于place。因此返回的 f 将等于place。Line #3 本质上只是调用了构造函数 Fred:Fred()。*placementnew的作用就是:创建对象但是不分配内存,而是在已有的内存块上面创建对象。用于需要

10、反复创建并删除的对象上,可以降低分配释放内存的性能消耗。#include#includeconstintchunk=16;classFoopublic:intval()return_val;Foo()_val=0;private:int_val;/预分配内存,但没有Foo对象char*buf=newcharsizeof(Foo)*chunk;intmain(void)/在buf中创建一个Foo对象Foo*pb=new(buf)Foo;/检查一个对象是否被放在buf中if(pb-val()=0)coutnewexpressioworked!endl;/到这里不能再使用pbdeletebuf;re

11、turn0;#include using namespace std;class a int mV;public: void *operator new(size_t size,void *mem) return mem; a(int v) printf(a constructorn); mV=v; a() printf(a destructorn); void pr() printf(%dn,mV); ;int main() a a1(1); a1.pr(); void *p=&a1; a *a2=new(p)a(2); a2-pr(); a1.pr(); return 0;5. 下面这段程

12、序的输出是什么?为什么?class Apublic:A()p();virtual void p()print(A)virtual A()p();class Bpublic:B()p();void p()print(B)B()p();int main(int, char*)A* a=new B();delete a;6. 什么是C+ Traits? 并举例说明http:/accu.org/index.php/journals/442Think of a trait as a small object whose main purpose is to carry information used

13、by another object or algorithm to determine policy or implementation detailsTraits可以说是一个小小的信息体,其它对象或算法可以根据它来选择不同的执行政策功实现细节。比如std中numeric_limits:max()第三部分(选作): JAVA程序设计1. (单选)以下Java程序运行的结构是:public class Testerpublic static void main(String args) Integer var1=new Integer(1); Integer var2=var1; doSomet

14、hing(var2); System.out.print(var1.intValue(); System.out.print(var1=var2);public static void doSomething(Integer integer)integer=new Integer(2);A. 1trueB. 2trueC. 1falseD. 2falsejava中的值传递和引用传递值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法

15、执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。下面举例说明:传值-传递基本数据类型参数publicclassPassValuestatic void exchange(int a, int b)/静态方法,交换a,b的值int temp;temp = a;a = b;b = temp;public static void main(String args)int i = 10; int j = 100;System.out.println(before call: + i= + i + t + j = + j);/调用前exchange(i

16、, j);/值传递,main方法只能调用静态方法System.out.println(after call: + i= + i + t + j = + j);/调用后运行结果:before call: i = 10j = 100aftercall: i = 10j = 100说明:调用exchange(i, j)时,实际参数i,j分别把值传递给相应的形式参数a,b,在执行方法exchange()时,形式参数a,b的值的改变不影响实际参数i和j的值,i和j的值在调用前后并没改变。引用传递-对象作为参数如果在方法中把对象(或数组)作为参数,方法调用时,参数传递的是对象的引用(地址),即在方法调用时

17、,实际参数把对对象的引用(地址)传递给形式参数。这是实际参数与形式参数指向同一个地址,即同一个对象(数组),方法执行时,对形式参数的改变实际上就是对实际参数的改变,这个结果在调用结束后被保留了下来。class BookString name;private folat price;Book(String n,float )/构造方法name = n;price = p;staticvoid change(Book a_book,String n,float p)/静态方法,对象作为参数a_book.name = n;a_book.price = p;public void output()/实

18、例方法,输出对象信息System.out.println(name: + name + t + price: + price);public class PassAddrpublic static void main(String args)Book b = new Book(java2,32.5f);System.out.print(before call:t);/调用前b.output();b.change(b,c+,45.5f);/引用传递,传递对象b的引用,修改对象b的值System.out.print(after call:t);/调用后b.output();运行结果:beforec

19、all:name:java2price:32.5aftercall:name:c+price:45.5说明:调用change(b,c+,45.5f)时,对象b作为实际参数,把引用传递给相应的形式参数a_book,实际上a_book也指向同一个对象,即该对象有两个引用名:b和a_book。在执行方法change()时,对形式参数a_book操作就是对实际参数b的操作。而题目中的Integer属于基础类型,和int一样对待2. (单选)往OuterClass类的代码段中插入内部类声明, 哪一个是正确的:public class OuterClassprivate float f=1.0f;/插入代

20、码到这里A.class InnerClasspublic static float func()return f; /错,static函数不能在非静态的内嵌类中定义,另外不能引用非静态的fB.abstract class InnerClasspublic abstract float func() /错,abstract函数无bodyC.static class InnerClassprotected static float func()return f; /错, 不能引用非静态的fD.public class InnerClassstatic static float func()retu

21、rn f; /错,3. Java中的interface有什么作用? 举例说明哪些情况适合用interface, 哪些情况下适合用抽象类.When To Use InterfacesAninterfaceallows somebody to start from scratch to implement yourinterfaceor implement yourinterfacein some other code whose original or primary purpose was quite different from yourinterface. To them, yourint

22、erfaceis only incidental, something that have to add on to the their code to be able to use your package. The disadvantage is every method in the interface must bepublic. You might not want to expose everything.When To Use Abstract classesAnabstractclass, in contrast, provides more structure. It usu

23、ally defines some default implementations and provides some tools useful for a full implementation. The catch is, code using itmustuse your class as the base. That may be highly inconvenient if the other programmers wanting to use your package have already developed their own class hierarchy indepen

24、dently. In Java, a class can inherit from only one base class.更具体4. Java多线程有哪几种实现方式? Java中的类如何保证线程安全? 请说明ThreadLocal的用法和适用场景书java synchronized详解(一)文章分类:Java编程Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这

25、个代码块以后才能执行该代码块。 二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。 三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。 四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该ob

26、ject对象所有同步代码部分的访问都被暂时阻塞。 五、以上规则对其它对象锁同样适用.举例说明: 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。package ths;public class Thread1 implements Runnable public void run() synchronized(this) for (int i = 0; i 5; i+) System.out.println(Thread.currentThread().getName() + synchronized loop + i); public static void main(String ar

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1