10.18 腾讯微信支付日常(凉经)

一面

1. 自我介绍
2. 网络
   1. TCP三次握手、四次挥手
   2. TCP和UDP区别
   3. 如何实现一个可靠的UDP(我直接回答了QUIC,以及哪些实现哪些策略让他稳定可靠)(文章推荐:https://juejin.cn/post/7428200842229006377#heading-0;视频推荐:https://www.bilibili.com/video/BV1fr4y1F7BD?spm_id_from=333.788.videopod.sections&vd_source=ea52eeafecc0fa82395b5b7600d5b266
   4. Https解决了Http什么问题(下面是个大概,都需要展开说说)
      1. 信息加密:混合加密实现信息机密性,解决窃听风险
      2. 验证机制:摘要算法实现完整性,为数据生成独一无二的【指纹】,用于检验数据完整性,解决篡改风险
      3. 身份证书:将服务器的公钥放入数字证书,解决冒充风险
   5. TSL四次握手
   6. CA证书验证流程,存储在哪里?
3. 操作系统
   1. 线程和进程区别
   2. 进程通信方式
4. 数据结构
   1. 堆(数组实现,是一个完全二叉树结构)
   2. 排序算法的时间复杂度对比
   3. 排序算法哪些是稳定的,哪些是不稳定的
5. 算法
   1. 堆排序(pass)
   2. 螺旋数组
   3. 手撕HashMap
6. 讲解HashMap扩容
7. rehash和二次hash有什么区别(自己口误,给挖坑了)

二面

1. 自我介绍(面试官是老乡,寒暄了几句)
2. 算法
   1. 大数乘法(这个真忘了,一般碰到这种都是工具类写了,撕了20分钟,没写出来)
   2. leetcode上的一个中等dp(背包问题),具体是哪个找不到了。
3. 实习拷打
4. 项目拷打

二面一直拷打,回答一句,问一个,问到不会为止(已挂)

大数加法:

public String solve(String s, String t) {
    if (s == null || t == null || s.length() == 0 || t.length() == 0) {
        return null;
    }
    if (s.equals("0") || t.equals("0")) {
        return "0";
    }
    int[] nums = new int[s.length() + t.length()];
    // 计算乘积并累加到相应位置
for (int i = s.length() - 1; i >= 0; i--) {
for (int j = t.length() - 1; j >= 0; j--) {
            nums[i + j + 1] += (s.charAt(i) - '0') * (t.charAt(j) - '0');
        }
    }
    // 处理进位
    int carry = 0;
for (int i = nums.length - 1; i >= 0; i--) {
        int temp = nums[i] + carry;
        nums[i] = temp % 10;
        carry = temp / 10;
    }
    // 构建结果字符串
    StringBuilder sb = new StringBuilder();
    int start = 0;
    while (start < nums.length && nums[start] == 0) {
        start++;
    }
    for (int i = start; i < nums.length; i++) {
        sb.append(nums[i]);
    }
    return sb.toString();
}

大数乘法:
public String solve(String s, String t) {
        if (s == null || t == null || s.length() == 0 || t.length() == 0) {
            return null;
        }
        if (s.equals(&quot;0&quot;) || t.equals(&quot;0&quot;)) {
            return &quot;0&quot;;
        }

        int[] nums = new int[s.length() + t.length()];

        // 计算乘积并累加到相应位置
for (int i = s.length() - 1; i >= 0; i--) {
for (int j = t.length() - 1; j >= 0; j--) {
                nums[i + j + 1] += (s.charAt(i) - '0') * (t.charAt(j) - '0');
            }
        }

        // 处理进位
        int carry = 0;
for (int i = nums.length - 1; i >= 0; i--) {
            int temp = nums[i] + carry;
            nums[i] = temp % 10;
            carry = temp / 10;
        }

        // 构建结果字符串
        StringBuilder sb = new StringBuilder();
        int start = 0;
        while (start < nums.length && nums[start] == 0) {
            start++;
        }
        for (int i = start; i < nums.length; i++) {
            sb.append(nums[i]);
        }

        return sb.toString();
}
全部评论
手撕hashmap?
点赞 回复 分享
发布于 昨天 22:24 北京

相关推荐

评论
2
9
分享
牛客网
牛客企业服务