两道笔试题奉上

阳明 to life 2011-10-10 09:40:06
第一题:两个数集,都有20亿个数,4G内存,可以使用外存,求两个数集的交集
第二题:原题就是这样的代码,问高并发环境存在的问题,如何改进

public class CountServlet extends HttpServlet
{
private volatile static int count;

public void processRequest(HttpServletRequest req)
{
//processRequest
}

public int getCount()
{
return count;
}


public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
count++;
processRequest(req);
PrintWriter out = resp.getWriter();
out.write("hello");

}
}

...全文
1236 64 打赏 收藏 转发到动态 举报
写回复
用AI写文章
64 条回复
切换为时间正序
请发表友善的回复…
发表回复
商科程序员 2011-10-14
  • 打赏
  • 举报
回复
第一题因为有4G内存,可以用位图,位图存INTEGER只需要512M.
第二题应该用原子INT.
jgshwj 2011-10-14
  • 打赏
  • 举报
回复
mark!
mkki 2011-10-13
  • 打赏
  • 举报
回复
都是牛人
yujie_v 2011-10-13
  • 打赏
  • 举报
回复
大数据量处理,偶不太懂的
一个程序写手 2011-10-12
  • 打赏
  • 举报
回复
先看看,以后再想怎么做
dxqrr 2011-10-12
  • 打赏
  • 举报
回复
mark
阳明 to life 2011-10-12
  • 打赏
  • 举报
回复
200分有限~没得到分的请见谅
gukuitian 2011-10-12
  • 打赏
  • 举报
回复
mark
frank_29 2011-10-12
  • 打赏
  • 举报
回复
MARK,学习了。
BearKin 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 53 楼 bill600 的回复:]
引用 51 楼 bearkin 的回复:

引用 50 楼 bill600 的回复:
引用 14 楼 bearkin 的回复:

第一题不知道 单说第二题

虽然他用了volatile 修饰符 但是这个修饰符仅提供内存可见性保证,不提供原子性。所以在更新属性count的时候 还是要用synchronized代码块的
另外 这个属性是不是静态在并发这里并不重要

并发产生问题的原……
[/Quote]

不是默认是单例 跟单例无关..

遵循规范的容器只创建一个实例(但不是那个什么单例 因为你要是乐意的话你可以自己new几个Servlet玩)
不遵循的就可能创建多个实例(我也不知道 乱喷的)
chengxifeng 2011-10-12
  • 打赏
  • 举报
回复
菜鸟不懂啊
fendoudxiaohouzi 2011-10-12
  • 打赏
  • 举报
回复
会不会死机?运行?
bill600 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 51 楼 bearkin 的回复:]

引用 50 楼 bill600 的回复:
引用 14 楼 bearkin 的回复:

第一题不知道 单说第二题

虽然他用了volatile 修饰符 但是这个修饰符仅提供内存可见性保证,不提供原子性。所以在更新属性count的时候 还是要用synchronized代码块的
另外 这个属性是不是静态在并发这里并不重要

并发产生问题的原因是有共享的资源,如果不是静态属性 这里还会有……
[/Quote]
查了一下 默认是单例 也可以是多个实例 平时还真没注意这个问题
  • 打赏
  • 举报
回复
已阅过了
BearKin 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 50 楼 bill600 的回复:]
引用 14 楼 bearkin 的回复:

第一题不知道 单说第二题

虽然他用了volatile 修饰符 但是这个修饰符仅提供内存可见性保证,不提供原子性。所以在更新属性count的时候 还是要用synchronized代码块的
另外 这个属性是不是静态在并发这里并不重要

并发产生问题的原因是有共享的资源,如果不是静态属性 这里还会有共享的资源吗,似乎这里也不是单例模式
[/Quote]

请你搜索下容器启动后Servlet会有几个实例...
bill600 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 bearkin 的回复:]

第一题不知道 单说第二题

虽然他用了volatile 修饰符 但是这个修饰符仅提供内存可见性保证,不提供原子性。所以在更新属性count的时候 还是要用synchronized代码块的
另外 这个属性是不是静态在并发这里并不重要
[/Quote]
并发产生问题的原因是有共享的资源,如果不是静态属性 这里还会有共享的资源吗,似乎这里也不是单例模式
zhouYunan2010 2011-10-11
  • 打赏
  • 举报
回复
我算了下,4G大概能存10亿个数....
teemai 2011-10-11
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 bearkin 的回复:]

引用 17 楼 huxiweng 的回复:
引用 14 楼 bearkin 的回复:

第一题不知道 单说第二题

虽然他用了volatile 修饰符 但是这个修饰符仅提供内存可见性保证,不提供原子性。所以在更新属性count的时候 还是要用synchronized代码块的
另外 这个属性是不是静态在并发这里并不重要


volatile是原子性的吧,请指教,

Volat……
[/Quote]

Thx。
luyun2011 2011-10-11
  • 打赏
  • 举报
回复
俺帮你搞定,帮顶!
BearKin 2011-10-11
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zhouyuqwert 的回复:]
引用 20 楼 bearkin 的回复:

引用 17 楼 huxiweng 的回复:
引用 14 楼 bearkin 的回复:

第一题不知道 单说第二题

虽然他用了volatile 修饰符 但是这个修饰符仅提供内存可见性保证,不提供原子性。所以在更新属性count的时候 还是要用synchronized代码块的
另外 这个属性是不是静态在并发这里并不重要


volat……
[/Quote]
我基本不用 所以我第一次回答的时候跟huxiweng、zhao251021539回答的一致(当然 没那么深入 就是那种盲目的认为...)
加载更多回复(42)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧