淘宝笔试&面试[转载]

1568阅读 0评论2009-10-28 greendays
分类:LINUX

1.n个节点,网络上广播。广播算法:主动发给邻居一条消息。其它节点收到消息后,会给出发给他的邻居外的所有邻居发送一条消息,发完消息后就不再有动作。如果这个网络是一棵树(n-1),完全图,超立方体。。。发送消息的复杂度是多少?

2.12个人排队,前排的比后排的矮,且每排都从左到右有序。问有多少种排法。

3.将windows和unix格式混合的文本文件a.txt转换成纯unix格式的文本文件。

4.通过ssh登陆linux服务器启动一个长时间运行的进程,放在后台运行,做也号:%1,如何避免断开ssh而导致这个进程终止。

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

文章中有这么一句

disown 示例1(如果提交命令时已经用“&”将命令放入后台运行,则可以直接使用“disown”)
                
[root@pvcent107 build]# cp -r testLargeFile largeFile &
[1] 4825
[root@pvcent107 build]# jobs
[1]+  Running                 cp -i -r testLargeFile largeFile &
[root@pvcent107 build]# disown -h %1


6.perl里面声明:open(FILE,mode,file); 操作的描述,下面哪项不正确:
1.FILE可以用变量$file代替。
2.mode可以喝file写在一起,比如open(FILE,'>file')
3.mode 为+< 时,值可以读文件, 不能写,
4.mode可以省略不写。

打开文件的常用方法是:
open(FH, " $filename")

7.循环队列,出队操作后头指针front值。

8.c类地址:192.168.5.0进行子网划分,每个子网10台主机,子网掩码为:
255.255.255.192/224/240/252;

9。n进制下,567*456 = 150216,则n等于多少

10.int my(int a){
static int count =a;
return count+a;
}

printf("%d,%d\n",my(3),my(4))

综合题:

有fav和buy两个日志文件,里面有user_id,item_id,非常大,现在想知道哪些用户在购买了某个产品的同时也收藏了这个商品,输出这些用户,以及这些既被购买又收藏的商品。


10.36层的电梯,只能停在两层,计算,电梯停在哪两层,保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。

11.测试:工厂生产一批气球,幼儿园预定了500只用于六一儿童节,如果你是工厂的质检员,负责检测气球的质量,写出你的测试方法,测试设计思路及具体的测试用例。

12.设计一个针对购物类网页的抓取系统。购物搜索,为用户提供垂直类的商品信息,但是我们知道,互联网的网页数是含量的,包含有用信息的网页却很少,如何提高效率和精确度?

13.令狐冲对屡次陷害他的师父岳不群毕恭毕敬,。你怎么看待这种行为。

14.用画面来体现你的梦想和未来。

15.JavaScript生成DOM
  

淘,你喜欢


16,根据html和css画出布局示意图


17.function dosomething()
{
alert(this);
}
element.onclick = dosomething,
element.onclick = function(){dosomething}
直接执行dosomething.

三者执行结果

18.用JavaScript写一个toRGB函数,转换css中常用的颜色编码,要求
alert(toRGB("#000FF"))  //输出rgb(0,0,255)
alert(toRGB("taobao"))  //输出taobao
alert(toRGB"#GG0000"))   //#GG0000

19.javascript 代码,可以再其他地方添加嗲吗

隔五秒钟执行上面的shout方法。




三、快速计算子网掩码的方法
最后介绍三种快速计算机子网掩码的方法。
1. 利用子网数来计算
在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。然后按以下基本步骤进行计算:
第1步,将子网数目转化为二进制来表示;
第2步,取得子网数二进制的位数(n);
第3步,取得该IP地址类的子网掩码,然后将其主机地址部分的的前n位置“1”,即得出该IP地址划分子网的子网掩码。
为了便于理解,现举例说明如下:现假如要将一B类IP地址168.195.0.0划分成27个子网,则它的子网掩码的计算机方法如下(对应以上各基本步骤):
第1步,首先要划分成27个子网,“27”的二进制为“11011”;
第2步,该子网数二进制为五位数,即n = 5;
第3步,将该B类地址的子网掩码255.255.0.0的主机号前5位全部置“1”,即可得到 255.255.248.0,这就是划分成 27个子网的B类IP地址 168.195.0.0的子网掩码。
2. 利用主机数来计算
利用主机数来计算子网掩码的方法与上类似,基本步骤如下:
第1步,将子网中需容纳的主机数转化为二进制;
第2步,如果主机数小于或等于254(因为要去掉保留的两个IP地址),则取得该主机的二进制位数,为n,这里肯定 n8,这就是说主机地址将占据不止8位。
第3步,将255.255.255.255的主机地址位数全部置1,然后从后向前的将n位全部置为 0,即为子网掩码值。
举例如下。如要将一B类IP地址为168.195.0.0的网络划分成若干子网,要求每个子网内有主机数为700台,则该子网掩码的计算方法如下(也是对应以上各基本步骤):
第1步,首先将子网中要求容纳的主机数“700”转换成二进制,得到1010111100。
第2步,计算出该二进制的位数为10位,即n = 10
第 3步,将255.255.255.255从后向前的10位全部置“0”,得到的二进制数为 “11111111.11111111.11111100.00000000”,转换成十进制后即为255.255.252.0,这就是该要划分成主机数 为700的B类IP地址 168.195.0.0的子网掩码。
3. 子网ID增量计算法
其基本计算步骤如下:
第1步,将所需的子网数转换为二进制,如所需划分的子网数为“4”,则转换成成二进制为00000100; 
第2步,取子网数的二进制中有效位数,即为向缺省子网掩码中加入的位数(既向主机ID中借用的位数)。如前面的00000100,有效位为“100”,为3位;
第3步,决定子网掩码。如IP地址为B类1129.20.0.0网络,则缺省子网掩码为:255.255.0.0,借用主机ID的3位以后变为:255.255.224(11100000)0,即将所借的位全表示为1,用作子网掩码。 
第4步,将所借位的主机ID的起始位段最右边的“1”转换为十进制,即为每个子网ID之间的增量,如前面的借位的主机ID起始位段为“11100000”,最右边的“1”,转换成十进制后为25=32。 
第5步,产生的子网ID数为:2m-2 (m为向缺省子网掩码中加入的位数),如本例向子网掩码中添加的位数为3,则可用子网ID数为:23-2=6个; 
第6步,将上面产生的子网ID增量附在原网络ID之后的第一个位段,便形成第一个子网网络ID 129.20.32.0; 
第 7步,重复上步操作,在原子网ID基础上加上一个子网ID增量,依次类推,直到子网ID中的最后位段为缺省子网掩码位用主机ID位之后的最后一个位段值, 这样就可得到所有的子网网络ID。如缺省子网掩码位用主机ID位之后的子网ID为255.255.224.0,其中的“224”为借用主机ID后子网ID 的最后一位段值,所以当子网ID通过以上增加增量的方法得到129.20.224.0时便终止,不要再添加了。



: 1、vim里怎么换行(命令模式和insert模式) 
                 这个题命令模式下回车和a都不可以。 
: 2、两个有序列表连接成一个,最少比较次数 
: 3、给一个前缀表达式,求中缀表达式 
: 4、-73的补码 
: 5、函数f【1001】=0,f【1011】=1,问可以成为f的表达式的是?我选了异或 
: 6、一数组和指向该数组的指针,指针自增后,求输出。。。 
: 问答题: 
: 1、100用户,每人好友约10个,如何准实时显示好友状态;当用户增至100万时候,会出现什么问题,你之前的方案是否仍然可行 
: 2、javascript写一个排序函数 
: 3、javascript写一个函数,每隔五秒调用某个函数 
: 4、javascript写一个函数,判断输入的字符串是否有效的email地址,用正则表达式 
: 5、html和css方面:给出代码,画出网页大体布局 
: 6、评价令狐冲对岳不群的态度 
: 7、随便涂鸦,表达你的梦想和未来打算 



编程题必做题: 
两 种编码方式G和U要进行转换,已经有了两种转换函数GtoU(),和UtoG()可以进行转换,但是现在不知道输入的字符串是G还是U编码,如果利用正 确,则能得到正确的输出,否则函数返回一个错误值。那么这时就可以调用另外一个函数,即可得到正确的转码。如果默认假设输入的字符串是U编码的,需要转换 为G编码的,调用UtoG(), 如果输入是G编码的,则需要再次调用GtoU()。但是如果给的一组字符串都是G编码的,那第一次尝试总是错误的。为了避免这样的问题,有人设计了一个根 据先验概率来尝试第一次尝试的算法:对前N次输入都假设字符串是U编码,然后对前N次尝试进行统计,如果U编码的次数大于等于50%,则下一次就假设是U 编码,调用UtoG(),否则假设下一次是G编码,并调用GtoU()。 
你的任务是计算这样的算法的正确率是多少? 
请编写函数 double GorU(int N, int M, string input) 
其中N表示当前判断是依据前N次的统计结果。M表示输入的字符串的长度,input为输入的字符串,假设输入只能是字母G和U。 
例1: 
输入:10,1,”U” 
输出:1 
 
输入:2,10,”UGUGGUUGUU” 
输出:0.5 
根据算法,每次尝试依次为 UUUUUGUUUU 
 
输入:4,14,”UGUGUUGGGGGUUG” 
输出:0.428571 
根据算法,每次依次尝试为 UUUUUUUUUGGGGU 
 
我写的代码: 
#include  
using namespace std; 
 
double GorU(int N, int M, string input) 
    int correct = 0, u = 0, cur = 0; 
    double pct = 0.0; 
    int *ref = new int[N]; 
    while (cur < M) 
    { 
        if (cur < N) 
        { 
            if (input[cur] == 'U') 
            { 
                ++u; 
                ++correct; 
                ref[cur] = 1; 
            } 
            else 
                ref[cur] = 0; 
        } 
        else 
        { 
            pct = (double)u/(double)N; 
            if ((input[cur] == 'U' && pct >= 0.5) || (input[cur] == 'G' && pct < 0.5)) 
                ++correct; 
            if (ref[cur % N] == 1) 
                --u; 
            if (input[cur] == 'U') 
            { 
                ++u; 
                ref[cur % N] = 1; 
            } 
            else 
                ref[cur % N] = 0;         
        } 
        ++cur; 
    } 
    delete ref; 
    ref = NULL; 
    return (double)correct/(double)M; 

==========   面试 ========================
话说面的时候感觉还不错呢。为什么不要我呢?


1.上来就让自我介绍了下。说了没一分钟就完了。。。我是不是应该准备一个自我介绍?

2.让我介绍下项目。把简历上的3个项目从头到尾给他介绍了下。。。但只是讲了项目的内容。没有讲我自己做的东西。。。这个是不是应该好好准备下。

3.然后就开始问c和c++的基础知识了。

大概问了以下内容:
1.服务器端socket的过程:socket,bind,listen,accept,send/recv,一开始不记得bind要不要,犹豫了下,他发现了,就揪着问,我就说是要的。client端不需要

2.问七层协议有哪七层。

3.问项目内容。和下层是怎么交互的。和上层又是怎么交互的。我就说和下层是使用它们提供的库函数,直接read和write。网上层的话是是用socket进行通信的。然后问我们的socket是客户端还是服务器端。
我想了一会,分析了一下(原来就没想过这个问题),说是客户端

1.c参数传递有哪几种方式,有很么区别。。。我说:传值,和传指针。区别就不细说了,应该是回答正确了的。
2.c++里面的复制构造函数:自己实现的复制构造函数和默认的复制构造函数有什么区别?。
我说的是默认构造函数会将对象相对应的变量都会复制过来。而如果不想要全部复制或者有别的复制方法,则需要自己定义。
3.指针和引用的区别
引用必须要在定义的时候初始化,并且不能再修改。而指针可以不需要在定义的时候初始化,并且值可以修改。
4.C和C++混合开发中extern “C”的含义:这个没回答出来。
5.问什么是僵尸进程。。。我回答成了孤儿进程。然后他就问什么是孤儿进程。我才想起来刚才回答的是孤儿进程。僵尸进程是什么呢?忘了。后来想起来,是运行完了等着回收的进程。
6.问了什么是字节对齐。我就说在struct里面,比如有一个char和一个int型的数,都应该对齐到int,四个字节。这个题没怎么回答好。。。
7.问了const成员函数有什么限制。我说只能访问const成员变量。
8.什么是死锁。这个很简单。
9.数据库用过哪些:mysql,sql server。问为什么要建立索引。索引一定能提高效率嘛?什么时候会导致性能的降低?
10.介绍struts模式。我介绍了mvc
11.介绍下EJB,这个不太记得了。只是说是企业级应用bean,提高复用用的。
12, 大端模式,小端模式

128 位机器的sizeof int是多少。为了效率,16个byte(寄存器是16个byte)比较好,但是还应该和编译器有关系。
1. 不能想当然的认为sizeof(int)一定是4或者8,64位cpu下与编译器相关:
2. 64位cpu下指针的大小变为8个字节
3. sizeof(long)的值根据不同的编译器可能会有变化

An int is usually the size of a single register on the processor on which your software is built to run. So for 16 bit operating systems (e.g. Windows 3.1, MSDOS), that'll be 16 bits, for 64 bit operating systems, its 64 bits.

You really shouldn't be relying on integers being a specific size, if you want to use fixed-size integers, then you'll find there are other declarations that you can use, but take care here, some of these can be compiler-based.


4. 在平时的编程过程中,不能固定下一种思维,认为sizeof(int)一定是某个数值,为以后程序向64位cpu移植时埋下隐患


64位是处理器一次能处理的字长,跟编译器中的int没有直接关系

整型量所占的长度和计算机的CPU字长有关,在16位机上整型量就占16位,在32位机上整型量就占32位,在64位机上整型量就占64位,即8个字节。

这种规定跟编译器有关,就看编译器怎么设计的了。

发表于: 2009-10-22 ,修改于: 2009-10-22 10:52,已浏览574次,有评论0条 推荐 投诉



网友评论

上一篇:VMware-NIC problem
下一篇:url区分大小写吗?