字节跳动
# Java
▲ 20 Java 中垃圾回收机制中如何判断对象需要回收?常见的 GC 回收算法有哪些?
▲ 18 synchronized 关键字底层是如何实现的?它与 Lock 相比优缺点分别是什么?
▲ 17 hashmap 和 hashtable 的区别是什么?
▲ 15 HashMap 与 ConcurrentHashMap 的实现原理是怎样的?ConcurrentHashMap 是如何保证线程安全的?
▲ 11 HashMap 实现原理,为什么使用红黑树?
▲ 9 hashMap 1.7 / 1.8 的实现区别
▲ 9 简述 Java的反射机制
▲ 6 Java 线程间有多少通信方式?
▲ 6 简述 Synchronized,volatile,可重入锁的不同使用场景及优缺点
▲ 6 Java 类的加载流程是怎样的?什么是双亲委派机制?
▲ 5 简述常见的工厂模式以及单例模式的使用场景
▲ 5 JVM 中内存模型是怎样的,简述新生代与老年代的区别?
▲ 3 Java 常见锁有哪些?ReetrantLock 是怎么实现的?
▲ 3 ThreadLocal 实现原理是什么?
▲ 3 简述 Spring 的初始化流程
▲ 3 简述生产者消费者模型
▲ 1 Java 如何高效进行数组拷贝
▲ 1 CAS 实现原理是什么?
▲ 1 成员变量和方法的区别?
▲ 1 Java 中接口和抽象类的区别
# C++
▲ 11 简述 C++ 右值引用与转移语义
▲ 11 const、static 关键字有什么区别
▲ 11 C++的多态是如何实现的?
▲ 11 C++ 中解释类模板和模板类的区别
▲ 8 C++ 中哪些函数不能被声明为虚函数?
▲ 4 C++ 中虚函数与纯虚函数的区别
▲ 3 简述 C++ 中内存对齐的使用场景
▲ 1 构造函数为什么不能被声明为虚函数?
▲ 1 什么是内存泄漏,怎么确定内存泄漏?
# 操作系统
▲ 23 进程间有哪些通信方式?
▲ 15 操作系统如何申请以及管理内存的?
▲ 13 简述 socket 中 select 与 epoll 的使用场景以及区别,epoll 中水平触发以及边缘触发有什么不同?
▲ 9 操作系统中,虚拟地址与物理地址之间如何映射?
▲ 8 I/O多路复用中 select, poll, epoll之间有什么区别,各自支持的最大描述符上限以及原因是什么?
▲ 6 简述操作系统中的缺页中断
▲ 5 进程和线程之间有什么区别?
▲ 4 两个线程交替打印一个共享变量
▲ 4 简述 mmap 的使用场景以及原理
▲ 3 Linux 中虚拟内存和物理内存有什么区别?有什么优点?
▲ 2 什么时候会由用户态陷入内核态?
▲ 1 简述 traceroute 命令的原理
▲ 1 简述 Linux 零拷贝的原理
▲ 1 简单介绍进程调度的算法
▲ 1 什么情况下,进程会进行切换?
▲ 1 简述自旋锁与互斥锁的使用场景
# 网络协议
▲ 13 TCP 中常见的拥塞控制算法有哪些?
▲ 11 TCP 怎么保证可靠传输?
▲ 9 一次 HTTP 的请求过程中发生了什么?
▲ 9 简述常见的 HTTP 状态码的含义(301,304,401,403)
▲ 9 简述 TCP 三次握手以及四次挥手的流程。为什么需要三次握手以及四次挥手?
▲ 8 TCP的拥塞控制具体是怎么实现的?UDP有拥塞控制吗?
▲ 8 简述 HTTPS 的加密与认证过程
▲ 8 什么是跨域,什么情况下会发生跨域请求?
▲ 5 DNS 查询服务器的基本流程是什么?DNS 劫持是什么?
▲ 4 简述对称与非对称加密的概念
▲ 4 简述 OSI 七层模型,TCP,IP 属于哪一层?
▲ 4 HTTP 的方法有哪些?
▲ 3 简述 TCP 滑动窗口以及重传机制
▲ 1 TCP四次挥手过程以及所处状态,为什么还需要有 time_wait?
▲ 1 TCP 在什么情况下服务端会出现大量 CLOSE_WAIT ?
# 算法
▲ 22 给定 100G 的 URL 磁盘数据,使用最多 1G 内存,统计出现频率最高的 Top K 个 URL
▲ 19 10亿个数中如何高效地找到最大的一个数以及最大的第 K 个数
▲ 17 合并两个有序链表 (Leetcode)
▲ 17 64 匹马,8 个赛道,找出前 4 匹马最少需要比几次;
▲ 14 实现快速排序
▲ 14 两数相加 II (Leetcode 445)
▲ 12 搜索旋转排序数组 (Leetcode)
▲ 12 判断有环链表的环长度 (Leetcode)
▲ 12 旋转数组的最小数字 (Leetcode)
▲ 11 最大子序和 (Leetcode)
▲ 11 给定一个 foo 函数,60%的概率返回0,40%的概率返回1,如何利用 foo 函数实现一个 50% 返回 0 的函数?
▲ 11 搜索旋转排序数组 II (Leetcode)
▲ 10 K 个一组翻转链表 (Leetcode 25)
▲ 9 最长连续子序列 (Leetcode)
▲ 9 二叉树的最近公共祖先 (Leetcode 236)
▲ 8 最小栈 (Leetcode)
▲ 8 丑数 II (Leetcode 264)
▲ 8 路径总和 (Leetcode)
▲ 8 二叉树的锯齿形层次遍历 (Leetcode)
▲ 7 旋转数组 (Leetcode)
# 数据库
▲ 22 MySQL 为什么使用 B+ 树来作索引,对比 B 树它的优点和缺点是什么?
▲ 15 数据库的事务隔离级别有哪些?各有哪些优缺点?
▲ 13 Redis 序列化有哪些方式?
▲ 12 简述 Redis 持久化中 rdb 以及 aof 方案的优缺点
▲ 12 简述 Redis 的哨兵机制
▲ 12 Redis 如何实现分布式锁?
▲ 11 简述 Redis 中如何防止缓存雪崩和缓存击穿
▲ 7 简述乐观锁以及悲观锁的区别以及使用场景
▲ 6 数据库有哪些常见索引?数据库设计的范式是什么?
▲ 4 Redis 有几种数据结构?Zset 是如何实现的?
▲ 4 Cookie和Session的关系和区别是什么?
▲ 4 Redis 中 key 的过期策略有哪些?
▲ 3 什么情况下会发生死锁,如何解决死锁?
▲ 3 并发事务会引发哪些问题?如何解决?
▲ 2 简述数据库中的 ACID 分别是什么?
▲ 2 MySQL 中 join 与 left join 的区别是什么?
▲ 1 简述 MySQL 三种日志的使用场景
▲ 1 模糊查询是如何实现的?
# 系统设计
▲ 14 简述 CAP 理论
▲ 2 简述生产消费者模式的流程
▲ 1 设计一个阻塞队列
▲ 1 简述 MapReduce 的原理
▲ 1 停车场有有限个车位,有多个车来抢车位,设计一个系统需要根据车辆进入和离开停车场的时间进行计费
# 非技术
▲ 6 项目中最难的地方是哪里?你学习到了什么?
# 前端
▲ 25 手写题库 https://github.com/Mayandev/fe-interview-handwrite
▲ 12 简述浏览器的渲染过程,重绘和重排在渲染过程中的哪一部分?
▲ 11 简述 diff 算法的实现机制和使用场景
▲ 9 什么是闭包,什么是立即执行函数,它的作用是什么?简单说一下闭包的使用场景
▲ 9 promise 有哪些状态?简述 promise.all 的实现原理
▲ 9 简述什么是 XSS 攻击以及 CSRF 攻击?
▲ 9 localstorage 与 cookie 的区别是什么?
▲ 8 Vue 中双向数据绑定的实现原理是怎样的?
▲ 8 简述 CSS 有哪些上下文类型?
▲ 5 简述 ES6 的新特性
▲ 5 了解过 Gulp Grunt 吗?简述他们的优势以及劣势
▲ 4 Javascript 可以保存的最大数值是多少?
▲ 4 优化首屏渲染的方式有哪几种?
▲ 3 JavaScript 中的严格模式是什么,有什么作用?
内容来自github.com