北邮人论坛DSS886安卓面试总结

虽然是面向Android开发,但也有一部分计算机基础和Java语言的内容

第一部分:计算机基础

一、ICMP协议是什么

  1. ICMP协议全称Internet Control Message Protocol,即Internet控制报文协议。
  2. 是TCP/IP协议的一个子族,网络层。
  3. 用于在计算机、路由器之间传递控制消息,如网络通不通、主机是否可达、路由是否可用等等。
  4. ping命令即基于ICMP协议。
  5. 路由跟踪的Tracert等命令也基于ICMP

字符串相关库函数

strstr库函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//在字符串中查找指定字符串的第一次出现,不能找到则返回-1        
int strstr(char *string, char *substring) {
if (string == NULL || substring == NULL)
return -1;

int lenstr = strlen(string);
int lensub = strlen(substring);

if (lenstr < lensub)
return -1;

int len = lenstr - lensub;
int i,j;
for (i = 0; i <= len; i++) {
for (j = 0; j < lensub; j++) {
if (string[i+j] != substring[j])
break;
}
if (j == lensub)
return i + 1;
}
return -1;
}

彻底理解KMP算法

暴力匹配算法

假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢?

如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有:

  • 如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;
  • 如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0。

TCP状态转换

img

注:主动、被动 与 服务器、客户端没有明确的对应关系。

建立连接协议(三次握手)

(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。
(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
(3) 客户必须再次回应服务段一个ACK报文,这是报文段3。

用C实现C++中的多态性

前言:关于多态,关于 C

多态 (polymorphism) 一词最初来源于希腊语 polumorphos,含义是具有多种形式或形态的情形。在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关联的能力”。 然而在人们的直观感觉中,多态的含义大约等同于“同一个方法对于不同类型的输入参数均能做出正确的处理过程,并给出人们所期望获得的结果”,也许这正体现 了人们对于多态性所能达到的效果所寄予的期望:使程序能够做到越来越智能化,越来越易于使用,越来越能够使设计者透过形形色色的表象看到代码所要触及到的 问题本质。

C函数调用机制及栈帧指针

http://blog.csdn.net/jjiss318/article/details/7185802

在Linux内核程序boot/head.s执行完基本初始化操作之后,就会跳转去执行init/main.c程序。函数调用操作包括从一块代码到另一块代码之间的双向数据传递和执行控制转移。数据传递通过函数参数和返回值来进行。另外,我们还需要在进入函数时为函数的局部变量分配存储空间,并且在退出函数时收回这部分空间。Intel 80x86 CPU为控制传递提供了简单的指令,而数据的传递和局部变量存储空间的分配与回收则通过栈操作来实现。

Effective C++ —— 实现

大多数情况下,适当提出拟的类定义以及函数声明,是花费最多心力的两件事。尽管如此,还是有很多东西需要小心:太快定义变量可能造成效率上的拖延;过度使用转型(casts)可能导致代码变慢又难维护,又招来微妙难解的错误;返回对象“内部数据之号码牌(handls)”可能会破坏封装并留给客户虚吊号码牌;为考虑异常带来的冲击则可能导致资源泄漏和数据败坏;过度热心地inlining可能引起代码膨胀;过度耦合则可能导致让人不满意的冗长建置时间。

Effective C++ —— 设计与声明

所谓软件设计,是“令软件做出你希望它做的事情”的步骤和做法,通常以颇为一般性的构想开始,最终变成十足的细节,以允许特殊接口的开发。

条款18:让接口容易被正确使用,不易被误用

理想上,如果客户企图使用某个接口而却没有获得他所预期的行为,这个代码不该通过编译;如果代码通过了编译,它的作为就该是客户所想要的。

欲开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户可能做出什么样的错误。