腾讯 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 的话

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

反问

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

相关推荐
小k_不小几秒前
C++面试八股文:指针与引用的区别
c++·面试
一只淡水鱼6640 分钟前
【mybatis】详解 # 和 $ 的区别,两者分别适用于哪种场景,使用 $ 不当会造成什么影响
sql·spring·mybatis·sql注入
AI人H哥会Java2 小时前
【Spring】控制反转(IoC)与依赖注入(DI)—IoC容器在系统中的位置
java·开发语言·spring boot·后端·spring
凡人的AI工具箱2 小时前
每天40分玩转Django:Django表单集
开发语言·数据库·后端·python·缓存·django
奔跑草-2 小时前
【数据库】SQL应该如何针对数据倾斜问题进行优化
数据库·后端·sql·ubuntu
中國移动丶移不动2 小时前
Java 并发编程:原子类(Atomic Classes)核心技术的深度解析
java·后端
HD2436088363 小时前
【mysql】id主键列乱了之后,重新排序(可根据日期顺序)
数据库·sql·mysql
Q_19284999063 小时前
基于Spring Boot的旅游推荐系统
spring boot·后端·旅游
愤怒的代码4 小时前
Spring Boot对访问密钥加密解密——RSA
java·spring boot·后端
美美的海顿4 小时前
springboot基于Java的校园导航微信小程序的设计与实现
java·数据库·spring boot·后端·spring·微信小程序·毕业设计