日期:2014-05-18  浏览次数:20888 次

Java多线程面试题求开解
前两天去某IT公司面试,有一道多线程的题让我摸不着头脑,求达人开解.
题目:
从应用服务器、应用、数据库角度设计高并发程序,每秒100笔
还给出了一个代码片段
static void operate(StringBuffer x, StringBuffer y){
y = x.append(y);
        x = y;
}

这个题目吧是开放性的,求大神开解思路

------解决方案--------------------
都说是开放性的了。。高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”。
如:能缓存在用户电脑本地的,就不要让他去访问CDN。 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了。能访问静态服务器的,就不要去访问动态服务器。
以此类推:能不访问数据库和存储就一定不要去访问数据库和存储。
数据库cache,比如:memcache,memcachedb等等。

------解决方案--------------------
引用:
Quote: 引用:

看不懂你想问什么,题目和代码片段搭不上界,你把全部题目贴出来


问高并发程序的设计思路,题目的主要内容都在这里了

额,这题是考忽悠的功底啊这么抽象

应用服务器:前端负载均衡、静态化、CDN,能不访问后端就不访问后端,能把请求分散就把请求分散,尽量做到无状态的交互,把请求均衡分布到很多个节点上
应用: 缓存,能不访问数据库就不要访问数据库;提高算法性能,能减少单位请求开销就减少单位请求开销;
数据库:集群;读写分离;分表分库;服务化系统化

能吹的太多了
------解决方案--------------------
初步考虑一个方案:
1、将程序切分为两个子职能:一个职能负责接收所有请求,另一个专门负责拼装字符串;
2、负责接收请求的,处理很简单,给每一笔操作都提供一个顺序号,然后就可以保存下来了(文件或数据库都行);
3、负责拼装字符串的,又可以分为两类,一类负责完成每一秒中100笔字符串的拼装,这个可以多线程并发;另一类则负责在前者基础上将每一秒组装后的结果再进行组装。

对于TPS100的,上述方案应该基本能胜任,如果并发量再高2个数量级,问题就又复杂了。。。