一些后端开发的秋招面经
基本情况
练习时长两年半的渣硕练习生,会点 java,粗学了点 golang。
秋招也基本快结束了,奈何水平实在太次导致B和A两家连面试机会都没有;腾讯也挂了。除了实习转正以外也侥幸凭运气收获了一些其他公司的意向书。秋招不易,特来分享一下过来的这段时间面试遇到的一些问题,希望还没有上岸的 20 届的你能保持乐观,坚持下去一定会有满意的 offer;也希望早早的准备找工作的 19 届或者 18 届的你能从下面的一些问题里面收到一些启发。
好事多磨,祝大家好运 ~ ~ ~
顺丰 - 1
顺丰科技 - 大数据部门 35min
- 自我介绍
- 看你简历上有 kafka,那你介绍一下你的这个项目吧
- 为啥用 kafka 呢?都做了什么改动?
- Kafka 怎么保证一个 key 的有序性?
- Hbase 设计 rowkey 的时候有哪些注意点呢?
- 你理解的后端开发与大数据开发有啥区别?你更喜欢哪个呢?
- 对比介绍一下 Java 和 Golang
- 什么样的项目适合 Golang,什么适合 Java?
- 100亿个范围在(0-128)的数字排序
- 你懂 websocket 协议吧?这个协议如何保证双工通信时一方的消息被另一方收到?有序性呢?
腾讯 - 1
csig 60min
实习项目相关的问题:25min
写爬虫的时候如何解决环路问题
如果你是网站开发人员,如何设置反爬虫措施
服务器只允许 10 个线程的并发量,如何处理这些爬虫完成爬取10000个网页的任务
Go 语言相关:
- waitGroup 的使用
- 如何在waitGroup 的协程中实现一个协程失败,所有协程立刻终止
- channel 与 goroutine
http 方法你知道哪些
什么时候会出现 tcp time-wait
压测场景,发出压测的机器存在大量的停在 time-wait 阶段的请求,怎么处理?
tcp 半链接的问题
mysql 分布式锁,可能的问题
myql 慢查询的排查,explaine 的结果各个字段都是啥意思
redis 缓存过期与删除策略
redis 事务:这个真不懂
腾讯 - 2
csig 45min
- 从系统开发者的角度来说 32 位和 64 位系统的区别?
- 指针是什么?
- 32 位 64 位系统的指针有啥区别?
- 怎么在一个编程语言里不用系统库判断出来当前系统是多少位?
- 虚拟地址空间是什么?是怎么操作的?
- 为什么两个进程获得同一块内存的地址,会得到相同的结果,原因?
- mysql 的单点问题与主备的问题
- mysql 主从复制的原理
- CAP 与 BASE 理论
- mysql 主从复制时如何保证强一致性?
- 为什么有了 mysql 还需要 redis 呢?
- redis 持久化?redis 的持久化可以保证强一致性吗?
- 多态啥意思?C++的多态怎么实现的?
- Java 多态,golang 的多态怎么做到?继承呢?
- Golang 的优缺点
- golang 协程之间的通信方式
- 网络五层分层
- tcp 与 udp 的异同
- tcp 连接的可能受到哪些攻击
- 你是怎么理解 tcp 半连接与全连接
- socket 的 accept 什么时候回返回呢?
- select 与 epoll
- 简单的算法题:如何实现一个开根号的函数? - - > 用二分法
- 怎么设置二分法的终止条件
- kafka 的 partation 的概念
- kafka 的消息有序性
- 你实习期间遇到了什么挑战?怎么解决的
腾讯 - 3
csig 40min
- 自我介绍
- 讲一下你的实习
- Spring 和 Mybatis 各用的什么版本???还能这么问的吗,。。。
- Spring 有哪些设计模式,举例说明
- Spring 的 AOP 指的是什么?是怎么实现的?
- 你是如何理解 MVC 的?
- 详细说明一下动态***
- mybatis 在提升数据库访问的安全性上面做了哪些工作 ?
- 啥是 SQL 注入?mybatis 是如何处理的?
- 你的这个 java web 项目是怎么分层的?与前端是怎么交互的?
- java 的序列化的过程?为啥要序列化?
- java 如何创建一个线程,哪种方式比较好?
- list, map,set 有什么区别?
- Collection 与 Collections 有什么区别
- redis 为什么速度快?
- redis 的吞吐量知道吗?自己测过吗?
- kafka 的使用场景
猿辅导 - 1
50min
java int 类型的最大值:2^31-1
jvm 垃圾回收的时机
为什么要划分老年代与新生代
两个年代的回收算法有什么不同
如何判断对象是否应该被回收
遇到内存泄露怎么办?
遇到栈溢出怎么办?什么情况会到是栈溢出?除了无限递归呢?
Tcp 三次握手,四次挥手
为什么三次握手,为什么四次挥手
get 和 post 的区别。从语义上说呢?
你理解的 REST 是什么?
算法题:一个单链表按照正负拆分成两个链表,并返回各自的第一个节点:
实习的项目
猿辅导 - 2
50min
- 算法题 1:求两个递增数组中重复的元素
- 算法题 2:将 n 个有序递增的单链表合并成一个有序递增的单链表
- 你理解的 jvm 是什么样的?
- JVM 的垃圾回收
- Full GC 一定比 Minor GC 的速度慢吗?
- 类加载,为什么要设计这样的双亲委派模式?
- 如何理解堆空间是线程共享的这个概念
- java 线程有哪些状态?
- 如何唤醒一个阻塞状态的线程
- wait 与 notify
- 你是如何理解线程池的?
- 线程池的核心线程数与最大线程数
- synchronized 关键字的理解
- CAS 的理解
- 原子类的理解
猿辅导 - 3
现场三面 60min(面试体验最差的一次)
- 面试官先自我介绍了一下自己的部门和工作内容,发现跟我实习的内容特别一致,就开始聊了很多实习的内容
- TCP 与 UDP 的
- CDN 的理解
- 你在学习计算机基础课程的时候遇到过哪些困难?
- 写个题吧:实现字符串的 split 方法,不能用集合类以及高级数据结构,算法复杂度尽可能的低
- 第一遍我用 stringbuilder 实现的 split ,面试官不满意,问 stringbuilder 为什么比 string 在拼接的时候效率高
- string 为什么要设计成不可变的,为什么要弄一个字符串常量池的jvm中呢?
- 为什么 1.8 常量池移到了堆空间?
- 既然常量池放到堆里面有这么多的好处,为什么1.7及以前不放到堆呢??????(还能这么问?????)
- 你说 string 在java 里面不可变,那对于 用户密码 这种长度不一定的场景要怎么处理呢?????
网易有道 - 1
55min
- 算法题 1:一个 全是 0 和 1 的矩阵,能否找一条从左上到右下的全是 0 的路径:回溯法
- 算法题 2:找到一个全是 0和 1 的字符串中 最长的交错子串。交错的意思是: 01010101 这样
- 写多读少的场景使用哪些集合类
- 要求元素按照一定的顺序取出,用什么集合类?
- 多线程访问的情况下怎么处理?分多线程只读、多线程读写回答
- 你怎么理解 ThreadPoolExceutor 的?
- 高负载的服务器应该用哪种线程池?低负载的呢?
- 什么是阻塞队列?
- 你说的这几种线程池在使用时有什么要注意的 地方吗?
- spring 的设计模式
- autowired 注解是做什么的?
- 一个dao接口有两个相同实现的时候怎么区分
- spring 碰到循环依赖怎么办?
- MySQL表里有个记录时间的字段,经常要对这个时间进行范围查询,这时候是否适合建索引呢?
- 又有个字段是记录这一行信息的状态的,只有 0-3这几个取值,这个字段适合建索引吗?
- linux 如何杀死线程?
- cpu load 知道吗???好像是这么问的,我没听清
- git pull 与 git clone 的区别
网易有道 - 2
现场二面 70min
- 算法题 1:两个线程交替打印奇数、偶数,一直打印到 100.
- 算法题 2:实现一个阻塞队列
- 算法题 3:一个 1TB 的记录 ip 地址的大文件,8G 内存的机器,找出出现频率最高的 N 个 ip 地址
- 有两个并发/多线程的题,所以在检查代码的时候顺便问了一些这方面的问题:
- synchronized 修饰不同方法、类文件的时候有什么区别
- java 线程有哪些通信方式
- wait 与 notify
- TCP 如何保证传输的可靠性
- TCP 如何保证传输的有序性
- TCP 与 UDP 的区别
- TCP 三次握手、四次挥手
- HTTP 请求和返回的头部结构
- HTTPS 建立连接的过程
- MySQL 的隔离级别。幻读与不可重复读的区别
- MySQL 的锁与 MVCC
- 一张含有三个属性列的 5000W 行的表,怎么优化查询速度
这里分别从:水平分表、索引构建、读写分离、引入 Redis 做缓存这些方面回答的 - Redis 是单线程还是多线程?为什么这么做?
- Redis 与 Mysql 的数据一致性
- Kafka 的使用场景
- Kafka 如何才能不丢消息:
- Kafka 怎么保证消息的有序性?
网易有道 - 3
现场三面 60min
- 面试官是做的东西跟我实习的业务场景有些重合,所以讨论了很多实习内容
- 算法题 1:已知二叉树的前序和中序遍历的顺序,求这个二叉树后序遍历的结果
- 算法题 2:一个存储 1TB k-v 数据的文件,150台 8GB 内存的机器,要求把这些 k-v 数据全部用hashMap 存储,怎么实现
- 怎么看待你实习的公司?
- 对比一下 golang 与 java
美团 - 1
现场一面 70min
主要集中的 Java 基础的提问,多线程与并发问的特别多,但是难度整体不大。
- 画一下 java 集合类的体系结构,写出你知道的所有的集合类
- ArrayList 与 LinkedList 的区别,使用场景
- HashMap 的实现原理
- 画一下为什么尾插法的时候,在多线程 resize 的时候会成环?头插法的时候为什么不会成环呢?
- 除了成环,HashMap 在多线程的情况下还会有哪些问题?
- fast-fail 出现的原因是什么?
- 多线程条件下如果想使用 Map 结构,有哪些办法?
- 多线程场景下的 List 呢? Queue 呢?阻塞队列与并发队列的区别。
- CurrentHashMap 的原理。为什么 1.8 要修改实现原理?
- synchronzied 关键字的实现原理,再详细的说一下 mutex
- 画一下 volatile 关键字的作用效果
- 用过线程池吗?线程池的核心参数是啥?线程池的增长策略
- 在重负载的场景下应该用哪种线程池?
- 这种线程池的阻塞队列是无限大的,当任务过多的时候会 OOM ,这时候怎么办?
- Mysql 的隔离级别
- mysql 的可串行化可以解决幻读的问题吗?MVCC 的原理
- Spring 事务讲一下
- spring mvc 的流程,servlet 是线程安全的吗,spring 的线程安全性你了解吗?
- 你是怎么理解微服务的?
- Redis 常见的几种数据结构?zset 可实现先按照属性 A 排序,A相同的情况下再按照 属性B排序吗?
- http 的三次握手与四次挥手
- kafka 为什么吞吐量高?
- kafka 的零拷贝与 linux 的零拷贝一样吗?
- kafka 怎么保证消息的有序性
- kafka 会丢消息吗?
美团 - 2
现场二面 70min
都是基础的问题,但是回答的不好啊
- 你实习的公司跟美团给你的感觉有什么不同?
- 你怎么看待 Golang 这门语言?
- 操作系统的虚拟内存
- 为什么os 要设置一个分页机制?分段呢?
- linux 进程的调度方式
- 网络5层分层,各层分别有什么协议
- 如何判断一个 ip 是否可达? ping,traceroute 其实都行
- traceroute 命令的实现原理
- mysql mvcc 的实现原理
- 辅助索引与聚集索引,辅助索引的查询过程
- sql 的执行顺序
- 算法题 1:如何判断一个链表有环?
- 算法题 2:已知一个链表有环,如何确定环的入口位置
- 算法题 3:写一个快排吧,用数学方式推导快排的时间复杂度
- 为什么快排会有空间复杂度?你是怎么理解调用栈引起的空间复杂度的?
- 后边就是实习的项目的相关问题了
小米 - 1
海外MIUI 40min
- java 里面 map 都有哪些
- hashmap 的原理
- 除了链表法,还有哪些解决hash 冲突的方法
- 如果让你设计 hash 函数,你会从哪些方面进行考虑和设计
- synchronzied 与 lock 的区别
- JUC 包下面都有哪几类并发组件?
- AQS 的原理
- 公平所与非公平锁
- 如果让你设计一个线程池,你会怎么设计?
其实这个问题可以说的方面很多:参数的配置、增长策略、拒绝策略、不同场景下的线程池的配置方式 - JVM 的内存分区
- G1 收集器与 CMS 收集器的区别
- 有做过 jvm 的调优吗?没有。。。
- mysql 的 acid 是什么?是怎么实现的
- mysql 的主从复制是怎么实现的
- redis 与 mysql 的数据一致性怎么保证
- 算法题:如何判断两个链表有交点
- 你觉得 golang 有一天可以取代 java 吗?
小米 - 2
海外MIUI 40min
- JVM 内存分区
- 如何判断死锁
- 我创建了一个 List ,然后不断往 lsit 里面 add 元素,最终出现了 OOM,那么是哪个区域 OOM 了?
- Kafka 如何不丢消息
- 你听说过分布式的一些协议吗?
这里我说了 CAP、BASE,以及简单的介绍了一下几种分布式一致性协议:paxos,zab 等 - redis 是怎么做持久化的
- golang 与 java 的区别在哪?golang 有什么优势吗?
- rpc 的实现原理?与 REST API 相比有什么区别吗
- 算法题:写一个生产者-消费者模型
快手 - 1
50min
- 实习项目相关 - 10min
- JVM 内存分区
- 堆在分配内存的时候会出现冲突吗?怎么分配内存空间
- JVM 的线程与操作系统的线程有什么区别?与进程呢?
- 一个 JVM 的线程在 OS 中的存在形态是怎么样的?是一一对应的吗?
- 包装类是什么?什么时候回用到包装类
- Integer A=new Integer(1),Integer B=new Integer(1),那么 A==B 吗?
- 看过哪些 JDK 的源码?
- AQS 讲一下。
- AQS 的等待队列里的节点都是什么样的状态?先自旋,后阻塞等待前置节点唤醒
- Kafka 生产者是怎么调优和配置的?
- Kafka 的 leader-follower 模型,leader 是怎么***的?
- leader 与 leader 之间会通信吗
- 网络的五层模型。
- TCP 三次握手与四次挥手?
- 当你访问 www.baidu.com 的时候,说一下详细的过程,越详细越好。
- 在数据链路层,是怎么传输消息的?
- 通过 127.0.0.1 和 本机真实 IP 地址发送消息,有什么区别?
- IP 环路或者路由环路知道吗?
- TCP 积压知道吗?
- 算法题:用 Java 实现一个最大堆。
快手 - 2
30min(其实是技术面, 不是 hr 面。。。)
- 介绍一下你的实习
- 你们部门的具体业务场景?
- 实习公司给你的感受?工作强度、好的地方、不好的地方
- 你对你的 leader 有什么看法
- 你们部门有划水的人吗?
- 你对短视频业务的理解
- 你对 Golang 的理解,与 Java 相比呢,你更倾向于哪一个?
- 为什么想先做业务
- 你是怎么看到新业务与旧业务的?
- 当你负责的新业务因为一些原因被 kill 了,你怎么看?
京东 - 1
京东商城 15min(对,你没看错就是只面了不到15min)
- 介绍一下实习的内容
- 实习项目:客户端上报的数据为什么不能直接被后端使用
- 实习期间遇到了哪些难点
- JVM 内存分区
- JVM 类加载过程
- mysql 数据库调优,说一下你会从哪些方面做?
水平分表、垂直分表、读写分离、引入 redis 做缓存、合理规划索引、使用 数据仓库等 - currentHashMap 的实现原理
- sycnhronzied 实现原理,锁升级
京东 - 2
京东商城 15min(是的,你又没看错,就是又面了 15 min)
- 实习项目
- 你这个系统的数据量有多大
- 为什么要引入数据仓库,不用 mysql?为什么不用 es 呢?
- 当这个表变得更大之后,你准备怎么优化这个表的读写速度呢?
- java 线程池的核心参数,为什么要引入线程池呢?
- wait 与 sleep 方法的区别
- synchronzied 与 lock 的区别?各自的实现原理
- lock 有公平所与非公平锁,共享锁与独占锁,它们都是怎么实现的?
- cookie 与 session 的区别