论坛首页 Java企业应用论坛

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

浏览 64531 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-18  
liulijun.cn.2011 写道
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   最后修改:2012-05-18
问什么是要根据公司招聘这个职位的目的来讲的

如果是为了应付项目,找一个能够立马上手的高手, 那只能对着项目中需要使用到的技术来问, 如果对使用的技术不熟悉, 只能say bye;

如果是有一个职位空缺, 不是很着急开发项目的, 那是招人, 对这个人做过的工作 使用过的技术进行详细的询问, 看这个人对学过的技术掌握程度, 以及技术如何运用的,  如果一个人有良好的学习能力, 良好的技术使用能力的话,  学习一个新的技能应该也不是难事.
0 请登录后投票
   发表时间:2012-05-18  
面试比较偏重于设计、问题解决思路方面,代码方面差不多即可,注重设计,如果没有思想招来也就是一个干活的,对整个团队没有任何益处。
0 请登录后投票
   发表时间:2012-05-18  
ak478288 写道
ouyida3 写道
如果面试者充分了解公司需求并定义好,被面试者的沟通表达能力足够并且是诚实的,1分钟的面试就可以确定是否合适。

我倒没那么快,看中的人基本都在30分钟之内确定的

这个比较赞同,我通常在面试的半个小时内就能判断这个人是否适合我们公司。
曾经有好几个同事都是在一面中就直接敲定了,当场拍板入职,现在都是公司的核心人员。
0 请登录后投票
   发表时间:2012-05-18  
我面试先问一个问题。你最擅长啥。我们就从那个开始说吧
0 请登录后投票
   发表时间:2012-05-19  
javaer 上厕所后直接走人  cer得打包走   还用的问? 基础是要掌握的 不过当面试变为问答基础知识 造成背书那就杯具了 说回来还得自己充实就好
0 请登录后投票
   发表时间:2012-05-19  
主要是要看招聘的需求来做。
如果招聘的这个角色有某方面技术的特别需求的话,就直接提问这方面的经验跟见解。
如果不是的话,可以让面试者自由发挥。
会什么,就多聊什么。不要面试者不打肿充胖子,基本会比较顺畅,不见得面试官一定要是这方面的专家,也是可以看出个一二来的。
面试官不管懂不懂,都可以按跟面试者的思路,向他学习讨教一些问题,能讲明白的。自然是有掌握到家咯。
0 请登录后投票
   发表时间:2012-05-20   最后修改:2012-05-20
liulijun.cn.2011 写道
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-20  
rox 写道
liulijun.cn.2011 写道
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来。所以这里需要线程同步。
第三个问题 不是锁定总订单的值。只是取出来验证。当前已有订单数和总订单数。是否可以存储下一个订单。

需求和场景不一样,处理起来也不一样,不一定适合上面的描述。
也遇到过类似的,客户自定义规则实时生成的编号,尾端序号一定连续,但这个使用后编号还有可能会因为登记作废而废弃,导致编号不连续。
提了几个方案协商之后的结果,就是可以自动生成新号,废弃过的号手动利用(虽然可以实现自动,但客户要求手动)。
只需在自动生成和手动选号那里处理好并发问题就好了。
感觉最主要的是沟通和协商,幸亏遇到的客户也还好,不那么固执而且会思考,只要能够把问题妥善解决好的方案,还是认同的。

我们上次外包的那个项目是日本的医药系统。实际生成的ID要比上面描述的复杂的多。上面那个只是很简单的组成。而且其中包括很多Check和Castor的映射。上面那个例子只是说类似这种情况大多需要处理并发。没其他的什么
0 请登录后投票
   发表时间:2012-05-21  
问排序算法、对面向对象的几个概念的理解。
有的人干10年java也搞不清怎么使用多态。。
0 请登录后投票
论坛首页 Java企业应用版

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