Skip to content

面试题

2021-04-06 字节一面

  1. python 装饰器不用@怎么实现
  2. 怎么实现一个 map
  3. 怎么实现一个 FIFO 的队列 (链表、数组)
  4. epoll
  5. tcp/ip 三次握手
  6. 并发锁 (自旋锁?) 死锁
  7. 求平方根

2021-05-10 华为 od 一面

  1. python 基础
  2. 算法: 三数之和

2021-05-17 华为 od 二面

  1. python 基础
  2. 算法:一次编辑

2021-05-20 pdd 一面

  1. java 基础
  2. 数据库
  3. 层序遍历二叉树

2021-05-27 滴滴 一面

  1. java 基础
  2. redis 数据结构 sds 实现
  3. 算法:二分查找

2021-06-02 阿里 天猫好房 一面

  1. java 基础
  2. 线程池参数

2021-06-03 kyligence 一面

  1. python 基础
  2. java 基础

2021-6-4 同花顺 一面

  1. java 基础
  2. 项目介绍

2021-06-06 字节一面

  1. java synchronized ReentrantLock
  2. 缓存双删
  3. B+ Tree 索引 表 id(主键索引),age(普通索引) select * where age <1索引过程
  4. 三层 b+ tree 查询磁盘读取几次 (存在缓存 1 - 3 次)
  5. sql 性能优化 用 缓存 消息队列等
  6. b+ tree 散列表 索引区别
  7. 算法: leetcode [122] 买卖股票的最佳时机 II

2021-06-07 坚果云 一面

  1. 分布式部署

  2. python 协程,web 框架

  3. flask 上下文 g

  4. redis 数据结构

  5. python 用过什么新包、框架 (web, orm)

  6. HTTP 2.0 特性

  7. Explain 字段含义

  8. sql

    数据库表 学生 id age

    • 查询某个年龄段,每个年龄的人数
    • 相同年龄人数大于 3 的年龄
    • 删除 id 重复的数据
  9. 代码: 登录(一小时 3 次限制)

2021-06-07 bilibili 一面

  1. 项目相关
  2. 数据库事务
  3. 隔离级别
  4. sql 查询 关键词 执行顺序
  5. 数据库缓存 ?
  6. Java 容器
  7. Java GC
  8. 手写单例模式
  9. Java 创建线程
  10. 交替打印 abc 123 --- leetcode [1115] 交替打印FooBar
  11. redis 快的原因
  12. redis 持久化
  13. redis 分布式锁 中间件相关

2021-06-07 奇安信 一面

  1. python java 项目相关
  2. 协程

2021-06-08 bilibili 二面

  1. 项目相关
  2. [950] 按递增顺序显示卡牌
  3. [279] 完全平方数

哭死,一个不会

2021-06-08 坚果云 二面

  1. 项目相关
  2. 手写 LRU

2021-06-08 涂鸦智能 一面

  1. java
  2. jvm

直接 gg

2021-06-09 美团 一面

  1. 翻转字符串
  2. java 容器
  3. java 线程创建方式
  4. hashmap 结构
  5. spring IOC AOP 原理
  6. jvm 运行时数据区域
  7. jvm 本地方法栈 是做什么的,体现的 java 什么特性? 跨平台/可移植性
  8. A a = new A() 存在 jvm 那个区域 (堆)
  9. 死锁条件 - 互斥、占有等待、不可抢占、环路等待
  10. 死锁恢复 - 鸵鸟策略、死锁检测和预防、死锁恢复、死锁避免
  11. redis 持久化
  12. redis 缓存穿透 缓存雪崩
  13. 消息队列:好处 异步、削峰、解耦
  14. Mysql 分库分表
  15. redis 微信 token 缓存不一致 (设置一样的过期时间)
  16. 单点登录的实现

2021-06-10 cityDo 一面

  1. 项目介绍
  2. spring 如何解决 bean 的循环依赖
  3. 线程不安全,J.U.C - AQS 源码
  4. synchronized ReentrantLock 比较
  5. java 轻量级锁膨胀为重量级锁
  6. Redis zset 跳跃表 查询过程
  7. redis 分布式部署

2021-06-11 小黑鱼 一面

  1. 项目介绍
  2. python java 的区别
  3. python 装饰器
  4. python 类怎么重写构造函数添加功能
  5. 平时写 python 用到了哪些设计模式
  6. python 类的 静态方法、类方法、实例方法使用场景
  7. python 传参 可变对象,不可变对象
  8. 引用传递 复制数据

2021-06-12 cityDo 二面

  1. 项目介绍
  2. mvc 打开一个网页的全过程
  3. 面向对象 面向过程 区别
  4. 面向对象思想
  5. Java 容器
  6. spring springboot 区别
  7. springboot 理解
  8. 数据库持久层 mybatis
  9. 缓存 消息队列 用在哪些地方
  10. 分布式的理解

2021-06-16 bilibli 业务技术 一面

  1. 项目介绍
  2. 网关 限流 熔断 降级
  3. redis 数据结构 使用场景
  4. 跳表的实现,数据量大和小的时候分别适用什么数据结构(跳表,压缩列表)
  5. redis 缓存一致性
  6. mysql binlog, 利用 binlog 能做清缓存操作吗?
  7. 用过那些消息队列,他们之间的对比
  8. 消息队列顺序性
  9. 消息队列可靠性
  10. 消息队列重复消费

2021-06-16 乐言科技 一面

  1. 项目介绍
  2. Java 锁的理解
  3. redis 淘汰策略
  4. 实现 LRU
  5. ConcurrentHashMap 锁的实现
  6. Java NIO
  7. 分布式系统 微服务
  8. 判断链表是否有环

2021-06-16 网易雷火 一面

  1. 项目介绍
  2. python 框架 flask django
  3. 进程 线程, 线程能访问的变量
  4. multiprocess subprocess 的区别
  5. GIL
  6. 列表去重

2021-06-17 小黑鱼 java 一面

  1. 项目介绍
  2. 线程池的组成
  3. 线程池队列的实现
  4. ThreadLocal 的实现,线程安全,内存溢出
  5. Gap lock:间隙锁 是读锁还是写锁
  6. mysql 索引不走的情况
  7. sql 查询 导致服务器 cpu 满载的情况

2021-06-17 阿里 java 电话不知道是不是正式

  1. 项目介绍
  2. 线程池
  3. java 基础
  4. 数组中查找指定数字(排序加二分)
  5. 一个矩阵,有个机器人,从 0,0 开始 会有一些坐标是障碍物,求机器人经过3个点的最短路径, 入参:矩阵大小、 障碍物坐标、三个点坐标

2021-06-17 shopcider java 一面

  1. 项目介绍
  2. 排序
  3. redis 一般用来做什么
  4. 消息队列用来做什么
  5. mysql 聚簇索引 辅助索引
  6. explain 查看慢查询
  7. 慢查询怎么处理

2021-06-17 滴滴 一面

  1. 项目介绍
  2. java oom 怎么定位
  3. NIO
  4. redis 数据结构
  5. jdk 源码看过哪些
  6. juc 锁
  7. mysql 联合索引结构
  8. 处理数据库慢查询
  9. 大数相加

2021-06-18 阿里 一面

  1. java 锁 synchronize ReentranLock
  2. 线程池组成
  3. 设计模式 单例模式 代理模式
  4. spring 原理 IOC AOP
  5. spring 事务 注解不同使用 @Tranactional
  6. 怎么实现一个 aop 切面
  7. 怎么使用事务
  8. 大量数据找出重复的 URL

2021-06-18 脉脉 一面

  1. 项目介绍
  2. http 499 状态码
  3. http 301 302 303 区别
  4. redis 数据结构
  5. leetcode [40] 组合总和 II
  6. leetcode [63] 不同路径 II
  7. 实现 m 天 n 次的流量检测
  8. mysql 索引

2021-06-18 叽里呱啦 一面

  1. 分段数字

    写一个函数:

    给定一个整数的list,例如 [404, 401, 403, 405, 407, 409, 408],未排序

    输出,排序后的"分段数字": [[401], [403, 405], [407, 409]]

    当一个数字前后没有连续数字时,用一元组表示,如[401];

    当有连续数字出现时,用二元组表示“分段”,只需要首尾,如[403, 405]

    python
    def solution(nums):
        res = []
        n = len(nums)
        i = 0
        pre_num = float('inf')
        while i < n:
            for j in range(i+1, n):
                if nums[j] >= nums[i]:
                    continue
                nums[i], nums[j] = nums[j], nums[i]
            if not res or pre_num + 1 != nums[i]:
                res.append([nums[i]])
            else:
                res[-1] = [res[-1][0], nums[i]]
            pre_num = nums[i]
            i += 1
        return res
    
    
    nums = [404, 401, 403, 405, 407, 409, 408]
    print(solution(nums))
  2. leetcode [958] 二叉树的完全性检验

  3. ArrayList LinkedList 区别

  4. redis 数据结构

  5. mysql 事务

  6. redis 事务和 mysql 事务的不同

  7. mysql 索引

  8. mq 重复消费 消息丢失

  9. redis 保证扣库存不被重复修改(lua 脚本?)

2021-06-19 美团优选 二面

  1. 项目介绍
  2. 寻找重复数 时间 O(n) 空间 O(1)
  3. 排序 O(n) 算法
  4. java 锁
  5. hashmap 实现
  6. 线程池组成
  7. jvm 结构 收集器
  8. mysql 隔离级别 索引 高性能查询
  9. 消息队列 作用 顺序性 可靠性
  10. 消息队列组成

2021-06-21 脉脉 二面

  1. 项目介绍
  2. java python 的区别
  3. 进程线程协程
  4. redis 数据结构
  5. 消息队列可靠性顺序性
  6. url 输入后发生了什么
  7. 如何设计一个秒杀系统

2021-06-22 哔哩哔哩 二面

  1. 项目介绍
  2. 计算机网络
  3. TCP 保证可靠,一端程序被 kill 怎么保证可靠
  4. 子进程
  5. 僵尸进程
  6. 浏览器为什么禁止跨域
  7. 终端如何启动程序
  8. 用 python 做一个 java 的 CI 要怎么做
  9. 扑克牌排序
  10. 找出素数

2021-06-22 货拉拉 一面

  1. ArraryList 源码,怎么实现
  2. Hashmap 源码怎么实现
  3. 线程池 源码怎么实现
  4. java 锁怎么实现
  5. ConcurrentHashmap 源码怎么实现
  6. 面试官建议我准备两份简历? Python 一份 java 一份

2021-06-22 UCloud 一面

  1. 项目介绍
  2. 进程线程
  3. 死锁
  4. linux 命令
  5. redis 数据结构 命令
  6. Dockerfile RUN CMD ENTRYPOINT 区别 执行时机
  7. 输入 URL 到页面展示的过程
  8. 快排

2021-06-23 微软 一面

  1. 字符串 indexof abcd bc
  2. restful api 匹配 /account/{account}/id/{id} /account/123/id/456

2021-06-23 阿里 二面

  1. [leetcode 560] 和为 k 的子数组
  2. redis
  3. 消息队列

2021-06-24 shopcider 二面

  1. 项目介绍
  2. TCP 滑动窗口
  3. TCP 报文
  4. TCP 拥塞控制
  5. 看过什么源码
  6. spring 事务传播级别怎么实现
  7. 数据库 binlog redolog undolog
  8. pgsql mysql 差异
  9. 链表翻转

2021-06-24 滴滴 二面

  1. 项目介绍

2021-06-24 阿里 三面

  1. 项目介绍
  2. Write a function to return the length of the longest consecutive sequence in a tree
  3. redis 设置成功了怎么保证持久化成功 (是坑,其实是问为什么不保证)

2021-06-25 紫光华智 一面

  1. 项目介绍
  2. 深拷贝浅拷贝
  3. 雪花算法
  4. 限流漏桶
  5. 缓存穿透,缓存击穿

2021-06-25 哔哩哔哩 三面

  1. 项目介绍

2021-06-28 微软 一轮

python
# 1.	Given n integers {a1, a2, … an} and a target sum k.
# Find an integer sequence {b1, b2, … bn} such that
#     1)	bi <= ai
#     2)	b1 + b2 + … + bn = k
#     3)	Minimize max(bi)

# a[] = [2,1,5,6,2,3], k = 13
# b[] = [2,1,3,3,2,2] max(bi) = 3
# b[] = [2,1,4,4,2,3] max(bi) = 4

# *?

def solution(nums, k):
    # b = nums[:]
    delta = sum(nums) - k
    n = len(nums)
    if not nums or delta <= 0:
        return nums
    nums.sort()

    pre = 0
    high = 0
    for i in range(n):
        # 当前和
        cur = pre + nums[i] * (n - i)
        # print(pre, nums[i], (n - i), cur)
        if cur >= k:
            left = (k - pre) % (n - i)
            high = (k - pre) // (n - i)
            break
        # 前缀
        pre += nums[i]

    return high

print(solution([2,1,5,6,2,3], 16))

2021-06-28 微软 二轮

  1. 求平方根

  2. 合并用户 给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。

    现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必定属于同一个人。请注意,即使两个账户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有任意数量的账户,但其所有账户都具有相同的名称。

    合并账户后,按以下格式返回账户:每个账户的第一个元素是名称,其余元素是按字符 ASCII 顺序排列的邮箱地址。账户本身可以以任意顺序返回。

python
def solution(num):
    if num <= 0:
        return
    start = 0
    end = num
    while start < end:
        mid = (start + end) / 2
        temp = mid * mid
        if abs(temp - num) < 0.0001:
            return mid
        elif temp > num:
            end = mid
        else:
            start = mid


def solution2(num):
    if num < 1:
        return 1 / solution(1 / num)
    return solution(num)

# print(solution2(0.5))

# 给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。

# 现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必定属于同一个人。请注意,即使两个账户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有任意数量的账户,但其所有账户都具有相同的名称。

# 合并账户后,按以下格式返回账户:每个账户的第一个元素是名称,其余元素是按字符 ASCII 顺序排列的邮箱地址。账户本身可以以任意顺序返回。

from collections import defaultdict

def solution3(accounts):
    if not accounts:
        return accounts

    n = len(accounts)

    cache_map = defaultdict(list)

    for i in range(n):
        flag = True
        cur = set(accounts[i][1:])
        del_ids = []
        for j in cache_map:
            if cache_map[j] and cur & set(cache_map[j]):
                del_ids.append(j)
                flag = False
        if del_ids:
            master = del_ids[0]
            cache_map[master].extend(accounts[i][1:])
            for z in del_ids[1:]:
                cache_map[master].extend(cache_map[z])
                del cache_map[z]

        if flag:
            cache_map[i].extend(accounts[i][1:])

    return [
        [accounts[p][0], sorted(set(cache_map[p]))]
        for p in cache_map
    ]



print(solution3([
    ['John', 'a@com', 'b@com'],
    ['John', 'c@com', 'd@com'],
    ['John', 'b@com', 'c@com'],
    ['John1', 'e@com'],
    ['John2', 'b@com'],
    ['John3', 'b@com'],
]))

2021-06-28 微软 三轮

  1. 系统之间认证
  2. redis 缓存相关问题
  3. 手写LRU
  4. 最长递增子序列
python
#  {10, 22, 9, 33, 21} -> {10, 22, 33}
# 打印最长递归子序列,符合一种序列即可

def solution(nums):
    if not nums:
        return 0

    n = len(nums)
    dp = [1] * n
    path = [[nums[i]] for i in range(n)]

    for i in range(n):
        for j in range(i):
            if nums[i] > nums[j] and dp[j] + 1 > dp[i]:
                dp[i] = dp[j] + 1
                path[i] = path[j][:] + [nums[i]]
    return max(path, key=len)


print(solution([10, 22, 9, 33, 21]))

2021-06-29 微软 四轮

转换数字 如 六百一十三万五千五百五十五

python
def solution(s):
    nums_map = {
        "一": 1,
        "二": 2,
        "三": 3,
        "四": 4,
        "五": 5,
        "六": 6,
    }
    cache_map = {
        "千": 1000,
        "百": 100,
        "十": 10
    }

    n = len(s)

    temp = 0
    cur_base = 1
    base_num = 1

    for i in range(n-1, -1, -1):
        item = s[i]
        if item in nums_map:
            temp += nums_map[item] * base_num * cur_base
        elif item in cache_map:
            base_num = cache_map[item]

        if item == "万":
            cur_base = 10000
            base_num = 1
        elif item == "亿":
            cur_base = 100000000
            base_num = 1

    return temp


print(solution("六百一十三万五千五百五十五"))

2021-06-29 酷家乐 一面

  1. oauth2
  2. java JUC 原理
  3. 线程池
  4. ReentrantLock synchronized 对比
  5. wait() 和 sleep() 区别
  6. 线程的状态
  7. spring IOC AOP
  8. spring 事务传播级别
  9. JVM 结构
  10. MyBatis
  11. JWT

2021-06-30 乐言科技 三面

  1. 项目介绍

2021-07-01 趣链科技 一面

  1. 多线程 线程池
  2. https 过程
  3. get 和 post 区别 delete update, get 为什么没 body

2021-07-05 趣链科技 二面

  1. 项目介绍
  2. 排行榜的实现,数据结构
  3. https 过程
  4. 算法:多线程统计文件数量
  5. 算法:链表翻转

2021-07-06 字节 一面

  1. 实现一个 kv 数据库的快照 (版本、log、os.fork)
  2. 实现 kv 数据库的事务
  3. 设计一个 rpc 框架
  4. 实现一个分布式锁
  5. rpc 框架 和 http 的关系
  6. 算法: 打印二叉树每层的右侧节点
  7. 进程线程区别

2021-07-08 趣链科技 三面

  1. 项目介绍
  2. python java 多线程的区别
  3. 如何提高 web 服务可支持的并发量
  4. java 线程数和操作系统线程数关系
  5. 线程数量的设置,调优
  6. 加密算法 对称 非对称

2021-07-08 快手 一面

  1. 项目介绍
  2. 排行榜的实现
  3. 分布式系统的了解 redis 等等
  4. https 加密
  5. ConcurrentHashMap
  6. 文件系统
  7. 二叉树广度遍历
  8. 寻找数组中寻找第 k 大值

2021-07-15 字节 二面

  1. 项目介绍
  2. 实现重试机制装饰器
  3. 算法:链表排序
  4. 高可用定时任务

Last updated: