腾讯面经部分题

本文介绍了Linux系统中的僵尸进程现象及其产生原因,强调了僵尸进程对系统性能的影响。此外,还讨论了进程间通信的方式,如管道、消息队列、共享内存和信号量。同时,提到了TCP的可靠性机制,包括三次握手、滑动窗口和流量控制。最后,涉及数据库范式、Redis数据类型以及缓存策略,如缓存穿透和雪崩效应,并探讨了分库分表的时机。
摘要由CSDN通过智能技术生成

1,僵尸进程:

在linux系统中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的“僵尸”进程。“僵尸”进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。由于进程表的容量是有限的,所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。

2,僵尸进程怎么出现的?

简单解释就是:

当你运行一个程序时,它会产生一个父进程以及很多子进程。 所有这些子进程都会消耗内核分配给它们的内存和 CPU 资源。
这些子进程完成执行后会发送一个 Exit 信号然后死掉。这个 Exit 信号需要被父进程所读取。父进程需要随后调用 wait 命令来读取子进程的退出状态,并将子进程从进程表中移除。
若父进程正确第读取了子进程的 Exit 信号,则子进程会从进程表中删掉。
但若父进程未能读取到子进程的 Exit 信号,则这个子进程虽然完成执行处于死亡的状态,但也不会从进程表中删掉。

Linux PS命令能查看后台进程状态--ps –eLf | grep pid查看指定进程。grep命令(grep [选项] pattern [文件名])能进行筛选匹配。chmod命令修改文件权限。find根据文件名查询指定的文件, free -m命令显示内存的使用情况, du查看文件磁盘占用,top -H -p pid查看特定某个进程线程使用cpu占用情况。

最左前缀法则原理:联合索引也是按照B+树存储--(每个节点存储多个索引),第一个索引是有序的,第二个索引在第一个索引相同情况下是有序的,因此只有在找到第一个索引(二分查找)后才能找到第二个索引。所以要是没有确定第一个索引,直接去查找第二个索引,这个时候该索引在树中是无序的,无法二分查找到。

端口号--属于传输层,只具有本地意义。同一计算机中的不同端口号标识不同功能的进程。在网络中的不同计算机中,相同的端口号是没有关联的。不同计算机间进程用IP地址+端口号进行区分。

HTTPS 是基于 HTTP 的,也是用 TCP 作为底层协议,并额外使用 SSL/TLS 协议用作加密和安全认证。默认端口号是 443。SSL协议:采用对称加密的方式,但对称加密的秘钥用服务器端的证书进行了非对称加密,证书颁发机构还能验证对方身份。---这里为了防止公钥的传输的不安全性,应用证书颁发机构(CA)进行非对称加密,数字签名防止证书被伪造。

SSL的过程:首先浏览器发起消息,消息包括加密算法集,随机数,接着服务器响应消息,该消息包含同样的内容,再接着服务器发送证书,然后浏览器验证证书,认证成功后浏览器用证书中携带的公钥加密报文然后发送,服务器收到后用私钥解密。

SpringBoot的启动流程:

主要包括初始化SpringApplication和运行SpringApplication两个过程。其中初始化包括配置基本的环境变量、资源、构造器和监听器,为运行SpringApplication实例对象做准备;而运行SpringApplication实例为应用程序正式启动记载过程,包括SpringApplicationRunListeners引用启动监控模块、configurableEnviroment配置环境模块和监听以及ConfigrableApplicationContext配置应用上下文。当完成刷新应用的上下文和调用SpringApplicationRunListener#contextPrepared方法后表示SpringBoot应用程序已经启动完成。

数据库范式:

1,原子性 (数据库表中不以集合和数列的方式存在)

2,消除非主属性对主属性的部分依赖(比如主属性中{学号,课程号}-》{姓名,学分} 其中{学分} 并不依赖于学号,所以要进行拆分成{课程号}-》{学分} .{学号-》{姓名}})

存在的问题:1,删除异常,删除所有学生的成绩,课程号也会被删掉

               2,插入异常:如果学生未选课,无法记录进数据库

              3,更新异常:调整课程学分,所有行都调整

3,消除非主属性对于主属性的传递依赖:

依赖传递: (学号) → (学生)→(所在学院) → (学院电话)  这种情况要进行拆除 

存在的问题:

1,数据冗余 :有重复值

2,更新异常:修改时需要同时修改多条记录,否则会造成数据不一致。

进程间的通信方式:

  • 管道模型
  • 消息队列模型:出现在多线程生产者消费者模型中。
  • 共享内存+信号量:多个进程访问同一块内存空间。优点:速度快 信号量控制多进程对共享资源的同步访问。
  • 信号:比如中断信号,信号可在用户空间进程和内核之间进行交互
  • socket:网络之间的传输,可以让不同计算机的进程进行通信。

TCP为什么是安全的:--去理解

Redis:

数据类型:

  • string:适合简单的k-v存储 访问次数,点赞数等等
  • hash:适合存储对象。如商品详情,个人信息详情等
  • list:适合存储有序的数据
  • set:可以对多个set提供交集、并集、差集等操作。
  • zset:增加了一个score参数,自动会根据score的值进行排序。排行版。

redis缓存数据的流程:1,如果用户请求的数据在缓存中就直接返回。

2,缓存中不存在的话就看数据库中是否存在

3,数据库中存在的话就更新缓存中的数据

4,数据库中不存在的话就返回空数据

redis持久化方式:

  • RDB:

RDB持久化产生的RDB文件是一个经过压缩的二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。

  • AOF: 而AOF持久化是备份数据库接收到的命令,所有被写入AOF的命令都是以redis的协议格式来保存的,通过把AOF中每一条命令都执行一遍,最终还原回数据库的状态。

缓存穿透:

就是大量请求的key根本不在缓存中,导致请求直接到了数据库上,

缓存雪崩:

就是缓存或者热点缓存在同一时间大面积的失效,后面的请求直接落到了数据库上,造成数据库短时间内承受大量的压力。

什么时候分库:

大量请求都需要操作数据库时,会导致连接数不够,数据库不堪负荷,这个时候需要进行分库。

什么时候分表:

单标数据量巨大,这查询数据缓慢,这个时候需要分表

TEG部门最可能问的:

  1. 排序算法--快速排序 思想及其复杂度
  2. TCP为什么可靠-三次握手  --滑动窗口机制  流量控制怎么实现,拥塞控制

流量控制怎么实现:

TCP利用滑动窗口实现流量控制,流量控制是为了控制发送方发送速率,保证接收方来的及接受。

接收方发送的确认报文中的窗口字段可以用来控制发送当的窗口大小,从而影响发送方的发送速率。

 其次流量控制:TCP的接收端只允许发送端发送接收端缓冲区能容纳的数据。当接收方来不及处理发送方的数据,能能提示发送方降低发送的速率,防止包丢失。--实则是TCP利用滑动窗口实现流量控制;拥塞控制:当网络拥塞时,减少数据的发送;超时重传,ARQ协议:每发送完一个分组就停止发送,等待对方确认,收到后再发下一个分组。

  1. LRU 算法  字符串转正数算法
  2. 还有挥手和握手的状态
  3. MySQL redo log将提交的记录进行保存,保证持久性,已提交的是事务无法再撤回

锁的可重用:某个获得锁的线程在执行method1的时候,method1会调用另一个synchronized方法method2,此时线程不必重新申请锁,而是可以直接执行该方法。锁其实作用的是对象

可中断锁:某线程在等待锁资源的时候,如果不想等待了,可以中断等待做其他事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值