2015腾讯应用开发面试基础知识小结

腾讯面试基础知识小结

我在2015,4,15参加了人生中的第一个面试,有很多的经验和收获:基础知识必须要掌握扎实!包括操作系统,数据通信以及基础的数据结构和常用的算法(这些尤其要能顺手就写出来!)其次,要对大数据有所认识,在必要的时候可以设计出如何处理他们,怎么存储他们的方法,可惜我都不擅长。
操作系统:
1. 操作系统是怎么管理内存的?具体讲一下过程。
2. 进程和线程的区别,线程如何同步?
3. 什么是僵尸进程?
数据通信:
1.OSI的7层协议是什么?TCP和UDP工作在那一层?IP工作在那一层?
2. TCP和UDP的区别是什么?怎么样可以既保证实时性又保证安全性?
数据结构:
1. 写一个最小堆排序。
2. 如何判定一个图中存在欧拉回路?
3. 红黑树和平衡二叉树的区别是什么?
4. 怎么判断一个字符串在另一个字符串内?(KMP)
OOP:
1. 多态对于面向对象的意义是什么?
对于以上问题,我个人查了一些资料,整理回答如下:
操所系统:
1. 答:首先,内存不管怎么增长,都快不过程序对他的需求。因此操作系统怎么管理内存显得非常重要。
-早期,操作系统管理内存的方法是很简单的:程序直接使用物理地址。除去操作系统所占用的内存,以及部分驱动程序使用的,剩下的内存都可以被用户来使用。如果要运行多进程,就要和磁盘进行进程的交换,早期也有些交换swapping技术。
后来,出现了内存的抽象技术:引入的地址空间(Address Space),这允许每个进程拥有自己的地址。这还需要硬件上存在两个寄存器,基址寄存器(base register)和界址寄存器(limit register),第一个寄存器保存进程的开始地址,第二个寄存器保存上界,防止内存溢出。在这种情况下,任何操作虚拟地址的操作都会被转换为操作物理地址。而每一个进程所拥有的内存地址是完全不同的,因此也使得多进程成为可能。
上面的理论都是基于进程所占的内存空间是固定的这个假设.
现代的操作系统是用 虚拟内存这个概念。 虚拟内存的基本思想是,每个进程有用独立的逻辑地址空间,对于进程来看,逻辑上貌似有很多内存空间,其中一部分对应物理内存上的一块,还有一些没加载在内存中的对应在硬盘上。虚拟内存实际上可以比物理内存大。
有3种常用的方法:块式管理;分页管理; 分段管理和段页式管理。
第一种是:将内存分成若干块,有程序运行就给他分配一个块,这样很容易浪费空间。
第二种分页则比第一种分块小很多;
第三种分段更小,因此利用率更好但是也更麻烦,很多时间会被浪费在段的查找上。
段页式是最常用的,先分段,再分页;其中,段是信息的逻辑单位,页是信息的物理单位。此种方法取一次数据要访问3次内存。
2. 答:进程是系统进行资源分配和调度的最小单位(内存,磁盘,IO),线程是CPU进行分配和调度的最小单位(少量寄存器,堆栈)。一个进程内可以包含一个或者多个线程,一个线程可以创建另一个线程 引入线程可以实现并发机制,发挥多处理器的功能。一个进程内的线程共享该进程的所有资源:文件,socket等。从某种意义上说,线程可以看做是轻量级的线程,他们之间的切换非常快,他们对于数据的共享也使得线程间的同步机制变的很重要,常用的线程同步方法有:
临界区:串行化控制线程的访问
互斥量:只有带有互斥量的线程才可以访问
信号量:允许一个时刻有多个线程访问,即只有有信号量的才可以访问
事件:通知别的线程某个事件的发生,启动下一个线程任务。
3. 答: 僵尸进程的含义类似于野指针。即:一个进程结束exit()的时候,虽然释放了内存,关闭了打开的文件,但是仍然会遗留下一些信息:包括进程号,退出状态,运行时间等信息。这些信息组成的数据结构被称为僵尸进程,直到他的父进程调用wait()/waitpid()才能将这些信息清除。因为系统的进程号是有限的,所以,如果不及时清理僵尸进程就有可能发生系统不可能产生新的进程这种危害。不过如果他的父进程已经先结束了,他们父进程的ID就会被更新为1(init),将由init统一调用wait清除。
数据通信:
1. 答:OSI(open system interconnection)的7层从下往上一次是:物理层,数据链路层(ATM),网络层(IP,路由),传输层(TCP/UDP),会话层(控制数据的开始结束,使表示层看到的数据是连续的),表示层(数据格式和加密),应用层(http)。
层次的结构使得通信的复杂度变低,每层只要完成自己的功能并且为上一层提供接口就可以了。协议必须要满足:语义,语法和时序的规范。
2. 答: TCP面向连接(3次连接,4次断开),保证安全性;UDP 无连接,丢包不重发,保证实时性。
数据结构:
1. 答:堆排序的关键是建立堆,保持最小堆的特性:
HeapSort(int[] A,int length)
{
build_MinHeap(A, length);
while(length>0)
{
get A[0];
exchange A[0] and A[length-1];
Min_Heap(A, length–);
}
}
2. 答: 欧拉回路的概念是: 对于一个图,如果存在一条路径使得他可以遍历完图中每条边一次,如果他是闭合的路径成为欧拉回路。并且前提是,这个图得是连通图。对于无向图来说,存在欧拉回路的充要条件是: 每个节点的度都为偶数; 对于有向图来说是:所有节点的入度等于出度。
3. 答:红黑树的本质是平衡二叉树,但是他比平衡二叉树要多一些信息:
每个节点增加了颜色的信息。这使得在调整平衡时的操作会简化。,红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高。
4. 答: KMP算法是字符串匹配的经典可是我忘了,居然在百度的安全工程师的测试里面也见到了,一定要好好看看。
他将传统字符串匹配的时间复杂度从O(m*n)变到了O(m+n),太厉害了!主要思想是在匹配的过程中,充分考虑之前的重复信息,关键在于next()函数:子串每一个位置之前的字符串的前缀和后缀公共部分的最大长度。
OOP:
1. 答: OO主要有3个特点:封装,继承和多态。封装实现了对客观事物的抽象;继承使得代码可以大规模复用,实现了多态,体现了现实世界从一般到特殊的过程;多态则是动态绑定,真正做到了根据实际情况决定使用子类还是父类的方法。(个人不知道怎么把这个问题回答的更深入,,,望指教)
最后还有个大数据的存储问题:怎么存储周围的人(几十亿数据。。。)上网搜了一下,应该是R树这个数据结构。这个数据结构也是个平衡二叉树,据说存储多维空间比较好,对数据库贡献卓越,,,天呐,这个世界太喜欢树了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值