avatar-decorate
给个off吧要我做什么都行 level
获赞
191
粉丝
128
关注
12
看过 TA
3363
华中科技大学
2026
Java
IP属地:湖北
暂未填写个人简介
私信
关注
头像
04-08 23:25
已编辑
华中科技大学 Java
wxzf部门一面 3.12 1h 压力巨大的一轮八股:10分钟1,系统设计原则开闭原则这些,确实忘了2,封装继承多态实习:20min一直追问我的业务扩展性,难点一道题 30min实现一个斗地主,三名玩家。我写了一个game类,player类继承thread,game维护这三个线程的同步和互斥,准备写每个人一次出一张牌的逻辑,应该没有时间了。1,为什么要写多线程,又没有线程安全问题为什么要加锁答不出来好吧,我以为要写多线程,结果他要我设计这个系统,理解错题意了2,抢地主怎么设计3,如何设计出牌的模式,如果要新增牌型或者删除牌型如何改代码反问:面红温了,卡了一分钟没憋出来一句话,一面压力是真的大二面 3.18 一个小时 压力巨大的一轮先做一个算法题,把字符串变成回文串的最小串,写了个n方算法,后面跟面试官说可以用hash优化成O(n):15min实习:扩展到安全问题,一直追问安全问题,答不上来,温度upup八股:https反问:为什么这么注重安全问题(因为我简历没有安全相关东西所以问??)。什么时候出结果三面:3.21 一个小时 比较正常的面试上来四个面试官,还没开面已经吓死了实习深挖:四十分钟一些其他问题:1,如何看待ai的幻觉问题,之前做过大模型的实习扯了点解决方案2,wxg压力很大,你能承受吗?反问:直接跟我说我过了四面 面委:3.28 一个小时 压力巨大的一轮无自我介绍无反问,10min:问了些http和https常规问题1,浏览器输入url的过程2,https如何防止中间人,本地如何识别中间人剩下全是场景题:1,让你实现一个webserver你会如何实现主要从高并发(reactor/proactor),高可用(集群/负载均衡/限流熔断降级/set化),安全性(非对称加密/对称加密/加盐/报文完整性)几个方面来答2,webserver收到不完整的报文该如何处理首先分析了tcp/http协议组的处理方式。追问如果webserver出现了半包问题如何解决,答:类似http协议,在webserver收到请求时拦截校验完整性,不过面试官对答案不满意3,write如何实现,磁盘如何找到对应的位置答得不咋样,底层太拉了,不清楚磁盘如何找到对应位置的4,malloc/free如何申请内存,让你实现会如何实现首先答的是java那套没内存碎片的申请内存方式,但是忘记了cpp不会自动维护堆,实际上堆上会有很多碎片。然后答的是跳表维护内存碎片,同时需要维护并发安全问题。做到logn申请与logn释放。不过内存碎片如何合并没考虑好场景题:n个汽车种类,判断一段文章是否包含任意一种汽车类型。kmp的加强版,ac自动机模板题。当时答了分词后用用字典树匹配,不过面试官说分词时间复杂度太高。然后说了后缀树,后缀数组等后缀结构,好像后缀结构也没啥问题,面试官也没说不对😆4.7日 hr面 面完说一到两个工作日出结果4.8日 填完个人信息转评估录用,许愿oc#面经# #腾讯#
查看16道真题和解析
0 点赞 评论 收藏
分享
头像
04-01 19:37
已编辑
华中科技大学 Java
3.17日 一面 :60min20min 问实习15min 算法:删除无效括号看我算法写的太轻松了,出了个多线程题。用信号量实现读写锁没写出来,晚上睡觉的时候想到,用读锁一次获得一个资源,写锁一次获取所资源上限的资源量。10min https深挖:追问我https为什么安全,到最后问我要是本地证书被攻破了怎么办本地攻破了那确实没办法了,没安装360是这样的反问:3.24 日 二面 70min20min 聊实习20min 八股1,kafka相关,kafka积压怎么解决2,介绍一下http3,sql优化相关4,一次sql理想的io次数30min 算法给了一堆用户访问信息,做一些统计,并统计出topk用户访问量cpp写代码工具都得自己搭建,写的有点慢了,最后findkth写的好像有问题,不过运行是对的,面试官也没看出来写的有问题,有点尴尬3.28日 三面 60min二十分钟问实习十分钟:设计一个单点限流,每个ip只限定100qps回答了zset对每个ip限流,但是造成zset过多的问题。redis本身的淘汰策略不可信,可以用时间分片zset优化,定时清理上一个时间片,如果时间片选的是10min那么这个窗口最多只有10分钟访问ip的zset。三十分钟:最大子数组乘积,并输出左右边界。反问:有没有转正名额。不方便透露hc,但是给我画饼优秀的同学不需要hc就可以留任。4.1日 hr面,面完oc#面经# #字节跳动#
查看11道真题和解析
0 点赞 评论 收藏
分享
淘孝子:不知道他们在招谁。我其他厂都在不停面,阿里系全挂
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
头像
03-09 21:01
已编辑
华中科技大学 Java
1,模拟一下就好,别忘了处理换行和回车,代码略。2,bfs一下,找出每个点的坐标,o1输出就可以了。void bfs(int u) {    queue q;    q.push(u);    pos[u] = {0, 0};    mark[u] = 1;    while (q.size() > 0) {        int v = q.front();        q.pop();        int l = - 1, r = -1;        for (auto x : g[v]) {            if (mark[x]) continue;            mark[x] = 1;            q.push(x);            if (l == -1) l = x;            else {                r = x;                if (l > r) swap(l, r);             }        }        if (l != -1) {            pos[l] = pair(pos[v].x - 1, pos[v].y - 1);        }        if (r != -1) {            pos[r] = pair(pos[v].x + 1, pos[v].y - 1);        }    } }3,可以发现,我们要计算的是每个数整除其他数之后的和。其实可以反过来想,我们要计算每个数作为除数,其他数除他之后的和。对于数i来说,[j * i, j * i + i - 1]这个范围内的数除以i等于j,那我们可以枚举每个i和每个j,维护一个前缀和来快速算出[j * i, j * i + i - 1]这个范围内的贡献,贡献数是i的数量 * 范围内数的个数 * j。时间复杂度是n + n/2 + n /3 +... = nlogn代码如下,cnt[i]是数字i的数量,sum[i]是前cnt[i]的前缀和,N是数的最大范围1e5;    for (int i = 1; i < N; i ++) {        if (cnt[i] == 0) continue;        for (int j = 1; j * i < N; j ++) {            res += 1ll * (sum[min(i * j + i - 1, N - 1)] - sum[i * j - 1]) * cnt[i] * j;        }    }#笔试# #蚂蚁# #蚂蚁笔试#
投递蚂蚁集团等公司10个岗位 笔试
0 点赞 评论 收藏
分享
头像
03-07 20:59
已编辑
华中科技大学 Java
1,第一题,可以发现每个数只有与不一样的数交换才有贡献,比第i位为1,i < j,只有s[j]为0才可以交换,统计一下前/后缀0/1的个数就可以了,然后加一下贡献```#include <iostream>#include <vector>using namespace std;int main() {    string s;    while (cin >> s) {        long long res = 1;        vector<int> a0(s.size() + 1, 0), a1(s.size() + 1, 0);        for (int i = s.size() - 1; i >= 0; i --) {            if (s[i] == '0') {                a0[i] = a0[i + 1] + 1;                a1[i] = a1[i + 1];                res += 1ll * a1[i];            } else {                a0[i] = a0[i + 1];                a1[i] = a1[i + 1] + 1;                res += 1ll * a0[i];            }        }        cout << res << '\n';    }}// 64 位输出请用 printf("%lld")```2,可以hash一下每个图,每一行有多少个?每一行的值就是多少,11111代表五行每行都只有一个问号,后面就容易不少了。#include <iostream>#include <string>using namespace std;int main() {    int n;    cin >> n;    while (n --) {        string map[6];        int hash = 0;        for (int i = 0; i < 5; i ++) {            cin >> map[i];            int count = 0;            for (int j = 0; j < 5; j ++) {                if (map[i][j] != '#') count ++;            }            hash = hash * 10 + count;         }        // cout << "hash:" << hash <<'\n';        if (hash == 32223) {            cout <<0;        } else if (hash == 11111) {            cout << 1;        } else if (hash == 22311) {            cout << 4;        } else if (hash == 31111) {            cout << 7;        } else if (hash == 31323) {            cout << 6;        } else if (hash == 32323) {            cout << 8;        } else if (hash == 32313) {            cout << 9;        } else {            if (map[1][3] != '#') {                if (map[3][1] != '#') cout << 2;                else cout << 3;            } else {                cout << 5;            }        }    }    }// 64 位输出请用 printf("%lld")3,字典树比较模板的题,可以学一下字典树怎么写的,然后在字典树路径下贪心找最优解#牛客AI配图神器# #include <iostream>using namespace std;const int N = 2e5 + 10;int tr[N * 60][2], cnt[N * 60][2], ind;void insert(int x, int mod) {    int p = 0;    for (int i = 31; i >= 0; i--) {        int v = x >> i & 1;        if (tr[p][v] == 0) tr[p][v] = ++ind;        cnt[p][v] += mod;        p = tr[p][v];    }}int getMaxXor(int x) {    int res = 0, p = 0;    for (int i = 31; i >= 0 ; i --) {        int v = x >> i & 1;        if (cnt[p][!v]) {            p = tr[p][!v];            res += 1 << i;        } else {            p = tr[p][v];        }    }    return res;}signed main() {    int n;    cin >> n;    int cnt = 0;    while (n --) {        int a, b;        cin >> a >> b;        if (a == 1) {            cnt ++;            insert(b, 1);        } else if (a == 2) {            cnt --;            insert(b, -1);        } else {            if (cnt == 0)             cout << -1 << '\n';            else cout << getMaxXor(b) << '\n';        }    }}// 64 位输出请用 printf("%lld")
在西伯利亚种土豆:这第二题直接暴力if else结果出bug了,调了半小时眼睛都快瞎了。还是大佬这方法简单
投递饿了么等公司10个岗位
0 点赞 评论 收藏
分享
头像
03-04 18:20
已编辑
华中科技大学 Java
一面:2月24 1h八股:15min1,问tcpudp的区别?2,什么协议用tcp,什么用udp3,mysql的索引结构4,b+树有什么优点5,linux内存模型,malloc做了什么,堆区栈区的作用聊实习: 20min算法:不重复的全排列二面:3月3日聊实习:20min三道场景题:1,设计一个贴吧系统,某个贴吧做活动,发帖量很高怎么做答:同步处理请求,异步落地,同步缓存发帖信息,异步mq落地。2,如果某个贴吧发帖量相当高,二级消费者消费不过来阻塞其他用户发帖怎么办。答:topic分区,物理隔离各个贴吧。贴吧单点限流(被否定了,因为用户体验差)。然后针对消息堆积的问题,改二级消费者的事件驱动型消费为批处理消费,一次消费多条数据增加mysql吞吐量,同时动态扩容消费者。这题pass了3,设计一个wx朋友圈,你能看到你朋友发的所有pyq,按照时间排序。答:一开始撤了半天非关系型数据库,图关系数据库,没扯到点子上。最后想了一会答的是,每个用户维护一个zset,保存好友的pyq内容和时间戳,同时动态维护这个zset,每个人发pyq的时候维护他的所有好友的zset。4,又问了,如果一个人朋友非常多怎么办,你一次更新相当多的zset如何保证全部更新成功或者更新失败。答:用户发pyq的时候不更新redis,只落地,同时发送异步消息更新redis,依赖mq的重试机制。5,如何做幂等?答:zset的天然幂等,一开始答的分为process/done阶段,答完之后感觉不对想起来zset是天然幂等的6,如果是微博哪种朋友圈,有很多大v怎么办,他们发消息也会异步更新所有关注他的人吗。答:异步更新 + 主动拉取配合。对于大v粉丝量很高就不异步更新redis了,发pyq的时候主动缓存到redis,用户刷pyq的时候维护一个大v的keyset,用户的zset和keyset做一下归并。这个问题我觉得答的不好,虽然好像效率还可以但是redis内存爆炸,而且zset缓存条数有限,如果用户把zset刷完了如何高效pull数据没想到,不过也没问。闲聊:为什么评测做的很快,是不是瞎写的:答:有点汗流浃背了,确实是瞎写的ds有哪些应用。你的优缺点#牛客AI配图神器# 3.4日 挂#面经# #腾讯# #pcg#
查看15道真题和解析
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务