笔试错误2

12、文件长度是一个大于0的整数,用变量unsigned file_length; 来表示,把文件分成块,每块的长度也是一个大于0的整数,用变量unsigned block_length; 来表示,则文件被分成的块数为()
A、file_length/block_length                                            B、file_length/block_length+1         
C、(file_length+block_length-1)/block_length                D、((file_length-1)/block_length+1 

 13、整数int i = 0xFE78DA45; int k = 0xAC3189B2;则i^k的值为()
A、0x524953f7         B、0xAC308800          C、0xFE79DBF7           D、0X0000001

????

以下是淘宝面试题

http://blog.csdn.net/hackbuteer1/article/details/6823329

1、我们有很多瓶无色的液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常。现在有5只小白鼠,请问一下,我们用这五只小白鼠,5分钟的时间,能够检测多少瓶液体的成分(C)
A、5瓶                     B、6瓶                           C、31瓶                               D、32瓶

4、可用来检测一个web服务器是否正常工作的命令是()

A、ping                      B、tracert                          C、telnet                           D、ftp

ping 是 检测网络是否通

8、在公司局域网上ping www.taobao.com没有涉及到的网络协议是()

A、ARP                          B、DNS                               C、TCP                         D、ICMP

DNS是将域名www.taobao.com映射成主机的IP地址,ARP是将IP地址映射成物理地址,ICMP是报文控制协议,由路由器发送给执行ping命令的主机,而一个ping命令并不会建立一条TCP连接,故没有涉及TCP协议。

6、IPV6地址包含了()位
A、16                               B、32                                C、64                              D、128

5、下面哪个操作是Windows独有的I/O技术()
A、Select                           B、Poll                               C、IOCP                               D、Epoll

2、在高性能服务器的代码中经常会看到类似这样的代码:
typedef union
{
  erts_smp_rwmtx_t rwmtx;
  byte cache_line_align_[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(sizeof(erts_smp_rwmtx_t))];
}erts_meta_main_tab_lock_t;

erts_meta_main_tab_lock_t main_tab_lock[16];

请问其中用来填充的cache_line_align的作用是?

  cpu的cache line 是缓存操作的最小单元,但是一个line有可能包含线程1需要的数据和线程2需要的数据,所以当线程1修改了它的数据,所以需要缓存一致性,同步其它线程的缓存,但是由于line是一整个操作的,所以它认为线程2的缓存也需要同步。所以,这个会导致严重的性能问题. 这就是所谓的False sharing问题。

  

  解决方法很简单:
  把每个项凑齐cache line的长度,实现隔离.

typedef union {
    erts_smp_rwmtx_t rwmtx;
    byte cache_line_align__[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(
				sizeof(erts_smp_rwmtx_t))];
} erts_meta_main_tab_lock_t;
或者
_declspec (align(64)) int thread1_global_variable;
__declspec (align(64)) int thread2_global_variable;

  这就是为什么在高性能服务器中到处看到cache_line_align, 号称是避免cache的trash.

 以下是阿里巴巴笔试

3、下列关于文件索引结构的叙述中,哪一个是错误的?
A、采用索引结构,逻辑上连续的文件存放在连续的物理块中
B、系统为每个文件建立一张索引表
C、索引结构的优点是访问速度快,文件长度可以动态变化
D、索引结构的缺点是存储开销大

  文件索引结构是非聚集索引,数据库索引当中有聚集索引是因为有很多时候都需要范围查询,而文件中很少需要。

 6、在一个长为33厘米的光滑凹轨上,在第3厘米、第6厘米、第19厘米、第22厘米、第26厘米处各有一个钢珠,凹轨很细,不能同时通过两个钢珠,开始时,钢珠运动方向是任意的。两个钢珠相撞后,以相同速度反向运动。假设所有钢珠初始速度为每秒运动1厘米,那么所有钢珠离开凹轨的最长可能时间是()
A、30                     B、26                        C、38                      D、33

11、假设在n进制下,下面的等式成立,n值是() 567*456=150216
A、9                B、10                 C、12                     D、18

假设是X进制,则567=7+6*X+5*X^2,456=6+5*X+4*X^2,所以564*456=(7+6*X+5*X^2)*(6+5*X+4*X^2)而150216=6+X+2*X^2+5*x^4+X^5,由于567*456=150216,则6+X+2*X^2+5*x^4+X^5=(7+6*X+5*X^2)*(6+5*X+4*X^2),最后解出来X=18

20、判断一个单向链表中是否存在环的最佳方法是()
A、两重遍历      B、快慢指针      C、路径记录       D、哈希表辅助

24、一个有趣的抛硬币问题 :概率问题
假设有一个硬币,抛出字(背面)和花(正面)的概率都是0.5,而且每次抛硬币与前次结果无关。现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止,问平均要抛多少次才能结束游戏?注意,一旦连续抛出两个“字”向上游戏就结束了,不用继续抛。

http://www.cnblogs.com/atyuwen/archive/2010/09/12/coin.html

25、问题描述 :递归概率问题
12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
这个笔试题,很YD,因为把某个递归关系隐藏得很深。

http://blog.csdn.net/suyksuyk/article/details/4697941

http://www.cnblogs.com/wuyuegb2312/p/3016878.html

编程之美 4.3买票找零 

 百度|腾讯面试题

http://blog.csdn.net/hackbuteer1/article/details/7348968

题中包含大量大数据的解法,很具有参考意义。多数题,不会

1、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。

2.腾讯面试题:求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。

  变化情况 -> 递归!就像蚂蚁爬杆问题那样,我们不需要区分个体,只需要它的变化值。

11、如何找出字典中的兄弟单词。给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有多少个兄弟单词?

  使用hash_map和链表
  首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd,good的key为dgoo。
  使用链表将所有兄弟单词串在一起,hash_map的key为单词的key,value为链表的起始地址。
  开始时,先遍历字典,将每个单词都按照key加入到对应的链表当中。当需要找兄弟单词时,只需求取这个单词的key,然后到hash_map中找到对应的链表即可。
  这样创建hash_map时时间复杂度为O(n),查找兄弟单词时时间复杂度是O(1)。

 20、将多个集合合并成没有交集的集合。
  给定一个字符串的集合,格式如:{aaabbbccc},{bbbddd},{eeefff},{ggg},{dddhhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaabbbcccdddhhh},{eeefff},{ggg}。
  (1)请描述你解决这个问题的思路;
  (2)请给出主要的处理流程,算法,以及算法的复杂度
  (3)请描述可能的改进。

网易游戏

http://blog.csdn.net/hackbuteer1/article/details/6878570

2、如果X大于0并小于65536,用移位法计算X乘以255的值为:    (X<<8)-X

 未

2013豆瓣

http://blog.csdn.net/hackbuteer1/article/details/11263443

5、已知一张员工数据表A的表结构如图,请用一条SQL语句列出所有的工作岗位(JOB字段)的平均工资,并将其按照平均工资用升序排列。
A {
     ENAME VARCHAR(20)
     JOB   VARCHAR(20)
     SALARY NUMBER(5)
}

select 班级,avg(成绩) from 表名1,表名2,······ WHERE 条件
降序
SELECT *
FROM kc
ORDER BY cpbh DESC
升序
SELECT *
FROM kc
ORDER BY cpbh ASC

 6、描述在浏览器中敲入一个网址并按下回车后所发生的事情(尽量详细)

2013网新恒天

http://blog.csdn.net/hackbuteer1/article/details/11194703

  不论是硬件临界资源,还是软件临界资源,多个线程必须互斥地对它进行访问。每个线程中访问临界资源的那段代码称为临界区(Critical Section)

2012届华为校园招聘机试题

http://blog.csdn.net/hackbuteer1/article/details/11161557

3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,优先级相同的任务按照入队顺序排列(即先入队的任务排在前面),数组元素为-1表示结束。
      例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}    system_task[] = {0, 3, 1, 7, -1}    user_task[] = {4, 8, 2, 6, -1}

 1 package test;
 2 /**
 3  *         操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。
 4  * 其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。
 5  * 现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。
 6  * 函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中
 7  * (数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,优先级相同的任务按照入队顺序排列(即先入队的任务排在前面),
 8  * 数组元素为-1表示结束。
 9  * 
10  * 例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}
11  *     system_task[] = {0, 3, 1, 7, -1}
12  *     user_task[] = {4, 8, 2, 6, -1}
13  * @author hasee
14  *
15  */
16 public class test {
17     public static void main(String[] args) {
18         int task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99};
19         int systemTask[] = new int[22];
20         int userTask[] = new int[22];
21         scheduler(task, systemTask,userTask);
22         System.out.println("systemTask");
23         for (int i : systemTask) {
24             if (i!=-1)
25                 System.out.print(i+" ");
26             else{
27                 System.out.print(i+" ");
28                 System.out.println();
29                 break;
30             }
31         }
32         System.out.println("userTask");
33         for (int i : userTask) {
34             if (i!=-1)
35                 System.out.print(i+" ");
36             else{
37                 System.out.print(i+" ");
38                 System.out.println();
39                 break;
40             }
41         }
42     }
43     //更换存储为下标,更改比较方式
44     public static void scheduler(int task[], int systemTask[], int userTask[]){
45         if (task==null||systemTask==null||userTask==null) 
46             return;
47         int sys=0,user=0;
48         for (int i=0;i<task.length;i++) {
49             if (task[i]<50) {
50                 systemTask[sys++] = i;
51                 int p=sys-2,q=sys-1;    //错误::~没有检查 p是否大于0 错误2。等于0也可以
52                 while (p>=0 && task[systemTask[p]]>task[systemTask[q]]) //插入排序
53                     swap(systemTask,q--,p--);
54             }else if(task[i]<=255 && task[i]>=50){
55                 userTask[user++] = i;
56                 int p=user-2,q=user-1;
57                 while (p>=0 && task[userTask[p]]>task[userTask[q]]) 
58                     swap(userTask,q--,p--);
59             }else continue;
60         }
61         systemTask[sys]=-1;
62         userTask[user]=-1;
63     }    
64     //直接存储元素
65     public static void schedulerError(int task[], int systemTask[], int userTask[]){
66         if (task==null||systemTask==null||userTask==null) 
67             return;
68         int sys=0,user=0;
69         for (int i : task) {
70             if (i<50) {
71                 systemTask[sys++] = i;
72                 int p=sys-2,q=sys-1;    //错误::~没有检查 p是否大于0 错误2。等于0也可以
73                 while (p>=0 && systemTask[p]>systemTask[q]) 
74                     swap(systemTask,q--,p--);
75             }else if(i<=255 && i>=50){
76                 userTask[user++] = i;
77                 int p=user-2,q=user-1;
78                 while (p>=0 && userTask[p]>userTask[q]) 
79                     swap(userTask,q--,p--);
80             }else continue;
81         }
82         systemTask[sys]=-1;
83         userTask[user]=-1;
84     }
85     public static void swap(int arr[], int a, int b){
86         int temp = arr[a];
87         arr[a] = arr[b];
88         arr[b] = temp;
89     }
90     
91 }
View Code

各大IT公司校园招聘程序猿笔试、面试题集锦

http://blog.csdn.net/hackbuteer1/article/details/7959921

原文地址:https://www.cnblogs.com/jslee/p/3465265.html