No.3 腾讯,阿里,字节,优科面经(上-算法篇)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: No.3 腾讯,阿里,字节,优科面经(上-算法篇)

前言这篇文章来自于我的好友刘人彰CSDN博主:gooooer 的授权分享,和人彰认识是在力扣的算法群里,是一个很棒很阳光的男生,最初的印象“回弹钢琴的程序员”,有才华,然后一起刷题,私下聊工作,聊生活也是很好地朋友,他也是从事golang,k8s,云开发,这是他的第一次跳槽,经多轮面试拿到天翼云offer。

原文链接:

https://blog.csdn.net/qq_41385137/article/details/12749270

引用正文:笔者在2022年7月份-9月份之间面试了很多golang和k8s相关的面试,主要想从事云原生相关的开发工作,大小公司面试了很多,现将整体面试感受和一些通用的问题做一些整理记录,帮助大家在面试的时候更好的进行准备。最近大环境不好,大厂的岗位也少了不少。主要投递的岗位包含广州、深圳的岗位,面试的是golang工程师相关的岗位,但其实单纯做云原生相关岗位比较少,基本上局限于国内的几朵云,阿里云,华为云,腾讯云,最近发展起来的运营商赛道,天翼云,联通云这些。当然也包含也一些企业内部的私有云,规模应该不是很大。面试过的公司有:腾讯,阿里,度小满,金山,字节,Fordeal,优维科技,致景科技,凯媒通信,联通数科,天翼云

腾讯算法

      腾讯腾娱项目组,好像云相关的没怎么招人,也可能岗位在西安,但听同事说没怎么招人,所以就面的是go业务代码开发,因为自己一直做的是k8s相关的开发,面业务代码的开发在技术栈上有一些不匹配,比方说,他们会对一些互联网三高项目比较重视,包 mysql,es,redis,kafka啊等等数据库要求相对高。这个当时由于没有准备Mysql调优相关的知识,一面就挂了。算法题目是二叉树相关的如下:

/*
题目:给定两个整数数组 preorder 和 inorder ,
其中 preorder 是二叉树的先序遍历, 
inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
*/
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func buildTree(preorder []int, inorder []int) *TreeNode {
    if len(preorder)==0{
        return nil
    }
    root := &TreeNode{preorder[0],nil,nil}
    i:=0
    for ;i<len(inorder);i++{
        if preorder[0]==inorder[i]{
            break
        }
    }
    root.Left=buildTree(preorder[1:len(inorder[:i])+1],inorder[:i])
    root.Right=buildTree(preorder[len(inorder[:i])+1:],inorder[i+1:])
    return root
}

阿里算法      


       阿里主要是蚂蚁金服在招跟云相关的岗位,一般都是电话面试,由阿里的hrg或者是hrg助理约面,对编程要求其实不算太高,算法考的是lru算法。题目如下,其实就是leetcode的146题

/*
题目:请你设计并实现一个满足  LRU (最近最少使用) 缓存 约束的数据结构。
实现 LRUCache 类:LRUCache(int capacity) 以 正整数 
作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 
存在于缓存中,则返回关键字的值,否则返回 -1 。
void put(int key, int value) 如果关键字 key 已经存在,
则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。
如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。
*/
type entry struct{
    key,value int
}
type LRUCache struct{
    cap int
    cache map[int]*list.Element
    lst *list.List
}
func Constructor(capacity int)LRUCache{  //LRU算法
        return LRUCache{capacity,map[int]*list.Element{},list.New()}
}
func (c *LRUCache)Get(key int)int{
    e := c.cache[key]
    if e==nil{
        return -1
    }
    c.lst.MoveToFront(e)
    return e.Value.(entry).value
}
func (c *LRUCache)Put(key,value int){
    if e := c.cache[key];e!=nil{
        e.Value=entry{key,value}
        c.lst.MoveToFront(e)
        return 
    }
    c.cache[key] = c.lst.PushFront(entry{key,value})
    if len(c.cache)>c.cap{
        delete(c.cache,c.lst.Remove(c.lst.Back()).(entry).key)
    }
}

阿里一般只要稍微准备一下就可通过,其实接下来的几轮技术面才是关键,对深度的要求还是有点高,但是感觉面试官的态度还是很友好的,不会出现一言不合就开喷的情况,就是即使挂了你还是会笑嘻嘻的那种。(hr也都是笑嘻嘻的挂人)

字节算法


字节那边也是业务代码开发,主要也是飞书人力套件,用golang,好像没搜到字节跟云相关的岗位,字节不愧是算法问到了极致,每一面都考算法,难度到了有向无环图,这种,其中夹杂着mysql的各种问题,大概是他们是做OA人事薪酬系统,对mysql也是特别高,问了一些mysql的知识,会让你手写sql语句。

/*
题目一:(考察二叉树)
  给定一个有序数组,但是数组以某个元素作为支点进行了旋转(比如,0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2)。
  给定一个目标值target进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。
  你可以假设数组中不存在重复的元素。
*/
func search(nums []int, target int) int {
  if len(nums) == 0 {
    return -1
  }
  left := 0
  right := len(nums) - 1
  for left <= right {
    mid := (left + right) / 2
    if target == nums[mid] {
      return mid
    }
    if nums[left] < nums[mid] && target <= nums[mid] && target >= nums[left] {
      right = mid - 1
    } else if nums[left] > nums[mid] && target <= nums[mid] {
      right = mid - 1
    } else if nums[left] > nums[mid] && target >= nums[left] {
      right = mid - 1
    } else {
      left = mid + 1
    }
  }
  return -1
}
/*
题目二:给你一个 m 行 n 列的矩阵 matrix ,
请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
*/
func spiralOrder(matrix [][]int) []int {
    ans :=make([]int,0)
    x,x1 := len(matrix),0
    y,y1 := len(matrix[0]),0
    zong := x * y
    for {
        for i1:=y1;i1<y;i1++{   //行固定的,列在动
            ans =append(ans,matrix[x1][i1])
        }
        x1++
        for i2:=x1;i2<x;i2++{ 
            ans=append(ans,matrix[i2][y-1])
        }
        y--
        for i3:=y-1; i3>=y1; i3--   {
            ans =append(ans,matrix[x-1][i3])
        }
        x--
        for i4:=x-1 ;i4>=x1;i4--{
             ans =append(ans,matrix[i4][y1])
        }
        y1++
        if len(ans)>=zong{
            break
        }
    } 
    return ans
}
/*
题目三:循环检测。如[['A','B'],['B','C']['C','D'],['B','D']]==>false
[['A','B'],['B','C'],['C','A']]==>true 
参考题解:https://mp.weixin.qq.com/s/pCRscwKqQdYYN7M1Sia7xA
*/
/*
题目四:这道题考了mysql的一些知识,当时给了一个学生表,
求SQL查每个学生成绩最好的科目,大家面字节的业务代码开发,
就多学一些mysql的东西吧,多刷一下常见sql语句。
*/

优维科技算法


       优维科技:老实说当时投这家公司是练手的,觉得是个小公司,面试应该蛮简单,一面顺利通过,二面被叫到公司现场面试,刚到公司,技术总监叫我坐下,我想该不会去给我倒水去了吧,不用这么客气,然后该公司总监拿着一张纸进来了,定睛一看2道算法题,人都傻了,想着大厂都没叫我现场手撕代码,心里当时想着放弃,因为没必要,面上我也不去,但是只能硬着头皮去写了。主要是好长时间没写字了。

// 题目一:二分查找有序数组中第一次出现数的位置。(c++解题)
public int search (int[] nums, int target) {
       if(nums.length == 0) {
           return -1;
       }
        int begin = 0;
        int end = nums.length - 1;
        while(begin < end) {
            int mid = (begin + end) / 2;
            if(nums[mid] < target) {
                begin = mid + 1;
            } else {
                end = mid; 
            }
        }
        return nums[begin] == target ? begin : -1;
    }
// 题目二:操作给定的二叉树,将其变换为源二叉树的镜像。(c++解题)
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */
/*
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @param pRoot TreeNode类
 * @return TreeNode类
*/
func Mirror( pRoot *TreeNode ) *TreeNode {
    // write code here
    if pRoot==nil{
        return nil
    }
    pRoot.Left,pRoot.Right =pRoot.Right,pRoot.Left
    Mirror(pRoot.Left)
    Mirror(pRoot.Right)
    return pRoot
}
// 牛客101道题地址:https://www.nowcoder.com/exam/oj

其他公司多为国企和小厂,对算法要求不是太高,看了一下,这些题目刷牛客101题基本都能包含,附上牛客101题的链接。其实面试刷这个101道,大多数公司够用了。

对No.2文章订正:

在No.2文章中笔者在“三道go面试题并进行解答->2.WaitGroup实现原理”中有一处错误“每次执行Add方法,请求计数器v加1,Done方法执行,等待计数器减1”被@叶洪成同学提出疑惑,作者对文章再次检查时发现此处确有书写错误,在No.2文章中已经进行订正。正确为每次Add执行,请求计数器v加1Done方法执行,请求计数器减1v为0时通过通过信号量唤醒wait函数”作者仅代表《Go必知必会》在这里对叶洪成同学表示最真挚的感谢,欢迎更多Go爱好者的加入,携手共建Go最强社区。(欢迎小伙伴投稿,如果觉得文章有用请不要吝惜你的点赞,评论与转发~


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
32 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
4月前
|
机器学习/深度学习 数据采集 人工智能
算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。
**LeNet 摘要** - LeNet 是 Yann LeCun 在 1989 年提出的卷积神经网络,用于手写数字识别,是深度学习和计算机视觉的里程碑。 - 网络结构包括卷积层(C1, C3, C5)、池化层(S2, S4)和全连接层(F6),处理 32x32 灰度图像,最终分类为 10 类。 - 卷积层提取特征,池化层降低维度,全连接层负责分类。激活函数主要使用 Sigmoid。 - LeNet 在 MNIST 数据集上表现优秀,但现代网络常使用 ReLU 激活和更深结构。 - LeNet 的局限性包括网络较浅、Sigmoid 梯度消失问题和平均池化,但其创新为后续 CNN 发展铺平道路
51 1
算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | 不愧是腾讯,问基础巨细节 。。。
**摘要:** 本文介绍了Adaboost算法的基本概念、工作原理和数学基础,它是由 Freund 和 Schapire 在 1996 年提出的迭代机器学习算法,通过组合多个弱分类器形成强分类器。Adaboost 通过调整样本权重,重点关注被错误分类的样本,以提高分类性能。文章还提供了代码示例,展示了如何使用决策树作为弱分类器,并在鸢尾花数据集上应用 Adaboost 分类器。此外,还讨论了Adaboost的优缺点及适用场景,强调其在分类问题上的高效性和广泛应用。
44 1
算法金 | 不愧是腾讯,问基础巨细节 。。。
|
6月前
|
算法 架构师 网络协议
对标腾讯T9架构师的 Android 面试题新鲜出炉,算法真的太重要了
对标腾讯T9架构师的 Android 面试题新鲜出炉,算法真的太重要了
|
6月前
|
存储 算法
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
|
6月前
|
算法 大数据 程序员
Github上线即遭狂转!上百人通过这份算法手抄本成功上岸字节
前言 提到算法大家都不陌生,众所周知计算机的尽头是算法,是数学,这是一个程序员需要面对的重点难点,想要有所突破就得学算法,算法工程师可是一直以高薪著称,年薪30个都只是中等水平。 就从面试求职而言,现如今,各大国内外IT名企无论是笔试还是上机,算法题都是必考。这本书全是干货,作为面试的利器,深入浅出,有的放矢,覆盖面广。其中的题目全是大厂面试的高频题,解法都是最优解,这样的干货对于马上要找工作的“码农”来说是真正的福音! 抱着高分和好评如潮的吸引下,阿鑫开始读了这本书,写一些读后感 读后感: 这本书非常成功地通过简单的例子将复杂的算法拆成一个个既实用又易懂的算法原型,选择了具有代表性的面
|
6月前
|
存储 人工智能 算法
大数乘法的几种算法分析及比较(2014腾讯南京笔试题)
大数乘法的几种算法分析及比较(2014腾讯南京笔试题)
|
6月前
|
算法 搜索推荐 Java
太实用了!阿里内部强推的超全Java算法学习指南,已被彻底征服
算法和数据结构一直以来都是程序员的基本内功。 数据结构可以看作是算法实现的容器,通过一系列特殊结构的数据集合,能够将算法更为高效而可靠地执行起来。
|
6月前
|
算法 搜索推荐
太厉害了!腾讯T4大牛把《数据结构与算法》讲透了,带源码笔记
经历过校招的人都知道,算法和数据结构都是不可避免的。 在笔试的时候,最主要的就是靠算法题。像拼多多、头条这种大公司,上来就来几道算法题,如果你没AC出来,面试机会都没有。
|
6月前
|
算法 大数据 程序员