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

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

反问

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

相关推荐
拾光师1 小时前
spring获取当前request
java·后端·spring
Flerken1012 小时前
数据库语言、SQL语言、数据库系统提供的两种语言
数据库·sql·oracle
掘根2 小时前
【网络】高级IO——poll版本TCP服务器
网络·数据库·sql·网络协议·tcp/ip·mysql·网络安全
Java小白笔记3 小时前
关于使用Mybatis-Plus 自动填充功能失效问题
spring boot·后端·mybatis
小哇6663 小时前
Spring Boot,在应用程序启动后执行某些 SQL 语句
数据库·spring boot·sql
鱼跃鹰飞3 小时前
Leetcode面试经典150题-349.两个数组的交集
算法·leetcode·面试
isNotNullX4 小时前
如何用SQL Server和Oracle进行数据同步?
大数据·数据库·sql·oracle
JOJO___4 小时前
Spring IoC 配置类 总结
java·后端·spring·java-ee
白总Server5 小时前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php
Lingbug6 小时前
.Net日志组件之NLog的使用和配置
后端·c#·.net·.netcore