面试题
2021-04-06 字节一面
- python 装饰器不用@怎么实现
- 怎么实现一个 map
- 怎么实现一个 FIFO 的队列 (链表、数组)
- epoll
- tcp/ip 三次握手
- 并发锁 (自旋锁?) 死锁
- 求平方根
2021-05-10 华为 od 一面
- python 基础
- 算法: 三数之和
2021-05-17 华为 od 二面
- python 基础
- 算法:一次编辑
2021-05-20 pdd 一面
- java 基础
- 数据库
- 层序遍历二叉树
2021-05-27 滴滴 一面
- java 基础
- redis 数据结构 sds 实现
- 算法:二分查找
2021-06-02 阿里 天猫好房 一面
- java 基础
- 线程池参数
2021-06-03 kyligence 一面
- python 基础
- java 基础
2021-6-4 同花顺 一面
- java 基础
- 项目介绍
2021-06-06 字节一面
- java synchronized ReentrantLock
- 缓存双删
- B+ Tree 索引 表 id(主键索引),age(普通索引) select * where age <1索引过程
- 三层 b+ tree 查询磁盘读取几次 (存在缓存 1 - 3 次)
- sql 性能优化 用 缓存 消息队列等
- b+ tree 散列表 索引区别
- 算法: leetcode [122] 买卖股票的最佳时机 II
2021-06-07 坚果云 一面
分布式部署
python 协程,web 框架
flask 上下文 g
redis 数据结构
python 用过什么新包、框架 (web, orm)
HTTP 2.0 特性
Explain 字段含义
sql
数据库表 学生 id age
- 查询某个年龄段,每个年龄的人数
- 相同年龄人数大于 3 的年龄
- 删除 id 重复的数据
代码: 登录(一小时 3 次限制)
2021-06-07 bilibili 一面
- 项目相关
- 数据库事务
- 隔离级别
- sql 查询 关键词 执行顺序
- 数据库缓存 ?
- Java 容器
- Java GC
- 手写单例模式
- Java 创建线程
- 交替打印 abc 123 --- leetcode [1115] 交替打印FooBar
- redis 快的原因
- redis 持久化
- redis 分布式锁 中间件相关
2021-06-07 奇安信 一面
- python java 项目相关
- 协程
2021-06-08 bilibili 二面
- 项目相关
- [950] 按递增顺序显示卡牌
- [279] 完全平方数
哭死,一个不会
2021-06-08 坚果云 二面
- 项目相关
- 手写 LRU
2021-06-08 涂鸦智能 一面
- java
- jvm
直接 gg
2021-06-09 美团 一面
- 翻转字符串
- java 容器
- java 线程创建方式
- hashmap 结构
- spring IOC AOP 原理
- jvm 运行时数据区域
- jvm 本地方法栈 是做什么的,体现的 java 什么特性? 跨平台/可移植性
- A a = new A() 存在 jvm 那个区域 (堆)
- 死锁条件 - 互斥、占有等待、不可抢占、环路等待
- 死锁恢复 - 鸵鸟策略、死锁检测和预防、死锁恢复、死锁避免
- redis 持久化
- redis 缓存穿透 缓存雪崩
- 消息队列:好处 异步、削峰、解耦
- Mysql 分库分表
- redis 微信 token 缓存不一致 (设置一样的过期时间)
- 单点登录的实现
2021-06-10 cityDo 一面
- 项目介绍
- spring 如何解决 bean 的循环依赖
- 线程不安全,J.U.C - AQS 源码
- synchronized ReentrantLock 比较
- java 轻量级锁膨胀为重量级锁
- Redis zset 跳跃表 查询过程
- redis 分布式部署
2021-06-11 小黑鱼 一面
- 项目介绍
- python java 的区别
- python 装饰器
- python 类怎么重写构造函数添加功能
- 平时写 python 用到了哪些设计模式
- python 类的 静态方法、类方法、实例方法使用场景
- python 传参 可变对象,不可变对象
- 引用传递 复制数据
2021-06-12 cityDo 二面
- 项目介绍
- mvc 打开一个网页的全过程
- 面向对象 面向过程 区别
- 面向对象思想
- Java 容器
- spring springboot 区别
- springboot 理解
- 数据库持久层 mybatis
- 缓存 消息队列 用在哪些地方
- 分布式的理解
2021-06-16 bilibli 业务技术 一面
- 项目介绍
- 网关 限流 熔断 降级
- redis 数据结构 使用场景
- 跳表的实现,数据量大和小的时候分别适用什么数据结构(跳表,压缩列表)
- redis 缓存一致性
- mysql binlog, 利用 binlog 能做清缓存操作吗?
- 用过那些消息队列,他们之间的对比
- 消息队列顺序性
- 消息队列可靠性
- 消息队列重复消费
2021-06-16 乐言科技 一面
- 项目介绍
- Java 锁的理解
- redis 淘汰策略
- 实现 LRU
- ConcurrentHashMap 锁的实现
- Java NIO
- 分布式系统 微服务
- 判断链表是否有环
2021-06-16 网易雷火 一面
- 项目介绍
- python 框架 flask django
- 进程 线程, 线程能访问的变量
- multiprocess subprocess 的区别
- GIL
- 列表去重
2021-06-17 小黑鱼 java 一面
- 项目介绍
- 线程池的组成
- 线程池队列的实现
- ThreadLocal 的实现,线程安全,内存溢出
- Gap lock:间隙锁 是读锁还是写锁
- mysql 索引不走的情况
- sql 查询 导致服务器 cpu 满载的情况
2021-06-17 阿里 java 电话不知道是不是正式
- 项目介绍
- 线程池
- java 基础
- 数组中查找指定数字(排序加二分)
- 一个矩阵,有个机器人,从 0,0 开始 会有一些坐标是障碍物,求机器人经过3个点的最短路径, 入参:矩阵大小、 障碍物坐标、三个点坐标
2021-06-17 shopcider java 一面
- 项目介绍
- 排序
- redis 一般用来做什么
- 消息队列用来做什么
- mysql 聚簇索引 辅助索引
- explain 查看慢查询
- 慢查询怎么处理
2021-06-17 滴滴 一面
- 项目介绍
- java oom 怎么定位
- NIO
- redis 数据结构
- jdk 源码看过哪些
- juc 锁
- mysql 联合索引结构
- 处理数据库慢查询
- 大数相加
2021-06-18 阿里 一面
- java 锁 synchronize ReentranLock
- 线程池组成
- 设计模式 单例模式 代理模式
- spring 原理 IOC AOP
- spring 事务 注解不同使用 @Tranactional
- 怎么实现一个 aop 切面
- 怎么使用事务
- 大量数据找出重复的 URL
2021-06-18 脉脉 一面
- 项目介绍
- http 499 状态码
- http 301 302 303 区别
- redis 数据结构
- leetcode [40] 组合总和 II
- leetcode [63] 不同路径 II
- 实现 m 天 n 次的流量检测
- mysql 索引
2021-06-18 叽里呱啦 一面
分段数字
写一个函数:
给定一个整数的list,例如 [404, 401, 403, 405, 407, 409, 408],未排序
输出,排序后的"分段数字": [[401], [403, 405], [407, 409]]
当一个数字前后没有连续数字时,用一元组表示,如[401];
当有连续数字出现时,用二元组表示“分段”,只需要首尾,如[403, 405]
pythondef 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))
leetcode [958] 二叉树的完全性检验
ArrayList LinkedList 区别
redis 数据结构
mysql 事务
redis 事务和 mysql 事务的不同
mysql 索引
mq 重复消费 消息丢失
redis 保证扣库存不被重复修改(lua 脚本?)
2021-06-19 美团优选 二面
- 项目介绍
- 寻找重复数 时间 O(n) 空间 O(1)
- 排序 O(n) 算法
- java 锁
- hashmap 实现
- 线程池组成
- jvm 结构 收集器
- mysql 隔离级别 索引 高性能查询
- 消息队列 作用 顺序性 可靠性
- 消息队列组成
2021-06-21 脉脉 二面
- 项目介绍
- java python 的区别
- 进程线程协程
- redis 数据结构
- 消息队列可靠性顺序性
- url 输入后发生了什么
- 如何设计一个秒杀系统
2021-06-22 哔哩哔哩 二面
- 项目介绍
- 计算机网络
- TCP 保证可靠,一端程序被 kill 怎么保证可靠
- 子进程
- 僵尸进程
- 浏览器为什么禁止跨域
- 终端如何启动程序
- 用 python 做一个 java 的 CI 要怎么做
- 扑克牌排序
- 找出素数
2021-06-22 货拉拉 一面
- ArraryList 源码,怎么实现
- Hashmap 源码怎么实现
- 线程池 源码怎么实现
- java 锁怎么实现
- ConcurrentHashmap 源码怎么实现
- 面试官建议我准备两份简历? Python 一份 java 一份
2021-06-22 UCloud 一面
- 项目介绍
- 进程线程
- 死锁
- linux 命令
- redis 数据结构 命令
- Dockerfile RUN CMD ENTRYPOINT 区别 执行时机
- 输入 URL 到页面展示的过程
- 快排
2021-06-23 微软 一面
- 字符串 indexof abcd bc
- restful api 匹配 /account/{account}/id/{id} /account/123/id/456
2021-06-23 阿里 二面
- [leetcode 560] 和为 k 的子数组
- redis
- 消息队列
2021-06-24 shopcider 二面
- 项目介绍
- TCP 滑动窗口
- TCP 报文
- TCP 拥塞控制
- 看过什么源码
- spring 事务传播级别怎么实现
- 数据库 binlog redolog undolog
- pgsql mysql 差异
- 链表翻转
2021-06-24 滴滴 二面
- 项目介绍
2021-06-24 阿里 三面
- 项目介绍
- Write a function to return the length of the longest consecutive sequence in a tree
- redis 设置成功了怎么保证持久化成功 (是坑,其实是问为什么不保证)
2021-06-25 紫光华智 一面
- 项目介绍
- 深拷贝浅拷贝
- 雪花算法
- 限流漏桶
- 缓存穿透,缓存击穿
2021-06-25 哔哩哔哩 三面
- 项目介绍
2021-06-28 微软 一轮
# 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 微软 二轮
求平方根
合并用户 给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。
现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必定属于同一个人。请注意,即使两个账户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有任意数量的账户,但其所有账户都具有相同的名称。
合并账户后,按以下格式返回账户:每个账户的第一个元素是名称,其余元素是按字符 ASCII 顺序排列的邮箱地址。账户本身可以以任意顺序返回。
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 微软 三轮
- 系统之间认证
- redis 缓存相关问题
- 手写LRU
- 最长递增子序列
# {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 微软 四轮
转换数字 如 六百一十三万五千五百五十五
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 酷家乐 一面
- oauth2
- java JUC 原理
- 线程池
- ReentrantLock synchronized 对比
- wait() 和 sleep() 区别
- 线程的状态
- spring IOC AOP
- spring 事务传播级别
- JVM 结构
- MyBatis
- JWT
2021-06-30 乐言科技 三面
- 项目介绍
2021-07-01 趣链科技 一面
- 多线程 线程池
- https 过程
- get 和 post 区别 delete update, get 为什么没 body
2021-07-05 趣链科技 二面
- 项目介绍
- 排行榜的实现,数据结构
- https 过程
- 算法:多线程统计文件数量
- 算法:链表翻转
2021-07-06 字节 一面
- 实现一个 kv 数据库的快照 (版本、log、os.fork)
- 实现 kv 数据库的事务
- 设计一个 rpc 框架
- 实现一个分布式锁
- rpc 框架 和 http 的关系
- 算法: 打印二叉树每层的右侧节点
- 进程线程区别
2021-07-08 趣链科技 三面
- 项目介绍
- python java 多线程的区别
- 如何提高 web 服务可支持的并发量
- java 线程数和操作系统线程数关系
- 线程数量的设置,调优
- 加密算法 对称 非对称
2021-07-08 快手 一面
- 项目介绍
- 排行榜的实现
- 分布式系统的了解 redis 等等
- https 加密
- ConcurrentHashMap
- 文件系统
- 二叉树广度遍历
- 寻找数组中寻找第 k 大值
2021-07-15 字节 二面
- 项目介绍
- 实现重试机制装饰器
- 算法:链表排序
- 高可用定时任务