学习笔记:setlocale

#include <locale.h> void show_current_locale_settting(){ char* name = setlocale(LC_ALL,NULL) ; struct lconv * lc = localeconv(); std::cout << "当前的locale设置是: " << name << std::endl; std::cout << " 数值的千位符是:" << localeconv()->thousands_sep << std::endl; std::cout << " 货币符号是:" << localeconv()->currency_symbol << std::endl; std::cout << std::endl; } int main() { std::cout << "程序启动后: " << std::endl; show_current_locale_settting(); std::cout << "修改货币类别相关的参数: " << std::endl; setlocale (LC_MONETARY,""); show_current_locale_settting(); std::cout << "修改全部类别的参数: " << std::endl; setlocale (LC_ALL,"

刷机简单教程,双清及错误解决细节

这里总结下 卡刷的细节及常见错误 通常 正常情况下步骤: 下载符合机型的ROM,将其移到手机SD卡,或者内部存储(最好放在SD卡) 刷入recovery.img(也要匹配机型),可以用移动叔叔工具箱刷入,这款APP支持少量在线匹配recovery 如果原本系统有高级模式可以直接重启至recovery模式,没有的话可以同时按住音量+和开机键(有的机型复杂些,还要加上home键) 有时死活进不去,可以试试将手机连接电源或电脑,再按组合键 有的机型不太容易进入recovery模式,也可以借助软件进去。 4.进入recovery后就是所谓的“双清”了,这步很重要,很多机友初次刷机都忘了这步,容易引起各种问题 在网上SOLO下,这里有详细双清及其他项的解释 -mount /system:挂载system文件夹(基本用不到) -mount /data:挂载data文件夹(基本用不到) -unmount /cache:取消cache文件夹挂载(基本用不到) -unmount /sdcard:取消内存卡挂载(基本用不到) -mount /sd-ext:挂载内存卡Ext分区(基本用不到) -format boot:格式化boot(刷机前最好执行一下) -format system:格式化system(刷机前最好执行一下) -format data:格式化data(刷机前最好执行一下) -format cache:格式化cache(刷机前最好执行一下) -format sdcard:格式化内储卡(执行此项你会后悔的) -format sd-ext:格式化内存卡Ext分区(执行此项你会后悔的) -mount USB storage:开启Recovery模式下的USB大容量存储功能(也就是说可以在Recovery下对内存卡进行读写操作) 由于recovery的汉化和二次制作,进去的界面都不太一样,但是只是包装了下,这些选项都有的 5 . 最后就是刷入ROM了,install进去之后,选择你的刷机包,等待提示成功后重启进入系统 完整的 双wipe流程: 进入Recovery,执行Wipe Data/Factory Rest 进入Advance目录,执行Wipe Dalvik 返回,进入Mounts And Storage,执行Format System,执行了这一步会解决很多问题,很多人漏掉这一步!(不要format sdcard 格式化SD卡自己的东西就全没了)返回上一级目录,选择Install zip from sdcard,选择choose zip fromsdcard找到你刚才拷贝在内存卡的ROM。 建议刷完再执行3、4的步骤。如果你安装程序之后会出现一些你所不能理解的情况,可以在所有的程序都安装完毕之后,再进行一次Wipe Cache Partition和Wipe Dalvik,如此经常能解决一些莫名其妙的问题。 重启手机。 常见问题: 1. 有时在刷机过程中,出现了卡死的情况,有的机友直接掰电池,容易出现这种情况: 无法挂载cache,data,system分区或者无法写入/system 这种情况必须格式化/system分区,然后自行把各个分区挂载上去,重新进入recovery模式 2.刷完重启后第一次进入系统时间是比较长的,耐心等待

详解MVC,MVP,MVVM

一:mvc mvc结构: 视图(View):用户界面。 控制器(Controller):业务逻辑 模型(Model):数据保存 mvc各部分的通信方式 mvc互动模式 通过 View 接受指令,传递给 Controller。 另一种是直接通过controller接受指令。 mvc的历史 MVC 的概念最早出现在二十世纪八十年代的 施乐帕克 实验室中(对,就是那个发明图形用户界面和鼠标的实验室),当时施乐帕克为 Smalltalk 发明了这种软件设计模式。 controller层的臃肿问题 于 View 来说,你如果抽象得好,那么一个 App 的动画效果可以很方便地移植到别的 App 上。 对于 Model 来说,它其实是用来存储业务的数据的,如果做得好,它也可以方便地复用。 如果我们能够意识到 Controller 里面的代码不便于复用,我们就能知道什么代码应该写在 Controller 里面了,那就是那些不能复用的代码。 一个解决的思路 Controller 里面就只应该存放这些不能复用的代码,这些代码 在初始化时,构造相应的 View 和 Model。 监听 Model 层的事件,将 Model 层的数据传递到 View 层。 监听 View 层的事件,并且将 View 层的事件转发到 Model 层。 Controller 只有以上的这些代码,那么它的逻辑将非常简单,而且也会非常短。 controller进一步的解决方案## 但是,我们却很难做到这一点,因为还是有很多逻辑我们不知道写在哪里,于是就都写到了 Controller 中了,那我们接下来就看看其它逻辑应该写在哪里。 将 UITableView 的 Data Source 分离到另外一个类中。 将数据获取和转换的逻辑分别到另外一个类中。 将拼装控件的逻辑,分离到另外一个类中。 具体包括一下几种解决方案: 将网络请求抽象到单独的类中

最新不安装百度云管家就可以下载网盘资源的方法及各种浏览器修改JavaScript开关方法

自从百度云越来越没节操的限制非VIP下载速度时,我就不想装百度云管家了,但是众多比较大的资源都需要在网盘中下载怎么办 除了下载破解版的百度云客户端,还可以不用任何工具就可以下载大文件资源了 只需要把http改为https,就OK了,百试不爽(我用的是搜狗浏览器) 然后点击下载就不会提示需要安装百度云客户端了,可以直接用第三方下载器进行下载。 当然也有可能网页自动回弹到pc版,这时可以禁止或者管理JavaScript脚本就可以了,下面有各种浏览器设置JavaScript的方法 大概是因为http时明文传输,而https是加密传输,反正现在用的 之前试过先保存到自己网盘,然后把/s/中s改为wab,然而这种方法并不是都有效的,现在基本都会自动回弹到PC版,也需要修改JavaScript IE浏览器开启关闭JavaScript方法: 在IE界面菜单栏中“工具”中选择“Internet选项”–“安全”选项卡–选择“Internet”(蓝色的小地球)–“自定义级别”–找到“脚本”下的“Java小程序脚本”中进行启用。如下图所示,设置完成后,重新打开浏览器设置即可生效。 360浏览器开启Ja关闭vaScript方法: 在360界面菜单栏的“工具”中选择“360安全浏览器选项”–“网页设置”选项–在网页设置选项中取消“不支持Java小程序”。如下图所示,设置完成后,重新打开浏览器设置即可生效。 腾讯TT浏览器开启关闭JavaScript方法: 打开TT浏览器,点击右上方的“菜单” - 选择“工具” - 选择“TT选项”,在打开的设置界面中选择“智能屏蔽”,在智能屏蔽设置页面中将“禁止运行Java程序”取消,点击保存,重新启动浏览器设置即可生效。 搜狗浏览器开启关闭JavaScript方法: 目前,搜狗开启JavaScript方法继承于IE浏览器,IE浏览器开启JavaScript方法 火狐浏览器开启JavaScript方法: 打开火狐浏览器界面,在菜单栏中选择“工具”–“选项”–“内容”中可见到“启用JavaScript”的选项,重新启动浏览器即可。 Opera浏览器开启关闭JavaScript方法: 打开Opera浏览器,在菜单栏中选择“工具”–“首选项”–“高级”选项卡–“内容”中的“允许使用JavaScript”可以设置,重新启动浏览器即可。 Safari浏览器开启Ja关闭vaScript方法: 以Beta4英文版为准,在“Preferences”–“Security”选项卡中的“Enable JavaScript”,勾选上则是打开,反之是禁用,重新启动浏览器即可。 谷歌浏览器开启关闭JavaScript方法: 打开谷歌浏览器,点击右上方扳手样式的图片 - 选择“选项” - 选择“高级选项” - 选项“内容设置” - 选择“JavaScript” - 选择“运行所有网站运行JavaScript(推荐)”,设置完成重新打开浏览器即可。 世界之窗浏览器开启关闭JavaScript方法: 打开世界之窗浏览器,在上方菜单栏中点击“工具” - 选择“选项” - 在打开的设置页面选择“页面设置” - 页面内容中选择将“不执行Java小程序”取消,即可完成设置,重新启动浏览器即可。 Avant浏览器开启关闭JavaScript方法: 打开Avant浏览器,在菜单栏点击右上方选择“工具” - 将“禁止运行Java小程序”前对勾取消。 打开Avant浏览器,在菜单栏点击右上方选择“工具” - 选择“Avant Browser选项” - 选择“浏览选项” - 将“禁止运行Java小程序”前对勾取消即可完成设置,重新启动浏览器即可。

git clone从远程主机克隆一个版本库

远程操作的第一步,通常是从远程主机克隆一个版本库,这时就要用到git clone命令。 $ git clone <版本库的网址> 比如,克隆jQuery的版本库。 $ git clone https://github.com/jquery/jquery.git 该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。 $ git clone <版本库的网址> <本地目录名> git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。 $ git clone http[s]://example.com/path/to/repo.git/ $ git clone ssh://example.com/path/to/repo.git/ $ git clone git://example.com/path/to/repo.git/ $ git clone /opt/git/project.git $ git clone file:///opt/git/project.git $ git clone ftp[s]://example.com/path/to/repo.git/ $ git clone rsync://example.com/path/to/repo.git/ SSH协议还有另一种写法。 $ git clone [user@]example.com:path/to/repo.git/ 通常来说,Git协议下载速度最快,SSH协议用于需要用户认证的场合。各种协议优劣的详细讨论请参考官方文档。

Beego走起(二) 路由的简单设置

Beego走起(二) 路由的简单设置 本次说一下在设置路由时可以使用的笔记 1. 路由器的设置 代码如下: webns := beego.NewNamespace("/web", beego.NSRouter("/login", &logincontrollers.LoginWebController{}, "get:Login"), ) beego.AddNamespace(webns) //beego.Router("/web/login", &logincontrollers.LoginWebController{}, "get:Login") 大家可以看到,两个路由器设置,功能是一样的,但是上面的那个多的是namespace(这个应该都知道!),并且里面的函数也不一样。使用http://127.0.0.1:8080/web/login 就能打开此链接 2. 正则路由 这个我也是不懂,就举两个简单的,可行的例子,其它的请上beego查看 beego.Router("/web/login/:id", &logincontrollers.LoginWebController{}, "get:Login") beego.Router("/web/login/?:id", &logincontrollers.LoginWebController{}, "get:Login") 路由1: http://127.0.0.1:8080/web/login/123 可以访问 http://127.0.0.1:8080/web/login 不能访问 路由2: http://127.0.0.1:8080/web/login/123 可以访问 http://127.0.0.1:8080/web/login 可以访问 像我一样设置这两个路由,路由1是白设置的,因为路由2是兼容路由1的。 我们可以beego.Controller的Ctx.Input.Param(“:id”) 获取值 3. url 的其它值获取 这里指的是如: http://127.0.0.1:8080/web/login?abc=10abca&age=2000 怎么读取“?”后的数据呢? var abc string if err := l.Ctx.Input.Bind(&abc, "abc"); err != nil { log.Println("get abc error:", err) } else { log.Println("get [abc] = "

Mac 终端命令详解

转自豆瓣 花房一号店 https://www.douban.com/note/75797151/ 点击打开链接 OSX 的文件系统 OSX 采用的Unix文件系统,所有文件都挂在跟目录 / 下面,所以不在要有Windows 下的盘符概念。 你在桌面上看到的硬盘都挂在 /Volumes 下。 比如接上个叫做 USBHD的移动硬盘,桌面上会显示出一个硬盘图标,它实际在哪里呢? 在终端里执行 ls /Volumes/USBHD, 看看显示出的是不是这个移动硬盘的内容。 根目录位置是 / 核心 Mach_kernel 就在这里, 驱动所在位置 /Systme/Library/Extensions 用户文件夹位置 /User/用户名 桌面的位置 /User/用户名/Desktop 文件通配符为星号 * 注意:在 Unix系统中是区别大小写字符的,A.txt 不等于 a.txt。 根目录标志 / 不是可有可无,cd /System 表示转到跟目录下的System中,而cd System 表示转到当前目录下的 System中 —————————————————————————————————————————————— 如何进入命令行操作模式 再图形界面下,用finder 打开 应用程序 》实用程序》终端 如果连图形界面都进不去了(比如安错了显示驱动),开机时按 F8,用-s参数启动,然后输入命令 mount -uw / 获得权限 为了防止误操作破坏系统,再用户状态下时没有权限操作系统重要文件的,所以先要取得root权限 sudo -s 然后输入密码,输入密码时没有任何回显,连星号都没有,只管输完回车就行了。 —————————————————————————————————————————————— 基本命令 列出文件 ls 参数 目录名 例: 想看看跟目录下有什么, ls / 想看看驱动目录下有什么, ls /System/Library/Extensions 参数 -w 显示中文,-l 详细信息, -a 包括隐藏文件 转换目录 cd 例:想到驱动目录下溜达一圈 cd /System/Library/Extensions 建立新目录 mkdir 目录名 例:在驱动目录下建一个备份目录 backup mkdir /System/Library/Extensions/backup 在桌面上建一个备份目录 backup mkdir /User/用户名/Desktop/backup 拷贝文件 cp 参数 源文件 目标文件 例:想把桌面的Natit.

Intellij idea 快捷键(1)--生成for循环代码块

使用Intellij idea 时,想要快捷生成for循环代码块 itar 生成array for代码块 for (int i = 0; i < array.length; i++) { = array[i]; } itco 生成Collection迭代 for (Iterator<String> iterator = locationUrl.iterator(); iterator.hasNext(); ) { String next = iterator.next(); } iten 生成enumeration遍历 while (enumeration.hasMoreElements()) { Object nextElement = enumeration.nextElement(); } iter 生成增强forxun for (String s : locationUrl) { } itit 生成iterator 迭代 while (iterator.hasNext()) { Object next = iterator.next(); } itli 生成List的遍历 for (int i = 0; i < locationUrl.

s3 versioning 测试用例

为什么80%的码农都做不了架构师?>>> """ Some unit tests for the S3 Versioning. """ import unittest import time from boto.s3.connection import S3Connection from boto.exception import S3ResponseError from boto.s3.deletemarker import DeleteMarker class S3VersionTest (unittest.TestCase): def setUp(self): self.conn = S3Connection() self.bucket_name = 'version-%d' % int(time.time()) self.bucket = self.conn.create_bucket(self.bucket_name) def tearDown(self): for k in self.bucket.list_versions(): self.bucket.delete_key(k.name, version_id=k.version_id) self.bucket.delete() def test_1_versions(self): # check versioning off d = self.bucket.get_versioning_status() self.assertFalse('Versioning' in d) # enable versioning self.bucket.configure_versioning(versioning=True) d = self.

斯坦福课程总结一

1.发送消息给空指针并不会让程序崩溃,但是程序也不会执行任何操作,任何实例变量在没有初始化前,默认是零或者是空,所以如果要往一个是零或者空的实例变量发送消息时要对实例变量进行初始化分配内存,在堆内存中指定实例变量的数据类型和内存地址。 2. 如果在父类中已经对属性的getter和setter方法进行重命名,那么在对应的子类中也要用新的属性getter和setter名称来重写方法。 3.如果同时重写了属性的getter和setter方法,那么要处理@synthesize(在没有对属性的getter和setter方法重写时,@synthesize是默认由xocde自己处理) 4.静态方法一般用于做一些通用性的事情,即只是一个工具方法,例如返回常数。 5.在oc中的m文件中可以创建未在h文件中声明的方法。 6.oc中的类具有向上类型转换(即upcasting)的特性。 7.在.h文件中声明一个外部的类,只是为了获得这个类的实例化对象;而在.m文件中声明是为了获得整个类及其所有的属性和方法。 8.设计一个类时先考虑如何实现公共的API。

[C#]控件大小随窗体改变而改变

这篇文章写的很好,一般我会选择第一种。 我改了一下格式,便于大家复制黏贴,O(∩_∩)O。 第一种: 推荐 在窗体中加上如下代码即可实现,但窗体点击放大按钮时却不能改变控件大小。 private Size beforeResizeSize = Size.Empty; protected override void OnResizeBegin(EventArgs e) { base.OnResizeBegin(e); beforeResizeSize =this.Size; } protected override void OnResizeEnd(EventArgs e) { base.OnResizeEnd(e); //窗口resize之后的大小 Size endResizeSize =this.Size; //获得变化比例 float percentWidth = (float)endResizeSize.Width / beforeResizeSize.Width; float percentHeight = (float)endResizeSize.Height / beforeResizeSize.Height; foreach (System.Windows.Forms.Control control in this.Controls) { if (control is DataGridView) continue; //按比例改变控件大小 control.Width = (int)(control.Width * percentWidth); control.Height = (int)(control.Height * percentHeight); //为了不使控件之间覆盖 位置也要按比例变化 control.Left = (int)(control.

numpy.std() 计算矩阵标准差

计算矩阵标准差 >>> a = np.array([[1, 2], [3, 4]]) >>> np.std(a) # 计算全局标准差 1.1180339887498949 >>> np.std(a, axis=0) # axis=0计算每一列的标准差 array([ 1., 1.]) >>> np.std(a, axis=1) # 计算每一行的标准差 array([ 0.5, 0.5]) 官方手册:http://docs.scipy.org/doc/numpy/reference/generated/numpy.std.html

GraphLab Create API 中文文档 - 数据工程 - graphlab.SFrame

class graphlab.SFrame(data=list(), format='auto') 一个列数可变的表格型数据框架对象,可以适应大数据。SFrame中的数据在GraphLabServer 中以列优先的方式存储,并且存储在持久性存储媒介(例如磁盘)中,避免了被内存大小所限制。SFrame中的每一列都是一个大小不可变的SArray,但是SFrame可以通过增加或者减少列来轻松地改变。一个SFrame基本上表现为SArray的一个有序dict。 目前,我们支持从下列方式建立SFrame。 csv 文件 (逗号分隔值) sframe存档路径 (一个已经保存了SFrame的路径。) 普通文本文件(解析CSV选项,参见read_csv()) 一个python词典类 pandas.DataFrame JSON Apache Avro PySpark RDD 以及下列数据来源 你的本地文件系统 GraphLab Server文件系统 HDFS Amazon S3 HTTP(S). 下面仅给出了基本的示例。更多的信息和示例,请参考用户手册,API Translator,How-Tos, 和 数据科学Gallery。 参数列表: data :array | pandas.DataFrame | string | dict, optional 解释行为取决于参数的格式。如果data参数是一个array或者Pandas DataFrame,其内容将被存储在SFrame中。如果data参数是一个string,它会被解释为一个文件。文件可以从本地文件系统或者urls中读取。(local://,hdfs://, s3://,http://). format :string, 可选参数 数据的格式。默认情况下,‘auto’会自动推测输入数据的格式。推测规则很简单:如果数据是一个array或者一个dataframe,这个参数会分别被指定为‘array’和‘dataframe’。如果data参数是一个string,它会被作为一个文件来解释,文件的拓展名被用来推测文件类型。下面是各选项的明细: “auto” “array” “dict” “sarray” “dataframe” “csv” “tsv” “sframe”. 参考 read_csv 从csv文件中建立SFrame。最好是文本和CSV格式,因为有很多选项来控制解析器。 save 保存SFrame。 注意 在Linux中,从HDFS读取信息时,我们需要推测你的java安装路径。我们默认使用环境变量JAVA_HOME指向的地址。如果未被设定,我们会检测一些常见的安装路径。你可以使用两个环境变量来覆盖这个操作。GRAPHLAB_JAVA_HOME允许你指定一个特定的安装路径并且覆盖掉JAVA_HOME的值。 GRAPHLAB_LIBJVM_DIRECTORY覆盖掉所有值,并需要你希望使用的libjvm的精确路径,这样文件才能被找到。只有当你希望使用一个非标准的JVM时使用它。 示例 >>> import graphlab >>> from graphlabimport SFrame 构造

NUMA node

现在的机器上都是有多个CPU和多个内存块的。以前我们都是将内存块看成是一大块内存,所有CPU到这个共享内存的访问消息是一样的。这就是之前普遍使用的SMP模型。但是随着处理器的增加,共享内存可能会导致内存访问冲突越来越厉害,且如果内存访问达到瓶颈的时候,性能就不能随之增加。NUMA(Non-Uniform Memory Access)就是这样的环境下引入的一个模型。比如一台机器是有2个处理器,有4个内存块。我们将1个处理器和两个内存块合起来,称为一个NUMA node,这样这个机器就会有两个NUMA node。在物理分布上,NUMA node的处理器和内存块的物理距离更小,因此访问也更快。比如这台机器会分左右两个处理器(cpu1, cpu2),在每个处理器两边放两个内存块(memory1.1, memory1.2, memory2.1,memory2.2),这样NUMA node1的cpu1访问memory1.1和memory1.2就比访问memory2.1和memory2.2更快。所以使用NUMA的模式如果能尽量保证本node内的CPU只访问本node内的内存块,那这样的效率就是最高的。

Maven入门(含实例教程)

原文地址:http://blog.csdn.net/u013142781/article/details/50316383 Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包。接下来小宝鸽,将从下面几个方向介绍maven: (1)Maven简单介绍 (2)Maven安装与配置 (3)Maven携手eclipse构建项目 (4)Maven的常用命令 (5)Maven实例 猿友门抓紧了,马上起飞了: (1)Maven的简单介绍 Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包。但是对于我们程序员来说,我们最关心的是它的项目构建功能。所以这里我们介绍的就是怎样用 maven 来满足我们项目的日常需要。Maven 使用惯例优于配置的原则 。它要求在没有定制之前,所有的项目都有如下的结构: 一个 maven 项目在默认情况下会产生 JAR 文件,另外 ,编译后 的 classes 会放在 basedir/target/classes 下面, JAR 文件会放在 ${basedir}/target 下面。这时有人会说了 , Ant 就没有那么多要求 ,它允许你可以自由的定义项目的结构。在这里不想引起口水战哈, 我个人觉得 maven 的这些默认定义很方便使用。好了 ,接下来我们来安装 maven 。 (2)Maven安装与配置 2.1、下载maven安装包:apache-maven-3.2.1 http://download.csdn.net/detail/u013142781/9355367,解压即可使用。 2.2、maven环境变量配置,配置方式跟jdk有些类似。新建环境变量MAVEN_HOME(值为maven的根目录)、然后在PATH环境变量里加入%MAVEN_HOME%\bin;即可。 2.3、设置setting.xml文件,配置本地仓库。apache-maven-3.2.1\conf下有个setting.xml文件,打开,localRepository的值设置成你本地仓库的路径。(博主在apache-maven-3.2.1根目录下创建了个repository文件夹作为本地仓库)。如下图 2.4、maven配置到eclipse上,下载插件eclipse-maven3-plugin http://download.csdn.net/detail/u013142781/9355661, 解压后把对应的features和plugins这两个文件夹的内容复制到eclipse相同文件夹里面即可,然后重启eclipse,当你打开Window→ Preferences…的时候,你应该能够在一个选项列表中看到一个Maven选项: 然后,Windows–>Prefrences–>Installations–>Add。installation name选maven的根目录,然后一直按确定就OK啦。 至此 maven安装配置完成!如果需要了解jdk+eclipse+svn+maven+mysql+tomcat7.0的环境搭建,可阅读小宝鸽的博客http://blog.csdn.net/u013142781/article/details/50300233,非常详细而且还提供安装包哦。 (3)Maven携手eclipse构建项目 具体的创建方式可以查看我好友的一篇博客:Spring+Mybatis+SpringMVC+Maven+MySql搭建实例,http://blog.csdn.net/evankaka/article/details/48785513,非常非常详细。当然小宝鸽以后也会写一篇“Spring+Mybatis+SpringMVC+Maven+MySql搭建实例”,希望多多关注支持啊。 (4)Maven的常用命令 Maven常用命令: 1. 创建Maven的普通java项目: mvn archetype:create -DgroupId=packageName -DartifactId=projectName 2. 创建Maven的Web项目: mvn archetype:create -DgroupId=packageName -DartifactId=webappName-DarchetypeArtifactId=maven-archetype-webapp 3. 编译源代码: mvn compile 4.

HDU 1007 Quoit Design(分治法求最近点对问题)

本题的大致题意,求出最近两个点的距离的一半。 首先先看数据范围,如果暴力的话肯定会超时的,所以要想一个优化点的方法,就是对其进行分治。 大致思路:先把一个大区间分为两个小区间,然后分别对两个区间进行排序,筛选。然后再把筛选后的点放入一个新的数组里面进行求值。然后不断的更新最小值。具体看代码吧,代码中我也给出了大量的注释。 AC代码: #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; #define N 100005 struct node { double x,y; } point[N]; int point1[N];//存储符合标准的点的坐标 bool cmpx(node a,node b)//按x坐标从小到大排序 { return a.x<b.x; } bool cmpy(int a,int b)//按y坐标从小到大进行排序 { return point[a].y<point[b].y; } double dist(node a,node b)//求出两点间的距离 { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } double near(int l,int r)//利用分治法找出最近的两个点的距离 { if(l>=r) return 1e10; int mid=(l+r)/2;)); int n=0; double distan=min(near(l,mid),near(mid+1,r));//利用二分法分为两个区间 for(int i=mid; i>=l; --i)//把前一半符合条件的点的位置存入数组q中 { if(point[mid].x-point[i].x<distan) { point1[n++]=i; } else break; } for(int i=mid+1; i<=r; ++i)//把后一半符合条件的点的位置存入数组q中 { if(point[i].

numpy.linalg.eig() 计算矩阵特征向量

在PCA中有遇到,在这里记录一下 计算矩阵的特征值个特征向量,下面给出几个示例代码: 在使用前需要单独import一下 >>> from numpy import linalg as LA >>> w, v = LA.eig(np.diag((1, 2, 3))) >>> w; v array([ 1., 2., 3.]) array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]]) >>> w, v = LA.eig(np.array([[1, -1], [1, 1]])) >>> w; v array([ 1. + 1.j, 1. - 1.j]) array([[ 0.70710678+0.j , 0.70710678+0.j ], [ 0.00000000-0.70710678j, 0.00000000+0.70710678j]]) >>> a = np.array([[1, 1j], [-1j, 1]]) >>> w, v = LA.

几款自带编码器的直流电机

不少小伙伴做两轮自平衡车或者机器人或者各种比赛时,经常需要用到直流电机带编码器,有的自己可以做外置的编码器,但是否有自带编码器或码盘的直流电机?答案是肯定的,这里就推荐几款带编码器电机: Aslong瑞士maxon电机瑞士ESCAP电机 德国Faulhaber电机 日本Namiki电机 日本TSUKASA驰卡沙 注意: 减速箱可以实现编码器脉冲倍频(倍数为减速比i),因为编码盘多装在下面的直流电机上,所以经过减速箱后的输出轴转一圈,下面的直流电机会旋转i(减速比)圈,输出 编码器线数*i 个脉冲,即编码器分辨率提高i倍,i一般可以达到数十。 编码器多为AB相输出增量编码器,正转(左图)和反转(右图)波形如下: 由图可知,通过AB相相位关系可以判断正反转,A超前B 90度为正转,B超前A 90度为反转,单片机脉冲捕获仅捕获一相脉冲的上升沿为1倍频,捕获一相的上升沿和下降沿为2倍频,捕获AB相的上升沿和下降沿为4倍频,即编码器分辨率又可以提高4倍。 各种电机的图片如下: ASLONG JGA25,一般为334线码盘,加上减速箱可以实现编码器精度成倍(减速比)提高,多种转速和扭矩可选,貌似做两轮自平衡车挺合适: 德国冯哈勃 Faulhaber2342L012空心杯减速电机,功率和扭矩很给力,做机器人比赛(如武术擂台赛)很合适,别以为下面码盘只有12个齿精度就不高,如其中一种减速比为64:1,则减速后每圈的分辨率可达到12*64=768 CPR: 瑞士maxon Re35电机,500线编码器,空心杯直流行星减速电机: 瑞士ESCAP 16空心杯直流减速电机 512线编码器?是迷宫鼠比赛推荐用电机: 日本Namiki电机 如果减速比为80:1,编码器每圈输出2*80个脉冲: 日本TSUKASA 驰卡沙:

ntpd使用

ntpd就是ntp daemon。是一个系统的后台进程(system daemon),用来同步本地系统时钟和远程NTP时间服务器的时间,或者其他参考时间源。 该程序实现了全部的NTP4协议,并对版本3,2,1,进行了兼容。 的定义该程序可以工作在client/server模式,symmetric模式,broadcast模式。 ntpd通常需要一个配置文件/etc/ntp.conf,ntpd后面的选项和命令可以写在该配置文件中。通常,ntpd启动后会读取ntp.conf文件。也可以在ntpd后面接相应指令,让ntpd不考虑该配置文件。 ntpd可以自动发现远程服务器并自动配置。 nptd通常连续工作,隔一段时间调整一次系统时间。也可以在调整完系统时间后自动退出,如果没有收到NTP服务器的回复,将会超时退出。 ntpd选项: -4:仅使用IPv4域名 -6:仅使用IPv6域名 -t key/trustedkey key : 添加一个秘钥到信任秘钥列表,可重复添加 -a/enable auth:对广播/多播客户端需要密码认证(默认) -A/disable auth : 不对广播/多播客户端进行密码认证(不推荐) -b:允许客户端与广播服务器同步 -r broadcastdelay:指定广播或多播服务器到客户端的默认的传播延迟。只有在不能自动计算该延迟时才使用 -c conffile : 指定配置文件(默认配置文件在/etc/ntp.conf) -f drift_file/driftfile drift_file : 指定时差记录文件 -k key_file/keys key_file : 指定密钥文件 -l log_file/logfile log_file : 指定日志文件 -p pid_file/pidfile pid_file : 指定记录ntpd进程ID的文件 -s stats_dir/statsdir stats_dir:指定统计文件 -q : ntpd一旦与服务器同步后即退出,该选项可以替代ntpdate程序。可与-g和-x选项组合使用。注意:该选项禁止校准内核时间。 -m:一旦系统时钟同步后,在nDNS上注册为可用服务器 -g:通常如果系统时间与服务器时间差别太大(默认是1000秒),ntpd则会自动退出,并记录到日志文件。该选项允许不理会该门限。但该命令只能有效一次,如果第一次同步后,客户端的时差依然超过门限,则ntpd会自动退出,并记录在日志文件。该命令可与-q和-x选项组合使用。 -x : 通常,如果客户端时间偏差比一个门限值小(通常为128ms),则时间会慢慢精调(slew),当比该门限大时,时间会立刻调整(step)。该指令将该门限设置成600s。这个门限有利于手动调整时间,但如果要用slew来调整该误差,则需要大概14天,因为UNIX调整时间的速度时0.5s/s。注意:该选项禁止校准内核时间。 -n : 不创建进程 -N:ntpd运行在最高优先级 -M:使用timeBeginPeriod提高调度的优先级到最高(1ms),该选项仅在windows系统有效。 -d : 不进入后台进程,工作在debug模式。允许打印调试信息,可以重复使用。类似于提高调试信息输出量的等级 -D level:指定调试信息输出量的等级

UICollection scrollToItemAtIndexPath: 不工作的问题

今天用UICollection 写了一个图片轮播器,但是 遇到了一个小bug ,记录一下,希望能帮到需要同样问题的小伙伴: 我在sb中View上拖了一个collectionView到上面,设置了DataSource和delegate代理, 在控制器的ViewDidload中用 [self.myCollectionscrollToItemAtIndexPath:indexPathatScrollPosition:UICollectionViewScrollPositionNoneanimated:NO]; 想设置一个起始偏移值,但是我发现,这个方法并不能工作,后来发现 每当在 UICollectionView 显示它的subview 之前调用scrollToItemAtIndexPath:atScrollPosition:Animated 方法,这个方法就不能工作。 所以要解决它,就应该在 viewController 中,在你能确认 CollectionView完全计算出其 subview 布局的地方去调用这个方法。比如在viewDidLayoutSubviews 里调用就没有问题。

火车进站

目描述: 描述给定一个正整数N代表火车数量,0 < N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。知识点栈输出有多组测试用例,每一组第一行输入一个正整数N(0< N<10),第二行包括N个正整数,范围为1到9。输出输出以字典序排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。样例3 1 2 3样例输出1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 分析:给定一个正整数N代表火车数量, 0<N<10 ,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。其实也就是输出所有可能的出栈序列。 样例输入: 3 1 2 3 样例输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 解答: **其实核心就是一个栈,对于第K个数,在第K个数进栈之前,前面的 K-1 个数要么全部出去了,要么都在栈里面,要么部分在栈里面部分出去了。那么可以假想,在第K个数入栈之前,依次从栈里面出去 0个、1个、2个……栈.size()个,然后把第K个入栈,再对于 K+1个同样实施这样的方法——这就是个递归了。 出去了的保存在一个队列里面,没出站的保存在栈里面,最后一辆车处理完了递归结束并输出。** 代码如下: #include<iostream> #include<stack> #include<vector> #include<algorithm> using namespace std; void train_out_orders(vector<int>& train, stack<int> s, vector<int> out, int cur_train, int n, vector<int*> &all_train_orders) { for (int i = s.

Gson用法整理

1 概述 Gson是Google提供的一款json解析工具,用来在Java对象和Json数据之前进行映射。其源代码位于github. 解析需要注意: 1、类里面的属性名必须和json字段里面的key一模一样,或者使用@SerializedName指定别名和json中的名字一模一样。 2、{} 代表一个对象 3、[]代表一个List 4、如果不想些get/set方法,需要吧属性设置为public 2 简单对象转化 Gson gson = new Gson(); //Model -> json, 其中myMode支持一般对象类型,内部可以包含对象嵌套,List对象类型等。 String json = gson.toJson(myModel); //json->Model 1:myMode为简单对象,即内部不包含复杂对象嵌套 SimpleModel myModel = gson.fromJson(json, SimpleModel.class); //json->ComplexModel 2:myMode为嵌套对象,或者List组合对象等 Type type = new TypeToken(List>(){}.getType(); List list = gson.fromJson(json, type); 3 Gson注解和GsonBuilder @Expose 导出标记注解,配合GsonBuilder使用(excludeFieldsWithoutExposeAnnotation此设置就是不使用没有@Expose注解的属性) @Expose (serialize = false, deserialize = false) ,serialize = false, deserialize = false,序列化和反序列化的时候都不包含此字段。默认设置都是为true。 transient申明字段以此来说明序列化和反序列化都不包含这个字段。 @SerializedName(“name”) 指定别名,也就是json中名字为别名name,实际名字是属性中定义的名字。也就是说序列化的时候,这个属性的名字会被替换成name,解析的时候name会被替换成属性名。 @Since(version) 用于维护版本,从某个版本version开始,有这个字段.和setVersion配合使用。 @Until(version) 用于维护版本,到某个版本version为止,没有这个字段。和setVersion配合使用。 GsonBuilder用来自定义输出的json格式,解析说明: excludeFieldsWithoutExposeAnnotation 不导出没有@Expose注解的属性 enableComplexMapKeySerialization 支持key为map的复杂对象形式 setDateFormat(“yyyy-MM-dd HH:mm:ss:SSS”) 时间格式转化为制定格式 setFieldNamingPolicy(policy) 设置字段某些属性为policy,注:此注解对于实体上使用了@SerializedName注解的不会生效.

winpe iso镜像下载(exe转iso获取)

winpe.iso文件获取方法:你可以直接网上下载如果找不到,就去老毛桃下载一个.exe的装机版,安装运行之后选择iso模式.点击生成iso镜像即可.亲测可用5

堆树(最大堆、最小堆)详解

一、堆树的定义 堆树的定义如下: (1)堆树是一颗完全二叉树; (2)堆树中某个节点的值总是不大于或不小于其孩子节点的值; (3)堆树中每个节点的子树都是堆树。 当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆。 当父节点的键值总是小于或等于任何一个子节点的键值时为最小堆。如下图所示,左边为最大堆,右边为最小堆。 二、堆树的操作 以最大堆为例进行讲解,最小堆同理。 原始数据为a[] = {4, 1, 3, 2, 16, 9, 10, 14, 8, 7},采用顺序存储方式,对应的完全二叉树如下图所示: (1)构造最大堆 在构造堆的基本思想就是:首先将每个叶子节点视为一个堆,再将每个叶子节点与其父节点一起构造成一个包含更多节点的对。 所以,在构造堆的时候,首先需要找到最后一个节点的父节点,从这个节点开始构造最大堆;直到该节点前面所有分支节点都处理完毕,这样最大堆就构造完毕了。 假设树的节点个数为n,以1为下标开始编号,直到n结束。对于节点i,其父节点为i/2;左孩子节点为i*2,右孩子节点为i*2+1。最后一个节点的下标为n,其父节点的下标为n/2。 如下图所示,最后一个节点为7,其父节点为16,从16这个节点开始构造最大堆;构造完毕之后,转移到下一个父节点2,直到所有父节点都构造完毕。 C++代码实现: 定义存放堆的结构如下: strcut MaxHeap { Etype *heap; int HeapSize; int MaxSize; }; MaxHeap H; 其中,heap是数据元素存放的空间,下标从1开始存数数据,下标为0的作为工作空间,存储临时数据。HeapSize是数据元素的个数,MaxSize是存放数据元素空间的大小。 初始化堆方法如下: void MaxHeapInit (MaxHeap &H) { for(int i = H.HeapSize/2; i>=1; i--) { H.heap[0] = H.heap[i]; int son = i*2; while(son <= H.HeapSize) { if(son < H.HeapSize && H.

不小心删掉了/bin目录,导致许多命令丢失了

由于误操作,不小心把/bin目录给误删了,结果崩溃了,很多常用的命令都找不到,而公司有没有光盘,其他的服务器和这个服务器又不是同一个版本,公司也没有备份LINUX服务器的文件。 解决办法及步骤: 下载一个版本一样的ISO镜像文件(我们这里是centos5.5),然后装在虚拟机里面。 把虚拟机里面的/bin文件传给服务器上面(前提你的虚拟机要有unzip) 转载于:https://blog.51cto.com/jinbao/1751444

tomcat配置 —— 各个目录的作用

tomcat各目录(文件)作用 • tomcat-7.0.50解压版,主目录一览: 我们可以看到主目录下有bin,conf,lib,logs,temp,webapps,work 7个文件夹,下面对他们分别进行介绍: • bin目录主要是用来存放tomcat的命令,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。 重要: 很多环境变量的设置都在此处,例如可以设置JDK路径、TOMCAT路径 startup 用来启动tomcat shutdown 用来关闭tomcat 修改catalina可以设置tomcat的内存 • conf目录主要是用来存放tomcat的一些配置文件。 重要: server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码 web.xml可以设置tomcat支持的文件类型 context.xml可以用来配置数据源之类的 tomcat-users.xml用来配置管理tomcat的用户与权限 在Catalina目录下可以设置默认加载的项目 • lib目录主要用来存放tomcat运行需要加载的jar包。 例如,像连接数据库的jdbc的包我们可以加入到lib目录中来。 • logs目录用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志。(清空不会对tomcat运行带来影响) 在windows环境中,控制台的输出日志在catalina.xxxx-xx-xx.log文件中 在linux环境中,控制台的输出日志在catalina.out文件中 • temp目录用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响) • webapps目录用来存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序。可以以文件夹、war包、jar包的形式发布应用。 当然,你也可以把应用程序放置在磁盘的任意位置,在配置文件中映射好就行。 • work目录用来存放tomcat在运行时的编译后文件,例如JSP编译后的文件。 清空work目录,然后重启tomcat,可以达到清除缓存的作用。

解决在Windows server 2012R2上无法安装Intel I219-V,I211,I217-V,I218-V网卡驱动的问题

应该是从H97系列开始,主板厂商均开始使用了Intel发布的I217-V/218-V/219-V等一系列的网卡芯片,这些集成网卡在主板厂商的官网上均找不到针对Windows server 2008/2012的驱动,直接通过Windows7的安装方式安装,直接就提示在此机器上没有Intel的网卡,也是醉了,个中原因未知。 当然,哪里有压迫,哪里就有反抗,办法肯定是有的,接下来博主就以刚出来的H170系列集成的I219-V/I211这两款网卡为例,在介绍如何在Windows server2012R2上安装这两款网卡的驱动程序,话不多说,开始: 准备工作: 一台安装H170主板的PC,系统为Windows server2012R2Intel官网下载的名称为PROWinx64的驱动程序 1、解压刚才下载的驱动,解压到任意文件夹,如图: 2、依次进入PRO1000—>Winx64—>NDIS64文件夹,找到名称为e1d64x64的文件 3、使用记事本打开此文件,找到I219-V这一行,复制一下对应的ID: 4、在此文件最上面的Intel.NTamd64.6.3.1这个键下面,找到此ID对应的数据,复制下来,例如本文中是:E1570.6.3.1,如图: 5、在Intel.NTamd64.6.3.1这个键下面,还有一个名叫Intel.NTamd64.6.3的,可以看到,这个键下面的内容和上面那个有一点区别,就是少了E1570.6.3.1,那么我们就把刚才复制的E1570.6.3.1的3行都加到Intel.NTamd64.6.3的最后面,然后保存,关闭此文件。 6、打开命令行,分别执行下面两句命令,然后重启系统: bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS bcdedit -set TESTSIGNING ON 此段代码主要是开启测试模式,在测试模式下才能安装未经过签名的驱动(应为我们之前对驱动配置文件进行了修改)。 7、重启完成后,在设备管理器中找到网卡,分别进入如下菜单: 更新驱动程序—>浏览计算机查找文件—>从计算机的设备驱动列表中选取—->从磁盘安装—->定位到刚才修改的那个e1d64x64文件,就会出现如下的图: 从列表中选择I219-V,点击下一步,就开始安装了,驱动安装完成后,执行如下命令,然后重启计算机: bcdedit -set loadoptions ENABLE_INTEGRITY_CHECKS bcdedit -set TESTSIGNING OFF 此段命令就是开启驱动签名检查。 8、I211驱动的安装方法和I219-V一样,只不过对应的文件不是在NDIS64文件夹,而是在NDIS63文件夹中的e1r63x64文件中。而I217-V和I218-V均和I219-V一个文件内,这里就不一一列举了。 9、希望后续Intel会出官方签名版的驱动吧,不过可能性不大。。。也希望即将到来的Windows server 2016能把这个问题解决了,虽然这个可能性更不大。。。

CentOS中zip压缩和unzip解压缩命令详解

以下命令均在/home目录下操作 cd /home #进入/home目录 1、把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩mydata目录 2、把/home目录下面的mydata.zip解压到mydatabak目录里面 unzip mydata.zip -d mydatabak 3、把/home目录下面的abc文件夹和123.txt压缩成为abc123.zip zip -r abc123.zip abc 123.txt 4、把/home目录下面的wwwroot.zip直接解压到/home目录里面 unzip wwwroot.zip 5、把/home目录下面的abc12.zip、abc23.zip、abc34.zip同时解压到/home目录里面 unzip abc\*.zip 6、查看把/home目录下面的wwwroot.zip里面的内容 unzip -v wwwroot.zip 7、验证/home目录下面的wwwroot.zip是否完整 unzip -t wwwroot.zip 8、把/home目录下面wwwroot.zip里面的所有文件解压到第一级目录 unzip -j wwwroot.zip 系统运维 温馨提醒:qihang01原创内容版权所有,转载请注明出处及原文链接 ===================================================== 主要参数 -c:将解压缩的结果 -l:显示压缩文件内所包含的文件 -p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换 -t:检查压缩文件是否正确 -u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到目录中 -v:执行是时显示详细的信息 -z:仅显示压缩文件的备注文字 -a:对文本文件进行必要的字符转换 -b:不要对文本文件进行字符转换 -C:压缩文件中的文件名称区分大小写 -j:不处理压缩文件中原有的目录路径 -L:将压缩文件中的全部文件名改为小写 -M:将输出结果送到more程序处理 -n:解压缩时不要覆盖原有的文件 -o:不必先询问用户,unzip执行后覆盖原有文件 -P<密码>:使用zip的密码选项 -q:执行时不显示任何信息 -s:将文件名中的空白字符转换为底线字符 -V:保留VMS的文件版本信息 -X:解压缩时同时回存文件原来的UID/GID linux操作系统下怎样解压rar文件 rar格式的文件是在windows操作系统中常见的压缩格式,但是这种格式在linux操作系统中却不能正常解压缩,因为linux默认不支持这种格式,难道我们在linux操作系统中就不能解压这种文件了吗,答案只有一个,能,那么我们怎样在linux操作系统中解压rar文件呢?(以fedora操作系统为例) 方法/步骤 首先解压rar文件需要unrar命令,要使用这种命令我们必须安装rarlinux,我们可以在终端使用yum installrar,如果没有可安装的程序包,我们可以自行下载,上网搜搜就能搜到。 安装rarlinux,安装此程序必须使用root身份才能安装,首先我们要以root身份运行,然后打开下载目录,使用tar命令解压缩rarlinux文件,当然你可以选择解压缩的位置,为了方便,小编就解压在了当前目录。

c#模拟用户登录

最近做比赛,因为网站需要保证登陆的用户是本校的学生,而学校又不可能给我们数据库,所以想到用WebRequest和WebResponse模拟登陆学校教务系统来检测学号和密码来解决,由于之前从没接触过,苦苦查了n多博客教程,看了N多图书馆的c#的书,问了N多大神。。。才勉强解决。。。。。总之往事不堪回首上代码。。。。 static void Main(string[] args) { string loginUri = "http://xxxxxx/loginAction.do"; //校网登陆的用户名 string username = "xxxxxxx"; //登录密码 string password = "xxxx"; //拼接post的数据 string post = "mm=" + password+"&zjh=" + username ; //将字符串以UTF格式编码转换成字节数组 byte[] postData = Encoding.UTF8.GetBytes(post); //存储cookies数据,但是在这里我没用过 CookieContainer cc = new CookieContainer(); var request = (HttpWebRequest)WebRequest.Create(loginUri); request.Proxy = null; request.CookieContainer = cc; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = post.Length; using (Stream s = request.GetRequestStream()) s.Write(postData, 0, post.Length); StreamReader sr = null; //读取服务器响应 using (var response = (HttpWebResponse)request.

C#二进制数组的字符串形式转换为二进制Byte数组

 二进制数组的字符串形式转换为二进制Byte数组 if ((sBinText.Length % 2) != 0) sBinText += " "; bLabelContent = new byte[sBinText.Length / 2]; string sTmp; for (int i = 0; i < bLabelContent.Length; i++) { sTmp = sBinText.Substring(i * 2, 2); bLabelContent[i] = Convert.ToByte(sTmp, 16); }

C#读取、保存二进制数据文件

保存二进制数据文件 FileStream fs = new FileStream(sFileName, FileMode.OpenOrCreate); BinaryWriter binWriter = new BinaryWriter(fs); binWriter.Write(labelContent, 0, labelContent.Length); binWriter.Close(); fs.Close(); 读取二进制数据文件 byte[] bBuffer; FileStream fs = new FileStream(sFileName, FileMode.Open); BinaryReader binReader = new BinaryReader(fs); bBuffer = new byte[fs.Length]; binReader.Read(bBuffer, 0, (int)fs.Length); binReader.Close(); fs.Close();

二进制权限控制

在平时的工作中,有时会遇到权限问题,尤其是OA系统上,关于权限的问题尤为重要,这里我使用二进制中的运算符来实现类似的功能 快速入门 每一个操作权限都用一个二进制数表示(1、10、100、1000)。总共的权限种类有2^n种,n即代表权限类别 public static void main(String[] args) { // 每一个操作权限都用一个二进制数表示(1、10、100、1000)。总共的权限种类有2^n种,n即代表权限类别 int first = 1; // 001 状态first int second = 2; // 010 状态second int third = 4; // 100 状态third int firstsecond = first | second; // 001 | 010 = 011 初始状态 System.out.println(firstsecond | third); // 011 | 100 = 111 添加third的状态 System.out.println(firstsecond & (~second)); // 011 & (~010) = 011 & 101 = 001 去除second的状态 System.

上古卷轴5附魔挣钱方法

网上的介绍有很多了,结合个人玩法写点儿感想。 要挣钱最简单的方法是练三大,但练三大其实并不轻松,需要很长的过程和非常多的操作,最大问题是会显著降低游戏难度。特别当装了一些插件,比如种草的插件,可以制作出非常强力的毒药(因为可以种加林根了),即使是龙,毒一次也能掉25%的血,普通怪经不起毒一次。 在练了新号后,我的做法从练三大退化到只练附魔。能达到挣钱的目的,同时也能一定程度上保证游戏的平衡性,不至于变得那么简单。 从何时开始呢?答案是学会“灵魂陷阱”这种附魔就可以考虑开始通过附魔挣钱了。平时可以多关注下铁匠铺,看有没有便宜的含有“灵魂陷阱”附魔的武器卖。 首先得需要一些本钱,大概1千,两千就够了,主要用来买空的灵魂石。在攒钱时,就什么垃圾都需要捡了。 其次,得到的普通魔法装备,卖店和分解都行。其实优先选卖店吧,毕竟钱更重要。 第三,有几种关键的附魔是必须要学的。“灵魂陷阱”必须有。另外,需要学会一些值钱的附魔。从效益上讲,武器附魔是优选,麻痹、驱除、驱散是比较值钱的。如果专为了挣钱,理论上就学这四种就可以了。如果钱够,从店里买有以上一种附魔的武器来分解掉学习也是可以的。 剩下的就是给自己的武器附魔上“灵魂陷阱”,然后带够空灵魂石出去打怪。怪物打死后,灵魂会被灵魂石吸收,这种填满的灵魂石可以用于附魔,也可以给附魔武器加魔能。因此,优先捡武器就可以。捡到的武器可以在附魔台上附魔,然后卖店就可以挣钱了。挣了钱,再买空灵魂石带着出去打怪。差不多就是这个循环。 初期钱少,买灵魂石的时候要非常小心,不要买高级灵魂石,很贵,只买微型、小型灵魂石即可。但这种灵魂石只能吸收一般动物的灵魂,蜘蛛、狼、狗熊什么的。大型灵魂石可以吸收尸鬼的灵魂,黑灵魂石可以吸收人类的灵魂。因此,初期也可以多在野外逛逛,杀点儿蜘蛛、狼什么的。 需要注意灵魂石的级别。高级灵魂石可以吸收低级灵魂,反着不行,这也是有点儿钱以后仍然要买低级灵魂石的原因。否则,会发现低级灵魂占据了高级灵魂石,再打死高级怪物时,无灵魂石可用就不值了。 一般的灵魂石是使用(充魔能或附魔)后消失,而任务给的特殊的灵魂石“黑暗之星”,是使用后不会消失的灵魂石。不过如果不装电力工作站插件的话,意义不大(相当于每次出门带了一个黑灵魂石)。 由于在打怪过程中会捡到非常多的武器,因此可以考虑在附魔达到100级后将其升级成传奇技能,继续从15级开始练。由于此时肯定已经学会值钱的附魔了,同时,升级速度正比于附魔武器的价格,因此练起来会非常快,还会获得人物经验值,不过就是有点儿无聊了。 附魔技能树的处理。可以一个都不点,早晚都能到100,只是时间问题。每次为物品附魔时,都会增加一定的附魔技能经验,经验到达了技能就会升级。但附魔一次获得技能经验的多少与物品附魔后能卖多少钱是正比关系,因此,如果想加快附魔升级速度,可以考虑点最底层的5个,这样附魔出来的东西卖价会提高,升级速度也就快。要是为了附魔效果的话,最顶层的“额外效果”是必须点了,可以为一件装备附魔两个效果,比如“吸取耐力”+“吸取法力”,制成这样的产品会获得更多的技能经验,卖店也是很有赚头的。 最后,除了口才、友好度影响物品卖店价格以外,在马卡斯城的入口右手边第一间屋子的杂货商可能卖一个商人降价10%的项链。任务给的卡拉维库斯.维尔头盔可以降价20%,好像只有这两样能够降低价格,实在是居家旅行杀人越货之必备啊:-)

HIVE 0.14 Cost Based Optimizer (CBO) Technical Overview

Analysts and data scientists⎯not to mention business executives⎯want Big Data not for the sake of the data itself, but for the ability to work with and learn from that data. As other users become more savvy, they also want more access. But too many inefficient queries can create a bottleneck in the system. The good news is that Apache™ Hive 0.14—the standard SQL interface for processing, accessing and analyzing Apache Hadoop® data sets—is now powered by Apache Calcite.

shell脚本之sed使用----替换、变量、转义字符

sed替换的基本语法为: ----s后面跟的是分隔符,原字符串可使用.*这种正则表达式进行整行替换 复制代码 代码如下: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如: 复制代码 代码如下: sed "s/原字符串包含'/替换字符串包含'/" //要处理的字符包含单引号 命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”: 复制代码 代码如下: sed 's?原字符串?替换字符串?' //自定义分隔符为问号 可以在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个,例如: 复制代码 代码如下: sed 's/原字符串/替换字符串/' //替换所有匹配关键字 上箭头”^”表示行首,美元”$”符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行),这里犯二了,搜了半天哪个符号表示首行,半天才想起来,首行就是数字”1″啊.那么在行首和行尾添加字符串就是把行尾和行首替换,例如: 复制代码 代码如下: sed 's/^/添加的头部&/g' //在所有行首添加 sed 's/$/&添加的尾部/g' //在所有行末添加 sed '2s/原字符串/替换字符串/g' //替换第2行 sed '$s/原字符串/替换字符串/g' //替换最后一行 sed '2,5s/原字符串/替换字符串/g' //替换2到5行 sed '2,$s/原字符串/替换字符串/g' //替换2到最后一行 替换样式可以多个在同一条命令中执行,用分号”;”分隔,例如: 复制代码 代码如下: sed 's/^/添加的头部&/g;s/$/&添加的尾部/g' //同时执行两个替换规则 sed处理过的输出是直接输出到屏幕上的,要保存可以将输出重定向,或者使用参数”i”直接在文件中替换: 复制代码 代码如下: sed -i 's/原字符串/替换字符串/g' filename //替换文件中的所有匹配项 复制代码 代码如下: sed -i 's/原字符串/替换字符串/g' filename //替换文件中的所有匹配项 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 首先是Sed里使用变量的问题

Notepad++直接编译运行Java

安装Notepad++和JDK(略);Notepad++的菜单栏:插件->Plugin Manager->Show Plugin Manager,Available中勾选NppExec,点击Install按钮。按F6或者 菜单栏:插件->NppExec->Execute,输入以下代码: NPP_SAVE javac.exe "$(FILE_NAME)" java.exe "$(NAME_PART)" 如图示: 点击 Sava 按钮,命名为Java编译加执行,点击 Sava 按钮,点击 OK 关闭对话框。 4. 菜单栏: 插件->NppExec,勾选Follow $(CURRENT_DIRECTORY). 5. 按下F6,出现以下对话框: 点击 OK 或者直接回车,便开始编译并执行程序: 6. 关于UTF-8打印中文字符时的报错: HelloWorld.java:6: 错误: 编码GBK的不可映射字符 System.out.println("鏈?灏忓?硷細Byte.MIN_VALUE="); 解决方法为把上面的脚本代码修改为: NPP_SAVE javac.exe -encoding UTF-8 "$(FILE_NAME)" java.exe "$(NAME_PART)" 参考文献: 把Notepad++打造成一个轻量级的Java学习工具 解决 java “错误:编码GBK 的不可映射字符”

服务器选型参考TPC-C值

经常需要在一些项目中进行服务器选型,看到这篇文件,比较实用,留作参考。 在大型呼叫中心项目中,服务器的选型有一定技巧。 怎样选择既符合系统要求,又不过分浪费资源的服务器?其中,还是有章可循的。 ibm 6h1企业级服务器的性能指标对照表 cpu数量 1cpu 2cpu 4cpu 6cpu tpc-c值 9510 20310 34410 56130 ibm m85企业级服务器的性能指标对照表 cpu数量 2cpu 4cpu 6cpu 8cpu tpc-c值 19500 34590 50790 66750 以支持400-500线路接入,人工座席数规模在80-120之间的银行呼叫中心为例,如果从节省投资、保证系统可用性角度考虑,可以将数据库服务器、应用服务器、CTI服务器集成在同一个服务器群集中。 根据经验,每天的交易的大部分会发生在中午前后的几个小时内,以每天10万笔交易流水计,假定全天业务的80%集中在4小时之内,那么系统的峰值交易量(每分钟):100000×80%/(4×60)≈330笔/分钟。 这部分CPU工作时间还要包括一部分处理系统任务的时间,一般按照20%计算。那么,给数据库操作剩余的CPU工作时间是80%。 系统的TPC-C值应达到:4950/(70%×80%)=8839。 再考虑三年以后的增长情况(按20%每年递增),应用服务器要求的系统TPC-C值就是: 由于设计方案是将应用服务器、数据库服务器和CTI服务器分别运行在两台主机上,这两台主机互为热备份,考虑到极端情况下(一台服务器不能工作)三个服务器都要在一台主机上运行,还要有一部分CPU时间用于处理应用服务器和CTI服务器的工作。 如果要求最大支持400-500条线路接入,可以按比例得出系统要求的TPC-C值2400×2=4800。系统开销仍然按照占CPU时间20%计算,那么,主机的TPC-C值应该是:4800×(1-20%)=3840。这是CTI服务器要求的系统开销。考虑到三年以后的增长情况(按20%每年递增),CTI服务器要求的系统开销就是: 3840×(1+20%)3=6635 在选择应用服务器时,通常,对于支持200条线路接入的呼叫中心,使用的应用服务器的配置是F80,配置单颗CPU,系统的TPC-C值为6900。同样地,按比例能够很快得出该系统应用服务器的TPC-C值应为6900×2=13800。 将数据库服务器、应用服务器、CTI服务器要求的系统TPC-C值加到一起是:15273+11446+6635=33354。有了TPC-C值,就可以通过查询企业级服务器的性能指标对照表,确定目标系统的主机机型和CPU的数量。例如:从表中可以看到4颗CPU的配置情况下,6H1服务器和M85服务器的TPC-C值都可以满足性能要求。 保证冗余结构是关键 在规模较大的呼叫中心系统,由于IVR服务器、CTI服务器、数据库服务器、应用服务器是关键应用,一旦出现故障将影响整个系统的运行,因此要采取冗余技术来避免单点故障。 考虑到IVR服务器支持DTX插卡的数量限制等因素,应将DTX插卡分布到2台以上的服务器上以实现冗余。如果条件许可,就可以考虑将工作负载较重的数据库服务器单独放在一台服务器上,而将应用服务器、CTI服务器放在另一台服务器上。两台服务器互为热备份,当一台服务器出现故障时,另一台服务器可以将故障服务器上的应用全部接管过来,继续运行。这种方案可以将服务停止时间减小到10分钟以内,将系统停机造成的损失减小到最小程度。

sqlite3 join

sqlite3 定义了三种主要类型的连接: 交叉连接 - CROSS JOIN (笛卡尔积 x*y) 内连接 - INNER JOIN (默认是内连接, inner 可以省略, 左右表都满足条件才显示) 外连接 - OUTER JOIN (sqlite3只支持 Left连接, 用右表来匹配左表,即每一行先从左表拿一条数据,再去右表找,右表没有找到,右表的项显示空,但是左表还是会显示) 

Lotus开发之Lotus Notes中域的验证

一:介绍 Lotus中的域主要有以下的类型:文本,日期/时间,对话框列表,复选框,单选按钮,RTF等等。Lotus中域的验证方式有很多种公式,lotusscript,javascript等。如果你使用notes开发c/s的程序,使用公式,ls会很方便,但是如果你是一个b/S的程序员,你会发现notes所有的公式和ls都是运行在服务器端的,此时你在使用公式,ls不但会占用server的资源,而且给用户的体验也是不好的,所以我们推荐使用js来做验证. 二:Domino对域的解析 对于LotusScript,除了Rich-Text域外的元素,如文本、单选框、列表框、复选框等,你可以用几乎相同的代码取得它们的值。例如:如果有一个“Location”域,不论它是何种类型,你都可以用下面的LotusScript代码取得它的值: fieldVals = doc.Location 或者这样: fieldVals = doc.GetItemValue("Location") 在LotusScript中,域的类型对于你要取值(值数组)的代码并不重要。但是在JavaScript中,不同类型的域除了显示选项(比如单选框、复选框或者文本)外,并不像在Notes里那样,它们是不同的类型的对象,每一个都要用不同的方式去引用。其实,那也不是绝对的,有些对象是相似的,但是引用过程并不像在LotusScript里那么流畅。 在JavaScript中,没有所谓的Rich-Text域,在HTML中更没有。Notes里提供了一个可以放在浏览器里的富文本Java(不是JavaScript)小程序,从而可以得到富文本的一些功能,但是你并不能用JavaScript来对它编程,而且它也不是一个真正的HTML对象类型。 更让Notes开发人员惊讶的是,在Web上还没有数字型或时间型的域。HTML的域都是文本型的。尽管你能用它们来收集数字信息,如数量或单价,而保存的数据依然是文本。为了像数字一样使用它,你必须把它转换成数字类型。另一个区别是在Web上没有计算域,但并不意味着你不能在你的表单里加入计算域。你可以加入计算域,计算值将会在Web页中显示,除非域是隐藏的。关键是即使域就在那里显示,而HTML通常的处理是没有定义域。如果你把test域改成计算域而不是可编辑的,在测试时你会发现其值是取不到的,我们可以对比下计算域和可编辑域生成的html代码: 计算域的时候生成的代码(js是取不到值的): <form method="post" action="/weboa/ggxx/Dinner.nsf/test?OpenForm&amp;Seq=1" name="_test"> <input type="hidden" name="__Click" value="0">dddddddd <br> <input type="button" οnclick="alert(document.forms[0].test.value); " value="test"> </form> 非计算域时候客户端生成的代码: <form method="post" action="/weboa/ggxx/Dinner.nsf/test?OpenForm&amp;Seq=1" name="_test"> <input type="hidden" name="__Click" value="0"> <input name="test" value="dddddddd"> <br> <input type="button" οnclick="alert(document.forms[0].test.value); " value="test"></form> 多值域 HTML的域没有Notes的域那样的多值属性。可以试一下:在表单上加入第二个按钮和第二个域。把域命名为“Letters”,类型为可编辑文本,选中“允许多值(Allow multiple values)”复选框。将默认值写成如下的字母列表: "A":"B":"C":"D":"E":"F":"G" 把按钮命名为“Get multiple values”并键入如下的JavaScript代码: alert(document.forms[0].Letters.value); 你可以用不同的分隔符来改变此域的值,但是当你单击按钮时,你会注意到,不论你用什么分隔符,提示你的总是域的所有值。这和在Notes客户端中运行的@Formulas和LotusScript形成了对比。用@Prompt,你得到的提示只是域的第一个值:“A”。你用LotusScript同样也只能显示一个值,但是你要指定数组下标,否则将得到一个错误提示。公式和LotusScript都不能在提示语句中得到多值域的所有值。 原因就是,在Notes的语言中,确实有多个值在域中。对于HTML和JavaScript来说,只有一个值。再次看Web页面的源代码你会发现和下面类似的代码: <input name="Letters" value="A;B;C;D;E;F;G"> 注意它的值是用“一对”双引号引起来的带分隔符的值。 单选按钮 另一个有趣的地方是单选按钮,就Notes和Web页面而言,Notes里的单选按钮是一个有多个值的单个域,在Web上是同名的输入文本框的数组。为了理解以上所述,请看下面的例子: 在表单上,加入另一个新域,名字为“RadioButtn”。正像它的名字一样,把它改成单选框类型的域。在域属性窗口的第二个标签中,输入下列选项和别名 One | A

Undokumentierte @Formeln/LotusScript im Lotus Notes Client/Server

Erstellung von Replik-IDs mittels @Text-Funktion @Text( @Now; "*" ) SourceNoPersist option in SetProfileField/GetProfileField: @SetProfileField([NoPersist];"Value to store";@Username) This is a neat flag used to set variables in a virtual profile document - it doesn't really exist. It's kind of like an environment variable, except instead of writing to Notes.ini, you're writing to a temporary client session cache. This only works in the UI between windows in the same database for the life of the current session.

Andriod-内存泄露-分析-解决方案

Activity 泄漏 我们第一个需要修复的问题就是 Activity 泄漏,我们先来看看内存泄漏是怎么发生的。 Activity 泄漏通常是内存泄漏的一种。为什么会泄漏呢?如果你持有一个未使用的 Activity 的引用,其实也就持有了 Activity 的布局,自然也就包含了所有的 View。最棘手的是持有静态引用。别忘了,Activity 和 Fragment 都有自己的生命周期。一旦我们持有了静态引用,Activity 和 Fragment 就不会被垃圾回收器清理掉了。这就是为什么静态引用很危险。 m_staticActivity = staticFragment.getActivity() 我看过太多次这样的代码了。 另外,泄漏 Listener 也是经常会发生的事情。比如说,我有下面的代码。LeakActivity继承自Activity,我们有一个单例:NastyManager,当我们通过 addListener(this) 将 Activity 作为 Listener 和 NastyManager 绑定起来的时候,不好的事情就发生了。 public class LeakActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); NastyManager.getInstance().addListener(this); } } 想要修复这样的 Bug,其实相当简单,就是在你的 Acitivity 被销毁的时候,将他和 NastyManager取消掉绑定就好了。 @Override public void onDestroy() { super.onDestroy(); NastyManager.getInstance().removeListener(this); } 相对上面的解决方案,我们自然还有更好的。比如我们真的需要用到单例吗?通常,并不需要。不过某些时候可能真的很需要。我们得权衡和设计。不过无论如何,记住,当 Activity 销毁的时候,在单例中移除掉对 Activity 的引用。下面我们讨论下: 如果是内部类,会发生什么?比如说,我们有一个在 Activity 里有一个很简短的非静态 Handler。

Android-黑科技-微信抢红包必备软件

黑科技微信抢红包 介绍: 本节类容和技术无太大关系,主要是个人觉得比较好玩,年关将至,对于新起之秀微信红包,绝对是过年首选,看到就是赚到,速速围观下载。目前只支持Android设备,ios土豪就不用了。 特性 监视选项任意组合,满足多样化的使用需求[?] 提供了系统通知/聊天列表/聊天页面三档选项,无论是想要谨慎不被察觉,还是想要高效志在必得,这个插件如你所愿。 不仅快人一步,红包识别更加智能 多种特征标识,聊天时不再重复点击红包。智能过滤红包关键字[?],避免落入“专属红包”、“抢到翻倍”的陷阱。 紧跟微信更新,内置最新春节红包资讯 第一时间适配最新版本微信,应用内即可一键更新。 轻量、安全、值得信赖 安装包仅1M,无需ROOT,下载即用。代码公开透明,活跃的社区讨论,数万用户下载,值得你的信赖。 源码: 如果有想学习的同学可以下载源码: https://github.com/geeeeeeeeek/WeChatLuckyMoney apk下载地址:https://github.com/geeeeeeeeek/WeChatLuckyMoney/releases/

Android测试-脚本测试-Monkey 的用法

Monkey用法 Monkey 是一个命令行工具,可以运行在 Android 模拟器里或真实设备中。它可以向系统发送伪随机(pseudo-random)的用户事件流(如按键输入、触摸屏输入、手势输入等),可以对待测的目标应用或整个 Android 系统进行压力测试。因此 Monkey 测试是一种为了测试软件的稳定性、健壮性的快速有效的方法 基本语法: 1 $ adb shell monkey [options] <event-count> 如果不指定options,即类似于使用命令adb shell monkey 1000,那么将会对整个系统中安装的 package 发送事件流,换种说法就是对整个 Android 系统进行 Monkey 压力测试 这是一个对指定应用(Android自带的系统设置应用)进行 Monkey 测试的例子,发送的事件流数目为1000: 1 adb shell monkey -p com.android.settings 1000 Monkey 命令选项 获取选项列表,Android 4.4版本中输入adb shell monkey,会显示选项列表如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] .

ssh时出现@@@@@@@@

若在ssh ip时,出现 [root@stu22 ~]# ssh 172.16.1.28 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is da:77:fc:e7:30:2d:28:cb:45:db:06:c2:24:74:4c:c0. Please contact your system administrator. Add correct host key in /root/.

DB2联邦重点

为什么80%的码农都做不了架构师?>>> DB2联邦重点 1.用户信息存储在syscat.useroptions中。通过create user mapping建立本地用户和远地用户的对应。 2.pass-through session: 直接把请求通过wrapper传给远程数据库。这样的话就可以不用nickname直接访问远端的表了。 3.indexes只有在建立nickname的时候才会在global catalog中建立条目。之后的index不会自动同步。 4.主要涉及的几个对象 wrappers server definitions and options user mappings nicknames 5.wrapper一般运行在db2fmp中。 6.查看有哪些wrapper: db2 “select substr(wrapname,1,16) as name,wraptype,wrapversion,substr(library,1,16) as library,substr(remarks,1,16) as remarks from SYSCAT.WRAPPERS ” 查看wrapper的属性(列式显示): db2 “select substr(wrapname,1,16) as name, option,setting from SYSCAT.WRAPOPTIONS” 7.查看有哪些server: db2 “select substr(wrapname,1,16) as wrapname,substr(servername,1,16) as servername,servertype,serverversion,substr(remarks,1,16) as remarks from SYSCAT.SERVERS” 查看erver的属性(列式显示): db2 “select substr(wrapname,1,16) as wrapname,substr(servername,1,16) as servername,servertype,serverversion,create_time,substr(option,1,16) as option,substr(setting,1,16) as setting,substr(remarks,1,16) as remarks from SYSCAT.

# 从零开始搭建Hadoop2.7.1的分布式集群

Hadoop 2.7.1 (2015-7-6更新),Hadoop的环境配置不是特别的复杂,但是确实有很多细节需要注意,不然会造成许多配置错误的情况。尽量保证一次配置正确防止反复修改。 网上教程有很多关于Hadoop配置的,但是每一个教程都对应了一个版本信息,有一些教程也存在很大的问题,配置环境,系统环境都没说清楚。在此我将记录下来从零搭建Hadoop2.7.1的过程,以及搭建过程中所遇到的一些问题。 一 操作环境说明 1.1 :操作系统: window8.1 1.2 :虚拟机版本:VMware12 二 材料准备 2.1 ubuntu-14.10-desktop-amd64.iso (Ubuntu 光盘映像) 2.2 jdk-8u65-linux-x64.gz (Java 环境包) 2.3 hadoop-2.7.1.tar.gz (Hadoop 环境包) 三 搭建开始 3.1 Vmware 创建虚拟机 根据Hadoop的调度规则,我们将使用VMware 12 加载 ubuntu….iso来创建三个Ubuntu 虚拟机。创建用典型安装即可,以下是虚拟机的一些信息 虚拟机1:Master Ubuntu 14.10 64bit 虚拟机2:Slave1 Ubuntu 14.10 64bit 虚拟机3:Slave2 Ubuntu 14.10 64bit 以下操作将需要在所有配置机器上进行 3.2 解压文件 将jdk-8u65-linux-x64.gz 和hadoop-2.7.1.tar.gz 拷贝到3台虚拟机的一个文件夹中。我这里拷贝到了Home/Download文件夹中, 然后右键选择 Extract Here. (当然也可以zxvf) 3.3 配置JAVA 把jdk-8u65-linux-x64 重命名为jdk-8u65-linux-x64.tar.gz 并右键Extract Here,生成文件jdk 1.8.0_65 打开终端输入命令: sudo mkdir /usr/lib/jvm sudo cp -r Downloads/jdk1.

反射(三)获取对象属性及值

package com.ygl.reflect; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectTest { public Object copy(Object object) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException{ //使用对象的getClass()方法,前提先有对象实例 Class<?> clazz=object.getClass(); Object objectcopy=clazz.getConstructor(new Class[]{}).newInstance(new Object[]{}); Field[] fields=clazz.getDeclaredFields(); for(Field field:fields){ String name=field.getName(); String firstLetter=name.substring(0,1).toUpperCase(); String getMethodName="get"+firstLetter+name.substring(1);//从第1位直到最后所有字符 String setMethodName="set"+firstLetter+name.substring(1);//从第1位直到最后所有字符 Method getMethod=clazz.getMethod(getMethodName, new Class[]{}); Method setMethod=clazz.getMethod(setMethodName, new Class[]{field.getType()}); //执行对象的方法获取返回值 Object value=getMethod.invoke(object, new Object[]{}); setMethod.invoke(objectcopy, new Object[]{value}); } return objectcopy; } public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException { Customer customer=new Customer("

intellij idea导出jar包

比如写了个工具包,导出多个工具的jar包。 现在又写了个新的工具 叫preload_resources 步骤: 1.建立 too/preload_resources 文件夹。 (这个用来放Manifest File) 2. intellij idea——> Project structure——> Artifacts——>加号——>jar——>Empty——>添加个jar包 preload_resources 3. output Layout——>加号——>Extracted directory——>弹出对话框中选择用到的lib库 4.output Layout——>加号——>Module output——>弹出对话框中选择用到的module 5.在Main Class中写入工具的主类 全名 dy.tools.ToolPreLoadResourcesApp 6.intellij idea——>Build——>Build Artifacts——>preload_resources——>rebuild 在工程目录下找到——>out——>artifacts——>preload_resouces——>preload_resouces.jar包 在命令行下输入: java -jar preload_resources.jar 工具就执行了。