0%

腾讯安卓客户端开发二面总结

面试主要包括算法、项目、理论知识、自我评价四部分

算法

前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;
}
// 下面这部分如果使用c++的优先队列进行排序,这样可以降低空间复杂度,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;
}

项目

介绍一下项目中印象最深的困难以及解决的方法。

理论知识

这部分问的比较多

  1. HTTP2的特性

    这里回答的不是很好,不是很全面。

    HTTP2的特性:TCP的多路复用、头部压缩、二进制形式、数据流、服务器的主动推送。
    HTTP2的局限:因为使用了TCP的多路复用技术,因此一旦丢包,就会阻塞其他的请求,等待丢失的包进行重传,这部分可以参考:公众号文章

  2. redis的操作是否为原子性,为什么?

    Redis的API是原子性的。因为Redis是单线程的。

  3. 介绍一下HashMap

    参见:wiki百科,个人认为应弄清楚构造散列函数和冲突处理部分

  4. 线程之间如何协同

    参见:python多线程同步实例分析

  5. 面向对象的六大原则

    参见:面向对象的三大特性和六大原则

自我评价

  1. 优点和缺点?
  2. 为什么投这个岗位?

整体感受

目前经历过两次面试后,腾讯的面试官给我的感觉都很好,很耐心,让人很舒服,不会让人感觉很紧张。内容上整体更加关注做过的实际项目以及基础的知识。

————-更新————-

阿哈,刚发完查了一下进度,就凉了。

感谢腾讯给我这次机会,学到了一些东西,也知道了自己的不足。感谢给我面试的两位面试官,麻烦您们了。

请作者喝咖啡