一些值得思考的问题


0)许多年前,当我看到珊瑚虫QQ把IP转成地实际地址的时候,我就在思考,如果我有一个IP网段的数据(全球IP地址数据),我怎么来完成这个功能呢?比如:某地点的IP网段是:10.10.1.* – 10.10.5.*。我要有一个IP地址是:10.10.3.20,我怎么匹配这个网段?用Hash表吗?好像有问题。把IP字串转成整型?排序+二分法,好像更容易解决一些,但是如果有一些修改的话好像有点不方便。用树型结构(森林)会不会更好一些呢?如果我要通过地点反查IP段呢?

1)网上短网址服务,你有想过这个短网址生成的算法是什么,如何能做到能最短?怎么查询?你也许觉得会用key-value的NoSQL。那么,如果对于同一个URL,如果要重用已生成的短网址,你怎么用key-value的NoSQL来解决?

英汉词典的检索和这个很相似,如果通过英文查汉语,又通过汉语查英文?如果是N多种语言的互相翻译呢?你的数据存储和检索如何做呢?

2)当我看到Dropbox这样的云同步的软件的时候,我不知道你是否会和我一样会去思考,在多个设备间的文件同步是怎么做的?如果网盘上有几万,甚至几百万个文件,当要和我的本地数据同步时,他如何比较经济地知道哪些文件更改了?需要向服务端同步或是向客户端同步。更进一步,你有没有想过没有中心结点的文件同步问题?你有没有想过,文件冲突的问题?

3)我们的新员工入职的时候,有一些公司会给新员工的帐号生成一个随机口令,然后新员工可以在登录后修改口令(我一直在想我们的银行应该为用户生成一个随机口令,而不是设置一个6个0或是6个8的初始口令)。那么,对生成随机安全口令的算法知道怎么做吗?如果你写出这个算法来了,你怎么证明这个算法是足够随机,生成的密码强度足够大的?(你会发现,测试口令是否随机是否安全的程序,会比生成器更难写)

4)关于动态密码RSA SecurID(如下图),这个小设备上的6位数字会每60秒变一次,在你登录的时候,需要输入这6位数字,服务器上会认证这6个数字,那么这个事怎么做?再试想一下,这样的小设备我要发给我的客户,我希望我的每个客户都使用不一样的随机算法,就算是算法一样,算法的种子也不能一样。那么,如果我的客户一共有百万甚至千万,我的服务端怎么管理这些用户的SecurID?

5)看看我们的网银或是ATM的用户登录功能,如果你登录时输错口令超过3次以上,你的帐号就会被冻结,需要去柜台重置口令。这个功能看上去很安全,因为可以防止黑客在线尝试破解你的登录口令。不过这又带来了另一个问题,如果有一个恶意用户知道你的卡号,他就上网或是造个卡故意输错你的口令,导致你的帐号被冻结,让你一次又一次地去银行排队重置。面对这样的情况,你该怎么解决?

6)当你在网上购物的时候,你会去一些电子商务的网站,这些网站都会对他们的产品进行分类,有大分类有子分类。你进到分类后,你可以通过不同的属性来过滤不同该分类下的商品,注意,不同分类下的商品的过滤属性不一样,如,手机分类和电视分类的属性都不一样。试问,你如何设计你的数据库表结构?

7)当你在泡各种论坛或SNS社区的时候,你会看到,用户在互相回复的时候存在一个问题,尤其是用户量很大的时候,大家的回复完全交织在一起什么 也看不清楚。以前有的论坛使用树形列表来解决这个问题,树形列表好是好,但是把一棵大树放在那里还是很难看。Twitter.com给了一个非常不错的解决方式,就是所有人的回复或是回复的回复都按时间线放在一起,如果你要查看某回复的上下文的话,点击一下这个回复就可以看到了(我在我在“国内微博和Twitter的最大不同”中批评过这个事)。新浪微博在禁评论事件后也开发出了这个功能。你知道这个事怎么做吗?

更进一步,新浪微博的设计上有很多的缺陷,单说新开发的“查看评论”功能这个事来说,还是不完美,因为某些评论会随着转发带到别的地方去,他的“查看评论”功能只能看到当个贴子下的东西,不能把所有转发出去的贴子的评论一起综合起来。虽然这对于用户使用来说没有什么在不了的,但是对于软件设计来说,我们不妨做一个练习,可以思考一下,怎么样设计会更好。

再举一反三,有时候,我发现多个网友会提出同样的问题,我很想用一个回复同时回复他们。如果有这样的功能的话,我们的回复就会从一个树形变成另外一种形状了,我们又该如何设计才能支持这样的功能呢?

8)说到新浪微博,我就想多说几句,我最近观察到了两个事:

  • 一个是验证码的事,如果你在你的帐号设置里设置了“登录需要验证码”,你会发现,在登录新浪微博的时候,仅当你输对了口令后,系统才会提示你输入验证码。为什么呢?因为,这个“登录需要验证码”这绑定在你的帐号设置里的,所以,要取这个设置,就需要你登录成功(?!),老实说,这个功能在设计上有点二(中国特色)。如果是你,你怎么设计呢?
  • 另一个事情是新浪微博或Twitter的用户名修改后,被他人@过的信息就再也链接不到你这里来了。我们来试想一下,如果是你,你怎么解决这个问题?(我的我的微博里讨论过这个事,不一定对,供大家参考)

9)我有时候我会发一些快递,有时候是一些小东西,有时候是一些大包裹,有时候近,有时候远。我发现一个有趣的现象,就是快递员来收件的时候,快递的价格都是快递员自己说了算的,我还可以和他们砍价。我观察到他们会以距离,重量大小来订价。于是我在想如果你要运营一个物流公司,你作为这个物流公司的程序员,你需要开发一个软件来标注快递价格,你会怎么做?比如,这个快递公司会说,在北京五环以内是一个价,以外是一个价,出省后,上海以北是一个价,上海以南是一个价,等等,这只是北京的,如果把全国的各个城市到别的城市的价格都考虑进来,还要受到重量,体积,价格,是否加急等等因素的影响,你的数据库设计要怎么做呢?

A)国内的水军太恐怖了。他们活动的刷排名,刷信用,刷积分,刷粉丝等等地方,你是否想过如何解决这个问题?还有广告联盟的欺诈问题,等等。这些东西,有的还是可以通过技术手段进行限制和计算的,你有思考过应该使用什么样的方法吗?

B)说到水军就不能不提垃圾邮件和垃圾短信。你有没有想过邮件系统怎么过滤垃圾信息的?

C)关于推荐功能,这必然是一个热点,这是软件产品从request -> response的被动方式到主动方式的进化。微博上有推荐关注者的功能,电商有推荐商品的功能,豆瓣上有推荐影片音乐书籍的功能。不同的领域的推荐算法各不相同,你有没有思考过,如果是你来做推荐算法的时候,你会怎么做吗?更进一步,推荐通常伴随着学习和匹配,学习用户的行为,匹配相似的东西,你想过怎么学习用户的行为,怎么匹配相似的东西了吗?

D)关于微博,某名人有几千万的粉丝,当这个名人发一个微博的时候,需要通知这几千万个粉丝,这个在系统架构上应该怎么做?如果某天这个名人与人发生口角,和人吵架,拼命的刷微博,那么,系统架构要怎么设计才能支持这样的事呢?

E)想想火车票的分段卖票的方式,现有的解决方案是为每个站点预留票,于是我们可以看到火车始发时,有很多空坐,这些空坐都是留给下一个站点的,我们能否开发出一个系统来,可以把一条线上的这些这站上那站下的旅客统筹规划一下,制定出一个最经济的方式,让火车运行得更有效。

F)对于地铁公交网络,我们希望这个网络既能有更多的覆盖,又能节省路线,你能不能设计出一个系统,当我们输入一些数据(如:站点,是否终点或起点站,该站的下一站可能方向(多个),该站是以上车为主,还是下车为主,等等),你的系统能自动安排出各种线路吗?

这样的问题实在是太多了,都是可以让我们去思考的,并不一定有经济效益,但是至少可以让你锻炼一下怎么去分析问题,怎么去思考,怎么去解决问题

优质内容筛选与推荐>>
1、Linux_NetworkManager_RHEL7
2、【原创翻译】认识MVC设计模式:web应用开发的基础(实际编码篇)
3、【windows socket+HTTPserverclient】
4、单元测试之白盒测试代码框架
5、在线Icon资源收集


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号