论坛首页 Java企业应用论坛

面试高级Java研发工程师,你会问什么

浏览 64539 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-17  
heijian202 写道
liulijun.cn.2011 写道
liguocai2009 写道
顺道发个问吧,J2EE开发再什么情况下会使用多线程编程,举个具体的业务场景。。。

1.比如一个小组有50个人。组长在某个大会上竞标了一个项目。回到公司后组长通过邮件的方式通知剩下的49个人。
发送邮件的间隔为5秒钟一次。
假设这是一个web程序。组长在网页中写完邮件内容之后,点击发送按钮,将内容传递给后台。然后后台读取邮件列表,分别发送给其余的49人邮件。从点击发送按钮开始发送邮件。到全部发送完毕,是一个非常长的时间。
所以程序设计的时候,就应该将邮件内容传递到后台之后。分开两个线程。一个做完相应的处理之后返回前台画面,前台可以继续其他操作。另一个线程去做发送邮件的任务。如果只是用一个线程,那必须等待所有邮件发送完毕之后才能返回前台画面。组长才可以继续其他操作。
不知道明白不?



我会用ajax去完成。尽量不用多线程。


不是所有情况都可以用ajax的。再说你用ajax发请求的时候,画面会假死把。
0 请登录后投票
   发表时间:2012-05-17  
liguocai2009 写道
顺道发个问吧,J2EE开发再什么情况下会使用多线程编程,举个具体的业务场景。。。


例如一个请求,需要查询10张表的数据,如果顺序查询10个数据表数据需要2s,那么我可能使用多线程分别请求10个表数据, 这样我只需要500ms,这就是其中一个场景
0 请登录后投票
   发表时间:2012-05-17  

liulijun.cn.2011 写道
heijian202 写道
liulijun.cn.2011 写道
liguocai2009 写道
顺道发个问吧,J2EE开发再什么情况下会使用多线程编程,举个具体的业务场景。。。

1.比如一个小组有50个人。组长在某个大会上竞标了一个项目。回到公司后组长通过邮件的方式通知剩下的49个人。
发送邮件的间隔为5秒钟一次。
假设这是一个web程序。组长在网页中写完邮件内容之后,点击发送按钮,将内容传递给后台。然后后台读取邮件列表,分别发送给其余的49人邮件。从点击发送按钮开始发送邮件。到全部发送完毕,是一个非常长的时间。
所以程序设计的时候,就应该将邮件内容传递到后台之后。分开两个线程。一个做完相应的处理之后返回前台画面,前台可以继续其他操作。另一个线程去做发送邮件的任务。如果只是用一个线程,那必须等待所有邮件发送完毕之后才能返回前台画面。组长才可以继续其他操作。
不知道明白不?



我会用ajax去完成。尽量不用多线程。


不是所有情况都可以用ajax的。再说你用ajax发请求的时候,画面会假死把。


对哦,可以用多线程可以防假死,我写过一个上传文件的applet,上传的方法是启动一个线程来上传,如果直接写上传的代码画面会卡死。




ak478288 写道
liguocai2009 写道
顺道发个问吧,J2EE开发再什么情况下会使用多线程编程,举个具体的业务场景。。。


例如一个请求,需要查询10张表的数据,如果顺序查询10个数据表数据需要2s,那么我可能使用多线程分别请求10个表数据, 这样我只需要500ms,这就是其中一个场景


这种提升性能的原理是?
中间层<-->数据库
1 利用中间多核CPU的并发执行多个任务,单核的话,多线程没有意义。
2 利用数据库可以同时处理多个请求的特点。这个应该是使用多线程的主要考虑因素吧

除了上面防卡死,并发请求数据的两种场景,有没有其他使用多线程的业务场景?兴奋,求知若渴中。。。
0 请登录后投票
   发表时间:2012-05-17   最后修改:2012-05-17
大家有没有用多线程处理过一些资源竞争大的场景?教材讲多线程都会讲到一些读写同步的说,实际上并没有接触到需要实现读写同步算法的。。。
0 请登录后投票
   发表时间:2012-05-17  
反正那种要你背书的不行
0 请登录后投票
   发表时间:2012-05-17  
liguocai2009 写道
大家有没有用多线程处理过一些资源竞争大的场景?教材讲多线程都会讲到一些读写同步的说,实际上并没有接触到需要实现读写同步算法的。。。

给你举个需要线程同步的例子:
经理通过一个画面可以设置小组A这个月的订单数量(可以随时修改,非固定的)。这里假设为100。
当小组成员收集到信息填写单据之后,数据在保存到数据库的时候,需要为每一个订单获取一个ID,假设格式为:
小组名称-成名姓-这个小组的第几张单据,并且同时还需要验证这个单据是否超出了经理设置的数量。
方法:
public String getId(xxxxx xxx) {
//获取经理设定的单据数量
//xxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxx
return "小组A-刘-001"
}
每次在获取ID的这个地方都需要耗费大量的时间。这个方法如果不实用线程同步,就会造成两个单据获取到一摸一样的单号。这时不允许的。
0 请登录后投票
   发表时间:2012-05-17  
我只问你了解哪些JSR,谈谈你对他们的看法?
0 请登录后投票
   发表时间:2012-05-18  
liulijun.cn.2011 写道
liguocai2009 写道
大家有没有用多线程处理过一些资源竞争大的场景?教材讲多线程都会讲到一些读写同步的说,实际上并没有接触到需要实现读写同步算法的。。。

给你举个需要线程同步的例子:
经理通过一个画面可以设置小组A这个月的订单数量(可以随时修改,非固定的)。这里假设为100。
当小组成员收集到信息填写单据之后,数据在保存到数据库的时候,需要为每一个订单获取一个ID,假设格式为:
小组名称-成名姓-这个小组的第几张单据,并且同时还需要验证这个单据是否超出了经理设置的数量。
方法:
public String getId(xxxxx xxx) {
//获取经理设定的单据数量
//xxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxx
return "小组A-刘-001"
}
每次在获取ID的这个地方都需要耗费大量的时间。这个方法如果不实用线程同步,就会造成两个单据获取到一摸一样的单号。这时不允许的。


这个案例没看懂。。。

1 每次在获取ID的这个地方都需要耗费大量的时间。这是不是说要求多个线程同时调用getId的意思?
2 ID号是怎么生成的?为什么存在ID号重复的问题?如果ID = 数据库SEQUENCE.NEXTVAL,怎么可能重复呢。。。
3 订单数据可以随时修改,不是固定,是不是意味着生成ID的时候也要锁定总订单数的值?
0 请登录后投票
   发表时间:2012-05-18  
liguocai2009 写道
liulijun.cn.2011 写道
liguocai2009 写道
大家有没有用多线程处理过一些资源竞争大的场景?教材讲多线程都会讲到一些读写同步的说,实际上并没有接触到需要实现读写同步算法的。。。

给你举个需要线程同步的例子:
经理通过一个画面可以设置小组A这个月的订单数量(可以随时修改,非固定的)。这里假设为100。
当小组成员收集到信息填写单据之后,数据在保存到数据库的时候,需要为每一个订单获取一个ID,假设格式为:
小组名称-成名姓-这个小组的第几张单据,并且同时还需要验证这个单据是否超出了经理设置的数量。
方法:
public String getId(xxxxx xxx) {
//获取经理设定的单据数量
//xxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxx
return "小组A-刘-001"
}
每次在获取ID的这个地方都需要耗费大量的时间。这个方法如果不实用线程同步,就会造成两个单据获取到一摸一样的单号。这时不允许的。


这个案例没看懂。。。

1 每次在获取ID的这个地方都需要耗费大量的时间。这是不是说要求多个线程同时调用getId的意思?
2 ID号是怎么生成的?为什么存在ID号重复的问题?如果ID = 数据库SEQUENCE.NEXTVAL,怎么可能重复呢。。。
3 订单数据可以随时修改,不是固定,是不是意味着生成ID的时候也要锁定总订单数的值?

Action在运行的时候,每个用户请求的action就是一个线程。可以理解为多个线程同时调用这个方法。第二个问题我上面说过了“小组名称-成名姓-这个小组的第几张单据”采用复杂格式获得。并不是取简单的数据库序列那种。所以默认不存在唯一值的设定。当用户A请求了这个方法,进入的同时,用户B也请求了这个方法。恰好。用户A和B属于同一个小组,姓也相同。这时就会算出两个一模一样的ID来。所以这里需要线程同步。
第三个问题 不是锁定总订单的值。只是取出来验证。当前已有订单数和总订单数。是否可以存储下一个订单。
0 请登录后投票
   发表时间:2012-05-18  
一般是看简历,参与过的项目往下问。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics