一些重要面试问题的记录

来源:互联网 发布:还原精灵软件网络 编辑:程序博客网 时间:2024/05/21 14:49

百度:

1、给一个链表,n个线程读,一个线程写,如果不用锁,如何保证 添加、删除、修改等的高效

前提: 任何形式的锁都不能用,指针的赋值是原子的,读请求有两秒间隔,所有的操作在链表的任何一个节点位置都能发生

 

添加操作

先new出来,关键操作是 让这个节点先指向一个next,再指向pre  不能反过来

删除操作

pre->next =p ->next->next

等待两秒

delete p

 

修改和删除类似,也是等两秒

 

 

需要深入了解下有关无锁的一些知识

 

2、两个文件分别包含道路和河流,由起点和终点表示,问这两个文件相交的路径个数是多少?

 前提:判断相交的函数已经有了,比如 bool IsMerge(int start1,int end1,int start2,int end2)

如何做到高效的得出相交的个数呢?(注意,A文件中一个(start,int end)可能与B文件中的多个(start,int end)相交)

 

建立索引,排序

 

3、水平分割和按功能做成不同的agent,这两个有什么区别,体现在系统性能指标上有何区别呢?如,从可用性来说呢?

 

yahoo

1、对于一个变量,我们可以在执行的时候动态的转换成其他类型,比如 int型转换成double,如何在编译阶段就能知道具体的类型呢?

  我的想法是使用union,

union a{

    char str[8];

    int a;

    double b;

 

 

2、字符的排列和组合

3、汉诺塔问题,时间复杂度是多少 o(n)

4、top k问题

5、负载均衡(angent 也有承载极限,怎么办,dns负载均衡)

6、c++构造和析构能抛出异常吗

  析构函数,如果这个类没有分配任何资源也能抛异常吗

  能抛,但必须在这个函数内被捕获,不能再抛到上层,否则宕机,当时没答上来

 

 

sina

1、内存池如何实现

     看看apache nginx的 memchaced的内存管理

 

2、无锁结构如何实现

 

3、tcp的三次握手四次分手,具体什么状态,滑动窗口

 

 

淘宝

网络监测工具  ss  netstat

从慢启动到拥塞避免大概要多久(3s)

 

 

搜狗

如果是多线程,下面的加锁序列有问题

lock(a) ; lock(b);unlock(a);lock(a);unlock(b);unlock(a);

 

云壤

二叉树里找两个节点的最近公共父节点