3-18 腾讯wxg c++一面
被吊打的一面哈哈哈哈哈
他吗的面试官是个Acm选手,直接给我吊锤烂了~
三个代码题一个都不会
65min
面试官一进来就说。我是微信这边的,接下来的问题可能会偏向C++后端的内容,希望你做好心理准备。
连自我介绍都没有, 我:???
全是多线程的问题
如何避免死锁,进程死锁&&线程死锁。还跟我说保证他申请资源的时候一直是一个DAG就好了。好家伙给我秀了一波
SSL握手过程, 我忘了,我说我了解RSA加密过程, 面试官说很简单啊,你说一下他这样加密的耗时吧,我说nlog(p*q),他说没问题,不过很多传输都是基于对称加密的,非对称只是其中的一小部分,好家伙,又给我秀了一波
问我c++多线程操作同一个stl的vector 如何加锁保证合理操作。以及原子操作啥的。。。
反正也不会,就瞎答了,面试官直接说行了行了 ,写几个题吧
给我发了三个题,我一看,他***戈壁第二题手写min_25筛 ??? 第一题想半天没想到nlog的写法,第三题还看不太懂 哈哈哈哈
我都小一年没打比赛了,这出的题也太看得起我了。
1、n个小数,有多少对乘积为整数? 0 <= ai < 10^9,小数点后最多9位小数。 n 1e5
我说第一个题只能优化写到1e4,数据出的很卡还是能到n方
const int maxx = 1e5 + 7; long long solve(){ double a[maxx], b[maxx], c[maxx]; for(int i = 1; i <= n; i++){ int p = (int)a[i]; if(a[i] - p == 0.0){ b[++cnt1] = a[i]; } else { c[++cnt2] = a[i]; } } sort(c + 1, c + 1 + cnt2); long long ans = cnt1*(cnt1 - 1) / 2; for(int i = 1; i <= cnt1; i++){ int l = 1, r = cnt; int mid; while(l <= r){ mid = (l + r) >> 1; if(b[i] * c[mid] >= 1){ l = mid - 1; } else { l = mid + 1; } } for(int j = l; j < cnt2; j++){ double x = b[i] * c[j]; long long y = x; if((double)y == x) ans++; } } }
我还瞎写了个东西,面试官直接说行了,你这二分也没啥意义,直接看第三个题吧。哈哈哈
都*1e9,把整数的部分删了,然后看0的数目,2个0的找16个0以上的,就转换成一个前缀和了。,不过这是一个二维的,需要再考虑一下进位,预处理2和5的-50到50的次幂,然后考虑次幂是否能整除,然后能转换成fft按权展开嘛,而且细节很难写的很好,这个题确实有点难了。
2、1 ~ n 之间质数个数? 1 <= n <= 10^12。 5s (n ^ 2/3) min_25
我说我现在只会1e8的,面试官来了一句这也太小了,还说其实可以用简单的DP思想求解,我说我记得20年ccpc网络赛的时候有这个题啊,面试官说可能大家更倾向于套模版吧,毕竟比较简单。 又又又秀了我一脸
3.封装一个vector<string>data; 实现它传输成一个stirng类,类似于传输数据和解码数据
我思路就存了一个索引,然后用这个索引求的每一个string的位置然后转换的。
期间出了很多细节的问题,面试官一眼就看出来了,太强太强了。
string change(int x){ int p = x; int num = 0; string ans = ""; while(p){ num ++; p /= 10; } for(int i = 1; i <= 5 - num; i++){ // ? ans.push_back('0'); } ans += x.toString(); return ans; } string Send(const Data& data); // data = {"abc", "123", "void"} { int len = date.size(); string ans = ""; ans += change(len); for(int i = 0; i < len; i++){ ans += change( data[i].size() ); // ? } for(int i = 0; i < len; i++){ ans += data[i]; } return ans; } string Recv(string str){ int len = str.substr(0, 5).toInt(); int nowIndex = (len + 1) * 5 - 1; string ans = ""; for(int i = 4; i < (len + 1) * 5 - 1; i += 5){ int nextIndex = nowIndex + str.substr(i, 5).toInt(); ans += str.substr(nowIndex, nextIndex); nowIndex = nextIndex; } return ans; }
我说 请问可以告知一下贵公司的hc情况吗,面试官说他是微信应用部门的,不太了解。
反正这场被吊锤的很开心,最后反问我都是笑着问的,关键是第一眼看到那个min25筛就不行了hhh
面试官是真顶级金牌选手啊,比起那种没hc流程自动结束的,面的还是很开心的