0%
Redis面试题整理
发表于:
分类于:
Redis/Cache
MySQL常见面试题
发表于:
分类于:
MySQL
Java后端面试
发表于:
分类于:
Java
面经
2025.03.19 小红书日常一面
- IO和NIO的区别
- JVM内存模型,堆里面具体有哪些东西
- 手写监听者模式/单例模式
- ThreadLocal实现原理,并发安全吗,map里面放什么东西,内存泄露如何排查
- get请求里面放什么,参数如何区分
- 讲一下泛型,泛型类的字节码文件是怎样的。
- Spring 注解,RequestBody什么用处
- ArrayList如何扩容
- 虚拟机栈有多大?一个栈帧有多大?
- SQL的UPDATE语句的准确写法
2025.03.20 SAP日常二面
- two sum, three sum
- 缓存空值有问题,应选择布隆过滤器
- 限流
- Zookeeper 了解吗(因为我讲 Redisson 的时候提到了)
- 如果用户名+密码登录,如何保证数据安全。如何加密?RSA?
- 点评项目中,点赞数量太多怎么办。(大 key问题)
2025.03.20 阿里云暑期一面
- 前缀树:输入法提示
- Redis内部有锁吗
- 讲讲SETNX
- sorted set的底层实现
- RDB,AOF的优缺点
- 分布式锁
- 登录验证,为什么要把token存在redis里面,还有更好的方法吗?了解Oauth2吗?
- ThreadLocal 使用的时候需要注意什么问题?
- 是先拿锁,再判断库存;还是先在 lua 脚本里面判断库存,再拿锁
- 有对商户列表做缓存吗?如何解决按照不同的条件排序还能做到缓存?
2025.03.21 PayPal上海 full stack 暑期实习一面
- 合并排序数组
- 数字符串里面一共有多少个 palindrome
2025.03.22 月之暗面搜推实习一面
- 协程
- 讲讲go reduce这个项目的细节
- 手写单例模式,除了双重检验锁,还有什么别的方法可以实现吗?懒汉/饿汉。为什么加 volatile,禁止指令重排序,开辟空间,(实例化,分配给该对象)。
- Redis的数据结构,为什么不用string而是用hash,我说少一步序列化操作
2025.03.24 SAP日常二面
- 为什么用Kafka?优点;用的是Confluent Kafka吗?
- 讲讲对分布式锁的理解,项目代码里面如何实现?我回答MultiLock.
2025.03.25 字节暑期一面
- 如果某条 SQL 执行太慢,怎么排查,用过什么工具。联表查询:小表驱动大表。
- EXPLAIN 会出现一个表格,表格最后有一个 extra column,请介绍
- 方法区里面有什么?
- 讲一讲 G1
- 为什么需要四次挥手?client 最后为什么要 wait?
- 讲一讲建立HTTPS连接的过程
- 手撕 48 和 3
- MySQL主从复制讲一下
- 讲一下Spring的AOP,并且除了动态代理的实现,还有什么实现方法?ASM 字节码操作。
2025.03.26 PayPal暑期二面
- 手写快排
- 为啥要把用户信息存到ThreadLocal里面去
- filter和interceptor的区别
- interceptor 和 AOP的区别
2025.03.27 字节暑期二面
- 合并 k个有序数组
- 讲讲 redo log
- 讲讲MySQL锁
2025.03.27 初创团队实习
- 有用过AWS实现多个服务之间通信吗?
2025.04.01 淘天暑期一面
- 讲SpringMVC如何处理请求
- 联合索引最左匹配
- 线程池
面试准备
git
git merge:适合团队协作
将两个分支的提交历史合并,生成一个新的合并提交(merge commit),保留原始分支的完整历史(包括分叉和合并的痕迹)。
Java反射&动态代理
发表于:
分类于:
Java/Basic
反射
反射是Java在运行时动态获取类的信息(如类名、方法、属性、构造方法等)并操作类的能力
API
获取Class对象
|
|
通过反射创建对象
|
|
获取字段
getDeclaredField(“字段名”)
高可用
发表于:
分类于:
Redis/Cache
Binary Search
发表于:
分类于:
Leetcode/BinarySearch
闭区间写法
找该数
|
|
找左边界
|
|
左闭右开
找左边界
|
|
如果 target 不存在,搜索左侧边界的二分搜索返回的索引是大于 target 的最小索引。
黑马点评登录设计
发表于:
分类于:
BlackHorse Rating
短信验证码登录
- 登录界面输入手机号,然后点获取验证码。此时后端首先校验手机号格式是否正确,接着生成一个验证码。把手机号和对应的验证码存入 Redis,设置过期时间为 2 分钟。
- 登录界面填写验证码,然后点击登录。此时后端对比传过来的手机号和验证码。如果一致,则进行下一步。
- 如果该用户不存在,则创建用户并且保存用户到数据库。
- 随机生成token,作为登录令牌;并将 User 对象转成 Hash,以 token 为 key,以 hash为 value,存入 Redis。
校验登录状态
- 前端携带的请求会带有 token,所有请求都会被RefreshTokenInterceptor拦截。如果没有token直接放行
- 首先获取请求头中的 token,然后基于token获取redis中存储的用户(一个 Map对象)。
- 如果用户存在,则将Map对象转换为UserDTO,并且把它存储在ThreadLocal中,并且刷新 token 的有效期。
第二个Interceptor:除了指定的(不需要用户登陆的)路径之外,其它请求路径都会被 LoginInterceptor 拦截,如果此时没有登录,(UserHolder里为空—),则无法处理请求。
图
发表于:
分类于:
Leetcode/graph