Optimus-Xs' Blog

堆的原理和实现

堆 堆这种数据结构,有很多的实现,比如:最大堆,最小堆,斐波那锲堆,左派堆,斜堆等。从孩子节点的个数上还可以分为二叉堆,N叉堆等。本文我们从最大二叉堆堆入手看看堆究竟是什么 什么是堆 我们先看看它的定义 堆是一种完全二叉树(不是平衡二叉树,也不是二分搜索树哦) 堆要求孩子节点要小于等于父亲节点(如果是最小堆则大于等于其父亲节点) 满足以上两点性质即可成为一棵合格的堆数据结构...

DNS报文格式

我们知道查询一个域名,需要与 DNS 服务器进行通信。那么,DNS 通信过程大概是怎样的呢? DNS 是一个典型的 Client-Server 应用,客户端发起域名查询请求,服务端对请求进行应答: DNS 一般采用 UDP 作为传输层协议( TCP 亦可),端口号是 53 。请求报文和应答报文均作为数据,搭载在 UDP 数据报中进行传输: 很显然,DNS 请求报文和应答报文均需...

面向对象 (OOP) 的五个基本原则

在程序设计领域, SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期其著作《敏捷软件开发:原则、模式与实践》(Agile Software Development: Principles, Patterns, and Practices)中引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则 SOLID 原则旨在解决软件开...

死锁的产生、防止、避免、检测和解除

死锁概念 在许多应用中进程需要以独占的方式访问资源,当操作系统允许多个进程并发执行时可能会出现进程永远被阻塞现象,如两个进程分别等待对方所占的资源,于是两者都不能执行而处于永远等待状态,此现象称为死锁。 死锁通常被定义为:如果一个进程集合中的每个进程都在等待只能由此集合中的其他进程才能引发的事件,而无限期陷入僵持的局面称为死锁。 死锁发生条件 互斥条件: 临界资源是独占资...

UDP 打洞技术解析

P2P 通信最大的障碍就是 NAT(网络地址转换),NAT 使得局域网内的设备也可以与公网进行通讯,但是不同 NAT 下的设备之间通讯将会变得很困难。UDP 打洞就是用来使得设备间绕过 NAT 进行通讯的一种技术。 简单解释 NAT NAT 大家应该十分熟悉了,它分为几种。一种就叫做 NAT,它只对 IP 地址进行转换;另一种叫做 NAPT(Network Address/Port Tra...