腾讯 IEG 游戏前沿技术 二面复盘

前言

二面 40 分钟,面的稀烂,唯一可以圈点的就是一道 hard 写出来了。问了很多基础知识,没有形成很好的引导链到自己准备的项目经历上

面试过程

自我介绍

巴拉巴拉同一面。。。这次没说做了运维相关,但还是提了自己了解机器学习经典算法。强调了在 xxx 实习的主要产出,包括分布式定时任务解决方案,以及对已有项目的接口调整和性能优化。

问:讲一下做了什么优化

答:主要是在后台管理项目和数据分析平台项目中,出现了由于大数据量导致的性能问题。我也根据 SQL 慢查询优化的知识还有数据结构的知识进行了性能的优化

问:能具体讲讲吗

答:通过 explain 看查询的过程,尽量利用最左前缀法则,让查询条件走索引。然后看联表的时候,是不是小表驱动大表,有没有使用谓词下推,尽量不要使用 select *,尽量让索引覆盖返回字段。如果有深度分页的情况。。。(被打断)

问:可以讲有几种类型的优化吗

答:一种就是通过索引去优化,一种是通过联表的方式,还有就是分页的优化,以及分组优化,其实也是让分组条件走索引,也算是索引相关的优化

问:MySQL 索引原理

答:索引使用的是 B树 和 B+树,我们知道全表扫描的话消耗的复杂度是 O(n),在数据结构中对二叉搜索树做查找只需要 O(log n) 的复杂度

复盘:

MySQL 索引不止有 B-tree、B+tree,还有 hash

在仅需要 = <> IN 而不需要范围查询时,可以使用 hash 得到 O(1) 的查询效率

问:讲一下哈希表

答:以 redis 中的 hash 数据结构为例,redis 中一个 key 代表一块存储空间,使用 hash 时,一个 key 可以对应多个 field,每个 field 作为一个哈希函数的参数值,映射得到一个 value 或者 value 的存储地址

问:如何减少哈希冲突

答:如果出现哈希冲突的话可以顺延到后面的位置,也可以。。。(被打断)

问:怎么去减少哈希冲突

答:怎么去减少的话,可能得设计哈希函数,比如说对一个质数取模

复盘:

参考:

什么是哈希冲突 以及如何避免哈希冲突-CSDN博客

散列函数(哈希)_哈希 散列函数-CSDN博客

选择一个好的哈希函数:直接定址、相乘取整、平方取中、除留余数

增加哈希表大小

使用哈希盐值

问:卷积神经网络有使用过吗

答:有了解卷积神经网络的原理。相比于全连接,卷积层的特点是引入了卷积核,本质上是部分连接 + 共享权值。

问:1 x 1的卷积核有什么用

答:1 x 1 的卷积核是不是相当于全连接(脑袋宕机了)

复盘:

参考资料:深度学习笔记(六):1x1卷积核的作用归纳和实例分析_1x1卷积降维-CSDN博客

1 x 1 的卷积核可以对矩阵做放缩;减少通道数,降低运算量。

写一道题吧

题目:滑动窗口最大值

java 复制代码
class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int[] res = new int[nums.length - k + 1];
        int index = 0;
        Deque<Integer> queue = new ArrayDeque<>();
        for (int i = 0; i < nums.length; ++i){
            while (!queue.isEmpty() && queue.peekFirst() < i - k + 1)
                queue.removeFirst();
            while (!queue.isEmpty() && nums[i] > nums[queue.peekLast()])
                queue.removeLast();
            queue.offer(i);
            if (i >= k - 1)
                res[index++] = nums[queue.peekFirst()];
        }
        return res;
    }
}

问:c++ 有了解吧

答:对 c++ 面向对象、STL 容器库、RAII 等特性有了解。

问:java 中没有内存管理,你有对 c++ 内存管理方面的实践吗

答:学校基础课程教的 c++ 是自己分配和释放指针,容易造成内存泄露的问题。c++ 中有一种叫 RAII 的思想,就是让在构造函数中分配资源,在析构函数中释放资源。智能指针就是 RAII 的一个应用案例

对面:智能指针还是麻烦了一点

问:golang 的话你多久能上手

答:之前有了解过 golang 的语法,如果是用 golang 做 web 开发的话,应该两到三天可以上手。因为后台开发那一套生态的思想是共通的,大概一周内可以做微服务相关的应用

问:前端有写过是吧

答:是的,之前在学校有做过 web 项目的前端,在实习的时候也跟这边的前端有协作,对前端做调整

问情况

(闲聊是不是对面对自己不感兴趣的征兆)

问:在粤海还是丽湖

答:粤海

对面:那实习的话挺近的

问:现在实习那边的项目还有多久,如果发 offer 的话

答:会尽快对接,快的话一周内,慢的话两周左右

反问

自作聪明反问了下哈希表怎么避免冲突,对面说是基础的东西,我就说那我回去自己搜一下。。。

相关推荐
Asthenia04123 小时前
浏览器缓存机制深度解析:电商场景下的性能优化实践
后端
databook4 小时前
『Python底层原理』--Python对象系统探秘
后端·python
张胤尘4 小时前
C/C++ | 每日一练 (2)
c语言·c++·面试
爱编程的小庄4 小时前
web网络安全:SQL 注入攻击
前端·sql·web安全
超爱吃士力架5 小时前
MySQL 中的回表是什么?
java·后端·面试
追逐时光者6 小时前
Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
后端·.net
史迪仔01126 小时前
【SQL】SQL多表查询
数据库·sql
苏三说技术6 小时前
10亿数据,如何迁移?
后端
bobz9656 小时前
openvpn 显示已经建立,但是 ping 不通
后端
customer087 小时前
【开源免费】基于SpringBoot+Vue.JS个人博客系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源