第一题:
一个提供Android APK下载的站点,原采用单台服务器,该服务器有一公网IP. 后业务量增加,短时间内修改代码不现实,如何应对指数增长的用户量?
答:
0> 静态文件分离,把apk放到一个专门的web server中. 同时该web server使用不同域名.
1> 静态文件web server做cdn.
2> 公网ip绑定到负载均衡器上, 用round robin方式轮询web server.
3> 负载均衡器连接一个专门做缓存的server (memcache/varnish), 缓存不命中再连接web server.
4> 数据库和web server分离. 数据库可用多库并联, 可用 master-master 或者 master-slave 的方式连接. 提高并发的同时提高健壮性.
5> 数据库打到瓶颈时可分表, 继续提高并发.
6> 如果数据库数据量不是太大,可以把redis作为主数据库(数据全部in memory),同时把传统的rdbms作为备用数据库.若使用了DAO的话,可以减少代码的修改量.
第二题:
找出二叉树中节点最大的差值,注意性能.
代码大意:
用栈模拟递归,做中序遍历,找出二叉树中的maxVal和minVal,返回abs(maxVal-minVal)
第三题:
解决一个本质上是个最长公共序列(LCS)问题,注意性能.
代码:
用动态规划做,代码就不贴了.
---------------------------
个人没有做过高并发应用,第一题纯属纸上谈兵,请问大家有什么看法?
PS:已经交卷,所以不用担心抄袭...
一个提供Android APK下载的站点,原采用单台服务器,该服务器有一公网IP. 后业务量增加,短时间内修改代码不现实,如何应对指数增长的用户量?
答:
0> 静态文件分离,把apk放到一个专门的web server中. 同时该web server使用不同域名.
1> 静态文件web server做cdn.
2> 公网ip绑定到负载均衡器上, 用round robin方式轮询web server.
3> 负载均衡器连接一个专门做缓存的server (memcache/varnish), 缓存不命中再连接web server.
4> 数据库和web server分离. 数据库可用多库并联, 可用 master-master 或者 master-slave 的方式连接. 提高并发的同时提高健壮性.
5> 数据库打到瓶颈时可分表, 继续提高并发.
6> 如果数据库数据量不是太大,可以把redis作为主数据库(数据全部in memory),同时把传统的rdbms作为备用数据库.若使用了DAO的话,可以减少代码的修改量.
第二题:
找出二叉树中节点最大的差值,注意性能.
代码大意:
用栈模拟递归,做中序遍历,找出二叉树中的maxVal和minVal,返回abs(maxVal-minVal)
第三题:
解决一个本质上是个最长公共序列(LCS)问题,注意性能.
代码:
用动态规划做,代码就不贴了.
---------------------------
个人没有做过高并发应用,第一题纯属纸上谈兵,请问大家有什么看法?
PS:已经交卷,所以不用担心抄袭...