时间:2012年4月21号 地点:珞珈山国际宾馆
今天可以说是我第一次参加比较正式的面试,对于缺乏面试经历的我,可谓一次难得的体验机会。
Tencent的面试给我最深刻的影响是比较专业,笔试过后,面试共有三轮,第一二轮为技术面试,第三轮为HR面试。昨天晚上收到了一面通知,一方面很兴奋,终于能有机会见识一下大公司的招聘;另一方面又很忐忑,毕竟没有啥面试经历,没见过场面,也不知道会问些啥问题。
下午14:10,我准时来到宾馆报到。工作人员在查看了名单后,递给我一张写有房间号的纸条,示意我去该房间号等候面试。此次面试,持续了50分钟,内容如下:
1.有一个字串形式为"name1=type1;name2=type2;name3=type3……",请设计一个类,提供接口以实现功能:给定一个name,输出其对应的type类型。个人解答,仅供批斗:
wordParser.h
/*
*题目:有一个字符串形式为"name1=type1,name2=type2,name3=type3……",
*请设计一个类,提供接口以实现功能:
*给定一个name,输出其对应的type类型
* */
#ifndef WORDPARSER_H
#define WORDPARSER_H
#include <map>
#include <string>
class wordParser {
public:
wordParser(std::string &s):str(s) { }
void stringToMap();
std::string nameSearch(std::string &searchword) const;
private:
std::string str;
std::map<std::string, std::string> wordMap;
};
#endif
wordParser.cpp
#include <iostream>
#include "wordParser.h"
using namespace std;
void wordParser::stringToMap()
{
string name, type;
string::size_type pos, lastpos;
int flag;
if(str == "")
return;
pos = 0;
lastpos = -1;
flag = 0;
while((pos = str.find('=', pos)) != string::npos) {
name = str.substr(lastpos + 1, pos - lastpos - 1);
lastpos = pos;
if((pos = str.find(',', pos)) != string::npos)
type = str.substr(lastpos + 1, pos - lastpos - 1);
else {
type = str.substr(lastpos + 1, str.length() - lastpos - 1);
flag = 1;
}
wordMap.insert(make_pair(name, type));
if(flag == 1)
break;
lastpos = pos;
}
}
string wordParser::nameSearch(string &searchword) const
{
string type;
map<string, string>::const_iterator it = wordMap.find(searchword);
if(it == wordMap.end())
type = "";
else
type = it -> second;
return type;
}
int main(int argc, char *argv[])
{
string searchword;
string type;
if(argc != 2) {
cerr << "argument must be 2!" << endl;
return 1;
}
string str = argv[1];
wordParser wp(str);
wp.stringToMap();
cout << "input searchword:(end of ctrl-d)";
while(cin >> searchword) {
if((type = wp.nameSearch(searchword)) != "") {
cout << type << endl;
}
else
cout << "cannot find " << searchword << "'s type" << endl;
}
return 0;
}
运行结果wl@MARS:~/usefulcode/tencent$ ./a.out wulei=male,liu=female,wang=male
input searchword:(end of ctrl-d)wang
male
wulei
male
2.static成员函数的作用是什么?const成员函数的作用是什么?
static成员函数的作用
1)static成员函数没有this指针,通过使用非static成员显示或隐式地引用this是一个编译时错误。
2)static成员函数不是任何对象的组成部分,因而static成员函数不能声明为const。
3)static成员函数也不能声明为虚函数。
const成员函数的作用
1)不能修改类的成员变量,同时不能调用类的非const成员函数
(const成员函数中,this的类型是一个指向const类类型对象的const指针,const成员函数返回*this作为一个const引用)。
2)提供了基于const的重载。const对象只能使用const成员函数。非const对象可以使用任一成员,但非const版本是一个更好的匹配。
3.如何实现线程的同步与互斥?
线程间的同步机制有:
1)互斥锁(一种比较简单的、用于实现线程间对资源互斥访问的机制)
2)条件变量(通常与互斥锁一起使用,单纯的互斥锁用于短期锁定,主要用来保证对临界区的互斥进入。而条件变量则用于线程长期
等待,直至所等待的资源成为可用资源)。
3)信号量机制(可用于多线程OS中)
4.计算武汉的加油站数目?
解题的思路是:看看该地区有多少人口,一般一个家庭拥有多少辆汽车或者多少个家庭拥有一辆车,一般人凭日常常识就知道大概;然后算一算一辆车加油的频率,或者考虑多少人口、多少街区需要一个加油站,最后能得出答案。