2019独角兽企业重金招聘Python工程师标准>>> linux: kill -SIGUSR1 2200 //2202是mongo进程pid windows:
use admin db.runCommand( { logRotate : 1 } ) 官方文档:
http://docs.mongodb.org/manual/tutorial/rotate-log-files/
http://docs.mongodb.org/manual/reference/command/logRotate/#dbcmd.logRotate
转载于:https://my.oschina.net/song316/blog/228941
--res --values --dimens.xml --values-sw720dp --dimens.xml --values-sw600dp --dimens.xml
最小宽度的单位是dp,小米2S的分辨率是 1280*720,单位是像素,2S的dpi是320,根据px、dp换算公式 px = dp * (dpi/ 160),得2S实际最小宽度是360dp ,所以适配不到sw720dp
补充:
DPI(dot per inch)
每英寸像素数,如120dpi,160dpi等,假设QVGA(320*240)分辨率的屏幕物理尺寸是(2英寸*1.5英寸),dpi=160可以反映屏幕的清晰度,用于缩放UI的
Density-independent pixel (dip)
指的是逻辑密度计算单位,dip和具体像素值的对应公式是pixel/dip=dpi值/160,也就是px = dp * (dpi / 160)
本文将介绍文章“云环境下面向能耗降低的资源负载均衡方法”。 原文链接:http://pan.baidu.com/s/1bnoxckB
目的 为降低大规模云数据中心的能量消耗,并在一定程度上实现资源负载均衡,提出一种基于虚拟机迁徙的方法LBES(Load Balance and Energy Saving)。
效果 LBES可以在实现负载均衡、保证SLA的基础上,更好地实现节能降耗
关键步骤 在进行虚拟机迁徙的时候,有三个关键步骤 迁徙时机的确定:物理节点何时迁徙最佳 被迁徙虚拟机的选择:在一个被触发迁徙的物理节点中可能有多个虚拟机,选择那些虚拟机进行迁徙能够使得迁徙开销更小、释放的资源能力更多 目标节点的定位:在一个云数据中心中,可能有成千上万个物理节点,将虚拟机迁徙到那个物理节点效果更好 迁徙时机的确定 目的 由于CPU利用率的不稳定,须要避免一个瞬时负载峰值或谷值触发无谓的迁徙造成的系统开销浪费 方法 只有当CPU利用率超过设定的阈值且持续一段时间才触发迁徙 为了预测t+1时刻的负载情况,本文采用基于历史数据的加权预测机制。在t时刻,该预测机制使用t个过去的、按时间序列的历史记录值对未来进行预测
时间越近,权重越大 当预测值小于较小的阈值,或者大于较大的阈值时,迁徙被触发执行 被迁徙虚拟机的选择 为了达到迁徙开销较小、释放资源较多等目的 以往云计算中的虚拟机迁徙的研究通常只考虑物理节点中的CPU资源,而不关心它的内存资源。事实上,如果虚拟机在物理节点中的内存占用不足,即便有足够的CPU计算能力,它也无法正常工作。所以在选择迁徙对象时,须综合考虑该虚拟机对CPU的使用率和内存的占用情况虚拟机对内存的占用量越大,迁移所需拷贝的内存镜像就越大,迁移的系统消耗也越大,但同时,迁移也释放了原节点中更多的内存空间。鉴于以上情况,本文决定当触发迁移节点的内存使用率过高时,选择迁移内存使用率和CPU使用率都较高的虚拟机,反之,则迁移内存使用率较低而CPU使用率较高的虚拟机。 目标节点的定位 目的
避免群聚效应,使得节点负载更均衡。群聚效应是指在云环境中,如果多个物理节点同时选择在当前环境下性能最好的节点作为目标节点进行迁移,就会导致被选中节点的负载在短时间内急剧增加,造成群聚效应。
方法 本文的定位策略并不以固定的方式将虚拟机迁移到当前数据中心性能最高的宿主机,而是基于概率机制选择目标节点,定位时要综合考虑节点的CPU 计算能力、内存容量2个性能指标。当一个物理节点出现内存不足、但CPU计算能力过剩,或者内存过剩、但CPU 利用率不足的情况,该节点中的虚拟机都不能正常运行,造成资源浪费。为了能够均衡物理节点中内存资源与CPU 计算资源的使用,本文在选择目标节点的过程中,须考虑待迁移虚拟机与目标节点的(CPU 消耗/内存消耗)的匹配程度。 步骤 选择n个符合要求的节点根据目标节点的性能,给该节点赋概率从这n个节点中随机选择一个节点作为目标节点 实验结果与分析 实验环境 工具云计算环境模拟器CloudSim
实验参数 结果分析 能耗: LBES(20%~80%)<LBES(10%~70%)<DT(20%~80%)<DT(10%~70%)<ST(80%)<ST(70%)<DVFS<NPA 现象在节能效果上,DVFS方法、ST方法与NPA方法相比,有了明显的提高。DT通过在ST的基础上多设立一个阈值,在实现了负载均衡的基础上,同时降低了能量的消耗。在触发策略阈值相同的情况下,LBES与ST相比,能量消耗、虚拟机迁徙数量、SLA违反率均有减少
分析这是由于LBES在DT基础上,对迁徙时机的决定、被迁徙虚拟机的选择和目标节点的定位3个关键步骤进行了优化,使得虚拟机的迁徙变得更有效率
SLA违反率: ST(80%)<ST(70%)
LBES(20%~80%)>LBES(10%~70%)
DT(20%~80%)>DT(10%~70%) 现象ST、DT、LBES3种方法随着阈值的增加,云数据中心中的能量消耗减少,而SLA的违反率增加
分析为了实现节能,要以降低用户的QoS为代价
结束语 在云数据中心环境下,可以通过虚拟机的迁移实现虚拟机的动态重分配,本文提出了一种基于虚拟机迁移的方法LBES,该方法在双阈值触发策略的基础上,对迁移时机的决定、被迁移虚拟机的选择和目标节点的定位3个关键步骤进行了优化。通过实验证明,该方法可以在实现负载均衡、保证SLA的基础上,更好地实现节能降耗。下一步工作将进一步改进虚拟机迁移触发的预测模型和目标节点定位的概率模型,研究如何确定各个策略中的阈值,使迁移方法的性能达到最佳。
hql:
String hql= "select count(*) from table"; try {
Query query = this.sessionFactory.getCurrentSession().createQuery(hql);
i = ((Long) query.iterate().next()).intValue();
} catch (Exception e) {
// TODO: handle exceptioni= 0;
} sql: String sql = "select count(*) from table";
try {
Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sql);
List list = query.list(); i = list.get(0).intValue();
} catch (Exception e) {
// TODO: handle exceptioni= 0;
}
改成 select * from tablename desc limit 0,9 就可以了
比如
// 获取前十条记录 public List<Payment> GetPayListTopTen() { List<Payment> userList = new ArrayList<Payment>(); Cursor cursor = db.rawQuery("select * from account desc limit 0,9", null); cursor.moveToFirst(); while (!cursor.isAfterLast() && (cursor.getString(1) != null)) { Payment pay = new Payment(); pay.setId(cursor.getInt(0)); pay.setMoney(cursor.getString(1)); pay.setText(cursor.getString(2)); pay.setTime(cursor.getString(3)); userList.add(pay); cursor.moveToNext(); } cursor.close(); return userList; }
小白最近在学习C++,理解了基本语法后,开始对书本中的例题和试题进行上机练习,在上机过程中,发现自己犯了越来越多的令人吐血的超级低级错误,先备案在此,再犯每天多练10道上机题,累死你!
1. 忘掉载入标准库:using namespace std;
2014-04-25 小白今天花了一个多小时在修复一个bug,一直没有修复成功,直到阴差阳差的把之前的代码揪出来对照了一下,才出现小白居然又少写了“using namespace std;”,这个问题已造成小白推翻了好多定理,比如说:microsoft的visual studio 2008原来是这么挫,连string类型的都没办法定义!相关的atoi,c_str()函数都用不了,谨以记载,一切大问题追根溯源都是令人面红耳赤的小失误!
2. 声明变量后,忘记初始化就开始进行运算;
2014.04.27今天犯了两次这个错误,花了大概2个小时才查找出原因,尼玛,姐姐怒了!!
3. 将main声明为int型,但是在main函数里最后却没有return 0;
4. 居然在代码中写出(b*b-4ac)这种悲剧,应该是(b*b-4*a*c),高估计算语言的智能性!
5. 无数次在语句的后面忘掉分号;
6. exit 0编译系统不认可,exit (0)才可以编译通过。
7. for(i=0;i<=11;i++)这个循环语句执行完之后,i的值为12,不为11。
8. 写代码时经常忽略掉对异样场景的处理,比如对输入范围,特殊字符的检查,这显示了我这个菜鸟在c++发展上的局限和狭隘,若不改正,未来必为此受重创!
9. 在代码中不要留只定义但没有用到的变量,否则会报错:'min1' : unreferenced local variable(min1只定义了,但代码中却没没有使用)
10. 循环语句中注意循环的次数,尤其确保第一次执行相关参数值和流程以及最后一次执行的相关参数和流程。如:int i=1; while(i<=2){cout<<"ni hao"<<i<<endl;i++}会执行两次而不是一次!
11. 居然在代码中定义了同样名称的变量名和函数名,例如:int max 和 int max(int a,int b),掩面而去~·
12. 内置函数的声明不能在main函数里,应该在main函数外。
13. 居然命名了一个2_max的变量,导致编译不通过!(c/C++中的变量必须以字母或者下划线开头,变量允许有字母,数字,下划线)
14. 当x等于1时,y=2;使用if语句进行条件判断时,不是if (x=1),而是if(x==1),赋值符号=和算术表达式==要区分开来!
2014.04.21补充:==和=这两个符号这两天没把姐姐搞死,懒得记忆了,故定下:用到==时,将值放置在左边,例如5==i,再错就不得了!
15. 对数组进行初始化时,不能将定义和赋值分开,如int b[10]; b[10]={1,2};必须将定义和赋值一个语句完成:int b[10]={1,2};
16. 声明一个二维数组时,必须写出它的列数,否则编译不通过。例如:int max(array[ ] [ ]), max(array [ 3] [ ]),max(array [ ] [4] )中,只有max(array [ ] [4] )是编译通过的!
10g--直接用迅雷下载即可。页面是打不开的
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86
http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux32.zip
http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux32.zip
http://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux32.zip
http://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux32.zip
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86-64
http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux_x86_64.cpio.gz
http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux_x86_64.cpio.gz
http://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux_x86_64.cpio.gz
http://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux_x86_64.cpio.gz
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit)
http://download.oracle.com/otn/nt/oracle10g/10201/10201_database_win32.zip
http://download.oracle.com/otn/nt/oracle10g/10201/10201_client_win32.zip
http://download.oracle.com/otn/nt/oracle10g/10201/10201_clusterware_win32.zip
http://download.oracle.com/otn/nt/oracle10g/10201/10201_gateways_win32.zip
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (x64)
http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_database.zip
http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_client.zip
http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_clusterware.zip
如果是win7 64位,可能下载上面的版本还是无法安装,需要下载下面的这个版本:
http://download.oracle.com/otn/nt/oracle10g/10204/10204_vista_w2k8_x64_production_db.zip
Oracle Database 10g Release 2 (10.
原文链接:http://ued.taobao.org/blog/2014/04/full-stack-development-with-nodejs/
随着不同终端(pad/mobile/pc)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本。为了提升开发效率,前后端分离的需求越来越被重视,后端负责业务/数据接口,前端负责展现/交互逻辑,同一份数据接口,我们可以定制开发多个版本。
这个话题最近被讨论得比较多,阿里有些BU也在进行一些尝试。讨论了很久之后,我们团队决定探索一套基于NodeJS的前后端分离方案,过程中有一些不断变化的认识以及思考,记录在这里,也希望看到的同学参与讨论,帮我们完善。
一、什么是前后端分离? 最开始组内讨论的过程中我发现,每个人对前后端分离的理解不一样,为了保证能在同一个频道讨论,先就什么是”前后端分离”达成一致。
大家一致认同的前后端分离的例子就是SPA(Single-page application),所有用到的展现数据都是后端通过异步接口(AJAX/JSONP)的方式提供的,前端只管展现。
从某种意义上来说,SPA确实做到了前后端分离,但这种方式存在两个问题:
WEB服务中,SPA类占的比例很少。很多场景下还有同步/同步+异步混合的模式,SPA不能作为一种通用的解决方案。现阶段的SPA开发模式,接口通常是按照展现逻辑来提供的,有时候为了提高效率,后端会帮我们处理一些展现逻辑,这就意味着后端还是涉足了view层的工作,不是真正的前后端分离。 SPA式的前后端分离,是从物理层做区分。(认为只要是客户端的就是前端,服务器端的就是后端)这种分法已经无法满足我们前后端分离的需求,我们认为从职责上划分才能满足目前我们的使用场景:
前端:负责View和Controller层后端:只负责Model层,业务处理/数据等。 为什么去做这种职责的划分,后面会继续探讨。
二、为什么要前后端分离? 关于这个问题,玉伯的文章Web研发模式演变中解释得非常全面,这里我根据自己的理解概括一下:
2.1 现有开发模式的适用场景 玉伯提到的几种开发模式,各有各的适用场景,没有哪一种完全取代另外一种。
比如后端为主的MVC,做一些同步展现的业务效率很高,但是遇到同步异步结合的页面,与后端开发沟通起来就会比较麻烦。Ajax为主SPA型开发模式,比较适合开发app类型的场景,但是只适合做app,因为SEO等问题不好解决,对于很多类型的系统,这种开发方式也过重。 2.2 前后端职责不清 在业务逻辑复杂的系统里,我们最怕维护前后端通吃那种人写的代码,因为没有约束,M-V-C每一层都可能出现别的层的代码,日积月累,完全没有维护性可言。
虽然前后端分离没办法完全解决这种问题,但是可以大大缓解。因为从物理层次上保证了你不可能这么做。
2.3 开发效率问题 淘宝的web基本上都是基于MVC框架webx,架构决定了前端只能依赖后端。
所以我们的开发模式依然是,前端写好静态demo,后端翻译成vm模版,这种模式的问题就不说了,被吐槽了很久。
直接基于后端的项目开发也很痛苦,一是后端开发环境很重,配置安装使用都很麻烦,而且慢。为了解决这个问题,我们发明了各种工具,比如vmarket,但是前端还是要写vm,而且依赖后端数据,效率依然不高。
另外,后端也没法摆脱对展现的强关注,从而专心于业务逻辑层的开发。
套页面,引脚本就不说了,还要经常让他们改个时间戳,搞个vmcommon,他们也非常痛苦。
2.4 对前端发挥的局限 例如,性能优化如果只在前端做空间非常有限,于是我们经常需要后端合作才能碰撞出火花。但是后端由于框架限制,有时候很难做,比如bigpipe、长链接之类的。
为了解决以上提到的一些问题,我们进行了很多尝试,开发了各种工具,但始终没有太多起色,主要是因为我们只能在后端给我们划分的那一小块空间去发挥。只有真正做到前后端分离,把选择权交还给前端,我们才能彻底解决以上问题。
三、怎么做前后端分离? 怎么做前后端分离,其实第一节中已经有了答案:
前端:负责View和Controller层后端:只负责Model层,业务处理/数据等。 试想一下,如果前端掌握了Controller,我们可以做url design,我们可以根据场景决定在服务端同步渲染,还是根据view层数据输出json数据,我们还可以根据表现层需求很容易的做bigpipe,comet,socket等等,完全是需求决定使用方式。
3.1 基于NodeJS“全栈”式开发 如果想实现上图的分层,就必然需要一种web服务帮我们实现以前后端做的事情,于是就有了标题提到的“基于NodeJS的全栈式开发”
这张图看起来简单而且很好理解,但没尝试过,会有很多疑问。
SPA模式中,后端已供了所需的数据接口,view前端已经可以控制,为什么要多加NodeJS这一层?多加一层,性能怎么样?多加一层,前端的工作量是不是增加了?多加一层就多一层风险,怎么破?NodeJS什么都能做,为什么还要JAVA? 这些问题要说清楚不容易,下面说下我的认识过程。
3.2 为什么要增加一层NodeJS? 现阶段我们主要以后端MVC的模式进行开发,这种模式严重阻碍了前端开发效率,也让后端不能专注于业务开发。
解决方案是让前端能控制Controller层,但是如果在现有技术体系下很难做到,因为不可能让所有前端都学java,安装后端的开发环境,写VM。
NodeJS就能很好的解决这个问题,我们无需学习一门新的语言,就能做到以前开发帮我们做的事情,一切都显得那么自然。
3.3 性能问题 分层就涉及每层之间的通讯,肯定会有一定的性能损耗。但是合理的分层能让职责清晰、也方便协作,会大大提高开发效率。分层带来的损失,一定能在其他方面的收益弥补回来。
另外,一旦决定分层,我们可以通过优化通讯方式、通讯协议,尽可能把损耗降到最低。
举个例子:
淘宝宝贝详情页静态化之后,还是有不少需要实时获取的信息,比如优化、物流、促销等等,因为这些信息在不同业务系统中,所以需要前端发送5,6个异步请求来回填这些内容。
有了NodeJS之后,前端可以在NodeJS中去代理这5个异步请求,还能很容易的做bigpipe,这块的优化能让整个渲染效率提升很多。
可能在PC上你觉得发5,6个异步请求也没什么,但是在无线端,在客户手机上建立一个http请求开销很大,有了这个优化,性能一下提升好几倍。
淘宝详情基于NodeJS的优化我们正在进行中,上线之后我会分享一下优化的过程。
3.4 前端的工作量是否增加了? 相对于只切页面/做demo,肯定是增加了一点,但是当前模式下有联调、沟通环节,这个过程非常花时间,也容易出bug,还很难维护。
所以,虽然工作量会增加一点,但是总体开发效率会提升很多。
另外,测试成本可以节省很多。以前开发的接口都是针对表现层的,很难写测试用例。如果做了前后端分离,甚至测试都可以分开,一拨人专门测试接口,一拨人专注测试UI(这部分工作甚至可以用工具代替)。
3.5 增加Node层带来的风险怎么控制? 这个担心有点多余,随着Node大规模使用,SCM/PE/安全,都会解决进行。
他们会帮助我们在申请,测试,发布,风控几个层面保证稳定性
3.6 Node什么都能做,为什么还要JAVA? 我们的初衷是做前后端分离,如果考虑这个问题就有点违背我们的初衷了。即使用Node替代Java,我们也没办法保证不出现今天遇到的种种问题,比如职责不清。我们的目的是分层开发,专业的人,专注做专业的事。基于JAVA的基础架构已经非常强大而且稳定,而且更适合做现在架构的事情。
为什么80%的码农都做不了架构师?>>> 名人列传
1、Martin Fowler
2、Hibernate的作者Gavin King
3、SpringFramework的作者Rod Johnson 4、Bob大叔(Robert C. Martin)
没有编写测试的代码是糟糕的代码,不管我们有多细心去编写它们,不管它们有多漂亮、面向对象或封装良好,只要没有编写测试,我们实际上就不知道修改后的代码是变得更好了还是更糟糕了。反之,有了测试,我们就能够迅速、可验证地修改代码的行为。
参考文献:
1、开源软件十杰
2、我最敬仰的8位软件宗师
3、TheServerSide人物谱
转载于:https://my.oschina.net/scipio/blog/220322
源自:http://blog.csdn.net/elegant_shadow/article/details/5006175
首先,先来先讲讲适配器。适配就是由“源”到“目标”的适配,而当中链接两者的关系就是适配器。它负责把“源”过度到“目标”。举个简单的例子,比如有一个“源”是一个对象人,他拥有2种技能分别是说日语和说英语,而某个岗位(目标)需要你同时回说日语、英语、和法语,好了,现在我们的任务就是要将人这个“源”适配的这个岗位中,如何适配呢?显而易见地我们需要为人添加一个说法语的方法,这样才能满足目标的需要。
接着讨论如何加说法语这个方法,也许你会说,为什么不直接在“源”中直接添加方法,我的理解是,适配是为了实现某种目的而为一个源类暂时性的加上某种方法,所以不能破坏原类的结构。同时不这么做也符合Java的高内聚,低耦合的原理。既然不能直接加,接着我们就来说该怎么来实现为人这个“源”添加一个方法,而又不破坏“源”的本身结构。
适配器模式有2种,第一种是“面向类的适配器模式”,第二种是“面向对象的适配器模式”。
先说“面向类的适配器模式”。顾名思义,这类适配器模式就是主要用于,单一的为某个类而实现适配的这样一种模式,为什么说只为某个类去实现,一会提到,我们先展示这种类适配模式的代码实现。
源的代码如下:
[c-sharp] view plain copy public class Person { private String name; private String sex; private int age; public void speakJapanese(){ System.out.println("I can speak Japanese!"); } public void speakEnglish(){ System.out.println("I can speak English!"); } ...//以下省略成员变量的get和set方法 } 目标接口的代码如下:
[c-sharp] view plain copy public interface Job { public abstract void speakJapanese(); public abstract void speakEnglish(); public abstract void speakFrench(); } 适配器的代码如下:
[c-sharp] view plain copy public class Adapter extends Person implements Job{ public void speakFrench() { } } 好了,代码看完然后要做一些说明了,之前遗留的一个问题,为什么称其为类适配模式呢?很显然的,Adapter类继承了Person类,而在Java这种单继承的语言中也就意味着,他不可能再去继承其他的类了,这样也就是这个适配器只为Person这一个类服务。所以称其为类适配模式。
本文首先感谢 Apple 开发者论坛的eskimo1,他是我见过的最热心肠的人,对任何人他都不吝于给予无私帮助。
服务器生成PKCS12证书库,并通过servlet导出为DER客户端证书(含一个密钥和一个证书)。iPhone从服务器下载证书后,如何进行验证?
一、 生成证书
假设密钥库为dlt.p12,库密码ipcc@95598,有效期1天,则命令为:
keytool -genkey -v -alias root -keyalg RSA -storetype PKCS12 -keystore dlt.p12 -dname "CN=www.handtimes.com,OU=ipcc,O=云电同方,L=昆明,ST=云南,C=中国" -storepass ipcc@95598 -keypass ipcc@95598
生成客户端用的证书:
keytool -genkey -v -alias p12client -keyalg RSA -storetype PKCS12 -keystore dlt.p12 -dname "CN=www.handtimes.com,OU=ipcc,O=云电同方,L=昆明,ST=云南,C=中国" -storepass ipcc@95598 -keypass 123456 -validity 1
要查看已生成的证书,用下面的命令:
keytool -list -v -alias p12client -keystore dlt.p12 -storepass ipcc@95598 -storetype PKCS12
或者:
keytool -list -v -keystore IPCCCA – dlt.p12 ipcc@95598 -storetype PKCS12
如果需要将p12证书导出为.cer格式,可以使用命令:
keytool -export -alias p12client -keystore dlt.
本文转自:http://blog.csdn.net/macheng365/article/details/6403050
对于JAVA中类的初始化是一个很基础的问题,其中的一些问题也是易被学习者所忽略。当在编写代码的时候碰到时,常被这些问题引发的错误,感觉莫名其妙。而且现在许多大公司的面试题,对于这方面的考查也是屡试不爽。不管基于什么原因,我认为,对于java类中的初始化问题,有必要深入的了解。Java类的初始化,其实就是它在JVM的初始化问题(类加载的问题),对于它在JVM中的初始化是一个相当复杂的问题,是给专家们来探讨的,所以在这里我只是对一些容易忽略的问题,发表一下个人观点: 1,在一个类的内部(不考虑它是另一个类的派生类):很多人认为,类的成员变量是在构造方法调用之后再初始化的,先不考虑这种观点的正确性,先看一下下面的代码:
[java] view plain copy class Test01...{ public Test01(int i)...{ System.out.println("Test01 of constractor : " + i); } } public class Test02 ...{ private Test01 t1 = new Test01(1); private int n = 10; public Test02()...{ System.out.println("Test02 of constructor : " + n); } private Test01 t2 = new Test01(2); public static void main(String[] args) ...{ Test02 test = new Test02(); } } 输出的结果为: Test01 of constractor : 1 Test01 of constractor : 2 Test02 of constructor : 10 通过输出,可见当生成Test02的实例test时,它并不是首先调用其构造方法而是先是成员变量的初始化,而且成员的初始化的顺序以成员变量的定义顺序有关,先定义的先初始化,初始化后再调用构造方法。其实成员变量的初始化,在类的所有方法调用之前进行,包括构造方法
CREATE TABLE DEMO(ID INT, A VARCHAR(2), B VARCHAR(2), C VARCHAR(2), D VARCHAR(2)); INSERT INTO DEMO SELECT * FROM ( SELECT 1, '1','2','3','4' FROM DUAL UNION ALL SELECT 2, '1','5','3','5' FROM DUAL UNION ALL SELECT 3, '1','2','3','4' FROM DUAL UNION ALL SELECT 4, '1','4','7','6' FROM DUAL ); COMMIT; --查询出编号以外都相同的数据 SELECT * FROM DEMO T1 WHERE (T1.A,T1.B,T1.C,T1.D) IN ( SELECT T.A,T.B,T.C,T.D FROM DEMO T GROUP BY T.A,T.B,T.C,T.D HAVING COUNT(*) > 1) --删除除编号以外都相同的数据 DELETE FROM DEMO ID IN ( SELECT T1.
OpenCascade MeshVS Usage eryar@163.com
Abstract. MeshVS means Mesh Visualization Service. It can be used to representation mesh in different style, such as colored stress patterns mesh, mesh with text and mesh like vector(with arrow). So MeshVS usually used for CAE programming. This paper focus on the MeshVS usage. Key words. OpenCascade, Mesh, MeshVS, Colored stress Patterns
1. Introduction 视觉是人类获取外部信息和相互交流的主要手段。科学计算可视化包括曲线曲面拟合、坐标变换、体绘制等,核心是物理场可视化。这是因为研究人员或者工程师主要关心的内容是温度场分布、结构位移、材料变形、流场速度、应力应变分布等。这些工程数据全部是以场的形式存在,构成了数学意义上的标量场、矢量场和张量场。因此,标量场、矢量场和张量场的可视化占据了科学计算可视化技术研究的主导地位。——王成恩《面向科学计算的网格划分与可视化技术》。 在OpenCascade中的包MeshVS提供了网格的可视化功能。使用包MeshVS提供的类和简单函数可以实现网格的灵活显示: l 显示网格,也可以隐藏部分网格及顶点; l 使用简单通用的接口来显示计算和分析的结果; l 数据有多种视觉效果:彩色云图colors、点图标vectors、带文字texts和变形网格deformed mesh; l 网格实体的交互选择; 本文主要介绍OpenCascade中MeshVS的使用方法。对有需要网格可视化功能的读者,可以直接使用OpenCascade中提供的这个功能。对其实现算法感兴趣的读者,可以结合相关书籍,对其实现原理进行研究。 2.
一、学习内容概述: 学习如何在拓扑图中动态设置是否显示网元。
二、学习内容总结:
1、实现思路: 为拓扑元素 定义一个自定义属性hidden,当hidden值为true时,则该拓扑元素不显示。 1)、网元添加自定义属性: lastData.setClient("hidden", true); 2)、设置拓扑元素是否显示: // 拓扑图只显示hidden为false的节点 network.setVisibleFunction(function(element) { if (element.getClient("hidden")) { return false; } if (element.getParent() && element.getParent().getClient("hidden")) { return false; } return true; }); 三、验证代码运行效果截图: 四、验证代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>选择隐藏网元</title> <script type="text/javascript" src="./js/twaver.js"></script> <script type="text/javascript" src="./js/topo.js"></script> <script type="text/javascript"> function init() { // 添加网元 var box = new twaver.ElementBox(); // 创建拓扑图 var network = new twaver.network.Network(box); // 注册图片 topo.Util.registerImage("./images/ne/route.png"); topo.
一、学习内容概述: 学习如何在拓扑图中动态设置网元的样式。
二、学习内容总结:
1、添加属性表格: 1)、属性表格定义:使用twaver.controls.PropertySheet类,例如: var nodeStylePropertySheet = new twaver.controls.PropertySheet(); 2)、设置属性表格可编辑:setEditable(true)
nodeStylePropertySheet.setEditable(true); 3)、添加属性表格关联的对象及关联事件: var nodeStyleData = new twaver.Element(); var propertyBox = nodeStylePropertySheet.getPropertyBox(); topo.Util.addClientProperty(propertyBox, "label.color").setEnumInfo(['black', 'red']); nodeStyleData.setClient("label.color", "black"); nodeStylePropertySheet.getDataBox().add(nodeStyleData); nodeStylePropertySheet.getDataBox().getSelectionModel().setSelection(nodeStyleData); nodeStylePropertySheet.getDataBox().addDataPropertyChangeListener(function handlePropertyChange(e) { var name = topo.Util.getPropertyName(e); network.getElementBox().forEach(function(element) { if ( element instanceof twaver.Node || element instanceof twaver.Link) { element.setStyle(name, e.newValue); } }); }, this); 4)、添加各种类型的属性参考(代码来源于demo): var map = { '': 'None', 'default': 'Default', 'children': 'Children', 'descendant': 'Descendant', 'descendantAncestor': 'Descendant and Ancestor' }; demo.
前言:这几天学习oracle,把自己对于关联查询的理解,记录下。如有错误请指正!
交叉连接: 交欢连接又称为“笛卡儿积连接”,是两个或多个表之间的无条件连接。一个表中所有的记录与其它表的所有的记录进行连接。
如果进行连接的表中的数据行数分别为“n1,n2、n3”,那么交叉连接后结果集中有n1xn2xn3条记录。
一、内连接 内连接是种常用的关联查询方式,使用inner join来实现,其中inner是可以省略的语法如下:
内连接的标准语法 select colums_list
from table_name1 [inner] join table_name2
on join_codition
参数说明:
colums_list :字段列表table_name1和table_name2:是两个要实现内联接的表名join_condition:实现内连接的条件表达式 内连接语法:Oracle扩展的连接方式 SELECT table1.column,talbe2.column[,…]
FROM table1,table2[,…]
WHERE condition;
例如:
SQL> select e.empno 员工号,e.ename 员工姓名,e.job 职务,d.dname 2 from emp e inner join dept d 3 on e.deptno = d.deptno; ------------------------------------------------或者------------------------------------------------------------------------------- SQL> select e.empno 员工号,e.ename 员工姓名,e.job 职务,d.dname 2 from emp e ,dept d where e.deptno = d.deptno; 员工号 员工姓名 职务 DNAME ---------- -------------------- ------------------ ---------------------------- 7369 SMITH CLERK RESEARCH 7499 ALLEN SALESMAN SALES 7521 WARD SALESMAN SALES 7566 JONES MANAGER RESEARCH 7654 MARTIN SALESMAN SALES 7698 BLAKE MANAGER SALES 7782 CLARK MANAGER ACCOUNTING 7788 SCOTT ANALYST RESEARCH 7839 KING PRESIDENT ACCOUNTING 7844 TURNER SALESMAN SALES 7876 ADAMS CLERK RESEARCH 员工号 员工姓名 职务 DNAME ---------- -------------------- ------------------ ---------------------------- 7900 JAMES CLERK SALES 7902 FORD ANALYST RESEARCH 7934 MILLER CLERK ACCOUNTING 已选择14行。 二、外连接 外连接分为:左外连接和右外连接、完全连接
转载自『http://hi.baidu.com/imheaventian/item/8d3b8ecf2c209408c610b210』
1) matlab中画多张图如何使用同一范围的colorbar
例如生成了图1,2,3
生成图1时,使用
temp1=caxis;
将图1的z值的取值范围(即colorbar的取值范围)取出。
生成图2,3时
使用
caxis(temp1)
命令将图2,3的z值的取值范围设为同1相同。
然后对各个同使用colorbar命令便可以了。
解释:matlab将z值映射到colormap,colorbar通过z值和colormap的映射关系生成的,所以需要将不同的figure,z值映射相同的colormap索引。
命令:
caxis
caxis([cmin cmax])
caxis controls the mapping of data values to the colormap.
2) colorbar的刻度经常达不到极值,可以使用下面的方法达到极值
figure
[x,y,z]=peaks(20);
subplot(2,1,1),contourf(x,y,z),colorbar
subplot(2,1,2),contourf(x,y,z)
t1=caxis;
t1=linspace(t1(1),t1(2),6);
my_handle=colorbar('ytick',t1);
再比如:
load topo
subplot('position',[0 0.5 1 0.45 ])
axesm robinson
meshm(topo,topolegend)
demcmap(caxis)
h=colorbar('northoutside');
t=get(h,'xtick');
subplot('position',[0 0.05 1 0.45 ])
axesm robinson
meshm(topo,topolegend)
a=caxis;
demcmap(caxis)
colorbar('northoutside','xtick',[a(1),t,a(2)])
下面程序给出地形和大地水准面的结果:
load topo
load geoid
load coast
subplot('position',[0 0.
You have matrix a of size n × n. Let's number the rows of the matrix from 1 to n from top to bottom, let's number the columns from 1 to nfrom left to right. Let's use aij to represent the element on the intersection of the i-th row and the j-th column.
Matrix a meets the following two conditions:
for any numbers i, j (1 ≤ i, j ≤ n) the following inequality holds: aij ≥ 0; .
小白是属于三个项目组的公共人力,因此找小白的人特别多,除了自己的本职开发工作,还有大量的问题定位,支持性的工作,这些支持性的工作一般比较临时,紧急,因此小白不得不放下手中的任务去支持,今天有个MM找我:
xxx,上个月你让我看下的问题相关日志文件发给我了吗??
我恍然觉悟:忘了!
因为时常被打断,回过神来的时候总是会忘掉在某一个时间间隙承诺给同事的事情,这种情况发生过N次,觉悟,反省过N次,无效!故立帖为证,速速纠正此坏习惯:
1. 桌面常开一备忘录,表明时间,任务,工作量,项目组来记录重要的,可能忘记,必须完成的任务.
oracle数据库sql语句 学习 03-17 第13章,第14章
定位升级步骤缺失问题 xx项目组 03-17 半天
2. 每天早上和每天下班之前核对当天的任务清单,已完成的叉叉掉,未完成的修改,第二天继续完成
oracle数据库sql语句 学习 03-17 第13章
定位升级步骤缺失问题 xx项目组 03-17 半天
oracle数据库sql语句 学习 03-18 第14章
香港价格网,里面的价格和香港的百老汇、丰泽等的价格几乎同步,相差不大,有很大的参考价值,对于准备去香港买电子产品的网友来说,是个非常好的网站,特别分享: http://www.price.com.hk/ 转载于:https://www.cnblogs.com/maxma/p/9169909.html
我们在 Linux 下运行一个程序,有时会无法启动,报缺少某某库。这时需要查看可执行程序或者动态库中的符号表,动态库的依赖项, Linux 有现成的工具可用:objdump 。
有时我们拿到一个静态库,想调用其中的函数,而某些函数作用域非全局,也可以通过修改符号来达到目的。 Linux 有现成的工具可用: objcopy 。
下面我们来看看具体怎么使用。
objdump 是 gcc 套件中用来查看 ELF 文件的工具,详细的用法请 google 之,也可以用 objdump --help 查看帮助,或者 man objdump 查看系统手册。这里只举两个我用到的情况。
1). 查看依赖项:objdump -x xxx.so | grep "NEEDED" 。下面是我查看 qq_1.so 时的输出截图:
2). 查看动态符号表: objdump -T xxx.so 。假如想知道 xxx.so 中是否导出了符号 yyy ,那么命令为 objdump -T xxx.so | grep "yyy" 。
3). 查看符号表: objdump -t xxx.so 。-T 和 -t 选项在于 -T 只能查看动态符号,如库导出的函数和引用其他库的函数,而 -t 可以查看所有的符号,包括数据段的符号
objcopy 将目标文件的一部分或者全部内容拷贝到另外一个目标文件中,或者实现目标文件的格式转换。
具体用法 google , man ,或者参考这篇强文《Linux命令学习手册-objcopy命令》。
登录页面
login.html 负责收集用户填写的登录信息
<html> <head>用户登录</head> <form name="LoginForm" method="post" action="login.php" onSubmit="return InputCheck(this)"> <p> <label for="username" class="label">用户名:</label> <input id="username" name="username" type="text" class="input" /> <p/> <p> <label for="password" class="label">密 码:</label> <input id="password" name="password" type="password" class="input" /> <p/> <p> <input type="submit" name="submit" value=" 确 定 " class="left" /> </p> </form> </html> 登录处理
login.php 负责处理用户登录与退出动作。
<?php //登录 if(!isset($_POST['submit'])){ exit('非法访问!'); } $username = htmlspecialchars($_POST['username']); $password = MD5($_POST['password']); //包含数据库连接文件 include('conn.php'); //检测用户名及密码是否正确 $check_query = mysql_query("select userid from user_list where username='$username' and password='$password' limit 1"
全面讲解远程桌面无法连接方案,远程桌面无法连接中关于不能连接的问题,将在下面的文字中涉及到,如何访问列表过滤进出报文,搜集证据并联系安全部门或机构呢? ◆检查点击我的电脑-右键-服务中的Terminal Services这个服务是否运行.
◆检查我的电脑-右键-属性-远程-是否钩选远程桌面无法连接.
◆检查系统自带的防火是否开启.如果开启了请关闭.
◆默认情况下,远程登录的帐号密码不能为空.一定要设置有密码.(默认情况下这个用户必须设置密码,若没有设置密码就不能在远程登录界面用空密码登录。这是因为已启用了组策略中“计算机配置”→“安全设置”→“本地策略”→“安全选项”→“帐户:使用空白密码的本地帐户只允许进行控制台登录”策略,双击,把它改为“已禁用”就能用空密码的帐户进行远程桌面无法连接登录了。)
远程桌面无法连接解决方法
Terminal Services允许用户以交互方式连接到远程计算机。远程桌面无法连接、快速用户切换、远程协助和终端服务器依赖此服务 - 停止或禁用此服务会使您的计算机变得不可靠。要阻止远程使用此计算机,请在“系统”属性控制面板项目上清除“远程”选项卡上的复选框。C:\WINDOWS\System32\svchost.exe -k termsvcs。
提示原因如下:发生网络问题;在建立连接时发生错误;管理员已结束会话。
已经采用如下方法,但是仍然无效:
进入注册表编辑器窗口,展开“HKEY_LOCAL_MA CHINE\ SYSTEM\CurrentCon trolSet\Services\TermService\ Parame ters”,找到名为 “Cer tificate”的子键,将它删除,重新启动XP系统或Windows 2000 Server服务器,系统就会重新生成 “Certificate”子键,这样客户端就能正常连接到终端服务器了。
看看是不是杀毒软件阻止了 要是没有杀毒软件看看是不是防火墙开启了 关闭就行了 要是还不行 就右击我的电脑----属性----远程----勾选“允许远程用户连接到我的电脑”就OK了。下面是我的个人主页,里面有很多电脑维修资料 有时间可以去看看 感谢您的访问 个人网站需要您的支持。 如果登录时出现以下提示:
您的远程桌面会话已结束,可能是下列原因之一:
管理员已结束了会话。
在建立连接时发生错误。
发生网络问题。
请检查系统服务中的Remote Desktop Help Session Manager服务是否启动。
1、“我的电脑”-->右键-->“管理”--->“服务和应用程序”--->“服务”--->Remote Desktop Help Session Manager右建启动。
2、改注册表的权限;找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\RDPDR ,在RDPDR上点右键,选择权限,在everyone上,完全控制选中。
3、将以下内容复制,保存为REG文件,导入注册表。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\RDPDR\0000]
"ClassGUID"="{4D36E97D-E325-11CE-BFC1-08002BE10318}"
"Class"="System"
"HardwareID"=hex(7):52,00,4f,00,4f,00,54,00,5c,00,52,00,44,00,50,00,44,00,52,\
00,00,00,00,00
"Driver"="{4D36E97D-E325-11CE-BFC1-08002BE10318}\\0021"
"Mfg"="(标准系统设备)"
"Service"="rdpdr"
"DeviceDesc"="Terminal Server Device Redirector"
win10已经出来很久了,个人很喜欢win10,相比于win8改进了很多,使用起来更方便,但是在安装显卡驱动上,着实费了我很长时间。我的笔记本是Thinkpad E40,显卡是ATI Mobility Radeon HD 4500 Series,也就是AMD显卡,是老显卡了。装好win8.1系统后,不管是32位的还是64位的,用驱动精灵和驱动人生都无法安装AMD官方发布的win8驱动。win10和win8类似,这里就不在单说了。
网上搜索没有找到合适的解决办法,自己经过一段时间的摸索,终于解决,主要原因是win8.1系统会自动给笔记本更新微软的显卡驱动,这个驱动会阻止用户安装AMD的官方驱动,导致用驱动精灵和驱动人生都无法安装正确的驱动(至少我的笔记本的无法安装,没有考证别的电脑是不是也无法安装AMD驱动),具体的微软驱动安装后为什么无法安装AMD驱动,不是很清楚,有可能是微软驱动签名证书的日期比AMD官方驱动签名日期(2012/11/16)的要新。还请对驱动签名了解的大神帮忙分析真正的原因。
ATI Mobility Radeon HD 4500 Series显卡的计算机安装win8.1后,默认的系统自带的显卡驱动是“Microsoft基本显示适配器”,这个显卡驱动用在1366*768的笔记本上显示是不正常的,最高分辨率只有1024*768,但是系统装好后联网的情况下,系统会自动更新安装微软的AMD驱动,驱动号是“ATI Mobility Radeon HD 4500 Series(Microsoft Corporation WDDM V1.1)”,这个驱动安装后显示看起来是正常的,但是我安装photoshop CS6后,第一次使用时,软件会提示”显示驱动程序出现问题,Photoshop已暂时停用图形硬件增强。“其他问题我没有遇到,曾有人反映无法使用桌面版AutoCAD 2013.
直接安装ATI驱动,从安装日志可以看到,驱动程序一直安装失败,解决办法就是卸载微软驱动ATI Mobility Radeon HD 4500 Series(MicrosoftCorporation WDDM V1.1),此时驱动程序降为最初显示不正常的系统自带的显卡驱动是“Microsoft基本显示适配器”,在这种情况下正常安装AMD官方驱动“ATI Mobility Radeon HD 4500/5100 Series”就可以了。
下面说一下卸载微软驱动的方法,会的同学可以无视下面的了!!
------------------------------------------------------微软驱动卸载方法-----------------------------------------------------------
1、从win8.1开始按钮点右键 选“设备管理器”,找到显示适配器
2、点开“显示适配器” 对驱动程序点右键选“更新驱动程序软件”
3、点击“浏览计算机以查找软件”
4、点击下面的“从计算机的设备驱动程序列表中选取”
5、出现下面的界面时,由于我的系统已经装好驱动了,所以截的图是安装之后的。一般情况下你的列表里只有第一个和第四个驱动程序(甚至只有第四个)。
选择“基本显示适配器",点"下一步"就将微软显卡驱动降为基本显卡驱动了。
6、安装了“Microsoft基本显示适配器”后,也就算是卸载了微软的AMD驱动“ATI Mobility Radeon HD 4500 Series(MicrosoftCorporation WDDM V1.1)”,此时笔记本的显示不正常,你就可以正常安装AMD的官方显卡驱动了,最终安装好的效果如上图所示。
不用安装上图中2012/7/3这个驱动,这是我最初安装的旧版本驱动,我也懒得删了,你们无视吧!!
注意:你只需安装一个AMD最新版本的驱动就可以了,win8 64位系统可以用这个驱动
http://support.amd.com/zh-cn/download/desktop/legacy?product=legacy2&os=Windows%208%20-%2064
顺便晒一下自己的新桌面 \(^o^)/~
大爱这个与win8很协调的输入法皮肤
本文为原创文章,欢迎转载,但转载请注明本文来源:http://blog.csdn.net/anymake_ren/article/details/20207543,谢谢!
1、a++和++a的区别
a++表示先将a放在表达式中运算,然后再加1;
++a表示先将a加1,然后再放在表达式中运算
2、实例
(1)Java代码
/** * @Title:JiaJia.java * @Package:com.you.model * @Description:比较a++与++a的区别 * @Author: 游海东 * @date: 2014年3月1日 下午3:58:29 * @Version V1.2.3 */ package com.you.model; /** * @类名:JiaJia * @描述:实现a++与++a的区别 * @Author:游海东 * @date: 2014年3月1日 下午3:58:29 */ public class JiaJia { /** * @Title : main * @Type : JiaJia * @date : 2014年3月1日 下午3:58:30 * @Description : a++表示先将a放在表达式中运算,然后再加1; * ++a表示先将a加1,然后再放在表达式中运算 * @param args */ public static void main(String[] args) { /** * 声明一个变量a */ int a = 120; //打印a System.
你所不知道的C和C++运行库
周五晚,小雨,少见的未加班。无聊,遂准备写一篇博客,介绍一下C和C++运行库,只因发现工作几年的人对此一知半解的大有人在。
在使用VC构建项目时,经常会遇到下面的链接错误:
初学者面对这些错误常常不知所错:libcmt.lib是什么东西?msvcrtd.dll又是干吗用的?在使用VC++时我们也常常对下面的运行库配置项感到疑惑,它们到底究竟是什么意思呢?甚至一些工作了很多年的程序员也对此一知半解。今天让我们来了解一下它们。 从C和C++运行库说起 为了提高C语言的开发效率,C标准定义了一系列常用的函数,称为C库函数。C标准仅仅定义了函数原型,并没有提供实现。因此这个任务留给了各个支持C语言标准的编译器。每个编译器通常实现了标准C的超集,称为C运行时库(C Run Time Libray) ,简称CRT。对于VC++编译器来说,它提供的CRT库支持C标准定义的标准C函数,同时也有一些专门针对windows系统特别设计的函数。 与C语言类似,C++也定义了自己的标准,同时提供相关支持库,我们把它称为C++运行时库或C++标准库。 由于C++对C的兼容性,C++标准库包括了C标准库,除此之外还包括IO流和标准模板库STL。 VC++在何处实现C和C++运行库 VC++完美的支持C和C++标准,因此也就按照C和C++的标准定义的函数原型实现了上述运行时库。为了方便有不同需求的客户的使用,VC++分别实现了动态链接库DLL版本和静态库LIB版本。同时为了支持程序调试且不影响程序的性能,又分别提供了对应的调试版本。调试版本的名称在Release版本名称后添了字母d。 对于C运行时库CRT,VC6.0、VC2005、VC2008和VC2010均提供了DLL版本和LIB版本。上述各个编译器提供的LIB版的CRT库,均实现在libcmt.lib。对应的调试版名称为libcmtd.lib。 而DLL版本名称根据编译器不同而不同,我们可以从名称上加以分辨。 VC6.使用的CRT库的DLL版本在MSVCRT.DLL中实现, 对应调试版本为MSVCRTD.LIB。 VC2005使用的CRT库的DLL版本在MSVCR80.DLL中实现,对应调试版本为MSVCR80.DLL。 VC2008使用的CRT库的DLL版本在MSVCR90.DLL中实现,对应调试版本为MSVCR90D.DLL。 VC2010使用的CRT库的DLL版本在MSVCR100.DLL中实现,对应调试版本为MSVCR100D.DLL。 C++标准兼容C标准,但VC各版本将C++编译器使用的C标准库与C编译器使用的C运行库一起实现,它们使用相同的运行库。 对于C++标准库中的IO流和STL,VC6.0、VC2005、VC2008和VC2010也提供了DLL版本和LIB版本。 LIB版均实现在libcpmt.lib中,对应的调试版本为libcpmtd.lib。 不同版本的编译器实现的DLL也不相同。 VC6.使用的C++类库的 DLL版本在MSVCP60.DLL中实现, 对应调试版本为MSVCP60D.LIB。 VC2005使用的C++类库的DLL版本在MSVCP80.DLL中实现,对应调试版本为MSVCP80.DLL。 VC2008使用的C++类库的 DLL版本在MSVCP90.DLL中实现,对应调试版本为MSVCP90D.DLL。 VC2010使用的C++类库的DLL版本在MSVCP100.DLL中实现,对应调试版本为MSVCP100D.DLL。 在各个版本的编译器中,我们可以通过配置选项来设置程序使用的C和C++运行时库的类型。如下图(其他版本编译器大同小异): MT选项:链接LIB版的C和C++运行库。在链接时就会在将C和C++运行时库集成到程序中成为程序中的代码,程序体积会变大。 MTd选项:LIB的调试版。 MD选项:使用DLL版的C和C++运行库,这样在程序运行时会动态的加载对应的DLL,程序体积会减小,缺点是在系统没有对应DLL时程序无法运行。 MDd选项:表示使用DLL的调试版。 在 《由使用LeakDialog时遇到的问题而引出的一些分析》 这篇文章中的实验一,使用VC6.0的默认配置没有拦截到内存泄露。其原因是VC6.0的控制台项目默认配置是静态链接CRT库(单线程版,后面会介绍)。 动态版(DLL)和静态版(LIB)C和C++运行库的优缺点 因为静态版必须把C和C++运行库复制到目标程序中,所以产生的可执行文件会比较大。同时对于使用多个模块的大型软件来说,如果每个模块均选择静态链接C或C++运行库,在程序运行时就会存在多个运行库。在链接时也会出现重复定义的问题,如文章首第一张图所示。 使用DLL版的C和C++运行库,程序在运行时动态的加载对应的DLL。程序体积变小,但一个很大的问题就是一旦找不到对应DLL,程序将无法运行。假设使用VC6.0并选择使用MD选项构建,那么当用户使用VC2005来使用这个DLL时很可能出现找不到MSVCRT.DLL或MSVCP60.DLL的情况。 在这里介绍一个很好的工具:Dependency Walker,可以用来分析DLL的依赖关系,同时查看DLL导出的函数,使用方法请Google。 使用该工具打开MSVCRT.DLL,如下图: 我们可以在其中找到我们经常使用使用的C函数,如printf ,getchar,malloc等。 打开MSVCP100.DLL,也可以找到这些C函数: 在开发的过程中我们也会遇到如下图的链接错误,LIBCD.lib究竟是何方神圣呢? 它其实是LIBC.lib的调试版,而LIBC.lib是只有在VC6.0才会使用的静态库,该库是CRT的单线程版,用于支持单线程版本的CRT。VC2005等更高版本的编译器已经不再提供单线程版本,转而使用多线程版的MSVCR80.DLL或libcmt.lib。 当遇到上述符号定义冲突的链接错误时,可以选择忽略libcd.lib。
2014.2.28 于浙江杭州
一般没声音都是以下步骤检查的 1、检查声卡、连接线,以及音箱等设备是否连接正常。如果是中了病毒, 就应该运行杀毒软件进行全面杀毒。 2、打开控制面板----添加新硬件----下一步,待搜寻完毕后,点“否, 我尚未添加此硬件”,点下一步后。在出现的对话框中,选中“单击完成, 关闭无的计算机,重新启动来添加新硬件”。注意这里说的是关机后再启动, 而不是重新启动。一般来说,重新开机后问题能够得到解决。 3、右击“我的电脑”----“属性”---“硬件”----“设备管理器”,打开 “声音、视频和游戏控制器”有无问题,即看前面有没有出现黄色的“?”。 如有,先将其卸载,再放入CD驱动盘,重新安装这个设备的驱动程序。 4、如果“设备管理器”----“声音、视频和游戏控制器”是就没有了声卡硬件 ,那只好查找你的声卡,包括集成声卡,型号一定要准确,在确认找到声卡后, 再放入系统驱动盘,安装声卡驱动程序。 5、有声音但不见小喇叭时,打开控制面板----声音和视频 设备----音量,在“将音量图标放入任务栏”前打上对号,重启后任务栏里 又有小喇叭了。 6、无声音又无小喇叭时,打开控制面板----添加与删除程序----添加删除 Windows组件,放入 CD驱动盘,在“附件和工具”前打对号,点击“下一步”,系统会提示安装 新硬件,按照提示进行安装即可。 7、还不能解决问题,那只好重新安装系统和驱动程序,一切问 题也会随之得到解决,但前提是各种硬件完好,软件没有冲突。 8、当安装声卡驱动程序时出现“找不着AC晶片”提示,有可能是电脑中毒, 或者是声卡即插即用松动,导致接触不良,还有可能是因违规操作误删了声 卡驱动程序,抑或是内部软件冲突。这就要针对不同的原因一步一步地进行 解决。 9、可以轻轻拍打电脑机身的外壳,笔记本电脑可以在盖盖子 的时候比往常用力稍大一点,使一些松动的零件复原,关机后等待一段时间后 再重新开机,有时声音问题会得到恢复。 针对您的问题,我大致回答那么多,音响经常没有声音,和其音响质量有关系,个人意见,惠威,丹拿,bt-audio的史诗家都是很不错的,有什么需要了解的可以来找我了解一下,史诗影院是具备正统英国声原汁原味的质感,高音纤细,中音醇厚,低音沉稳有力,力道十足。波纹盆扬声器技术的中低音单元技术,使得其中低频声音细节饱满丰富,还原性、控制力好,量感足,低频下潜深,没有丝毫的松软之感,音质堪比极佳。 希望我的回答能帮到您
简介 HDFS默认通过网页http://master:50070访问,该网站只有下载功能,其交互性一般。
HDFS Explorer的设计初衷是让你可以更好的访问HDFS上的文件,它提供了一个类似于Windows7文件浏览器的用户界面。现在虽然只是beta版,但是对HDFS的访问还是很方便的。
更好的方式访问HDFS集群 Windows7文件管理器相同的交互体验 能够管理多个HDFS集群 和Windows文件管理器之间无缝的复杂和粘贴操作 快速下载Pig和Hive查询结果 HDFS访问设计
几秒内添加HDFS服务器 管理多个HDFS集群 编辑HDFS文件的权限 查询文件 安装 HDFS Explorer安装 安装前提条件
NET Framework 4.5 系统要求:Windows vista、7、8、8.1或者Windows Server 2008R2 及后面的版本 安装过程
下载HDFS Explorer 双击“HDFS Explorer - beta.application”进行安装。 安装完成后,输入Email即可使用 添加集群 右击HDFS Explorer左下角的HDFS Connections,选择“Add Connection”,出现界面“Add an HDFS connection”,输入集群IP和Hadoop用户即可。
点击“Add Connection”
输入HDFS集群的IP和Hadoop的用户
完毕后,你就可以像Windows文件管理器一样访问HDFS了。
配置HDFS服务器 配置WebHDFS HDFS Explorer通过WebHDFS访问HDFS,必须配置HDFS支持webhdfs。在hdfs-site.xmle文件中添加如下内容:
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property> 离开safemode #$HADOOP_HOME/bin/hadoop dfsadmin -safemode leave 体验 其体验效果和宣传的一样。HDFS Explorer支持文件拖拽上传和下载,也可以直接双击打开文件,如图中的word文档,直接双击即可打开。但是文件上传速度较慢,体验了几次,最快达到1.5MB/s。
总的来说,使用起来还是很方便的,现在只是beta版,相信其后续版本会更加的好用。
You may have wondered why most extraterrestrial life forms resemble humans, differing by superficial traits such as height, colour, wrinkles, ears, eyebrows and the like. A few bear no human resemblance; these typically have geometric or amorphous shapes like cubes, oil slicks or clouds of dust. The answer is given in the 146th episode of Star Trek - The Next Generation, titled The Chase. It turns out that in the vast majority of the quadrant's life forms ended up with a large fragment of common DNA.
小白今天查收邮件,领导让整理上一个版本的源代码,接下来小白花了2个小时找来找去,还没找的完整,遂决定这个立帖为证,终结这个问题:
1. 以后每个迭代自测结束后,将所有相关源码归档上传到配置库当中
2. 定期查看源代码的上传情况
总结: 好的习惯加速一个人的成长
情况一:权限问题:
现象:A建立与B的信任关系,但是建立失败
解决:查看B的用户下.ssh/authorized_keys的权限,只能是700,或者是644,不能是其他
情况二:关于ssh信任关系--每台主机指定不同的私钥文件
当主机与10.11.70.25创建了信任关系后,每次ssh远程登陆10.11.70.25时都要求输入密码,如下:
linux:/etc/ssh/# ssh 10.11.70.25
Authorized users only. All activity may be monitored and reported.
Password: 排查了/etc/ssh/sshd_config中
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
都是默认的yes。
(
补充说明:
OpenSSH 的服务端配置文件一般为 /etc/ssh/sshd_config,和公钥认证有关的两个配置项是:
#RSAAuthentication yes
#PubkeyAuthentication yes
其缺省值一般为 yes。如果希望仅打开公钥认证,禁用其他的认证方式,则可以修改下列配置项:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
上述配置项如果有任何需要修改的地方在修改之后重启ssh服务器让新的设置生效。
)
最后排查到ssh_config配置文件,内容如下:
linux:/etc/ssh/# cat /etc/ssh/ssh_config
# Site-wide defaults for some commonly used options. For a comprehensive
# list of available options, their meanings and defaults, please see the
转自:http://www.matrix67.com/blog/archives/105
这或许是众多OIer最大的误区之一。 你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已经被澄清了。下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就可以不看了。接下来你可以看到,把NP问题当成是 NPC问题是一个多大的错误。 还是先用几句话简单说明一下时间复杂度。时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度。还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(a^n)的指数级复杂度,甚至O(n!)的阶乘级复杂度。不会存在O(2*n^2)的复杂度,因为前面的那个“2”是系数,根本不会影响到整个程序的时间增长。同样地,O (n^3+n^2)的复杂度也就是O(n^3)的复杂度。因此,我们会说,一个O(0.01*n^3)的程序的效率比O(100*n^2)的效率低,尽管在n很小的时候,前者优于后者,但后者时间随数据规模增长得慢,最终O(n^3)的复杂度将远远超过O(n^2)。我们也说,O(n^100)的复杂度小于O(1.01^n)的复杂度。 容易看出,前面的几类复杂度被分为两种级别,其中后者的复杂度无论如何都远远大于前者:一种是O(1),O(log(n)),O(n^a)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。 自然地,人们会想到一个问题:会不会所有的问题都可以找到复杂度为多项式级的算法呢?很遗憾,答案是否定的。有些问题甚至根本不可能找到一个正确的算法来,这称之为“不可解问题”(Undecidable Decision Problem)。The Halting Problem就是一个著名的不可解问题,在我的Blog上有过专门的介绍和证明。再比如,输出从1到n这n个数的全排列。不管你用什么方法,你的复杂度都是阶乘级,因为你总得用阶乘级的时间打印出结果来。有人说,这样的“问题”不是一个“正规”的问题,正规的问题是让程序解决一个问题,输出一个“YES”或“NO”(这被称为判定性问题),或者一个什么什么的最优值(这被称为最优化问题)。那么,根据这个定义,我也能举出一个不大可能会有多项式级算法的问题来:Hamilton回路。问题是这样的:给你一个图,问你能否找到一条经过每个顶点一次且恰好一次(不遗漏也不重复)最后又走回来的路(满足这个条件的路径叫做Hamilton回路)。这个问题现在还没有找到多项式级的算法。事实上,这个问题就是我们后面要说的NPC问题。 下面引入P类问题的概念:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。P是英文单词多项式的第一个字母。哪些问题是P类问题呢?通常NOI和NOIP不会出不属于P类问题的题目。我们常见到的一些信息奥赛的题目都是P问题。道理很简单,一个用穷举换来的非多项式级时间的超时程序不会涵盖任何有价值的算法。 接下来引入NP问题的概念。这个就有点难理解了,或者说容易理解错误。在这里强调(回到我竭力想澄清的误区上),NP问题不是非P类问题。NP问题是指可以在多项式的时间里验证一个解的问题。NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。比方说,我RP很好,在程序中需要枚举时,我可以一猜一个准。现在某人拿到了一个求最短路径的问题,问从起点到终点是否有一条小于100个单位长度的路线。它根据数据画好了图,但怎么也算不出来,于是来问我:你看怎么选条路走得最少?我说,我RP很好,肯定能随便给你指条很短的路出来。然后我就胡乱画了几条线,说就这条吧。那人按我指的这条把权值加起来一看,嘿,神了,路径长度98,比100小。于是答案出来了,存在比100小的路径。别人会问他这题怎么做出来的,他就可以说,因为我找到了一个比100 小的解。在这个题中,找一个解很困难,但验证一个解很容易。验证一个解只需要O(n)的时间复杂度,也就是说我可以花O(n)的时间把我猜的路径的长度加出来。那么,只要我RP好,猜得准,我一定能在多项式的时间里解决这个问题。我猜到的方案总是最优的,不满足题意的方案也不会来骗我去选它。这就是NP问题。当然有不是NP问题的问题,即你猜到了解但是没用,因为你不能在多项式的时间里去验证它。下面我要举的例子是一个经典的例子,它指出了一个目前还没有办法在多项式的时间里验证一个解的问题。很显然,前面所说的Hamilton回路是NP问题,因为验证一条路是否恰好经过了每一个顶点非常容易。但我要把问题换成这样:试问一个图中是否不存在Hamilton回路。这样问题就没法在多项式的时间里进行验证了,因为除非你试过所有的路,否则你不敢断定它“没有Hamilton回路”。 之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。我们不会指望一个连多项式地验证一个解都不行的问题存在一个解决它的多项式级的算法。相信读者很快明白,信息学中的号称最困难的问题——“NP问题”,实际上是在探讨NP问题与P类问题的关系。 很显然,所有的P类问题都是NP问题。也就是说,能多项式地解决一个问题,必然能多项式地验证一个问题的解——既然正解都出来了,验证任意给定的解也只需要比较一下就可以了。关键是,人们想知道,是否所有的NP问题都是P类问题。我们可以再用集合的观点来说明。如果把所有P类问题归为一个集合P中,把所有 NP问题划进另一个集合NP中,那么,显然有P属于NP。现在,所有对NP问题的研究都集中在一个问题上,即究竟是否有P=NP?通常所谓的“NP问题”,其实就一句话:证明或推翻P=NP。 NP问题一直都是信息学的巅峰。巅峰,意即很引人注目但难以解决。在信息学研究中,这是一个耗费了很多时间和精力也没有解决的终极问题,好比物理学中的大统一和数学中的歌德巴赫猜想等。 目前为止这个问题还“啃不动”。但是,一个总的趋势、一个大方向是有的。人们普遍认为,P=NP不成立,也就是说,多数人相信,存在至少一个不可能有多项式级复杂度的算法的NP问题。人们如此坚信P≠NP是有原因的,就是在研究NP问题的过程中找出了一类非常特殊的NP问题叫做NP-完全问题,也即所谓的 NPC问题。C是英文单词“完全”的第一个字母。正是NPC问题的存在,使人们相信P≠NP。下文将花大量篇幅介绍NPC问题,你从中可以体会到NPC问题使P=NP变得多么不可思议。 为了说明NPC问题,我们先引入一个概念——约化(Reducibility,有的资料上叫“归约”)。 简单地说,一个问题A可以约化为问题B的含义即是,可以用问题B的解法解决问题A,或者说,问题A可以“变成”问题B。《算法导论》上举了这么一个例子。比如说,现在有两个问题:求解一个一元一次方程和求解一个一元二次方程。那么我们说,前者可以约化为后者,意即知道如何解一个一元二次方程那么一定能解出一元一次方程。我们可以写出两个程序分别对应两个问题,那么我们能找到一个“规则”,按照这个规则把解一元一次方程程序的输入数据变一下,用在解一元二次方程的程序上,两个程序总能得到一样的结果。这个规则即是:两个方程的对应项系数不变,一元二次方程的二次项系数为0。按照这个规则把前一个问题转换成后一个问题,两个问题就等价了。同样地,我们可以说,Hamilton回路可以约化为TSP问题(Travelling Salesman Problem,旅行商问题):在Hamilton回路问题中,两点相连即这两点距离为0,两点不直接相连则令其距离为1,于是问题转化为在TSP问题中,是否存在一条长为0的路径。Hamilton回路存在当且仅当TSP问题中存在长为0的回路。 “问题A可约化为问题B”有一个重要的直观意义:B的时间复杂度高于或者等于A的时间复杂度。也就是说,问题A不比问题B难。这很容易理解。既然问题A能用问题B来解决,倘若B的时间复杂度比A的时间复杂度还低了,那A的算法就可以改进为B的算法,两者的时间复杂度还是相同。正如解一元二次方程比解一元一次方程难,因为解决前者的方法可以用来解决后者。 很显然,约化具有一项重要的性质:约化具有传递性。如果问题A可约化为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。这个道理非常简单,就不必阐述了。 现在再来说一下约化的标准概念就不难理解了:如果能找到这样一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可约化为问题B。 当然,我们所说的“可约化”是指的可“多项式地”约化(Polynomial-time Reducible),即变换输入的方法是能在多项式的时间里完成的。约化的过程只有用多项式的时间完成才有意义。 好了,从约化的定义中我们看到,一个问题约化为另一个问题,时间复杂度增加了,问题的应用范围也增大了。通过对某些问题的不断约化,我们能够不断寻找复杂度更高,但应用范围更广的算法来代替复杂度虽然低,但只能用于很小的一类问题的算法。再回想前面讲的P和NP问题,联想起约化的传递性,自然地,我们会想问,如果不断地约化上去,不断找到能“通吃”若干小NP问题的一个稍复杂的大NP问题,那么最后是否有可能找到一个时间复杂度最高,并且能“通吃”所有的 NP问题的这样一个超级NP问题?答案居然是肯定的。也就是说,存在这样一个NP问题,所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。这种问题的存在难以置信,并且更加不可思议的是,这种问题不只一个,它有很多个,它是一类问题。这一类问题就是传说中的NPC 问题,也就是NP-完全问题。NPC问题的出现使整个NP问题的研究得到了飞跃式的发展。我们有理由相信,NPC问题是最复杂的问题。再次回到全文开头,我们可以看到,人们想表达一个问题不存在多项式的高效算法时应该说它“属于NPC问题”。此时,我的目的终于达到了,我已经把NP问题和NPC问题区别开了。到此为止,本文已经写了近5000字了,我佩服你还能看到这里来,同时也佩服一下自己能写到这里来。 NPC问题的定义非常简单。同时满足下面两个条件的问题就是NPC问题。首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。证明一个问题是 NPC问题也很简单。先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它(由约化的传递性,则NPC问题定义的第二条也得以满足;至于第一个NPC问题是怎么来的,下文将介绍),这样就可以说它是NPC问题了。 既然所有的NP问题都能约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式的算法,那么所有的NP问题都能用这个算法解决了,NP也就等于P 了。因此,给NPC找一个多项式算法太不可思议了。因此,前文才说,“正是NPC问题的存在,使人们相信P≠NP”。我们可以就此直观地理解,NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。 顺便讲一下NP-Hard问题。NP-Hard问题是这样一种问题,它满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广)。NP-Hard问题同样难以找到多项式的算法,但它不列入我们的研究范围,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。事实上,由于NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决。 不要以为NPC问题是一纸空谈。NPC问题是存在的。确实有这么一个非常具体的问题属于NPC问题。下文即将介绍它。 下文即将介绍逻辑电路问题。这是第一个NPC问题。其它的NPC问题都是由这个问题约化而来的。因此,逻辑电路问题是NPC类问题的“鼻祖”。 逻辑电路问题是指的这样一个问题:给定一个逻辑电路,问是否存在一种输入使输出为True。 什么叫做逻辑电路呢?一个逻辑电路由若干个输入,一个输出,若干“逻辑门”和密密麻麻的线组成。看下面一例,不需要解释你马上就明白了。 ┌───┐
│ 输入1├─→┐ ┌──┐
└───┘ └─→┤ │
│ or ├→─┐
┌───┐ ┌─→┤ │ │ ┌──┐
│ 输入2├─→┤ └──┘ └─→┤ │
└───┘ │ ┌─→┤AND ├──→输出
└────────┘┌→┤ │
一:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (.Net SqlClient Data Provider)
有可能是数据库服务没有启动
开始 运行 cmd 在命令行 输入 net start mssqlserver //打开数据库服务
net stop mssqlserver //关闭数据库服务
二:只能windows用户登录,不用用户名密码登陆
三:sqlserver服务无法启动 10048 发生服务特定错误10048 把TCP/IP禁止然后在启动服务就可以了
四:sqlserver服务无法启动 17113
发生服务特定错误17113 因为master数据库被破坏了
把数据库文件里边看看
发现什么都没有:
应该是这样的
所以找个其他电脑,把这些基本的数据库复制过来就行了
spring共提供了五种类型的通知:
通知类型接口描述Around 环绕通知org.aopalliance.intercept.MethodInterceptor拦截对目标方法调用Before 前置通知org.springframework.aop.MethodBeforeAdvice 在目标方法调用前调用After 后置通知org.springframework.aop.AfterReturningAdvice在目标方法调用后调用Throws 异常通知org.springframework.aop.ThrowsAdvice当目标方法抛出异常时调用 还有一类是引入通知,用来定义切入点的。 上一篇里面已经介绍了前置通知,就是在方法被调用前先执行前置通知
现在介绍一下其他的通知:
1、后置通知:
后置通知类的写法:
package com.cdtax.aop; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; public class MyAfterReturningAdvice implements AfterReturningAdvice { @Override public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { System.out.println("后置通知被:关闭资源,"); } } 在beans.xml中的配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- 配置被代理的对象 --> <bean id="test1Service" class="com.cdtax.aop.Test1Service"> <property name="name" value="小明"></property> </bean> <!-- 配置前置通知 --> <bean id="
Hibernate(分组查询等续) 使用聚集函数
在HQL中可以调用 Count:统计函数 Min:求最小值函数 Max:求最大值函数 Sum:求和函数 Avg:求平均数函数
Count:统计函数 Session session = HibernateSessionFactory.getSession(); Transaction tx = session.beginTransaction(); Integer count = (Integer)session.createQuery("select count(*) from Hx") .uniqueResult(); System.out.print(count); tx.commit(); session.close(); Avg:求平均数函数 Session session = HibernateSessionFactory.getSession(); Transaction tx = session.beginTransaction(); Float count = (Float)session.createQuery("select avg(c.id) from Hx c") .uniqueResult(); System.out.print(count); tx.commit(); session.close(); Sum:求和函数 Session session = HibernateSessionFactory.getSession(); Transaction tx = session.beginTransaction(); Integer count = (Integer)session.createQuery("select sum(c.id) from Hx c") .uniqueResult(); System.out.print(count); tx.commit(); session.
基于用户行为分析建立用户偏好模型 2013-09-08 18:23 2736 http://zisong.me/post/ji-zhu/ji-yu-yong-hu-xing-wei-fen-xi-jian-li-yong-hu-pian-hao-mo-xing
我们经常将个性化推荐的思想简单地抽象为:通过用户的行为推测出用户的兴趣,从而给用户推荐满足他们兴趣的物品。那我们其实就是要通过用户行为分析建立一个用户偏好(偏好即兴趣)模型,模型中包含各个用户的一个或更多个偏好。
插叙一段 像「用户行为」,「用户兴趣」这样的词,大多数人都有一个默认的感知,甚至对于这种词的理解可能已固化为常识,所以我很少见到有文章使用这些词时解释它们。我感觉涉及到算法模型时,对这些词的不加限定的宽泛认知就容易影响对算法模型的深入理解,会导致感知模糊却不自知。因为不同人对这些词的基本理解可能一致,但是拓展理解各不相同。本文会作出限定解释,且本文所谈用户行为都是指网络(可以是电信网络,互联网)上的行为。
概念解释 实体域 当我们想基于用户行为分析来建立用户偏好模型时,我们必须把用户行为和兴趣主题限定在一个实体域上。个性化推荐落实在具体的推荐中都是在某个实体域的推荐。比如对于阅读网站,实体域包括所有的图书,我们可以称之为图书域。其他还有,个性化音乐推荐,个性化电影推荐,个性化资讯推荐等。
用户行为 用户在门户网站点击资讯,评论资讯,在社交网站发布状态,评论状态,在电商网站浏览商品,购买商品,点评商品,以及在其他类型网站的种种行为都可是用户行为。本文所指的用户行为都是指用户在某实体域上的行为。比如用户在图书域产生的行为有阅读,购买,评分,评论等。
兴趣主题 用户的兴趣维度,同样是限定在某实体域的兴趣,通常可以以标签的形式来表示。比如,对于图书阅读,兴趣主题可以是「悬疑」,「科技」,「情感」等等分类标签。值得一提的是,兴趣主题,只是从用户行为中抽象出来的兴趣维度,并无统一标准。比如qq阅读和豆瓣阅读的图书分类标签大不一样。而兴趣维度的粒度也不固定,就像门户网站有「新闻」,「体育」,「娱乐」等一级分类,而新闻下有「国内」,「社会」,「国际」二级分类,娱乐下有「明星」,「星座」,「八卦」二级分类。我们选取什么粒度的兴趣空间取决于我们对用户偏好模型的要求。
兴趣空间 在同一层次上兴趣维度的集合,比如豆瓣阅读中,可以用「新上架」,「热门」,「特价」,「免费」来构成一个兴趣空间(当然,如果使用这个兴趣空间来表征用户的兴趣,就太粗了,这里只是假设),也可以用「小说」,「幻想」,「计算机」,「科技」,「历史」·····「美食」构成一个兴趣空间。这是两种不同的分类维度。如果将「新上架」也加入到后者集合里,就显然有些莫名其妙。值得一提是,这也并非不可能,这取决于一个如何看待这个集合的问题,如果不把它看作基于内容的分类,而是图书标签库,那么也是可行的,甚至利于建立更好地模型。本文后面我有提到。
用户行为数据 项亮在他的《推荐系统实践》的2.1节有详细介绍。通常在经过对行为日志的汇总处理后生成的比较容易理解的数据就是一份描述用户行为的会话日志。这种日志记录了用户的各种行为,比如在图书阅读app中这些行为主要包括点击,试读,购买,阅读(在本地app中,阅读行为有可能追踪不到),评分,评论。
建立用户偏好模型 基于用户行为分析建立用户偏好模型的核心工作就是:将用户的行为转换为用户的偏好。
我们采用矩阵运算的思维方式,以图书阅读为例说明。
下图表示用户(user)集合:
下图表示图书(item)集合:
那么用户的行为矩阵可以表达为:
行表示用户,列表示图书,我们暂只考虑图书的购买行为,1表示用户看过该图书,0表示用户没有看过该图书。
如何将上述用户行为矩阵转化为用户兴趣矩阵(即行代表用户,列代表兴趣维度),一种显著的方法是我们先确定图书与兴趣维度的对应关系矩阵。而这个的前提是我们确定了使用何种兴趣空间。一种常见的方式是专家给出一些样本的分类结果,也就是一般意义的训练数据,然后通过分类算法,得到分类模型,然后应用到其余数据的分类问题当中,解决其余大量数据的分类问题。这种分类的特点是一本图书只被标记为一种类别,假如有3个类别,
那么图书-兴趣矩阵为:
那么用户行为矩阵转换为用户兴趣矩阵的运算公式即可表示为下图,行表示用户,列表示兴趣,算出的矩阵再经过归一化后,每个值就代表某个用户在某个兴趣的偏好权重。
选择这样的兴趣空间的局限显而易见:一本图书只能属于一个兴趣维度。实际情况中,一本图书通常不只属于某个分类,并且当图书的数据巨大时,寄希望于编辑分类可能会越来越难以维持,所以通常是由用户主动给图书添加标签,或者机器基于内容,提取关键词。但是这种形式得到的标签集会存在同义,生僻,维度过多等情况,需要经过标签清洗的重要工作。前面已经看到兴趣空间的选择真的是非常重要,直接影响所得到用户的兴趣矩阵。所以同样的方法都得到了用户偏好,但是好不好用,就跟这部分工作有关了。
用户行为加权 上面展示的用户行为矩阵示例是一个非常简单的,直接可以从数据库里提取的例子。而实际中在数据能够支撑的情况下,我们不可能只考虑一种行为。为了获得更合理的行为矩阵,我们就需要进行行为加权。比如,A1表示用户点击的行为矩阵,A2表示购买的行为矩阵,A3表示评分的行为矩阵,那么加权矩阵就是:
至于各矩阵的权重跟我们建立用户偏好模型的目的有关,如果我们更希望找准用户的品味偏好,那么权重可能是:a1 < a2 < a3;如果我们更希望用户购买,那么权重可能是:a1 < a3 < a2。
其他用户行为分析方法 上面介绍的方法也算是一种主流的方法。但是从上面介绍的「兴趣主题」,「兴趣空间」也可以看出作出好的分类并不容易,分类粒度,分类维度等都不好控制,用户打标签也需要复杂的标签清洗工作。在图书,电影这样的实体域,我们还可以通过类别给用户推荐喜欢的物品,而在个性化资讯推荐领域(这里仅举个例子,资讯推荐应该有其特殊之处),我们不见得能通过类别推荐用户喜欢的资讯,甚至用户本身也不在意类别。我们并不需要显式地构建物品-兴趣对应关系矩阵,也可以将用户和所喜欢类别的物品关联起来。这就涉及到隐含语义分析技术。这个部分会日后在此文补充。
小总结 以上可以看出基于用户行为分析的用户偏好建模的常规方法非常简单明了。事实上也的确如此,在使用这些方法或者思想编写程序计算都不是什么难事。而实际上,我们遇到的问题却并非是方法本身,而是数据本身。数据方面的两大问题是稀疏和长尾分布。通常有行为数据用户很少,而用户的行为对象也集中在不多的物品上。方法易学,而数据问题只能在实战中才能深刻体会,才会发现主要的精力和难点都在解决数据的稀疏和长尾上。希望日后能结合实际问题写写解决数据问题的文章。
此外,上面虽然是用矩阵运算的思想讲述,但我在实际项目中发现其运算的本质其实是对用户行为的统计。所以在实战中,不一定要先建矩阵,再做计算,直接在数据库里使用sql计算非常方便。
import javax.sound.sampled.AudioFormat import javax.sound.sampled.AudioInputStream import javax.sound.sampled.AudioSystem import javax.sound.sampled.DataLine import javax.sound.sampled.SourceDataLine // <copyright file="Test.groovy" company="SuperSight"> // ©2013 SuperSight Corporation. All rights reserved. // </copyright> /** * Created with IntelliJ IDEA. * User: yuekun * Date: 13-7-23 * Time: 下午2:34 * To change this template use File | Settings | File Templates. */ class Test { public static void main(String[] args) { try { AudioInputStream ais = AudioSystem.getAudioInputStream(new File("D:\\notify.wav"));// 获得音频输入流 AudioFormat baseFormat = ais.
1.2 HBase 使用场景和成功案例 有时候了解软件产品的最好方法是看看它是怎么用的。它可以解决什么问题和这些解决方案如何适用于大型应用架构,能够告诉你很多。因为HBase有许多公开的产品部署,我们正好可以这么做。本章节将详细介绍一些人们成功使用HBase的使用场景。 注意:不要自我限制,认为HBase只能解决这些使用场景。它是一个初生的技术,根据使用场景进行创新正驱动着系统的发展。如果你有新想法,认为可以受益于HBase提供的功能,试试吧。社区很乐于帮助你,也会从你的经验中学习。这正是开源软件精神。 HBase仿效了Google的BigTable,让我们开始探索典型的BigTable问题:存储互联网。 1.2.1 典型互联网搜索问题:BigTable发明的原因 搜索是一个定位你所关心的信息的行为:例如,搜索一本书的页码,其中含有你想读的主题,或者网页,其中含有你想找的信息。搜索含有特定词语的文档,需要查找索引,该索引提供了特定词语和包含该词语的所有文档的映射。为了能够搜索,首先必须建立索引。Google和其他搜索引擎正是这么做的。他们的文档库是整个互联网;搜索的特定词语就是你在搜索框里敲入的任何东西。 BigTable,和模仿出来的HBase,为这种文档库提供存储,BigTable提供行级访问,所以爬虫可以插入和更新单个文档。搜索索引可以基于BigTable 通过MapReduce计算高效生成。如果结果是单个文档,可以直接从BigTable取出。支持各种访问模式是影响 BigTable设计的关键因素。 建立互联网索引 1 爬虫持续不断地抓取新页面,这些页面每页一行地存储到BigTable里。 2 MapReduce计算作业运行在整张表上,生成索引,为网络搜索应用做准备。 搜索互联网 3 用户发起网络搜索请求。 4 网络搜索应用查询建立好的索引,或者直接从BigTable直接得到单个文档。 5 搜索结果提交给用户。 讲完典型HBase使用场景以后,我们来看看其他使用HBase的地方。愿意使用HBase的用户数量在过去几年里迅猛增长。部分原因在于HBase产品变得更加可靠和性能更好,更多原因在于越来越多的公司开始投入大量资源来支持和使用它。随着越来越多的商业服务供应商提供支持,用户越发自信地把HBase应用于关键应用系统。一个设计初衷是用来存储互联网持续更新网页副本的技术,用在互联网相关的其他方面也很是合适的。例如,HBase在社交网络公司内部和周围各种各样的需求中找到了用武之地。从存储个人之间的通信信息,到通信信息分析,HBase成为Facebook,Twitter,和StumbleUpon等公司里的关键基础架构。 在这个领域,HBase有三种主要使用场景,但不限于这些。为了保持本节简单明了,我们这里介绍主要的使用场景。 1.2.2 捕获增量数据 数据通常是细水长流,累加到已有数据库以备将来使用,例如分析,处理和服务。许多HBase使用场景属于这个类别——使用HBase作为数据存储,捕获来自于各种数据源的增量数据。例如,这种数据源可能是网页爬虫(我们讨论过的BigTable典型问题),可能是记录用户看了什么广告和多长时间的广告效果数据,也可能是记录各种参数的时间序列数据。我们讨论几个成功的使用场景和公司。 捕获监控参数:OPENTSDB 服务于数百万用户的WEB产品的后台基础架构一般都有数百或数千台服务器。这些服务器承担了各种功能——服务流量,捕获日志,存储数据,处理数据等等。为了保持产品正常运行,监控服务器和上面运行软件的健康状态是至关重要的(从OS到用户交互应用)。大规模监控整个环境需要能够采集和存储来自于不同数据源的各种参数的监控系统。每个公司有自己的办法。一些公司使用商业工具来收集和展示参数;而其他一些公司采用开源框架。 StumbleUpon 创建了一个开源框架,用来收集服务器的各种监控参数。按照时间收集参数一般称之为时间序列数据:也就是说,按照时间顺序收集和记录数据。StumbleUpon 的开源框架叫做OpenTSDB,其含义是开放时间序列数据库 Open Time Series Database 。这个框架使用HBase作为核心平台来存储和检索所收集的参数。创建这个框架的目的是为了拥有一个可扩展的监控数据收集系统,一方面能够存储和检索参数数据并保存很长时间,另一方面如果需要增加功能也可以添加各种新参数。StumbleUpon 使用OpenTSDB监控所有基础架构和软件,包括HBase机群自身。我们将在第7章作为建构在HBase之上的示例应用来详细介绍OpenTSDB。 捕获用户交互数据:Facebook和StumbleUpon 捕获监控数据是一种使用方式。还有一种是捕获用户交互数据。如何跟踪数百万用户在网站上的活动?怎么知道哪一个网站功能是最受欢迎的?怎样使得这一次的网页浏览直接影响到下一次?例如,谁看了什么?某个按钮被点击了多少次?还记得Facebook和Stumble 里的Like按钮和StumbleUpon 里的+1 按钮吗?是不是听起来像是一个计数问题?每次用户Like一个特定主题计数器增加一次。 StumbleUpon 在开始阶段采用MySQL,但是随着网站服务越来越流行,这个技术选择遇到问题了。急剧增长的用户在线负载需求远远超过了MySQL机群的能力,最终StumbleUpon 选择HBase来替换这些机群。当时,HBase产品不能直接提供必须的功能。StumbleUpon 在HBase上做了一些小的开发改动,后来这些开发工作贡献回了项目社区。 FaceBook使用HBase的计数器来计量人们Like特定网页的次数。内容原创人和网页主人可以得到近乎实时的、多少用户Like他们网页的数据信息。他们可以因此更敏捷地判断应该提供什么内容。Facebook 为此创建了一个叫Facebook Insight的系统,该系统需要一个可扩展的存储系统。公司考虑了很多种可能,包括关系型数据库、内存数据库、和Cassandra数据库,最后决定使用HBase。基于HBase,Facebook 可以很方便地横向扩展服务规模,提供给数百万用户,也可以继续使用他们已有的运行大规模HBase机群的经验。该系统每天处理数百亿条事件,记录数百个参数。 TELEMETRY:MOZILLA 和 TREND MICRO 软件运行数据和软件质量数据,不像监控参数数据那么简单。例如,软件崩溃报告是有用的软件运行数据,经常用来探究软件质量和规划软件开发路线图。HBase可以成功地用来捕获和存储用户计算机上生成的软件崩溃报告。这种使用场景不像前两种使用场景,和网络服务应用不一定有关系。 Mozilla基金会负责FireFox网络浏览器和Thunderbird电邮客户端两个产品。这些工具安装在全世界数百万台计算机上,支持各种操作系统。当这些工具崩溃时,会以Bug报告的形式返回一个软件崩溃报告给Mozilla。Mozilla如何收集这些数据?收集后又是怎么使用呢?实际情况是这样的,一个叫做Socorro的系统收集了这些报告,用来指导研发部门研制更稳定的产品。Socorrade系统的数据存储和分析建构在HBase上。 [1] 采用HBase使得基本分析可以用到比以前多得多的数据。这种分析用来指导Mozilla的开发人员,使其更为专注,研制出Bug最少的版本。 Trend Micro为企业客户提供互联网安全和入侵管理服务。安全的重要环节是感知,日志收集和分析对于提供这种感知能力是至关重要的。Trend Micro使用HBase来管理网络信誉数据库,该数据库需要行级更新和支持MapReduce批处理。有点像Mozilla的Socorro系统,HBase也用来收集和分析日志活动,每天收集数十亿条记录。HBase中灵活的模式支持数据结构出现变化,当分析流程重新调整时Trend Micro可以增加新属性。 广告效果和点击流 过去的十年,在线广告成为互联网产品的一个主要收入来源。提供免费服务给用户,在用户使用服务的时侯投放广告给目标用户。这种精准投放需要针对用户交互数据做详细的捕获和分析,以便于理解用户的特征。基于这种特征,选择并投放广告。精细的用户交互数据带来更好的模型,进而导致更好的广告投放效果和更多的收入。但这类数据有两个特点:它以连续流的形式出现,它很容易按用户划分。理想情况下,这种数据一旦产生就能够马上使用,用户特征模型可以没有延迟地持续优化——也就是说,以在线方式使用。 在线 VS 离线系统 在线和离线的术语多次出现。对于初学者来说,这些术语描述了软件系统执行的条件。在线系统需要低延迟。某些情况下,系统哪怕给出没有答案的响应,也要比花了很长时间给出正确答案的响应好。你可以把在线系统想象为一个跳着脚的没有耐心的用户。离线系统不需要低延迟,用户可以等待答案,不期待马上给出响应。当实现应用系统时在线或者离线的目标影响着许多技术决策。HBase是一个在线系统。和Hadoop MapReduce的紧密结合又赋予它离线访问的能力。 HBase非常适合收集这种用户交互数据,HBase已经成功地应用在这种场合,它可以增量捕获第一手点击流和用户交互数据,然后用不同处理方式(MapReduce是其中一种)来处理数据(清理、装饰、使用数据)。在这种公司,你会发现很多HBase案例。 1.
总结下securecrt传文件的三种方式. 1. scp scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 [...] [[user@]host2:]file2 2. ZMODEM file send/recv rz 会出个对话框让你选择文件 sz filename 3. sftp securecrt 按下ALT+P就开启新的会话 进行ftp操作。
1、新UAT数据库创建和数据库安装文档整理。之前测试环境UAT数据库只有一个。现在增加了一个新UAT数据库。在安装过程中整理了安装文档出来。以后若是有人要安装数据库,就可以按着文档操作。节省时间。
2、日志系统研究。目的是为了方便以后开发人员看日志。最后采用了LJ的方案。现在系统还在测试中,需要完善。自己也了解了一些开源工具,收货颇多。
3、Loadbalance自动切换功能研究。通过命令行的方式来切换,方便简单。只要脚本写对,切换就不会出错。还能避免手工误点鼠标的情况发生。减少错误,节省时间。
4、软硬件资产到期报警。不再需要人工去查看资产的过期时间。快到期时会自动提醒,提前告知,方便管理。
5、数据库表空间报警脚本编写。现在已经使用。监控测试环境数据库空间的使用情况,如果空间不足则自动报警。方便运维和主动管理。
6、测试环境oracle数据库统计信息入库。以前我们队测试环境的数据库使用情况是一片空间,现在我们一目了然,做到心里有数。
7、协助清理静态资源。字符处理,文本处理,脚本编写,测试。
8、OSB系统的搭建和文档整理。因为测试环境的OSB系统还没有相关文档教程。就研究学习了OSB的安装并在安装过程中截图记录整理成文档。以后测试环境OSB系统要新建就方便很多。
9、加基调监控。给I部和预付卡部加基调监控。在网页不可用时基调监控会自动报警,让我们第一时间得知情况,减少宕机时间。
10、编写了几个常用的SQL脚本。放在svn上,大家都能找得到。以后再查看数据库性能时,不需要再手动编写SQL,节约时间。方便以后的运维。
11、给微信项目搭建UAT环境的jenkens。熟悉和了解了jenkens的一些常用操作。这个项目的具体用途不是很清楚。
大的项目就是这些了。小的就没写。不过这里面也有一些挺小的我也写了。多了可删,少了还得补嘛。
用IT技术玩金融系列文章,将介绍如何使用IT技术,处理金融大数据。在互联网混迹多年,已经熟练掌握一些IT技术。单纯地在互联网做开发,总觉得使劲的方式不对。要想靠技术养活自己,就要把技术变现。通过“跨界”可以寻找新的机会,创造技术的壁垒。
金融是离钱最近的市场,也是变现的好渠道!今天就开始踏上“用IT技术玩金融”之旅!
关于作者:
张丹(Conan), 程序员Java,R,PHP,Javascriptweibo:@Conan_Zblog: http://blog.fens.meemail: bsspirit@gmail.com 转载请注明出处:
http://blog.fens.me/finance-treasury-bond/
前言
国债,是国家信用为基础,各种市场经济定价的基准利率。了解国债,我们才能看得懂政策,看明白市场。
注:本人金融入门级,如果文章描述不对或者不准确的地方,还请专家指点。
目录
国债基本介绍记账式国债国债101308国债的历史表现 1. 国债基本介绍 国债,又称国家公债,是国家以其信用为基础,按照债的一般原则,通过向社会筹集资金所形成的债权债务关系。国债是由国家发行的债券,是中央政府为筹集财政资金而发行的一种政府债券,是中央政府向投资者出具的、承诺在一定时期支付利息和到期偿还本金的债权债务凭证,由于国债的发行主体是国家,所以它具有最高的信用度,被公认为是最安全的投资工具。
国债,是国家信用的主要形式。中央政府发行国债的目的往往是弥补国家财政赤字,或者为一些耗资巨大的建设项目、以及某些特殊经济政策乃至为战争筹措资金。由于国债以中央政府的税收作为还本付息的保证,因此风险小,流动性强,利率也较其他债券低。
国债利率应是资本市场的基准利率,而银行储蓄是无法起到这种信用工具作用的。
国债是由中央财政发行的,或者说,国债与国家发行的货币相比,是仅次于货币的一种信用凭证,几乎能够起到准货币的作用。由于国债的变现能力最强和最灵便,在所有的信用工具之中,国债的利率只能是最低的。因而,国债的利率客观上要起到基准利率的的作用。
在资本市场中,规范的市场运作应保持国债利率的基准利率地位,凡不能使国债利率成为基准利率的市场信用关系,必定是不规范的。同样,国债的这一信用功能也是银行储蓄所不具备的。在有国债存在的前提下,银行储蓄的利率不应该也不允许成为基准利率,除非金融市场的信用关系是扭曲的。这也就是说,在现实生活中,出现国债利率高于银行储蓄利率的情况,是不正常的,是国债的发行不符合现代资本市场基本运作模式要求的一种明显表现。
国债的意义
1. 筹措军费
在战争时期军费支出额巨大,在没有其他筹资办法的情况下,即通过发行战争国债筹集资金。发行战争国债是各国政府在战时通用的方式,也是国债的最先起源。
2. 平衡财政收支
一般来讲,平衡财政收支可以采用增加税收、增发通货或发行国债的办法。
增加税收: 是取之于民用之于民的作法,固然是一种好办法但是增加税收有一定的限度,如果税赋过重,超过了企业和个人的承受能力,将不利于生产的发展,并会影响今后的税收。增发通货: 是最方便的作法,但是此种办法是最不可取的,因为用增发通货的办法弥补财政赤字,会导致严重的通货膨胀,其对经济的影响最为剧烈。在增税有困难,又不能增发通货的情况下,采用发行国债的办法弥补财政赤字,还是一项可行的措施。政府通过发行债券可以吸收单位和个人的闲置资金,帮助国家渡过财政困难时期。但是赤字国债的发行量一定要适度,否则也会造成严重的通货紧缩。 3. 筹集建设资金
国家要进行基础设施和公共设施建设,为此需要大量的中长期资金,通过发行中长期国债,可以将一部分短期资金转化为中长期资金,用于建设国家的大型项目,以促进经济的发展。
4. 借换国债的发行
借换国债是为偿还到期国债而发行,在偿债的高峰期,为了解决偿债的资金来源问题,国家通过发行借换国债,用以偿还到期的旧债,“这样可以减轻和分散国家的还债负担。
国债的分类
从债券形式来看,我国发行的国债可分为凭证式国债、实物式国债、记账式国债三种。
凭证式国债:不能上市流通,从购买之日起计息。在持有期内,持券人如遇特殊 情况需要提取现金,可以到购买网点提前兑取。提前兑取时,除偿还本金外,利息按实际持有天数及相应的利率档次计算,经办机构按兑付本金的1‰收取手续费。实物式国债: 储蓄国债(也称电子式国债)是政府面向个人投资者发行、以吸收个人储蓄资金为目的,满足长期储蓄性投资需求的不可流通记名国债品种。电子储蓄国债就是以电子方式记录债权的储蓄国债品种。记账式国债: 以记账形式记录债权,由财政部发行,通过证券交易所的交易系统发行和交易,可以记名、挂失、可上市转让。投资者进行记账式证券买卖,必须在证券交易所设立账户。由于记账式国债的发行和交易均无纸化,所以效率高,成本低,交易安全。 摘自:http://baike.baidu.com/view/43705.htm
2. 记账式国债 记账式国债以记账形式记录债权、通过证券交易所的交易系统发行和交易,可以记名、挂失。投资者进行记账式证券买卖,必须在证券交易所设立账户。由于记账式国债的发行和交易均无纸化,所以效率高,成本低,交易安全。
通过交易所发行的记账式国债列表:
注:通过证券代码,可以自行查询对应的国债情况。
3. 国债101308 下面以101308国债做具体的解释。
2013 年记账式附息(八期)国债(以下简称”本期国债”)已发行结束,根据财政部
通知,本期国债于2013 年4 月24 日起在本所上市交易.
本期国债为7 年期固定利率附息式国债,证券编码”101308″,证券简称”国债130
8″, 票面利率3.29%,标准交易单位”10 张”,2020 年4 月18 日到期还本并支付最后
一期利息.
基本资料
债券名称 |2013年记账式附息(八期)国债债券简称 |国债1308债券代码 |101308国债类型 |附息债券发行日期 |2013-04-17发行量(元) |30000000000.
对于刚开始接触AWS的用户而言,区域(Region)和可用区(Availability Zone,AZ)这两个概念有点不好理解。初次接触时往往不知道它们跟我们日常说的数据中心是什么关系。然而区域和可用区是AWS中非常基础和重要的概念,因此我这里详细解释一下它们的一些来龙去脉。
我们知道云服务底层的物质基础是数据中心,但是一方面由于AWS目前的规模已经比较庞大,另一方面AWS需要服务全球不同地区的用户,因此AWS在全球建立了许多数据中心。那如何来组织和设计这些数据中心,从而让用户能够更为可靠的使用AWS提供的云服务,同时满足他们在法规遵循方面的要求呢?AWS巧妙的采用了区域和可用区两层设计架构,而不是直接使用数据中心概念。实际上这是一种IT系统架构中常用的抽象和解耦的方式,只不过这是在更宏观更高的层次——把AWS云服务与底层物理数据中心进行了解耦设计。
先来看一下区域(Region)概念。AWS云服务在全球不同的地方都有数据中心,比如北美、南美、欧洲和亚洲等。与此对应,根据地理位置我们把某个地区的基础设施服务集合称为一个区域。通过AWS的区域,一方面可以使得AWS云服务在地理位置上更加靠近我们的用户,另一方面使得用户可以选择不同的区域存储他们的数据以满足法规遵循方面的要求。在12月18日发布会之前全球有9个区域,包括:美东(北佛吉尼亚)、美西(俄勒冈)、美西(北加利佛尼亚)、欧洲(爱尔兰)、亚太(新加坡)、亚太(东京)、亚太(悉尼)、南美(圣保罗)和在美西服务政府的GovCloud区域。AWS中国(北京)区域将是亚马逊AWS在亚太地区的第4个区域,同时也是全球范围内的第10个区域。
总的来说,AWS的不同区域之间是相对独立的,但是它们的独立程度与区域的类别有关。根据目前10个区域的各自特点我们可以把它们分成3个不同的类别。第一类是GovCloud区域,主要是服务美国的政府机构和部分美国客户。GovCloud满足ITAR和FedRAMP等规范,具有独立的用户管理体系。用户使用GovCloud区域的AWS服务需要专门的申请和审核流程,所以这个区域跟我们中国用户关系不大。第二类是中国区域,这也是一个与其他区域独立的专门服务中国客户的区域。中国区域采用了独立的用户账户体系,也就是说用户需要在中国(北京)区域的网站上申请账户来使用这里的服务。最后一类的是目前其他8个区域。这8个区域是面向所有用户的,且共享同一个账户体系,所以用户注册AWS账户后可以使用所有这8个区域的服务。对于那些需要同时使用AWS这8个区域和AWS中国区域的用户来说,他们同时需要两个账户——一个在中国的区域使用,另一个在其他8个区域使用。
我们可以看出GovCloud区域和AWS中国区域都有自己独立的账户体系,与其他区域的服务是隔离的。对于其他8个区域,用户在不同区域存储的数据也都是相互独立的,也就是说AWS不会自动对用户数据进行跨区域的传输,这个对用户的法规遵循要求很重要。而且这8个区域的大部分AWS服务也是独立的,不过与中国区域和GovCloud区域完全独立不同的是有一些服务它们是共享的,比如它们共用一个账户体系和IAM服务,使用同一个AWS管理控制台,统一的Route53服务等。由于区域和区域之间相对独立,因此用户通过AWS管理控制台,CLI命令行和API操作AWS服务时,需要事先指定操作的对象是在哪个区域。以EC2的区域为例说明,每个区域都有自己对应的编码如下表所示:
许多AWS用户同时使用了多个区域,因此为了方便用户进行跨区域使用和部署服务,AWS目前也开始提供一些跨区域的服务,比如跨区域的EC2 AMI拷贝、跨区域的EBS快照拷贝、跨区域的RDS读拷贝等。不要需要指出的是所有这些跨区域操作都需要用户自己发起,而且这些跨区域操作只能在前面所说的8个区域之间进行。
AWS的每个区域一般由多个可用区(AZ)组成,而一个可用区一般是由多个数据中心组成。AWS引入可用区设计主要是为了提升用户应用程序的高可用性。因为可用区与可用区之间在设计上是相互独立的,也就是说它们会有独立的供电、独立的网络等,这样假如一个可用区出现问题时也不会影响另外的可用区。在一个区域内,可用区与可用区之间是通过高速网络连接,从而保证有很低的延时。AWS的区域与可用区的关系示意如下图所示:
每次当用户需要使用EC2相关资源的时候,他需要首先选择目标区域,如美东(北佛杰尼亚)us-east-1。然后在创建EC2实例的时候,用户可以选择实例所在的可用区,比如可以是us-east-1a或us-east-1b等。可用区的编码就是区域后面顺序添加不同的英文字母。为了尽可能让不同用户平均分布在不同的可用区,一个用户选择的us-east-1a与另一个用户选择的us-east-1a可能不是同一个可用区,AWS后台会根据实际资源情况进行映射,但同一个用户选择的某个可用区前后是固定的。如果用户在创建EC2实例的时候没有选择可用区,那么AWS会自动选择一个合适的可用区。AWS建议用户在设计应用架构的时候尽可能的把他们的应用分布在不同的可用区上面,从而提升他们应用的高可用性。应用和服务的多可用区的部署也是实现高服务水平协议的一个重要手段和要求。
出问题的代码:return new ModelAndView("redirect:" + targetUrl); 其中targetUrl是需要转向的目标URL,可能包含动态的参数。
springMVC在处理上述代码时,会认为这种redirect:XXX是一个View定义,会在其beanfactory中尝试寻找对应的 bean定义,在寻找过程中,会向其beanfactory内部的一个alreadyCreated Map变量中缓存本次寻找结果(key是viewName,value是布尔值true)。在存在巨量的重定向时,这个alreadyCreated就会引起内存泄漏。在spring的buglist中可以找到相同情况的说明:https://jira.springsource.org/browse/SPR-10065
spring提供了解决该问题的方案,但是,是通过一些个人觉得比较晦涩的用法,很容易会误用。(https://jira.springsource.org/browse/SPR-10065有说明),因此建议最好的方法是:在重定向中尽可能的避免使用spring提供的redirect:view视图。而使用标准的JEE API:
String encodedRedirectURL = response.encodeRedirectURL(targetUrl);
response.sendRedirect(encodedRedirectURL);
并且,该问题在测试过程中很容易会被忽略,因为每次向alreadyCreated Map中只增加一个URL字符串,每次泄漏的内存很微小,因此在压测过程中容易被忽略,但是长期积累就会引起问题。
正因为好的设计没有一个明确的度量标准,于是迪特·拉姆斯开始提出他认为好的设计应该具备的十条标准。(这些标准常被人们称为“设计十诫”)
好的设计(gutes Design)应具备的十项原则:
好的设计是革新的(Gutes Design ist innovativ.) 创新的可能性还远没有被穷尽。技术的发展不断为设计理念提供新的起点,以提升产品可用性。但设计的革新总应与技术的革新相连,永远不要为了设计革新而革新。 好的设计是实用的(Gutes Design macht ein Produkt brauchbar.) 产品是供人使用的,它应履行一定的功能——主要功能以及额外的心理和审美上的功能。好的设计是为了提升产品可用性,与此目的无关甚至相悖的一切都不应加以考虑。 好的设计是美观的(Gutes Design ist ästhetisch.) 产品的审美品质也是实用性的一部分,日常使用的器具影响着人们的生活环境和幸福感受。但只有真正优秀的产品才能是美的。 好的设计使产品易于理解(Gutes Design macht ein Produkt verständlich.) 设计应当以合理方式表明产品结构,让产品说话。最好的设计是自明的,它能够自己解释自己。 好的设计是谨慎克制的(Gutes Design ist unaufdringlich.) 履行某种功能的产品具有工具属性,它们既不是装饰物也不是艺术品。因此,它们的设计应该是中性的。器具应当隐退,为人的自我实现留出空间。 好的设计是诚实的(Gutes Design ist ehrlich.) 产品不应该看起来比实际上更创新、更高效和更有价值,它不试图通过无法兑现的承诺来操纵消费者。 好的设计是经久永恒的(Gutes Design ist langlebig.) 它避免迎合时尚,也因此不会过时。与短命的时尚设计形成鲜明对比,它即使在当今的一次性消费社会里也同样经久不衰。 好的设计在极细微处也维持一致(Gutes Design ist konsequent bis ins letzte Detail.) 不要容忍随意和偶然。设计的逻辑性和准确性,最终都是表达对消费者的尊重。 好的设计是环保的(Gutes Design ist umweltfreundlich.) 设计为保护环境作出了重要贡献。它涉及到节约资源,以及产品设计中最小化的物理和视觉污染。 好的设计是尽可能少的设计(Gutes Design ist so wenig Design wie möglich.) 少即是多。设计侧重于要领,而不是产品上多余的废物。设计应当回归纯粹,回归简单。
今天学习Oracle的时候遇到了rownum,并没有完全搞清楚,然后将查询条件中的rownum <= 10修改成了 rownum > 10,想查询出第十条记录之后的所有记录,结果什么都没查出来,一头雾水,后来百度了几个博客,终于搞明白了,做个笔记记录一下。
1、rownum运行原理 要想在使用的时候没有疑惑,必须先搞清楚它的运行原理,它到底做了哪些工作。
rownum是Oracle为查询结果集添加的一个伪列,之所以是伪列是因为它不属于查询表的一个列,而是Oracle在查询得到结果集之后添加的一个列。通俗一点讲就是为查询的记录添加一个序列号,这个序列号从1开始,然后递增,所以查询的结果中不能没有1这个序号。但这个序号存在的前提是查询的结果集已经存在了,不能在结果集之前有这个伪列。因此,如果按照以下查询,是没有结果的:
select * from student where rownum > 10;
当查询到一条数据后,rownum值为1,不符合条件,结果被丢掉,继续查询第二天数据,rownum又从1开始计数(rownum永远是从1开始递增),所以,这样把整个表遍历了一遍,但是一条数据都没筛选出来,因为rownum永远为1,永远不符合条件。如果是以下语句,结果就正确:
select * from student where rownum <= 10;(筛选前十条数据)
rownum开始值为1,符合条件,然后rownum递增到2,也符合条件……最后rownum递增到11,不符合条件了,所以查询出的就是前十条数据,正确。
还有以下几个例子,根据以上解释,这些结果也就不奇怪了:
select * from student where rownum > 0;(整个表的数据)
select * from student where rownum > 1;(一条数据都没有)
select * from student where rownum >= 1;(整个表的数据)
select * from student where rownum <= 1;(第一条数据)
2、嵌套使用rownum 按照以上所述,我们目前没有办法获取第十条之后的数据,但如果我们就是想获取该怎么办呢?这里就用到了嵌套select,如下:
select * from ( select rownum my_rownum, s.
本文以模拟项目开发过程的手段,详细描述svn的工作流程,本文旨在尽可能的覆盖一些常用情况,不可能模拟项目的方方面面。只要通过阅读一次流程,加之google和baidu的帮助,能够应付80%的项目开发足以……
基本流程以及遇到的困难的如下:
项目启动,研发三人:张三,李四,王五(为了减少不必要的复杂度,不设测试人员等),三个研发人员分别负责三个部分的研发:控制、存储和展示。另设项目经理,安排三名研发的工作,并负责svn标签以及里程碑的管理
新建一个svn项目管理目录 svn管理员:svnadmin create project_namesvn管理员:修改配置项,设定三人的权限,修改svn端口等
svn管理员:svn mkdir branches tags trunk(创建三个标准目录) checkout初始项目,并开始工作: 经理:创建文件 svn co svn://svn_addresscd trunktouch control.c store.c display.csvn add *svn ci -m 'starting working' 张三:开始编码,并提交更新 svn co svn://svn_addressvi trunk/control.csvn stsvn ci -F msg.file 李四:开始编码,并提交更新 svn co svn://svn_addressvi trunk/store.c
svn st
svn ci -F msg.file
王五:开始编码,并提交更新 svn co svn://svn_addressvi trunk/display.c
svn st
svn ci -F msg.file
三个人每天如此,编写自己的模块,定期提交一份可编译版本,由于编写的都是独立的文件,所以一直都相安无事好景不长,李四的模块相对简单,所以李四很快就把所有事情做完了,项目经理要求李四与张三双人开发,加快工作进度 李四:更新全部代码,方便与张三一起协作 svn upvi trunk/control.c 张三:依旧按照自己的节奏开发 vi trunk/control.c
svn st
svn ci -F msg.
前些日子参加提高班组织的数据采集工作,到各个二级学院搜集数据,当然离不开我们常用的Excel表格了。在这次采集数据的过程过程中还真学到了一两招。就比如在Excel中设置下拉选项的方法。
例如我们要在A2:A6单元格实现下拉选项列表。 1、选中A2:A6单元格,"菜单"—"数据有效性"(在Excel2013中为"数据验证")
2、然后弹出设置数据有效性窗口(Excel2013中为数据验证窗口),设置—有效性条件—序列
3、在来源位置,选择你想要下拉显示的区域,如果选项比较少的话,也可以手动输入,但要注意的是手动输入的时候各项应该用英文的逗号隔开。
手动输入如下:
4、查看效果
从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。
而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。
在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的:
指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
而在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
引用传递和指针传递是不同的,虽然它们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将影响不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量,那就得使用指向指针的指针,或者指针引用。
为了进一步加深大家对指针和引用的区别,下面我从编译的角度来阐述它们之间的区别:
程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变其指向的对象(指针变量中的值可以改),而引用对象则不能修改。
最后,总结一下指针和引用的相同点和不同点:
★相同点:
●都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。
★不同点:
●指针是一个实体,而引用仅是个别名;
●引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”,指针可以“见异思迁”;
●引用没有const,指针有const,const的指针不可变;
●引用不能为空,指针可以为空;
●“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小;
●指针和引用的自增(++)运算意义不一样;
●引用是类型安全的,而指针不是 (引用比指针多了类型检查)
在使用亚马逊云科技全球站点服务之前,你需要先注册一个亚马逊云科技全球服务账户(后面简称亚马逊云科技账户)。当你有了这个账户之后,你就可以方便的使用包括EC2、S3、RDS等亚马逊云服务目前在全球8个区域(Region)所提供的各种服务。由于亚马逊云科技提供了为期一年的免费使用套餐服务,所以你可以马上开始免费试用套餐内的各种服务。本文就简要描述一下亚马逊云科技账户注册的流程及相关的常见问题。 准备工作
在注册亚马逊云科技账户之前,你需要有:
1. 一个email账户,这个邮件地址会作为的亚马逊云科技账户名。
2. 一个电话,可以是固定电话或手机。注意,如果是固定电话,需要是你座位上伸手可及的,因为亚马逊云科技在注册过程中会致电给你。
3. 一个可以支付美元的信用卡,可以是Visa、MasterCard、American Express、Diners Club等多种信用卡。
当然,你还需要一台能够访问互联网的电脑,因为你要通过浏览器登录亚马逊云科技网站来进行注册操作。
具体操作步骤
注册亚马逊云科技账户需要登录我们亚马逊云科技全球网站http://aws.amazon.com。由于我们全球网站的内容目前还没有完全汉化,所以我后面的操作还是以英文为例描述。如果你的浏览器访问上面站点出现如下中文界面(部分浏览器会根据配置自动切换到中文网页http://aws.amazon.com/cn ),请点击右上角语言选项的下拉菜单并选择English。
你可以点击亚马逊云科技网站英文主页中的“Sign Up”按钮(或中文页面中的“注册”按钮)进入亚马逊云科技账户的注册页面。
从整体上,亚马逊云科技账户的基本注册步骤分为以下几步:
1. 创建账号(CREATE ACCOUNT)
2. 填写支付方式(PAYMENT METHOD)
3. 身份确认(IDENTITY VERIFICATION)
4. 选择支持计划(SUPPORT PLAN)
5. 最后确认(CONFIRMATION)
第一步:创建账号
你点击“Sign Up”按钮之后,就会进入下面页面:
在这一页请选择“I am a new user”,然后输入你的email地址。这邮件地址将是你注册后的主账户。点击“Sign in using our secure server”进入下一页来输入详细的登录信息,如下图:
这个页面需要输入你在页面上的显示名称,这里要提醒的是当你输入你的名字时,建议使用中文拼音或英文名字(后面需要输入信息的时候,都建议使用英文或拼音方式)。由于email地址很重要,所以这里还需要你重新确认一遍地址。最后输入你的账户密码,然后点击“Continue”进入下一页,进入填写联系信息和安全码验证页面如下:
上面联系信息中带星号为必填项目,建议都使用英文或拼音填写。
安全检查就是需要你根据你页面上显示的图像(一般是字母和数据的组合)输入相应的文本,如下图:
在输入完安全检查后,你需要勾选接受AWS服务的客户协议。最后,点击“Create Account and Continue”按钮完成账号创建。到这里,你的账号已经创建了,但是在使用AWS服务之前,你还需要进入下一步提供相应的支付等信息。
第二步:填写支付方式
在支付方式页面主要是两部分信息,一个是信用卡本身的信息,包括信用卡类别、卡号、姓名和有效期;另一个是账单地址,你可以输入一个新的地址,也可以使用前一步骤中输入的地址信息。
点击“Continue”按钮提交信用卡信息之后就进入下一步骤。
第三步:身份确认
用户的身份确认是通过电话来确定的,因此在这一步骤中你需要用你的电话来接听一个AWS从打给你的一个电话。身份确认的第一步就是需要输入你的电话号码,如下图:
输入完电话号码后,你就可以点击“Call Me Now”按钮来让AWS给你打电话确认,与此同时页面上会自动显示4位数字PIN码,如下图所示:
电话接通后,自动语音会用英文告诉你这是亚马逊AWS打给你的确认电话,请依次输入屏幕上的4位PIN码(知道为什么要有一个伸手可及的电话了吧J)。一般的,你根据提示输入正确的4位PIN码即可完成身份确认,同时屏幕会自动转入身份确认完成的页面。如果你输入错误的PIN码,屏幕会提示你输入了错误的PIN码,请你重新输入。由于电话信号等问题,偶尔也有用户遇到过即使输入了正确PIN码但还是提示不成功。这种情况大都可以换个电话解决,实在有困难可以跟亚马逊AWS联系解决。
第四步:选择支持计划
确认完身份后就进入服务支持类别的选择页面,如下图所示:
亚马逊AWS的技术支持服务分为4个不同的等级,包括:基本(Basic),开发人员(Developer),商用(Business)和企业(Enterprise)。在注册账户时,缺省的选项是免费的基本服务级别。你可以根据业务需求选择合适的技术支持服务等级。详细的技术支持服务的介绍请参考:http://aws.amazon.com/cn/premiumsupport/。
第五步:最后确认
点击上一步中的“Continue”按钮就进入最后确认页面,同时你的信用卡这时会被临时扣除1美元,主要是用户测试信用卡的支付是否正常(这个1美元最后会返回到你的信用卡)。你注册AWS服务所用的email会收到AWS发给你的一些确认邮件,同时注册页面也会显示确认信息页如下所示:
现在你可以通过点击“Launch the AWS Management Console”来开始登录AWS的管理控制台来使用AWS服务。当然,由于你已经注册成功AWS账户,现在你要输入你注册的email账户并且选择“I am a returning user and my password is:”,输入你注册时设置的口令就可以登录AWS的管理控制台服务,并开始使用AWS服务了!