Shopee春招后端面经(已offer)

Saturday, May 15, 2021 | 8 | Saturday, May 15, 2021

@

Shopee 2021春招后端面经回忆录

(⑉・̆-・̆⑉)

 
——> 全文约 3400 字 <——



准备

我的准备时间比较仓促,只有不到一个月的时间(4月11日开始投简历),为了最高效复习并拿到offer,我的准备内容如下:

计算机网络 + 操作系统 + 数据结构 + 数据库 + Redis + 高频面试题 + 高频代码题 + 自己的知识积累(不多) + 自己的项目或实习的总结

  • 关于理论知识(八股文)的准备,我推荐该GitHub仓库:Waking-Up (不包含Redis相关内容);
  • 关于Redis的知识汇总,可以看我的另一篇博客:Redis面经汇总篇 (应该是全网最通俗易懂最全面的知识点,毕竟我也很想拿到虾皮的offer所以也做足了准备工作);
  • 关于高频面试题,我推荐去 牛客网 查对应企业对应职位的面经,比如我查的是:虾皮后端面经 / 虾皮后端一面面经 / 虾皮后端二面面经
  • 关于高频代码题,我推荐该网站:CodeTop ,筛选虾皮后端,就能按照热度和时间对最近考察的手写代码题进行排序,虽然说虾皮的高频考题我没遇上,不过腾讯面试倒是遇到了原题;
  • 关于项目或实习的介绍,特别高频,很多次都被面试官刨根问底地问,所以为了在场表现得十分流利,要自己回顾一下,以及自我介绍啊,准备一套固定的逻辑语料。

虾皮的春招流程为 投递 + 笔试 + 一面 + 二面 + hr面 + OC 

笔试(4月21日|选择 * 15 + 编程 * 3

  • 选择题

    # 按题号顺序

    1. 堆排序是什么排序
    2. HTTP状态码考察
    3. 死锁
    4. 依赖注入
    5. 二分查找的时间复杂度
    6. 事务的四大特性
    7. HashMap的底层原理
    8. HTTP和HTTPS的区别
    9. 链表用什么排序好
    10. 多态机制的作用
    11. 关于Java异常
    12. 给定Java代码,判断输出内容
    13. 面向对象
    14. hash冲突的解决
    15. 数据库索引
  • 手写代码(支持本地调试)

    """
    第一题:上台阶的游戏
    
    详细描述
    一个上台阶的游戏,如果每次只能上1步或者2步;那么一个n级的台阶一共有多少种上法?
    要求时间占用、空间占用尽量少,复杂度尽量低。
    
    其他
    时间限制: 1000ms
    内存限制: 256.0MB
    
    输入输出描述
    输入描述:一个整数
    输出描述:一个整数
    
    输入输出示例
    输入 n = 1
    输出 f(n) = 1
    """
    
    n = int(input().replace("n = ", ""))
    if n <= 0:
     print(f'f(n) = 0')
    elif n == 1:
     print(f'f(n) = 1')
    else:
     result = [1] * (n+1)
     for i in range(2, n+1):
         result[i] = result[i - 1] + result[i - 2]
     print(f'f(n) = {result[-1]}')
    
    # 斐波那契数列(另一种解法)
    def jump_floor(n):
     dom = math.sqrt(5)
     return int( (numpy.power((1 + dom) /2, n) - numpy.power((1 - dom) / 2, n)) / dom)
    

    """
    第二题:字符串包含
    
    详细描述
    我们定义字符串包含关系:字符串A=abc,字符串B=ab,字符串C=ac,则说A包含B,A和C没有包含关系。
    
    其他
    时间限制: 1000ms
    内存限制: 256.0MB
    
    输入输出描述
    输入描述:两个字符串,判断这个两个字符串是否具有包含关系,测试数据有多组,请用循环读入。
    输出描述:如果包含输出1,否则输出0
    """
    
    str1, str2 = input().split()
    print(1) if (str2 in str1) or (str1 in str2) else print(0)
    

    """
    第三题:找出数组所有可能的子集
    
    详细描述
    给出一个整数数组 nums ,数组中的元素互不相同 。返回该数组所有可能的子集(幂集)。
    解集不能包含重复的子集。请按字典顺序返回解集。
    
    其他
    时间限制: 1000ms
    内存限制: 256.0MB
    
    输入输出描述
    输入描述:输入一个含有不同元素的整型数组
    输出描述:按字典顺序输出所有可能的幂集
    """
    
    line = input().replace("[", "").replace("]", "")
    nums = line.split(",")
    nums = list(map(int, nums))
    result = [[]]
    n = len(nums)
    for num in nums:
    result += [item + [num] for item in result]
    print(result)
    
    """
    好难,做不出来,无法按照字典顺序输出,搞了半天直接给我送走,上面是我的方法,但是无法通过测试用例
    """
    

一面(4月25日|自我介绍 + 问答环节 + 编程 * 3

  • 八股

    # 按题号顺序

    1. 哈希冲突(回答不知道…)
    2. 事务的四大特性ACID
    3. HTTP的GET/POST请求的区别
    4. 进程和线程
    5. Python闭包(也不知道)
  • 手写代码

    """
    第一题:两个栈实现一个队列
    """
    
    class Solution:
     def __init__(self):
         self.stackIn = []
         self.stackOut = []
    
     def push(self, a):
         self.stackIn.append(a)
    
     def pop(self):
         if not self.stackOut:
             while self.stackIn:
                 self.stackOut.append(self.stackIn.pop(-1))
         return self.stackOut.pop(-1)
    
    solution = Solution()
    solution.push(1)
    print(solution.stackIn)
    solution.push(2)
    print(solution.stackIn)
    solution.push(3)
    print(solution.stackIn)
    solution.pop() # pop的过程感觉有问题,pop一次全弹出来了
    print(solution.stackIn)
    solution.pop()
    print(solution.stackIn)
    solution.pop()
    print(solution.stackIn)
    solution.push(4)
    print(solution.stackIn)
    solution.push(5)
    print(solution.stackIn)
    solution.pop()
    

    """
    第二题:lambda匿名函数表达奇数
    """
    
    lambda x: x%2 != 0
    

    """
    第三题:合并两个有序数组
    """
    
    class Solution(object):
     def merge(self, nums1, m, nums2, n): # m=len(nums1), n=len(nums2)
         while m>0 and n>0:
             if nums1[m-1]>=nums2[n-1]:
                 nums1[m+n-1]=nums1[m-1]
                 m -= 1
             else:
                 nums1[m+n-1]=nums2[n-1]
                 n -= 1
        if m == 0:
             for i in range(n):
                 nums1[i]=nums2[i]
    

二面(5月09日|自我介绍 + 项目质询 + 问答环节 + SQL编程 * 1

  • 八股

    # 按题号顺序

    1. 数组和链表的区别(内存、扩容),数组怎么扩容(因为我答了这个),为什么随机访问效率高(我也答了这个)
    2. 数据库范式有哪些,并举例说明(三大范式)
    3. 数据库的什么列适合创建普通索引(问的时候说索引一般会分为XX索引和XX索引,也就是普通索引,我没听清),group by / order by 为什么创建索引能提高查询速度
    4. 对于性别这种列适合创建索引吗(不适合,重复性强区分度小),索引创建越多越好吗(不是)
    5. 浏览器输入域名,请求到达服务器的整个过程(之前也被字节问过),如果是HTTPS发送请求会有什么不同
    6. 进程和线程上下文切换的区别(我不会,所以我回答了进程和线程的区别)
    7. 多线程并发会有什么问题(我回答的是会导致死锁,然后针对死锁的特点和死锁如何预防说了很长时间,其实没有完全答对该问题)
    8. 多线程并发对某个数据进行写入操作会有什么问题(其实最好的回答是把数据库的死锁和Redis的分布式锁都回答上)
  • 手写SQL

    """
    有2个表:订单表(order_tab)、订单详情表(子订单,order_detail_tab)
    
    其中订单表的主键是订单详情表的外键,订单表和详情表是1:n的关系,
    现在需求是查询订单详情数量大于10笔的主订单ID及其对应的子订单数量,并根据数量降序排序。
    
    Order_tab: order_id、total_amount(总金额)
    order_detail_tab: detail_order_id、order_id、order_amount(子订单金额)
    """
    

    题目不难,但是我大概有一年半没有写过SQL语句了…所以没写全,最后告诉面试官我的思路是什么😅

    复查了一遍牛客的面经,没人手写SQL(甚至二面很多人都没写代码环节…)

hr面(5月13日|聊聊天

"""
我找同学要了hr面经,然后自己练习过不同的问题对应的回复。虽然就只是很正常的聊聊天,
但是我觉得有条理的陈述个人状况比随机应变要更加让人舒服,尤其是对于比较内向不善言辞的人,我觉得预先练习非常有必要。

hr面预留的时间是25-30分钟左右,但是我这边十五分钟左右就结束了,问的问题也不少,
但是我不太需要组织就能复述练习过的内容。
"""

# 按题号顺序

  1. 自我介绍,学业规划(为什么选择读计算机)
  2. 自己的项目的收获和体会(or实习收获啊 etc.)
  3. 相对别人而言自己的优势
  4. 职业规划(超重要,要让hr知道,你不是三心二意或者动不动跳槽的人)
  5. 怎样的企业能够激发集体荣誉感(因为我在职业规划中提到了企业文化)
  6. 对虾皮的了解
  7. 手里有什么offer(或者更想去哪家公司),期望薪资(我重听自己的面试录音被自己整笑了…)
  8. 反问
  • 一些其他可能问到的内容
  1. 在之前的笔试面试中的优缺点
  2. 如何解决学习中的困难or问题(如何解决在工作时的人际冲突 etc.)
  3. 成绩排名,竞赛,奖学金(其实我觉得自我介绍需要包含这些)

hr面这个part如果能够更加从容地介绍自己,具像化地塑造自己,我觉得会OK一些,虽然大家都说hr面貌似仅仅是 聊 聊 天 而已

后记

  • 我的背景其实完全没有优势,无大厂实习经历无后端项目经历,都是前端和算法的项目,所以在占劣势的前提下,你又想去后端工作,好好准备真的非常重要;

  • 从 2021.04.11 - 2021.05.14 ,一开始我是对虾皮最不抱希望的(顺手投递了…),十分意外地进入了一次次的决赛圈,心态也越来越紧张,准备的也越来越认真。Anyawy,最后的结果是好的,果然,在牛客网许愿超级重要(我二面完当天就在牛客网许愿了)!或者其实是妈妈给我带来了好运(因为妈妈和我姐我弟五一来北京旅游我陪他们玩了四天),二面前后未出hr面的时间里我每天都焦虑得睡不着觉,失眠or噩梦,精神状态也很差,很丧,每当这时候我就会告诉自己我妈都来北京了一定会 bring me Good Luck 的(感谢妈妈虚空之助)!

  • 虾皮的待遇真的太香了,975WLB,我觉得超级人性化,这是我想去虾皮的最重要的理由(也是很多别人的)

  • 最后的最后也po上我发的朋友圈吧,in memory of my first job:

    从小到大我一直在扮演普通而不出色的角色,直到现在我依旧无法逃脱这一宿命。这两年我努力了付出了却还是得不到梦校青睐,而我周围的朋友们早已积攒了无数实习经历并且人手offer,四月中旬我开始诚惶诚恐投虾皮的简历,仓促而又慌张地准备每一次面试,想到自己即将失学又失业我经常整晚整晚做噩梦或失眠,伴随着各种身体机能上的并发障碍,觉得生活黯淡又没有曙光,看到大家意气风发的模样我觉得自己特别失败而差劲。今天终于收到了虾皮的OC,走在路上觉得学校的花好鲜艳每棵树都特别而可爱,风拂过面略带冷意,但是却推着我轻快地向前走。感谢这段期间为我提供过帮助的人,给我精神鼓励的人。我已经很长时间不爱发长段的朋友圈了,也不爱向大家袒露自己破败不堪的黑暗面,可能只有当人们意识到自己永远都可以做一个普通平凡的人,而不一定要成为人中之龙,人们才会平静而欣喜地接受生活中路过的每一条岔路。我的朋友我的同学我素未谋面的陌生人,我们都会有光明的未来。

本文结束。

© 2020 - 2026 Kays Blog ⑅︎◡̈︎*

🌱 Powered by Hugo with theme Dream.

憨批の自我介绍
🍺 Kayman' Blog 🏎️

这个博客用来记录一些生活&学习上的事情 ⑅︎◡̈︎*

一名憨憨CRUD专家,现就职于Shopee ,数据鸡架的 Flink 方向

业余时间只剩下 羽毛球🏸️|篮球🏀|德州♠️|打游戏🎮|肥宅🥤 了……

-- 2022 年 02 月 08 日更新 --

一名憨憨CRUD专家,现即将从就读于 🏫 北大青鸟毕业

业余时间会做开源和一些别的项目啥也不会做

目前准备去1075了,顺便捣鼓些Geek Proj,养老的同时培养点兴趣驱使方向。


在北大最好的朋友是 江栽花 ,我们一个负责吹牛皮一个负责去 GayHub 偷别人的优秀代码,完成过很多烂番茄项目,搞过一段时间的磕盐。

尽管也没人认识我们,但是还是客套地说一下

-- 2021 年 06 月 18 日更新 --
技术栈 & Project

主要的技术栈是:

  • 目前工作的方向是 Flink ˙Ꙫ˙

  • Java ˙Ꙫ˙

  • Python ˙Ꙫ˙

  • SQL ˙Ꙫ˙

  • 一点点的 html + css + js 🤏

  • 一点点的 shell 🤏


做过啥:

(其实啥也没做过 ⑅︎◡̈︎*)

友链 :💬 I will put some of my friends' and technical Dalaos' blogs HERE so as to encourage myself (umm though it may not work hahah~) 📣 😤
⑅︎◡̈︎*

My BEST FRIEND in PKU, so l list her at the first row.

I modify my front-end framework from him. List him here so as to thx him~
加载每日一言中...