关于 二月, 2014 的文章

一道面试题

题目: 有一个长度是101的数组,存有1 ~ 100这100个数字,其中一个是重复的。请设计一个算法找出这个重复的数字

 
#!/usr/bin/env python
#-*- coding:utf-8 -*-

arr1 = [5,2,1,9,6,2,8]
arr2 = {}.fromkeys(arr1).keys()
print arr2
#效率高,但不符合题目要求

arr3 = list(set(arr1))
print arr3
#效率更高,但仍然不符合题目要求

arr4 = sorted(arr1)
i = len(arr4) - 1
for x in range(i):
    y = x + 1
    if arr4[x] == arr4[y]:
        print arr4[x]
#达到题目要求了,可惜面试时间已过
#当时怎么就没有想到用sorted这个方法呢
#还是自己技术太差了
#惭愧啊惭愧

有哪位前辈有效率更高的算法,还请告诉我这个菜鸟,谢谢。

13 Comments

使用Mosh来优化SSH连接

参考资料:
http://mosh.mit.edu
http://www.slashroot.in/mosh-better-alternative-ssh

背景介绍:
目前我维护的服务器,大部分都是在美国西海岸,从天朝连过去那速度,有时候真让人咬牙切齿。
无意间看到了Mosh这个玩意儿,试用了一下响应速度上没有特别大的提升,但基本上没有再断开和卡住过了。
查看了一下官方网站的介绍,大致了解了Mosh这个东西,最大的特点是基于udp方式传输,支持在服务端创建一个临时的Key供客户端一次性连接,退出后失效;也支持通过SSH的配置进行认证,但数据传输本身还是自身的udp方式。
另外,Mosh还有两个我觉得非常有用的功能:
1. 会话的中断不会导致当前正在前端执行的命令中断,相当于你所有的操作都是在screen命令中一样在后台执行;
2. 会话在中断过后,不会立刻退出,而是启用一个计时器,当网络恢复后会自动重新连接,同时会延续之前的会话,不会重新开启一个。

下面,是具体的安装配置过程:
客户端:demoenv
服务端:heydevops

1. 同时在服务器端与客户端上安装Mosh,这是一件非常简单的事情
[dong.guo@demoenv ~]$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[dong.guo@demoenv ~]$ sudo yum install mosh
[dong.guo@heydevops ~]$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[dong.guo@heydevops ~]$ sudo yum install mosh

2. 采用SSH配置进行认证,只需要在客户端上执行mosh命令即可
[dong.guo@demoenv ~]$ mosh dong.guo@heylinux.com
[dong.guo@heydevops ~]$ exit

 
logout
[mosh is exiting.]

如果服务端修改过SSH的端口,或需要指定单独的SSHKEY,可以通过--ssh参数的方式:
[dong.guo@demoenv ~]$ mosh --ssh="ssh -i /home/dong.guo/.ssh/oozie -p 2222"

3. 采用临时Key的方式进行一次性认证,需要在服务端创建Key,然后客户端通过这个Key进行登录,该Key会在会话结束十分钟后自动失效
创建一个临时的Key和端口供Client登录
[dong.guo@heydevops ~]$ mosh-server

MOSH CONNECT 60001 kk4Y4csML8rJmXXYc4Ibow
mosh-server (mosh 1.2.4)
Copyright 2012 Keith Winstein <mosh-devel@mit.edu>
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[mosh-server detached, pid = 27290]

首先定义好MOSH_KEY的值
[dong.guo@demoenv ~]$ export MOSH_KEY=kk4Y4csML8rJmXXYc4Ibow
注:mosh-client 后面只能跟服务器具体的IP地址和临时端口,不支持主机名或域名方式
[dong.guo@demoenv ~]$ mosh-client 192.168.92.128 60001
[dong.guo@heydevops ~]$ exit

logout
[mosh is exiting.]

2 Comments

知之不若行之

找到自己感兴趣的,花时间投进去,通过实践后的知识积累比只看书本有用得多。我看过一本操作系统方面的英文书,其中引用了一段中国人的格言:“I hear and I forget. I see and I remember. I do and I understand”,这句话给我留下非常深刻的印象。是荀子说的“不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。”
--- 章文嵩(LVS开源软件创始人)

2 Comments