【面经总结】开发面试题补充整理三

这篇博客整理了开发面试中常见的知识点,包括链表环形判断、堆排序的过程、DDoS攻击的原理与防御、邀请码设计策略以及Linux命令等。还涵盖了操作系统、Java对象、网络协议、数据库和数据结构等多个领域的面试题目,旨在帮助开发者更好地准备面试。
摘要由CSDN通过智能技术生成

一、判断链表是否有环?

可以利用快慢指针进行判断,快指针比慢指针多走一步,最后看会不会相遇

为什么不选择多走两步或者三步?
快慢指针的作用就是为了判断是否有环,我们肯定希望越快判断越好,如果是高倍的话,快指针会很快就进入环中,但是慢指针则会很慢才能到达第一个环,这个过程中,快指针将会在第一个环中无意义的高速移动

选择1 和 2 的组合,这样快慢指针的路程差精确等于环绕一周的长度。因为我们不知道环的周长,所以能够被所有正整数整除的数字就只能是1了,只要速度差是一,那么在一个环中,就一定会相遇。

当然按照这种思想其实选择2,3也是可以的,但是如果再考虑计算机内存执行间接寻址的次数越少越好,因为每一次在链表上的移动,都需要一次对内存的访问,我们肯定希望访问的次数越少越好,所以取 1,2 比 2,3 好些。

二、堆排序的过程

每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆

建堆过程:
(1)将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;

从最后一个非叶子结点开始(叶结点自然不用调整,第一个非叶子结点),从左至右,从下至上进行调整。

(2)将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;
(3)重新调整结构ÿ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值