对10.19两场面试的复盘

仅作个人学习积累使用。

1、内存页面置换算法:

假设某一时刻内存页帧已经被写满了,但这时又需要将一个页写到物理内存中,就需要将原本在物理内存中的某一页换出来。如果置换不当,就会导致刚刚被换出到硬盘的页又要被写回内存,减慢系统运行的速度。页面置换算法就是考虑将哪一页换出来以获得优良性能的方法。
①最优算法。它需要知道以后要被用到的页,然后将不会被用到的页换出内存;如果所有页都会被用到,就把需要使用时间离现在最长的页换出,以尽量使不好的情况晚发生;
②先进先出算法,置换出当前已经待在内存里时间最长的那个页。FIFO算法的运行速度很快,不需要考虑其他的因素,需要的开销很小。但是正是由于没有考虑页面重要性的问题,FIFO算法很容易将重要的页换出内存;
③第二次机会算法。为了避免先进先出算法将重要的页换出内存,第二次机会算法提供了一些改进,第二次机会算法在将页面换出内存前检查其使用位,如果其使用位为1,证明此页最近有被使用,猜测它还可能被使用,于是不把它置换出内存,但是把其使用位置为0,随后检查下一个页面,直到发现某页的使用位为0,将此页置换出内存。
④时钟轮转法。为了节约第二次机会算法一个接着一个检查使用位的开销,时钟轮转法又提出了改进。时钟轮转法将所有的页组成一个圆,圆心的指针指向下一个要被置换的页面,置换前同样检查使用位,如果使用位为1,同样将其使用位置为0,随后将顺指针旋转,检查下一个页面,直到发现某页的使用位为0,将此页置换出内存。
⑤最近最少使用算法。为获得对最优算法的模拟,提出了最近最少使用算法。由于当前时间之后需要用到哪些页无法提前获知,于是记录当前时间之前页面的使用情况,认为之前使用过的页面以后还会被用到。在置换时,将最近使用最少的页面换出内存。
⑥最近未使用算法。最近未使用算法利用修改位和使用位两个标志位将所有页帧分为4组,每次从组数最小的一组中随机选择一个页面将其移出内存。

2、MySQL慢查询分析及优化算法:

查询性能低下最基本的原因是访问的数据太多。某些查询可能不可避免地需要筛选大量数据,但这并不常见。大部分性能低下的查询都可以通过减少访问的数据量的方式进行优化。对于低效的查询,我们发现通过下面两个步骤来分析总是很有效:
确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行,但有时候也可能是访问了太多的列;
查询不需要的记录,好的做法是加上Limit;
多表关联时返回全部列,好的做法是只取需要的列;
总是取出全部列,好的做法是避免select *;
重复查询相同的数据,好的做法是将高频查询的数据放入缓存。
确认MySQL服务器是否在分析大量超过需要的数据行。在确定查询只返回需要的数据以后,接下来应该看看查询为了返回结果是否扫描了过多的数据。
如果发现查询需要扫描大量的数据但只返回少数的行,那么通常可以尝试下面的技巧去优化它:
使用索引覆盖扫描,把所有需要用的列都放在索引中,这样存储引擎无需回表获取对应行就可以返回结果了;
改变库表结构;
重写这个复杂的结构(一个复杂查询还是多个简单查询,切分查询,分解关联查询)。

3、单例模式和工厂模式:

单例模式:懒汉模式和饿汉模式;
工厂模式:

4、Redis及其相关:

①Redis是什么?
②为什么选择使用Redis?
③Redis的基本数据类型及对应使用场景?
④Redis是怎么重构点赞关注功能的?
点赞数据在Redis中的存储格式:用Redis存储两种数据,一种是记录点赞人、被点赞人、点赞状态的数据,另一种是每个用户被点赞了多少次,做个简单的计数。
用于需要记录点赞人和被点赞人,还有点赞状态(点赞、取消点赞),还要固定时间间隔取出Redis中所有点赞数据,分析了下Redis数据格式中Hash最合适。
因为Hash里的数据都是存在一个键里,可以通过这个键很方便的把所有的点赞数据都取出。这个键里面的数据还可以存成键值对的形式,方便存入点赞人、被点赞人和点赞状态。
所以如果用户点赞,存储的键为:likedUserId::likedPostId,对应的值为1,。取消点赞,存储的值为:likedUserId::likedPostId,对应的值为0。取数据时把键用::切开就得到了两个id,也很方便。
⑤Redis和其他类似功能的数据库相比有什么好处?

5、Kafka及其相关:

①Kafka是什么?
Kafka是分布式发布-订阅消息系统,它是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。
②为什么选择使用Kafka,为什么要使用消息队列?
缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,Kafka在中间可以起到一个缓冲的作用,把消息暂存在Kafka中,下游服务就可以按照自己的节奏进行慢慢处理。
解耦和扩展性:项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守规定,针对数据编程即可获取扩展能力。
冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。
健壮性:消息队列可以堆积请求,所以消费端业务即使短时间内死掉,也不会影响主要业务的正常进行。
异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

②Kafka在我的项目中是怎么被使用的?
③Kafka的应用场景?
④Kafka和其他类似功能的中间件相比有什么好处?

6、TCP、UDP

①TCP首部:
端口号:端口号用来标识同一台计算机的不同的应用进程。这里分为源端口和目的端口;
序号和确认序号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号;确认序号指明下一个期待收到的字节序号,确认号只有当ACK标志为1时才有效。
数据偏移(首部长度):数据区在报文段中的起始偏移值。
保留:为将来定义新的用途保留。
控制位:URG紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针;ACK确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段;PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队;RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求;SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1;FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。
校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。
紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
选项和填充:
数据部分:TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

7、HTTP

①HTTP的请求报文包括:请求行,请求头部,空行和请求数据。
②HTTP的响应报文包括:状态行,响应头,空行和数据(响应体)。
③HTTP的头域包括通用头、请求头、响应头和实体头四个部分,每个头域由一个域名,冒号和域值三部分组成。
通用首部字段,请求和响应报文都会使用的首部。

请求首部字段:从客户端向服务器发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、相应内容相关优先级信息

响应首部字段:从服务器向客户端返回响应报文时使用的首部。补充了资源内容更新时间等与实体有关的信息

实体首部字段:针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间与实体有关的信息

8、面向对象设计的原则

①单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。单一职责原则是实现高内聚、低耦合的指导方针,是最简单却最难运行的原则,需要设计人员发现类的不同职责并将其分离。
②开闭原则:软件实体应当对扩展开放,对修改关闭。指软件实体应尽量在不修改原有代码的情况下进行扩展
③里式替换原则:所有引用基类的地方必须能透明地使用其子类的对象。里氏替换原则表明,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立;在运用里氏替换原则时,应该将父类设计为抽象类或者接口,让子类继承父类或实现父类接口,并实现在父类中声明的方法。
④依赖倒转原则:要针对接口编程,不要针对实现编程。
⑤接口隔离原则:客户端不应该依赖那些它不需要的接口;注意控制接口的粒度;
⑥合成复用原则:优先使用对象组合,而不是继承来达到复用的目的;
⑦迪米特法则-又称最少知识原则。








#学习路径#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 12:10
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:23
转人工😡
门口唉提是地铁杀:五次握手了
点赞 评论 收藏
分享
评论
1
15
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务