Java后端实习 base:上海
字节一面(一小时)
一、3道算法题
上来3道算法题,让选一道,做的快让你在做一道
1、打家劫舍 https://leetcode-cn.com/problems/house-robber-ii/
2、在字符矩阵中判断能否组成一个字符串? 用深度遍历
3、最大连续子串
https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/
MySQL索引结构,InnoDB的聚簇索引和普通索引。
回表的概念
联合索引的存储情况,最左匹配原则。
B+树相比于B树的优点。B+树好于B树,那么B树有哪些使用场景?B树的使用场景:MongoDB
MySQL的隔离级别,幻读的概念
MySQL的默认隔离级别是RR,如何解决幻读的问题?间隙锁。
MVCC的工作原理。Read view如何实现数据可见性判断?
Redis为什么这么快?主要原因还是存储在内存中,数据操作快。说了单线程不是Redis快的原因。Redis 6.0以后推出了多线程版本。还一个原因是key-value键值对数据操作简单。
Redis的基本数据类型。String、List、Hash、Set、Zset。
Zset的底层实现:跳表。什么是跳表?
https://www.jianshu.com/p/dc252b5efca6
如何保证数据库和Redis的数据一致性,先更新数据库再删除缓存。先删除缓存再更新数据库这两个方法分别存在什么问题?
如何解决?这个当时没想出来
可以参考:
Java基础
Object类下面有哪些方法 猝不及防,忘了 只说了hashcode,toString,wait。
应该有(object构造方法、getClass、hashCode、equals、clone、toString、notify、notifyAll、wait、finalize(JDK9遗弃))
HashMap的put过程。
线程池7大核心参数,线程池执行任务的过程。
字节二面(45分钟)
两道算法题
盛水最多的容器:https://leetcode-cn.com/problems/container-with-most-water/
132模式:https://leetcode-cn.com/problems/132-pattern/
Object类有哪些方法?
线程有哪些状态?wait和block的区别?Wait超时后会怎样?
其实wait的线程被唤醒后其实会进入block的状态去抢锁,而国内大部分博客都画成唤醒后进入就绪状态。我当时说这个观点,面试官也疑惑了一下,然后解释了这个原因。因为wait是在同步代码块中运行的,所以被唤醒后会要去抢锁,抢到锁才会进入就绪状态,这不乏是个小亮点。可以看下老外的这张线程状态转换图
https://www.zhihu.com/question/27654579
Synchronized加锁机制
死锁的产生,怎么解决?讲了下死锁的4个必要条件
哈希值有什么用?
HashMap的put过程,hashcode方法为什么要&数组长度的length-1,如果重写hashcode方法都为1会怎么样?一直会发生哈希冲突,全部结点在那一个下标下形成链表,然后转化为红黑树。
计算存储下标时&操作比%操作的好处?长度采用2^n的好处?
HTTP有哪些请求方法,GET、POST、PUT、DELETE、TRACE、HEAD。分别代表什么意思
Cookie和Session的区别,什么是session共享?
进程、线程、协程
进程间通信方式,分别解释了下实现的原理和存在的问题。
自己目前有什么打算?
Hr面试(20分钟)
实习时间。为什么考研?读研期间的经历?为什么想来字节?反正就是聊天式的面试。
总结下吧:字节总体面试下来还是十分舒服的,hr小姐姐非常亲切,第一个面试官我在回答问题和讲解代码的时候,都会肯定下,不打断你让你一直讲。第二个面试官稍微有点高冷。然后自己在回答问题的时候尽量把自己知道的都讲出来,可以稍微引导下面试官往自己知道的知识问,比如问我redis为什么快的时候?我会提到单线程并不是redis快的原因。接着他会问我为什么?我说wait被唤醒后会进入blocked状态?他也会问下为什么是这样?
非常感谢guide哥整理的面试资料,非常全:https://github.com/Snailclimb/JavaGuide
最后祝小伙伴都能成为offer收割机,拿到心仪的offer。
#实习##字节跳动##Java工程师##面经#