面试主要包括算法、项目、理论知识、自我评价四部分
算法
前K个高频单词 leetcode
给一个英文文本,其中每个单词以空格分隔,统计其中单词的频次并找出其中出现频次最高的十个单词。
我想出的方法空间复杂度较高,这里给出我当时的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <iostream> #include <unordered_map> #include <vector> #include <algorithm>
using namespace std;
void help(string s) { string t = ""; vector<pair<int, string>> result_t; unordered_map<string, int> hashTable; for (auto c : s) { if (c == ' ') { if (hashTable.count(t) > 0) hashTable[t] += 1; else hashTable[t] = 1; t = ""; } else t += c; } for (auto p : hashTable) result_t.push_back(make_pair(p.second, p.first)); sort(result_t.begin(), result_t.end()); for (int i = 0; i < 10 && i < result_t.size(); ++i) cout << result_t[i].second << " " << result_t[i].first << endl; }
int main() { string s; cin >> s; help(s); return 0; }
|
项目
介绍一下项目中印象最深的困难以及解决的方法。
理论知识
这部分问的比较多
HTTP2的特性
这里回答的不是很好,不是很全面。
HTTP2的特性:TCP的多路复用、头部压缩、二进制形式、数据流、服务器的主动推送。
HTTP2的局限:因为使用了TCP的多路复用技术,因此一旦丢包,就会阻塞其他的请求,等待丢失的包进行重传,这部分可以参考:公众号文章
redis的操作是否为原子性,为什么?
Redis的API是原子性的。因为Redis是单线程的。
介绍一下HashMap
参见:wiki百科,个人认为应弄清楚构造散列函数和冲突处理部分
线程之间如何协同
参见:python多线程同步实例分析
面向对象的六大原则
参见:面向对象的三大特性和六大原则
自我评价
- 优点和缺点?
- 为什么投这个岗位?
整体感受
目前经历过两次面试后,腾讯的面试官给我的感觉都很好,很耐心,让人很舒服,不会让人感觉很紧张。内容上整体更加关注做过的实际项目以及基础的知识。
————-更新————-
阿哈,刚发完查了一下进度,就凉了。
感谢腾讯给我这次机会,学到了一些东西,也知道了自己的不足。感谢给我面试的两位面试官,麻烦您们了。