二维凸包
概念
具体概念参考
凸包 - 维基百科,自由的百科全书 (wikipedia.org)
如图,在二维欧几里得空间中,凸包可想象为刚好包裹所有点的橡皮圈。
算法
Graham扫描算法
Graham扫描法(葛立恒扫描法)的原理:沿逆时针方向通过凸包时,在每个点处应该向左拐,而删除出现左拐的点。
<未完待续>
Leetcode-587-安装栅栏
题目
587. 安装栅栏
在一个二维的花园中,有一些用 (x, y) 坐标表示的树。由于安装费用十分昂贵,你的任务是先用最短的绳子围起所有的树。只有当所有的树都被绳子包围时,花园才能围好栅栏。你需要找到正好位于栅栏边界上的树的坐标。
示例 1:
输入: [[1,1],[2,2],[2,0],[2,4],[3,3],[4,2]]
输出: [[1,1],[2,0],[4,2],[3,3],[2,4]]
解释:
示例 2:
输入: [[1,2],[2,2],[4,2]]
输出: [[1,2],[2,2],[4,2]]
解释:
即使树都在一条直线上,你也需要先用绳子包围它们。
注意:
所有的树应当被围在一起。你不能剪断绳子来包围树或者把树分成一组以上。
输入的整数在 0 到 100 之间。
花园至少有一棵树。
所有树的坐标都是不同的。
输入的点没有顺序。输出顺序也没有要求。
分析
HBase环境搭建
HBase集群架构
准备工作
新建四台虚拟机
master, slave1, slave2, slave3
分别设置固定IP
确认已经搭建好Hadoop集群,见如下文章
Hadoop环境搭建
配置完成后拓扑如下,
HBase需要依赖ZooKeeper集群进行数据管理,HBase数据库也需要分别在多个节点搭建,
故HBase配置完毕之后的拓扑结构如下,
ZooKeeper集群安装
简介
Apache ZooKeeper
ZooKeeper是一个分布式服务框架,主要用来解决分布式系统中经常遇到的数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项等等。
基本工作过程
上图描述的就是一个ZooKeeper的节点计算图。
由若干个Server和若干个Client所够成,其中所有Server之间只有一个特殊的节点叫Leader,其余Server节点叫做Follower
如当某个Client对Server1发起写请求时,
数据将会写入这个Server1
这个Server1将会变更后传递到Leader
Leader将变更同步到所有的Server,同步的 ...
Leetcode-396-旋转函数
题目
396. 旋转函数
给定一个长度为 n 的整数数组 nums。
假设 arrk是数组 nums顺时针旋转 k 个位置后的数组,我们定义 nums 的 旋转函数 F 为:
F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1]
返回 F(0), F(1), ..., F(n-1)中的最大值 。
生成的测试用例让答案符合** 32 位** 整数。
示例 1:
输入: nums = [4,3,2,6]
输出: 26
解释:
F(0) = (0 * 4) + (1 * 3) + (2 * 2) + (3 * 6) = 0 + 3 + 4 + 18 = 25
F(1) = (0 * 6) + (1 * 4) + (2 * 3) + (3 * 2) = 0 + 4 + 6 + 6 = 16
F(2) = (0 * 2) + (1 * 6) + (2 * 4) + (3 * 3) = 0 + 6 + 8 + 9 = 23
F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) ...
MapReduce环境搭建
需求分析
使用MapReduce完成一个词频统计Word Count程序,
如下图,新建一个文本,保存在本机上的input.txt中。
12a a b b b c c c c d de f f
统计input.txt中的各单词出现的数目。
环境配置
进入Maven仓库搜索hadoop, 下载hadoop client
Maven Repository: org.apache.hadoop » hadoop-client (mvnrepository.com)
选择自己的hadoop版本,
将Maven的依赖定义复制下来。
打开idea新建一个maven项目
编辑pom.xml将复制的依赖定义粘贴进去
同步依赖完毕后,红色消失,
代码编写
MyMapper.java
1234567891011121314151617181920import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;import ja ...
HDFS基本操作
在HDFS上创建文件
启动HDFS
运行脚本start-dfs.sh
1234567[root@master ~]# start-dfs.shStarting namenodes on [master]Last login: Sat Apr 16 20:09:41 CST 2022 from 192.168.166.1 on pts/0Starting datanodesLast login: Sat Apr 16 20:13:05 CST 2022 on pts/0Starting secondary namenodes [master]Last login: Sat Apr 16 20:13:07 CST 2022 on pts/0
运行脚本start-yarn.sh
12345[root@master ~]# start-yarn.shStarting resourcemanagerLast login: Sat Apr 16 20:13:14 CST 2022 on pts/0Starting nodemanagersLast login: Sat Apr 16 20:32 ...
树莓派安装虚拟化平台VMware ESXi
准备工作
下载VMware ESXi
Download ESXi for ARM (vmware.com)
Github上下载最新树莓派固件
https://github.com/raspberrypi/firmware
Github Release上下载最新树莓派UEFI固件
Releases · pftf/RPi4 (github.com)
下载rufus软件用于烧录VMware ESXi镜像
Rufus - 轻松创建USB启动盘
制作UEFI启动TF卡
格式化TF卡
格式化TF卡为FAT32卷标设置为UEFI
写入fireware文件到tf卡
解压fireware-master.zip下的boot文件夹中的所有文件到tf卡中
删除所有的kernal*.img文件
覆盖UEFI固件文件
打开RPi4_UEFI_Firmware_*.zip文件,解压覆盖所有的文件到tf卡中。
制作VMware ESXi启动u盘
安装ESXi
树莓派插上制作好的tf卡,u盘,开机出现树莓派LOGO时候按ESC进入UEFI固件设置页面。
树莓派4的UEFI固件默认有一个使用3G ...
Hadoop环境搭建
配置虚拟机环境
建立四台虚拟机,配置Hadoop的分布式集群。并且配置静态ip地址如下,最终实现master能够直接与三个节点ssh无密码联通。
主机名
ip地址
master
192.168.166.100
node1
192.168.166.101
node2
192.168.166.102
node3
192.168.166.103
安装VMware虚拟机平台
略
新建虚拟机
略
安装CentOS-7系统
略
安装Java环境
略
克隆虚拟机
略
配置静态ip与hosts文件
略
配置ssh免密登陆
使用 ssh-keygen -t rsa 生成一对RSA公私钥,将公钥放在目标登录的服务器上,私钥放在本地。当ssh客户端发出请求,请求使用基于密钥的安全验证,服务器将先寻找公钥,并与传递过来的公钥做比较,若一致,则服务器使用公钥加密一个challenge并返回客户端,客户端通过私钥解密challenge并发送到服务器即可完成安全验证。
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-i ...
软件测试过程
软件测试过程
软件测试是有阶段性的,软件测试过程与软件设计周期有相互对应的关系。从过程来看,软件测试可分为单元测试、集成测试、系统测试和验收测试等一系列不同的测试阶段。
概述
单元测试的目的是保证每个模块单独运行正确,多采用白盒技术,检查模块控制结构的某些特殊路径,期望覆盖尽可能多的出错点。
经单元测试后的模块,组装为软件包,对软件包进行集成测试,主要测试软件结构问题,因测试建立在模块间的接口上,所以多为黑盒测试,适当辅以白盒测试技术,以便能对主要控制路径进行测试。
系统测试主要是检验软件是否满足功能、行为和性能方面的要求,这一步完全采用黑盒测试技术。
验收测试是检验软件产品的最后一道工序,与前面各种测试过程的不同之处主要在于它突出了客户的作用,同时软件开发人员也要参与。
单元测试
单元测试是对软件设计的最小单元——模块进行正确性检验的测试工作,主要测试模块在语法、格式和逻辑上的错误。
单元测试应对模块内所有重要的控制路径进行测试,以便发现模块内部的错误。单元测试是检查软件源程序的第一次机会,通过孤立地测试每个单元,确保每个单元工作正常,这样比单元作为一个更大系统的一个部分更容易 ...
软件测试概述
软件测试概述
软件测试模型
V模型
V模型是最具有代表意义的测试模型 ,反映出了测试活动与分析设计活动的关系。
V模型指出如下要求,
单元和集成测试应检测程序的执行是否满足软件设计的要求;
系统测试应检测系统功能、性能的质量特性是否达到系统要求的指标;
验收测试确定软件的实现是否满足用户需要或合同的要求。
W模型
W模型由两个V字型模型组成,分别代表测试与开发过程。
W模型强调:
测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、设计等同样要测试,也就是说,测试与开发是同步进行的。
H模型
H模型将测试活动完全独立出来,形成了一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来。
H模型揭示了软件测试是一个独立的流程,贯穿产品整个生命周期,与其他流程并发地进行。
其他模型
除上述几种常见模型外,还流传着其他几种模型,例如X模型、前置测试模型等。
X模型
X模型提出针对单独的程序片段进行相互分离的编码和测试,此后通过频繁的交接,通过集成最综合成为可执行的程序。
前置测试模型
前置测试模型体现了开发与测试的结合,要求对每一个交付内 ...