东京被国际奥林匹克委员会( IOC)选为2020年夏季奥运会的主办国,这个消息席卷东京,到处都有巨大的庆祝活动。

若不明白为何东京会被选中了,这里为你列出部份原因,也是众多人喜爱到东京的原因,提提你,在出发时,记紧预订东京酒店,因为旅客对此的需求太大了。

1. 东京拥有世界上最先进的铁路

东京拥有13条地铁线,由日本铁路和其他私营公司经营100多个路线,东京的铁路系统象征着她有机会赢得世界纪录。在东京,短暂步行便能找到火车站,到达大都市的主要地区。

2. 看到日皇

于每年12月23日或1月2日参观皇宫,你会看到令人印象深刻的人物:日本的主人。

明仁天皇和他的家人每年有两次会公开亮相,在君主的生日和新年的时候,他们会于内宫向人民问候。如果你够高,你就可以窥见在旭日旗动摇前的日皇。

3. 如战斗场的繁忙马路

涩谷站外的争夺街口无疑是世界上最繁忙的街道,在马路的交汇点上,过千人熙来攘往,共同编织一个巨大的网络。这个争夺街令东京成为了旅游景点的精髓,不只是老建筑,而是很多人来一起庆祝这个城市的文化。

4. 过百间青春时尚店

原宿区有无数独立的时装精品店- 全部献给对青春时尚表现疯狂的青年人。如果你在涩谷,表参道和青山的地区,你可以見識到世界上最大的時裝區,基本上你可以找到每世界每一個大設計師的品牌。

TopK,指的是从大量数据中返回前K个最大或者最小数据。

对于小数据量,可以直接对源数据进行排序,然后截取前K个即可。但对于大量数据的时候,全部排序的性能就会比较差了。可以维护一个长度为K的数组,并复制源数据中的前K个元素放入该数组,对该数组进行排序。之后再依次读取源数据K之后的数据,依次和该数组中最小的元素进行比较,如果小于这个元素则直接忽略。反之,如果大于这个元素的话,则替换掉数组中最小的元素,并保证该数组仍然是有序的。直到数据读取结束,该数组中的元素即为需要的TopK。

替换元素和对数组重排这一部分,有几种方法。可以利用最小堆来实现。

最小堆是一种完全二叉树,其任何一个根结点的值均小于或者等于其子结点的值。最小堆的存储结构为数组:

private int[] m_data;

将数组转换成为一个最小堆:

private void BuildHeap()
{
    // 最小堆(完全二叉树)只有 小于或者等于 n/2 - 1 的元素才有子节点,其他的元素则为叶子节点
    for (int i = m_data.Length / 2 - 1; i >= 0; i--)
    {
        // 对这些节点 获取最小堆
        Heapify(i);
    }
}

private void Heapify(int i)
{
    int left = 2 * i + 1;
    int right = 2 * i + 2;

    int small = i; // 存储最小值的下标

    // 如果存在左节点,并且左节点值小于根节点值
    if (left < m_data.Length && m_data[left] < m_data[i])
    {
        small = left;
    }

    // 如果存在右节点,并且有节点值小于根节点值和左节点间比较小的值
    if (right < m_data.Length && m_data[right] < m_data[small])
    {
        small = right;
    }

    // 如果根节点是最小值,直接返回
    if (small == i)
    {
        return;
    }

    // 交换根节点和最小值
    Swap(i, small);

    // 递归处理被影响的子节点
    Heapify(small);
}

每次替换跟元素后,要进行重排:

public int Root
{
    get
    {
        return m_data[0];
    }
    set
    {
        m_data[0] = value;
        Heapify(0);
    }
}

利用最小堆来获取前K个最大的元素:

public static int[] FindTopK(int[] array, int k)
{
    int[] temp = new int[k];

    for (int i = 0; i < k; i++)
    {
        temp[i] = array[i];
    }

    MinHeap mp = new MinHeap(temp);

    for (int i = k; i < array.Length; i++)
    {
        if (array[i] > mp.Root)
        {
            mp.Root = array[i];
        }
    }
    return temp;
}

Tab Complete

  1. Download tab-complete plugin Pydiction from http://www.vim.org/scripts/script.php?script_id=850, and unzip
  2. Copy python_pydiction.vim to ~/.vim/after/ftplugin/ (create it if the directory is not exist)
  3. Copy complete-dict to ~/.vim/tools/pydiction/complete-dict (create it if the directory is not exist)
  4. Create a .vimrc via copy vimrc from /usr/share/vim/vimrc to ~/. and add the following line to enable filetype plugin:
    filetype plugin on
  5. Set “g:pydiction_location” to the full path of complete-dict file
    let g:pydiction_location=’~/.vim/tools/pydiction/complete-dict’
  6. Set the height of the completion menu(optional)
    let g:pydiction_menu_height=20
  7. Save and try

Syntax Highlighting

  1. Make sure python.vim exist under /usr/share/vim/vim73/syntax/
  2. If not exist, download latest verion of python.vim form http://www.vim.org/scripts/script.php?script_id=790, and copy to the directory above or ~/.vim/syntax/
  3. Edit .vimrc, add the following line:
    syntax on

基本功能

  • UI Automation(Android):Robotium, Athrun(淘宝), NativeDriver, MonkeyRunner
  • UI Automation(iOS):instruments
  • 特定逻辑算法测试 – 单元测试
  • API

UI/UE

  • App界面,用户体验
  • 风格
  • 列表、图标滑动
  • 列表页、图片清晰度

特性

  • 横竖屏
  • Home键
  • 返回键
  • 感应器,GPS

网络

  • 2G/3G,不同运营商
  • WIFI/能连WIFI,但没有连接外网
  • 慢网络
  • 无网络
  • 飞行模式
  • 网络切换

与其他程序并发

  • 来电、短信、闹铃、低电量提示
  • 其他App的提示
  • 与第三方兼容性,如输入法,流量管理,来电通等
  • 平台兼容性,不同版本
  • Android CTS

分辨率
关机/待机/切换/后台/清空数据

  • 关机/重启/锁屏/解锁
  • 后台运行
  • 定时任务
  • 强制退出
  • Crash后重启app
  • 清空缓存等数据,重启app

切换

  • 应用内切换
  • 应用间切换,程序调用
  • 应用间切换,手动

系统API/权限

  • 是否支持该API
  • 不同系统版本
  • 系统是否支持改功能,如打电话、短信,拍照
  • 是否有权限

性能

  • CPU、内存、耗电量、流量、占用空间
  • 启动时间,操作的响应时间
  • 可以使用Android Junit Test,连续Call App Intent查看启动时间
  • Android上可以使用dumpsys命令
  • iOS上,如果模拟机可以用Instruments,真机上,安装openssh,然后通过终端去连接设备,用top命令
  • 网络抓包
  • Android上使用Traceview,需要在程序里添加代码

压力

  • 长时间开机,操作
  • 长时间后台后在激活app
  • 使用Monkey

真实环境

  • 用户可能常用的app

安全
安装/卸载/升级/SD卡
编译平台

via:

一、浏览器允许每个域名所包含的cookie数:

Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie。

Firefox每个域名cookie限制为50个。

Opera每个域名cookie限制为30个。

Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。

注:“每个域名cookie限制为20个”将不再正确!

二、当很多的cookie被设置,浏览器如何去响应。

除Safari(可以设置全部cookie,不管数量多少),有两个方法:

最少最近使用(leastrecentlyused(LRU))的方法:当Cookie已达到限额,自动踢除最老的Cookie,以使给最新的Cookie一些空间。InternetExplorer和Opera使用此方法。

Firefox很独特:虽然最后的设置的Cookie始终保留,但似乎随机决定哪些cookie被保留。似乎没有任何计划(建议:在Firefox中不要超过Cookie限制)。

三、不同浏览器间cookie总大小也不同:

Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。

Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。

InternetExplorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。

注:多字节字符计算为两个字节。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。

6年前的今天,踏上来京的火车。然后开始了6年的北漂生活。这6年,不论如何,不论开心也好,悲伤也罢,2191个日子就这么过去了,写一些文字,只为记录这逝去的日子。


05年8月28(或者29号,记不清了),跟大家一起,带着仅有的200块钱,从哈尔滨出发,前往北京。有意思的事,我们坐的那几节车厢是卧铺车厢临时改的。一路上大家打打闹闹,更多的是对即将开始的工作的期待。

到北京的时候已近傍晚,整个北京雾蒙蒙的,看不到太阳,天很热,这是对北京的第一个印象。等了好久,公司来接我们的车终于到了车站,然后拉着我们一路向北,看着外面的楼越来越矮,灯越来越暗,最终抵达目的地,五环外,安宁庄里的一个小旅馆,之后的一个月,这里就是我们的住处。到现在,偶尔还会怀念起那个地方,每次路过都会看下那个小旅馆,虽然早已经不是原来的样子了。


入职后,因为当时没项目,又一下子来这么一批人,公司就强制去参加所谓的培训,记得是IBM的一套B2C的解决方案,大约1个月多的时间,在烽火的大厅里。这和住的地方,步行大约半个小时的样子,每天几个人一起走着上下班,聊聊天,倒也蛮开心的。

10.1放假的前一天,分了部门。然后就放假了。


高中时候的女朋友,这个时候也在北京,比我早来了几个月。大学的时候,不在一起,分分合合的,闹了很多次。我来了之后,有天晚上她过来看我,我们到是有一段时间没见了。她一直在和平里附近住,跑这么远的路,倒是很过意不去的。

10.1放假的时候,去了天安门。那天下着小雨,空气倒是不错,只是感觉天安门没有想象中的那么宏伟壮观,略有些失望。


10.1后,开始上班。不过,要等着有合适的项目。然后每天看些文档,等面试机会。应该是10月中下旬的样子,去三元桥那边面windows相关的项目,然后挂了。之后又一次到西格玛面试,然后就没消息了。就这样一直等下去,差不多12月份了,又去MSN面试。面试的还是同一个人,她一看我就笑了,说怎么是你啊,直接来吧。然后我就加入了工作后的第一个项目,MSN Messenger。

刚开始工作,每天都很认真的,组里的氛围不错,人也都很好,尤其是对我们这几个新人都很照顾。然后学这怎么看文档,怎么写case,怎么开bug,以及怎么跟客户沟通。。这么多年过去,很多人都失去联系了,不过,这段时间我会一直记得。


06年3月,我当时在MSN是负责的一个小模块V2S要分出来,又加上另外三个模块,成立个新组,我就被赶鸭子上架了。算我,一共三个人,有些东西哪怕自己都不会,也得想各种办法去解决,人都是逼出来的,当没有任何指望,一定要靠自己的时候,就一定会想出办法。这一年多是我成长最快的一段时间。

07年4、5月份的时候,换到了Calendar组,然后搬回公司OF。Calendar大约做了一年多的样子,这个项目是我最有感情的项目,付出也很多,真的把它当成自己的东西了。


来北京后,和她又慢慢的走到一起了。当时赚的挺少的,那点可怜的收入还要拿出一部分去还助学贷款,每次一起吃饭,她都会抢着去买单。我对自己说,我一定要对她好。那时候想,如果没有什么意外,我们就会这么走下去,那是件多么令人心动的事啊。

可是最终,她还是选择了离开。

那天晚上,北京的风很大。我一个人从和平里,走到北师大,然后走回回龙观。

我跟她说,我不会在回头。


那天,我在公司磨蹭,MSN组的两个同事也在加班。我说,出去吃饭吧。
吃饭的时候,我说,今天我生日。
今天我又一个人了。


UDB的PM要离职,然后就叫我过去接着做了,做了半年的样子,然后项目收尾。当时拿到了个Offer,也是外包的,后来考虑了下,没有走。之后又去清华那边做OWA,09年6月份的时候,整个exchange re-org,项目没了,又回到公司呆着。这时候又拿了个Offer的,不过最终还是没有走。然后就被塞到互联网那边做265.com的测试。10年2月份,我又坚持回来了原来的部门,开始做NetSec。这期间又拿了个Offer,最终又放弃了。


11年3月,NetSec项目又发生了变动。我又想走好久了,想了想,4月15号,我辞职了。

当办完离职手续,离开公司的时候,忽然感觉很轻松,也很伤感。毕业后的第一份工作,我在这里呆了5年8个月半,不长也不短。向过去的日子say goodbye把。


接下来,过了20多天猪一样的日子,很放松,很开心。每天睡到自然醒,然后起来看电视,偶尔看下书,为面试做下准备。下午5点多开始做饭吃饭,一天一顿饭,然后打游戏。

过了5.1开始不停的电话面试、笔试,面试,到处跑,到6月底差不多定了后,回家过端午节了,陪陪爸妈。

6.15到新的公司入职,新的工作。

十一
6年,差不多就这么过来了。

本来,想从大学开始写的,到现在10年。可是大学那四年,真的没有太多的回忆,除了逃课,睡觉,图书馆,就没别的了。

十二

十三
我的时间有限,我想用我有限的时间去跟另外一个人过better life。

如果找不到那个人,我愿意等。

三者的关系,简单的来说,ArrayList是Array的复杂版本,List是ArrayList的泛型版本。

Array

数组这类机制允许我们将多个数据项当成一个单独的集合来处理。所有的数组类型都隐式的继承自抽象类System.Array, 数组是引用类型,是在托管堆上分配的。程序中的变量,是对数组的引用,而不是对数组所包含的数组元素的引用。

ArrayList

ArrayList是Array的复杂版本,内部是使用动态增长大小的object类型数组来实现的,可以动态的增加或者删除元素。可以通过Capacity属性获取ArrayList的大小,默认为4,如果不够用的时候,会自动按照当前大小的2倍来自动增加。可以使用TrimToResize()方法删除ArrayList中的空项。

List

即为ArrayList的泛型版本

三者的相同点

  • 都具有索引,可以通过index来获取元素
  • 都是引用类型,存放在托管堆中
  • 都实现了IEnumerable接口,可以是用foreach进行枚举

Array和ArrayList的区别

  • Array只能存储同构的对象,ArrayList可以存储异构对象
    同构对象是指类型相同的对象,如果声明int[]的数组就只能存放整形,当然object[]类型除外。
  • 在CLR托管重的存放方式
    Array是连续存放的,而ArrayList的存放则不一定连续。
  • 初始化大小
    Array初始化时必须指定大小,而且大小是固定的,不能更改。而ArrayList大小则可以动态的指定
  • Array不能随意添加和删除其中的项,而ArrayList则可以

ArrayList和List

List是类型安全的,而且没有装箱/拆箱操作,提高了处理效率

其他补充

  • ArrayList内部封装了Object类型的数组,一些IndexOf,Sort等方法也是在内部数组的基础上直接调用Array的方法。
  • 内部的object类型数组的性能问题,对于一般的引用类型来说,没什么大影响,对于值类型来说,添加或者删除元素会涉及到装箱/拆箱会有一些影响。
  • 因为内部是使用object类型的数组,当执行Add,AddRange,Insert,InsertRange等方法添加元素的时候,需要检查当前容量,如果不过的话需要扩容。扩容时通过创建新数组,将原来的元素Copy到新数组来,然后丢弃原数组实现的。而且每次默认扩容时原来的2倍大小,如果最好正确的估计可能的元素,在创建时制定合适的大小,可以减少不必要的损失。
  • IndexOf,Contains等方法,是对数组进行简单的循环来实现的。如果有频繁调用的需求的话,建议使用Hashtable, SortedList等键值对的集合。

1963年,一位叫玛莉·班尼的女孩写信给《芝加哥论坛报》,因为她实在搞不明白,为什么她帮妈妈把烤好的甜饼送到餐桌上,得到的只是一句“好孩子”的夸奖,而那个什么都不干,只知捣蛋的戴维(她的弟弟)得到的却是一个甜饼。她想问一问无所不知的西勒·库斯特先生,上帝真的是公平的吗?为什么她在家和学校常看到一些像她这样的好孩子被上帝遗忘了。

西勒·库斯特是《芝加哥论坛报》儿童版栏目的主持人,十多年来,孩子们有关“上帝为什么不奖赏好人,为什么不惩罚坏人”之类的来信,他收到不下千封。每当拆阅这样的信件,他心就非常沉重,因为他不知该怎样回答这些提问。正当他对玛莉小姑娘的来信不知如何回答是好时,一位朋友邀请他参加婚礼。

也许他一生都该感谢这次婚礼,因为就是在这次婚礼上,他找到了答案,并且这个答案让他一夜之间名扬天下。

西勒·库斯特是这样回忆那场婚礼的:

牧师主持完仪式后,新娘和新郎互赠戒指,也许是他们正沉浸在幸福之中,也许是两人过于激动。总之,在他们互赠戒指时,两人阴错阳差地把戒指戴在了对方的右手上。牧师看到这一情节,幽默地提醒:右手已经够完美的了,我想你们最好还是用它来装扮左手吧。

西勒·库斯特说,正是牧师的这一幽默,让他茅塞顿开。右手成为右手,本身就非常完美了,是没有必要把饰物再戴在右手上了。那些有道德的人,之所以常常被忽略,不就是因为他们已经非常完美了吗?后来,西勒﹒库斯特得出结论,上帝让右手成为右手,就是对右手最高的奖赏,同理,上帝让善人成为善人,也就是对善人的最高奖赏

西勒·库斯特发现这一真理后,兴奋不已,他以“上帝让你成为好孩子,就是对你的最高奖赏”为题,立即给玛莉·班尼回了一封
信,这封信在《芝加哥论坛报》刊登之后,在不长的时间内,被美国及欧洲一千多家报刊转载,并且每年的儿童节他们都要重新刊载一次。

前不久,一位中国人不知在什么地方发现了这封信,读后的网页上留言说:“中国民间有一句古话,叫「恶有恶报,善有善报,不是不报,时候未到」。我曾经对恶人迟迟得不到报应感到迷惑不解。

现在我终于明白,因为 : “让恶人成为恶人, 就是上帝对他们的惩罚。

『人为善,福虽未至,祸已远离; 人为恶,祸虽未至,福已远离。』

无意间看到这篇文章,这几天竟然完全和自己吻合,好像就是写给我是的,自勉!

———-

一、立刻要回报,穷人心态

1、 每碰到一个机会他们总是看到机会中的困难,总说不!

[我就是这样,总是先想到困难的一面,这样不行,那样不行,然后就会就错过了]

2、总想一夜暴富,容易得到的东西决不是有价值的,有价值的东西决不会让你轻而易举得到,奥运会冠军是一夜成名的吗?他们只不过是在比赛中得到了人们对他们训练成绩的肯定而已罢了!《富爸爸商学院》中说,在美国凡中彩票超一百万的,五年后他们的生活还不如以前。

[经常想中了彩票,然后怎么去支配这笔钱,可是连彩票都不买- -!]

二、 不自律

1、 不愿改变自己的旧有的思考方式

人 与人之间最根本的区别就是思考方式的差别,我们要想成为成功人士,就必须先改变我们的思考方式,然后改变我们的行为方式,做一件事你光看到困难, 你连想都没想能成功,你会成那不成了奇迹?旧有的思考方式:立刻要回报、穷人心态、遇到困难就放弃,持之以恒的力量是无坚不摧的!旧有的行为方式:看电视、喝酒、无聊的应酬、打牌、下棋……

[一个人的思维方式太难改变了。。。]

2、喜欢在背后议论别人

这种人被我们称为闲人,对这样的话我们不听不说不传,即便议论的话是对的对你也没一点好处!

3、 经常抱怨、行为消极

人不可能是完美的,或多或少的存在缺点,只要不是原则问题,我们要看他们好的一面,更重要的是你不能老是看到别人的缺点,即便你的抱怨是对的,你也不要抱怨,因为成功者绝不抱怨,抱怨者永不成功!

[跟最前面的差不多,更多的是看到不好的一面]

4、 拒绝学习、拒绝改变

二 十一世纪这个世界最显著的三个特怔是:速度、多变、危机,我们的对策是:学习、改变、创业,你学的越快,你改变的速度越快,你成功的也就越快。当今企 业的竞争其实就是人才的竞争,人才的竞争就是学习力的竞争。现在是与狼共舞的时代,你要想成功,你首先得成为一条狼!现在的富翁,再过五—十年有80%将 走向破产,你要想成功,你必须学习学习改变=成功。

三、经常被情绪所左右

世界上多少的悲剧、多少的恐惧都是人与人之间不能容忍发生的,有些人遇到一点事就火冒三丈,怒发冲冠

成功的五大因素中第一大因素就是能够控制自己的情绪,第二大就是健康,第三是时间管理,四是财务管理,五是良好的人际关系。

[嗯嗯,控制情绪]

处理好人际关系的三大秘诀:

1、关心别人胜过关心自己;

2、三不三多,即不指责、不抱怨、不批评,多赞美、多表扬、多包容;

3、善于倾听、善于沟通!无知而热情胜过博学而冷漠!

四、 不愿学习、自以为是,没有归零的心态

人学习要经历四个阶段:

1、不学: 不知己不知

2、学了一点: 知之己不知

[现在大约这个阶段呢]

3、再学一阶段;知之己知之

4、最成熟阶段:不知己知之

所以归零的心态对每个人都很重要,一个海绵如不把原来的水挤干,就不可能吸很多的水,谁归零的越快越好,谁就会越能走向成功。

五、 判断事物靠直觉,而不是以事实为依据

在我们生活中有很多人说话做判断不是事实,而是靠直觉:我以为。。。我认为。。。。

六、 做事不靠信念、靠人言

人生为自己活着,而不是为别人活着,别人的嘴长在别人的身上,别人想怎么说就怎么说,你管不了,没有人会为自己的错误的指导而承担责任,而现实中许 多人就是好为人师,这个世界的人群中一边是5%,一边是95%,5%的成功人士在没有成功之前都被人称为傻子疯子,无线电发明人甚至被当着疯子抬到精神病 院去。

因为我们不想过与许多人一样的生活,所以我们甘愿寂寞、孤独,让人去笑!

Theresa Neil的关于UI设计模式的文章,这些模式基本来自于桌面设计模式,少量混合了很多较好的RIA组件及设计原则。作者用100个示例来说明这些模式。原文为:http://designingwebinterfaces.com/designing-web-interfaces-12-screen-patterns

UI Design Patterns

2010年,作者有做了更新,添加了几种新的模式,和更多的例子:

本文是一系列文章中的一篇,此外还有两篇文章分别关于一些常用的控件和组件: