(tips:天翼云研发三部二面是一个光头领导,20分钟左右,问了如下问题)
网络篇
1.HTTP协议1.0和2.0的区别是啥?是哪一层的协议?
总的区别就是:1.HTTP/2采用二进制格式而非文本格式。2.HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行。3.使用报头压缩,HTTP/2降低了开销。4.HTTP/2让服务器可以将响应主动“推送”到客户端缓存中
2. 同步IO和异步IO的区别?
同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件事做完了才能做下一件事。
异步:异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
3.网络层有哪些协议?应用?
网络层有四个协议:ARP协议,IP协议,ICMP协议,IGMP协议。ARP协议为IP协议提供服务,IP协议为ICMP协议提供服务,ICMP协议为IGMP协议提供服务。
ARP协议应用:根据目的IP地址来解析MAC地址,进行二层通讯。
IP协议应用:IP协议是一个用于网络之间互连的协议。IP是Internet Protocol(网际互连协议)的缩写,设计IP的目的是提高网络的可扩展性;IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。
ICMP协议应用:ICMP协议主要用来检测网络通信故障和实现链路追踪,最典型的应用就是Ping和traceroute。
IGMP协议应用:作用1:IGMP用来在接收者主机和直接相邻的组播路由器之间建立和维护组播组成员的关系。作用2:IGMP通过在接收者主机和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。
4. awk命令知道干啥的不?
awk是一种处理文本文件的语言,是一个强大的文本分析工具。三剑客功能:grep :过滤文本、sed : 修改文本、awk : 处理文本
5. linux系统中查看系统资源用啥命令?
vmstat、dmesg、free、uptime、uname、lsb_release、lsof、top等这些命令可以查一下他们的作用。
6.HTTP与HTTPS的区别?端口有何不同?
HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。https则是具有安全性的ssl加密传输协议。http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。并且https协议需要到ca申请证书。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
数据库相关
1.mysql的事务隔离机制
(tips:字节跳动飞书人力套件面试官问了这个问题,mysql是业务代码考核的重点。
mysql的四大特性分别是:原子性,一致性,隔离性和数据持久化。)
原子性:事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
一致性:事务开始前和结束后,数据库的完整性约束没有被破坏
隔离性:一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久化:指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。
mysql四大隔离级别
读未提交(READ UNCOMMITTED )、
读提交( READ COMMITTED)、
可重复读(REPEATABLE READ)、
串行化(SERIALIZABLE)
2.Redis的key删除策略有哪些?
策略一:被动删除
当读/写一个key时,redis首先会检查这个key是否存在,如果存在且已过期,则直接删除这个key并返回nil给客户端。
策略二:定期删除
redis中有一系列的定期任务(serverCron),这些任务每隔一段时间就会运行一次,其中就包含清理过期key的任务,运行频率由配置文件中的hz参数来控制,取值范围1~500,默认是10,代表每秒运行10次。
策略三:强制删除
如果redis使用的内存已经达到maxmemory配置的值时,会触发强制清理策略,清理策略由配置文件的maxmemory-policy参数来控制。
3.Redis的基本数据结构
要包括常见的5种数据类型,分别是:String、List、Set、Zset、Hash。
4.有了mysql为啥还用etcd优势在哪些地方?
我觉得有必要回答一下。这个问题其实并不简单,因为本质原因涉及到分布式系统的特性。
MySQL 只保证最终一致性 eventual consistency(而且是不可配置的),因为它采用的是异步复制 asynchronous replication,系统中有过读写分离经验的同学知道当你写入数据库后立刻去读如果命中的 slave 节点没有同步到最新数据,那么返回的可能是空数据。虽然一个节点可能落后,但保证最终一致性意味着,除非网络错误或其他一些问题,否则任何落后的节点最终都会赶上其他节点,并且所有节点最终都会获得一致的视图。但是分布式系统中的一致性要求每个节点在给定时间具有相同的数据视图,这非常重要。MySQL 存储的可以是大量内容数据或者业务数据,而 Kubernetes 这些服务存储的是控制平面的数据,后者数量级少一些但是要求强一致性。
etcd KV API guarantees
etcd tries to ensure the strongest consistency and durability guarantees for a distributed system. etcd ensures strict serializability, which is the strongest isolation guarantee of distributed transactional database systems. Read operations will never observe any intermediate data. etcd ensures linearizability as consistency of replicas basically. As described below, exceptions are watch operations and read operations which explicitly specifies serializable option.
1.etcd 试图提供最强的一致性和持久性的保证,确保严格的可串行化 strict serializability,这是分布式事务数据库系统的最强隔离保证,读取操作永远不会观察任何中间数据。
Cassandra ScyllaDB MySQL 完全不在竞争之列,因为它们只是最终一致性。大多数 MVCC 的数据库都几乎不适用于强一致的场景。
2.etcd 的定位符合场景
官方网站中写的“一个为分布式系统中极为重要的数据提供分布式可靠的 kv 存储”。通常不会是一些内容数据比如文本信息,更多的存储一些不经常更新状态的相对少量几个G左右的控制数据。
3.云原生场景适用。
天翼云笔试
天翼云笔试分3个模块。耗时还是比较久的,可能都做下来要几个小时。
1.性格测评
这部分符合社会主义核心价值观就行,其余的随意发挥。选择题。
2.智力测验
也是选择题,有给你一段话,让你选出哪一句是对的。图形推理题,数据推理题。类似于公务员考试,时间很紧张,可能出现看不完题目,来不及算就过去了,那么就蒙一个就行,不影响最后结果。
3.专业笔试
Tips:60道选择题,还有4-5道简答题。主要考察golang的相关知识,发现了一个押题率60%的文档,大家自己悄咪咪看就好。
《goLang 精编 选择、填空、判断 共100题_戴国进的博客-CSDN博客_golang精编100题》
简答题考了:
1. golang控制并发怎么做?让你写一段程序
2. 怎样处理连接2个字符串。
3. golang中正则表达式过滤字符串的用法。
其他问题
1.说下死锁,怎样打破?
一组进程中,每个进程都无限等待被该组进程中的另一进程所占有的资源,因而永远无法得到资源,这种现象称为进程死锁,这一组进程就称为死锁进程。死锁会导致大量资源浪费。
互斥使用(资源独占):一个资源每次只能给一个进程使用。
占有且等待(请求和保持):进程在申请新的资源的同时保持对原有资源的占有。
不可抢占:资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放
循环等待:存在一个进程等待队列P1,P2,…Pn,其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1的资源,形成一个等待环路。
四个条件打破一个就能避免死锁。
2.CAP原则,redis集群满足CA还是CP?
天翼云一面问了,首先带领大家了解一下,CAP原则又叫CAP定理,是指在分布式系统中,数据一致性,可用性,分区容错性,这3个要素最终只能同时满足两点,不可能三者兼顾。
Base理论的官方解释为:BASE理论是对CAP中的一致性和可用性的一个权衡的结果,其核心的思想是:我们既然无法做到强一致,但每个应用可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。
redis集群满足AP
AP :对一致性要求不高,但仍需保证最终一致性
eg :redis分布式集群,(大多数网站采用,因为可用性很影响用户体验)
3. 说下go的优点缺点,最近学哪些新技术?
(tips:kata的面试官问了这个问题,属于开放式的问题,我就说了几个重点.)
优点
① 高性能-协程
golang 源码级别支持协程,实现简单;对比进程和线程,协程占用资源少,能够简洁高效地处理高并发问题。
② 生态
背靠谷歌,生态丰富,轻松 go get 获取各种高质量轮子。用户可以专注于业务逻辑,避免重复造轮子。
③ 部署
部署简单,源码编译成执行文件后,可以直接运行,减少了对其它插件依赖。不像其它语言,执行文件依赖各种插件,各种库,研发机器运行正常,部署到生产环境,死活跑不起来 。
④ 跨平台
很多语言都支持跨平台,把这个优点单独拿出来,貌似没有什么值得称道的,但是结合上述优点,它的综合能力就非常强了。
⑤ 代码极简
个人认为 golang 是 C / C++ / python 的结合体,它是一门全新的语言,入门和使用相对简单,是性能和代码极简之间的一种平衡。
缺点
①右大括号不允许换行,否则编译报错
②不允许有未使用的包或变量
③错误处理原始,虽然引入了defer、panic、recover处理出错后的逻辑,函数可以返回多个值,但基本依靠返回错误是否为空来判断函数是否执行成功,if err != nil语句较多,比较繁琐,程序没有java美观。(官方解释:提供了多个返回值,处理错误方便,如加入异常机制会要求记住一些常见异常,例如IOException,go的错误Error类型较统一方便)
④[]interface{}不支持下标操作
⑤struct没有构造和析构,一些资源申请和释放动作不太方便
⑥仍然保留C/C++的指针操作,取地址&,取值*
学习哪些新技术:Rust
4.学习k8s都看哪些资料?
阿里二面问了这个问题,开放式的问题,社区,官网,kubernetes.io,kubevirt.io等。
简历如何修改增加过筛率
①简历的每一个字都要字斟句酌,比方说Java不是JAVA,这种细节要注意。建议至少花个3天时间好好修改简历。
②熟悉xxx直接改为精通XXX,不要怕面试官diss,即使挂了,学习一下,把他搞会就行了。
参考文章
[1] kube-apiserver 的设计与实现 · 田飞雨
[2]爆肝整理的Golang面试题,拿走不谢 - 知乎
[3]MySQL 精选 60 道面试题(含答案)_小虾米啊的博客-CSDN博客_mysql面试题
[4]后Kubernetes时代的虚拟机管理技术之kubevirt篇