自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 欧几里得算法求最大公约数和最小公倍数

/* * 求解最大公约数(递归实现) */ public static int gcd(int a, int b) { if (a < 0 || b < 0) return -1; if (b == 0) return a; return gcd(b, a % b); } /* * 求解最大公约数(非递归实现) */ public static int gcd1(int a, int b) { int temp; while .

2020-11-15 22:14:37 289

原创 Floyd算法

1、算法介绍1,从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。2,对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比已知的路径更短。如果是更新它。把图用邻接矩阵G表示出来,如果从Vi到Vj有路可达,则G[i][j]=d,d表示该路的长度;否则G[i][j]=无穷大。定义一个矩阵D用来记录所插入点的信息,D[i][j]表示从Vi到Vj需要经过的点,初始化D[i][j]=j。把各个顶点插入图中,比较插点后的距离与原来的距离,G

2020-11-15 22:08:49 913

原创 Djikstra算法

vector<int> Djikstra1 (vector<vector<int> > &graph,int start){ int n = graph.size(); //存储途中的顶点个数 vector<int> visit(n,0); //标记已作为中间节点完成访问的顶点 vector<int> dist(n,0); //存储从起点start到其他顶点的最短路径 for(int i=0;i<n;

2020-11-07 18:55:06 592 1

原创 快速幂

快速幂(Exponentiation by squaring,平方求幂)是一种简单而有效的小算法,它可以以[公式]的时间复杂度计算乘方。快速幂不仅本身非常常见,而且后续很多算法也都会用到快速幂。让我们先来思考一个问题:7的10次方,怎样算比较快?方法1:最朴素的想法,77=49,497=343,… 一步一步算,共进行了9次乘法。这样算无疑太慢了,尤其对计算机的CPU而言,每次运算只乘上一个个位数,无疑太屈才了。这时我们想到,也许可以拆分问题。方法2:先算7的5次方,即77777,再算它的平方,共进

2020-11-06 11:59:57 398

原创 JAVA接口内容小结

2020-10-27 21:18:57 75

原创 Shuffer分区案例

分区概述在 MapReduce 中, 通过我们指定分区, 会将同一个分区的数据发送到同一个 Reduce 当中进行处理例如: 为了数据的统计, 可以把一批类似的数据发送到同一个 Reduce 当中, 在同一个 Reduce 当中统计相同类型的数据, 就可以实现类似的数据分区和统计等其实就是相同类型的数据, 有共性的数据, 送到一起去处理Reduce 当中默认的分区只有一个分区步骤:Step 1. 定义 Mapper这个 Mapper 程序不做任何逻辑, 也不对 Key-Value 做任何

2020-10-22 21:01:45 223

原创 WordCount案例

Map和Reduce流程shuffer流程WoedCountMapper代码package cn.itcast.mapreduce;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Counter;import org.apache.hadoop.mapreduce.Mapper;import java.io.IOEx

2020-10-18 21:08:29 406 1

原创 HDFS的IO流操作与定位读取文件

//把本地e盘上的123.txt文件上传到HDFS根目录上 @Test public void putFileToHDFS() throws Exception{ //1:获取对象 FileSystem fileSystem = FileSystem.get(new URI("hdfs://master:9000"), new Configuration()); //2:获取输入流 FileInputStream file...

2020-10-11 21:04:06 372

原创 HDSF_api

@Test//1:本地文件上传到hdfs public void moveFromLocal() throws URISyntaxException, IOException { //1:获取文件系统 FileSystem fileSystem = FileSystem.get(new URI("hdfs://master:9000"), new Configuration()); //2:执行上传操作copyFromLocalFile ...

2020-10-11 21:02:36 119

原创 HDFS的读取和写入

文件的写入过程文件的读取过程

2020-10-06 09:27:37 137

原创 HDFS文件限额配置和安全模式

1、文件限额配置在多人共用HDFS的环境下,配置设置非常重要。特别是在Hadoop处理大量资料的环境,如果没有配额管理,很容易把所有的空间用完造成别人无法存取。Hdfs的配额设定是针对目录而不是针对账号,可以让每个账号仅操作某一个目录,然后对目录设置配置。 hdfs文件的限额配置允许我们以文件个数,或者文件大小来限制我们在某个目录下上传的文件数量或者文件内容总量,以便达到我们类似百度网盘网盘等限制每个用户允许上传的最大的文件的量。hdfs dfs -count-q-h /user/root/dir1

2020-10-05 22:14:12 539

原创 Hadoop完全分布式搭建过程(详细)

准备工作1.VMware 15.12.jdk(我这里是32位的,大家根据自己的虚拟机情况进行选择,后边会说)3.hadoop1 静态ip设置静态网络详细过程2 修改主机名称vim /etc/sysconfig/network3 添加映射关系三台虚拟机均需要执行下面的操作vim /etc/hosts通过ping hadoop02/1/3查看能否ping通注意:映射关系配置完成后三台虚拟机是可以相互ping通的4 关闭防火墙永久关闭(三台电脑都要执行此操作)chkco

2020-09-30 11:36:21 6423

原创 虚拟机无法ping同主机解决方法

问题一检查看本地的Vmnet8的网关与ip是否与虚拟网络编辑器一致若不一样,修改Vmnet8的ip与网关,dns与网管一致即可如果以上步骤仍然ping不通,进行下面的操作问题二1、启动入站链接修改入站规则找到配置文件类型为“公用”的“文件和打印共享(回显请求 – ICMPv4-In)”规则,设置为允许。...

2020-09-25 19:52:45 429

原创 Linux网络环境配置

1、自动获取自动获取IP的方式比较简单,Linux启动后会自动获取IP,但是每次获取的IP可能不一样,不适合做服务器,服务器IP是固定的。指定固定IP1、查看VMnet8的IP、子网掩码和默认网关若默认网关为空,则需要自己添加,步骤如下:(1)、打开当前虚拟机下的虚拟网络编辑器记住:子网掩码:255.255.255.0网关:192.168.25.2起始IP地址:192.168.25.128终止IP地址:192.168.25.254(2)、编辑V8网络属性配置2、修改虚拟机的

2020-09-24 21:21:48 877

原创 centos 7默认启动级别设置

Linux分为7个启动级别:0 - 系统停机状态1 - 单用户工作状态2 - 多用户状态(没有NFS)3 - 多用户状态(有NFS)4 - 系统未使用,留给用户5 - 图形界面6 - 系统正常关闭并重新启动现在很多Linux系统都默认启动等级为5。如果我们想切换系统等级,可使用init命令init 3这样就可以切换到多用户状态且带有网络文件系统了。这种方式对于CentOS7也适用。但想修改默认启动级别,CentOS7同其他Linux稍显不同了。  对于传统的设置方法,只要修改/e

2020-09-20 19:51:55 1326

原创 指定运行级别

运行级别0:关机1:单用户(找回丢失的密码)2:多用户没有网络服务3:多用户有网络服务4:系统未使用保留给用户5:图形界面6:系统重启修改默认运行级别: vim /etc/inittab这里分享两个特别有意思的操作一:当root密码忘记或者丢失后,这时我们进不去电脑,没有办法改变密码,这时我们就要进入单用户模式,去修改root密码1、在引导界面输入回车2、输入e3、选择第2项,输入e4、输入 1回车5、输入b,等待进入单用户模式6、重置密码即可第二个有意思的事情就

2020-09-19 21:50:39 410

原创 虚拟机与物理机的三种连接方式

引言很多小伙伴在创建虚拟机时不明白虚拟机与主机的三种链接方式(vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。)是怎样连接的,这就导致虽然创建了虚拟机,但是不能与物理机互通,没有连接网络,不能对外界进行访问。网上的多数教程是告诉你如何设置让虚拟机与物理机胡同,但是很少有具体以介绍这三种连接方式的文章,下面让我来具体介绍一下三种连接方式吧。桥接模式桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。

2020-09-18 09:13:42 8352

原创 Linux 系统目录结构

树状目录结构/bin:bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。/boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev :dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。/etc:etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

2020-09-16 22:34:45 828

原创 JAVA初学者对于对象内存图的看法与总结

一个手机类的定义与调用定义代码:public class Phone { //成员变量 String brand; double price; String color; //成员方法 public void call(String who) { System.out.println("给"+who+"打电话"); } public void sendMessage(){ System.out.pri

2020-09-09 22:55:04 169

原创 JAVA数组总结

动态初始化重新指定数组的长度,在创建数组时,直接指定数组中的数据元素的个数定义格式(以int类型为例):int[] array = new int[300];赋值初始化: for (int i = 0; i < 5; i++) { array[i] = i; }动态数组支持初始化拆分int[] arrayC;arrayC = new int[5];静态初始化不指定数组的数据个数,而是直接将数组的内容进行指定标准定义格式:int[]

2020-09-08 22:58:57 185

原创 广度优先搜索--BFS

BFS介绍BFS,其英文全称是Breadth First Search。 BFS并不使用经验法则算法。从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。一般的实验里,其邻居节点尚未被检验过的节点会被放置在一个被称为 open 的容器中(例如队列或是链表),而被检验过的节点则被放置在被称为 closed 的容器中。宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽

2020-08-20 18:37:57 215

原创 深度优先搜索--DFS

算法介绍作为搜索算法的一种,DFS对于寻找一个解的NP(包括NPC)问题作用很大。但是,搜索算法毕竟是时间复杂度是O(n!)的阶乘级算法,它的效率非常低,在数据规模变大时,这种算法就显得力不从心了。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。总结来说就是,这个算法运用的时候就是找一个头结点,然后沿着这个头

2020-08-18 19:04:35 201

原创 回溯算法

概念回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。简记基本思想从一条路往前走,能进则进,不能进则退回来,换一条路再试。回溯在迷宫搜索中使

2020-08-06 11:18:55 5503

原创 贪心算法

贪心算法思想:顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。贪心算法的基本要素:1、贪心选择性质。所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达

2020-08-05 12:51:32 15894 4

原创 stl常用遍历算法

常用遍历算法/* 遍历算法 遍历容器元素 @param beg 开始迭代器 @param end 结束迭代器 @param _callback 函数回调或者函数对象 @return 函数对象*/for_each(iterator beg, iterator end, _callback);/* transform算法 将指定容器区间元素搬运到另一容器中 注意 : transform 不会给目标容器分配内存,所以需要我们提前

2020-08-04 17:52:30 191

原创 stl中的常用查找算法

分类1find(iterator beg,iterator end,value)//查找成功返回value的迭代器,否则返回.end()。#include <iostream>#include <vector>#include <algorithm> using namespace std;int main(){ vector<int> v1; for(int i=0;i<10;i++) v1.push_back(i

2020-08-04 17:22:55 206

原创 map/multimap容器

一. map容器map容器是关联型容器,键值对应着实值,所有元素根据键值自动排序。Map中的所有元素都是pair对组,pair的第一个元素为键值,第二个元素为实值,map不允许有相同的键值,但允许有相同的实值。与set容器一样,不允许通过迭代器修改map的键值,因为键值与map的排列有关,如果修改键值,那么map的结构会被破坏。map的实值是可以修改的。二.multimapmultimap与map的操作特性类似,位移不同就是multimap允许键值重复。map和multimap都是用红黑树作为底层

2020-08-04 10:40:14 140

原创 set/multiset容器

set/multiset容器特性会将所有元素根据元素的值进行排序,set是以RB-tree(红黑树-平衡二叉树的一种)为底层机制,其查找效率非常好,set容器不允许出现重复的元素,而multiset允许出现重复的元素。注意:由于会自动排序,所以该容器不会提供push_back,push_front,pop_back,push_front这样的插入方法,只提供insert()的插入方法。不可以通过set的迭代器改变某一位置的值,因为这样就不一定满足RB-tree,如果非要把某一位置的数改了,就先删了

2020-08-03 17:38:00 113

原创 C++ STL标准模板库list

标题List容器(堆栈)list容器的基本概念链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。每个节点分为两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相较于vector的连续线性空间,list就显得负责许多,它的好处是每次插入或者删除一个元素,就是配置或者释放一个元素的空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素的移除,list永远是常数时间。List容器是一个双

2020-08-01 16:36:20 455

原创 queue容器

概念队列是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。标题常用API1、queue构造函数queue<T> queT;//queue采用模板类实现,queue对象的默认构造形式:queue(const queue &que);//拷贝构造函数2、queue存取、插入和删除操作push(elem

2020-08-01 09:45:19 124

原创 stack(栈)容器

介绍stack是堆栈容器,是一种“先进后出”的容器。 如图:tack容器不支持随机访问,你能通过top()从栈顶获取元素,通过pop()从栈顶删除元素不支持迭代器,不能遍历,输出时只能top()一个,然后,pop()一个常用API1、构造函数stack<T> stkT;//stack采用模板类实现, stack对象的默认构造形式: stack(const stack &stk);//拷贝构造函数2、stack赋值操作stack& operator=(co

2020-07-31 17:08:01 539

原创 deque容器

deque容器基本概念功能:双端数组,可以对头端进行插入删除操作deque与vector区别:1、vector对于头部的插入删除效率低,数据量越大,效率越低2、deque相对而言,对头部的插入删除速度比vector快3、vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部工作原理:1、deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据2、中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间3、deque容器的迭代器也是

2020-07-31 16:48:12 146

原创 c++STL vector容器

Vector容器介绍:vector相当于一个动态的数组,是一个单口容器,再分配空间时,vector会分配一些额外的空间以适应可能的增长,储存空间比实际要存储的空间更大。原理:即动态增长,当插入新元素时,如果空间不足,那么vector会重新申请一块更大的内存空间(默认时原来空间的两倍),然后将原来空间的数据拷贝到新的空间,最后释放原来空间,再把新元素插入空间。与数组相比:vector采用连续存储空间来存储元素。所以可以采用下标的方式vector的元素进行访问,和数组一样的高效。但是其又不像数组,它的大

2020-07-30 20:32:39 124

原创 string容器

string的特性说到char的特性就不得不与char作比较了,char*是一个指针,而string是一个类,它封装了很多实用的方法,比如查找find,拷贝copy,删除delete等。不用考虑内存释放和越界string管理char*所分配的内存。每一次string的复制,取值都由string类负责维护,不用担心复制越界和取值越界等。常用APIstring构造函数string();//创建一个空的字符串 例如: string str; string(const string&am

2020-07-30 18:37:56 78

原创 STL模板库简介

一、STL模板库简介STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:algorithm、deque、functional、iterator、vector、list、map、memory、numeric、queue、set、stack和utility。算法:算法部分主要由头文件al

2020-07-30 12:53:01 662

原创 基于github/gitee的博客部署到云服务器

首先我们需要搭建一个hexo 博客,参考这个链接:http://39.98.179.229/2020/03/15/hexo-github%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/如果小伙伴想要将自己的博客先美化在部署可以参考这个链接:http://39.98.179.229/2020/03/24/yilia%E4%B8%BB%E9%A2%98%E4%B8%8B%E8%BD%BD%E3%80%81%E6%9B%B4%E6%8D%A2%E3%80%81%E7%BE%8E%E5

2020-07-29 21:08:49 2714 3

原创 对构造函数和析构函数进行分析

c++面向对象学习,对构造函数和析构函数进行分析1、析构函数对象的生命周期结束时,对其进行清理工作。2、构造函数在初始化一个对象的时候,系统自动的调用构造函数,如果用户没用定义构造函数,则调用系统默认的构造函数3、构造函数的分类:1、按参数类型:无参构造函数和有参构造函数2、按功能类型:普通构造函数和拷贝构造函数下面通过代码来更深刻的理解构造函数ONE:普通类型构造函数1、无参构造函数格式: data() //无参构造函数 { num=0; c

2020-07-29 21:03:36 226

原创 全局变量、静态变量、局部变量

全局变量、静态变量、局部变量的生存周期与作用域1、生存周期和作用域的定义1生存周期: 变量从定义到销毁的时间范围。存放在全局数据区的变量的生存周期存在于整个程序运行期间,而存放在栈中的数据则随着函数等的作用域结束导致出栈而销毁,除了静态变量之外的局部变量都存放于栈中。取决于变量存放位置。作用域: 变量的可见代码域(块作用域,函数作用域,类作用域,程序全局作用域)。取决于变量定义位置。2、不同类型变量的生存周期和作用域21)全局变量:生命周期:程序运行期一直存在,从程序开始到程序结束;作用域:全

2020-07-29 21:00:50 953

原创 浅拷贝与深拷贝

如果类中没有指针,浅拷贝完全能解决所有拷贝问题,但是如果类中存在指针,那么浅拷贝就出现了大问题:类中的指针会指向同一块内存空间,在对象生命周期结束的时候,析构函数会释放该内存空间,由于两个指针都指向这一个空间,就会导致这块内存空间被释放两次。如:#include <iostream>#include <string.h>using namespace std;class Person{private: char*m_name; int m_age;

2020-07-29 20:58:04 91

原创 指针与数组

指针与数组1.指针与数组(静态分配内存)2.指针与数组(动态分配内存)1.指针与数组(静态分配内存)●指针与一维数组:由数组名可以直接得到数组中第一个元素的地址,因此数组名就是指向整个数组的指针,也指 向数组的第一个元素。....int a[10];int *p=a;....这里p指向数组a的第一个元素,a就是p。●指针与二维数组:int a[3][4]={{2,4,6,8},{3,6,9,12},{4,8,12,16}};int (*p)[4]=a; //p与a的值具有相同的指针类型

2020-07-29 20:55:30 116

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除