- 博客(854)
- 收藏
- 关注
原创 目前比较排序所能够达到的最优计算复杂度
3)快速排序 (Quick Sort):快速排序在平均情况下的时间复杂度是 O(nlogn),虽然在最坏情况下是 O(n方),但通过合理选择主元(例如使用三数取中法),可以在实际中通常达到O(nlogn) 的性能。非基于比较的排序算法,如基数排序(Radix Sort)和计数排序(Counting Sort),可以在特定条件下实现线性时间复杂度 O(n),但这些算法不适用于所有类型的数据,并且不是基于比较的排序方法。具体来说,任何基于比较的排序算法,在最坏情况下都需要进行至少 log(n!
2024-06-04 14:38:02 162
原创 线性规划之对偶概念
对偶性是线性规划最重要的内容之一。每个线性规划(LP1)必然有与之相伴而生的另一个线性规划问题(LP2),即任何一个求max z的LP1都有一个求min w的LP2。
2024-05-11 12:07:19 275
原创 DFI和DPI两种网络流量分析技术的对比
范围不同:DPI 关注单个数据包的内容,而 DFI 关注整个网络流的行为特征。粒度不同:DPI 对数据包进行深入分析,包括头部和有效载荷;DFI 对整个流量的行为进行分析,包括数据包的顺序、大小、频率等。应用场景不同:DPI 主要用于流量管理和网络安全,而 DFI 主要用于网络安全领域,特别是识别和应对复杂的网络攻击。
2024-05-06 11:41:44 787 2
原创 防火墙的特点
由于普通防火墙主要关注数据包的头部信息,并且规则集通常较为简单,因此性能相对较高,能够快速处理大量的数据包。普通防火墙通常不能深度检查数据包的内容,因此对应用层协议的细节支持有限,无法提供对应用层攻击的完全防护。普通防火墙主要在网络层(第三层)操作,根据数据包的源地址、目标地址、端口号和协议等信息进行过滤和控制。普通防火墙常用于边界防护,位于内部网络和外部网络之间,用于保护内部网络免受来自外部网络的攻击。普通防火墙不充当客户端和服务器之间的中间人,因此不涉及协议转换和应用层过滤功能。
2024-05-06 11:30:31 296
原创 包过滤防火墙、代理防火墙、状态检测防火墙的区别
包过滤防火墙:基于数据包的头部信息进行过滤,效率高,但不能检查数据包的内容。代理防火墙:充当客户端和服务器之间的代理,能够深度检查数据包的内容,提供更高级的安全性,但性能相对较低。状态检测防火墙:综合了包过滤和代理防火墙的优点,能够检查数据包的内容并维护连接状态,性能较包过滤防火墙稍低,但安全性更高。
2024-05-06 11:24:15 1239
原创 NAT和SOCKS4、SOCKS5的区别
NAT 是一种网络地址转换技术,用于将私有网络中的多个主机映射到单个公共IP地址。SOCKS4 和 SOCKS5是代理服务器协议,用于在客户端和服务器之间传输数据。SOCKS5比SOCKS4更安全,并且功能更丰富,包括TCP和UDP支持以及身份验证。
2024-05-06 10:47:32 503 1
原创 网站如何对访问者进行鉴别和授权以及面临的威胁
这些是用于授权的开放标准。OAuth用于授权第三方应用访问用户的资源,而OpenID Connect用于身份验证,使用户能够通过其提供商(如Google、Facebook等)进行登录。用户也应当采取良好的安全实践,如使用强密码、定期更改密码、不在不可信的网络上登录等。网站会将这些凭据与其数据库中存储的用户信息进行比对,以确认用户的身份。如果网站没有正确加密用户的密码或会话数据,攻击者可以通过拦截流量或访问数据库来获取这些信息。攻击者可能截获用户的登录信息或会话令牌,从而能够模拟用户并访问其账户。
2024-05-06 10:30:12 1124 1
原创 访问给定网站所涉及的网络协议
在Wireshark中,会看到HTTP或HTTPS的请求和响应,包括页面内容、图像、脚本等。如果你在Wireshark中捕获了电子邮件应用的流量,你会看到SMTP(用于发送邮件)、IMAP(用于收取邮件)或POP3(用于收取邮件)等协议的使用。在Wireshark中,会看到DNS请求和响应,显示了域名解析的过程。在Wireshark中,会看到TCP连接的建立、数据传输和连接的关闭过程。如果你访问的是一个HTTPS网站,你会看到TLS/SSL协议的使用。但具体的协议结构可能是加密的,难以直接解析。
2024-05-06 10:12:20 771 1
原创 使用域名会经过的协议
HTTP协议在建立连接后,发送HTTP请求,请求页面内容。服务器收到请求后,返回HTML页面及相关资源。首先,浏览器会将输入的域名发送给本地DNS服务器,或者DNS缓存服务器,以获取该域名对应的IP地址。一旦浏览器获得目标服务器的IP地址,它会使用TCP协议与服务器建立连接。这是通过三次握手来完成的。如果使用的是HTTPS协议,浏览器和服务器会进行SSL/TLS握手,以建立加密连接,保护通信安全。HTTPS协议在建立连接后,还会进行SSL/TLS握手,确保通信安全。
2024-05-05 21:29:45 146
原创 递归之生成排列和整数划分
算法的复杂度由if和else两部分决定,直觉上觉得是else起决定作用。输出语句共执行了nn!代表排序的总数,而每个排序有n个输出。所以复杂度由if决定为Θ(nn!
2024-04-13 18:08:28 191
原创 排序之冒泡、堆、插入和希尔
桶排序适用于元素分布均匀的场景。如果元素分布不均匀,会存在大多数元素都被分发到同一个桶中,则退化成比较排序。每次都从剩余的元素中取第一个元素,将其插入到前面已经排序好的序列中,使得插入后的序列依然是排序好的序列。将两个已经排序好的数组(如数组A和数组B)进行合并,合并后的数组依然是排序好的。为了减少比较次数,可以跳着比,比如每隔4个元素比较一次。比较排序所能达到的最优复杂度为O(nlogn)将元素组织成堆结构,然后每次取堆顶元素。如4路归并算法,和2路归并比较。插入排序是一种稳定排序。
2024-03-31 16:35:35 443
原创 堆的特征和构建
任何一个父节点的值都大于等于其子节点的值,但节点的左右子节点并无顺序要求,且上层节点的值不一定大于下层节点的值。堆是一颗完全二叉树,堆所对应树的节点的排列必须是从上到下,从左到右的依次排列,否则将不构成堆。在最大堆中,根节点值最大,叶子节点值较小,从根到叶子的一条路径上,节点值是从大到小排列的。时间复杂度为O(nlogn),因为插入一个元素需要logn,总共需要插入n个构建元素。从一个空堆开始,逐步插入A中的每个元素,直到A中所有元素都被转移到堆中。直接对数据进行调整,如自上而下的调整。
2024-03-30 20:23:27 451
原创 时间和空间复杂度
在迭代(循环)的场景下,复杂度就是计算迭代次数最高的语句。为了求解问题的实例而执行的计算步骤所需要的内存。计算执行频率最高的语句作为算法的复杂度。用大写字母O来进行表示。用大写字母T来进行表示。
2024-03-30 13:47:48 180
原创 JVM的内存结构和内存分配
Java栈是一个逻辑概念,特点是后进先出。一个栈的空间可能是连续的,也可能是不连续的。最典型的Stack的应用是方法的调用。退出该方法则对应的方法针被弹出。栈中存储的数据也是运行时确定的。Java堆内存的分配意味着以随意的顺序在运行时进行存储空间分配和收回的内存管理模型。堆中存储的数据常常是大小、数量和生命期在编译期时无法确定的。Java对象的内存总是在heap中分配。方法区是静态分配的,编译器将变量绑定在某个储存位置上,并且这些绑定不会在运行时改变常数池源代码中的命令常量。
2023-12-13 20:52:12 317
原创 Java程序员常用的自动化代码格式工具
Checkstyle是一个用于检查代码风格和质量的工具,同时也可以用来格式化代码。Spotless是一个通用的代码格式化工具,支持多种语言,包括Java。它可以与各种构建工具集成,如Gradle、Maven等。Eclipse集成开发环境(IDE)自带了代码格式化功能,可以通过配置文件定义代码风格,然后在保存文件时自动进行格式化。由Google开发的Java代码格式化工具,通过使用Google的代码风格规范,可以确保代码在整个项目中具有一致的格式。用户可以通过设置来定义代码风格,并在保存文件时自动应用格式。
2023-12-06 22:50:10 847 1
原创 计算机体系结构中计算机执行一条指令需要哪些步骤
这些步骤构成了指令执行的基本流水线,被称为经典的五段流水线(Fetch, Decode, Execute, Memory, Writeback)。在现代计算机体系结构中,可能会有更多的流水线阶段,也可能会引入超标量、乱序执行等技术来提高指令执行的效率。
2023-12-06 22:41:09 593
原创 中断是什么
我们把这个部分的工作称为I/O。CPU被打断前的进程在执行时是一句一句执行的,这时的中断称为精确中断,也就是被中断时,之前的指令全部完成,之后的都未开始,而与之相对应的就是非精确中断。中断时,中断控制器会在总线上放置一个地址,它指向的是一张表格,称为中断向量,里面的都是地址,也就是指针,指向应对不同中断情况的处理程序。中断机制的过程:假定CPU在执行其他的进程,同时设备控制器控制I/O设备,如硬盘和内存传输数据。如果中断控制器认为可以中断了,就通知CPU,这样CPU就阻塞当前的进程,开始处理中断。
2023-12-06 22:24:16 194
原创 内核态和用户态在虚拟内存地址空间上的区别
总体而言,内核态和用户态的虚拟内存地址空间在权限、访问控制和地址空间划分等方面存在显著的区别,这些设计有助于操作系统的稳定性、安全性和性能。
2023-12-06 21:56:18 346
原创 一些能在内核态运行用户态无法运行的命令
这些命令通常涉及对系统底层资源的管理,因此需要足够的权限来执行。在Linux中,超级用户(root用户)拥有最高权限,可以执行这些命令。
2023-12-06 21:45:54 230
原创 线程开销为何比进程小
线程共享同一进程的地址空间。因此,在多线程的环境中,线程之间可以更容易地共享数据和资源,像进程那样进行复杂的和。这降低了在进程间传递信息的开销。
2023-12-06 14:11:50 503
原创 MySQL千万级数据的表如何优化
优化查询count:表数据大时,查询表count会很慢。所以另建一个表来存两个数据,即这个表的名称和所对应的count数。分页查询优化:给表数据创建索引,因为在有索引的情况下条件查询会比较快,然后进行子查询。参考资料MySQL千万级数据的表如何优化。
2023-12-06 01:37:21 342
原创 线程间和进程间传递数据的区别
总体而言,线程适用于轻量级的任务,而进程适用于需要更严格的隔离和独立性的任务。选择线程还是进程取决于具体的应用场景和要解决的问题。
2023-12-04 15:18:50 235
原创 设计模式之装饰器模式
第一个称之为“构件”,Component,它是代表了产品需要哪些功能。ConcreteComponent可以理解为第一代机器人实现的功能。装饰器其实也是一个抽象的接口,首先它和机器人要有同样的功能,它们都继承了Component接口。由于需要把对象封装到内部,所以装饰器还关联使用了Component。下面确切的装饰器,就是我们说的壳子。
2023-12-04 14:03:58 158
原创 为什么TCP需要重传以及流量控制
流量控制的原因在于确保发送方不会发送过多的数据,以免超出接收方的处理能力。在数据传输之前,TCP通过三次握手建立连接,确保双方都准备好进行通信。当发送方发送数据后,如果在一定时间内没有收到确认,就会认为数据丢失,触发超时重传机制。即使网络状况良好,由于拥塞控制机制,TCP可能会减缓发送速率,导致需要进行重传。数据包在传输过程中可能会被乱序交付,接收方可能需要提醒发送方重传丢失的数据。,它会立即发送重复确认,告诉发送方需要重传的数据,而不必等到超时。,以防止发送方发送过多的数据导致接收方无法处理。
2023-12-04 13:13:34 318
原创 Set、HashTable和HashSet的区别
Hashtable是同步的,适合在多线程环境下使用。HashSet不是同步的,如果需要在多线程环境下使用,可以使用Collections.synchronizedSet方法包装HashSet。Set接口本身不提供同步性,但可以通过Collections.synchronizedSet创建同步的Set。
2023-12-04 13:03:03 391
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人