面试笔试+面试0220

本次是来参加一个训练营,但是因为自己经验和实力确实不足,因此写下题解

6174数字黑洞

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

int findshuzi(int n){
vector<int> arr;
while(n != 0){
arr.push_back(n%10);
n=n/10;
}
sort(arr.begin(),arr.end());
int a = 0;
int b = 0;
for(int i = arr.size()-1;i >= 0;--i){
a = a*10 + arr[i];
}
for(int i = 0;i < arr.size();++i){
b = b*10 + arr[i];
}
return a-b;
}
string f(int n){
if(n < 1000 && n > 9999)return "";
string result = to_string(n);
while(n != 6174){
result += "->";
n = findshuzi(n);
result += to_string(n);
}
return result;
}

字符串匹配

给定一个字符串和一个字符串组,字符串中可以重复,排序,求出最大的匹配值(活动窗口)

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

string maxword(string s,vector<char> arr){
if(s.size() == 0)return "";
if(arr.size() == 0)return "";
unordered_map<char,int> mp;
for(int i = 0;i < arr.size();++i){
mp[arr[i]] = 1;
}
int left = 0;
int right = 0;
string temp = "";
string ans = "";
while(right <= (s.size()-1)){
//没有找到对应的值
if(!mp.count(s[right])){
++right;
left = right;
temp = "";
}else{
temp += s[right];
if(temp > ans){
ans = "";
ans = temp;
}
right++;
}
}
return ans;
}

选择最大分

第一个点主要是数据处理分析,因为是字符串信息比较多,所以处理时间需要比较多
第二个点主要是bfs(具体我也有点忘记)
/* 在网上没有找到类似的题 */

一个无序数组中,两个数组的和为n,求出它的结果值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vector<int> add_Sum(vector<int> arr,int n){
unordered_map<int,int> mp;
vector<vector<int>> res;
for(int i = 0;i < arr.size();++i){
if(mp.count(n-arr[i])){
res.push_back({n-arr[i],arr[i]});
if(mp.count(n-arr[i]) == 1){
mp.erase(n-arr[i]);
}else{
mp[n-arr[i]]--;
}
}else{
mp[arr[i]]++;
}
}
return res;
}

Top k问题(暂时不会处理)

现在有大量文本文件(10000+),预计一共涉及单词数量1000W左右。要求并发计算,最终输出出现频率最高的100个单词及对应次数

思路应该是分块思路或者堆
将1000…..个数分成m组,每组寻找top K个数,得到m×K个数,在这m×k个数里面找top K个数。

hashmap底层实现和unordered_map的初始化

hashmap的底层一个数组方式存储和list列表,对于同一个数组下标的位置元素,即是key的hash值相同,key值不同。
Entry是hashMap中封装key-value键值对的

put方法:根据key的hash值,数组长度计算该Entry<key,value>的数组下标

hash表处理冲突问题:1、开放定址法,主要是线性探测;2、链地址法:将所有哈希地址相同的记录都链接在同一个链表中;3、再哈希法:产生冲突时计算另外一个哈希函数地址,直至冲突不再发生;4、建立一个公共溢出区;

计网的三握手 syn的特性

客户端发出SYN报文请求,服务器端响应SYN+ACK报文,客户端回应ACK报文。
SYN攻击:扩容,过滤网关防护,加固TCP/IP协议线。SYN网关,SYN代理

ISN:客户端和服务端交换ISN,以便让对方知道接下来接收数据的时候如何按照序列号组装数据;ISN是动态生成的。

RST攻击:关闭连接