字节跳动面试题汇总

手写算法题汇总

5个人去一个海岛寻宝,最后一共找到了100枚金币。他们约定了一个分配方案。

给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。

一个环有10个节点,编号0-9。从0点出发,走N步又能回到0点,共有多少种走法? 一个乱序数组,求第K大的数。排序方式使用字典序。

1,给定数组,每个元素代表一个木头的长度,木头可以任意截断, 从这堆木头中截出至少k个相同长度为m的木块,已知k,求max(m) 2, 数组找右边第一个比它大的数 没有输出-1
3, rand5 [0,1,2,3,4] 实现 rand7[0,1,2,3,4,5,6]

算法:大数(字符串)相加 算法:统计n 转换成二进制数,其中1 的个数 算法:统计【0,n】所有的数转换成二进制数的1个总个数

算法1:输出一个矩阵离原点从近到远的坐标。(距离:|x|+|y|)

算法3:一个无序数组除了一个数,剩下都出现偶数次,且都相邻出现,比如11233444400 ,找到单独出现的数字

算法题:最长上升子序列长度。

写题:已知二叉树的先序遍历序列,输出它的中序遍历序列。比如先序:ABC##D#E###,输出中序CBDEA。#表示空节点,中序输出不需要#。

写个题,给定一个数组 [1,2,3] 和一个值 x,数字可以重复选取,输出所有和等于 x 的结果。 算法: 最长无重复子串 不用dp 空间常数时间

算法题: String偏移,左移k个单位 算法题:实现一个减法器 12345.789 - 3333675.32455 算法题:给一个二维数组 找出其中最长上升序列 [[1 5 8], [2 6 7], [4 1 3] ] 最长 1 2 6 7 8

算法题:二叉树的最低公共祖先 算法题:二叉树的Z字形遍历。 算法题:迭代二叉树的深度 算法题:二叉搜索树的后序遍历序列 算法题:根据中序与先序数组,求后序遍历的数组 算法题:二叉树多个节点的最低公共祖先 一棵二叉树,求最大通路长度。(即最大左右子树高度之和)

算法题:链表倒数第k个结点 算法题:K 个一组翻转链表 算法题:删除链表倒数第k个元素 算法题:0~9的环,从0出发,N步后能否走回0。

算法题:给你一串正整数,要求将其中两个进行一次swap,得到一个最大的正整数。 例如:326587变成826537。(单线栈或额外储存最后出现的坐标) 算法题:随机生成100个100~200位的大数,然后进行求和。

算法题:0~n-1中缺失的数字(两种方法) 算法题:1,股票,你们懂得 算法题:2,股票,重复购买 算法题:3,股票,有交易费用 算法题:走迷宫,找出一共路径即可 算法题:给定一共链表 1->10 -> 3->8 ->5 ->6 ->7,重新排序位一个升序链表。

算法题:31.下一个排列 算法题:全排列和全排列II 算法:一个无序数组,num[0]<num[1],num[n-2]>num[n-1],找到一个数,使得比左右相邻的两个数都大(用二分判断波峰)

磁盘上有10G大小的文件,存储int型的数字,数据是无序的。给你1M的内存空间,把磁盘上的数据排成有序的

说了使用二叉排序树...

面试官提示:使用传统的排序算法。快排,归并这些思路

写SQL:1。反正写分组查询结合条件

写SQL:2。在上题基础上加个子查询

写SQL:表student_score 字段:name, course, score 求 每个人考的最好的一门

一、给定一个数组代表股票每天的价格,请问只能买卖一次的情况下,最大化利润是多少? 二、那在日期不重叠的情况下,可以买卖多次,最大化利润是多少呢?股票买卖问题,leetcode原题 三、有两个数组,任意长度。 有两个线程分别读取数组a和数组b,线程1循环打印数组a中的数字,线程2循环打印数组b中的数,要求交叉,要求第一个数组先输出。


int a[n] = {1,2,3,4} 

int b[m] = {'a', 'b', 'c'}

以上述a、b数组为例,最终打印的结果类似于下面:1a2b3c4a1b2c3a4b1c...

口述算法汇总

口述LRU算法, LRU不适合的场景

口述最大栈 类似剑指offer里的最小栈

口述 最小生成树算法

口述 两数之和(可能不存在两数和为target)

智力题

智力题:甲乙最后三次抛硬币,正反反甲赢,反反正乙赢,俩人胜出概率谁大?

智力题:一个圆内随机三个点刚好在一个半圆的概率。算错了,我想的简单了,后来网上查了一下发现是一个挺复杂的问题。

还有一个思维题 一个岛上 居民只带红帽子或者白帽子,他们不能交流, 红帽子数大于等于1,如果他们能知道自己的帽子什么颜色则可以离岛,问最后是什么情况,如果能全部离岛问需要多少天。

场景题

场景题:

  1. 给你300G的大文件,前部分是时间戳,后部分是日志内容,如果我想搜寻到某段时间的日志内容,你会怎么处理?(模拟B+树或OS中的多级页表,或者模拟redis中的跳跃表)
  2. 秒杀系统设计,给你一个秒杀任务,如何保证他的可靠性和防止超卖?说说要用到的技术就行。
    1. 你redis如何保证缓存一致性?
    2. 它是来一个请求就下单吗?
    3. 如果两个用户在两个不同的机器上登录进行秒杀,那该用户能同时下单同一件商品两次吗?
  3. 微信朋友圈数据库和高可用设计

技术点汇总

1、java基础

  1. 进程和线程的区别,使用线程真的能节省时间?
  2. 谈一下线程池用的参数?线程池工作流程?四种预定义的线程池区别。 各自workqueue size是多大?
  3. JAVA如何保持线程同步?常用的锁有什么?java锁升级是怎么样的?
  4. hashmap同步问题,扩容机制,怎么扩容的过程?哈希冲突哪有哪些解决?
  5. concurrentHashmap的工作原理,数据结构?
  6. 泛型,jvm怎么对泛型进行支持?
  7. Integer 和 int 的区别,平时编程中什么时候使用 Integer,什么时候使用 int?new Integer(1); 会不会从缓存当中取
  8. List 中为什么只能使用 Integer,不能使用 int?
  9. 介绍下NIO,NIO中Channel的作用
  10. 什么是悲观锁和乐观锁,区别是什么?原理是什么?
  11. 创建线程有哪些方式?线程有哪些状态?
  12. finalize方法
  13. 说说抽象类和接口的区别。
  14. synchonized和lock的区别?synchonized优化
  15. 为什么线程多的时候要使用锁而不是CAS?
  16. 谈一下异常,erorr和exception的区别,讲一下受检异常和非受检异常,说一下RuntimeException都有哪些,非受检异常有哪些?如何处理异常
  17. 什么是阻塞和非阻塞,什么是同步,异步?
  18. 什么是反射?反射的用途?为什么java需要反射,c++不需要。
  19. 有哪些方式可以创建一个对象?
  20. 多线程和协程的优缺点?

java框架(spring,netty)

  1. spring的核心模块有哪些?IOC和AOP的原理?
  2. spring的事务传播是怎么样的,哪些方式?
  3. spring是如何解决循环依赖的?
  4. Netty 的零拷贝怎么实现的?
  5. 讲一下Dubbo的服务降级源码
  6. hystrix的工作流程?
  7. hystrix和sentinel的区别?

jvm原理

  1. int i = 1; 这样的基本类型可能会存在于jvm的哪些区域?
  2. jvm 如何判断对象可以被回收?
  3. jvm 如何判断对象已经死亡,两种方法的判断流程是怎样的,哪个效率高?
  4. GCRoots 的对象有哪些?本地方法栈中的对象为什么可以作为GCRoots,怎么连接到 Java 对象的?
  5. java内存分为哪些区域,每个区域的具体作用?
  6. 说说JVM的GC算法,常见的垃圾回收器用的是什么算法。
  7. 说说CMS回收器。
  8. 类加载机制了解吗?说说双亲委任加载机制。最顶层的加载器是什么?
  9. 说说Full GC和Minor GC的回收内容和区别。
  10. 说一下方法表都存什么?说一下每个类都有一张方法表吗?
  11. 说一下栈都有什么?说一下局部变量表都有什么?
  12. 说一下栈溢出,堆溢出?方法区会溢出不?类元数据哪些会溢出?
  13. Java内存分配的流程?创建一个大对象的流程。为什么大对象直接进入老年代?
  14. happens-befor原则
  15. 谈谈多态,多态的底层原理
  16. CAS的底层原理,synchonized的底层原理
  17. volatile的原理?

2、linux原理和服务器

  1. 水平触发边沿触发的区别?在边沿触发下,一个socket有500的数据,已读取200然后不再处理,是不是剩下的300就永远无法读取?
  2. free -h,buffers 和cached有什么不同
  3. 后台进程有什么特点,如果要你设计一个进程是后台进程,你会考虑什么
  4. 僵尸进程是什么,如果产生一个僵尸进程,如何查找僵尸进程
  5. 孤儿进程是什么?
  6. 一个进程有20个线程,在某个线程中调用fork,新的进程会有20个线程吗?
  7. 用过哪些Linux命令?
  8. 如何查看Linux系统状态 ,如何查看线程,如何查看服务器负载,top的参数
  9. 知道/proc文件夹吗
  10. 虚拟内存,为什么要用虚拟内存,解决了什么问题;
  11. 进程间通信有哪些方式 ?重点问了消息队列和共享内存以及管道,提了一下信号量,内存共享的实现原理?
  12. Linux命令,指定两列,提取重复内容
  13. 页面置换算法有哪些?进程调度都有哪些算法?
  14. linuxI/O过程,内核、用户态
  15. 进程和线程的区别?
  16. nginx是正向还是反向代理?有什么区别?nginx多站点如何实现负载均衡?

3、网络

  1. tcp三次握手,四次挥手的过程?以及为什么要这么做,TCP三次握手,哪个握手容易遭受到攻击

  2. http是基于tcp还是udp?与https有什么区别? https加密方式是对称的吗?

  3. https的加密流程?

    1. HTTPS的连接过程,中间人是什么?CA认证过程?
  4. http的报文结构?

  5. TCP第几层,OSI多少层

  6. 设计http协议,A端发送 AAAA,至少让B端知道AAAA已发送完成。

  7. socket中,在tcp协议层面,数据分为10个报文发放。1-7次很顺利,第8次丢失。这次通信一定失败吗?如果第8次数据会重发,那在接收端是不是:先读取到1-7次的数据,然后读取到8-10次的数据?还是9-10次的数据会先到达?

  8. tcp/ip 流量控制和拥塞控制,滑动窗口机制,Nagle算法

  9. tcp udp区别,基于流和基于报文的区别,会引发什么问题;为什么会有快重传和快恢复,怎么做的;基于udp的协议有什么,是否了解过OICQ协议(表示没了解);udp怎么可以保证数据安全顺序到达。

  10. 301/302有什么区别?应用上有什么异同。

  11. 50X相关错误码的内涵是什么?

  12. close wait和time wait是什么?如何排查?有什么意义?

  13. TIME_WAIT状态什么时候出现?只在客户端出现?

  14. http req和resp的中数据有哪些

  15. 什么是连接的半打开,半关闭状态

  16. 域名是如何被解析为ip地址的

  17. dns缓存是存放在浏览器还是系统

  18. 浏览器对网页有缓存吗?缓存是如何存放的?

  19. Cookie和session的联系与区别,cookie、session、分布式session

  20. 如何保证TCP可靠传输

  21. 什么是SSO?什么是JWT ? SSO、JWT和Redis登陆的过程

4、mysql数据库

  1. mysql为什么要用b+树,不用平衡二叉树做索引结构?B树和B+树有什么区别?
  2. 创建数据库索引应该怎么考虑?
  3. 使用int 做primary key和使用string 有什么优劣?
  4. 数据库分表的方法?
  5. 表结构,订单纪录如下,写一个语句,求卖的最好的 top 10 product_id。
  6. 如何预估一个mysql语句的性能?
  7. mysql 的主键索引和非主键索引有什么区别?什么是索引覆盖?
  8. 如果一条SQL语句执行的很慢,怎么优化?
  9. mysql为什么没有使用hash索引?
  10. 索引的匹配原则知道吗?
  11. MySQL事务隔离级别?
  12. Mysql的查询执行流程?更新执行流程?
  13. mysql有哪些存储引擎?什么区别?
  14. 数据库的表结构设计遵循哪些规则?

5、redis缓存

  1. redis单线程为什么性能高?
  2. Redis 为什么可以保证线程安全?
  3. Redis的七大数据类型和底层数据结构?
  4. 假如一个业务依赖单点redis,此redis故障将导致业务不可用,如何改进
  5. redis sharding有哪些做法
  6. 当大量数据要求用redis保存,单机单点难以满足需要,设计(换寻找)一个负载均衡的方案
  7. 当redis 采用hash做sharding,现在有8个节点,负载方案是 pos = hash(key) % 8,然后保存在pos节点上。这样做有什么好处坏处?当8个节点要扩充到10个节点,应该怎么办?有什么更方便扩充的方案吗?(一致性hash, presharding)
  8. 如何保证redis和数据库数据的一致性。比如用户名既保存在数据库,又保存在redis做缓存。有如下操作 update_db(username); update_redis(username)。但是执行update_db后故障,update_redis没有执行。有什么简单办法解决这个问题。
  9. Redis的Token有没有存在安全问题?如何解决?

消息队列

  1. RabbitMQ用途、结构
  2. RabbitMQ可靠性传输
  3. RocketMQ的事务最终一致性,RocketMQ事务模型
  4. 消息队列的可靠性如何保证,如何保证消息不重不漏

分布式和微服务

  1. Dubbo的原理
  2. Dubbo的负载均衡
  3. Dubbo的SPI源码
  4. 限流都有哪些算法,给我讲一下令牌桶
  5. cap解释下,p是什么?Base理论是什么?哪些框架cap用了哪些?
  6. zab协议选举过程?如果选举的时候zxid都相同呢
  7. 什么是分布式事务?分布式事务的解决方案?
  8. 分布式锁如何实现?RedLock算法

架构和设计模式

  1. rpc框架如何实现?
    1. 服务提供方有节点挂了怎么办?
    2. 服务调用方怎么知道服务不可用了?
    3. 怎么实现的类似本地调用?
    4. 你的rpc可以支持多语言吗?
  2. 微服务,A服务请求B服务B1接口,B1接口又请求A服务A2接口。会不会有问题?
  3. 什么是脑裂问题?脑裂问题如何解决?
  4. 谈一谈单例设计模式,你还知道哪些设计模式?
  5. 流量总入口为api_gateway,api_gateway挂了会导致全部挂挂,用什么机制增大可用性?
  6. 分布式事务在业务中如何处理?
  7. 延时队列如何设计?

非技术问题

  1. 为什么离职?根本原因是什么?
  2. 聊下你的职业规划?
  3. 你有哪些爱好?
  4. 最近在看什么书?
  5. 最近看的电影是什么?
  6. 你觉得你的优点和缺点是什么?
  7. 有其他Offer吗?
  8. 你平常怎么学习新技术?