字节面试
#1.面试的问题
1.1 linux
常用吗,知道哪些命令ls
就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限、查看目录信息等等。比如ls -acd
切换当前目录到指定目录,比如cd ~ 进入home
目录,cd /xx 进入该目录mkdir
命令用于创建文件夹。rm
删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。cp
命令 将源文件复制至目标文件,或将多个源文件复制至目标目录。
1.2 进程和线程的区别
(1)同一个进程的线程是共享该进程的地址空间和资源,但是不同的进程之间是独立的地址空间和资源
(2)一个进程崩溃后,在保护模式下不会对其他的进程产生影响,当时一个线程崩溃了那么该进程就崩溃了,所以说多进程比多线程要健壮
(3)进程的切换消耗的资源比较大,所以涉及到频繁的切换,使用线程更好
(4)二者均可以并发执行
1.3 进程通信方式
(1)管道(无名的)
(2)FiFO(有名的)
(3)消息队列,可以实现消息的随机查询
(4)信号量:是一个计数器,用于进程间的互斥和同步,一般结合共享内存使用
(5)共享内存:给多个进程共享一个指定的存储区,通过信号量实现互斥和同步,来达到进程间的通信
1.4 线程的通信
(1)全局变量:最好声明为volatile,在多线程过程中保证原子性
(2)消息:线程可以拥有消息队列和消息循环,在不同线程间通信
(3)事件:线程可以监视处于有信号状态的事件,适当的时候就可以对事件进行操作
1.5 TCP/IP分为几层?tcp属于哪一层?http属于哪一层?http基于tcp还是udp?
分为五层,分别是应用层,传输层,网络层,数据链路层,物理层
TCP处于传输层,UDP也在这一层,
HTTP处于应用层,HTTP/1.1 和 HTTP/2 都是基于 TCP 传输协议的,而 HTTP/3 是基于 UDP 传输协议的。(可以引申出各个版本的区别)
1.6 tcp和udp 区别
(1)tcp是面向连接的,可靠的传输,以字节流进行传输,传输效率慢,需要的资源多,应用场景为文件传输,邮件传输等,有确认,窗口,重传,拥塞控制等机制,每一条tcp连接只能是一对一的,全双工的,首部20字节开销
(2)udp是无连接的不可靠传输,不能保证数据发送顺序,以数据报文段的形式进行传输,没有拥塞控制,支持一对一,一对多,多对一和多对多,首部8个字节
1.7 三次握手、四次挥手?
1.9 Mysql的索引
索引就类似于目录,方便我们快速获取数据的一种数据结构。Mysql5.5之后的版本默认存储引擎是InnoDB,其支持B+树索引。这里就可以聊聊B+树和B树的区别,说明为什么Mysql使用B+树来作为索引。(二级索引去查主键索引:回表,以及覆盖索引。)(B+树和B树和二叉树和哈希的比较)
各种索引:
(1)主键索引:建立在主键上的索引,唯一而且不能为空值
(2)唯一索引:使用UNIQUE值创建的索引可以有多个,索引列的值必须为1,但是允许有空值
(3)普通索引:建立在普通字段上的索引,不要求字段为主键,也不需要字段为UNIQUE
(4)联合索引:将多个字段组合成一个索引,使用最左匹配原则进行查找和匹配。但是特殊情况是,如果最左匹配到的某个索引列的值是范围值的话,那么之后的索引列就不能再最左匹配。Mysql5.6以后有了索引下推优化,可以在联合索引遍历的过程重, 对联合索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。
1.20 抢30数学题:分为说出30赢和输,不同的策略