字节 抖音电商 后端 一面 凉经
这个面试官超级好,即使再垃圾,也没有嘲讽我,感谢。
数据库方向:
sql语句,建一个超级简单的表,手写。
答:会鼠标操作,不会语句操作,通常都是粘贴复制(当问完第一个问题,我就已经知道结果了)
回顾:
creat table mytable(
#int 类型,不为空,自增
id INT NOT NULL AUTO_INCREMENT,
#int 类型,不为空,默认值1
col1 INT NOT NULL DEFAULT 1,
#可变长字符串类型,最长为45个字符,可以为空
col2 VARCHAR(45) NULL,
# 日期类型,可为空
col3 DATE NULL,
# 设置主键为id
PRIMARY KEY('id');
)
什么是数据库的原子性?
回顾:
事务被视为不可分割的最小单位,事务的所有操作要么全部提交成功,要么全部失败回滚
回滚可以用回滚日志(Undo log)来实现,回滚日志记录着事务的所执行的修改操作,在回滚时反向执行这些操作即可。
数据库的隔离级别?
四种隔离级别
隔离级别的实现方式?
回顾:第一种隔离级别要求低不用无需实现,第二种和第三种可以使用MVCC来实现,第四种可以对所有行都加锁来实现。
这四种隔离级别可以解决三种问题,分别是脏读,不可重复读,幻读。
在innodb下,第三种隔离级别下可以解决幻读的问题。脏读是在多次范围查询的时候,查询结果不一样。
解决脏读的方式是MVCC+间隙锁和next-key lock机制。
那你讲一讲MVCC机制吧?
如果版本号再最小版本号和最大版本号之间怎么办?
数据库的索引?
数据库索引的实现?
B+树的结构
数据库的锁有哪些?
网络方向:
讲下http和tcp?
http请求和响应报头都有什么?
回顾:第一行是包含了请求方法、url、版本协议;
接下来的多行都是请求首部Header,每个首部都有一个首部名称,以及对应的值。
一个空行用来分隔首部和内容主体Body
最后是请求的内容主体
响应报文结构“
第一行包含协议版本、状态码以及描述
接下来多行也是首部内容
一个空行分割首部和内容主体
最后是响应的内容主体
讲一下url请求过程?
回顾:
1、DNS解析域名成IP地址
2、生成http请求报文
3、传输层建立TCP连接
4、网络层使用IP协议选择路线
5、数据链路层实现网络相邻节点间可靠的数据通信
6、物理层传输数据
那你说一下DNS是如何解析域名的?
回顾:
1、浏览器先检查自身缓存种有没有被解析过的这个域名对应的IP地址(浏览器先看)
2、未命中,浏览器会检查操作系统缓存中有没有对应的已解析过的过的结果(系统缓存)
3、还未命中,请求本地域名服务器(LDNS)
4、还未命中,跳到RootServer域名服务器请求解析
5、根域名服务器返回给LDNS一个所查询域的主域名服务器地址
6、此时LDNS再发送请求给上一步返回的gTLD
7、接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器
8. Name Server根据映射关系表找到目标ip,返回给LDNS
9. LDNS缓存这个域名和对应的ip
10. LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束
讲一下tcp的滑动窗口?
回顾:如果没有滑动窗口,发送方收到一个确认才会发送下一个。传输往返越长,通信效率越差
为了解决这个问题,TCP引入了窗口的概念
有了窗口,无需等待,确认,继续发送数据。
当收到700的确认应答,无论前面是否收到确认,都可以判断已经收到。这个模式叫做累计确认或者累计应答。
TCP头里面有个字段叫做window,也就是窗口大小,在三次握手的时候,进行设置。
发送端可以通过滑动窗口(处理能力)来发送数据,而不会导致接收端处理不过来。
滑动窗口使用三个指针来跟踪这四个传输类别。
操作系统:
来说一下死锁:
条件:互斥、占有和等待、不可抢占、环路等待
在这种情况下会产生死锁。
如何避免死锁?
银行家算法,找到安全序列
说一下进程和线程的区别?
线程是独立调度的基本单位
进程是资源分配的最小单位
线程之间通信方式?
C++讲下new,delete,malloc,free的连续与区别
讲下vector和list之间的区别
讲下指针与引用之间的区别
算法
0-9组成的环中,初始值在0,每次可以顺时针和逆时针走1步,问你走n步,仍然在0位置的方法个数。
数据库方向:
sql语句,建一个超级简单的表,手写。
答:会鼠标操作,不会语句操作,通常都是粘贴复制(当问完第一个问题,我就已经知道结果了)
回顾:
creat table mytable(
#int 类型,不为空,自增
id INT NOT NULL AUTO_INCREMENT,
#int 类型,不为空,默认值1
col1 INT NOT NULL DEFAULT 1,
#可变长字符串类型,最长为45个字符,可以为空
col2 VARCHAR(45) NULL,
# 日期类型,可为空
col3 DATE NULL,
# 设置主键为id
PRIMARY KEY('id');
)
什么是数据库的原子性?
回顾:
事务被视为不可分割的最小单位,事务的所有操作要么全部提交成功,要么全部失败回滚
回滚可以用回滚日志(Undo log)来实现,回滚日志记录着事务的所执行的修改操作,在回滚时反向执行这些操作即可。
数据库的隔离级别?
四种隔离级别
隔离级别的实现方式?
回顾:第一种隔离级别要求低不用无需实现,第二种和第三种可以使用MVCC来实现,第四种可以对所有行都加锁来实现。
这四种隔离级别可以解决三种问题,分别是脏读,不可重复读,幻读。
在innodb下,第三种隔离级别下可以解决幻读的问题。脏读是在多次范围查询的时候,查询结果不一样。
解决脏读的方式是MVCC+间隙锁和next-key lock机制。
那你讲一讲MVCC机制吧?
如果版本号再最小版本号和最大版本号之间怎么办?
数据库的索引?
数据库索引的实现?
B+树的结构
数据库的锁有哪些?
网络方向:
讲下http和tcp?
http请求和响应报头都有什么?
回顾:第一行是包含了请求方法、url、版本协议;
接下来的多行都是请求首部Header,每个首部都有一个首部名称,以及对应的值。
一个空行用来分隔首部和内容主体Body
最后是请求的内容主体
响应报文结构“
第一行包含协议版本、状态码以及描述
接下来多行也是首部内容
一个空行分割首部和内容主体
最后是响应的内容主体
讲一下url请求过程?
回顾:
1、DNS解析域名成IP地址
2、生成http请求报文
3、传输层建立TCP连接
4、网络层使用IP协议选择路线
5、数据链路层实现网络相邻节点间可靠的数据通信
6、物理层传输数据
那你说一下DNS是如何解析域名的?
回顾:
1、浏览器先检查自身缓存种有没有被解析过的这个域名对应的IP地址(浏览器先看)
2、未命中,浏览器会检查操作系统缓存中有没有对应的已解析过的过的结果(系统缓存)
3、还未命中,请求本地域名服务器(LDNS)
4、还未命中,跳到RootServer域名服务器请求解析
5、根域名服务器返回给LDNS一个所查询域的主域名服务器地址
6、此时LDNS再发送请求给上一步返回的gTLD
7、接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器
8. Name Server根据映射关系表找到目标ip,返回给LDNS
9. LDNS缓存这个域名和对应的ip
10. LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束
讲一下tcp的滑动窗口?
回顾:如果没有滑动窗口,发送方收到一个确认才会发送下一个。传输往返越长,通信效率越差
为了解决这个问题,TCP引入了窗口的概念
有了窗口,无需等待,确认,继续发送数据。
当收到700的确认应答,无论前面是否收到确认,都可以判断已经收到。这个模式叫做累计确认或者累计应答。
TCP头里面有个字段叫做window,也就是窗口大小,在三次握手的时候,进行设置。
发送端可以通过滑动窗口(处理能力)来发送数据,而不会导致接收端处理不过来。
滑动窗口使用三个指针来跟踪这四个传输类别。
操作系统:
来说一下死锁:
条件:互斥、占有和等待、不可抢占、环路等待
在这种情况下会产生死锁。
如何避免死锁?
银行家算法,找到安全序列
说一下进程和线程的区别?
线程是独立调度的基本单位
进程是资源分配的最小单位
线程之间通信方式?
C++讲下new,delete,malloc,free的连续与区别
讲下vector和list之间的区别
讲下指针与引用之间的区别
算法
0-9组成的环中,初始值在0,每次可以顺时针和逆时针走1步,问你走n步,仍然在0位置的方法个数。
面试完一个小时就收到结果了,一面没通过,说我算法和语言很强,但是其他知识都了解的一般,广度不够
#字节跳动实习##字节跳动##面试题目#
查看19道真题和解析