# 面试标题收集(4)

www.MyException.Cn  网友分享于：2015-08-26  浏览：4次

```#include <iostream>
#include <cstdlib>
#include <exception>
using namespace std;

void printArr(int arr[],int len)
{
if(arr==NULL || len<0)
throw new runtime_error("Invalid Input");

for(int i=0; i<len; ++i){
cout<<arr[i]<<" ";
}
cout<<endl;
}

void PrintQ(int num)
{
int *arr = NULL;
arr = new int[num];

int fiveIndex = 1;
int threeIndex = 0;
int index = 2;

arr[0] = 3;
arr[1] = 5;

while(index<num){
int addFive = arr[fiveIndex] + 5;
int addThree = arr[threeIndex] + 3;

threeIndex = index;
fiveIndex = index;

arr[index++] = min;
}

printArr(arr,num);

delete[] arr;
}

int main()
{
cout<<"By lsj:http://blog.csdn.net/lsjseu"<<endl;
PrintQ(10);
system("pause");
return 0;
}```

2.剑指offer上面的丑数：我们只把包含2、3、5的数称作丑数，习惯把1称为第一个丑数，求从小到大顺序的num个抽数。

```#include <iostream>
#include <cstdlib>
#include <exception>
using namespace std;

void printArr(int arr[],int len)
{
if(arr==NULL || len<0)
throw new runtime_error("Invalid Input");

for(int i=0; i<len; ++i){
cout<<arr[i]<<" ";
}
cout<<endl;
}

int Min(int a,int b,int c)
{
int t = a<b?a:b;
return t<c?t:c;
}

void PrintUglyNum(int num)
{
int *arr = NULL;
arr = new int[num];

int twoIndex = 0;
int fiveIndex = 0;
int threeIndex = 0;

int index = 1;

arr[0] = 1;

while(index<num){
int mutTwo = arr[twoIndex] * 2;
int mutFive = arr[fiveIndex] * 5;
int mutThree = arr[threeIndex] * 3;

int mindata = Min(mutTwo,mutThree,mutFive);

if(mindata == mutTwo)
++twoIndex;
if(mindata == mutThree)
++threeIndex;
if(mindata == mutFive)
++fiveIndex;

arr[index++] = mindata;
}

printArr(arr,num);

delete[] arr;
}

int main()
{
cout<<"By lsj:http://blog.csdn.net/lsjseu"<<endl;
PrintUglyNum(11);
system("pause");
return 0;
}```

```#include <iostream>
#include <string>
#include <stack>
using namespace std;

string reverseStr(string str)
{
int len = str.size();
string ret;
stack<char> st;
bool begin = true;

for(int i=0; i<len;){
if(i<len && str[i] == ' '){
if(!begin)ret.append(1,' ');
begin = false;
while(str[i]==' ')
i++;
}
else{
while(i<len && str[i] != ' '){
st.push(str[i]);
i++;
}
while(!st.empty()){
ret.append(1,st.top());
st.pop();
}
}
}
return ret;
}

int main()
{
string str = string("   abc   lsj  hlj");
cout<<reverseStr(str)<<endl;

system("pause");
return 0;
}```

4.面试员宝典的一道笔试题目：一个字符串，压缩其中的连续空格为1个后，对其中的每个字串逆序打印出来。比如"i am    lsj"打印为"lsj am i"。

```#include <iostream>
#include <string>
#include <stack>
using namespace std;

void reverseSub(char str[],int start,int end)
{
if(!str||start<0||end<0)
throw new runtime_error("Invalid Input");

if(start>=end)
return;

for(;start<end;++start,--end){
char t = str[start];
str[start] = str[end];
str[end] = t;

}

}

void reverseStr(char str[])
{
int len = strlen(str);

reverseSub(str,0,len-1);

int beg = 0;
int end =0;

cout<<str<<endl;

for(int i=0; i<len;){
while(i<len && str[i] != ' ')++i;
end = i - 1;

reverseSub(str,beg,end);

while(i<len && str[i] == ' ')++i;
beg = i;
}
}

int main()
{
char str[] = "ss   i am   lsj";
reverseStr(str);

cout<<str<<endl;

system("pause");
return 0;
}```

5。描述在浏览器中敲入一个网址并按下回车后所发生的事情（尽量详细）

（1）浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是，操作系统没有告诉浏览器储存DNS记录的时间，这样不同浏览器会储存个自固定的一个时间（2分钟到30分钟不等）。
（2）系统缓存 – 如果在浏览器缓存里没有找到需要的记录，浏览器会做一个系统调用（windows里是gethostbyname）。这样便可获得系统缓存中的记录。
（3）路由器缓存 – 接着，前面的查询请求发向路由器，它一般会有自己的DNS缓存。
（4）ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。