Partition深度解析&一致性hash

Hadoop中Partition深度解析 http://www.tuicool.com/articles/uaQVjqm 旧版 API 的 Partitioner 解析 Partitioner 的作用是对 Mapper 产生的中间结果进行分片,以便将同一分组的数据交给同一个 Reducer 处理,它直接影响 Reduce 阶段的负载均衡。旧版 API 中 Partitioner 的类图如图所示。它继承了JobConfigurable,可通过 configure 方法初始化。它本身只包含一个待实现的方法 getPartition。 该方法包含三个参数, 均由框架自动传入,前面两个参数是key/value,第三个参数 numPartitions 表示每个 Mapper 的分片数,也就是 Reducer 的个数。 MapReduce 提供了两个Partitioner 实 现:HashPartitioner和TotalOrderPartitioner。其中 HashPartitioner 是默认实现,它实现了一种基于哈希值的分片方法,代码如下: TotalOrderPartitioner 提供了一种基于区间的分片方法,通常用在数据全排序中。 在MapReduce 环境中,容易想到的全排序方案是归并排序,即在 Map 阶段,每个 Map Task进行局部排序;在 Reduce 阶段,启动一个 Reduce Task 进行全局排序。由于作业只能有一个 Reduce Task,因而 Reduce 阶段会成为作业的瓶颈。为了提高全局排序的性能和扩展性, MapReduce 提供了 TotalOrderPartitioner。它能够按照大小将数据分成若干个区间(分片),并保证后一个区间的所有数据均大于前一个区间数据, 这使得全排序的步骤如下: 步骤 3:Reduce 阶段。每个 Reducer 对分配到的区间数据进行局部排序,最终得到全排序数据。 但是不同于数值型的数据,字符串的查找和比较不能按照数值型数据的比较方法。mapreducer采用的Tire tree(关于Tire tree可以参考《字典树(Trie Tree)》)的字符串查找方法。查找的时间复杂度o(m),m为树的深度,空间复杂度o(255^m-1)。是一个典型的空间换时间的案例。 Tire tree的构建 假设树的最大深度为3,划分为【aaad ,aaaf, aaaeh,abbx】

Android仿斗鱼滑动登录验证

最近事情不是很多,在家无聊的时候看看直播,总能看到一些新奇的验证登录方式,正好自己最近也要去熟悉一下新的开发工具Android Studio,所以打算自己实现一下. 先看一下效果图: 一、确认需求 首先我们确认一下需求,我们分步来看 1.)需要定义一个阴影部分去遮盖图片,确定一个目标位置. 2.)需要一个带有边框的滑块内容,初始位置在最左边. 3.)阴影部分和滑块可以随机旋转,并保持一致. 4.)需要一个拖拽条使滑块随着拖拽条条拖拽而移动 5.)判断是否验证成功 二、分析问题 第一点,很简单我们只需要一直带有透明度的阴影图片,随机的去覆盖在图像上就可以实现. 第二点,需要用到画笔的setXfermode方法来设置图片叠加的显示模式.从而显示出一个带有边框的滑块. 第三点,需要改变图片的matrix来实现对图像的旋转. 第四点,安卓系统自带的SeekBar可以实现拖拽条的功能. 第五点,只需对外提供一个回调接口,来判断是否验证成功即可. 三、代码实现 首先创建一个attr文件来定义一些自定义属性,方便我们使用 <?xml version="1.0" encoding="utf-8"?> <resources> <!--滑块的高度--> <attr name="unitHeight" format="dimension" /> <!--滑块的宽度--> <attr name="unitWidth" format="dimension" /> <!--滑块占图片高度的比例--> <attr name="unitHeightScale" format="integer" /> <!--滑块占图片宽度的比例--> <attr name="unitWidthScale" format="integer" /> <!--滑块边框的图片资源--> <attr name="unitShadeSrc" format="reference" /> <!--阴影部分的图片资源--> <attr name="unitShowSrc" format="reference" /> <!--是否需要旋转--> <attr name="needRotate" format="boolean" /> <!--验证时的误差值--> <attr name="deviate" format="integer" /> <declare-styleable name="DouYuView"> <attr name="unitHeight" /> <attr name="unitWidth" /> <attr name="

快速认识和使用浏览器跟踪Http服务及Http服务调试工具

HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是目前互联网行业使用最为广泛的一种网络协议,采用请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。HTTP服务默认端口是80,HTTPs默认端口是443。图1为HTTP服务简单的处理图。 图1 HTTP服务流程 本篇文章不会针对HTTP协议原理、底层进行大张旗鼓的分析,仅以HTTP开发者的角度进行讲解,目的是为刚开始接触HTTP服务开发或者接触不久的同学提供帮助。在开发互联网应用的过程中对HTTP的跟踪极为重要,通过对HTTP通信的跟踪我们可以知道client传递了哪些数据,什么类型什么格式的数据,以及与HTTP相关的一些参数,响应等等,通过这些数据来诊断通信的健康状况,进行故障排除。HTTP在通信的过程中将传输的数据分为两部分header和body,Header又包括general header、request header、response header、entity header。那么我们通过什么方式来跟踪这些数据呢?很幸运,Chrome、firefox、IE等主流浏览器给开发者提供了这样的工具。下面是作者结合自己的使用经验进行的总结,将以Chrome为例进行讲解,并且主要以network面板为主。 打开Chrome浏览器,点击F12键调出开发者工具,如图2、图3(两个旅行网站) 图2 火车票查询(post请求) 图3 机票查询(get 请求) 点击搜索按钮,在network面板中展示当前操作从请求到响应整个过程的调用链,单击面板左侧任意一个请求连接,右侧将显示该请求client-server通信过程中的所有数据。我们一一开看下。 Headers页签 General Request URL :Client请求地址Request Method:请求类型 get、post、put、delete等Status Code:响应状态码 200、404、503等Remote Address:域名对应的真实ip:port Request header Accept:客户端/发送端能够接收的数据类型 text/html,application/xhtml+xml,application/xml; Accept-Encoding:浏览器可以支持的- web服务器返回内容压缩编码类型 gzip, deflateAccept-Language:浏览器可接收的语言 zh-CN,zh;q=0.8Cache-Control:请求和响应遵循的缓存机制,当前请求的Cache-Control不会影响另一个请求的缓存处理。private(默认)、no-cache、must-revalidate、max-age。这个参数有几种不同的使用场景: 打开一个新的窗口。private、no-cache、must-revalidate会重新请求服务器; max-age在超过时间年龄值时才会重新请求。地址栏回车。private、must-revalidate只有第一次时会请求服务器; no-cache每次都会请求;max-age在超过时间年龄值时才会重新请求。后退按钮。只有no-cache每次都重新请求服务器。刷新。全部重新请求服务器 Connection: 是否保持与服务器的tcp长连接。keep-alive(默认)、close。Keep-alive代表服务会保留当前连接一段时间被其他请求重复使用;close代表请求之后关闭连接。Content-Length: 请求体的长度Content-Type: 请求内容的格式/类型 application/x-www-form-urlencoded application/jsonCookie: 客户端缓存的Cookie,在请求发送时会发送到服务端Host: 请求的服务器域名Referer: 当前请求的来源User-Agent: 发出请求的客户端信息 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 Form data(post) 这个版块是在Request Method为post请求类型时显示的post表单数据。 例如: stationQuery.fromStation:北京 stationQuery.toStation:天津 stationQuery.date: 2016-04-23

MT4行情datafeed接口二次开发简介

插件为dll格式,需要导出以下三个方法 DsCreate(); DsDestroy(); DsVersion(); 主要是要在 DsCreate 方法返回一个MT4要求的CFeedInterface类的子类。 插件内部通过实现该类来提供相关数据源。 CFeedInterface声明如下 class CFeedInterface { public: //---- virtual methods virtual int Connect(LPCSTR server,LPCSTR login,LPCSTR password)=0; virtual void Close(void) =0; virtual void SetSymbols(LPCSTR symbols) =0; virtual int Read(FeedData *data) =0; virtual int Journal(char *buffer) =0; //---- }; MT4服务端加载插件后,首先会调用Connect方法,并将管理端设置的插件参数传递进来,如下图中的服务器,登录名,密码会传到Connect Connect返回TRUE则连接成功。 连接成功后MT4服务端会循环调用Read方法获取报价数据,插件只需要在Read方法中把报价数据填于FeedData结构中即可。

Chrome无法用xsl显示xml文档

今天在做一个xml的小试验时,发现Chrome竟然无法显示经过xsl修饰的文档!!这么高级的浏览器不应该存在这样的情况啊。经过一翻折腾加google后,发现确实是因为Chrome太高级了所以无法显示:因为安全机制,Chrome不允许本地的xml访问本地的xsl。 解决方案: 1. 换IE或firefox。 2. 把文档上载到web服务器,从服务器可正常访问。 3. 命令行启动chrome的时候加上--allow-file-access-from-files参数。 参考:http://stackoverflow.com/questions/4558160/xsl-not-working-in-google-chrome 测试xml:test.xml <!--test.xml--> <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="test.xsl"?> <booklist> <book classify="computer science"> <ISBN>001</ISBN> <title>c++ primer</title> <authorlist> <author>Stanley B. Lippman</author> <author>Josee Lajoie</author> </authorlist> </book> <book classify="computer science"> <ISBN>002</ISBN> <title>Advanced Programming in the UNIX Environment</title> <authorlist> <author>W. Richard Stevens</author> <author>Stephen A. Rago</author> </authorlist> </book> </booklist> 测试xsl: test.xsl <!--test.xsl--> <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>Book Information</title> </head> <body> <center> <h2>BOOK</h2> <table border="

2015年终总结 更大的变化

[(img)] 写在前面 ~~ 时间可以伸缩和折叠,唯独不能倒退。你的鹤发或许是我的童颜,而我一次呼吸能抵过你此生的岁月。 这是电影星际穿越,他不止是描述了时间的各种变幻形式,也告诉了我们等到回忆的时候却发现当年的时光怎么那么快,处于其中的时候我们又是多么的舍得。 2015年的节奏感更迅速,更不可开交,让我在看《一个勺子》这种电影的时候有点不习惯它的慢节奏。人往往想让时间过的更慢的时候,它反而过的更快。还好,我们都是年轻人,不太担心,可以让故事按照它的叙述顺序发展。 本应2015 去年许下的愿望,看看完成了么? 中华上下五千年,这本书不再提了,好像他已经找不到了。。。这本书是真的一个大呵呵。 音乐会已听,钢琴曲,但是发现太高雅了,有点没理解。 东北没能完成,这个冬天不适合出远门。 已完成一周的旅行。 房子装修完成。 上半年还真的在坚持锻炼一下,可是下半年因为生活和工作的原因就没能坚持,其实还是因为懒。 老梁故事汇也听了很久,不过最近也不太追了。 已完成去森林公园跑步。 生活 本来是有想法把工作放到前面,因为它越来越占用更大比例的时间,但是今年除了工作发生的变化太多了,有很多事都是一生中都值得纪念和关注的大事,所以还是这样。 装修,费劲巴拉两地跑,总算是造了一个简单的小窝,以后还会在这里倾注更多的精力。 买了烤箱,面包机,吃喝乐呵。 去奥林匹克森林公园跑步。 为老婆报考驾校。 去杭州玩。 给双方父母过生日。 取公积金和医保存折。 使用婚假去三亚和厦门旅行,三亚的空气简直让我现在也想逃过去。 参加一些同学的婚礼。 回廊坊发展计划实施并最后失败。 在北京增加一次挪窝,清河->万柳 在北京换了工作,感谢给机会的各位,为选择祈福。 看音乐会,哈哈,不得不说这次音乐会最大的收货就是知道了钢琴家都有自己配的翻页工程师来给乐谱翻页。 办理暂住证。 最大事件,老婆怀孕了,2016要为人父母喽。 购买空气净化器。 第一次翻译技术电子书《构建安全的PHP应用》,已经在豆瓣出售。 涂秘密花园,买哈根达斯。 第一次海淘,除了时间等的长,真实挺不错的体验,花更少的钱。 结婚一周年送给老婆丹尼尔惠灵顿的手表。 手环,百度送的,玩够了借出,最后又送给表弟。 购买电子称,希望他能督促我减肥,但是没。 买车,也算个大事,遗憾的是我并没有京牌,回家上牌的体验真是差啊,上了两天。 这一行是凑数的。 工作 今年工作三大变,变变变! 首先是先经历了几次出差,连带年会系列的。 多配了一个Mac转接头,让他更给力。 尝试在公司中排队工作居住证,但是等到最后也没排到。 中间有一次想要的工作转移,想要换个城市发展,但是因为诸多原因,最后虽然尝试了,但最后还是失败了,回到北京。 接下来就是换到现在的公司工作,选择的时候虽然很纠结,一旦命中,也就潜心修炼了。 从Ruby再次回到PHP,这次的工作主要是偏向服务端了。 从小公司的角度再次修炼自己。 也加一行凑数吧。 2016之畅想 最大的一个就是我们要加一口人了,要热烈欢迎。 这回能否去东北? 运动,运动。 学习一下法语或者西班牙语。(用处?) 简单学习一下iOS。 去一次蒲黄榆夜市。 是否能去一下不老屯,估计不会去,因为我还没开始玩单反。 认识有趣的人,看美丽的风景。 写在后面 没想到有越来越多的人因为雾霾的原因逃离北京,而他们又不得不回来,只是暂时躲了躲,当然我的家乡在河北,比北京更甚。今年买了空净,买了口罩,天天都在等风来。元旦三天假,今天是最后一天了,本来说等一个好的天气出门,不料等来等去,等了个最差的一天,天啊! 2015读书 * * [(img)][(img)][(img)][(img)] [(img)][(img)][(img)] 2015电影(119部) 总览展示 http://readingtaste.

Android 源码编译错误

参考文章:http://blog.csdn.net/brightming/article/details/49763515/ Building with Jack: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp Out of memory error (version 1.2-a26 'Carnac' (291201 fcd657165d2fd6dcf1bf4c3002c9c8f75383e815 by android-jack-team@google.com)). GC overhead limit exceeded. Try increasing heap size with java option '-Xmx<size>'. Warning: This may have produced partial or corrupted output. ninja: build stopped: subcommand failed. 在文件/prebuilts/sdk/tools/jack-admin中修正-Xmx参数。 1、修改变量JACK_SERVER_VM_ARGUMENTS,添加参数 -Xmx2048M JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -mx2048M}" 2、进一步修正重启参数(该步骤可以省略) 找到jack-admin中的start-server语句,直接在里面增加: start-server) isServerRunning RUNNING=$? if [ "$RUNNING" = 0 ]; then echo "Server is already running" else

Java--"The import *** cannot be resolved"问题解决方案

Java–“The import cannot be resolved”问题解决方案* 问题描述: 在修改部分Java代码之后,发现import 导入包出现错误。错误提示如:”The import *** cannot be resolved“。 解决方法尝试如下: 1、重新删除import 语句,再用快捷键 alt + / 导入。(未解决) 2、编译运行也还是报错。(未解决) 3、重启Eclipse也还是不行。(为解决) 最终解决方案: 纠结了会,最后尝试了以下步骤: 第一步:将项目工程clean; 第二步:删除import语句; 第三步:使用快捷键alt + / 导入。 完美解决问题。

spring websocket 利用注解接收和发送消息

websocket只定义了文字和字节俩种形式的消息格式,没有像http协议那样子有那么丰富的协议规范,我们看看http的协议格式 websocket之所以没有自己定义那么多的协议格式,是希望有框架自己来实现定义这些格式,我们称之为websocket的子协议,sub-protocol。 STOMP,Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议。STOMP的消息格式如下: COMMAND header1:value1 header2:value2 Body^@ 例如发送消息 SEND destination:/queue/trade content-type:application/json content-length:44 {"action":"BUY","ticker":"MMM","shares",44}^@ 再看看订阅消息 SUBSCRIBE id:sub-1 destination:/topic/price.stock.* ^@ 然后服务器进行广播消息 MESSAGE message-id:nxahklf6-1 subscription:sub-1 destination:/topic/price.stock.MMM {"ticker":"MMM","price":129.45}^@ 详细了解可以看看官网http://stomp.github.io/stomp-specification-1.1.html spring websocket利用STOMP作为websocket的子协议,原因是stomp可以提供一种类似springmvc的编码方式,可以利用注解进行接收和发送消息以及和springmvc进行无缝的结合。 这样子,我们利用注解来接受和广播websocket信息 @Controller @RequestMapping("/webSocket") @MessageMapping("foo") public class WebSocketController { @MessageMapping("handle") @SendTo("/topic/greetings") public String handle(Task task ,String name) { //... return "handle2"; } } @MessageMapping即可以用来类级别上也可以用在方法级别上,类似springmvc,但是为不同的是,springmvc的路径是类路径/方法路径,中间是“/”,例如/webSocket/xxxx,而websocket是用“.”来分开路径的,类路径.方法路径,例如foo.handle来发送消息到特定路径 @SendTo可以把消息广播到路径上去,例如上面可以把消息广播到”/topic/greetings”,如果客户端在这个路径订阅消息,则可以接收到消息 接下来需要注册下基于stomp子协议的websocket到spring中 @Configuration @EnableWebSocketMessageBroker public class WebSocketMessageBrokerConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { //portfolio-stomp就是websocket的端点,客户端需要注册这个端点进行链接,withSockJS允许客户端利用sockjs进行浏览器兼容性处理 registry.

Gradle sync failed: failed to find Build Tools revision 23.0.3 解决

SDK manager更新一直是项目中一个问题,今天上网找到一个很好的解决方法,下载速度很快: 链接如下: http://mirrors.neusoft.edu.cn/more.we#android 我用的是mac 的Android studio 和链接中的样式稍微有点不同。 首先打开SDK manager,在HttpProxy中填写如下: 之后就可以愉快的进行更新下载。 分享出来,帮助更多困惑的人。

轻量级的无线抓包(microsoft network monitor)

无意中看到一篇blog(windows抓取802.11),其中提到利用microsoft network monitor来抓包,故笔者也尝试了一下。 首先该软件笔者也上传了下:microsoft network monitor软件 其使用也是挺简单的,安装完成之后,需要重新登录系统(即重启或注销) 然后重新进入软件后,就可以发现有驱动很多都读出来了,比如下图: 实际上这个软件不仅抓无线,也可以抓有线的包,不过我们这里只对无线数据包有兴趣,从而选择电脑里面对应的无线网卡即可,其他的都取消掉 如上,笔者电脑里面的无线网卡是intel wireless-N,所以就选这款了。。。然后上面蓝色字体的New capture tab转换到下面界面: 点击开始就可以抓包了,同时也可以在 点击抓包就行了,然后这里还有一个配置 可以具体配置抓什么信道下的数据包。笔者在这里没有太多研究这个,不过感觉这个设置信道作用可能不是特别大。从该软件的名字中microsoft network monitor也可以理解到,该软件实际上是monitor机制下做的,换言之,只有本地接收到的数据或者数据包才会被接收,如果下层地址不匹配,即不是给本PC的话,那么很有可能就被过滤掉了。这点也可以从下面这样实验看出, 若本地没有关联到无线网络下,那么无线抓包结果如下: 可以发现,基本都是beacon包,偶尔也能抓到几个probe包。其他比如RTS/CTS之类的包是抓不到的。 那么如果本地关联上无线之后进行抓包的接入如下: 那么除了beacon以外,我们还发现了很多数据包,而且这些数据包已经被解密了,换言之,也应对了我们之前所述,这些抓包是直接在系统上层做的monitor。不过在数据包里面还是可以看到一些无线时候的信息的。 不过最后我们总结下,该抓包软件比较轻便,由于直接是windows上层进行抓包的结果,所以应该是无线网卡的话都可以使用,不像其他抓包需要专门的网卡。但是缺点就是信息量很少,且抓的数据包不全,用来做做无线网络的调试还行,但是用来做无线网络的深入学习的话,那么就需要采用其他抓包软件更好一些了。

C++ 中Traits技术 (5) —— 关于STL中对迭代器封装的类型介绍

上一篇讲到traits的类型萃取,可将迭代器相关的类型获取用于变量声明和函数返回等操作。对于原生指针和const指针可以采用偏特化技术进行处理。 在STL中,对迭代器除了封装类型信息以外,还有一些其他的信息,这篇文章介绍一下。 STL中,迭代器中的类型包括以下五种: template <class _Iterator> struct iterator_traits { typedef typename _Iterator::iterator_category iterator_category; typedef typename _Iterator::value_type value_type; typedef typename _Iterator::difference_type difference_type; typedef typename _Iterator::pointer pointer; typedef typename _Iterator::reference reference; }; 第一种类型:value_type 这个前面介绍过,就是获取迭代器指向元素的类型。 第二种类型:difference_type 这个用于表示两个迭代器之间的距离,对于某些算法这个类型很有用。 如: template <class I, class T> typename iterator_traits<I>::difference_type count(I first, I last, const T& value) { typename iterator_traits<I>::difference_type n = 0; for(; first != last; first++) { if(*first == value) n++; } return n; }当然,因为原生指针并没有这个类型信息,需要对其特化。 template <class I> class iterator_traits<I*> { typedef ptrdiff_t difference_type; } template <class I> class iterator_traits<const I*> { typedef ptrdiff_t difference_type; } 其中的ptrdiff_t是一个C++内置类型 【typedef long int ptrdiff_t】

Leetcode 343. Integer Break

原题链接: 343. Integer Break 343. Integer Break My Submissions Question Editorial Solution Total Accepted: 642 Total Submissions: 1506 Difficulty: Medium Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get. For example, given n = 2, return 1 (2 = 1 + 1); given n = 10, return 36 (10 = 3 + 3 + 4).

myid文件缺失导致zookeeper无法启动(myid file is missing)

myid文件缺失 现象 :zookeeper无法启动; 异常 :$dataDir/myid file is missing; 原因 :zk集群中的节点需要获取myid文件内容来标识该节点,缺失则无法启动; 解决 :在zk数据文件存放目录下(见 $ZK/conf/zoo.cfg,dataDir属性),创建myid文件并写入一个数字用来标识本节点(类似这个节点的身份证)。 详细异常如下: org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /home/crxj-coll/zookeeper-3.4.5/bin/../conf/zoo.cfg at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:121) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78) Caused by: java.lang.IllegalArgumentException: /var/tmp/zookeeper/myid file is missing at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:344) at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:117) ... 2 more Invalid config, exiting abnormally 处理过程: 更改zookeeper/conf/zoo.cfg,找到dataDIr,修改如下:(在你的zookeeper目录下创建data文件夹) dataDir=$ZK_HOME/data 在data文件夹中 创建myid文件,在里面设置一个数字(每个节点的这个数字不能一样) 之后zookeeper就可以正常启动了!

关于Android开发中启动应用但桌面不显示图标的问题

本人开发Android不久,今天在一个新建的项目中突然遇到调试的应用虽然启动了,但是安卓系统桌面不显示图标。 度过之后发现并没什么用。 网上的方案 <intent-filter> <action android:name="android.intent.action.MAIN" /> <!--注释下面这行代码,安装不显示图标,或者把下面的LAUNCHER改成DEFAULT也行--> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 后来只好自己折腾。当时用的是模拟器,系统是4.4 后来打开了开发者模式,图标妥妥出现了。 

poj3617字典序问题【贪心】

Best Cow Line Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 16664 Accepted: 4692 Description FJ is about to take his N (1 ≤ N ≤ 2,000) cows to the annual"Farmer of the Year" competition. In this contest every farmer arranges his cows in a line and herds them past the judges. The contest organizers adopted a new registration scheme this year: simply register the initial letter of every cow in the order they will appear (i.

C++:‘std::ostream& String::operator<<(std::ostream&, const String&)’ must take exactly one argument

C++:‘std::ostream& String::operator<<(std::ostream&, const String&)’ must take exactly one argument 标签: C++编译错误 by 小威威 以下是我编译某些源文件是出现的问题: 错误信息如下: ‘std::ostream& String::operator<<(std::ostream&, const String&)’ must take exactly one argument 提示编译出错的这段代码是重载输出运算符。问题是出在String::上。我是将重载的这个函数定义为友元函数,既然是友元函数,那么就不应该出现String::,因为友元函数并不属于一个类的成员方法,因此将类名和范围解析符删去即可。 在这里再补充一种编译出错: default argument given for parameter 2 提示编译出错的这段代码是用于定义构造函数,出错的原因在于:构建缺省的构造函数,默认参数值应该在声明中出现而在实现中应该删去,也就是说,定义默认值只能在函数声明时操作,不能在函数实现时操作。 以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!

PPT中《此演示文稿中的一些控件无法激活》的解决办法

http://apps.hi.baidu.com/share/detail/6016136 PPT中《此演示文稿中的一些控件无法激活》的解决办法 在PPT做课件,在其中插入Flash动画,在某些电脑中打开PPT文件时,出现“此演示文稿的一些控件无法激活,这些控件可能未在此计算机中注册”现象,原因是Shockwave flash object控件版本太低了。解决方法如下: 下载安装Install_Flash_Player_active_x 9.0 Shockwave flash object控件是一个非常有用的东西,但是有些机器上面找不到它。解决方法:安装Install_Flash_Player_active_x 9.0 ,随后你可以:启动PowerPoint,打开控件工具箱,选择“其他控件”下拉到底部“注册自定义控件”,C:\WINDOWS\system32 \Macromed\Flash目录下去选择Flash9.ocx文件。 下载地址 http://get.adobe.com/cn/flashplayer/completion/aih/?exitcode=0 <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 阅读(20635) | 评论(0) | 转发(0) | 0 上一篇:Linux内核迎来3.0时代 实用多于惊喜 下一篇:破解网站防盗链的方法 相关热门文章 核心交易系统数据库应用程序绑...开源负载均衡LVS随机自启动异...BLE-NRF51822教程9—动态密码(...gradle编译安装引发的java安装...对mysql数据结构和数据的一些... Serv-u的ODBC数据库做法(完整...10种启动故障解决方法(转)...Auto CAD 2007中文版 迅雷免费...出现“high definition audio...MATLAB中plot的用法 linux dhcp peizhi roc关于Unix文件的软链接求教这个命令什么意思,我是新...sed -e "/grep/d" 是什么意思...谁能够帮我解决LINUX 2.6 10... 给主人留下些什么吧!~~ 评论热议

Web性能的几个常见瓶颈

转自51cto的微信推送 http://mp.weixin.qq.com/s?__biz=MjM5MDI5MjAyMA==&mid=402654298&idx=2&sn=f2620081eb328abe942e8ef902c8b73b&scene=23&srcid=0328SK5GXpRVAv63Ob9aJ30d#rd Web性能的几个常见瓶颈 2016-03-28 51CTO 当前,许多站点的部署方式都对自身的性能产生了消极影响,而网站的所有者并没有意识到这个问题。我们今天针对性的讨论以下几个常见的影响网站性能的瓶颈,观察其变化趋势,并简单说明一些解决方案来提升网站的性能。 瓶颈一:缓存 在面对静态内容的时候,我们最常用的方式就是通过将其缓存在浏览器、中间代理服务器或者CDN之上。因为能够提供相当大的卸载,这种将静态内容的缓存行为毫无疑问将对终端用户和源站服务器产生良好的影响。根据当前的趋势,我们可以看到,许多站点实际上都在缓存类似于JS,图像,CSS等对象;但是,我们却发现能够对HTML进行缓存的站点却并不多见。基础页面一般是比较动态化的,大部分的网站所有者都不会对这种页面进行缓存,因为HTML页面是在不断变化的。我们对尽可能多的网站数据进行了评估,结果如下: 根据上图,我们可以看到:34%的独立站点对HTML页面进行了缓存。66%的独立站点没有对HTML页面进行缓存。 分析: 我们发现,大量站点没有缓存基础页面,这将对站点的Speed Index(速度参数)造成直接影响。Speed Index能够反映视觉元素的平均完成程度,也是提升客户体验的一个重要方面。 如果页面包含了动态的内容,那么我们可以采取几种方式来确保其可缓存性,或者对动态内容进行潜在复用。 解决方法:利用低TTL对基础页面进行缓存——如果这样做,我们就能为内容提供一个较低的TTL,然后根据最终用户所在位置等不同变量进行变化,减少HTML请求次数进而卸载源站的负载。 异步JavaScript及XML(Ajax)——利用Ajax来动态地创建多页面组件,这使我们可以对多种存储进行缓存响应,包括session storage和local storage。可缓存的Ajax也是一种将发往源站服务器的请求数量减少的有效方法。 边缘侧包含(Edge Side Include)。 瓶颈二:压缩 另外一种非常常见的提升站点性能的方式就是对内容进行压缩,这样可以确保内容的比特数尽可能小,传输速度尽可能快。压缩一般是针对JS和CSS这种静态对象来使用的,而无需考虑内容变换的速度和频率,因为缓存规则能够使得基于Last-Modified-Since和Time-To-Live这两个值的对象失效。 观察: 根据我们观察到的最新数据,一些站点最多能够包括115种字体资源,最少1种,平均4种。 这一结果说明,由于种种原因,很少有站点会对字体资源进行压缩,其中一种原因有可能是这些字体资源来自第三方: 如图所示:1. 9.6%的本站字体资源经过压缩2. 2.4%的第三方字体资源经过压缩3. 22.4%的本站字体资源未经压缩4. 64.6%的第三方字体资源未经压缩 分析: 我们刚才已经说到了,站点能够包含的字体最多有115种,所以对这些字体进行压缩就变得异常重要,因为这可以缩短页面加载的时间,并且从终端用户的角度来提升页面渲染的速度。 根据最新的数据统计显示,87%的站点没有对字体进行压缩,而22%的站点自己使用的字体没有采用压缩。这些资源是通过主站的域名来进行控制和访问的,所以可以在源站服务器上进行压缩配置。 还有更复杂的情况,也就是使用第三方字体资源的时候,比如来自谷歌等。我们发现,最近有65%的站点使用了第三方字体资源,而这些字体都没有进行压缩。 解决方法: 对于自有的字体资源,压缩可以在源站服务器上来进行,或者在使用代理和CDN的前提下,在最后一公里进行压缩。总体来说,现在的浏览器大部分都支持GZIP,这也使得浏览器对字体压缩不再成为问题。 对于第三方字体资源,Akamai也可以提供更为具体的解决方案,来保证字体能够以最快的速度进行分发。 瓶颈三:HTTP响应代码 毋庸置疑,当内容回到源站服务器(或者缓存)的时候,大部分站点所使用的响应代码都是“200/OK”。也就是说,除了这个特定的响应代码之外,还有相当大比例的请求响应代码在被使用,这也是会对站点性能造成显著影响的一个因素。下面,我们来看看这些代码的使用比例: 右侧图例上现实的响应码分别是:部分内容/206重定向/301/302未修改/304未发现/404错误/4xx/5xx其他非200响应代码 “错误”响应代码 总体而言,“错误”响应代码从低到高代表了不同的意思,最高的493错误代码意味着整个站点都出错了。 而大多数情况下我们看到的错误代码并不是493, 而是像404“未发现”这样的响应代码,原因是内容名称或者内容发生变化、而且没有得到解决。这在使用内容管理系统将资源直接从源站拉出或者推入的时候尤为常见。这种问题的优先级都不是太高,相关人员会更加着急解决其他更为重要的麻烦。随着时间的推移,这些错误就会不断堆积,进而导致缓存率不足而影响源站的性能,或者是由于请求并不存在的内容请求指向源站造成流量上升而影响速度和性能。 服务器端的错误响应代码是5xx,出现这种错误代码的原因有可能是:源站服务器的超时设置、初始链接等待响应的时长等。对源站的健康度检测是预防这种错误代码出现的好办法,如果一旦健康度低于预设的某个阈值,仪表板上的警告机制就会被触发。 “缓存”响应代码304/206 根据上面的图表,304/206响应代码的出现率是相当低的。因为我们得到的数据是基于HTTP Archive上所使用的WebPage Test第一屏结果,这种检测方式对于这两种响应代码的情况反映是不够精确的。 尽管如此,我们还是值得去讨论一下,在源站使用If-Modified-Since的头部文件来产生304响应代码可以如何为网站减压。使用这种响应代码,我们可以尽可能地减少对未变更内容的分发需要。如果我们在终端用户和源站服务器之间使用了代理服务器或者CDN,那么使用304响应代码可以带来的收益就更大了。 对于触发206响应代码的大型对象的请求,将部分对象进行缓存可以提升向最终用户进行分发的效率。这样做,我们可以减少指向源站的请求数量,同时提升大型对象的分发速度。 301/302重定向响应代码 根据上面图表所显示的信息,重定向响应代码占据了相当大的比例,而且也是除了200响应代码之外使用最为频繁的响应代码。对于想要进行品牌再造或者仅仅是想要避免在Web应用服务器侧进行重大变更的网站而言,使用率是相当高的。根据最新的调查结果,网站使用最多的重定向响应码是910,而对于那些使用了CDN服务的网站而言,使用最多的是353。重定向会影响到SEO排名,而更为常见的是,会增加对页面的请求次数,进而拖慢网站或者页面的加载时间。 我们可以看到,使用了CDN服务的网站持续使用了大量的重定向响应代码,那么问题来了:有了CDN的话,尤其是当CDN服务商可以帮助你对路由进行重定向的时候,这么做还有必要吗? Web性能瓶颈:进阶 我们在上面提到了一些常见的Web性能瓶颈,除了这些因素之外,我们还需要认识到:一些更加明显、更加常见的Web性能瓶颈导致了JavaScript资源的超量使用。下面我们来举一个比较贴切的例子: 使用多重JavaScript框架: JavaScript的本质是“阻挡(Blocking)”,所以某个页面所包含的JS越多,在页面开始加载或者结束加载之前,就会有更多的内容要求被进行解析。为了了解有多少的页面使用了多重的JavaScript,我们使用了HTTP Archive关于页面和资源请求的分析数据。通过对最新的请求数据的分析,我们可以发现在资源URL自身内部所包含的不同的单一JavaScript框架名称。我们把这些名称返回到最新的页面请求数据内(页面ID),来确定在一个页面中一共使用了多少框架,并获得相应的清单。这个关于JS框架使用的调查最终显示了这样的结果:jquery,dojo,angular,prototype,backbone,emberjs,sencha,scriptaculous,d3,three,bootstrap 和foundation。根据最新的调查结果我们可以发现,大概有20%的网站使用了2到7个框架。大部分使用单一框架的站点主要采用了jQuery,因为通过这一框架,就可以使用许多不同的定制化扩展和装置。 我们可以从上面的图表看到,接近80%的站点使用了1个以上的JS框架。网站使用多个框架的原因其实显而易见——他们需要在页面上植入来自多个框架和库的多个组件——尤其是那些在github随手就可以拿到的。在github上面,开发和下载特定的装置,可以帮助他们在某一个站点内达成其所期待实现的行为。现在的潮流是,jquery,prototype,d3,bootstrap,angular,foundation和scriptaculous这几种框架比较受欢迎。当某个功能或者特性需要使用多重库的时候,网站就会倾向于使用多个框架,原因有二:样式和功能(取决于用户的互动方式)。所以现在的问题就是:我们为什么需要把资源浪费在下载和解析脚本上呢?而且某些脚本在页面开始加载之前,根本没有被包括在样式里。 我们在WebPageTest上获取了一些参数,并把这些参数和框架及库的数量进行比较,就会发现其对性能在整体上产生的不良影响。 右侧的图例分别是:1. 平局渲染时间2. 平均内容加载时间3. 平均加载时间4. 平均完全加载时间5. 平均视觉完成时间6. 平均速度参数 这张图显示的是,随着页面上包含的JS框架数量的增多(X轴从左到右),上述时间参数不断变大(毫秒单位,Y轴从下到上)。 进一步说,包含过多的JS框架会使得页面大小进一步增长,因为JavaScript的比特数都会落到页面的整体体积上面。当然,框架数量并不是影响比特数大小的唯一因素,但却仍然会成为影响Web性能的一个瓶颈。这种页面体积的增加,会需要更多的工作和技巧来解决。 此图显示的是:JS框架增加与其比特数总量的关系。也就是说,框架数量越多,比特数就越大。 除了将站点内不必要的框架移除之外,如果必须要使用多个框架和库,我们还可以通过一些前端优化的技术来改善网站的体验。 解决方法: 1.