百度,yahoo几个面试题-互联网面试题

1、  python里面参数的一个*是什么意思,python的this指针是啥;init是神马意思

(1)      python中所有的参数都是按引用传递,如果修改了参数,也就修改了外部的数值。

(2)      命名参数,就可以不考虑参数顺序了,传递的时候写成str=value的形式就可以。

(3)      缺省参数,在被调用函数的参数中如果已经存在了str=value了,那么调用的时候就可以缺省这一参数,或者直接覆盖整个参数。

(4)      加了*号的表示不定长参数,可以存储非定长的参数。

(5)      Init属于构造函数,在python里面,在定义类的时候,所有方法的第一个参数都是self,类似于this的功能。

2、  不同的文件系统格式?

FAT FAT32 NTFS

FAT和FAT32在访问速度上面优于NTFS,NTFS增大了文件系统的利用率。而且NTFS更加安全。Linux中是ext2  ext3.


3、  观察者模式

http://blog.csdn.net/startfromweb/article/details/7650109

当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

在被观察者中拥有一个列表用于存储所有的观察者。然后当有变化时,通知观察者调用更新函数。Updatefunction(this,params)


----Yahoo-----

4、  duplicate字符squeeze成单个字符. 然后列举出测试用例?

思路就是两个指针,当后面指针指向的元素和前面指针相同的时候,那么后面指针往后移动;当不相同的时候,前面指针加加,把后面的数据交换到前面来。

public void sequeezeDuplicate(int[] num){
      if(null == num) return;
      int numSize = num.length;
      if(numSize == 0 || numSize == 1) return;
     
      int pre = 0;
      int after = 0;
      for(; after < numSize; after++){
          if(num[after] != num[pre]){
              pre++;
              swap(num,pre,after);
          }
      }
  }

5、socket编程, 客户端和服务器端的系统调用, bind的参数是什么, listen中的backlog是什么含义

服务器端通过设定地址和端口号来监听来自客户端的请求,当接收到请求的时候,便创建一个新的进程来应答请求。构建socket通信的函数接口:

(1)      socket()创建socket,有af指定通信发生的区域;type用于指定套接字的类型。

(2)      bind(s,name,namelength)s是由socket()调用返回的并且未作连接的套接字描述符(套接字号),name是赋给套接字的本地地址。

(3)      listen(Socket s,int backlog), backlog表示请求连接队列的最大长度


6、 将Tree里面的每一层兄弟节点练成单链表

//通过当前节点就可以知道其右孩子或者左孩子连接的下一个节点是谁。因为当前节点//的next是可以知道的。

  public void connect1(TreeLinkNoderoot) {
        if(root == null) return;
        //当前节点的下一个节点
        TreeLinkNode curNode = root.next;
        //找到当前节点的孩子节点应该指向的下一个节点
        TreeLinkNode nextNode = null;
       
        //循环获取下一个可以指向的地址
        while(curNode != null){
            if(curNode.left != null){
                nextNode = curNode.left;
                break;
            }
           
            if(curNode.right != null){
                nextNode = curNode.right;
                break;
            }
            curNode = curNode.next;
        }
       
        if(root.right != null){
            root.right.next = nextNode;
        }
       
        if(root.left != null){
            root.left.next = (root.right!= null)?root.right:nextNode;
        }
       
        connect(root.right);
        connect(root.left);
       
   }

7、  两个有序集合A、B,找出A并B中的重复元素,要求写算法?

8、  一张成绩表(成绩,学分)求加权平均,用shell命令写出。Shell里面如何存取数组?

9、  两个互素的A,B整数,给定(0-9)中的一个数C,问C在A/B的余数中第N次出现是在余数的第几位

10、  一张表(时间戳,ip,url)

(1)问访问url的独立ip有多少,SQL要怎么写?用一条shell命令如何写出?

(2)如果不是数据库的表,只是一个文件,内存足够,要怎么做?

(3)如果文件大小和内存都是2GB,评估你的方案的内存使用率。

(4)如果只有2MB的内存,文件很大,要怎么做?

11、归并排序的非递归方式?


-----百度笔试------

1、  动态链接库和静态链接库有什么优缺点?

http://www.cnblogs.com/kex1n/archive/2011/09/06/2168435.html

(1)      windows为应用程序提供了丰富的函数调用,这些函数调用包含在动态链接库中。Dll。

(2)      函数和数据被编译进一个二进制文件,拓展名为lib。在编译链接可执行文件的时候,链接器从库中复制这些函数和数据并组合起来创建最终的可执行文件。

(3)    静态库与导入库的区别:
导入库和静态库的区别很大,他们实质是不一样的东西。静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息

(4)    动态链接就是预留出了调用接口,当执行到的时候,加载动态链接库中的内容;静态链接就是在编译链接的时候就把所需的代码等加载进来。


2、  轮询任务调度和抢占式任务调度?

操作系统任务调度的方案,一般系统中都是采用时间片轮询调度方案。抢占式是指优先级别搞的任务可以抢占CPU,而轮询的则不能。在RTOS(实时操作系统)中,大部分都是采用的抢占式的调度。


3、  数据库中常用的锁?

http://blog.csdn.net/klarclm/article/details/7532454

(1)      封锁用于多用户同时访问数据库的技术,能够防止因为多用户同时访问数据库而造成的问题。当一个用户访问数据时,就加锁,其他人就不能访问了,访问结束之后再释放锁。

(2)      乐观锁   美好的前提就是感觉大家不会同时修改一块数据,所以在提交的时候先检查大家是否修改了这个数据,如果修改了,那么就回滚。针对那种冲突比较小的系统可以采用乐观锁。 OCC

(3)      悲观锁  PCC。 和封锁差不多,就是我占用就不能让其他人有任何机会占用。

4、  多态的实现方式

多态是面向对象的主要特点之一。主要就是通过动态绑定,运行时的类型决定方法的调用。表现形式就是父类的指针或者引用指向子类的对象。

在C++中主要是通过虚函数表来实现的。每个包含虚函数的类都具有一个虚函数表,在类对象的地址空间的最靠前的位置存有虚函数表的指针。在虚函数表中,按照声明顺序依次排列所有的虚函数。因为C++运行时并不维护类型信息,所以在编译时直接在子类的虚函数表中将被子类重写的方法替换掉。这样在运行的时候,就会调用子类覆盖的方法。C++运行时并不维护类型信息。

Java中,运行时维护类型信息以及类的继承体系。类型信息存储在方法区中,即能记住类的superclass,也能记住对应的方法表(只包含类定义的,不包含继承来的)。而对于在堆上创建的每一个对象,都有一个指向方法区类型信息数据结构的指针,通过这个指针可以确定对象的类型。在调用的过程中先从对象的方法区中找,找不到就去其父类中找,如果再找不到,就报找不到该方法的错误。

重载是编译时多态,可以称之为静态多态。


5、系统设计题目:

http://www.cnblogs.com/sooner/archive/2013/07/17/3195171.html

sharding :数据库切片

redis: 数据库缓存

http://www.cnblogs.com/Safe3/archive/2010/09/07/1820722.html

静态页面

图片服务器分离

缓存技术

分布式数据库和散列表

镜像技术

负载均衡技术


6、大数据题目

http://blog.csdn.net/stnye/article/details/6781303

2^32是 42亿多

10亿byte 大概1G

 

http://blog.csdn.net/stnye/article/details/6781303

(1)大量的ip地址,求重复出现次数最多的。对于这种其实可以将ip地址映射到不同的文件中,然后分而治之。

(2)统计一大堆数据中出现次数最多的。也可以这样做,分而治之。hash函数的选择挺重要,确保不会吧同样的信息hash到不同的文件中去。

(3)trie树

http://blog.csdn.net/hguisu/article/details/8131559

trie树又被称为字典树,是一种多叉搜索树.典型应用是用于统计和排序大量的字符串。主要是利用空间来换时间,通过字符串的前缀匹配来查询字符串。根节点不包含字符,

每一个节点包含一个字符。对于查询出现次数最多的单词呀;所有单词的最长公共前缀啊都可以通过这种树来做。

 

http://blog.csdn.net/jiaomeng/article/details/1495500

BloomFilter 一种二进制向量数据结构,通过一个位数组来判断元素是否存在。不是零错误,会有一定的错误。先给定一个位数组,然后给出k个hash函数,给出的任一个数组,依次通过hash函数对

数字进行处理,那么就有把k次hash所对应的位数组位置设置为1。判断一个元素是否存在,通过hash查看是否位子上面都是1就可以了。当然了,也可能存在错误率。

hash函数的多少挺重要的。bloom节省了大量的存储空间,但是有一点的错误率,可能把不属于集合的元素认定为属于集合内。

如何根据输入元素个数n,确定位数组m的大小及hash函数 个数。当hash函数个数k=(ln2)*(m/n)时错误率最小。

 

有时候判断存在不存在的,也可以通过bloom filter来做,用两个位来表示一个数字出现的次数,这样就能够判断数字是否重复出现。

外排序就是指一些大文件的排序不能在内存中完成,需要在磁盘和内存之间存在交互,内存中计算出的结果先存放到文件中。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值