您的位置:首页 > 职场人生

2012.9.26的笔试面试(XX的一天)

2012-09-27 10:23 197 查看
9.25小米笔试

1.

usigned int a=11;

int b=-2;

int c=0;

while(a+b>0)

{

    a=a+b;

    c++;

}
求返回的C的值

答:陷入到无限循环中,while循环不终止,无法输出c的值,因为a为unsigned类型,其值始终为正。

2.括号的问题:{{[()]}},正确的匹配,问{],(]等错误的匹配,问函数test(string s)判断字符串是否有误

3.写函数给字符串添加正确数量的括号来修正错误,问添括号的方法

4.另外两道编程大题。(一道矩阵染色的问题;一道浮点型数据求区域乘积最大的问题)

9.26趋势科技面试

1.是否有过多线程编程

2.SOCKET流程

3.如果要在socket中选取特定的ip该怎么做

4.介绍进程通信IPC,及方法

5.互斥锁

6.TCP与UDP的区别

9.26金山面试

1.泛型编程

2.智能指针

3.左连接和右连接的区别

4.实现一个简单的聊天程序该怎么做

9.26百度研发二面

1.重载new运算符
2.两个字符串a和b,字符串c,判断c是不是由a和b按照各自的顺序构造出来的

自己想到的方法是遍历c字符串,同时遍历字符串a和b进行判断,根据下标位置判断是否满足要求,但是有一些特殊情况没有考虑到,如a为abc,b为aef,c为aefabc,此时遍历a和b时,下标经过了各自的开头a时,不能再回去,想用标志位来记录有过改变的情况,情况很复杂没成功。在网上查些资料,是POJ2192,典型的方法是动态规划。

//  abc  def  -->  adbcef  √
//  abc  aef  -->  aefabc  √

#include <iostream>
#include <string>

using namespace std;

int dp[100][100];

int main()
{
string str1, str2, str3;
cout<<"Please input three strings: "<<endl;
cin>>str1>>str2>>str3;
int len1=str1.size(), len2=str2.size(), i, j;

// init
for(i=1;i<len1+1;i++)
{
if(str3[i-1]==str1[i-1])
dp[i][0]=1;
else
break;
}
for(j=1;j<len2+1;j++)
{
if(str3[j-1]==str2[j-1])
dp[0][j]=1;
else
break;
}

// dp
for(i=1;i<len1+1;i++)
{
for(j=1;j<len2+1;j++)
dp[i][j]=(dp[i][j-1] && str3[i+j-1]==str2[j-1])||(dp[i-1][j] && str3[i+j-1]==str1[i-1]);
}
//if(dp[i][j])  i and j are already out of range
if(dp[len1][len2])
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;

return 0;
}
其中的dp[i][j]表示利用str1的前i个字符和str2的前j个字符能否顺序组成str3的前i+j个字符,若成功则置1,否则置0。状态转移方程为:dp[i][j]=(dp[i][j-1] && str3[i+j-1]==str2[j-1])||(dp[i-1][j] && str3[i+j-1]==str1[i-1])。还需要注意的就是初始化,动态规划就是需要从初始的情况逐步递推出最后的结果。还有一些操作C++的string类型对象问题,如string类型的长度size()函数,见:C++中string类型的总结,最后需要注意的就是字符数组的边界值。

3.给定数组n个数,求n-1个数乘积的最大值

4.给定数组n个数,求是否有一定范围内数的和为0
首先想到的算法是依次遍历数组中的每个数,求数组的序列和,若为0则返回,算法时间复杂度为O(n^2)。

应该是有复杂度更低的方法,自己没想出来,在网上查资料找到了一种解法。

“如果某个sum值出现两次或两次以上,则说明它们之间部分的和为0”。

如:输入整数序列: 2 -3 3 1 0

     计算sum[i]的值: 2 -1 2 3 3

其中2和3都出现了两次,说明有两个区间的和值为0,问题转化为求sum数组中是否有相同的数。故算法如下:

①开辟数组sum,保存计算出的sum[i]的值。  O(n)

②判断sum中是否有相同值,首先遍历一遍寻找数组中的最大最小值,建立差值范围大小的哈希表初始化置零。  O(n)

③再次遍历sum数组,对应哈希表中的值,若出现则置一,从而判断是否有重复值。 O(n)

所以这种算法总的时间复杂度为O(n),只是需要一定的空间消耗,为数组sum,O(n)和哈希表O(N),N为范围值。

9.26百度测试面试

1.C++的类模板,编写一个类模板可以装载各种容器

2.有大量数据的表,优化表的查询(拆表;加索引等)

3.红黑树的概念,解决的问题和哈希表的区别

4.搜索引擎中中文分词的方法(在有字典的情况下)
5.电视机性能测试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息