Skip to content

Commit

Permalink
interviews更新:快手一面和字节面试经验
Browse files Browse the repository at this point in the history
添加了新的面试经验分享,包括快手校招一面和字节技术中台校招Java一面的情况。对面试过程、问题及答案进行了详细描述,以帮助后来的面试者准备。
  • Loading branch information
yunfeidog committed Aug 3, 2024
1 parent 9ee33a5 commit beda69f
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 8 deletions.
16 changes: 8 additions & 8 deletions src/interviews/字节/字节-技术中台 -校招-Java一面.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@

![image-20240802220233474](C:\Users\LoveF\AppData\Roaming\Typora\typora-user-images\image-20240802220233474.png)

k个一组反转链表(15min)
手动构造链表和输入输出,力扣原题
k个一组反转链表(15min)
手动构造链表和输入输出,力扣原题

## **问实习项目,那个慢查询怎么做的?**

Expand Down Expand Up @@ -44,7 +44,7 @@

## **如果表特别大,你光是fork()的时间都超过了加锁和解锁的时间,怎么办?**

….不会了
….不会了

## binlog可以实现持久化吗?MySQL中还有哪些日志

Expand All @@ -56,11 +56,11 @@

## **如果让你设计一张表,你会考虑什么呢?**

主键
查询条件要加索引
尽量使用char而不是varchar
NOT NULL DEFAULT
数据库三范式
主键
查询条件要加索引
尽量使用char而不是varchar
NOT NULL DEFAULT
数据库三范式

## 细说数据库三范式?开发中是不是铁律一定要遵守的?

Expand Down
95 changes: 95 additions & 0 deletions src/interviews/快手/2024.4.8快手一面.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
title: 2024.04.08快手校招一面
date: 2024-04-08
category:
- 快手
- 校招
- 一面
---



# 2024.4.8快手一面

### 那里用的Docker,为什么用Docker?为什么不用虚拟机?

部署基础环境的时候(如seata,jenkins),很方便。部署Java环境的时候,先把jar包构建出一个容器然后进行部署,好处是安装和部署软件都很方便,并且容器之间可以隔离,Docker 容器相比传统的虚拟机更加轻量级,不需要完整的操作系统。

### Docker的优缺点,网络模式

容器适用不同的环境,移植性好。比虚拟机来说可以快速部署和启动。资源之间相互隔离,同时共享宿主机的内核资源。Dockerfile镜像构建和容器运行来确保环境的一致性。轻松实现水平扩展,通过编排工具k8s自动管理容器,版本控制和回滚

缺点性能会比原生低一点,网络配置复杂。

网络模式:

1. bridge模式,可以和宿主机以及其他容器通信
2. host模式,使用宿主机的网络,直接暴露,无法通过端口隔离

### Docker部署服务的流程

1. 编写一个Dockfile文件,主要是拉取Java8镜像,然后把jar包放到容器里,再启动
2. 使用`docker build`构建出一个镜像
3. 启动容器`docker run`或者`docker-compose up -d `

### GPG密钥对

分公钥和私钥。公钥加密私钥解密,私钥签名公钥验签。GPG专注于加密解密验证签名,SSH的RSA专注几远程登录。

### HTTPs的过程

HTTPS比HTTP协议安全,因为HTTP是明文传输,而HTTPS是加密传输,加密过程中使用了三种加密手段,分别是证书,对称加密和非对称加密。HTTPS相比于HTTP多了一层SSL/TSL。

1. 证书加密,服务器使用证书加密之前需要去证书颁发机构申请服务器证书,会把本地证书发送给客户端,客户端验证服务器的身份
2. 对称加密:客户端和服务器通信事业对称加密,使用同一私钥进行,加密算法公开,私钥不可以泄漏
3. 非对称加密:客户端使用公钥加密,服务器用私钥解密

HTTPs的整体流程:

1.客户端想服务器发起HTTPS的请求,连接到服务器的443端口;

2.服务器将非对称加密的公钥传递给客户端,以证书的形式回传到客户端

3.服务器接受到该公钥进行验证,就是验证2中证书,如果有问题,则HTTPS请求无法继续;如果没有问题,则上述公钥是合格的。(第一次HTTP请求)客户端这个时候随机生成一个私钥,成为client key,客户端私钥,用于对称加密数据的。使用前面的公钥对client key进行非对称加密;

4.进行二次HTTP请求,将加密之后的client key传递给服务器;

5.服务器使用私钥进行解密,得到client key,使用client key对数据进行对称加密

6.将对称加密的数据传递给客户端,客户端使用非对称解密,得到服务器发送的数据,完成第二次HTTP请求。

![img](https://i-blog.csdnimg.cn/blog_migrate/3cf28afee71670667e8853d4091e1290.png)

### TSL四次握手

1. 第一次,客户端发送Client Hello消息根服务器打招呼,带着客户端的TSL版本,密码套件列表,随机数(用来服务器生成对称加密密钥的材料)
2. 第二次,服务端收到Client Hello后,会确认TSL版本是否支持,从密码套件中选择一个,生成随机数,然后将这些信息发送给客户端Server Hello
3. 第三次,客户端生成新的随机数,用服务器的公钥加密改随机数通过Client Key Exchange发送给服务端,服务端收到后,会用私钥来解密得到随机数,这样就有了三个随机数。双方根据三个随机数生成会话密钥,客户端发送Change Cipher Spec来告诉服务端加密发送,再发送Encrypted Handshake Message(Finishd)把之前所有发送的数据做个**摘要**,再用会话密钥(master secret)加密一下,让服务器做个验证验证加密通信「是否可用」和「之前握手信息是否有被中途篡改过」。
4. 第四次,服务器也是同样的操作,发「**Change Cipher Spec**」和「**Encrypted Handshake Message**」消息,如果双方都验证加密和解密没问题,那么握手正式完成。

### 项目中使用spring事务了吗,啥场景需要事务?

多步骤数据库操作,跨数据库操作发生异常,需要回滚

### MYSQL的索引数据结构是什么样的?

B+Tree 是一种多叉树,叶子节点才存放数据,非叶子节点只存放索引,而且每个节点里的数据是按主键顺序存放的。每一层父节点的索引值都会出现在下层子节点的索引值中,因此在叶子节点中,包括了所有的索引值信息,并且每一个叶子节点都有两个指针,分别指向下一个叶子节点和上一个叶子节点,形成一个双向链表。

B+Tree 存储千万级的数据只需要 3-4 层高度就可以满足,这意味着从千万级的表查询目标数据最多需要 3-4 次磁盘 I/O,所以B+Tree 相比于 B 树和二叉树来说,最大的优势在于查询效率很高,因为即使在数据量很大的情况,查询一个数据的磁盘 I/O 依然维持在 3-4次。

### B+树和B树的区别

对于 B 树,只有叶子节点保存数据,内部节点仅存索引值,不适合范围查找。

### 什么是回表

现在有两个索引,主键索引和二级索引,也就是有两个B+树

- 主键索引的 B+Tree 的叶子节点存放的是实际数据,所有完整的用户记录都存放在主键索引的 B+Tree 的叶子节点里;
- 二级索引的 B+Tree 的叶子节点存放的是主键值,而不是实际数据。

如果要根据二级索引查询某个数据,会先去二级索引的B+树叶子结点找到主键索引,再根据主键索引回表查询到真实的数据,也就是主键对应的那个B+树的叶子结点的数据。

### 联合索引

使用联合索引时,存在最左匹配原则,也就是按照最左优先的方式进行索引的匹配。在使用联合索引进行查询的时候,如果不遵循「最左匹配原则」,联合索引会失效,这样就无法利用到索引快速查询的特性了。

0 comments on commit beda69f

Please sign in to comment.