DEM作为4D产品之一,在测绘生产中具有重要作用。利用DEM数据做作晕渲图,并对其进行分层设色,可以很好的反映一个地方的地形。下面以黑龙江省为例,采用90m分辨率的DEM数据,在ArcGIS 10.2中制作黑龙江省的晕渲图。
数据准备:黑龙江省90m分辨率的DEM数据,省、市(县)行政界线,市、县居民地,以及三级以上河流。
所用软件:ArcGIS 10.2
制作步骤:
1. 根据DEM生产山体阴影(HIllshade)
为了使晕渲图具有一定的立体效果,需要生成立体阴影,在ArcGIS的ArcToolbox中操作如下:按照顺序ArcToolbox -> 3DAnalyst Tools - > Raster Surface -> Hillshade,打开生成山体阴影的对话框,如图1所示,设置各项参数,各项参数的说明如下:
图1 Hillshade操作
Inputraster:生成山体阴影用到的DEM数据;
Output raster:输出山体阴影的路径和名称;
Azimuth:太阳方位角,控制的是山体阴影所在的方向,从正北方向起算,顺时针方向为正值,默认值为315;
Altitude:太阳高度角,控制的是太阳的高度,决定阴影的多少,以正东方向起算,逆时针方向为正值,默认值为45;
Z factor:垂直比例因子,决定山体阴影山脊线的精细程度,值越大,山脊线越突出,默认值为1。
以上各参数的设置,取决于所在地域的DEM数据。总体来说,太阳高度角越大,阴影越少,垂直比例因子越大,山脊线越突出。
生成的山体阴影是灰度的,现在将其按照灰度值增大设置为从绿至白的颜色,效果如下图2所示:
图2 山体阴影效果图(此处太阳方位角和高度角为默认值,垂直因子为3)
2. 对DEM数据进行分层设色
为了尽可能显示不同高程的变化,对DEM进行分类,此处采用ArcGIS自带的自然间隔分类方法,将其分为32类,且选用ArcGIS自带的色带Elevation #1(效果为,事实证明该色带效果好)对他们进行着色,效果如图3所示:
图3 DEM分层设色图
3. 山体阴影与DEM数据叠加
为了使晕渲图具有立体效果,且色彩丰富,在ArcGIS中同时添加上述生成的山体阴影图和DEM分层设色图,且将DEM分层设色图放在上面,将其透明度设置为60%,叠加的效果如图4所示;局部放大后的效果如图5所示。从图中可以看出,晕渲图的立体效果较好。
图4 叠加后的晕渲图
图5 放大后的效果图
4. 添加必要的行政界线、河流等信息
为了使晕渲图的信息更加完整,添加上黑龙江省市县行政界线,市县居民地以及三级以上河流,最终的效果如下图6所示:
图6 黑龙江省DEM晕渲图
以上步骤仅为ArcGIS中制作DEM晕渲图的基本步骤,还有很多需要完善的地方。生成山体阴影的参数,需要根据区域的高程特点设置,尤其是太阳高度角和垂直系数的设置,它们直接决定了阴影的多少和山脊线的精细程度。DEM分层的数量,也要根据实际情况来设置,总体而言,分层越多,细节越丰富。由于各地行政区划的调整,黑龙江省的行政界线可能与现实情况有所出入,请以黑龙江省最新的行政界线为准;
说明:此说明文档参考了仲佳、王永等人的论文《利用DEM制作晕渲图的方法讨论》。
这个已经在上一篇文章中说过
所以,还是检查参数
确认记账码等参数是否填写正确。
可加群:455101474
讨论问题。
Mysql 关键字-保留字
ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE CASE CHANGE CHAR CHARACTER CHECK COLLATE COLUMN CONDITION CONNECTION CONSTRAINT CONTINUE CONVERT CREATE CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR DATABASE DATABASES DAY_HOUR DAY_MICROSECOND DAY_MINUTE DAY_SECOND DEC DECIMAL DECLARE DEFAULT DELAYED DELETE DESC DESCRIBE DETERMINISTIC DISTINCT DISTINCTROW DIV DOUBLE DROP DUAL EACH ELSE ELSEIF ENCLOSED ESCAPED EXISTS EXIT EXPLAIN FALSE FETCH FLOAT FLOAT4 FLOAT8 FOR FORCE FOREIGN FROM FULLTEXT GOTO GRANT GROUP HAVING HIGH_PRIORITY HOUR_MICROSECOND HOUR_MINUTE HOUR_SECOND IF IGNORE IN INDEX INFILE INNER INOUT INSENSITIVE INSERT INT INT1 INT2 INT3 INT4 INT8 INTEGER INTERVAL INTO IS ITERATE JOIN KEY KEYS KILL LABEL LEADING LEAVE LEFT LIKE LIMIT LINEAR LINES LOAD LOCALTIME LOCALTIMESTAMP LOCK LONG LONGBLOB LONGTEXT LOOP LOW_PRIORITY MATCH MEDIUMBLOB MEDIUMINT MEDIUMTEXT MIDDLEINT MINUTE_MICROSECOND MINUTE_SECOND MOD MODIFIES NATURAL NOT NO_WRITE_TO_BINLOG NULL NUMERIC ON OPTIMIZE OPTION OPTIONALLY OR ORDER OUT OUTER OUTFILE PRECISION PRIMARY PROCEDURE PURGE RAID0 RANGE READ READS REAL REFERENCES REGEXP RELEASE RENAME REPEAT REPLACE REQUIRE RESTRICT RETURN REVOKE RIGHT RLIKE SCHEMA SCHEMAS SECOND_MICROSECOND SELECT SENSITIVE SEPARATOR SET SHOW SMALLINT SPATIAL SPECIFIC SQL SQLEXCEPTION SQLSTATE SQLWARNING SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT SSL STARTING STRAIGHT_JOIN TABLE TERMINATED THEN TINYBLOB TINYINT TINYTEXT TO TRAILING TRIGGER TRUE UNDO UNION UNIQUE UNLOCK UNSIGNED UPDATE USAGE USE USING UTC_DATE UTC_TIME UTC_TIMESTAMP VALUES VARBINARY VARCHAR VARCHARACTER VARYING WHEN WHERE WHILE WITH WRITE X509 XOR YEAR_MONTH ZEROFILL MySQL允许部分关键字用做未引起来的识别符,因为许多人以前曾使用过它们。下面列出了一些例子:
以SIM900A 的GSM/GPRS模块为例。从模块的AT指令手册可以看到有获取UTC(世界时间)的指令:AT+CLTS。当用该指令去获取时间时,从调试助手看到模块只返回OK,之后再无响应。后来在网上查到网友说该模块受到当地运营商权限限制,不一定所有都能授UTC时间,所以该指令只能作废。
在手册中还能看到AT+CCLK指令,该指令其实是设置和获取模块内部RTC时间。但是模块的使用过程经常会涉及上电和掉电情况,RCT无法从始至终的一直工作。
所以,要想获取一个正常持续的时间,只能由模块在线的获取一个时间,将该时间在写入RTC中,这样再不断的从RTC里获取实时时间。如果掉电后上电,模块再在线获取时间并写入RTC。这样就能持续稳定并且获取到正常的时间。
但是问题来了,模块如何才能在线的获取一个正确时间,AT+CLTS也无法使用。庆幸的是,网上有人提到可以用NTP服务器(世界授时服务器)来获取UTC时间,这真是个好方法,也就是说,通过模块连接到这么一个服务器,它会发给你正确的时间。但是NTP服务器都有哪些呢,地址和端口都多少。通过网上的搜寻,找了很多这样的服务器,国内外都有,可是死活就是有的连上不给时间,有的压根连不上,我不懂是不是端口号或者协议啥的问题。尝试了很多,最终终于找到一个比较稳定的授时服务器,亲测稳定能用,这里分享给大家,IP是:time.nist.gov,端口:13 TCP协议。这个还是比较稳定的,是一个外国的授时服务器。该服务器只要连接成功后就会在几秒钟内把时间发给你,并且自动断开连接。
连接和获取过程如下:
时间是给你了,下面的问题就是如何把里面的年月日等依次提取出来,并把时间再通过AT+CCLK写入RTC中。而模块RTC的时间设置格式为:AT+CCLK="16/06/18,13:11:52+08" 这样形式,所以提取出的时间还得转成这样格式的字符串。由于获取服务器时间需要较等待,所以当正常工作过程中,单片机只要获取这个模块内RTC时间就可以,可以发送“AT+CCLK?” 反馈回来的时间格式也是"16/06/24,13:11:52+08" 这样格式,再将里面的年月日等提取出来就可以了。这些主要就是对字符串的操作处理。具体我给出自己写的处理获取过程:
/*******************************************************************************
* 函数名 : TimeGetWait
* 描述 :获取Time信息(连接服务器成功情况下)
* 输入 : * 输出 : * 返回 : * 注意 : *******************************************************************************/
void TimeGetWait()
{
u8 i =0;
char timestr1[200]={0};
char *timestr = timestr1;//指向timestr1地址
while(1)
{
if(strstr(Uart2_Buf , "+IPD") != NULL)
{
timestr = strstr(Uart2_Buf , "+IPD");//Uart2_Buf 为接收缓存数组
break;
}
}
delay_ms(5);
//提取UTC世界时间
for(i = 0 ; i <50 ; i++)
http://blog.csdn.net/qq_31570685/article/details/51757351 hbase集群的搭建
步骤1:新创建一个Java Project 步骤2:导入JAR包 全部来源于官方文档(hbase-1.1.2-bin.tar.gz)解压后,xx\hbase-1.1.2\lib*.jar
步骤3:修改开发机的hosts文件
步骤4:修改虚拟机的配置文件
步骤5:实现查询、新建、删除等
package hbase; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.filter.Filter; import org.apache.hadoop.hbase.filter.SingleColumnValueFilter; import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; import org.apache.hadoop.hbase.util.Bytes; import org.junit.Before; import org.junit.Test; public class HBaseDemo { // 与HBase数据库的连接对象 Connection connection; // 数据库元数据操作对象 Admin admin; @Before public void setUp() throws Exception { // 取得一个数据库连接的配置参数对象 Configuration conf = HBaseConfiguration.
R的源起
R是S语言的一种实现。S语言是由 AT&T贝尔实验室开发的一种用来进行数据探索、统计分析、作图的解释型语言。最初S语言的实现版本主要是S-PLUS。S-PLUS是一个商业 软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善。后来Auckland大学的Robert Gentleman 和 Ross Ihaka 及其他志愿人员开发了一个R系统。R的使用与S-PLUS有很多类似之处,两个软件有一定的兼容性。
R is free
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输入,可实现分支、循环,用户可自定义功能。
R是一个免费的自由软件,它有UNIX、LINUX、MacOS和WINDOWS版本,都是可以免费下载和使用的,在那儿可以下载到R的安装程序、各种外挂程序和文档。在R的安装程序中只包含了8个基础模块,其他外在模块可以通过CRAN获得。
R的特点
(1) 有效的数据处理和保存机制。
(2) 拥有一整套数组和矩阵的操作运算符。
(3) 一系列连贯而又完整的数据分析中间工具。
(4) 图形统计可以对数据直接进行分析和显示,可用于多种图形设备。
(5) 一种相当完善、简洁和高效的程序设计语言。它包括条件语句、循环语句、用户自定义的递归函数以及输入输出接口。
(6) R语言是彻底面向对象的统计编程语言。
(7) R语言和其它编程语言、数据库之间有很好的接口。
(8) R语言是自由软件,可以放心大胆地使用,但其功能却不比任何其它同类软件差。
(9) R语言具有丰富的网上资源
一 入门训练
1. 获取帮助
> help.start() 开启帮助文档
>help(solve) 显示某命令的帮助信息,或者
>?solve
对于由特殊字符指定的功能,这些参数必须用单引号或双引号括起来,使之成为一个“字符串”,如
> help("[[")
与某个主题相关的例子通常可以用下面的命令得到
> example(topic)
2. 命令简介
R对大小写是敏感的;名称不能以数字开始;
基本的命令由表达式或者赋值语句组成。如果一个表达式被作为一条命令给出,它将被求值、打印而表达式的值并不被保存。一个赋值语句同样对表达式求值之后把表达式的值传给一个变量,不过并不会自动的被打印出来;
命令由分号(;)来分隔,或者另起新行;
基本命令可以由花括号(f和g)合并为一组复合表达式;
注释几乎可以被放在任何地方,只要是以井号( # )开始,到行末结束;
如果一个命令在行莫仍没有结束,R将会给出一个不同的提示符,默认的是‘+’。
3. 命令文件的执行和输出转向到文件
如果命令存储于一个外部文件中,比如工作目录work中的commands.R,他们可以随时在R的任务中被执行
> source("commands.R")在Windows中Source也可以由File菜单执行。
函数sink,
> sink("record.lis")
将把所有后续的输出由终端转向一个外部文件,record.lis。命令
最近在做一个采用了 MyBatis 框架的项目时,遇到一个这样的问题: 数据库中有一个表,表中有一个字段允许为空,因此,在 Java 代码中为这个表插入数据时,我们通常对该字段的处理大概是这样的:如果有值,自然是通过其 setter() 方法设置上即可;如果没有值,情况稍微麻烦一点点,一种做法是通过 setter() 方法传入 null 值,另一种做法是什么都不做(即不调用 setter() 方法)。对于以上两种情况,有值时自然一切顺利(除非你的程序设计本身烂得不行偷笑);如果没有值时,问题接着就来了,运行时将抛出一类似以下这样的异常: org.springframework.jdbc.UncategorizedSQLException: Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters... 经过仔细研究和查阅资料,终于知道问题的根源了。原来出现这个异常的原因在于,MyBatis 不知道你传入的 null 参数对应的 jdbc 类型是什么,因为在 MyBatis 看来,null 在数据库中可以为多种类型(例如,可以为 CHAR、VARCHAR、DATE 等),于是 MyBatis 就傻眼了,解决办法自然是你要告诉 MyBatis 这个 null 对应的 jdbc 类型是什么。于是得出的答案如下: 在你相应的 Mapper 中,传入该参数的地方写明 jdbc 类型即可,比如原来传参数是这样写的:#{myNullParameter},把它改成这样写即可:#{myNullParameter, jdbcType=VARCHAR} OK,问题得以解决,祝君好运··· 注:如果转载,请注明出处,尊重作者就是尊重自己~
http://www.jianshu.com/p/216b03c22bb8
总结: 同一task内的activity可以是来自不同进程的activity栈内的activity不会重新排序,只能push或者popstandard模式允许多实例,可以在不同的tasksingleTask的activity只会存在一个实例singleTask的activity如果设置了独立的taskAffinity属性值,启动时就会在新的task中,否则会在已有task中singleTask的activity启动时,它会在目标task(新的task或者已有task)中查看是否已经存在相应的activity实例,如果存在,就会把位于这个activity实例上面的activity全部销毁(pop, destroy)掉,即最终这个activity实例会位于任务的堆栈顶端中 task task是一个从用户角度出发的概念,它是一些activity的组合,它们组合起来是为了让用户完成某一件工作(或者说操作)。
task内的activity们以栈的形式组织起来,也就是back stack了。栈内的activity不会重新排序,只能push或者pop。栈内的activity可以来自不同的app,因此可以是运行在不同的进程,但是它们都属于同一个task内。
安卓系统是实时多task系统,用户可以随意在多个task之间切换。当一个task的栈内所有activity都pop之后,task也就销毁了。有时系统为了回收内存,会销毁activity,但是task不会销毁。
activity在manifest中有launchMode选项,可以配置其启动的模式。标准模式下,允许一个activity同时存在多个实例,既可以在同一个task,也可以在不同task。manifest可以指定launchMode,intent可以指定intent flag,前者供被启动者使用,后者供启动者使用,同时使用时后者会覆盖前者。
launchMode standard,默认模式,允许多实例singleTop,相比于standard,有新的启动请求时,只有在目标activity处于当前栈顶时,才会调用onNewIntent()而不创建新实例,其他情况都和standard一致singleTask,(这段摘自老罗的博客)设置了”singleTask”启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。因此,如果我们想要设置了”singleTask”启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。如果设置了”singleTask”启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。singleInstance,和singleTask相比,不同点在于singleInstance activity所在的task只会有这一个activity返回导航:singleTask和singleInstance启动的activity,尽管可能不在同一个task,但是仍然会回到原来的activity;但是singleTask可能会存在back stack“拼接”的情况 launchMode验证测试 主要测试的是singleTask这一属性,其他的文档描述都比较清楚,也不容易产生误解。两组实验,不设置taskAffinity和设置taskAffinity时,singleTask的行为。对比两者“最近任务”,dumpsys,logcat,返回导航的差异。
测试1 不设置taskAffinity,MainActivity -> SingleTaskFirstActivity -> SimpleActivity -> SingleTaskSecondActivity -> 选择图片Intent,再一路返回。
最近任务内只能看到一个TaskDemo的任务,dumpsys的结果如下:
所有的activity均在同一个task内,验证了老罗的结论。另外注意标红的两处,它们的ProcessRecord对象不同,ImageGallery和SingleTaskActivity处于不同的进程,也验证了前文所述“可以运行在不同的进程”。
logcat日志如下:
一路返回依次回到SingleTaskSecondActivity, SimpleActivity, SingleTaskFirstActivity,MainActivity, 桌面。
测试2 设置SingleTaskFirstActivity的taskAffinity为单独的值,MainActivity -> SingleTaskFirstActivity。
通过最近任务可以看到,有了两个TaskDemo的任务。而dumpsys结果如下:
可以看到,MainActivity和SingleTaskFirstActivity运行在了两个不同的task里面(栈底为MainActivity的t225, 栈底为SingleTaskFirstActivity的t226),但是他们仍属于同一进程。
我们接着启动SimpleActivity,再通过最近任务切换回t225,并且也启动SimpleActivity,这时通过dumpsys结果如下:
SimpleActivity同时存在两个实例,他们的hashCode是不同的,目前处于resumed状态的是在t225中的实例。
而通过查看logcat:
我们同样发现SimpleActivity被创建了两个实例。
此时我们通过最近任务切换回t226,并在此启动SingleTaskSecondActivity,查看dumpsys,然后再切换回t225也启动SingleTaskSecondActivity,查看dumpsys和logcat:
我们可以看到尽管第一次启动SingleTaskSecondActivity是在t226,但是SingleTaskSecondActivity实例却运行在t225中,为什么呢?因为SingleTaskSecondActivity并没有设置taskAffinity属性,所以它和MainActivity将会运行在同一个task中!和老罗的分析一致。而第二次启动时,并未创建新的SingleTaskSecondActivity实例,而是调用了它的onNewIntent方法,和文档描述一致。
现在我们测试一下返回导航,依次按下返回键,观察每次回到的activity,以及每次dumpsys的结果,以及logcat的结果:
第一次回到了t225的SimpleActivity,dumpsys:
第二次回到了t225的MainActivity,dumpsys:
第三次回到了t226的SimpleActivity,dumpsys:
第四次回到了t226的SingleTaskFirstActivity,dumpsys:
最后一次返回就回到了桌面。
logcat日志如下:
从上面的返回路径来看,确实验证了developer文档上关于back stack“拼接”的情况的描述,即:并不是按照most recent first的顺序返回的,而是优先把一个task的back stack(t225) pop完毕之后,再pop下一个task的back stack(t226)。
测试3 基于测试2的版本,MainActivity -> SingleTaskFirstActivity -> SimpleActivity,再切换回MainActivity,再启动SingleTaskFirstActivity。
查看最近任务,仍然有两个task,但是查看dumpsys以及logcat:
我们可以看到,第一次启动的SimpleActivity就被pop(destroy)了,从而把未在栈顶的SingleTaskFirstActivity提到了栈顶。这也验证了back stack内的activity不会重新排序,最会pop和push的事实。
变量名除了需要“$”进行标识外,还有一些规则需要遵守。就像拿到驾驶证以后,还得遵守交通规则。变量名的命名规则主要有三条:
1、变量名必须以字母或下划线 “_”开头,如”$_name”,”$name” ,”$name2”等,但是”$9name”是不对的。
2、变量名只能由字母、数字、以及“_”组成,还能包含汉字。如”$_qq”,”$qq308” ,”$my_apple”,“比如"$name我等”,但是”$name*”是不对的。
3、变量名不允许包含空格。当变量名由多个单词组成,建议使用“_”进行分隔(比如 $my_apple),俗称下划线法,或者以大写字母开头比如 $myApple,俗称骆驼式命名法(也称驼峰命名法)。
特别需要注意的是,在PHP中变量名是区分大小写的,如“$my_book”与“$my_Book”代表两个不同的变量。
Python中有join()和os.path.join()两个函数,具体作用如下:
join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串。
os.path.join(): 将多个路径组合后返回。
函数说明如下:
1、join()函数
语法: ‘sep’.join(seq)
参数说明: sep:分隔符,可以为空。 seq:要连接的元素序列、字符串、元组、字典。 上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串。
返回值:返回一个以分隔符sep连接各个元素后生成的字符串。
2、os.path.join()函数
语法: os.path.join(path1[,path2[,……]])
返回值:将多个路径组合后返回。
注:第一个绝对路径之前的参数将被忽略。
实例:
#对序列进行操作(分别使用' '与':'作为分隔符) >>> seq1 = ['hello','good','boy','doiido'] >>> print ' '.join(seq1) hello good boy doiido >>> print ':'.join(seq1) hello:good:boy:doiido #对字符串进行操作 >>> seq2 = "hello good boy doiido" >>> print ':'.join(seq2) h:e:l:l:o: :g:o:o:d: :b:o:y: :d:o:i:i:d:o #对元组进行操作 >>> seq3 = ('hello','good','boy','doiido') >>> print ':'.join(seq3) hello:good:boy:doiido #对字典进行操作 >>> seq4 = {'hello':1,'good':2,'boy':3,'doiido':4} >>> print ':'.
在使用git的时候我们有时候需要忽略一些文件或者文件夹。我们一般在仓库的根目录创建.gitignore文件
在提交之前,修改.gitignore文件,添加需要忽略的文件。然后再做add commit push 等
但是有时在使用过称中,需要对.gitignore文件进行再次的修改。这次我们需要清除一下缓存cache,才能是.gitignore 生效。
具体做法:
git rm -r --cached . #清除缓存 git add . #重新trace file git commit -m "update .gitignore" #提交和注释 git push origin master #可选,如果需要同步到remote上的话 这样就能够使修改后的.gitignore生效。
Javascript访问MYSQL
1、下载MYSQL的ODBC连接http://www.mysql.com/downloads/connector/odbc/; 2、在JS中建立ODBC连接如下: var con = new ActiveXObject("ADODB.Connection"); con.ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver};OPTION=3;SERVER=127.0.0.1;User ID=root;Password=123456;Database=mysql;Port=3306"; con.open; var rs = new ActiveXObject("ADODB.Recordset"); rs.open("select * from user", con); while (!rs.eof) { var u = rs.Fields("User"); document.write(u); rs.moveNext; } rs.close(); rs = null; con.close(); con = null; 需要注意连接字符串中Driver的名称与安装后的ODBC中的Drivers页中的MYSQL名称一致即可!
JavaScript中操作Mysql数据库实例教程 //创建数据库连接对象 var conn = new ActiveXObject("ADODB.Connection"); //创建数据集对象 var rs = new ActiveXObject("ADODB.Recordset"); try{ //数据库连接串,具体配置请参考:http://www.connectionstrings.com/ //如果不知道如何配置连接串,可以通过配置UDL文件后用文本编辑器打开获得 var connectionstring = "Driver={MySQL ODBC 5.2w Driver};Server=localhost;Database=myDataBase;User=myUsername; Password=myPassword;Option=3;Port=3306"; //打开连接 conn.
SHA有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。
对于长度小于2^64位的消息,SHA256会产生一个256位(32byte)的消息摘要。
#include <stdio.h>
#include <string.h> #include <stdlib.h> #define maxlen 1000000 typedef unsigned int uint; typedef unsigned char ubyte; typedef unsigned long long ull; char instr[maxlen]; const uint k[] = { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 }; void declare(){ printf("
默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限。
主流的有两种方法,改表法和授权法。
1、开启mysql的远程访问权限
登陆mysql,修改mysql库的user表,将host项,从localhost改为%。%这里表示的是允许任意host访问,如果只允许某一个ip访问,则可改为相应的ip,比如可以将localhost改为192.168.1.123,这表示只允许局域网的192.168.1.123这个ip远程访问mysql。
update user set host = '%' where user = 'root'; flush privileges; 2、防火墙开放3306端口 编辑防火墙配置文件
vi /etc/sysconfig/iptables 增加下面一行(注意:增加的开放3306端口的语句一定要在icmp-host-prohibited之前)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT重启防火墙 service iptables restart 若发生下面的错误 Can't get hostname for your addressConnection closed by foreign host修改数据库配置文件 vi /etc/my.cnf在[mysqld]节点下新增或修改如下两行 skip-name-resolve #忽略主机名的方式访问 lower_case_table_names=1 #忽略数据库表名大小写 重启MySQL服务就OK。
附:MySQL库名表名大小写问题
0:默认值,大小写敏感;注意:如果在大小写不敏感的文件系统上用lower_case_table_names=0强制设为0,并且使用不同的大小写访问MyISAM表名,会导致索引破坏。
1:表名在硬盘上以小写保存,名称对大小写不敏感。MySQL将所有表名转换为小写以便存储和查找。(建议值,我一般都设置为这个值,除非有特殊需求)
2:表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写进行保存,但MySQL将它们转换为小写以便查找。
http://www.cnblogs.com/yuanchongjie/p/4997134.html https://www.aswifter.com/2015/11/12/mastering-coordinator/ http://blog.csdn.net/feiduclear_up/article/details/46514791 https://github.com/sungerk/CoordinatorLayoutDemos http://blog.csdn.net/xyz_lmn/article/details/48055919 http://tianyejia.net/2016/03/28/Toolbar-CoordinatorLayout-AppBarLayout%E7%9A%84%E4%BD%BF%E7%94%A8/ http://haodada.me/2016/04/06/material-design%E4%B9%8Bcoordinatorlayout-appbarlayout-collapsingtoolbarlayout%E7%9A%84%E4%BD%BF%E7%94%A8/ http://www.iwankr.com/?p=674
http://www.voidcn.com/blog/u010399316/article/p-5698600.html
http://www.jianshu.com/p/f418bf95db2d
1. Android端进程被杀死后,目前自带的保护后台接收消息活跃机制。暂时没有什么好的机制保持任何情况下都活跃
文章参考:http://blog.csdn.net/marswin89/article/details/50917098
android原生系统用home键杀进程可以起来,如果是强行停止就只能用户自己手动开启应用
如果是miui等第三方应用,杀了进程默认无法自启动
如果是root过的原生系统,杀了进程也是没有办法起来的,这个时候推送是收不到的
如果是原生系统,没有root,只要不是强行停止,其他系统自带的停止方式都可以自启动,一般10s内恢复
目前已知以下第三方系统会影响到应用:
小米【MIUI】
自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程无法开启
通知栏设置:应用默认都是显示通知栏通知,如果关闭,则收到通知也不会提示
华为【Emotion】
自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程不会开启,只能手动开启应用
后台应用保护:需要手动把应用加到此列表,否则设备进入睡眠后会自动杀掉应用进程,只有手动开启应用才能恢复运行
通知管理:应用状态有三种:提示、允许、禁止。禁止应用则通知栏不会有任何提醒
魅族【Flyme】
自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程发开启
通知栏推送:关闭应用通知则收到消息不会有任何展示
VIVO【Funtouch OS】
内存一键清理:需要将应用加入【白名单】列表,否则系统自带的“一键加速”,会杀掉进程
自启动管理:需要将应用加入“i管家”中的【自启动管理】列表,否则重启手机后进程不会自启。但强制手动杀进程,即使加了这个列表中,后续进程也无法自启动。
OPPO【ColorOS】
冻结应用管理:需要将应用加入纯净后台,否则锁屏状态下无法及时收到消息
自启动管理:将应用加入【自启动管理】列表的同时,还需要到设置-应用程序-正在运行里锁定应用进程,否则杀进程或者开机后进程不会开启,只能手动开启应用
目前推送的保活机制基本上都是
一.依赖于系统广播的接收调用
常用的有:1.锁屏解锁广播2.网络状态改变广播3.安装包广播,卸载包广播4.存储器挂载卸载广播
android.intent.action.USER_PRESENT android.net.conn.CONNECTIVITY_CHANGE android.net.wifi.RSSI_CHANGED android.net.wifi.STATE_CHANGE android.net.wifi.WIFI_STATE_CHANGED
android.intent.action.MEDIA_UNMOUNTED
android.intent.action.MEDIA_REMOVED
android.intent.action.MEDIA_CHECKING
android.intent.action.MEDIA_EJECT
二.依赖于同一个手机上不同APP使用相同的SDK来相互拉起对方
通过LBE安全大师看QQ能通过个推,JPUSH,小米推送,微信开放平台接口广播,新浪SAE云推送,qq浏览器推送状态广播,手机QQ广播接收等多种推送方式相互唤醒
是否可以尝试按照QQ方式去实现。
尝试用com.tencent.mm包名,在魅族NOTE2上,在另外zzh中创建了个服务,服务里每隔一秒打印test,发现正常通过菜单关闭都可以继续执行,此时例子APP到缓存进程中继续运行,关闭缓存进程才彻底关闭。
QQ当我在魅族NOTE2上,把正在运行和缓存进程中的QQ杀掉后,并且没有其他QQ能唤醒的情况下,QQ也无法收到推送消息。
三.是否可以尝试依赖于某个手机自身的推送服务
逐个判断当前推送方式是否能成功,如果不能成功就换下种推送方式推送
或者在用户登陆APP后反馈登陆信息,根据反馈信息来首先使用当前手机得推送服务。
魅族没有自己的推送服务,此路不通
四.看到360手机助手怎么杀都杀不死
找到一个root的手机,如果不行就找个360一键root,adb shell进入后,执行su命令,当时root权限后,就进入到data/app中,把我需要的com.qihoo.appstore文件中base.apk复制到某个可以用文件夹(例如/mnt/sdcard/tmp)中,然后adb pull /mnt/sdcard/tmp c:\ 中,再通过反编译编译出代码,看看实现。
发现它有个deamon守护进程的库,libCoreDaemon.so看看怎么使用,发现一直无法加载该库,System.loadLibrary("CoreDaemon");报错,无法加载
1.尝试在魅族上使用微信的包名,发现通过菜单关闭APP,后台服务依然存在可以执行
2.反编译出360的JAVA代码,查看保活机制,没看懂,尝试使用它的第三方,发现无法加载
3.尝试集成了信鸽和JPUSH两个推送,发现存活率依然不高
4.尝试集成多个手机系统的消息推送,发现VIVO,魅族等没有推送服务
5.尝试闹钟唤醒,闹钟在5.1随着APP关闭也无效
6.GITHUB上找例子 JNI开启服务不行 前台服务也不行 双JAVA服务也不行
7.尝试ROOT后使用系统权限 没有ROOT方式,暂时没尝试
8.两个APP采用不同用户,一个关闭去拉起另外一个 暂时没有尝试
9.尝试微信或者QQ是否有广播,可以唤醒我们APP 没有发现什么广播可以唤醒
iPhone开发必不可少的要用到这两个方法。 他们都可以用来在视图载入的时候,初始化一些内容。 但是他们有什么区别呢? viewDidLoad 此方法只有当view从nib文件初始化的时候才被调用。viewDidLoad用于初始化,加载时用到的。 loadView 此方法在控制器的view为nil的时候被调用。 此方法用于以编程的方式创建view的时候用到。loadView是使用代码生成视图的时候,当视图第一次载入的时候调用的方法。用于使用(写)代码来实现控件。用于使用代码生成控件的函数。如:
- (void ) loadView { UIView *view = [ [ UIView alloc] initWithFrame:[ UIScreen mainScreen] .applicationFrame] ; [ view setBackgroundColor:_color] ; self.view = view; [ view release] ; } 你在控制器中实现了loadView方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view 控制器会收到didReceiveMemoryWarning的消息。默认的实现是检查当前控制器的view是否在使用。如果它的view不在当前正在使用的view hierarchy里面,且你的控制器实现了loadView方法,那么这个view将被release, loadView方法将被再次调用来创建一个新的view。 viewDidLoad ,不论是从xib中加载视图,还是从loadview生成视图,都会被调用。 UIViewController 的内存管理 在 iOS3.0 后,UIViewController 多了一个叫做 viewDidUnLoad 的方法。 先看下 UIViewController 从创建 view 到展示的流程的几个函数 -init -initWithNibName:bundle: 这两个方法都是初始化一个 vc,但请注意 view 不是这时候载入的 -loadView -viewDidLoad 当一个视图准备展现时,vc 首先会判断 view 是否已经创建否则便通过之前指定的 xib 文件来初始化 view,以及绑定其他关系(若没有指定 xib 文件,则默认会搜索和 vc 同名的 xib,比如 myNameViewController 就会搜索 myNameViewController.
1) Linux中主要有哪几种内核锁? 2) Linux中的用户模式和内核模式是什么含意? 3) 怎样申请大块内核内存? 4) 用户进程间通信主要哪几种方式? 5) 通过伙伴系统申请内核内存的函数有哪些? 6) 通过slab分配器申请内核内存的函数有? 7) Linux的内核空间和用户空间是如何划分的(以32位系统为例)? 8) vmalloc()申请的内存有什么特点? 9) 用户程序使用malloc()申请到的内存空间在什么范围? 10) 在支持并使能MMU的系统中,Linux内核和用户程序分别运行在物理地址模式还是虚拟地址模式? 11) ARM处理器是通过几级也表进行存储空间映射的? 12) Linux是通过什么组件来实现支持多种文件系通的? 13) Linux虚拟文件系统的关键数据结构有哪些?(至少写出四个) 14) 对文件或设备的操作函数保存在那个数据结构中? 15) Linux中的文件包括哪些? 16) 创建进程的系统调用有那些? 17) 调用schedule()进行进程切换的方式有几种? 18) Linux调度程序是根据进程的动态优先级还是静态优先级来调度进程的? 19) 进程调度的核心数据结构是哪个? 20) 如何加载、卸载一个模块? 21) 模块和应用程序分别运行在什么空间? 22) Linux中的浮点运算由应用程序实现还是内核实现? 23) 模块程序能否使用可链接的库函数? 24) TLB中缓存的是什么内容? 25) Linux中有哪几种设备? 26) 字符设备驱动程序的关键数据结构是哪个? 27) 设备驱动程序包括哪些功能函数? 28) 如何唯一标识一个设备? 29) Linux通过什么方式实现系统调用? 30) Linux软中断和工作队列的作用是什么? 转载于http://blog.chinaunix.net/u3/118354/showart_2311237.html 1. Linux中主要有哪几种内核锁? Linux的同步机制从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux从单处理器到对称多处理器的过渡; 伴随着从非抢占内核到抢占内核的过度。Linux的锁机制越来越有效,也越来越复杂。 Linux的内核锁主要是自旋锁和信号量。 自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。 Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。 信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。 Linux 内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,另外一些同步机制,包括大内核锁、读写锁、大读者锁、RCU (Read-Copy Update,顾名思义就是读-拷贝修改),和顺序锁。 2.
1、访问http://source.android.com/source/build-numbers.html
2、下载对应版本号以及对应的手机型号的脚本,
3、分别解压,并运行脚本,生成vendor目录
4、重新编译既可以刷到对应的
1、安装gradle,
注意android studio 或者NDK 都自带了gradle,所以没必要下载,直接设置一下环境变量既可以。
2、使用gradle clean 清除
3、使用gradle build 进行编译
附:创建autorun.sh 自动生成xxxxx.h的脚本
#!/bin/sh export ProjectPath=$(cd "../$(dirname "$1")"; pwd) export TargetClassName="com.jni.media.Media" export SourceFile="${ProjectPath}/app/src/main/java" export TargetPath="${ProjectPath}/app/src/main/jni" cd "${SourceFile}" javah -d ${TargetPath} -classpath "${SourceFile}" "${TargetClassName}" echo -d ${TargetPath} -classpath "${SourceFile}" "${TargetClassName}"
webstorm自带less,不过要编译的话需要nodejs环境。
首先去node的主页下载对应版本的nodejs然后安装,下载地址:http://nodejs.org/安装完之后打开命令提示符(win+r),分别输入node -v以及npm -v如果返回版本号说明你安装成功了。接下来就可以安装less了,命令提示符npm进入npm管理器,然后npm install less开始下载less,默认安装目录在用户名\node_modules这里面。到这里less安装完毕了,接下来配置webstorm。打开webstorm的file->settings ->External Tools,点击左上角的“加号”标志add,进入对话框
program里设置的是lessc的路径,这里的目录可以参考截图中红框中的目录,他会默认编译到根目录。例如:/Users/xx/node_modules/less/bin/lessc如果你想顺便压缩编译后的css,除了在Arguments中写入--plugin=less-plugin-clean-css外还要安装压缩插件:sudo npm install -g less-plugin-clean-css,这里要注意我安装的路径,如果最后less-plugin-clean-css的路径和上边的/Users/xx/node_modules/less不一个路径的话也跑步起来,这样怎么解决呢,可以直接将clean-css路径中的less-plugin-clean-css文件夹copy到/Users/xx/node_modules/中搞定
然后你可以为这个编译器指定一个快捷键,我使用的是ALT + B之后打开一个.less后缀名的文件,快捷键编译,如果webstorm底部状态控制器显示 Process finished with exit code 0 ,那么恭喜你,大功告成!
ios开发中经常遇到的数据如下的数据类型,uint8_t、uint16_t、uint32_t、uint64_t。
他们的意思分别是:
uint8_t 无符号1个字节的整型
uint16_t 无符号2个字节的整型
uint32_t 无符号4个字节的整型
uint64_t 无符号8个字节的整型
注:一个字节有8位。
之前项目中,用avalon写的一个模块,单独拿出来了,一个小弹窗的效果。
demo地址: http://www.hui12.com/nbin/demo/4a/4a.html
https://nbin2008.github.io/demo/avalonPop/index.html
html:
<div class="people-pop-shade" ms-controller="vmPeoplePop" ms-visible="toggleShade"> <div class="people-pop-box" ms-visible="togglePeopleBox"> <!-- head --> <div class="people-pop-head"> <span class="nb-fleft people-pop-head-title">自定义人群条件</span> <a href="javascript:;" class="nb-fRight people-pop-close" ms-on-click="hidePeopleBox">x</a> </div> <!-- content --> <div class="people-pop-content-box"> <!-- 待选标签 --> <div class="nb-fLeft people-pop-unChoose-box" id="people-pop-unChoose-box"> <div class="people-pop-unChoose-box-limit" ms-on-scroll="fnScroll"> <h3 class="people-pop-choose-title">待选标签</h3> <ul class="people-pop-unChoose-list"> <!-- 性别 --> <li class="nb-clear" unChooseType="gender"> <span class="tag">性别</span> <div ms-repeat-el="unChooseData.gender"> <span ms-attr-index="$index" ms-class="active:el.checkNums>0" ms-on-click="unChooseClick">{{el.dictName}}</span> <b class="people-pop-content-num-all" ms-if-loop="!(el.dictCode==allChoose||el.childList==null)" ms-visible="el.isAllCheck==1">all</b> <b class="people-pop-content-num-num" ms-if-loop="!(el.dictCode==allChoose||el.childList==null)" ms-visible="el.isAllCheck==null&&el.checkNums>0">{{el.checkNums}}</b> </div> </li> <!
转载地址:http://blog.csdn.net/yy1300326388?viewmode=contents
调试技巧;http://android.jobbole.com/83282/
http://www.tuicool.com/articles/UJRj6nv
http://www.2cto.com/kf/201506/408358.html
在用notepad++进行代码编辑的过程中,总感觉还是有keil那样可以进行多行注释的快捷方式方便,其实notepad++也可以进行单行、多行、区块注释和取消注释的。。。。。。。 快捷键如下: 单行、多行注释 //方式 :ctrl+k 区块注释 / * */方式 :ctrl+q 取消单行、多行、区块注释 :ctrl+shift+k 如果感觉默认的快捷键不方便,可以修改成自己习惯的快捷键:设置-管理快捷键-Mainmenu选项卡下的第42-44项是上述快捷键选中某项,点击下面的modify就可以换成自己习惯的方式啦~
常用数据库URL地址的写法: • Oracle写法:jdbc:oracle:thin:@localhost:1521:sid • SqlServer—jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sid • MySql—jdbc:mysql://localhost:3306/sid Mysql的url地址的简写形式: jdbc:mysql:///sid
打开gist的文件, 点击Raw。 打开后如下图,此时的地址便是wget的下载地址: wget上面的地址即可。如下图,下载成功。 对于curl应该也适用,找到真正的下载地址即可。
这样的话,就可以将一个无插件版本的vim配置文件放到GitHub的gist上托管,下次如果是需要到一台新的服务器上进行vim操作,直接wget下载该gist即可获得一个非常轻量实用的vim配置。
这里是我在gist托管的无插件vim配置,有兴趣的可以看一下:vim无插件实用配置
Visual Studio 2013/2015 搭配 Python Tools for Visual Studio 扩充套件让 Visual Studio 能提供对 Python 程序语言高度整合的开发环境,并完整发挥 Visual Studio 强大的功能,协助您在 Visual Studio 内开发 Python 程序上如虎添翼,提升开发效率!
以下将说明六项 Visual Studio 整合开发 Python 程序之优势功能。
整合 Python 直译器 (Interpreter) & 互动视窗 (Interactive)
整合 Python 虚拟开发环境 (Virtual Environment)
整合 Python 套件管理员 (Package Manager)
IntelliSense 对 Python 完整的支持
对 Python 使用侦错模式 (Debugging)
跨平台远端侦错 (Remote Debugging)
整合 Python 直译器 (Interpreter) & 互动视窗 (Interactive)
Visual Studio 高度整合 Python 直译器,让您能够在开发过程中切换不同版本的 Python 直译器。此项功能除了能够切换至您所熟悉的 Python 版本进行开发外,更可确保您的程序在不同 Python 版本下运行的函式相容性是合法的,如下图代码当中的 print 函式,在 Python 2.
jquery-cookie/1.4.1 貌似已经不更新了,可用cookie.js 在使用cookie 时 遇到 页面跳转,cookie消失的情况,我们可以在cookie后加一路径来解决这一问题。 $.cookie('cart_info', cookieStr, { expires: 30, path: '/' }); 注:在默认情况下,只有设置cookie的网页才能读取该cookie。如果想让一个页面读取另一个页面设置的cookie,必须设置cookie的路径。 cookie的路径用于设置能够读取cookie的顶级目录。将这个路径设置为网站的根目录,可以让所有网页都能互相读取cookie(一般不要这样设置,防止出现冲突)
目前只有Chrome支持获取剪切板中的图片数据。还好需要这个功能的产品目前只支持Chrome和Safari,一些Chrome的新特性是可以尽情使用了,还是能够覆盖到大部分用户的。所以本文只讨论Chrome如何使用和如何阻止Safari,原理大概了解了,再研究其他浏览器相关的问题就容易多了。
在线演示:
http://qingshanboke.com/Lab/LabPasteImage
主要代码:
// demo 程序将粘贴事件绑定到 document 上
document.addEventListener("paste", function (e) {
var cbd = e.clipboardData;
var ua = window.navigator.userAgent;
// 如果是 Safari 直接 return
if ( !(e.clipboardData && e.clipboardData.items) ) {
return;
}
// Mac平台下Chrome49版本以下 复制Finder中的文件的Bug Hack掉
if(cbd.items && cbd.items.length === 2 && cbd.items[0].kind === "string" && cbd.items[1].kind === "file" &&
cbd.types && cbd.types.length === 2 && cbd.types[0] === "text/plain" && cbd.types[1] === "Files" &&
ua.match(/Macintosh/i) && Number(ua.
解决方法:1、删除eclipse/configuration 目录下的 org.eclipse.osgi 和org.eclipse.update 两个子目录 2、重新启动 eclipse
数据库管理系统: RDBMS(Relational Databases Management Systems) PosterSQL 2. 数据仓库
长期存储数据
整合不同来源的数据(包括元数据)
多种格式存储数据
有助于高速检索的形式进行存储
结构化数据的提供者
帮助产生商业智慧
OLAP:通过限制,切割,过滤,向上钻取,向下钻取来处理数据
OLAP多维数据模型,俗称CUBE
数据聚合技术会整理总结大量数据
数据仓库的组件:
1.ETL
2.Warehouse
3.元数据
4.CUBE
5.报表和仪表
3.非关系型数据库
不按照表格或者键来存储的数据库
NoSQL Not Only SQL:
-键值数据库
-文档数据库
-列式数据库
-图数据库
-空间数据库
键值对模型(KVP):riak数据库
文档数据库:存储库(word files,web pages,static entity,Dynamic assembly)
JSON表示:javascript object notation
BSON表示:Binary JSON
MongoDB ,CouchDB
列式数据库:以列而不是以行来存储数据的
HBase
图数据库:Neo4j
空间数据库:基本的信息或者数据是跨多个地理区域和地点呈现的。
POST GIS/Open Geo Suite
流数据是;动态产生的数据
这样的数据需要复杂的事件处理算法
C语言虽然简单,但是重难点还是很多的,就比如让需要新手比较蛋疼的指针问题,但是深入学习之后指针才是碰到的第一个拦路虎,也是最简单的一个。比如声明问题,顶层const和底层const。今天说说后者。
声明问题可以理解为复杂指针,函数指针的声明和解读问题
int (*f(int, int))(int); // f 是一个有两个int类型参数的函数,函数返回指向具有一个参数为int类型,返回类型为int的函数指针 以下有几个栗子
int iVal = 520; // 第一个栗子 const int *pVal1 = &iVal; // 第二个栗子 int const *pVal2 = &iVal; // 第三个栗子 int * const pVal3 = &iVal; // 第四个栗子 int const * const pVal4 = &iVal; 分析 首先我们说说顶层const和底层const的通俗定义
顶层const: 表示指针本身是个常量,更简单的说顶层const作用对对象本身,表示对象自身是一个常量
底层const: 表示指针所指向的对象是个常量
所以有以下结论(个人总结) 将const考虑成向右结合
如果const右结合修饰的为类型或者*,那这个const就是一个底层const
如果const右结合修饰的为标识符,那这个const就是一个顶层const
const的影响 2017-02-11 更新: 书写错误
int const * const p; ^ ^ 1 2 底层const(上述代码中1的位置)主要影响的是指向的对象
顶层const表示为不能修改所指向的对象的值,即,所指向的对象是一个常量。
TI提供的SPR530(C2833x/C2823x C/C++ 头文件和外设示例)使我们非常方便的使用2833X和2823X的外设。下面就它定义的函数加一个说明。 // $TI Release: DSP2833x Header Files V1.10 $ // $Release Date: February 15, 2008 $ //**************在DSP2833x_Adc.c中定义的,共1个函数**************************// void InitAdc(void);//在DSP2833x_Adc.c中定义,初始化ADC,使能ADCCLK,调入ADC的出厂刻度数据,上电。 //**************在DSP2833x_DMA.c中定义的,共37个函数**************************// void DMAInitialize(void);//执行DMA硬件复位,设置DMA不受仿真器的影响。。 // DMA Channel 1 void DMACH1AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); //设置DMA的源和目标 void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); //设置每次Burst的字节数、源地址增量、目标地址增量。注意对于28335,BYTE和WORD是一样的,都是16BIT。 void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); //设置每次传送包含多少个Burst、传送完毕发中断,源地址增量、目标地址增量 void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); //设置传送完毕的源地址和目标地址 void DMACH1ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); //设置DMA工作模式,包括触发源、是否使能触发源、是否使能oneshot模式、是否使能Continuous模式、是否使能外围设备同步、选择同步模式、溢出中断等。) 参数说明: persel--选择触发源,值为下列选项 DMA_SEQ1INT--------ADC DMA_SEQ2INT--------ADC DMA_XINT1 --------外部中断 DMA_XINT2 --------外部中断 DMA_XINT3 --------外部中断 DMA_XINT4 --------外部中断 DMA_XINT5 --------外部中断 DMA_XINT6 --------外部中断 DMA_XINT7 --------外部中断 DMA_XINT13 --------外部中断 DMA_TINT0 --------CPU时钟 DMA_TINT1 --------CPU时钟 DMA_TINT2 --------CPU时钟 DMA_MXEVTA --------McBSP-A DMA_MREVTA --------McBSP-A DMA_MXREVTB --------McBSP-B DMA_MREVTB --------McBSP-B perinte--使能触发源,值为PERINT_DISABLE或PERINT_ENABLE oneshot--使能oneshot模式,值为ONESHOT_DISABLE或ONESHOT_ENABLE。此模式下,一次触发完成全部burst。 cont--使能Continuous模式,值为CONT_DISABLE或CONT_ENABLE。此模式下,传送完毕后DMA重新被初始化,并等待触发源。 synce--使能外围设备同步,值为SYNC_DISABLE或SYNC_ENABLE。 syncsel--同步选择。值为SYNC_SRC或SYNC_DST。 ovrinte--使能溢出中断。值为OVRFLOW_DISABLE或OVEFLOW_ENABLE。 datasize--每次传送位数。值为SIXTEEN_BIT或THIRTYTWO_BIT。 chintmode--通道中断产生模式。CHINT_BEGIN:传送开始发中断。CHINT_END:传送结束发中断。 chinte--使能通道中断。值为CHINT_DISABLE或CHINT_ENABLE。 void StartDMACH1(void); //启动DMACH1 //其它5个通道的DMA的函数功能含义是一样的 // DMA Channel 2 void DMACH2AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); void DMACH2BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); void DMACH2TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); void DMACH2WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); void DMACH2ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); void StartDMACH2(void); // DMA Channel 3 void DMACH3AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); void DMACH3BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); void DMACH3TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); void DMACH3WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); void DMACH3ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); void StartDMACH3(void); // DMA Channel 4 void DMACH4AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); void DMACH4BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); void DMACH4TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); void DMACH4WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); void DMACH4ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); void StartDMACH4(void); // DMA Channel 5 void DMACH5AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); void DMACH5BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); void DMACH5TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); void DMACH5WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); void DMACH5ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); void StartDMACH5(void); // DMA Channel 6 void DMACH6AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); void DMACH6BurstConfig(Uint16 bsize,Uint16 srcbstep, int16 desbstep); void DMACH6TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); void DMACH6WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); void DMACH6ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); void StartDMACH6(void);
面向对象(Object Oriented,OO)。 起初,“面向对象”是指在程序设计中采用封装、继承、多态等设计方法。现在,面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,ObjectOriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及面向对象的编程实现(OOP,Object Oriented Programming)。
对象和类解释:
1)对象:对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
2)类:具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
对象和类的关系: 类与对象的关系就如模具和铸件的关系,类的实力化的结果就是对象,而对对象的抽象就是类,类描述了一组有相同特性(属性)和相同行为的对象。
class person{ }//这个是类 $obj = new person();//类的实例化就是对象
我写了一些Java swing客户端程序,我想达到一个效果:长时间不用时自动关闭.
如何实现呢?
启动主窗口时,调用如下方法,给Frame添加监听事件:
Java代码 private void init33() { this.addWindowListener(new WindowAdapter() { @Override public void windowActivated(WindowEvent e) { System.out.println("window Activated"); if (task != null) { task.cancel(); task = null; } super.windowActivated(e); } @Override public void windowDeactivated(WindowEvent e) { System.out.println("window Deactivated"); if (isLocked) {// over three times and is still locked,meanwhile use // try to log in if (task != null) { task.cancel(); task = null; } } else {// first into this if clause(if (timesFail >= // LoginUtil.
自己开发的windows服务,在自己电脑安装是成功的,能正常运行。 放到其它服务器安装时也能成功, 然后我打开服务找开自己的windows服务启动时就提示”服务错误1053:服务没有及时响应启动或控制请求“ 网上查了好久,终于找到了问题。
原因:开发时用的是.net 4.5开发的,在app.config 的配置自动生成了这段代码:
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
解决: 把v4.5改成v4.0,再启动服务通过。
android studio编译时报 程序包org.apache.http.Header不存在
原因是这个类不存在
我用的是api23(android6.0) 没有提供org.apache.http.*; 解决方法:
网上下载org.apache.http.legacy.jar这个jar包放在libs目录下,如果app下没有则自己创建一个
最近跟了一个技术经理,他有个要求就是所有的查询比结果都必需是对象,不是是map之类的,而且有很多对象的是很多实体相联合组成的对象,所有又专门研究了hibernate返回对象的知识
这次讨论的对象都是组合对象,就是很多实体相关联,取他们一部分字段的组合对象,
Hql 首先扩展的对象
package com.hfview.bean; import java.util.ArrayList; import java.util.List; public class PersonEx { private String id; private String name; private String birthday; private String area; private List<Menu> menu = new ArrayList<Menu>(); public PersonEx(){ } public PersonEx(String name, String area) { super(); this.name = name; this.area = area; } public PersonEx(String id, String name, String birthday) { super(); this.id = id; this.name = name; this.birthday = birthday; } public String getId() { return id; } public void setId(String id) { this.
转载请标明出处:http://blog.csdn.net/xx326664162/article/details/53350551 文章出自:薛瑄的博客
在Android相机开发实际开发过程中遇到了不少问题,在网上找了这些资料,但是感觉如果没有经历过Android相机开发开发,直接看这些还是有点太抽象,建议参考一些代码来学习下面的内容
由于之前没有接触过Android相机开发,所以在整个开发过程中踩了不少坑,费了不少时间和精力。这篇文章总结了Android相机开发的相关知识、流程,以及容易遇到的坑,希望能帮助今后可能会接触Android相机开发的朋友快速上手,节省时间,少走弯路。
一.Android中开发相机应用的两种方式 Android系统提供了两种使用手机相机资源实现拍摄功能的方法,
一种是直接通过Intent调用系统相机组件,这种方法快速方便,适用于直接获得照片的场景,如上传相册,微博、朋友圈发照片等。另一种是使用相机API来定制自定义相机,这种方法适用于需要定制相机界面或者开发特殊相机功能的场景,如需要对照片做裁剪、滤镜处理,添加贴纸,表情,地点标签等。 这篇文章主要是从如何使用相机API来定制自定义相机这个方向展开的。
二.相机API中关键类解析 通过相机API实现拍摄功能涉及以下几个关键类和接口:
Camera:最主要的类,用于管理和操作camera资源。 它提供了完整的相机底层接口,支持相机资源切换,设置预览/拍摄尺寸,设定光圈、曝光、聚焦等相关参数,获取预览/拍摄帧数据等功能,主要方法有以下这些:
open():获取camera实例。setPreviewDisplay(SurfaceHolder):绑定绘制预览图像的surface。surface是指向屏幕窗口原始图像缓冲区(raw buffer)的一个句柄,通过它可以获得这块屏幕上对应的canvas,进而完成在屏幕上绘制View的工作。通过surfaceHolder可以将Camera和surface连接起来,当camera和surface连接后,camera获得的预览帧数据就可以通过surface显示在屏幕上了。setPrameters设置相机参数,包括前后摄像头,闪光灯模式、聚焦模式、预览和拍照尺寸等。startPreview():开始预览,将camera底层硬件传来的预览帧数据显示在绑定的surface上。stopPreview():停止预览,关闭camra底层的帧数据传递以及surface上的绘制。release():释放Camera实例takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg):这个是实现相机拍照的主要方法,包含了三个回调参数。shutter是快门按下时的回调,raw是获取拍照原始数据的回调,jpeg是获取经过压缩成jpg格式的图像数据的回调。 SurfaceView:用于绘制相机预览图像的类,提供给用户实时的预览图像。 普通的view以及派生类都是共享同一个surface的,所有的绘制都必须在UI线程中进行。而surfaceview是一种比较特殊的view,它并不与其他普通view共享surface,而是在内部持有了一个独立的surface,surfaceview负责管理这个surface的格式、尺寸以及显示位置。由于UI线程还要同时处理其他交互逻辑,因此对view的更新速度和帧率无法保证,而surfaceview由于持有一个独立的surface,因而可以在独立的线程中进行绘制,因此可以提供更高的帧率。自定义相机的预览图像由于对更新速度和帧率要求比较高,所以比较适合用surfaceview来显示。
SurfaceHolder:控制surface的一个抽象接口 它能够控制surface的尺寸和格式,修改surface的像素,监视surface的变化等等,surfaceholder的典型应用就是用于surfaceview中。surfaceview通过getHolder()方法获得surfaceholder 实例,通过后者管理监听surface 的状态。
SurfaceHolder.Callback接口:负责监听surface状态变化的接口, 有三个方法:
surfaceCreated(SurfaceHolder holder):在surface创建后立即被调用。在开发自定义相机时,可以通过重载这个函数调用camera.open()、camera.setPreviewDisplay(),来实现获取相机资源、连接camera和surface等操作。surfaceChanged(SurfaceHolder holder, int format, int width, int height):在surface发生format或size变化时调用。在开发自定义相机时,可以通过重载这个函数调用camera.startPreview来开启相机预览,使得camera预览帧数据可以传递给surface,从而实时显示相机预览图像。surfaceDestroyed(SurfaceHolder holder):在surface销毁之前被调用。在开发自定义相机时,可以通过重载这个函数调用camera.stopPreview(),camera.release()来实现停止相机预览及释放相机资源等操作。 三.自定义相机的开发过程 定制一个自定义相机应用,通常需要完成以下步骤,其流程图如图1所示:
检测并访问相机资源 检查手机是否存在相机资源,如果存在,请求访问相机资源。创建预览类 创建继承自SurfaceView并实现SurfaceHolder接口的拍摄预览类。此类能够显示相机的实时预览图像。建立预览布局 有了拍摄预览类,即可创建一个布局文件,将预览画面与设计好的用户界面控件融合在一起。设置拍照监听器 给用户界面控件绑定监听器,使其能响应用户操作(如按下按钮), 开始拍照过程。拍照并保存文件 将拍摄获得的图像转换成位图文件,最终输出保存成各种常用格式的图片。释放相机资源 相机是一个共享资源,必须对其生命周期进行细心的管理。当相机使用完毕后,应用程序必须正确地将其释放,以免其它程序访问使用时,发生冲突。 四. 开发过程遇到的一些坑 下面再讲讲我在开发自定义相机时踩过的一些坑:
1.相机预览方向适配问题的产生 1.1、相机的安装方向如何获取? Android官方提供orientation这个属性:表示相机预览图像顺时针旋转orientation度后才能与到设备自然方向一致。
假设设备是竖屏显示。后置相机传感器是横屏安装的。
你面向屏幕时,如果后置相机传感器所采集的图像的上边和设备自然方向的右边是平行的,则后置相机的orientation是90。
如果前置相机传感器所采集的图像的上边和设备自然方向的右边是平行的,则前置相机的orientation是270。
这个值,不同的设备有所差异,但大多数都是这样的值。
1.2、Activity设为竖屏时,SurfaceView预览图像为什么是逆时针旋转90度? 说明这个问题之前,先介绍下Android手机上几个方向的概念:
屏幕方向:在Android系统中,屏幕的左上角是坐标系统的原点(0,0)坐标。原点向右延伸是X轴正方向,原点向下延伸是Y轴正方向。
图像传感器(Image Sensor)方向:手机相机的图像数据都是来自于摄像头硬件的图像传感器,这个传感器在被固定到手机上后有一个默认的取景方向,如下图2所示,坐标原点位于手机横放时的左上角,即与横屏应用的屏幕X方向一致。换句话说,与竖屏应用的屏幕X方向呈90度角。
相机的预览方向:将图像传感器捕获的图像,显示在屏幕上的方向。在默认情况下,与图像传感器方向一致。在相机API中可以通过setDisplayOrientation()设置相机预览方向。在默认情况下,这个值为0,与图像传感器方向一致。
对于横屏(这个activity设置的是横屏显示)来说,由于屏幕方向和预览方向一致,预览图像和看到的实物方向一致。对于竖屏(这个activity设置的是竖屏显示),屏幕方向和预览方向垂直,所以会出现颠倒90度现象,无论怎么旋转手机,显示在UI预览界面的画面与人眼看到的实物始终成90度(UI预览界面逆时针转了90度)。为了得到一致的预览画面,需要将相机的预览方向旋转90,保持与屏幕方向一致, 注意:设置预览方向并不会改变拍出照片的方向
如图3所示(红色箭头表示相机预览的x轴方向,蓝色箭头表示屏幕的x轴方向)。
下面是Camera.setDisplayOrientation的注释文档:
/** * Set the clockwise rotation of preview display in degrees.
一次完整的HTTP请求所经历的7个步骤 HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1. 建立TCP连接: 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。 2. Web浏览器向Web服务器发送请求命令: 一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1。 3. Web浏览器发送请求头信息 : 浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。 4. Web服务器应答 : 客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。 5. Web服务器发送应答头信息: 正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。 6. Web服务器向浏览器发送数据: Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。 7. Web服务器关闭TCP连接 : 一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive;TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。 (输入一个URL回车后的后台过程)
1.客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
2.当本地的域名服务器收到请求后,就先查询本地缓存,如果有该记录项,则本地的域名服务器就直接地把查询的结果返回。
3.如果本地的缓存中没有该记录项,则本地域名服务器就直接把请求发送给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
4.本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该记录则返回相关的下级的域名服务器的地址。
5.重复第四步,直到找到正确的记录。
转载自http://xmarker.blog.163.com/blog/static/226484057201462263815783
apache 自带的ab工具测试,当并发量达到1000多的时候报错如下:
[root@aa~]# This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.1.176 (be patient)
Completed 300 requests
Completed 600 requests
Completed 900 requests
apr_socket_recv: Connection reset by peer (104)
Total of 1085 requests completed
查看应用服务器和数据库均未报错,连接被重置,bingyi了以下,apr_socket_recv这个是操作系统内核的一个参数,在高并发的情况下,内核会认为系统受到了SYN flood攻击,会发送cookies(possible SYN flooding on port 80. Sending cookies),这样会减慢影响请求的速度,所以在应用服务武器上设置下这个参数为0禁用系统保护就可以进行大并发测试了:
# vim /etc/sysctl.conf net.ipv4.tcp_syncookies = 0
# sysctl -p
在零售业中,数据分析大多采用汇总、对比、趋势预测、交叉等几类方法,尤其是交叉分析使用率颇高。交叉分析,顾名思义,是指对数据在不同维度进行交叉展现,进行多角度结合分析的方法,弥补了独立维度进行分析没法发现的一些问题。可以说,数据分析的维度弥补了众多分析方法的独立性,让各种方法通过不同属性的比较,细分,使分析结果更有意义。
横看成岭侧成峰。我们在看待事物的时候,如果从不同角度看,往往会得出不同的结果。在对业务数据进行分析时,也会有这种现象。如现在对某个区域的销售数据进行分析。如果以年销售额来分析的话,也许可以发现每年的销售收入都在成比例增长。这是一个不错的结果。但是如果从客户的角度出发进行分析,管理员可能会发现一些老客户的销售额在逐渐降低。
什么是数据分析的维度?
我们如何理解多维数据中的维?维是人们观察事物的角度,同样的数据从不同的维进行观察可能会得到不同的结果,同时也使人们更加全面和清楚地认识事物的本质。
当数据有了维的概念之后,便可对数据进行多维分析操作,常见的多维分析操作主要有:钻取(上钻和下钻)、切片、切块、旋转。钻取:钻取是改变维度的层次,变换分析的粒度。钻取包括上钻和下钻,上钻是在某一维上将低层次的细节数据概括到高层次的汇总数据的过程,减少了分析的维数;下钻则是相反,它是将高层次的汇总数据进行细化,深入到低层次细节数据的过程,增加了分析的维数。切片和切块:在多维分析中,如果在某一维度上限定了一个值,则称为对原有分析的一个切片,如果对多个维度进行限定,每个维度限定为一组取值范围,则称为对原有分析的一个切块。在多维分析中,维度都是按某一顺序进行显示,如果变换维度的顺序和方向,或交换两个维度的位置,则称为旋转。
多维度数据分析的典型描述
比如一个典型的商品销售数据库,记录了商品销售的详细情况,则我们可从这么几个方面来对销售数据进行分析:从产品的角度,可以按产品的类别、品牌、型号来查看产品的销售情况;从客户的角度,可以按客户的类别、地区等来查看产品的购买情况;从销售代表的角度,可以按销售代表的部门、级别等来查看产品销售业绩;从时间的角度,可以按年度、季度、月份等来观察产品销售的变动情况。其中产品、客户、销售代表、时间分别是四个不同的维度,每个维度都从不同方面体现了销售数据的特征,而每个维度又可按粒度的不同划分成多个层次,称为维度成员,多维分析中另一个重要的概念是数据指标,简称指标,指标代表了数据中的可度量的属性,在上面的销售数据中有两个重要的指标是销售数量和销售金额。
多维度数据分析的典型案例
看起来还不错,显示的信息非常丰富,左边包含了以天为单位时间维和产品维,可以使用展开按钮进行汇总和展开,就像是细分的操作;上面的表头部分分两层罗列了地域维和指标维,Excel的透视表提供了丰富的设置,默认展现基于各个维度的汇总数据,让我们可以从“总-分”的角度观察数据,这对数据分析非常有用。假如我们使用上面的透视表进行交叉分析发现数据是否存在异常?
使用从总体到细节的分析方法,首先可以从查看每天销售额和转化率的汇总数据开始,折叠产品维之后观察最右侧的指标汇总列就可以看到每日汇总数据;如果某一天的销售额或转化率出现了大幅的下滑,我们就可以结合各种维度寻找问题的原因,就是基于各种维度的细节数据,展开产品维观察当天的哪类产品销售出现了问题,然后结合地域维的交叉数据,可以定位哪类商品在哪个省份的销售出现了问题,这样就有效地将问题定位到了细节的层面,能够更好地发现问题,进而解决问题。所以交叉分析其实正是体现了分析“分而析之”的本意。
补充:
fn + F6 : step over
fn + F7: step into
fn + F8: step out
control+command+C: continue to Current Line
删除前一单词 option + Backspace 删除此行光标前所有内容 command + Backspace 显示字体 command + t 左缩进 command + [ 右缩进 command + ] 项目中查找 command + shift + F 用选择的查找 command + e 查找下一个 command + g 查找上一个 command + shift + g 折叠方法 command + control + 上箭头 展开方法 command + control + 下箭头 折叠注释块 command + control + shift + 上箭头 展开注释块 command + control + shift + 下箭头 切换头 / 源文件 command + option + 上箭头 类浏览(本工程用到的类) command + shift + c 注释 command +/ 方法组列表 control + 2 打开(选中文本的)头文件 command + shift + d 最小化 command + m 显示检查器? command + option + i (效果和Get Info一样,不知区别) CTRL + .
前段时间跟着斯坦福课程编写扑克牌匹配游戏的时候发现一个问题,就是我在storyboard中明明已经布置了卡牌在屏幕中间,并且是给予系统的baseline进行布局的,但是当我用模拟器运行的时候发现卡牌偏位了,如下图所示:
后来发现是因为选择了模拟器是iphone5s,但没有对视图控制器中属性查看器的模拟器尺寸大小进行修改,现把屏幕尺寸设置为iphone5s的4寸,并且调整卡牌在storyboard中的布局之后,如下图所示,运行正常。
视图控制器的属性查看器:
另外这里背景颜色不一致,不知道是什么原因,后续再解决。
今天在安装完JDK后,然后使用javac编译测试程序时,一直出现如下错误:
开始以为自己的环境变量没有设置成功,但仔细一分析要是环境没有设置成功提示的错误应该是命令无法找到的错误,既然提示找不到或无法加载主类 com.sun.tools.javac.Main说明自己环境变量已经设置成功系统已经读取到了相应命令,问题的原因应该出在无法找到javac这个文件。于是到jdk\bin目录下,发现没有javac.exe文件,说明自己在安装JDK的步骤中哪一步操作不当造成的该问题。经上网查找和摸索终于解决该问题
解决方法如下:
方法一:我们在安装jdk过程中,还会弹出一个jre的安装过程,这个和jdk不能安装在同一目录下,否则会冲突,删掉javac.exe文件(之前自己的问题正是由于把jdk和jre安装在同一目录下)。只需卸载掉当前的jdk, 然后重新安装的时候,把两者安置在不同文件夹,如jdk装在E:Dev\jdk_1.8\jdk文件夹下,jre则安装在E:Dev\jdk_1.8\jre下,如下图所示,再用javac编译则不会出现上述问题。
方法二:要是觉得上面的步骤麻烦, 可以更换JDK版本,直接安装JDK1.7,1.7无此限制安装在同一目录下即可。
1. 概述 Java 中的回调机制是一个比较常见的机制,只是有可能在你的程序中使用得比较少,在一些大型的框架中回调机制随处可见。而在之前的博文《Java设计模式——观察者模式》及 Android 中对 ListView 的相关操作也有回调身影。本文就通过一些具体的实例,慢慢走近 Java 的回调机制。
2. 版权说明 著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 本文作者:Q-WHai 发表日期: 2016年4月24日 本文链接:http://blog.csdn.net/lemon_tree12138/article/details/51231841 来源:CSDN 更多内容:分类 >> Thinking in java 3. 目录 概述版权说明目录回调 1 同步回调2 异步回调3 闭包与回调 31 普通调用32 回调初试33 闭包回调Ref 4. 回调 所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。实际在使用的时候,也会有不同的回调形式,比如下面的这几种。
4.1 同步回调 这里我假设这样的一种情况。 A 公司的总监 B 跟他的下属(项目经理 C)说要做一个调研,不过不用 C 自己亲力亲为。可以让经理 C 去安排他下面的程序员 D 去完成。 经理 C 找到了程序员 D,并告诉他,现在要完成一个调研任务。并且把调研的结果告诉经理 C。如果有问题,还是要继续的。 因为这里是 C 让 D 去做一件事情,之后 D 还是要将结果与 C 进行沟通。这样就是回调的模型了。下面是一般回调的类图: 首先我们要有一个回调的接口 CallbackInterface CallbackInterface.java
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>冒泡</title> <style type="text/css"> * { margin: 0; padding: 0; } body { font-size: 13px; line-height: 130%; padding: 60px; } #content { width: 220px; border: 1px solid #0050D0; background: #96E555 } span { width: 200px; margin: 10px; background: #666666; cursor: pointer; color: white; display: block; } p { width: 200px; background: #888; color: white; height: 16px; } </style> <script src="js/jquery-1.10.1.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function(){ // 为span元素绑定click事件 $('span').
正文部分 va01、va02等事务代码进去都这样 va02 输入一个订单号按回车,就弹 stop了 问题所在:运行了 RVKRED77 这个没退出
点击进入:SAP SD凭证处理被批次处理冻结