北邮硕士分享秋招经验:腾讯、阿里…面经,红黑树、B+树全用上了

前言:

职场就像围城,我们每一个职场人总是以“墙外”的视角羡慕着“墙内”的世界,而也许你的生活也出现在别人的梦中。希望“互联网坊间八卦”能成为一个分享和了解不同生活的平台。

今天,笔者给大家分享一位19届应届生秋招的遭遇。让我们一起了解一下应届生最原始的求职生活状态。希望这些“干货”能让你认识到不一样的秋招。

北邮硕士分享秋招经验:腾讯、阿里…面经,红黑树、B+树全用上了


写在前面


楼主是北邮真渣硕,之前天真地认为实习期间活儿干完了就能转正,就没有准备提前批,也几乎完美错过了9月秋招正式批。倒在亚马逊的转正答辩后(感到痛心,舍不得组里和善的大佬们,技术好又有耐心又有趣),10月正式踏上秋招,目标是JAVA后台研发。至此告一段落,虽然没拿到什么牛逼的offer,但好歹互联网大厂基本都面了,写下来让自己以后复习,也算回馈网友。


话不多说,面试问题几乎集中在JAVA基础、JVM、算法、数据库(MySQL、Redis)、计算机网络、操作系统等方面,会分类进行列举,限于篇幅项目相关的问题就不写出了。




高频问题


后面面经挺长的,嫌太长的可以只看这部分。基本上你在简历的技能树上写了以下关键词,那这些高频问题你会特别眼熟,有些会附上解答,有写错的地方欢迎指正~


设计模式


  • 单例模式 懒汉、饿汉、双重校验锁、静态内部类
  • 工厂模式


JAVA基础


  • 集合类的结构 Iterator、Collection(List、Set、Queue)、Map
  • ArrayList和LinkedList的区别


HashMap


  • 底层结构 数组 + 链表
  • Put 的过程
  • 为什么长度是2的倍数 找索引时 key 的 hash 值与数组的长度值减 1 进行与运算,长度为 2 的倍数时能减少碰撞
  • JDK 1.7 和 1.8 中 HashMap 的区别 1.8 增加红黑树、头插变为尾插、扩容后元素位置要么在原位置,要么在原位置 + 扩容前旧容量
  • 为什么线程不安全 扩容时链表可能形成闭环
  • ConcurrentHashMap 怎么保证线程安全
  • ConcurrentHashMap 和 HashMap 区别


线程池


  • 线程池常用参数 核心线程数、最大线程数、阻塞队列、线程最大存活时间
  • 线程池工作流程
  • 线程池的类别和区别
  • 阻塞队列的类别和区别


JVM


  • 内存结构和各自存放的内容 方法区、堆、虚拟机栈、本地方法栈、程序计数器
  • 新生代和老年代垃圾回收算法 新生代 -> 复制,老年代 -> 标记-整理(CMS用的标记-清除)
  • CMS/G1的流程 初始标记 -> 并发标记 -> 重新标记 -> 并发清除
  • CMS/G1的特点和区别 CMS:尽可能减少停顿时间,采用标记-清除,会造成内存碎片化 G1:可以预测停顿时间,采用标记-整理,减少内存碎片化, 将内存划分为 region 粒度
  • 判断垃圾是否可以回收的方法 引用计数法、可达性分析法
  • 哪些对象可以作为GC ROOT


Spring


  • IOC 和 AOP 的含义和原理
  • Spring、SpringBoot、SpringMVC 的区别
  • SpringBoot 的启动流程
  • Bean 的生命周期
  • SpringMVC 的流程


MySQL


事务


  • 什么是事务
  • 事务的特性(ACID),详细说明各个特性的含义 原子性、一致性、隔离性、持久性
  • 事务隔离级别 未提交读 -> 已提交读 -> 可重复读 -> 串行化
  • 脏读、不可重复读、幻读的区别
  • 事务隔离级别怎么实现预防上述问题(eg: 可重复读怎么实现预防不可重复读)


索引


  • 常用索引(B树、Hash)
  • 聚簇索引和非聚簇索引的区别
  • B树和B+树的区别 B+树的非叶子节点不保存数据,所以磁盘页能容纳更多节点元素,更“矮胖” B+树查询必须查找到叶子节点,B树只要匹配到即可不用管元素位置,因此B+树查找更稳定(也不慢) 对于范围查找来说,B+树只需遍历叶子节点链表即可,B树却需要重复地中序遍历


Redis


  • Redis 的五种数据结构 String、Hash、List、Set、Zset(SortSet)
  • Redis 为什么快 纯内存、单线程、IO多路复用(一般会继续问IO多路复用相关问题)
  • Redis 持久化 RDB、AOF
  • Redis 高可用 哨兵机制、Redis Cluster、持久化(上面那个)


计算机网络


  • 点击一个URL到页面返回,发生了什么 客户端传给服务端时经过 TCP/IP 四层模型,中途依次加入HTTP报文、TCP报文、IP报文、MAC报文,然后逆序依次拆包
  • OSI 七层模型 & TCP/IP 四层模型


TCP & UDP


  • TCP 三次握手,四次挥手的流程(最好能画图,说明各阶段状态)
  • 为什么需要三次握手 防止已过期的连接再次传到被连接的主机
  • 为什么需要四次挥手 / 断开连接时为什么比建立连接多一次 服务端的 ACK 和 FIN 一般都会分开发送,ACK 表示自己收到了客户端的断开请求(但还有数据没传输完),FIN 表示自己传输完了数据
  • TCP 和 UDP 的区别
  • TIME_WAIT 的作用 保证客户端发送的最后一个ACK报文能够到达服务器 防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失


HTTPS


  • HTTPS的优势 CA证书认证、加密传输
  • HTTPS建立连接流程
  • 为什么传输过程中采用对称加密,协商时采用非对称加密 对称加密快


操作系统


进程 & 线程


  • 进程和线程的区别
  • 进程间通信方式 管道、消息队列、信号量、共享内存
  • 线程间通信方式 消息队列、全局变量


Linux(几乎为Linux命令)


  • 查找某个进程(ps aux |grep threadId)
  • 杀掉某个进程(kill,参数添加-9表示强制执行)
  • 查看某个端口是否被占用(netstat -anp |grep threadId)
  • 实时查看进程状态(top)


算法


  • 最大子序列和
  • 反转链表
  • 数组中查找两数之和为K的序列对




坎坷面经


大家可以找找上面的高频问题在下面的面试中也出现过多少次(笑),针对每个公司会有一个小结(碎碎念)。


腾讯-医疗


一面


MySQL


  • 事务的特性
  • 如何删除表中的所有数据,delete和truncate的区别
  • char, varchar, text的区别
  • 一张表里数据量大,慢查询怎么办


Redis


  • redis 的数据结构
  • zset 的底层结构
  • redis 的常用命令


操作系统


  • 多线程和多进程的区别
  • 进程间通信方式
  • 线程间通信方式


计算机网络


  • TCP 三次握手,四次挥手
  • TCP 和 UDP 的区别
  • UDP 如何重组数据
  • 应用层和网络层是干嘛的
  • ARP 是网络层的吗


腾讯-地图


一面


MySQL


  • MySQL 引擎默认的隔离等级
  • MySQL 有哪些锁
  • 执行 select 和 update 会如何加锁


计算机网络


  • TCP和UDP的区别
  • TCP和UDP的报文头内容
  • HTTP HTTP属于 TCP 还是 UDP HTTP 1.1比1.0多了什么 HTTP Request Header 中有哪些内容 如何判断是否是长连接
  • DNS 属于 TCP 还是 UDP,原理
  • Ping 使用的什么协议,原理


操作系统


  • 进程和线程区别
  • Linux进程有哪几种状态
  • Linux查找某个进程


算法


  • 二分查找
  • 最大子序列和


腾讯-小结


可以看出腾讯对于计算机网络方面的知识要求蛮多的,光熟悉 TCP、UDP、HTTP 相关这样基础的面试题是hold不住面试官的。

楼主目前在开发中还没用到过计算机网络的知识去解决问题,但前人的经验告诉我们后台系统多半会遇到网络拥堵的情况,这个时候计算机网络就能派上用场了(帮助定位问题,调 bug)




阿里-健康


一面


JAVA


  • HashMap原理,用红黑树解决什么问题


MySQL


  • B+树的原理和优势


算法


  • 硬盘中有10G数据,内存1G,如何排序(多路归并排序)
  • 最大子序列和,除了动态规划还能怎么做


阿里-高德


一面


数据库


  • delete 和 truncate 区别
  • 如果索引值为null,走不走索引


JAVA


  • 常见的单例写法


JVM


  • 新生代和老年代的区别
  • 大量大对象进入老年代会有什么问题(频繁触发full GC)
  • 有很多个大对象,应该如何改进


开放式


  • 如何设计一个查询附近商家的功能


二面


开放式


  • 爬虫爬千万个手机号码,如何统计每个手机号码的出现次数


阿里-小结


阿里对于算法方面的考核会更加严格,普通的算法题期待你有多种解法,并且倾向于给你一个具体问题让你解决,然而我开放式问题都答得不咋样
开放式问题一般都是的业务问题(数据量大、用户量大(高并发场景)等等),需要衡量业务是正确稳定至上还是效率至上(同步、异步),还有资源消耗(空间换时间、分布式会导致调度的额外开销),尝试将大问题分解,自上而下/自下而上去解决




美团-金融


一面


JVM


  • JVM的结构
  • 新生代和老年代的垃圾回收算法
  • 虚拟机栈和本地方法栈的区别
  • 类信息会加载到JVM哪个区域


JAVA基础


  • HashMap 和 ConcurrentHashMap 的区别
  • final 的作用,加在变量、方法、类的区别
  • 新建一个 string 会创建几个对象
  • 哪些类是线程安全的
  • 线程池的参数;为什么需要超出最大容量的策略
  • ThreadLocal了解吗


Spring


  • AOP的实现原理
  • @Autowired和@Resource的区别
  • 什么情况下会用@Resource


MySQL


  • B+树的优势
  • 悲观锁和乐观锁了解吗
  • 数据库如何实现乐观锁


设计模式


  • 工厂模式怎么理解
  • 单例模式有哪几种实现方式
  • 懒汉和饿汉的区别,懒汉的缺点


算法


  • 反转链表


二面


JAVA基础


  • HashMap 和 ConcurrentHashMap 的区别
  • hash 冲撞怎么办?如何 rehash
  • HashMap 的遍历方式
  • 为什么 HashMap 是线程不安全的
  • volatile 和 synchronized 的区别


Spring


  • SpringBoot 的优势
  • SpringMVC 的 MVC 指什么?好处呢


Redis


  • 主从结构了解吗
  • 宕机之后如何恢复数据


消息队列


  • rabbitmq 和 kafka 的区别
  • rabbitmq 如何保证事务
  • 消息队列的优势


美团-数据平台


一面


JAVA基础


  • ConcurrentHashMap 的特点
  • JUC 包下其他并发类了解过吗
  • 多个消费者生产者,如何处理同一段数据(消费者-生产者模型)


操作系统


  • 线程间通信的方式


JVM


  • 阐述 JMM 内存模型
  • 垃圾回收算法有哪些
  • 标记-整理会触发 Stop The World 吗
  • 什么情况下触发mirror GC
  • JVM 结构
  • 新建的字符串会存到哪


消息队列


  • 设计时应该考虑什么问题
  • 如何保证高可用


算法


  • n个有序数组,找出 Top k


美团-到家


一面


JVM


  • JVM 存在的优势
  • 通过什么方式来判断是否回收
  • 哪些对象可以当 GC root
  • 虚拟机栈的对象为什么能当 root
  • 堆和栈区别


JAVA基础


  • ArrayList 和 LinkedList区别
  • HashMap 的底层数据结构
  • JDK 1.8 中 HashMap 有哪些变化
  • 静态变量和非静态变量的区别
  • 类和对象的区别
  • Synchronized 和 Lock 区别
  • Lock 底层实现
  • Exception 和 Error 的区别
  • 线程池常用参数
  • 在什么情况下使用这些参数(线程池工作流程)


设计模式


  • 手撕单例模式的双重检验锁
  • 为什么要有两次检验


Redis


  • Redis 为什么快
  • Redis 如何保证可用


MySQL


  • B树索引和hash索引区别
  • 聚簇索引和非聚簇索引


计算机网络


  • HTTPS 建立连接流程


算法


  • LeetCode11 water
  • 给定一个数,通过调换顺序,找到比这个数大的最小数


分享到:


相關文章: