排序概述 排序是一种将给定的一些元素按照一定的规则进行重排列的动作。 下面介绍的为常见的8大排序算法及Java.Util包Arrays类中自带的排序算法sort的使用。 介于Arrays类中已经实现了效率非常高的Daul-Pivot QuickSort,在日常的开发中,若需要使用排序功能的话,可以直接使用该轮子。 排序算法的实现及测试 package cn.young22.dsa.ch08; import java.util.ArrayList; import java.util.List; /** * 一个用于给数组从小到大排序得到类 * * @author Young * */ public class SortArray { /** * bubbleSort * * @description 排序思想. * 外层: 循环进行数组长度次数 * 内层: 依次比较相邻两个元素的值,若前一个元素比后一个元素大, * 交换两个元素的位置,直至最后一个元素,下一趟遍历则遍历值倒数第二个元素为止,依次类推 * 冒泡排序的时间复杂度为O(n^2) * @param a 待排序数组 */ public static <… Continue Reading 05数据结构与抽象 排序

1栈的简介 package cn.young22.dsa.ch05; import cn.young22.dsa.ch06.ArrayStack; import cn.young22.dsa.ch06.LinkedStack; import cn.young22.dsa.ch06.VectorStack; /** 测试所实现的 * LinkedStack * VectorStack * ArrayStack * */ public class StackDemo1 { public static void main(String[] args){ // 初始化stringStacks // StackInterface stringStack = new LinkedStack(); // 测试ArrayStack // StackInterface stringStack = new ArrayStack(); // 测试 VectorStack StackInterface stringStack =… Continue Reading 03数据结构与抽象 栈(Stack)

1引例 package cn.young22.dsa.ch04; /** 这个类使用来说明用不同的算法来做同一件事的效率的差别 * 使用三个算法来计算从1加到一个很大的整数这个式子 1 + 2 + 3 + … + A_LARGE_NUMBER * * 算法1使用一个循环,让计数器counter从1加到A_LARGE_NUMBER * 算法2使用双重循环,在外层由A_LARGE_NUMBER控制循环的总次数, * 在内层有index来控制循环的次数,内层循环执行的是算出当前要加的整数 * 算法3使用高斯算法直接计算出结果 counter = (1 + A_LARGE_NUMBER) * A_LARGE_NUMBER / 2 * * 使用纳秒为单位计算以各个算法得到求和结果的时间,进行比较,从而得出,需要寻求更好的算法去提高效率 * * */ public class RecordTimeOfThreeAlgorithms { public static void main(String[] args){ //… Continue Reading 02数据结构与抽象 算法效率分析

1.包(Bag)的简介 1.1 什么是包 在现实生活中,我们常见的包有购物袋,塑料袋,布袋等。这些物品的共同特性是他们都是一种容器,可以用来装物品。 而抽象数据类型(ADT)包是没有特定次序的对象的有限集合。这些对象具有相同的或相关的数据类型。包可以含有重复项。 包的行为有: 1.得到当前包中的项数 2.查看包是否为空 3.将给定的对象加到包中 4.从包中删除一个未指定的对象 5.可能的话,从包中删除一个具体对象的一次出现 6.可能的话,从包中删除一个具体对象的全部出现 7.从包中删除所有的对象 8.统计包中的某个对象的个数 9.测试包中是否含有某个对象 10.查看包中的所有对象 1.2说明一个包 可以使用UML来描述一个包类: 包的规格说明(Specification) 抽象数据类型:Bag 数据 有限个对象,不需要唯一,无序,且有相同的数据类型 这个集合中的对象个数 操作 伪代码 UML 描述 getCurrentSize() +getCurrentSize(): integer 任务:报告包中当前的对象个数 输入:无 输出:包中当前对象的个数 isEmpty() +isEmpty(): boolean 任务:查看包是否为空 输入:无 输出:根据包是否为空返回真或假 add(newEntry) +add(newEntry: T): boolean 任务:将给定对象添加到包中 输入:newEntry是一个对象 输出:根据添加是否成功返回真或假 remove() +remove(): T 任务:从包中删除未指定的项,如果可能的话… Continue Reading 01数据结构与抽象 包(bag)

放假前在图书馆淘了本好书数据结构与抽象:Java语言描述(原书第4版),现在看的差不多了,近期将根据本书的内容做相应的分享。 我打算分为12篇博文来分享整本书的内容,这本书所讲的是数据结构的Java实现,从最简单的包结构开始讲起。书中先举出日常生活中常见的列子,再将这些例子抽象出来,形成数据结构,然后进一步使用软件工程的方法,分析对应的ADT所需的功能,写出对应ADT的规格说明。之后根据规格说明选出先要实现的一组核心方法,先实现这些核心方法,再做相应测试,之后再实现更多的方法。本书内容细致,举例清晰明了,是一本很好的用来巩固数据结构和Java编程语言的书。 下面列出将要分享的博文,及博文中的主要内容: 文章标题为红色说明该文章还未开始写,文章标题为绿色说明该文章正在写,文章标题为蓝色说明该文章已写完 全部代码托管在github上https://github.com/Young2018/DSA 1.包(Bag) 包的说明 包的顺序实现 包的链式实现 2.算法分析(Algorithm analysis) 引例说明优化算法的必要性 评估算法效率的方法 评估算法效率举例 3.栈(Stack) 栈的说明 栈顶链式实现 栈的顺序实现 使用java.util.Vector实现栈 4.递归(Recursive) 递归说明 递归处理数组 递归处理链表 递归方法的时间效率分析 递归问题举例 尾递归 简介递归 使用栈来代替递归 5.排序(Sorting) 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 基数排序 排序算法分析 6.队列(Queue)、双端队列和优先队列 队列、双端队列和有限队列的说明 队列、双端队列和有限队列的实现 7.线性表(List) 线性表的说明 线性表的顺序实现 线性表的链式实现 8.查找(Searching) 无序数组的查找 有序数组的查找 无序链的查找 有序链的查找 9.字典(Dictionary)及散列(Hash)… Continue Reading 数据结构与抽象学习记录汇总

《幸福的方法》一书的作者是哈佛大学风靡一时的积极心理学(Positive Psychology)任课教师Tal Ben-Shahar博士,这本书起源于他青少年对幸福的探索。他在青年时即取得了辉煌的成绩,16岁时即夺得了以色列全国壁球联赛的冠军,夺冠时无数人为他欢呼雀跃,但人群散去后,当他独自一人时,失落和空虚再次的占领了他的内心。夺冠也不能带来持久的幸福,那什么能够给自己带来幸福呢?这样的疑问促使着作者学习了心理学,通过对积极心理学的研究,作者得到了一些行之有效的能给人带来幸福的方法。 此书的大部分内容在积极心理学这门课中都有介绍到,我大一时通过老师的推荐,在网易公开课学习了这门课程,当时即收获颇丰,解决了好多我在高中时期就有的疑问,也在之后碰到问题时为我提供了有益的建议。这次再读此书相当于是对当年的学习做一个回顾,希望在之后的生活中这些行之有效的方法还能持续的给我带来幸福。 转变意识形态,从幸福到更幸福 作者提到许多人都会问自己“我幸福吗?”这种问题,然而这种问题很难有一个确切的答案,无法简单的衡量,实际意义不大。”我是否幸福”这个问题本身就暗示着对幸福的两极看法:要么幸福,要么不幸福。在这种理解当中,幸福成为一个终点,一旦达到,我们对幸福的最求就结束了。然而事实上是我们永远可以更幸福。与其问自己是否幸福这种问题,不如去探索一个更有意义的问题,“怎样才能更幸福?”这个问题更加契合幸福的实质,还表明幸福是一个需要长期最求、永不间断的过程,而不是一个可以终结的句点。与其浪费力气苦思冥想自己到底有多幸福,不如认真的体会和挖掘幸福这一无穷无尽的宝藏,同时去争取得到更多。改变自己的思维定式,追求“让自己更幸福”。 识别自己的人生模式 作者根据现在和未来的获益情况把人生模式分为四种类型: 感悟幸福型。这种类型的人不但能够享受当下所做的事,还能够通过目前的行为,创造令人满意的未来。 忙碌奔波型。活在未来,这种人认为此刻的一切努力都是为了实现未来的目标,痛苦的过程是获得未来幸福的必由之路。 享乐主义型。寻找欢乐,逃避痛苦,享受当下的快乐,却为未来埋下了痛苦。 虚无主义型。这种类型的人对生命丧失了希望,既不享受当下,也对未来没有任何期望。 幸福的定义 作者认为,幸福应该是“快乐与意义的结合”。真正快乐的人,能够在自己觉得有意义的生活方式里享受它的点点滴滴,这种解释不仅限于生命的某些时刻,而是人生的全过程。即使有时经历痛苦,人在总体上任然可以是幸福的。 幸福才是人生的终极财富 人和事业一样,也有利润和亏损。但不同的是,衡量人生成就的标准既不是金钱,也不是名誉、声望或权利、衡量人生成就的标准应该是幸福。 金钱和声望和在幸福面前并没有固定的价值,但为什么任有许多人对它们趋之若鹜呢?这是因为有些人认为它们可以带来幸福。事实上,金钱和声望本身是没有价值的,如果无法带来任何幸福,没有人会去追求它们。好比在商业中,资产只有换算成钱才有价值。同样,声望和金钱都只是实现幸福的手段。 设定幸福目标 从整体上而言,有目标的人的成功概率要比没有目标的人大的多。具有挑战性的明确目标(即设定了时限和具体的成果)通常会带来更好的表现。设定目标就是用语言给自己一种承诺,而承诺本身会给我们带来更好的未来。 目标的作用是为了帮助我们解放自我,这样我们才能享受眼前的一切。 目标是为了能让我们享受眼前,目标是意义,不是结局。 目标是获得幸福生活的必需品,但它并不是全部。我们一定要明白,除了目标本身是有意义的之外,它在旅途中带给我们快乐也是不可缺少的。 对于追求幸福的人来说,我们的建议是,去追求包括成长、人际关系和对社会有贡献的目标。 书中练习: 1.养成习惯,我们的习惯造就了我们。 微小的进步,好过野心勃勃却遭遇的失败……不要着急,成功自会像滚雪球一样越滚越大。 托尼·施瓦茨 一旦确定了新习惯的内容,先把它们列入你的计划,然后开始行动,刚开始可能并不容易,但通常30天之内,一个新的习惯就可以被固定下来,变得像刷牙一样的自然。 2.表达感恩:每天记录下5件值得感恩的事 当感恩成为一种习惯,我们会更加珍惜生活中美好的时刻,而不会把它们当成理所当然。 3.四个象限的特别日志 通过写日志的形式记录自己的生活感悟,当时的行为及想法,写的时候不要一直任何的念头和想法,越是勇敢的表达自己,越能够从中受益。 4.冥想幸福 有规律的冥想可以为生活带来深刻的改变。本人对此有深刻的体会,之前有看过一个心理学的试验,说通过冥想可以提高投篮命中率,自己没事的时候就深呼吸想象自己在练习投篮,通过这种训练,即使隔着很长一段时间没打球,再次打球的时候投篮命中率还是很不错。 5.人生地图 每天花一点时间记录自己当天的生活,它可以帮助我们找到属于自己的幸福模式。给每个记录的活动打上对意义和快乐这两个指标的相应分数,分数可以是10分制的或其他自己喜欢的等级之类的。 记录的形式为: 活动名称 意义 快乐 所花时间 xxxx活动 打分 打分 x小时 通过每天的反馈,适当的增加打分高的活动时长,减少打分少的活动时长,让自己变得更加幸福。 6.诚实的镜子 在一张表格中写下对你而言最有意义和快乐的事情,表格中可以包括家庭聚会、运动、听音乐等等。在表格一边写下自己在每件事情上所花费的时间。要时常的问自己是否为了自己想要的生活而付出行动,是否在那些我们认为有价值的事情上花费了足够多的时间。 7.设定自我和谐目标 自问一下,哪些是你真正想要做的事,如人际关系或职业规划等等。在每个条目下注明一下内容:… Continue Reading 幸福的方法读书记录

下午参考将Hadoop 2.6.0源码导入到Eclipse这篇博文来构建Hadoop源代码阅读环境的时候遇到了2个问题 1.安装Maven的时候再使用mvn -v命令时提示ERROR: JAVA_HOME is set to an invalid directory. 2.除了原文所提到的3个可能遇到的错误之外,还碰到了Description Resource Path Location Type Access restriction: The constructor LoadLibraryAction(String) is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\rt.jar的错误 对于问题1,在环境变量的JAVA_HOME中修改为本机的Java安装路径。 对于问题2,右键对应出现该错误的项目->Properties->Java Build path->Libraries->删除JRE System Library,然后重新add JRE System Library即解决问题 参考博文: Description Resource Path Location Type Access restriction: The… Continue Reading eclipse中导入hadoop源代码出现的问题及解决方法

目的:学会如何使用Proxmox VE4.4创建一个小的计算机云。 1 前言 在这个配置中,我将创建拥有两个机器的小集群,Proxmox master(主机名 我写的是:server1.example.com,ip地址XXXXXX)和一个slave(主机名 我写的是:server2.example.com ,ip地址 XXXXXX)。 2 在server1.example.com(Master)上安装Proxmox VE 从https://www.proxmox.com/en/downloads网站下载最新的Proxmox VE的ISO镜像导入VM: 开启虚拟机进行安装: 接受Proxmox的证书许可(GPL) 选择你想安装Proxmox的硬盘。在这里需要注意的是被选择的硬盘上所有已经存在的分区和数据都将会丢失! 选择你的国家,时区,和键盘布局: 输入一个密码(这是一个可以使你登陆shell和Proxmox Web管理界面的root密码)和你的Email地址: 现在我们就进入到了网络配置的阶段。输入主机名(例如server1.example.com),IP地址(例如192.168.0.100),子 网掩码(例如255.255.255.0),网关(例如192.168.0.1),和域名服务器(例如145.253.2.75): 然后,Proxmox就会被安装到计算机上了。 最后重启系统: 在server1主机重启过后,你就可以在浏览器中输入并打开http://192.168.0.100/ 然后,你就会看到Proxmox的登陆框,输入root用户名和你在安装Proxmox时候创建的密码: 下面就是Proxmox控制面板的界面: 3 通过添加一个Slave(server2.example.com)创建一个集群 首先在server2.example.com上也安装Proxmox,安装过程和在server1上类似.当你进入网络设置部分时,设置主机名为 server2.example.com,并且输入一个和master主机不同的IP地址(例如192.168.0.101) : 安装并重启系统以后,通过终端工具登陆server1和server2。 登录到server1服务器并创建新的集群: 输入以下命令: pvecm create mynode 结果: Corosync Cluster Engine Authentication key generator. Gathering 1024 bits for… Continue Reading Proxmox VE虚拟化云计算平台安装配置

文档规定:以红色加粗字体表示命令,绿色加粗字体表示文档配置内容 1.所需软件 基础软件 VMware® Workstation 12 Pro CentOS-6.5-x86_64-bin-DVD1.iso SecureCRT 7.3(可用XShell,putty等Shell软件替代) 本教程假设读者已安装以上三个软件,在上面的基础上进行分布式开发环境的配置,如若不懂得如何安装上面的软件,请自行百度。 安装好的master节点的设备配置 分布式平台所需软件 从对应官网上下载Hadoop+Zookeeper+HBase完全分布式开发平台所需要的软件包 jdk-8u101-linux-x64.tar.gz hadoop-2.6.4.tar.gz eclipse-jee-neon-2-linux-gtk-x86_64.tar.gz hadoop-eclipse-plugin-2.6.4.jar zookeeper-3.4.9.tar.gz hbase-1.2.4-bin.tar.gz 2.配置基础集群 本部分包括: 2.1 SecureCRT的使用 2.2 jdk的配置 2.3集群的连接 2.4 SSH互信的配置 在VMware Workstation中新建虚拟机, 将虚拟机命名为hadoop待用(建议设置密码的时候尽量简单,因为密码经常要输入,太长了输入很烦,具体步骤自行百度)。 已经安装好的CentOS 6.5的系统如下 输入自己的密码后可进入CentOS系统 2.1 SecureCRT的使用 进入系统后右键点击进入Open in Terminal进入终端, 输入 ifconfig 再按回车键查看CentOS的ip地址 得到本机的ip为 192.168.60.147 使用SecureCRT软件连接到CentOS 打开软件点击File目录下的Quick Connect 输入CentOS的ip地址和用户名,点击Connect 输入password,点击Save… Continue Reading Step by step Hadoop-2.6.4 + Zookeeper-3.4.9 + Hbase-1.2.4完全分布式开发环境配置

文档规定:以红色加粗字体表示命令,绿色加粗字体表示文档配置内容 su 按照提示输入密码 进入root权限,使用 yum –y install ftp vsftpd 命令下载ftp及vsftpd软件 下载完成 使用 mkdir /ftp 命令新建/ftp的文件夹 再使用 mkdir /ftp/open 命令新建公开目录open 在open文件夹下新建open.txt文件并将opentest写进其中 echo opentest > /ftp/open/open.txt 再在/tmp目录下新建filetest1.txt文件并将filetest写入其中 echo filetest > /tmp/filetest1.txt 使用touch命令在/ftp/open目录下创建 anontext.txt文件 使用rpm命令查找包含了vsftpd的配置文件 rpm –qc vsftpd 切换到/etc/vsftpd目录 将原用的配置文件备份为vsftpd.conf.origion 创建密码明文文件 cd /etc/vsftpd cp vsftpd.conf vsftpd.conf.origion vi /etc/vsftpd/vftpuser.txt 按i键进行编辑,单行写入用户名,双行写入密码 user1 123 user2 123… Continue Reading Step by Step 在CentOS 7环境下配置FTP服务器