- 博客(8)
- 收藏
- 关注
原创 设计模式——简单工厂、工厂方法和抽象工厂的区别与联系
创建型模式中,常用的有工厂方法模式和抽象工厂模式,平时实践还包括简单工厂模式,虽然简单工厂模式不在23种设计模式中。为了区分以上几种设计模式的差别,通过以下几个例子介绍这几种模式的使用场景以及优缺点。当然,由于本人接触设计模式时间还不长,难免有疏漏之处,欢迎各位提出意见。考虑如今有一个产品,比如椅子,该椅子可以有多种风格,比如中式的,或者美式的。如果我们不想通过设计模式,想要什么类型的椅子,就可以直接实例化某个实体类获得。“ChineseChair.java”——实体类“Client.java”——用户
2022-06-02 13:26:51
1770
原创 将一个数组拆分成k段,对每个段求和,如何使和最小的段取到最大值
总的解题思路:既然要将数组arr分成k段,那么后面段的拆分,依赖于前一段的拆分。假设第一段已经拆分好了,那么后续的段就可以在此基础上进行拆分。整个数组拆分成k段有若干种情况,针对每一种情况,我们可以求出第n次拆分中最小段的和,同时与迄今为止保留的最小段的和最大的那个进行比较,保留较大的一方,直到遍历所有的拆分方案。拆分并不是无穷无尽的,比如第一段的start和end下标,就一定要满足end <= arr.length-k+1,否则数组后续的元素个数,都不够剩余的k-1段分配。public cla
2021-05-19 10:12:54
3153
原创 java中“==”与equals()方法区别
“==”和equals方法区别:双等号“ == ”,对于基本数据类型,比较的是它们的值。对于非基本类型,比较的是它们在内存中的存放地址,或者说是比较两个引用是否引用内存中的同一个对象。equals方法没有在类中被override时,比较的还是对象在内存中的地址;如果被override,一般是比较对象中的成员是否相同。 Integer a = new Integer(1); Integer b = new Integer(1); System.out.println(
2021-05-17 14:59:38
275
原创 python z3 解决 dpll 算法
python z3 解决 dpll 算法主要思路是转化为SAT问题。在求解SAT问题之前,为了方便将原子命题进行替换。需要将原始命题转换为否定范式,然后再由否定范式转化为合取范式。这样就可以保证整个命题式中只有命题变量,~,∧,∨等符号。主要的实现方法是递归,但是在每一次递归中,我们如果之前对某个原子变量做了替换,就需要先对整个命题进行简化,比如原始命题为 p ∧ q,我们在前一次递归中,将p赋值为True,那么在下一次递归中,就需要通过简化,使得原始命题变成 q 。然后最新的命题中只剩下了原子命题q,我
2021-05-05 23:51:01
1004
原创 netfilter实现包过滤
如果运行成功,会发生如下现象:1.无法下载“.exe”文件;2.通过命令dmesg可以查看到自己在网页端登录时输入的账号和密码#include <linux/module.h>#include <linux/kernel.h>#include <linux/skbuff.h>#include <linux/in.h>#include <linux/ip.h>#include <linux/tcp.h>#includ..
2021-03-24 11:40:48
666
原创 使用Raw Socket实现ICMP重定向
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<netinet/ip_icmp.h>#include<netinet/tcp.h>#include<netinet/udp.h>#include<arpa/inet.h>#include<sys/socket.h>#include<sys/types.h>#i.
2021-03-24 11:35:39
741
原创 rootkit隐藏tcp连接信息
rootkit隐藏tcp连接信息/* *通过hook内核函数tcp4_seq_show来隐藏某端口的tcpv4连接信息 *//*隐藏TCP的53端口的连接*/#include <linux/init.h>#include <linux/module.h> #include <linux/kallsyms.h>#include <linux/kernel.h>#include <linux/string.h>#include &
2021-03-20 14:45:24
736
2
原创 基于邻接表的dijkstra算法——C语言实现
鉴于优快云上实现dijkstra算法大多是使用邻接矩阵,因此记录一下使用邻接表的实现。该算法通过读入文件构造邻接表,然后使用dijkstra构造单源最短路径。代码如下:dijkstra.h#define MAXSIZE 210//定义无向图中的顶点//定义无向图中的边(弧)typedef struct Edge{ int node;//该边的终点 int cost;//经过这条边需要的代价 struct Edge* nextedge;//与该顶点相连的下一条边}Edge;typ
2021-01-04 20:54:31
2252
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人