面经

2020-07-10 下午

欧立腾到迪卡侬

在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
## 和周围人相比,自己哪一块是最突出的,技术上也好,或其他方面?

## 问我output5 ,输出什么?为什么?
答:我一开始说“B and B,后来确信的改为“B and A”,实际就是“B and A”

## 最后一题,先用递归,再用栈?你平时工作中有哪个?
答:是的,我先用递归再用的栈。平时工作中会有栈,因为递归用不好会栈溢出。

## 做的最好的一个项目,最有自信的,讲一下?

## 高并发有过研究,那我问一下,秒杀场景:一个业务,高并发,平时没有并发还OK,程序正常执行,在高并发的时候,会new很多对象,怎么设计?
答:秒杀场景,Redis,RabbitMQ。
“蒽,除了中间件,还有什么方式?”,使用限流,拦截。
“如果这些请求进来了,JVM会new很好对象,JVM进行full gc,会卡顿,怎么避免,怎么办?”,我。。。难道是调整JVM参数?

## IO模型有哪些?
我回答:阻塞,非阻塞,然后我。。。,
“多路复用知道吗?”,知道,Selector就是

补充:阻塞IO模型,非阻塞IO模型,多路复用IO模型,信号驱动IO模型,异步IO模型

## 平时自己业余,学语言和框架本身,还有学什么?缓存,队列?这些你对哪个比较熟,?
答:Redis比较熟

## Redis解决什么问题,项目用来干什么?
答:附近查找的,缓存对象的,存储session的,当做一个map来用,

补充:
String:单值缓存,对象缓存,分布式锁,计数器,session,短信验证码
List:栈,队列,阻塞队列,微博或公众号消息推送
Set:抽奖小程序,微信微博点赞、收藏、标签,微信朋友圈、微博共同关注的人:集合操作
Hash:对象缓存,购物车
Zset:微博热搜排行榜,点击新闻流量+1,当天排行前十,七天排行前十
Geo:地理半径查询(附近的人)
Hyperloglog:统计网站访问量(UV)
Bitmap:统计用户上线次数,布隆过滤器

## 都是用了哪些Redis的数据结构!?
Geo,String,Hash

## 你用Redis是单机的,还是集群?哦,你这上面写的集群搭建的是吗?
答:是的,是我搭建的集群

## Redis持久化的方式?
答:rbd,aof。rbd就是默认的,可以在配置文件进行save配置,aof就是命令追加,读取的时候比较慢。

## 搭建的时候用的是哪一种?为什么要用这一种!??
答:用的Rdb,rdb会fork一个子进程,进行读取的时候比较快一点,aof读取的慢,所以我们才用rdb

## rdb相对于aof有什么缺点吗?
答:rdb有可能会丢失数据。“丢失数据,那aof就不丢吗?”,我说也丢,也丢,“对,缓存本身就是有丢失数据可能性啊”

## Redis集群用的是什么协议!??
答:一致性Hash吗?

补充:Gossip协议。。。

## 主从的话,会用什么方式同步数据的呢,?
答:每个节点会分配对应hash slot,主机down掉了,从机会进行补上

## 消息中间件是哪些!???
答:用的rabbit mq

## 怎么防止消息丢失!??
答:双节点的形式,使用proxy代理
手动ack,手动来告诉队列,我们消费了数据,让队列来进行删除

## 处理消息失败怎么做的??如果给数据错误,怎么做处理,这样就可以一直ack不了,怎么办?
答:就抛出,直接不要了,当时会写入一份日志

补充:错误的时候,把错误数据保存到专门用于保存错误数据的队列中。

## 回到缓存,缓存有一些场景,比如说,缓存穿透你有遇到过吗?!!??怎么解决???
答:有遇到过,当时我们加的布隆过滤器,是其他小组加的,当时还有过加空对象也可以解决,后来没有使用

## 布隆过滤器是什么?讲一讲???
我回答的。。。

补充:采用0和1的数组来存储,请求进来进行Hash计算,与数组长度取余来定位节点,定义节点标记为1,如果请求进来都定位1才才可以进行访问。
布隆过滤器特点:拦截不住的请求可能正确,有可能不正确。拦截住的请求一定不正确。

## 布隆过滤器最原始的形式??什么缺点???什么都有优缺点的。
我。。。

补充:数组长度一定时,Hash次数越多,正确数据进行分配时1的概览就多,这样错误请求进来,很有可能产生Hash碰撞。

## Docker是什么实现的!!???
里面都是一个一个的容器,每个容器又有自己的网络,存储。。。

## Docker内部的容器是什么实现的??
里面是一层一层的,最底层是一个boot应用,如果对原有数据修改之后,会新加上一层(我回答了之后,才发现这回答的是镜像)

## 关系型数据库最熟悉哪一种!??SQL server,MySQL,Oracle
MySQL

## MySQL存储引擎用的哪一种!??
InnoDB

## 那InnoDB是相较于其他存储引擎是支持事务的,事务隔离级别描述一下有哪几种???分别解决什么问题??!?
读未提交:会脏读、不可重复读、幻读
读已提交:解决脏读,会不可重复读、幻读
可重复读:解决脏读、不可重复读,会幻读
串行化:解决脏读、不可重复读、幻读

## 事务隔离是有ACID的,那么隔离怎么实现的,MySQL底层是怎么做到事务隔离的?
我。。。

## Oracle默认隔离级别是什么? 为什么是这种默认隔离级别呢?
读已提交。这样会增加读取的速度。
“那MySQL为什么不用读已提交呢?谁不想用最快的速度呢!”,我。。。

补充:MySQL如果设置成读已提交会集群同步数据的错误问题。BUG。

## 查询数据的时候怎么保证自己的查询是高效的,SQL优化做过哪些??
比如Oracle查询分页的时候,where的小于等于写里面,大于等于写外面。
使用in的时候,查询会变慢,使用exist会查询快。

## 慢查询怎么解决??
先查看执行计划,explain,看看哪块慢,定位之后再进行解决。

## 你有什么有想问的???
我有什么不足的地方吗?

“不足的地方,怎么说,有些问题你能答上来,有些问题你答不上来嘛!对吧!
就是说,有些领域还需要深挖一下,随便哪一个领域,现在我感觉下来,你没有哪一个领域了解的特别特别的透彻,
到一定深度,一定细节,你就不理解其中的,对吧,数据库也好,缓存也好,
不过有些技术你去了解一下还是好的,比如Flink,spark这种。别的没有什么,
我给你的建议就是说以后最好更加专注在某一块领域上去了解的再透彻一点,虽然各种类型的中间件也好,系统也好,
它底层最底层的设计理念其实是相通的,你了解了其中一个的话,再了解其他的会相对简单一些,这方面可以去,怎么说呢,钻研一下,有这个意义的。
别的没有什么,好,你就在这里等一下好吧。”

2020-07-13 上午

淞虹路携程

2020-07-13 下午

慧博云通到SAP

1
2
3
4
2021-02-04 18:48:57
后来打电话说通过了,给我 25k,但是我没去,他们这个是 SAP 系统单体 -> 微服务(相当于重构)
想想现在的选择也是对的,我选择 2020-07-10 下午这家,迪卡侬是电商的,各种分布式,并发都要考虑,还可以免费健身,这是钱换不来的。
迪卡侬办公也很轻松,没有那么多的压力,这边的人也很 nice ~!