没有合适的资源?快使用搜索试试~ 我知道了~
当前面经21.12.8.docx
需积分: 0 0 下载量 136 浏览量
2021-12-08
12:01:47
上传
评论
收藏 1.65MB DOCX 举报
温馨提示
![preview](https://dl-preview.csdnimg.cn/58534706/0001-1a063e8eb7dae5b7b6e8df4e46e46198_thumbnail-wide.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
试读
31页
当前面经21.12.8.docx
资源详情
资源评论
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/58534706/bg1.jpg)
3.多个线程如何并发操作
4.物理内存 虚拟内存
5.http 请求 请求头包含什么
6.a,b,c 三色的兔子,任意两色相撞变第三色,如果要使最后变成一种颜色
的兔子,abc 数量满足什么条件(8 分钟,当时想了个错误答案)
7.任务调度,求一堆任务中可以选的最多任务数量(贪心),给了 13 分钟,
想了个思路大概写了一下,面完仔细想了下发现可能不对。
数组和链表的区别?
ArrayList 的扩容是怎么实现?
介绍一下 hashmap,介绍一下 put 操作做了哪些步骤?(问了细节)
hashmap 判定重复是==还是 equals
hashmap1.7 和 1.8?
hashMap 是线程安全吗?介绍一下 concurrentHashMap?如何保证线程安全
的同时保证吞吐量?
synchronized 在 jdk1.8 做了哪些优化?
synchronized 为什么要设计成可重入?
volatile 的原理?解决什么问题?
介绍一下 JMM
Lock 接口?了解过 AQS 嘛?
ReentrantLock 可以做公平锁吗?怎么实现公平锁?
![](https://csdnimg.cn/release/download_crawler_static/58534706/bg2.jpg)
算法题:用栈实现队列(Leetcode)其中栈的数据结构也自己实现
String s1 = “abc” String s2 = new String(“abc”)两个语句分别创建了
几个对象?对象存储的位置?s1 和 s2 相等吗?执行顺序先是第一条再是第二
条创建几个对象?
interface 和 abstract 的区别
abstract 抽象类里面一定要有抽象方法吗?
interface 可以写方法的实现吗?
jvm 的类加载机制?
双亲委派机制?
TCP 属于网络的哪一层?
TCP 是面向连接的?为什么三次握手?
TCP 怎么保证可靠传输?
滑动窗口的大小由哪一端来控制?server 为什么要控制?client 为什么要控
制?
拥塞控制知道吗?
mysql 联合索引一道题目:建立了联合 a,b,c。
a,b,c 会走索引吗?a,c 会走索引吗?
算法题:无重复字符的最长子串(leetcode)
你有什么问题要问我吗?问了一下业务?问了一下什么语言?
作者:秦 17
链 接 : https://www.nowcoder.com/discuss/637866?
type=all&order=recall&pos=&page=1&ncTraceId=&channel=-
![](https://csdnimg.cn/release/download_crawler_static/58534706/bg3.jpg)
1&source_id=search_all_nctrack&gio_id=77889D25E55F2E9BB6DF8
6605AFE3692-1638874108335
来源:牛客网
LRU 原理,数据结构
B+树范围查找
2PL 两段锁
缓存与数据库的一致性问题,答了先更新数据库再更新缓存。接着问这样会有
什么问题?解决方案?
32 位 1G 物理内存可以申请 2G 内存吗?堆内存和栈内存的区别?一个函数不
断调用子函数,过程中栈内存的变化?函数的入参和出参在栈内吗?
L1 缓存
代码题:给一堆 logs[上线时间,下线时间,用户名],输出每秒的线上用户
数, O(n)
代码题:rand7 实现 rand10。(这题只让说了思路)
作者:Estrike1337
链 接 : https://www.nowcoder.com/discuss/710109?
type=all&order=recall&pos=&page=1&ncTraceId=&channel=-
1&source_id=search_all_nctrack&gio_id=77889D25E55F2E9BB6DF8
6605AFE3692-1638874108335
来源:牛客网
http 长连接 短连接
sql 场景题
求图书馆中指定的一本书最热门的 5 个标签
智力题
100 个苹果,两个人 A 和 B 轮流吃苹果,每个人每轮能吃 2 个或 3 个苹果,谁
吃完最后一个苹果谁赢有无必胜策略?如果有,谁必胜?
算法题
对一个先递增后递减的数组去重。 双指针 O(n)
![](https://csdnimg.cn/release/download_crawler_static/58534706/bg4.jpg)
Spring bean 生命周期
1. Spring 对 bean 进行实例化;
2. Spring 将值和 bean 的引用注入到 bean 对应的属性中;
// 可扩展的初始化:aware 注入上下文等依赖、postprocessor 干啥都行(比
如创建 aop 代理类)、init 用来实现自己写的初始化方法
3. 如果 bean 实现了 BeanNameAware 接口,Spring 将 bean 的 ID 传递
给 setBeanName()方法;
4. 如 果 bean 实 现 了 BeanFactoryAware 接 口 , Spring 将 调 用
setBeanFactory () 方法,将 BeanFactory 容器实例传入;
5. 如果 bean 实现了 ApplicationContextAware 接口,Spring 将调用 set-
ApplicationContext () 方法,将 bean 所在的应用上下文的引用传入进来;
6. 如果 bean 实现了 BeanPostProcessor 接口, Spring 将 调用他们的
post-Process-Before-Initialization () 方法;
7. 如果 bean 实现了 InitializingBean 接口,Spring 将调用它们的 after-
Properties-Set () 方法。类似的,如果 bean 使用 init -method 声明了初始
化方法,该方法也会被调用;
8. 如果 bean 实现了 BeanPostProcessor 接口, Spring 将调用它们的
post-Process-After-Initialization () 方法;
// 使用
9. 此时,bean 已经准备就绪,可以被应用程序使用了,它们将一直驻留在应
用上下文中,直到该应用上下文被销毁;
// 销毁,destroy 与 init 同理
10. 如 果 bean 实 现 了 DisposableBean 接 口 , Spring 将 调 用 它 的
destory () 接口方法。同样,如果 bean 使用 destory-method 声明了销毁
方法,该方法也会被调用。
Redis 缓存雪崩、击穿、穿透
缓存雪崩:
目前电商的首页以及热点数据都会做缓存,一般缓存都是定时任务去刷新,或
者查不到后去更新,定时刷新就会存在一个问题。比如:如果所有首页 key 的
失效时间是 12 小时,中午 12 点刷新,零点秒杀活动有大量的用户涌入,假设
每秒 6000 个请求,本地缓存能抗住每秒 5000 个请求,但是所有的 key 都失
效了,每秒 4000 个请求全部打到数据库上,数据库必然扛不住,所以会报一
下警,真实的情况是当想去处理时,发现数据库已经挂了。如果没有特别的方
案处理这个故障,只是重启数据库,会发现瞬间来的请求又会把数据库打死。
这就是缓存雪崩的概念。
解决方法:
处理缓存雪崩很简单,在批量往 redis 存数据时,把每个 key 的失效时间都加
一个随机值,这样可以保证数据不会同一时间大面积失效,redis 这点流量还
![](https://csdnimg.cn/release/download_crawler_static/58534706/bg5.jpg)
是 能 抗 住 的 : setRedis ( Key , value , time + Math.random() *
10000);
如果 redis 是集群部署,将热点数据均匀分布在不同的 redis 库中也能避免全
部失效的问题。或者设置热点数据永不过期,有更新就更新缓存就好(比如运维
更新了首页商品,那你刷新下缓存就完事了,不要设置过期时间),电商首页的
数据也可以用这个操作,保险。
缓存击穿
缓存击穿和缓存雪崩有点像,但又有点不一样,缓存雪崩是因为大面积缓存失
效,打崩了 DB,而缓存击穿是指一个 key 非常热点,在不停的抗着大并发,
大并发对这个一点进行访问,当这个 key 失效瞬间,持续的大并发就穿破了缓
存,直接请求打数据库,就像一个完好无损的桶被击穿一个洞。
解决方法:
可以使用热点数据永不过期,或者使用互斥锁。
业界比较常用的做法,是使用互斥锁(mutex key)。简单来说,就是在缓存失
效的时候(拿出的值为空),不是立即去 load db,而是使用缓存工具的某些带
成功操作返回值的操作(比如:redis 的 SETNX 或者 Memcache 的 ADD),去
set 一个 mutex key,当操作返回成功时,再进行 load db 的操作并回设缓
存,否则,表示已经有其他线程 load db 并回设缓存了,直接 get 获取缓存之
就行。
缓存穿透
缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,我们的数
据库的 id 都是 1 开始自增上去的,如果发起 id 为-1 的数据或者 id 为特别大不
存在的数据,这时用户很可能是攻击者,攻击会导致数据库压力过大,严重会
击垮数据库。
解决方法:
(1)可以在接口层增加校验,比如用户鉴权校验、参数做校验,不合法的参
数直接 return,比如:id 做基础校验,id <= 0 的直接拦截。
(2)从缓存和数据库中都取不到值,这时可以将对应 key 的 value 写为
null、返回位置错误、稍后重试等。缓存有效时间可以设置短点,如 30 秒(设
置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个 id
暴力攻击,但是我们知道正常用户是不会在单秒内发起这么多次请求的,网关
层 Nginx 可以进行配置,可以让运维大大对单个 ip 每秒访问次数超过阈值的
ip 拉黑。
(3)redis 还有一个高级用法:布隆过滤器(Bloom Filter),这个也能很好的
防止缓存穿透的发生,他的原理也很简单,就是利用高效的数据结构和算法快
速判断这个 key 是否在数据库中存在,不存在直接 return 就好,存在你就查
db 刷新 KV 在 return。
发生以上三个问题时抢救措施:
一般为了避免上述情况发生,可以从三个时间段分析:
1.事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃。
2. 事中:本地 ehcache 缓存 + Hystrix 限流+降级,避免 mysql 被打死。
剩余30页未读,继续阅读
![log](https://img-home.csdnimg.cn/images/20210720083646.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
what_rough_beast
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
评论0