JAVA人力、技能、项目面试常谈问题以及个人开场介绍模板
--------------------------------------------------------------华丽的分割线----------------------------------------------------
-大道理想必大家都懂,所以直入主题,不说概念性的废话(本来要写的内容就很多,全文目前52145字,1428行);
-【提示!!!】文章内容会逐渐越来越多,若想针对性的寻觅想要的内容,可尝试CTRL+F找到自己感兴趣的内容!
-【文章结构】=【百道人力面试】+【几篇介绍模板】+【模块化技能面试】+【面试项目问题】+【扩展内容】,详情请先参考文章目录!!!选择性拿!!!
--------------------------------------------------------------华丽的分割线----------------------------------------------------
JAVA 人力面试(目前101个)常谈问题
后面的技术问题会两三天更新一次!!!不断完善 本次更新时间【2020-8-5】
小声哔哔:写就一个人写,看就大家一起看?!
1. 请你自我介绍一下
回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,求职者要尊重考官,在回答每个问题之后都说一句谢谢.。企业喜欢有礼貌的求职者。
2. 你觉得你个性上最大的优点是什么?
回答提示:沉着冷静、条理清楚、立场坚定、顽强向上。
乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在北大青鸟经过一到两年的培训及项目实战,加上实习工作,使我适合这份工作。我相信我能成功。
3. 说说你最大的缺点?
回答提示:这个问题企业问的概率很大,通常不希望听到直接回答的缺点是什么等,如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低,企业肯定不会录用你。绝对不要自作聪明地回答我最大的缺点是过于追求完美.,有的人以为这样回答会显得自己比较出色,但事实上,他已经岌芨可危了。企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分。企业喜欢聪明的求职者。
4. 你对加班的看法?
回答提示:实际上好多公司问这个问题,并不证明一定要加班。只是想测试你是否愿意为公司奉献。
回答样本:如果是工作需要我会义不容辞加班。我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班
5. 你对薪资的要求?
回答提示:如果你对薪酬的要求太低,那显然贬低自己的能力;如果你对薪酬的要求太高,那又会显得你分量过重,公司受用不起。一些雇主通常都事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱。他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。
回答样本一:我对工资没有硬性要求。我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会,所以只要条件公平,我则不会计较太多
回答样本二:我受过系统的软件编程的训练,不需要进行大量的培训。而且我本人也对编程特别感兴趣。因此,我希望公司能根据我的情况和市场标准的水平,给我合理的薪水。
回答样本三:如果你必须自己说出具体数目,请不要说一个宽泛的范围,那样你将只能得到最低限度的数字。最好给出一个具体的数字,这样表明你已经对当今的人才市场作了调查,知道像自己这样学历的雇员有什么样的价值。
6. 在五年的时间内,你的职业规划?
回答提示:这是每一个应聘者都不希望被问到的问题,但是几乎每个人都会被问到。比较多的答案是管理者.。但是近几年来,许多公司都已经建立了专门的技术途径。这些工作地位往往被称作顾问.、参议技师.或高级软件工程师.等等。当然,说出其他一些你感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与你的专业有相关背景的工作。要知道,考官总是喜欢有进取心的应聘者,此时如果说不知道.,或许就会使你丧失一个好机会。最普通的回答应该是我准备在技术领域有所作为.或我希望能按照公司的管理思路发展.。
7. 你朋友对你的评价?
回答提示:想从侧面了解一下你的性格及与人相处的问题。
回答样本:我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺。
回答样本:.我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题
8. 你还有什么问题要问吗?
回答提示:企业的这个问题看上去可有可无,其实很关键,企业不喜欢说没有问题.的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。
9. 如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?
回答提示:一段时间发现工作不适合我,有两种情况:
① 如果你确实热爱这个职业,那你就要不断学习,虚心向领导和同事学习业务知识和处事经验,了解这个职业的精神内涵和职业要求,力争减少差距;
② 你觉得这个职业可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对单位和个人都有好处。
10. 在完成某项工作时,你认为领导要求的方式不是最好的,自己还有更好的方法,你应该怎么做?
回答提示:
① 原则上我会尊重和服从领导的工作安排;同时私底下找机会以请教的口吻,婉转地表达自己的想法,看看领导是否能改变想法;
② 如果领导没有采纳我的建议,我也同样会按领导的要求认真地去完成这项工作;
③ 还有一种情况,假如领导要求的方式违背原则,我会坚决提出反对意见;如领导仍固执己见,我会毫不犹豫地再向上级领导反映。
11. 如果你的工作出现失误,给本公司造成经济损失,你认为该怎么办?
回答提示:
① 我本意是为公司努力工作,如果造成经济损失,我认为首要的问题是想方设法去弥补或挽回经济损失。如果我无能力负责,希望单位帮助解决;
② 是责任问题。分清责任,各负其责,如果是我的责任,我甘愿受罚;如果是一个我负责的团队中别人的失误,也不能幸灾乐祸,作为一个团队,需要互相提携共同完成工作,安慰同事并且帮助同事查找原因总结经验。
③ 总结经验教训,一个人的一生不可能不犯错误,重要的是能从自己的或者是别人的错误中吸取经验教训,并在今后的工作中避免发生同类的错误。检讨自己的工作方法、分析问题的深度和力度是否不够,以致出现了本可以避免的错误。
12. 如果你在这次考试中没有被录用,你怎么打算?
回答提示:现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败.往往成功的背后有许多的困难和挫折,如果这次失败了也仅仅是一次而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败.
第一、要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行.能够超越自我.
第二、善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人.
第三、走出阴影,要克服这一次失败带给自己的心理压力,时刻牢记自己弱点,防患于未然,加强学习,提高自身素质.
第四、认真工作,回到原单位岗位上后,要实实在在、踏踏实实地工作,三十六行,行行出状元,争取在本岗位上做出一定的成绩.
第五、再接再厉,成为软件工程师或网络工程师一直是我的梦想,以后如果有机会我仍然后再次参加竞争.
13. 如果你做的一项工作受到上级领导的表扬,但你主管领导却说是他做的,你该怎样?
回答提示:我首先不会找那位上级领导说明这件事,我会主动找我的主管领导来沟通,因为沟通是解决人际关系的最好办法,但结果会有两种:
① 我的主管领导认识到自己的错误,我想我会视具体情况决定是否原谅他;
② 他更加变本加厉的来威胁我,那我会毫不犹豫地找我的上级领导反映此事,因为他这样做会造成负面影响,对今后的工作不利。
14. 谈谈你对跳槽的看法?
回答提示:
①正常的
② 频繁的跳槽对单位和个人双方都不利,应该反对。
15. 工作中你难以和同事、上司相处,你该怎么办?
回答提示:
① 我会服从领导的指挥,配合同事的工作。
② 我会从自身找原因,仔细分析是不是自己工作做得不好让领导不满意,同事看不惯。还要看看是不是为人处世方面做得不好。如果是这样的话我会努力改正。
③ 如果我找不到原因,我会找机会跟他们沟通,请他们指出我的不足。有问题就及时改正。
④ 作为优秀的员工,应该时刻以大局为重,即使在一段时间内,领导和同事对我不理解,我也会做好本职工作,虚心向他们学习,我相信,他们会看见我在努力,总有一天会对我微笑的!
16.假设你在某单位工作,成绩比较突出,得到领导的肯定。但同时你发现同事们越来越孤立你,你怎么看这个问题?你准备怎么办?
回答提示:
① 成绩比较突出,得到领导的肯定是件好事情,以后更加努力
② 检讨一下自己是不是对工作的热心度超过同事间交往的热心了,加强同事间的交往及共同的兴趣爱好。
③ 工作中,切勿伤害别人的自尊心
④ 不再领导前拨弄是非
⑤乐于助人对面
17. 你最近是否参加了培训课程?谈谈培训课程的内容。是公司资助还是自费参加?
回答提示:是自费参加,就是北大青鸟的培训课程(可以多谈谈自己学的技术)。
18. 你对于我们公司了解多少?
回答提示:在去公司面试前上网查一下该公司主营业务。如回答:贵公司有意改变策略,加强与国外大厂的OEM合作,自有品牌的部分则透过海外经销商。
19. 请说出你选择这份工作的动机?
回答提示:这是想知道面试者对这份工作的热忱及理解度,并筛选因一时兴起而来应试的人,如果是无经验者,可以强调就算职种不同,也希望有机会发挥之前的经验.。
20. 你最擅长的技术方向是什么?
回答提示:说和你要应聘的职位相关的课程,表现一下自己的热诚没有什么坏处。
21. 你能为我们公司带来什么呢?
回答提示:
① 假如你可以的话,试着告诉他们你可以减低他们的费用;;我已经接受过北大青鸟近两年专业的培训,立刻就可以上岗工作.。
② 企业很想知道未来的员工能为企业做什么,求职者应再次重复自己的优势,然后说:就我的能力,我可以做一个优秀的员工在组织中发挥能力,给组织带来高效率和更多的收益.。企业喜欢求职者就申请的职位表明自己的能力,比如申请营销之类的职位,可以说:我可以开发大量的新客户,同时,对老客户做更全面周到的服务,开发老客户的新需求和消费。.等等。
22. 最能概括你自己的三个词是什么?
回答提示:我经常用的三个词是:适应能力强,有责任心和做事有始终,结合具体例子向主考官解释,
23. 你的业余爱好是什么?
回答提示:找一些富于团体合作精神的,这里有一个真实的故事:有人被否决掉,因为他的爱好是深海潜水。主考官说:因为这是一项单人活动,我不敢肯定他能否适应团体工作。
24. 作为被面试者给我打一下分
回答提示:试着列出四个优点和一个非常非常非常小的缺点,(可以抱怨一下设施,没有明确责任人的缺点是不会有人介意的)。
25. 你怎么理解你应聘的职位?
回答提示:把岗位职责和任务及工作态度阐述一下
26. 喜欢这份工作的哪一点?
回答提示:相信其实大家心中一定都有答案了吧!每个人的价值观不同,自然评断的标准也会不同,但是,在回答面试官这个问题时可不能太直接就把自己心理的话说出来,尤其是薪资方面的问题,不过一些无伤大雅的回答是不错的考虑,如交通方便,工作性质及内容颇能符合自己的兴趣等等都是不错的答案,不过如果这时自己能仔细思考出这份工作的与众不同之处,相信在面试上会大大加分。
27. 为什么要离职?
回答提示:
① 回答这个问题时一定要小心,就算在前一个工作受到再大的委屈,对公司有多少的怨言,都千万不要表现出来,尤其要避免对公司本身主管的批评,避免面试官的负面情绪及印象;建议此时最好的回答方式是将问题归咎在自己身上,例如觉得工作没有学习发展的空间,自己想在面试工作的相关产业中多加学习,或是前一份工作与自己的生涯规划不合等等,回答的答案最好是积极正面的。
② 我希望能获得一份更好的工作,如果机会来临,我会抓住;我觉得目前的工作,已经达到顶峰,即沒有升迁机会。
28. 说说你对行业、技术发展趋势的看法?
回答提示:企业对这个问题很感兴趣,只有有备而来的求职者能够过关。求职者可以直接在网上查找对你所申请的行业部门的信息,只有深入了解才能产生独特的见解。企业认为最聪明的求职者是对所面试的公司预先了解很多,包括公司各个部门,发展情况,在面试回答问题的时候可以提到所了解的情况,企业欢迎进入企业的人是知己.,而不是盲人.。
29. 对工作的期望与目标何在?
回答提示:这是面试者用来评断求职者是否对自己有一定程度的期望、对这份工作是否了解的问题。对于工作有确实学习目标的人通常学习较快,对于新工作自然较容易进入状况,这时建议你,最好针对工作的性质找出一个确实的答案,如业务员的工作可以这样回答:我的目标是能成为一个超级业务员,将公司的产品广泛的推销出去,达到最好的业绩成效;为了达到这个目标,我一定会努力学习,而我相信以我认真负责的态度,一定可以达到这个目标。.其他类的工作也可以比照这个方式来回答,只要在目标方面稍微修改一下就可以了。
30. 说说你的家庭。
回答提示:企业面试时询问家庭问题不是非要知道求职者家庭的情况,探究隐私,企业不喜欢探究个人隐私,而是要了解家庭背景对求职者的塑造和影响。企业希望听到的重点也在于家庭对求职者的积极影响。企业最喜欢听到的是:我很爱我的家庭!我的家庭一向很和睦,虽然我的父亲和母亲都是普通人,但是从小,我就看到我父亲起早贪黑,每天工作特别勤劳,他的行动无形中培养了我认真负责的态度和勤劳的精神。我母亲为人善良,对人热情,特别乐于助人,所以在单位人缘很好,她的一言一行也一直在教导我做人的道理。企业相信,和睦的家庭关系对一个人的成长有潜移默化的影响。
31. 就你申请的这个职位,你认为你还欠缺什么?
回答提示:企业喜欢问求职者弱点,但精明的求职者一般不直接回答。他们希望看到这样的求职者:继续重复自己的优势,然后说:对于这个职位和我的能力来说,我相信自己是可以胜任的,只是缺乏经验,这个问题我想我可以进入公司以后以最短的时间来解决,我的学习能力很强,我相信可以很快融入公司的企业文化,进入工作状态。.企业喜欢能够巧妙地躲过难题的求职者。
32. 你欣赏哪种性格的人?
回答提示:诚实、不死板而且容易相处的人、有
33. 你通常如何处理別人的批评?
回答提示:①沈默是金。不必说什么,否则情况更糟,不过我会接受建设性的批评;②我会等大家冷靜下来再讨论。
34. 你怎样对待自己的失敗?
回答提示:我们大家生来都不是十全十美的,我相信我有第二个机会改正我的错误。
35. 什么会让你有成就感?
回答提示:为贵公司竭力效劳;尽我所能,完成一个项目
36. 眼下你生活中最重要的是什么?
回答提示:对我来说,能在这个领域找到工作是最重要的;望能在贵公司任职对我说最重要。
37. 你为什么愿意到我们公司来工作?
回答提示:对于这个问题,你要格外小心,如果你已经对该单位作了研究,你可以回答一些详细的原因,像公司本身的高技术开发环境很吸引我。.,我同公司出生在同样的时代,我希望能够进入一家与我共同成长的公司。.你们公司一直都稳定发展,在近几年来在市场上很有竞争力。.或者我认为贵公司能够给我提供一个与众不同的发展道路。.这都显示出你已经做了一些调查,也说明你对自己的未来有了较为具体的远景规划。
38. 你和别人发生过争执吗?你是怎样解决的?
回答提示:这是面试中最险恶的问题。其实是考官布下的一个陷阱。千万不要说任何人的过错。应知成功解决矛盾是一个协作团体中成员所必备的能力。假如你工作在一个服务行业,这个问题简直成了最重要的一个环节。你是否能获得这份工作,将取决于这个问题的回答。考官希望看到你是成熟且乐于奉献的。他们通过这个问题了解你的成熟度和处世能力。在没有外界干涉的情况下,通过妥协的方式来解决才是正确答案。
39. 问题:你做过的哪件事最令自己感到骄傲?
回答提示:这是考官给你的一个机会,让你展示自己把握命运的能力。这会体现你潜在的领导能力以及你被提升的可能性。假如你应聘于一个服务性质的单位,你很可能会被邀请去午餐。记住:你的前途取决于你的知识、你的社交能力和综合表现。
40. 你新到一个部门,一天一个客户来找你解决问题,你努力想让他满意,可是始终达不到群众得满意,他投诉你们部门工作效率低,你这个时候怎么作?
回答提示:
① 首先,我会保持冷静。作为一名工作人员,在工作中遇到各种各样的问题是正常的,关键是如何认识它,积极应对,妥善处理。
② 其次,我会反思一下客户不满意的原因。一是看是否是自己在解决问题上的确有考虑的不周到的地方,二是看是否是客户不太了解相关的服务规定而提出超出规定的要求,三是看是否是客户了解相关的规定,但是提出的要求不合理。
③ 再次,根据原因采取相对的对策。如果是自己确有不周到的地方,按照服务规定作出合理的安排,并向客户作出解释;如果是客户不太了解政策规定而造成的误解,我会向他作出进一步的解释,消除他的误会;如果是客户提出的要求不符合政策规定,我会明确地向他指出。
④ 再次,我会把整个事情的处理情况向领导作出说明,希望得到他的理解和支持。(5)我不会因为客户投诉了我而丧失工作的热情和积极性,而会一如既往地牢记为客户服务的宗旨,争取早日做一名领导信任、公司放心、客户满意的职员。
41. 对这项工作,你有哪些可预见的困难?
回答提示:
① 不宜直接说出具体的困难,否则可能令对方怀疑应聘者不行;
② 可以尝试迂回战术,说出应聘者对困难所持有的态度;工作中出现一些困难是正常的,也是难免的,但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备,任何困难都是可以克服。.
分析:一般问这个问题,面试者的希望就比较大了,因为已经在谈工作细节。但常规思路中的回答,又被面试官骗了。当面试官询问这个问题的时候,有两个目的。第一,看看应聘者是不是在行,说出的困难是不是在这个职位中一般都不可避免的问题。第二,是想看一下应聘者解决困难的手法对不对,及公司能否提供这样的资源。而不是想了解应聘者对困难的态度。
42. 如果我录用你,你将怎样开展工作?
回答提示:
① 如果应聘者对于应聘的职位缺乏足够的了解,最好不要直接说出自己开展工作的具体办法;
② 可以尝试采用迂回战术来回答,如首先听取领导的指示和要求,然后就有关情况进行了解和熟悉,接下来制定一份近期的工作计划并报领导批准,最后根据计划开展工作。.
分析:这个问题的主要目的也是了解应聘者的工作能力和计划性、条理性,而且重点想要知道细节。如果向思路中所讲的迂回战术,面试官会认为回避问题,如果引导了几次仍然是回避的话。此人绝对不会录用了。
43. 你希望与什么样的上级共事?
回答提示:
① 通过应聘者对上级的希望.可以判断出应聘者对自我要求的意识,这既上一个陷阱,又是一次机会;
② 最好回避对上级具体的希望,多谈对自己的要求;
③ 如做为刚步入社会的新人,我应该多要求自己尽快熟悉环境、适应环境,而不应该对环境提出什么要求,只要能发挥我的专长就可以了
分析:这个问题比较好的回答是,希望我的上级能够在工作中对我多指导,对我工作中的错误能够立即指出。总之,从上级指导这个方面谈,不会有大的纰漏。
44. 在完成某项工作时,你认为领导要求的方式不是最好的,自己还有更好的方法,你应该怎么做?
回答提示:
① 原则上我会尊重和服从领导的工作安排;同时私底下找机会以请教的口吻,婉转地表达自己的想法,看看领导是否能改变想法;
② 如果领导没有采纳我的建议,我也同样会按领导的要求认真地去完成这项工作;
③ 还有一种情况,假如领导要求的方式违背原则,我会坚决提出反对意见;如领导仍固执己见,我会毫不犹豫地再向上级领导反映。
45. 与上级意见不一是,你将怎么办?
回答提示:
① 一般可以这样回答我会给上级以必要的解释和提醒,在这种情况下,我会服从上级的意见。
② 如果面试你的是总经理,而你所应聘的职位另有一位经理,且这位经理当时不在场,可以这样回答:对于非原则性问题,我会服从上级的意见,对于涉及公司利益的重大问题,我希望能向更高层领导反映。.
分析:这个问题的标准答案是思路1,如果用2的回答,必死无疑。你没有摸清楚改公司的内部情况,先想打小报告,这样的人没有人敢要。
46. 你工作经验欠缺,如何能胜任这项工作?
常规思路:
① 如果招聘单位对应届毕业生的应聘者提出这个问题,说明招聘公司并不真正在乎经验.,关键看应聘者怎样回答;
② 对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业;
③ 如作为应届毕业生,在工作经验方面的确会有所欠缺,因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现,实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力,而且比较勤奋,所以在兼职中均能圆满完成各项工作,从中获取的经验也令我受益非浅。请贵公司放心,学校所学及兼职的工作经验使我一定能胜任这个职位。
点评:这个问题思路中的答案尚可。突出自己的吃苦能力和适应性以及学习能力(不是学习成绩)为好。
47. 您在前一家公司的离职原因是什么?
回答提示:
① 最重要的是:应聘者要使找招聘单位相信,应聘者在过往的单位的离职原因.在此家招聘单位里不存在;
② 避免把离职原因.说得太详细、太具体;
③ 不能掺杂主观的负面感受,如太辛苦.、人际关系复杂.、管理太混乱.、公司不重视人才.、公司排斥我们某某的员工.等;
④ 但也不能躲闪、回避,如想换换环境.、个人原因.等;
⑤ 不能涉及自己负面的人格特征,如不诚实、懒惰、缺乏责任感、不随和等;
⑥ 尽量使解释的理由为应聘者个人形象添彩;
⑦ 相关例子:如我离职是因为这家公司倒闭;我在公司工作了三年多,有较深的感情;从去年始,由于市场形势突变,公司的局面急转直下;到眼下这一步我觉得很遗憾,但还要面对显示,重新寻找能发挥我能力的舞台。.同一个面试问题并非只有一个答案,而同一个答案并不是在任何面试场合都有效,关键在应聘者掌握了规律后,对面试的具体情况进行把握,有意识地揣摩面试官提出问题的心理背景,然后投其所好。
分析:除非是薪资太低,或者是最初的工作,否则不要用薪资作为理由。求发展.也被考官听得太多,离职理由要根据每个人的真实离职理由来设计,但是在回答时一定要表现得真诚。实在想不出来的时候,家在外地可以说是因为家中有事,须请假几个月,公司又不可能准假,所以辞职。这个答案一般面试官还能接受。
48. 你工作经验欠缺,如何能胜任这项工作?
回答提示:
① 如果招聘单位对应届毕业生的应聘者提出这个问题,说明招聘公司并不真正在乎经验.,关键看应聘者怎样回答;
② 对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业;
③ 如作为应届毕业生,在工作经验方面的确会有所欠缺,因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现,实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力,而且比较勤奋,所以在兼职中均能圆满完成各项工作,从中获取的经验也令我受益非浅。请贵公司放心,学校所学及兼职的工作经验使我一定能胜任这个职位。分析:这个问题思路中的答案尚可。突出自己的吃苦能力和适应性以及学习能力(不是学习成绩)为好。
49. 为了做好你工作份外之事,你该怎样获得他人的支持和帮助?
回答提示:每个公司都在不断变化发展的过程中;你当然希望你的员工也是这样。你希望得到那些希望并欢迎变化的人,因为这些人明白,为了公司的发展,变化是公司日常生活中重要组成部分。这样的员工往往很容易适应公司的变化,并会对变化做出积极的响应。此外,他们遇到矛盾和问题时,也能泰然处之。下面的问题能够考核应聘者这方面的能力。
据说有人能从容避免正面冲突。请讲一下你在这方面的经验和技巧。
有些时候,我们得和我们不喜欢的人在一起共事。说说你曾经克服了性格方面的冲突而取得预期工作效果的经历。
50. 如果你在这次面试中没有被录用,你怎么打算?
回答提示:现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败.往往成功的背后有许多的困难和挫折,如果这次失败了也仅仅是一次而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败.
第一、要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行.能够超越自我.
第二、善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人.
第三、走出阴影,要克服这一次失败带给自己的心理压力,时刻牢记自己弱点,防患于未然,加强学习,提高自身素质.
第四、认真工作,回到原单位岗位上后,要实实在在、踏踏实实地工作,三十六行,行行出状元,争取在本岗位上做出一定的成绩.
第五、再接再厉,成为国家公务员一直是我的梦想,以后如果有机会我仍然后再次参加竞争.
51. 假如你晚上要去送一个出国的同学去机场,可单位临时有事非你办不可,你怎么办?
回答提示:我觉得工作是第一位的,但朋友间的情谊也是不能偏废的。这个问题我觉得要按照当时具体的情况来决定。
① 如果我的朋友晚上9点中的飞机,而我的加班八点就能够完成的话,那就最理想了,干完工作去机场,皆大欢喜。
② 如果说工作不是很紧急,加班仅仅是为了明天上班的时候能把报告交到办公室,那完全可以跟领导打声招呼,先去机场然后回来加班,晚点睡就是了。
③ 如果工作很紧急,两者不可能兼顾的情况下,我觉得可以由两种选择。1)如果不是全单位都加班的话,是不是可以要其他同事来代替以下工作,自己去机场,哪怕就是代替你离开的那一会儿。2)如果连这一点都做不到的话,那只好忠义不能两全了,打电话给朋友解释一下,小心他会理解,毕竟工作做完了就完了,朋友还是可以再见面的。
52. 如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?
回答提示:一段时间发现工作不适合我,有两种情况:
① 如果你确实热爱这个职业,那你就要不断学习,虚心向领导和同事学习业务知识和处事经验,了解这个职业的精神内涵和职业要求,力争减少差距;
② 你觉得这个职业可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对单位和个人都有好处。
53. 你做过的哪件事最令自己感到骄傲?
回答提示:这是考官给你的一个机会,让你展示自己把握命运的能力。这会体现你潜在的领导能力以及你被提升的可能性。假如你应聘于一个服务性质的单位,你很可能会被邀请去午餐。记住:你的前途取决于你的知识、你的社交能力和综合表现。
54. 谈谈你过去做过的成功案例
回答提示:举一个你最有把握的例子,把来龙去脉说清楚,而不要说了很多却没有重点。切忌夸大其词,把别人的功劳到说成自己的,很多主管为了确保要用的人是最适合的,会打电话向你的前一个主管征询对你的看法及意见,所以如果说谎,是很容易穿梆的。
55. 谈谈你过去的工作经验中,最令你挫折的事情
回答提示:曾经接触过一个客户,原本就有耳闻他们以挑剔出名,所以事前的准备功夫做得十分充分,也投入了相当多的时间与精力,最后客户虽然并没有照单全收,但是接受的程度已经出乎我们意料之外了。原以为从此可以合作愉快,却得知客户最后因为预算关系选择了另一家代理商,之前的努力因而付诸流水。尽管如此,我还是从这次的经验学到很多,如对该产业的了解,整个team的默契也更好了。
分析:借此了解你对挫折的容忍度及调解方式。
56. 如何安排自己的时间?会不会排斥加班?
回答提示:基本上,如果上班工作有效率,工作量合理的话,应该不太需要加班。可是我也知道有时候很难避免加班,加上现在工作都采用责任制,所以我会调配自己的时间,全力配合。
分析:虽然不会有人心甘情愿的加班,但依旧要表现出高配合度的诚意。
57. 为什么我们要在众多的面试者中选择你?
回答提示:根据我对贵公司的了解,以及我在这份工作上所累积的专业、经验及人脉,相信正是贵公司所找寻的人才。而我在工作态度、EQ上,也有圆融、成熟的一面,和主管、同事都能合作愉快。
分析:别过度吹嘘自己的能力,或信口开河地乱开支票,例如一定会为该公司带来多少钱的业务等,这样很容易给人一种爱说大话、不切实际的感觉。
58. 对这个职务的期许?
回答提示:希望能借此发挥我的所学及专长,同时也吸收贵公司在这方面的经验,就公司、我个人而言,缔造双赢.的局面。
分析:回答前不妨先询问该公司对这项职务的责任认定及归属,因为每一家公司的状况不尽相同。以免说了一堆理想抱负却发现牛头不对马嘴。
59. 为什么选择这个职务?
回答提示::这一直是我的兴趣和专长,经过这几年的磨练,也累积了一定的经验及人脉,相信我一定能胜任这个职务的。
分析:适时举出过去的丰功伟业.,表现出你对这份职务的熟稔度,但避免过于夸张的形容或流于炫耀。
60. 为什么选择我们这家公司?
回答提示:曾经在报章杂志看过关于贵公司的报道,与自己所追求的理念有志一同。而贵公司在业界的成绩也是有目共睹的,而且对员工的教育训练、升迁等也都很有制度。
分析:去面试前先做功课,了解一下该公司的背景,让对方觉得你真的很有心想得到这份工作,而不只是探探路。
61. 你认为你在学校属于好学生吗?
回答提示:企业的招聘者很精明,问这个问题可以试探出很多问题:如果求职者学习成绩好,就会说:是的,我的成绩很好,所有的成绩都很优异。当然,判断一个学生是不是好学生有很多标准,在学校期间我认为成绩是重要的,其他方面包括思想道德、实践经验、团队精神、沟通能力也都是很重要的,我在这些方面也做得很好,应该说我是一个全面发展的学生。.如果求职者成绩不尽理想,便会说:我认为是不是一个好学生的标准是多元化的,我的学习成绩还可以,在其他方面我的表现也很突出,比如我去很多地方实习过,我很喜欢在快节奏和压力下工作,我在学生会组织过;;活动,锻炼了我的团队合作精神和组织能力。.有经验的招聘者一听就会明白,企业喜欢诚实的求职者。
62. 请谈谈如何适应办公室工作的新环境?
回答提示:
① 办公室里每个人有各自的岗位与职责,不得擅离岗位。
② 根据领导指示和工作安排,制定工作计划,提前预备,并按计划完成。
③ 多请示并及时汇报,遇到不明白的要虚心请教。
④ 抓间隙时间,多学习,努力提高自己的政治素质和业务水平。
63. 在工作中学习到了些什么?
回答提示:这是针对转职者提出的问题,建议此时可以配合面试工作的特点作为主要依据来回答,如业务工作需要与人沟通,便可举出之前工作与人沟通的例子,经历了哪些困难,学习到哪些经验,把握这些要点做陈述,就可以轻易过关了
64. 有想过创业吗?
回答提示:这个问题可以显示你的冲劲,但如果你的回答是有的话,千万小心,下一个问题可能就是那么为什么你不这样做呢?.
65. 最能概括你自己的三个词是什么?
回答提示:我经常用的三个词是:适应能力强,有责任心和做事有始终,结合具体例子向主考官解释,使他们觉得你具有发展潜力
66. 你认为你在学校属于好学生吗?
回答提示:企业的招聘者很精明,问这个问题可以试探出很多问题:如果求职者学习成绩好,就会说:是的,我的成绩很好,所有的成绩都很优异。当然,判断一个学生是不是好学生有很多标准,在学校期间我认为成绩是重要的,其他方面包括思想道德、实践经验、团队精神、沟通能力也都是很重要的,我在这些方面也做得很好,应该说我是一个全面发展的学生。.如果求职者成绩不尽理想,便会说:我认为是不是一个好学生的标准是多元化的,我的学习成绩还可以,在其他方面我的表现也很突出,比如我去很多地方实习过,我很喜欢在快节奏和压力下工作,我在学生会组织过;;活动,锻炼了我的团队合作精神和组织能力。.有经验的招聘者一听就会明白,企业喜欢诚实的求职者。
67. 除了本公司外,还应聘了哪些公司?
回答提示:很奇怪,这是相当多公司会问的问题,其用意是要概略知道应徵者的求职志向,所以这并非绝对是负面答案,就算不便说出公司名称,也应回答销售同种产品的公司.,如果应聘的其他公司是不同业界,容易让人产生无法信任的感觉。
68. 何时可以到职?
回答提示:大多数企业会关心就职时间,最好是回答’如果被录用的话,到职日可按公司规定上班.,但如果还未辞去上一个工作、上班时间又太近,似乎有些强人所难,因为交接至少要一个月的时间,应进一步说明原因,录取公司应该会通融的
69. 你并非毕业于名牌院校?
回答提示:是否毕业于名牌院校不重要,重要的是有能力完成您交给我的工作,我接受了北大青鸟的职业培训,掌握的技能完全可以胜任贵公司现在工作,而且我比一些名牌院校的应届毕业生的动手能力还要强,我想我更适合贵公司这个职位。
70. 你怎样看待学历和能力?
回答提示:学历我想只要是大学专科的学历,就表明觉得我具备了根本的学习能力。剩下的,你是学士也好,还是博士也好,对于这一点的讨论,不是看你学了多少知识,而是看你在这个领域上发挥了什么,也就是所说的能力问题。一个人工作能力的高低直接决定其职场命运,而学历的高低只是进入一个企业的敲门砖,如果贵公司把学历卡在博士上,我就无法进入贵公司,当然这不一定只是我个人的损失,如果一个专科生都能完成的工作,您又何必非要招聘一位博士生呢?
71. 你经历太单纯,而我们需要的是社会经验丰富的人?
回答提示:经历丰富的人也未必适合这个职位,如果他在以前的经历中养成的是一个良好的职业习惯还好,如果是不好的职业习惯呢?我在这方面是一片空白,更可以尽快地融入贵公司的企业文化,养成良好的职业习惯,一个人具有良好的职业习惯,更会发挥自己的长处为公司做更多的事。
72. 你性格过于内向,这恐怕与我们的职业不合适?
回答提示:没关系呀,性格内向可以踏实地完成技术工作。况且性格内向并不能说明我无法讲述清楚我做的项目,
克林顿小时候性格还内向呢,并不能阻止他成为美国总统。
73. 假如领导派你和一个有矛盾的同志一起出差,你如何处理?在日常生活中,出现这样的事情你是如何处理的?试举例说明。
回答提示:在日常生活中,由于每个人的观点和立场,看待和分析问题的方法不同,矛盾是不可避免的。假如我和一个和我有矛盾的同志一起出差,我想首先应该开诚布公,因为有矛盾,就把许多东西隐藏起来,这只会加深误会,假如互相坦诚相见,以一种客观,不带个人情绪的态度看问题,你会发现你原先自认为十分得意的想法并不完全正确,你先前反对的看法和观点可能只是一个事物的另一侧面,你们原来在许多方面可以互相补充,互相完善。我个人认为在处理矛盾问题上要有一种宽容的态度,俗话说的好:宰相肚里能撑船。心胸狭隘是化解矛盾的大敌,而一个心胸狭隘的人是绝不可能成就一番大事业的。
我在上大学时,同寝室一个同学喜欢在寝室随地吐痰,我很不喜欢这一点,但他脾气比较暴躁,如果我直接向他说,矛盾就会激化,对此我采取了以下方法:一是通过别的同学委婉地表达我对他随地吐痰的反对态度;二是经常拿一些有关随地吐痰危害自己和他人健康的书籍放在寝室的桌子上,使他能够看到;三是我在他在寝室的时候也吐痰,但是不在寝室里吐,而是在外边吐,暗示其应到外边吐痰.,
74. 如果你遇到了挫折你将怎么办?
回答提示:事业有成一帆风顺时许多人的美好想法,其实很难做到一帆风顺,要接受这样一个现实,
人的一生不可能是一帆风顺的,成功的背后会有许许多多的艰辛,痛苦甚至挫折.在人生的一段时期遇到一些挫折是很正常的.只有经验知识和经历的积累才能塑造出一个成功者.我觉得面对挫折要做到以下几点:
① 第一要敢于面对.哪里跌倒要从哪里爬起来,小平同志还是三起三落呢,不要惧怕困难,要敢于向困难挑战.
② 再者要认真分析失败的原因,寻根究源,俗话说失败乃成功之母,在挫折中掌握教训,为下一次奋起提供经验.
③ 还有在平时的工作生化中要加强学习,人的一生是有限的,不可能经历所有的事,要在别人的经验吸取教训.
④ 最后可能由于当局者迷或者知识经历的不足,自己对于挫折并没有特别好的处理方法,这是可以求教自己的亲人朋友,群策群力渡过难关。
75. 你最喜欢的一本书是那本?
回答提示:我喜欢读书,一个人最早看的一本书可能会对个人的一生产生很大的影响,我小时候最早看的一本书是三国演义,三国演义这本书博大精深,书中描写的一些人物我对我的成长起了许多潜移默化的作用,现在看来我还是最喜欢三国演义如果我说我喜欢关羽,可能俗了一点,但从关羽身上表现出来的诚信和忠诚一直是我很推崇的。我觉得诚心是立身之本,而对单位的忠诚是你能不能做出一番事业的前提条件。当然这个忠诚还包括对领导的忠诚.
从周瑜身上我学到对别人要宽容,不要又嫉妒心;从诸葛亮身上学到要加强自己学习等等。三国演义这本书博大精深,对我的影响也是全方位的,时间原因我不再赘述。
76. 请告知你的工作观?
回答提示:常被问到你的**观是什么?.时,可别把它想得太复杂,可回答为何而工作.、从工作方面得到了什么.*年後想变成怎样.等的话。
77. 如果你有一位固执武断的领导,你会经常提合理化建议吗?
回答提示:
① 在一般情况下,领导和同事是不能选择的,每个人有每个人的个性和脾气,要学会适应和相处。
② 领导脾气直也好,悠也好,固执也好,只要是出自为公,为工作,应该尊重和原谅他,并且按他的安排去做。
③ 适当的时候,可以用谈心、汇报思想等方式委婉地提出自己的看法,但点到为止。
④ 在有合理化的建议时,照提不误。因为那是对自己和工作负责。
78. 假如在一次学习讨论会上,领导对你的发言很不满意,并当场批评了你,你怎么办?
回答提示:
好:能谈到在情绪产生波动时,自己的自我控制方法,并取得良好的效果。
中:有控制自我情绪的努力,但方法不够有效。
差:思前想后,顾虑重重,言语中流露出气愤、委屈,或长时间沉默,显得心情难以言表。
79. 针对你们单位业务工作中出现的问题,你提出了一些很好的建议,得到了同事们的赞同,但你的领导并不满意。在这种情况下,你怎么办?
回答提示:
好:能认真分析,仔细推敲自己建议存在的问题,认真领会领导意图,找出两者之间的共同点,圆满解决问题,考生心理冷静,自制力强,方法正确,陈述问题条理清楚,有说服力。
中:能找出问题的根源并冷静对待,处理问题有一定方法,陈述问题有一定说服力。
差:行为偏激,自制力差,方法不正确,或长时间沉默,显得无以应对。
80. 假设你手头上有好几项工作没有完成,可是上级又给你安排了一项任务。你感到自己完成这项工作有困难。你如何处理这个矛盾?
回答提示:出题思路:情境性问题。该题用于考查考生的人际交往的意识与技巧,主要是在组织中处理权属关系的能力。
参考评分标准:
好:能够很好地与人沟通,有很好的交往方法和技巧;能够在尊重他人的前提下恰当地表达自己的意见。如:能用适当方法让领导了解到自己现有任务已很重,并能向领导提出完成该任务的可行建议。
中:能与人沟通,交往中有一些方法、技巧,能适当地表达出自己的意见。如:能让领导认识到自己的困难。差:不能与他人沟通,交往中缺乏技巧;难以表达自己的意见。如:无法让领导了解自己的困难,或直接顶撞领导。
81. 当前对有些单位实施的末位淘汰制?,有不同争议,你怎么看待这种用人措施?.
回答提示:末位淘汰制是一种向竞争机制发展的过渡性措施,可以试行;但要因情况而异,不能一刀切。再说末位淘汰制.也不完全等同于竞争机制。对于规模较大、人数较多的单位最初实行,然后实施竞争机制,未尝不可。如果在规模小、人数少的单位实行,效果就不一定好,因为也确有些单位人数不多,几乎所有人员都很努力,成绩都不错,甚至难分上下,如果实行就会造成人心惶惶、人际关系紧张的不利局面。
82. 物质待遇和工作条件是人们选择工作的重要因素之一,这次报考谈一谈你在选择工作时都考虑哪些因素?为什么?
回答提示:
好:既能够坦率承认在择业过程中的个人利益因素,又能够超越物质利益因素,有正确的择业观,积极向上,叙述有条理,具有说服力。
中:基本能够正视现实,实事求是地考虑择业问题,叙述问题基本清楚,有一定说理性。差:隐瞒自己的真实想法,假、大、空,或者过分注重自己的个性需求,叙述无条理,说理性差。
83. 直接领导要求你在30日内完成一项工作,你会怎样去完成?
回答提示:提前做准备,制订完备的计划,会准时甚至更早地完成工作任务。
84. 你认为这份工作最重要的是什么?
回答提示:叙述工作特性的同时,也要加上自己的看法,如果是有工作经验的人,最好说明自己的基本心态。
85. 上班的时候,往往有多件事需要你处理,你会如何安排?
回答提示:事有三件,紧要处着手。要先处理重要事件,其他依次统筹安排
86. 找这份工作,你最重要的考虑因素为何?
回答提示:如回答:工作的性质是否能让我发挥所长,并不断成长。.因为公司要找工作表现好、能够真正有贡献的人,而非纯粹慕名、求利而来的人。
87. 在你参加我们这次面试前,你做了哪些准备工作?
回答提示:公司的背景知识及岗位要求;可能要问的问题(技术+技巧);调整状态、保持一颗平常心等
88. 你争取成功的动力是什么?
回答提示:自我实现,展现自身的价值。
89. 怎样理解团队?请举例并说明启示。
回答提示:团队成员共同承担领导职能,共同努力,以各自独特的方式,在所处的环境中共同完成预先设定的目标。(明确的目标、勇于负责、协作增效、能力资源各异)
例如:大雁团队,其合作精神体现在以下几个方面:
①大雁会共同拍动翅膀.。拍翅膀是大雁的本能,但只要排成人字队形,就可以提高飞行效率。
② 所有的大雁都愿意接受团体的飞行队形,而且都实际协助队形的建立。如果有一只大雁落在队形外面,它很快就会感到自己越来越落后,便会立即回到雁群中。
③ 大雁的领导工作是由群体共同分担的。虽然有带头雁出来整队,但是当它疲倦时,便会自动退到队伍之中,另一只大雁马上替补领头的位置。
④ 队形后边的大雁不断发出鸣叫,目的是为了给前方的伙伴打气激励。
⑤ 如果一只大雁生病或被猎人击伤,雁群中就会有两只大雁脱离队形,靠近这只遇到困难的同伴,协助它降落在地面上,直至它能够重回群体,或是不幸死亡。
通过分析大雁的合作行为,我们可以得出以下启示:
① 每个人都要忠诚于自己的团队,忠诚于自己的事业,做好自己的本职工作。如果你不拍翅膀,他不拍翅膀,这个团体还会存在吗?
② 如果我们与大雁一样聪明的话,我们就会留在与自己的事业目标一致的队伍里,而且乐意接受他人的协助,也愿意协助他人。
③ 我们必须确定从背后传来的是鼓励的叫声,而不是其他声音。想要在职业生涯中生存和发展,需要把工作伙伴变成啦啦队,一队快乐的工作伙伴是成功最好的助手。你的工作伙伴散播的有利消息远比你个人所有的努力更有助于你职业生涯的发展
90. 为什么下水道的井盖是圆的?
回答提示:圆的井盖立起来时不会掉到井里。
91.如果你是公司老板,最不喜欢的是哪种员工?
回答提示:遇到问题事不关己、凡事三缄其口、总是墨守城规,没有创新、背后议论上司、随遇而安、追名逐利、拒绝加班、不善交际、既然预定了假期就不可改变。
92. 面试进行时,大脑出现短路怎么办?
回答提示:
① 坦白的讲,我对这个问题不太了解。但我对XX问题倒是有一些研究。我可以讲讲这方面的内容吗?
② 您的意思是;;;?(进一步确认)
③ 不知道您看出来没有,我太重视这次面试,因此有些紧张,您能给我一分种的时间让我考虑一下这个问题好吗.(如果你确信,多给你一些时间,你可以考虑出来)
④ 很坦白的讲,对于这个问题我不太了解。(没有人可以知道所有的知识)
给出解决问题的方法所设计的知识点。(虽然不知道怎么解决,你会按照什么思路解决)
93. 怎样与上级沟通?
回答提示:
① 仔细聆听领导的命令
② 与领导探讨目标的可行性
③ 拟定详细的工作计划
④ 在工作进行之中随时向领导汇报
⑤ 在工作完成后及时总结汇报
95. 你为什么觉得自己能够在这个职位上取得成就?
回答提示:分析这是一个相当宽泛的问题,它给求职者提供了一个机会,可以让求职者表明自己的热情和挑战欲。对这个问题的回答将为面试人在判断求职者是否对这个职位有足够的动力和自信心方面提供关键信息。
错误回答:我不知道。我擅长做很多事情。如果我能得到并且决定接受这份工作,我确信自己可以把它做得相当好,因为我过去一直都很成功。
正确回答:从我的经历来看,这是我的职业生涯中最适合我的一份工作。几年来,我一直在研究这个领域并且关注贵公司,一直希望能有这样的面试机会。我拥有必备的技能(简单讲述一个故事来加以说明),我非常适合这一职位,也确实能做好这份工作。
96. 你最大的长处和弱点分别是什么?这些长处和弱点对你在企业的业绩会有什么样的影响?
回答提示:这个问题的最大陷阱在于,第一个问题实际上是两个问题,而且还要加上一个后续问题。这两个问题的陷阱并不在于你是否能认真地看待自己的长处,也不在于你是否能正确认识自己的弱点。记住,你的回答不仅是向面试人说明你的优势和劣势,也能在总体上表现你的价值观和对自身价值的看法。
错误回答:从长处来说,我实在找不出什么突出的方面,我认为我的技能是非常广泛的。至于弱点,我想,如果某个项目时间拖得太久,我可能会感到厌倦。
正确回答:从长处来说,我相信我最大的优点是我有一个高度理性的头脑,能够从混乱中整理出头绪来。我最大的弱点是,对那些没有秩序感的人,可能缺乏足够的耐心。我相信我的组织才能可以帮助企业更快地实现目标,而且有时候,我处理复杂问题的能力也能影响我的同事。
评论这个回答做到了一箭三雕.。首先,它确实表明了求职者的最大长处。其次,它所表达的弱点实际上很容易被理解为长处。最后,它指出了这个求职者的长处和弱点对企业和其他员工的好处。
97. 请谈谈你个人的最大特色。
回答提示:我的坚持度很高,事情没有做到一个令人满意的结果,绝不罢手。这种回答,最能和工作结合,能够与工作表现相结合的优点、特质,才是面谈者比较感兴趣的回答。
98. 关于你的个人隐私(是否有男/女朋友,或是否结婚)
回答提示:在大多数情况下,面谈者会竭力地打探证明你不稳定或不可靠的信息,还有其他一些可能使某个雇主关注的问题,这些只是对某些性格的人的推测,都是些不相关的问题,但是,如果雇主想以此来了解你是否可靠,你就得全力以赴地去应付了。要记住即使是随意地闲谈也要避免提及隐晦的问题。在回答个人情况时,要态度友好而且自信。
99.你能简述一下XX岗位工作流程吗
100.你能讲述一下你过去工作的基本职责吗
101.你怎样评价上一家公司
JAVA 技能面试项目常谈问题
开场白——模棱两可没把握的不要写,切勿给自己挖坑!
至于是说老师,面试官还是考官,因自己个人情况而异;
一、简短版
-
(各位)老师好,我叫XXX,来应聘JAVA开发工作岗位,今年XX岁,20XX年毕业于XXX大学,在校期间积极参与项目活动,从中学到一些实用的开发经验和积累了一些个人心得;本人性格温和,谦虚,有较强的社会适应能力和一定的抗压能力,也能快速的融入团队开发工作中,所以希望能够加入贵公司,一起努力奋斗,共创辉煌,谢谢!
-
(各位)老师好,大家好,我叫XXX,毕业于XXX大学,在校期间曾担任XX。我来应聘的是职位是JAVA开发工程师。我所拥有的是年轻和知识。年轻也许意味着欠缺经验,但是年轻也意味着热情和活力,我自信能凭自己的能力和学识在毕业以后的工作和生活中克服各种困难,不断实现自我的人生价值和追求的目标。
-
(各位)老师好,我叫XXX,我来应聘的是职位是JAVA开发工程师。我是一个性格开朗、自信,不轻易服输的人。生活中我喜欢与人交往,通过与各种朋友相处,学习到了很多自身缺乏的优点。在学习上我积极认真,努力掌握专业知识,现在已经具有相关的办公室事务管理、文书拟写与处理公共关系策划与活动组织等能力。
二、简短项目版
- (各位)老师好,我叫XXX,毕业于XXX大学,今年XX岁,从事JAVA开发已有X年,参与了(简历上的项目名称)等项目开发,主要负责(简历项目上拿手的业务,HOLD住的话就谈亮眼的地方)等业务,在项目中也积累了一些个人开发心得和经验,
三、加长带项目版—(涉及内容过多,if you really hold 住)
- (各位)老师好,我叫XXX,今年XX岁,今天来面试贵公司JAVA开发工程师,之前在(曾经工作的公司)任职,主要的任务是(1、与项目经理到客户现场沟通并确认需求,2、参与需求文档的编写,3、后端业务模块的逻辑实现…根据面试岗位需求针对性回答),从事这一行已经有X年。这X年的开发主要涉及(项目领域)等,在开发过程中,也用过些好的框架,如(dubbo+zk,springboot,mvc,spring…)等框架,熟练掌握框架之间的整合技术;有时候因为项目需求或是为了开发的高效性,自己也会研究一些技术,使用一些常用的主流java技术,例如:(你觉得什么牛皮就吹什么);闲暇时喜欢钻研感兴趣的技术,例如(数据结构中的什么,什么算法,架构思想等等),并把自己研究的过程以及心得与同事分享交流,因为我一直坚信一个人的能力是有限的,只有团队协作才会给公司带来更大的价值;
我承认自己还不是最优秀的人才,但是我希望自己是此岗位最合适的人选,希望有幸能够被贵公司领导予以特别考虑。今后我在好的方面再接再厉,不足之处有所改善。我的介绍到此结束。谢谢!
技能部分
基础知识(有待归类)
1 什么是字符串常量池?
创建字符串的方式
String str = new String("hello");
String str = "hello";
使用相同的字符序列而不是使用new关键字创建的两个字符串会创建指向Java字符串常量池中的同一个字符串的指针。字符串常量池是Java节约资源的一种方式
字符串常量池: JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化。为 了减少在JVM中创建的字符串的数量,字符串类维护了一个字符串池,每当代码创建字符串常量时,JVM会首先检查字符串常量池。如果字符串已经存在池中, 就返回池中的实例引用。如果字符串不在池中,就会实例化一个字符串并放到池中。Java能够进行这样的优化是因为字符串是不可变的,可以不用担心数据冲突 进行共享;每一个字符串常量都是指向一个字符串类实例的引用。字符串对象有一个固定值。字符串常量,或者一般的说,常量表达式中的字符串都被使用方法 String.intern进行保留来共享唯一的实例;
2 String为什么是不可变的?、
不可变的是什么: 指的是字符串的值不可变;
为什么不可变: 从源码来看, String类内部是用char数组来保存字符串的值, 并且char[]是final的,所以value必须在构造时为其赋值,
赋值后value的引用不能再变
3 String s = new String(“xyz”);究竟产生了几个对象,从JVM角度谈谈?
jvm 首先在 string 池内里面看找不找得到字符串 , 如果找得到, 不做任何事情,
否则的话就会创建新的 string 对象,放到 string 池里面。
由于遇到了 new,还会在内存上(不是 string 池里面)创建 string 对象存储;
所以总共是 1个 或者 2个对象
- 首先在 string 池内找,找到了,不创建 string 对象,否则创建一个对象;【这里创建0个或1个】
- 遇到 new 运算符号了,在内存上创建 string 对象,并将其返回给 s,又一个对象;【这里创建1个】
new String(…)创建了第二个对象
4 String拼接字符串效率低,你知道原因吗?
String的+在编译后会被编译为StringBuilder来运行,如果你对JVM有所了解,凡是new出来的对象绝对不会放在常量池中,toString会发生一次内容拷贝,但是也不会在常量池中,所以在这里常量池String+放在了堆中;每做一次"+"就产生个StringBuilder对象,然后append后就扔掉。下次循环再到达时重新产生个StringBuilder对象,然后append字符串,如此循环直至结束。如果我们直接采用StringBuilder对象进行append的话,我们可以节省创建和销毁对象的时间。
如果只是简单的字面量拼接或者很少的字符串拼接,性能都是差不多的。
5 你真的了解String的常见API吗?
6 Java中的subString()真的会引起内存泄露么?
1 这个bug发生在jdk1.6版本,bai后续修复了du。原因是比如我们有一个1G的字符串a,我们使用substring(0,2)得到了一个只有两个字符的字符串b,如果b的生命周期要长于a或者手动设置a为null,当垃圾回收进行后,a被回收掉,b没有回收掉,那么这1G的内存占用依旧存在,因为b持有这1G大小的字符数组的引用。
2 所以推荐的方式是substring中生成的字符串与原字符串共享内容数组,这样避免了每次进行substring重新进行字符数组复制。
3 jdk1.7之后substring的实现抛弃了之前的内容字符数组共享的机制,对于子字符串(自身除外)采用了数组复制实现单个字符串持有自己的应该拥有的内容来避免内存泄漏。
7 浅析Java中的final关键字?
1 修饰类
当用final修饰一个类时,表明这个类不能被继承。但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
2 修饰方法
使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。
注:类的private方法会隐式地被指定为final方法。
3 修饰变量(包括成员变量和局部变量)
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
8 浅析Java中的static关键字?
1 在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块;
2 在JVM加载一个类的时候,若该类存在static修饰的成员变量和成员方法,则会为这些成员变量和成员方法在固定的位置开辟一个固定大小的内存区域(只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们);
3 同时被static修饰的成员变量和成员方法是独立于该类的,它不依赖于某个特定的实例变量,也就是说它被该类的所有实例共享。所有实例的引用都指向同一个地方,任何一个实例对其的修改都会导致其他实例的变化。
静态变量:
static修饰的变量我们称之为静态变量,没有用static修饰的变量称之为实例变量,他们两者的区别是:
静态变量是随着类加载时被完成初始化的,它在内存中仅有一个,且JVM也只会为它分配一次内存,同时类所有的实例都共享静态变量,可以直接通过类名来访问它。但是实例变量则不同,它是伴随着实例的,每创建一个实例就会产生一个实例变量,它与该实例同生共死。
所以我们一般在这两种情况下使用静态变量:对象之间共享数据、访问方便。
静态方法:
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
总结一下,对于静态方法需要注意以下几点:
(1)它们仅能调用其他的static 方法。
(2)它们只能访问static数据。
(3)它们不能以任何方式引用this 或super。
静态代码块:
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次;
特性:只会在类加载的时候执行一次;
9 你对Java中的volatile关键字了解多少?
VOLATILE关键字:保证内存模型中的可见性与有序性,不保证原子性;
可见性 : 是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果,另一个线程马上就能看到。
有序性 :
原子性 :
为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不能保证它具有原子性。
12 请谈谈什么是CAS?
一种高效实现线程安全性的方法
支持原子更新操作,适用于计数器,序列发生器(就是给变量自增的工具)等场景
属于乐观锁机制,号称lock-free(底层也是有加锁行为的)
CAS操作失败是,由开发者决定是否继续尝试,还是其他操作,因此争用CAS失败的线程不会被阻塞挂起;
CAS思想:
包含三个操作数——内存位置(V)、预期原值(A)和新值(B):当一个线程需要修改一个共享变量的值,完成这个操作需要先取出共享变量的值,赋给A,基于A进行计算,得到新值B,在用预期原值A和内存中的共享变量值进行比较(这可以通过一个简单的布尔响应(这个变体通常称为比较和设置),或通过返回从内存位置读取的值来完成),如果相同就认为其他线程没有进行修改,而将新值写入内存;
CAS的缺点:
1 CPU开销比较大:在并发量比较高的情况下,如果许多线程反复尝试更新某一个变量,却又一直更新不成功,又因为自旋的时候会一直占用CPU,如果CAS一直更新不成功就会一直占用,造成CPU的浪费。
2 不能保证代码块的原子性:CAS机制所保证的只是一个变量的原子性操作,而不能保证整个代码块的原子性。比如需要保证3个变量共同进行原子性的更新,就不得不使用Synchronized了。
3 ABA问题:线程1从内存X中取出A,这时候另一个线程2也从内存X中取出A,并且线程2进行了一些操作将内存X中的值变成了B,然后线程2又将内存X中的数据变成A,这时候线程1进行CAS操作发现内存X中仍然是A,然后线程1操作成功。虽然线程1的CAS操作成功,但是整个过程就是有问题的。
CAS引起的ABA问题:
比如说我要取100,但是由于机器故障开启了两次取钱的线程,由于采用的是CAS操作,线程一如果执行成功,而线程二由于某些原因阻塞了,并且在这个阶段中有其他用户向我的账户中转了50元,并且该线程执行成功,那么线程二恢复的时候,会发现地址的值V=100,线程二比较V、A发现相同,就更新余额为50.这样就发生错误。
CAS的ABA问题解决方案:
不是只是更新某个引用的值, 而是更新两个值,包含一个引用和一个版本号。
AtomicStampedReference以及AtomicMarkableReference支持在两个变量上执行原子的条件更新。
AtomicStampedReference将更新一个“对象引用——版本号”二元组,通过在引用上加上“版本号”,从而避免ABA问题(reference——stamp)
AtomicMarkableReference将更新一个“对象引用——布尔值”二元组,在某些算法中将通过这种二元组使节点保存在链表中同时又将其标记为“已删除节点”(reference——mark)
13 从源码角度看看ArrayList的实现原理?
添加元素是一个一个添加的,当添加元素的时候,发现装不下了,才会进行扩容,扩容后的数组长度是原来的 1.5 倍。
特点:
1 快速随机访问
2 允许存放多个null元素
3 底层是Object数组
4 增加元素个数可能很慢(可能需要扩容),删除元素可能很慢(可能需要移动很多元素),改对应索引元素比较快
总结
1 底层是Object数组存储数据;
2 扩容机制:默认大小是10,扩容是扩容到之前的1.5倍的大小,每次扩容都是将原数组的数据复制进新数组中. 我的领悟:如果是已经知道了需要创建多少个元素,那么尽量用new ArrayList<>(13)这种明确容量的方式创建ArrayList.避免不必要的浪费;
3 添加:如果是添加到数组的指定位置,那么可能会挪动大量的数组元素,并且可能会触发扩容机制;如果是添加到末尾的话,那么只可能触发扩容机制;
4 删除:如果是删除数组指定位置的元素,那么可能会挪动大量的数组元素;如果是删除末尾元素的话,那么代价是最小的. ArrayList里面的删除元素,其实是将该元素置为null;
5 查询和改某个位置的元素是非常快的( O(1) );
14 手写LinkedList的实现,彻底搞清楚什么是链表?
15 Java中方法参数的传递规则?
16 Java中throw和throws的区别是什么?
17 重载和重写的区别?
18 手写ArrayList的实现,在笔试中如何过关斩将?
19 finally语句块你踩过哪些坑?
20 为什么重写equals方法需同时重写hashCode方法?
21 equals() 与 == 的区别?
在Java中,equals方法被认为是对象的值进行深层次的比较,而操作符==是进行的浅层次的比较。 equals方法比较两个对象的内容而不是引用。==两侧是引用类型(例如对象)时,如果引用是相同的-即指向同一个对象-则执行结果为真。如果是值类型 (例如原生类型),如果值相同,则执行结果为真。equals方法在两个对象具有相同内容时返回真-但是,java.lang.Object类中的 equals方法返回真-如果类没有覆盖默认的equals方法,如果两个引用指向同一个对象。
22 String StringBuffer和StringBuilder的区别,从源码角度分析?
23 你知道HashMap的数据结构吗?
24 为何HashMap的数组长度一定是2的次幂?
25 HashMap何时扩容以及它的扩容机制?
26 HashMap的key一般用字符串,能用其他对象吗?
27 HashMap的key和value都能为null么?如果key能为null,那么它是怎么样查找值的?
29 从源码角度分析HashSet实现原理?
30 HashTable与HashMap的实现原理有什么不同?
31 String方法intern() 你真的会用吗?
32 什么是自动拆装箱?
33 String.valueOf和Integer.toString的区别?
34 反射原理,反射创建类实例有哪几种方式?
35 反射中 Class.forName和ClassLoader区别
36 有没有顺序的Map实现类,如果有,它们是怎么保证有序的
37 描述动态代理的几种实现方式,分别有哪写优缺点
38 泛型的存在是用来解决什么问题的
39 Java中的HashSet内部是如何工作的
41 SpringAOP实现原理
42 Spring怎么配置事务(具体说一些关键的XML元素)
43 SpringMVC中DispatcherServlet初始化过程
44 Lock和Synchronized区别
45 Spring的controller是单例还是多例,怎么保证并发安全的
46 你所了解的几种简单的HASH算法
47 如何将已经构建好的TreeSet完成倒排序
48 数据库隔离级别有哪些,各自含义是什么,Mysql默认的隔离级别是什么
49 聚集索引和非聚集索引的区别是什么
50 final,finally,finalize的区别?
51 &和&&的区别?
19 两个对象值相同(x.equals(y)==true),但却可有不同的hashcode,这句话对不对?
20 try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行
21 swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
22 构造器Constructor是否可被override?
23 是否可以继承String类?
24 数组有没有length()这个方法?String有没有length()这个方法?
25 abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
26 接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concreteclass)?
28 Java有没有goto?
30 什么时候用assert?
33 运行时异常与一般异常有何异同?
34 int和Integer有什么区别?
35 List,Set,Map是否继承自Collection接口?
36 Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?用contains来区分是否有重复的对象,还是都不用。
37 Collection和Collections的区别。
38 说出ArrayList,Vector,LinkedList的存储性能和特性HashMap和Hashtable的区别
JVM
1 谈谈你对JVM调优的理解
JVM内存的调优主要的目的是减少Minor GC的频率和Full GC的次数,过多的Minor GC和Full GC是会占用很多的系统资源,影响系统的吞吐量。
**Full GC:**会对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个堆进行回收,所以比较慢,因此应该尽可能减少Full GC的次数。
原则上:
大多数的java应用不需要GC调优
大部分需要GC调优的的,不是参数问题,是代码问题
在实际使用中,分析GC情况优化代码比优化GC参数要多得多;
GC调优是最后的手段
导致Full GC的原因:
(1)年老代(Tenured)被写满
调优时尽量让对象在新生代GC时被回收、让对象在新生代多存活一段时间和不要创建过大的对象及数组避免直接在旧生代创建对象 。
(2)持久代Pemanet Generation空间不足
增大Perm Gen空间,避免太多静态对象 , 控制好新生代和旧生代的比例
(3)System.gc()被显示调用
垃圾回收不要手动触发,尽量依靠JVM自身的机制
常用的性能优化手段
避免过早优化:不应该把大量的时间耗费在小的性能改进上,过早考虑优化是所有噩梦的根源;
前端优化常用手段
1 使用客户端缓冲: 静态资源文件(css、图标等)缓存在浏览器中,需要更新,则通过改变文件名来解决。
2 启用压缩: 减少网络传输量,但会给浏览器和服务器带来性能的压力,需要权衡使用。
3 资源文件加载顺序: css放在页面最上面,js放在最下面。这样页面的体验才会比较好。浏览器会加载完CSS才会对页面进行渲染。JS只要加载后就会立刻执行;
4 减少Cookie传输: cookie包含在每次的请求和响应中,因此哪些数据写入cookie需要慎重考虑;
5 CDN加速: CDN,又称内容分发网络,本质是一个缓存,而且是将数据缓存在用户最近的地方。无法自行实现CDN的时候,可以根据经济实力考虑商用CDN服务。
6 反向代理缓存: 将静态资源文件缓存在反向代理服务器上,一般是Nginx。
7 WEB组件分离: 将js,css和图片文件放在不同的域名下。可以提高浏览器在下载web组件的并发数。因为浏览器在下载同一个域名的的数据存在并发数限制。
应用服务性能优化:
1 缓存: 网站性能优化第一定律:优先考虑使用缓存优化性能;优先原则:缓存离用户越近越好;缓存是将数据存在访问速度较高的介质中。可以减少数据访问的时间,同时避免重复计算。频繁修改的数据,尽量不要缓存,读写比2:1以上才有缓存的价值。
2 一致性哈希:
(1)首先求出服务器(节点)的哈希值,并将其配置到0~2的32次方的圆(continuum)上。
(2)然后采用同样的方法求出存储数据的键的哈希值,并映射到相同的圆上。
(3)然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台服务器上。
一致性哈希算法对于节点的增减都只需重定位环空间中的一小部分数据,具有较好的容错性和可扩展性。
3 数据倾斜:
集群:
1 异步:
同步和异步,阻塞和非阻塞:
同步和异步关注的是结果消息的通信机制
同步:同步的意思就是调用方需要主动等待结果的返回
异步:异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如,状态通知,回调函数等。
阻塞和非阻塞主要关注的是等待结果返回调用方的状态
阻塞:是指结果返回之前,当前线程被挂起,不做任何事
非阻塞:是指结果在返回之前,线程可以做一些其他事,不会被挂起。
1)同步阻塞:同步阻塞基本也是编程中最常见的模型,打个比方你去商店买衣服,你去了之后发现衣服卖完了,那你就在店里面一直等,期间不做任何事(包括看手机),等着商家进货,直到有货为止,这个效率很低,jdk里的BIO就属于 同步阻塞。
2)同步非阻塞:同步非阻塞在编程中可以抽象为一个轮询模式,你去了商店之后,发现衣服卖完了,这个时候不需要傻傻的等着,你可以去其他地方比如奶茶店,买杯水,但是你还是需要时不时的去商店问老板新衣服到了吗。jdk里的NIO就属于 同步非阻塞
3)异步阻塞:异步阻塞这个编程里面用的较少,有点类似你写了个线程池,submit然后马上future.get(),这样线程其实还是挂起的。有点像你去商店买衣服,这个时候发现衣服没有了,这个时候你就给老板留给电话,说衣服到了就给我打电话,然后你就守着这个电话,一直等着他响什么事也不做。这样感觉的确有点傻,所以这个模式用得比较少。
4)异步非阻塞:好比你去商店买衣服,衣服没了,你只需要给老板说这是我的电话,衣服到了就打。然后你就随心所欲的去玩,也不用操心衣服什么时候到,衣服一到,电话一响就可以去买衣服了。jdk里的AIO就属于异步。
常见异步的手段:
1 Servlet异步:servlet3中才有,支持的web容器在tomcat7和jetty8以后。
2 多线程
3 消息队列
调优是个很复杂、很细致的过程,要根据实际情况调整,不同的机器、不同的应用、不同的性能要求调优的手段都是不同的。也没有一个放之四海而皆准的配置或者公式。即使是jvm参数也是如此,再比如说性能有关的操作系统工具,和操作系统本身相关的所谓大页机制,都需要平时去积累,去观察,去实践。
2 JVM内存区域如何划分?
最常谈到的区域:
(1)方法区: 这也是所有线程共享的一块内存区域,用于存储对象的类型数据,例如类结构信息,静态变量,以及常量池、字段、方法代码等。VM对永久代垃圾回收(如,常量池回收、对象类型的卸载)非常不积极,所以当我们不断添加新类型的时候,永久代会出现OutOfMemoryError,尤其是在运行时存在大量动态类型生成的场合;类似Intern字符串缓存占用太多空间,也会导致OOM问题;
(2)JAVA堆: Java 堆是被所有线程共享的一块内存区域,在JVM启动时创建,随着JVM的结束而消亡。此内存区域所占的面积最大,他主要是用于存放对象实例,几乎所有的对象实例都在这里分配内存。因此他也是垃圾回收器主要关注的区域,当创建的对象实例特别多导致顿内存空间不够时,此区域会发上OOM异常。堆内空间还会被不同的垃圾收集器进行进一步的细分,最有名的就是新生代、老年代的划分。
(3)本地方法栈: 它和Java虚拟机栈的内存机制相同,本地方法栈则是为执行本地方法(Native Method)服务的。
(4)JAVA虚拟机堆: 每个线程在创建时都会创建一个虚拟机栈,因此它是线程私有的,其内部保存一个个的栈帧,对应着一次次的Java方法调用。当有方法调用的时候就会将方法封装到一个栈帧中进行压栈,方法执行完成后弹栈,某一时间对应的只会有一个活动的栈帧,通常叫作当前帧,方法所在的类叫作当前类。如果在该方法中调用了其他方法,对应的新的栈帧会被创建出来,成为新的当前帧,一直到它返回结果或者执行结束。在每一个栈帧中都有一个区域存放本地变量表用于存放此方法执行过程所需要的基本类型和对象引用(注:这部分空间实在预编译阶段可预测的)。
(5)程序计数器: 程序计数器是很少的一部分内存空间,它保存的是程序当前执行的指令的地址,当CPU需要执行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根据得到的地址获取到指令,在得到指令之后,程序计数器便自动加1或者根据转移指针得到下一条指令的地址,如此循环,直至执行完所有的指令;
注:1.8版本取消了老年代,取而代之的是元空间;
还会用到的空间:
(1)直接内存: 并不是虚拟机运行时数据区的一部分,也不是JVM规范中定义的内存区域,但是这部分内存也被频繁地使用,而且也可能导致OutOfMemoryError 异常出现,所以我们放到这里一起讲解。在JDK 1.4 中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O 方式,它可以使用Native 函数库直接分配堆外内存,然后通过一个存储在Java 堆里面的DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在Java 堆和Native 堆中来回复制数据;
(2)Code Cache : JVM本身是个本地程序,还需要其他的内存去完成各种基本任务,比如,JIT 编译器在运行时对热点方法进行编译,就会将编译后的方法储存在Code Cache里面;GC等功能。需要运行在本地线程之中,类似部分都需要占用内存空间;
3 JVM堆中对象是如何创建的?
步骤:
(1)类加载检查: 虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。
(2)分配内存: 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方式有 “指针碰撞” 和 “空闲列表” 两种,选择那种分配方式由 Java 堆是否规整决定,而Java堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。
(3)初始化零值: 内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值(不包括对象头),这一步操作保证了对象的实例字段在 Java 代码中可以不赋初始值就直接使用,程序能访问到这些字段的数据类型所对应的零值。
(4)设置对象头: 初始化零值完成之后,虚拟机要对对象进行必要的设置,例如这个对象是那个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的 GC 分代年龄等信息。 这些信息存放在对象头中。 另外,根据虚拟机当前运行状态的不同,如是否启用偏向锁等,对象头会有不同的设置方式。
(5)执行init方法: 在上面工作都完成之后,从虚拟机的视角来看,一个新的对象已经产生了,但从 Java 程序的视角来看,对象创建才刚开始,(init) 方法还没有执行,所有的字段都还为零。所以一般来说,执行 new 指令之后会接着执行 (init)方法,把对象按照程序员的意愿进行初始化,这样一个真正可用的对象才算完全产生出来。
4 JVM对象的结构?
对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding);
对象头(Header): 记录了对象在运行过程中所需要使用的一些数据:哈希码、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳;
对象头可能包含类型指针,通过该指针能确定对象属于哪个类。如果对象是一个数组,那么对象头还会包括数组长度。
实例数据(Instance Data): 实例数据部分就是成员变量的值,其中包括父类成员变量和本类成员变量。
对齐填充(Padding): 用于确保对象的总长度为 8 字节的整数倍。HotSpot VM(JVM默认虚拟机) 的自动内存管理系统要求对象的大小必须是 8 字节的整数倍。而对象头部分正好是 8 字节的倍数(1 倍或 2 倍),因此,当对象实例数据部分没有对齐时,就需要通过对齐填充来补全。
5 对象访问的定位方式
(1) 句柄访问方式:堆中需要有一块叫做“句柄池”的内存空间,句柄中包含了对象实例数据与类型数据各自的具体地址信息。引用类型的变量存放的是该对象的句柄地址(reference)。访问对象时,首先需要通过引用类型的变量找到该对象的句柄,然后根据句柄中对象的地址找到对象。
(2) 直接指针访问方式:引用类型的变量直接存放对象的地址,从而不需要句柄池,通过引用能够直接访问对象。但对象所在的内存空间需要额外的策略存储对象所属的类信息的地址。
注:HotSpot 采用第二种方式,即直接指针方式来访问对象,只需要一次寻址操作,所以在性能上比句柄访问方式快一倍。但像上面所说,它需要额外的策略来存储对象在方法区中类信息的地址。
5 如何判断一个对象是否存活(如何判断对象是否是垃圾对象)
(1)引用计数算法: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器加1;当引用失效时,计数器值减1;任何时刻计数器为0的对象就是不能再被引用的。
(2)可达性分析算法: 可达性分析算法的基本思路是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Root没有任何引用链相连时,则证明此对象是不可用的。
即使在可达性分析算法中不可达的对象,也并非是“非死不可”的,这时候它们暂时处于“缓刑”阶段,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行可达性分析后发现没有与GC Roots相连接的引用,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否是否有必要执行finalize()方法。当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,虚拟机将这两种情况都视为“没有必要执行”。
如果这个对象被判定为有必要执行finalize()方法,那么这个对象将会放置在一个叫做F-Queue的队列之中。并在稍后由一个虚拟机自动建立的,低优先级的Finalizer线程去执行它。这里所谓“执行”是指虚拟机会触发这个方法,但并不承诺会等待它运行结束,这样做的原因是,如果有一个对象在finalize()方法中执行缓慢,或者发生死循环,将可能会导致F-Queue队列中其他对象永久处于等待,甚至导致整个内存回收系统崩溃。
finalize()方法是对象逃脱死亡命运的最后一次机会,稍后GC将对F-Queue中的对象进行第二次小规模的标记,如果对象这个时候,未被重新引用,那它基本上就真的被回收了。
**5 **
6 JVM垃圾回收算法有哪些?
6 垃圾回收的优点和原理
7 JVM垃圾收集器有哪些?
8 JVM内存是如何分配的?
9 分析类的加载过程?
16 描述一下JVM加载class文件的原理机制?
10 JVM双亲委派机制?
11 JVM可以作为GC Root的对象有哪些?
12 请写出几段可以导致内存溢出、内存泄漏、栈溢出的代码?
13 哪些情况会导致Full GC?
14 频繁GC问题或内存溢出问题,如何定位?
15 char型变量中能不能存贮一个中文汉字?为什么?
17 垃圾回收的优点和原理。并考虑2种回收机制。
18 Java中的异常处理机制的简单原理和应用。
39 JVM参数有哪些
-xms: 堆内存的初始化大小
-xmx: 堆内存的最大空间
-xmn: 年轻代的空间
-xx:PermSize 方法区初始化大小
-xx:MaxPermSize 方法区最大空间
-XX:PretenureSizeThreshold 令大于这个设置值的对象直接在老年代分配
-MaxTenuringThreshold :年龄大于这个值的直接进入老年代
29 GC是什么?为什么要有GC?
27 给我一个你最常见到的runtimeexception
多线程及其安全问题
1 (1次)谈谈你对多线程安全问题的理解
怎样才算是线程安全的: 当多个线程访问一个对象时,如果不用进行额外的同步控制或其他的协调操作,调用这个对象的行为都可以获得正确的结果,我们就说这个对象是线程安全的(另一种说法:如果多线程的程序的运行过程和单线程运行的结果一致,则认为它是线程安全的);
如果所有的线程都是读操作,而没有写操作,那么我们可以认为也是线程安全的,如果多个线程读写操作都有的话才会容易产生线程安全问题。这个时候我们就需要采取加锁,同步等手段来解决线程安全问题。
怎样做到线程安全: 实现线程安全的方式有多种,其中在源码中常见的方式是,采用synchronized关键字给代码块或方法加锁,比如StringBuffer(如果是多个线程访问同一个资源,那么就需要上锁,才能保证数据的安全性;这个时候如果使用的是非线程安全的对象,比如StringBuilder,那么就需要借助外力,给他加synchronized关键字。或者直接使用线程安全的对象StringBuffer)
什么时候需要考虑使用线程安全:
(1)多个线程访问同一个资源;
(2)资源是有状态的,比如字符串的拼接,这个时候数据是会有变化的;
2 程序,进程,线程
程序(进程(线程))
程序: 是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码;
进程: 是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等;
线程: 是进程划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响;
3 多线程生命周期包括哪几个阶段
4 多线程有几种实现方式
(1)继承thread
(2)实现runnable
(3)实现callable
(4)使用线程池
5 多线程的分类
用户线程:运行在前台,执行具体的任务,如程序的主线程、连接网络的子线程等都是用户线程;
守护线程:运行在后台,为其他前台线程服务;
特点: 一旦所有用户线程都结束运行,守护线程会随JVM一起结束工作;
应用: 数据库连接池中的检测线程,JVM虚拟机启动后的检测线程;
最常见的守护线程: 垃圾回收线程;
可以通过调用 Thead 类的 setDaemon(true) 方法设置当前的线程为守护线程。
5 启动线程是用start()方法还是run()方法?
调用start()方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。 start()会执行线程的相应准备工作,然后自动执行run()方法的内容,这是真正的多线程工作。 而直接执行run()方法,会把run方法当成一个mian线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作。调用start方法方可启动线程并使线程进入就绪状态,而run方法只是thread的一个普通方法调用,还是在主线程里执行;
6 说说线程安全问题,什么实现线程安全,如何实现线程安全
7 什么是线程阻塞,分别有哪几种阻塞
阻塞: 阻塞状态是指线程因为某种原因放弃了cpu使用权,暂时停止运行。直到线程进入可运行(runnable)状态,才有 机会再次获得cpu timeslice转到运行(running)状态。(timeslice:时间片是操作系统分配给每个线程在CPU上计算的时间,并非CPU分配,CPU只管计算)
阻塞的情况分三种:
(一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放 入等待队列(waiting queue)中。
(二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步 锁 被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
(三). 其他阻塞: 运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。
7 sychronized和Lock的区别?
8 sleep()和wait()的区别?
(1) 两者最主要的区别在于:sleep方法没有释放锁,而wait方法释放了锁 。
(2) 两者都可以暂停线程的执行。
(3) wait通常被用于线程间交互/通信,sleep通常被用于暂停执行。
(4) wait()方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify()或者notifyAll()方法。sleep()方法执行完成后,线程会自动苏醒。
9 深入分析ThreadLocal的实现原理?
10 你看过AbstractQueuedSynchronizer源码阅读吗,请说说实现原理?
11 谈谈对synchronized的偏向锁、轻量级锁、重量级锁的理解?
12 通过三种方式实现生产者消费者模式?
13 JVM层面分析sychronized如何保证线程安全的?
14 JDK层面分析sychronized如何保证线程安全的?
15 如何写一个线程安全的单例?
16 通过AQS实现一个自定义的Lock?
17 ThreadLocal什么时候会出现OOM的情况?为什么?
18 为什么wait, notify 和 notifyAll这些方法不在thread类里面?
19 你真的理解CountDownLatch与CyclicBarrier使用场景吗?
20 出现死锁,如何排查定位问题?
21 notify和notifyAll的区别?
22 线程池启动线程submit和execute有什么不同?
23 SimpleDateFormat是线程安全的吗?如何解决?
24 请谈谈ConcurrentHashmap底层实现原理?
25 使用synchronized修饰静态方法和非静态方法有什么区别?
26 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其方法?
27 线程池的原理,为什么要创建线程池?创建线程池的方式?
28 创建线程池有哪几个核心参数? 如何合理配置线程池的大小?
29 Synchronized修饰的静态方法和非静态方法有什么区别?
30 什么时候考虑多线程安全;
多个线程访问同一个资源;
31 多线程的安全隐患以及synchronized监视器(锁)
32 怎样保证线程安全
不要跨线程访问共享变量;
使共享变量是final类型的;
使共享变量只读;
将共享变量的操作加上同步;
32 i++是线程安全的吗?如何解决线程安全性?
33 从字节码角度深度解析 i++ 和 ++i 线程安全性原理?
34 HashMap是线程安全的吗?如何实现线程安全?
数据库
1 (1次)数据库三范式
2 数据库的事务、ACID及隔离级别?
3 不考虑事务的隔离性,容易产生哪三种情况?
4 数据库连接池原理?
5 什么是B-Tree?
6 什么是B+Tree?
7 MySQL数据库索引结构?
8 什么是索引?什么条件适合建立索引?什么条件不适合建立索引?
9 索引失效的原因有哪些?如何优化避免索引失效?
10 MySQL如何启动慢查询日志?
11 MySQL如何使用show Profile进行SQL分析?
12 一条执行慢的SQL如何进行优化,如何通过Explain+SQL分析性能?
13 什么是行锁、表锁、读锁、写锁,说说它们各自的特性?
14 什么情况下行锁变表锁?
15 什么情况下会出现间隙锁?
16 谈谈你对MySQL的in和exists用法的理解?
17 MySQL的数据库引擎有哪些,如何确定在项目中要是用的存储引擎?
18 count(*)、count(列名)和count(1)的区别?
19 union和union all的区别?
WEB知识
1 什么是Servlet,Servlet生命周期方法?
Servlet: Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
生命周期: Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
(1)Servlet 通过调用 init () 方法进行初始化。
(2)Servlet 调用 service() 方法来处理客户端的请求。
(3)Servlet 通过调用 destroy() 方法终止(结束)。
(4)最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
扩展:
init(): init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一样。Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
service(): service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。doGet() 和 doPost() 方法是每次服务请求中最常用的方法。
destroy(): destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。
2 什么Session和Cookie,它们之间有什么联系?
**Session(会话跟踪):**指用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买。会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。
session共享:
对于多网站(同一父域不同子域)单服务器,我们需要解决的就是来自不同网站之间SessionId的共享。由于域名不同(aaa.test.com和bbb.test.com),而SessionId又分别储存在各自的cookie中,因此服务器会认为对于两个子站的访问,是来自不同的会话。解决的方法是通过修改cookies的域名为父域名达到cookie共享的目的,从而实现SessionId的共享。带来的弊端就是,子站间的cookie信息也同时被共享了。
常用的会话跟踪技术:session和cookie——Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。客户端浏览器再次访问服务端时只需要从该Session中查找该客户的状态就可以了。
Cookie : Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
**cookie主要内容包含:**名字,值,过期时间,路径和域(路径和域一起构成cookie的作用范围);
HttpCookie cookie = new HttpCookie("MyCook");//初使化并设置Cookie的名称
DateTime dt = DateTime.Now;
TimeSpan ts = new TimeSpan(0, 0, 1, 0, 0);//过期时间为1分钟
cookie.Expires = dt.Add(ts);//设置过期时间
cookie.Values.Add("userid", "value");
cookie.Values.Add("userid2", "value2");
Response.AppendCookie(cookie);
**会话Cookie:**若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。
**持久Cookie:**若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在浏览器的不同进程间共享。
Cookie具有不可跨域名性: cookie不可跨浏览器,例如访问百度不会带上Google的Cookie;
总结:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
3 JSP的八个隐含对象有哪些?
4 JSP的四个域对象的作用范围?
5 Post和Get请求的区别?
6 转发和重定向有什么区别?
7 JSP自定义标签,如何实现循环打印功能?
8 Http1.0和Http1.1的区别是什么?
10 (1次)HTTP中的TCP三次握手
三次握手主要是规避网络传输当中延迟而导致服务器开销的一些问题
第一次:客户端发送一个TCP的SYN标志位置1的包指明发送的服务器端口,以及初始化序号 X(客户端什么都不确定。服务端确认对方发送正常)
第二次:服务器返回确认包ACK应答,及SYN标志位和ACK标志位均为1,同时将确认序号设置为 X+1(客户端发送/接受正常,对方发送接收正常。服务端确认自己发送正常,客户端发送正常。)
第三次:客户端再次发送确认(ACK) SYN标志为0,ACK标志为1,并把服务器发送过来的ACK序号字段+1(客户端发送/接受正常,服务端发送接受正常。服务端确认自己发送/接受正常,客户端发送接受正常。)
11 TCP四次挥手
第一次:客户端请求断开FIN,seq=u
第二次:服务器确认客户端的断开请求ACK,ack=u+1,seq=v
第三次:服务器请求断开FIN,seq=w,ACK,ack=u+1
第四次:客户端确认服务器的断开ACK,ack=w+1,seq=u+1
12 HTTP与TCP协议区别
1 TCP协议对应于传输层,而HTTP协议对应于应用层
2 TCP是有状态的长连接,而HTTP是无状态的连接
13 (1次)使用过的前端框架
14 当在地址栏输入www.XX.com的时候会发生什么
1、DNS解析地址
2、找到相应的服务器
3、TCP的三次握手建立TCP连接
4、找到入口文件
5、解析入口文件
6、TCP的四次挥手
7、返回资源页面
框架知识
Spring框架
1 (1次)谈谈你对Spring的理解
Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,提倡以“最少侵入”的方式来管理应用中的代码,这意味着我们可以随时安装或者卸载 Spring
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 ;
2.可以使用容易提供的众多服务,如事务管理,消息服务等 ;
3.容器提供单例模式支持 ;
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 ;
5.容器提供了众多的辅助类,能加快应用的开发 ;
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 ;
7.spring属于低侵入式设计,代码的污染极低 ;
8.独立于各种应用服务器 ;
9.spring的DI机制降低了业务对象替换的复杂性 ;
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 ;
2 (1次)Spring的IOC和AOP机制?
IOC
控制反转也叫依赖注入,IOC利用java反射机制,AOP利用代理模式。所谓控制反转是指,本来被调用者的实例是由调用者来创建的,这样的缺点是耦合性太强,IOC则是统一交给spring来管理创建,将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类。
AOP
关于AOP的文章,详情参考另一篇AOP
AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码,属于静态代理;
一 、面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面:
1.面向切面编程提供声明式事务管理 ;
2.spring支持用户自定义的切面;
二 、面向切面编程(aop)是对面向对象编程(oop)的补充,面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。 AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,
是对应用执行过程中的步骤进行抽象,从而获得步骤之间的逻辑划分。
三 、aop框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性
3 Spring中Autowired和Resource关键字的区别?
4 依赖注入的方式有几种,各是什么?
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者
因此也称为依赖注入。
spring以动态灵活的方式来管理对象 , 注入的三种方式,设置(setter)注入、注解注入和构造注入。
设置注入的优点:直观,自然
注解注入:
构造注入的优点:可以在构造器中决定依赖关系的顺序。
5 Spring容器对Bean组件是如何管理的?
6 Spring容器如何创建?
7 Spring事务分类?
8 Spring事务的管理
Spring的事务管理机制实现的原理,就是通过一个动态代理对所有需要事务管理的Bean进行加载,并根据配置在invoke方法中对当前调用的方法名进行判定,并在method.invoke方法前后为其加上合适的事务管理代码,这样就实现了Spring式的事务管理。
Spring中的AOP实现更为复杂和灵活,不过基本原理是一致的。
Spring事务的4种特性 ACID
**(1)原子性(Atomicity):**事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
(2)一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
**(3)隔离性(Isolation):**可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
**(4)持久性(Durability):**一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。
8 Spring事务的7种传播行为
spring事务的传播行为说的是当一个方法调用另一个方法时,事务该如何操作。因此:当事务方法被另一个事务方法调用时,必须指定事务应该如何传播;
(1)PROPAGATION_MANDATORY:该方法必须运行在一个事务中。如果当前事务不存在则抛出异常。
(2)PROPAGATION_NESTED:如果当前存在一个事务,则该方法运行在一个嵌套的事务中。被嵌套的事务可以从当前事务中单独的提交和回滚。如果当前不存在事务,则开始一个新的事务。各厂商对这种传播行为的支持参差不齐,使用时需注意。
(3)PROPAGATION_NEVER:当前方法不应该运行在一个事务中。如果当前存在一个事务,则抛出异常。
(4)PROPAGATION_NOT_SUPPORTED:当前方法不应该运行在一个事务中。如果一个事务正在运行,它将在该方法的运行期间挂起。
(5)PROPAGATION_REQUIRED:该方法必须运行在一个事务中。如果一个事务正在运行,该方法将运行在这个事务中。否则,就开始一个新的事务。
(6)PROPAGATION_REQUIRES_NEW:该方法必须运行在自己的事务中。它将启动一个新的事务。如果一个现有的事务正在运行,将在这个方法的运行期间挂起。
(7)PROPAGATION_SUPPORTS:当前方法不需要事务处理环境,但如果一个事务已经在运行的话,这个方法也可以在这个事务里运行。
在现实的应用中,由于业务上的需要,要求不同表中的数据保持一致,即要求不同表中的数据同时更新或者出错时同时回滚,事务的本质其实就是为了解决这样的问题。
9 Spring事务的5种隔离级别?
并发事务引起的问题:
**脏读(Dirty read):**脏读发生在一个事务读取了被另一个事务改写但还未提交的数据时。如果这些改变在稍后被回滚,那么之前的事务读取的到数据就是无效的。
**不可重复读(Nonrepeatable read):**不可重复读发生在一个事务执行相同的查询两次或两次以上,但每一次的查询结果不同时。这通常是由于另一个并发的事务在两次查询之间更新了数据。
**幻读(Phantom read):**幻读是一个事务读取几行记录后,另一个事务插入了一些记录,幻读就发生了。在后来的查询中第一个事务就会发现有一些原来没有的额外的记录。
(1)ISOLATION_DEFAULT:使用数据库默认的隔离级别。
(2)ISOLATION_READ_UNCOMMITTED:允许读取改变了的还未提交的数据,可能导致脏读、不可重复读和幻读。
(3)ISOLATION_READ COMMITTED:允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读。
(4)ISOLATION_REPEATABLE_READ:对相同字段的多次读取结果一致,可导致幻读。
(5)ISOLATION_SERIALIZABLE:完全服从ACID的原则,确保不发生脏读、不可重复读和幻读。
可以根据自己的系统对数据的要求采取适应的隔离级别,因为隔离牵涉到锁定数据库中的记录,对数据正性要求越严格,并发的性能也越差。
10 Spring中AOP的通知类型有哪些?
关于AOP通知类型的文章,详情参考另一篇AOP详解
(1)前置通知(Before advice):在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常);
(2)返回后通知(After returning advice):在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回;
(3)抛出异常后通知(After throwing advice):在方法抛出异常退出时执行的通知;
(4)后通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出);
(5)环绕通知(Around Advice):在目标方法执行之前和之后都可以执行额外代码的通知。在环绕通知中必须显式的调用目标方法,否则目标方法不会执行。这个显式调用时通过ProceedingJoinPoint来实现的,可以在环绕通知中接收一个此类型的形参,spring容器会自动将该对象传入,这个参数必须处在环绕通知的第一个形参位置;
要注意,只有环绕通知可以接收ProceedingJoinPoint,而其他通知只能接收JoinPoint;
五种通知类型执行顺序:
在目标方法没有抛出异常的情况下:
1 前置通知
2 环绕通知的调用目标方法之前的代码——取决于配置顺序
3 目标方法
4 环绕通知的调用目标方法之后的代码
5 后置通知——取决于配置顺序
6 最终通知——最终通知 后置通知和环绕通知结束取决于配置反向顺序
在目标方法抛出异常的情况下:
1 前置通知
2 环绕通知的调用目标方法之前的代码——取决于配置顺序
3 目标方法 抛出异常
4 异常通知
5 最终通知
如果存在多个切面:
多切面执行时,采用了责任链设计模式;
五种通知常用场景:
前置通知 :记录日志(方法将被调用)
环绕通知 :控制事务 权限控制
后置通知 :记录日志(方法已经成功调用)
异常通知 :异常处理 控制事务
最终通知 :记录日志(方法已经调用,但不一定成功)
9 Spring拦截器与Servlet过滤器(Filter)的区别?
共同点: 两者都是AOP编程思想的体现,都能实现权限检查、日志记录等;
不同点:
(1)范围不同:Filter是Servlet规范规定的,只能用于Web程序中;而拦截器既可以用于Web程序,也可以用于Application、Swing程序中;
(2)规范不同:Filter是在Servlet规范中定义的,是Servlet容器支持的;而拦截器是在Spring容器内的,是Spring框架支持的;
(3)资源不同:拦截器是一个Spring组件,归Spring管理,配置在Spring文件中,因此能适用Spring里的任何资源、对象,例如Service对象、数据源、事务管理等,通过IOC注入到拦截器即可;而Filter不能;
(4)深度不同:Filter只在Servlet前后起作用;而拦截器能够深入到方法前后、异常抛出前后等;因此拦截器的使用具有更大的弹性,所以在Spring架构程序中,要优先使用拦截器;
SpringMVC框架
1 (1次)SpringMVC完整工作流程,熟读源码流程?
1 用户发起请求到前端控制器(DispatcherServlet),该控制器会过滤出哪些请求可以访问Servlet、哪些不能访问。就是url-pattern的作用,并且会加载springmvc.xml配置文件。
2 前端控制器会找到处理器映射器(HandlerMapping),通过HandlerMapping完成url到controller映射的组件,简单来说,就是将在springmvc.xml中配置的或者注解的url与对应的处理类找到并进行存储,用map<url,handler>这样的方式来存储。
3 HandlerMapping有了映射关系,并且找到url对应的处理器,HandlerMapping就会将其处理器(Handler)返回,在返回前,会加上很多拦截器。
4 DispatcherServlet拿到Handler后,找到HandlerAdapter(处理器适配器),通过它来访问处理器,并执行处理器。
5 执行处理器
6 处理器会返回一个ModelAndView对象给HandlerAdapter
7 通过HandlerAdapter将ModelAndView对象返回给前端控制器(DispatcherServlet)
8 前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp),其实就是将ModelAndView对象中存放视图的名称进行查找,找到对应的页面形成视图对象
9 返回视图对象到前端控制器。
10 视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的。
11 通过第8步,通过名称找到了对应的页面,通过第10步,request域中有了所需要的数据,那么就能够进行视图渲染了。最后将其返回即可
2 SpringMVC如何处理JSON数据?
3 SpringMVC拦截器原理,如何自定义拦截器?
SpringMVC 拦截器也是Aop(面向切面)思想构建,但不是 Spring Aop 动态代理实现的,主要采用责任链和适配器的设计模式来实现,直接嵌入到 SpringMVC 入口代码里面。
DispatcherServlet 执行调用 doService(request, response) 作为 Servlet 主要执行者,doService(request, response) 通过调用 doDispatch(request, response) 来真正执行请求处理;
拦截器原理:
(1) 通过 getHandler(HttpServletRequest request) 获取到 HandlerExecutionChain 处理器执行链;
(2)将拦截器注入到 HandlerExecutionChain 的属性中;
(3)分别调用 HandlerExecutionChain 的三个方法,applyPreHandle、applyPostHandle、triggerAfterCompletion;
(4)实现前置拦截/请求提交拦截和请求完成后拦截;
如何自定义拦截器:
4 SpringMVC如何将请求映射定位到方法上面?结合源码阐述?
5 SpringMVC常见注解有哪些?
6 SpringMVC容器和Spring容器的区别?
7 SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?
MyBatis框架
1 看过MyBatis源码吗,请说说它的工作流程?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录;
Mybatis底层还是采用原生jdbc来对数据库进行操作的,通过下列几个处理器封装了这些过程:
**SqlSessionFactory(核心类):**每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,建议使用单例模式或者静态单例模式。一个SqlSessionFactory对应配置文件中的一个环境(environment),如果你要使用多个数据库就配置多个环境分别对应一个SqlSessionFactory;
SqlSession(核心类): SqlSession是一个接口,它有2个实现类,分别是DefaultSqlSession(默认使用)以及SqlSessionManager。SqlSession通过内部存放的执行器(Executor)来对数据进行CRUD。此外SqlSession不是线程安全的,因为每一次操作完数据库后都要调用close对其进行关闭,官方建议通过try-finally来保证总是关闭SqlSession;
Executor(核心类): Executor(执行器)接口有两个实现类,其中BaseExecutor有三个继承类分别是BatchExecutor(重用语句并执行批量更新),ReuseExecutor(重用预处理语句prepared statement,跟Simple的唯一区别就是内部缓存statement),SimpleExecutor(默认,每次都会创建新的statement);
MappedStatement(核心类):
StatementHandler:
ParameterHandler:
ResultHandler:
TypeHandler(类型转换):
执行器:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
sql查询处理器:
StatementHandler
参数处理器:
ParameterHandler
结果处理器 :
ResultSetHandler
StatementHandler用通过ParameterHandler与ResultHandler分别进行参数预编译与结果处理;
工作流程:
1:加载配置文件(mybatis-config.xml 、 *…Mapper.xml)并初始化,
将SQL的配置信息加载成为一个个MappedStatement对象(包括了传
入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。
2:接收调用请求(调用Mybatis提供的API即增删改查的方法)并传入参数:
即SQL的ID和传入参数对象
3:处理操作请求,过程:
(1)根据SQL的ID查找对应的MappedStatement对象。
(2)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
(3)获取数据库连接,根据得到的最终SQL语句和执行传入参数,到数据库执行,并得到执行结果。
(4)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
(5)释放连接资源。
4:返回处理结果将最终的处理结果返回。
优点:
1:半自动化的ORM实现(实体类和SQL语句之间建立映射关系)
2:SQL代码从程序代码中彻底分离,可重用
3:与JDBC相比,减少了50%以上的代码量
4:小巧灵活、简单易学,是最简单的持久化框架
5:提供XML标签,支持编写动态SQL
6:提供映射标签,支持对象与数据库的ORM字段映射
缺点:
1:SQL语句编写工作量大,对开发人员有一定sql技术要求
2:数据库移植性差(不同数据库,sql语句语法有所不同)
2 MyBatis中#和$的区别?
#{parameterName}引用参数的时候,Mybatis会把这个参数认为是一个字符串,并自动加上" ",#{}是经过预编译的,是安全的;
${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。
能使用 #{} 的地方就用 #{}
表名作为变量时,必须使用 ${}
3 MyBatis一级缓存原理以及失效情况?
一级缓存是默认开启的,当创建SqlSession对象时候就开启了;
一级缓存通过简单Map集合来实现,并没有对Map集合的大小,容量进行限制;
一级缓存是一个粗粒度的缓存,没有办法去精确控制缓存中的数据是否过期以及去更新缓存数据;
4 MyBatis二级缓存的使用?
mybatis的二级缓存是基于application为生命周期
默认采用基于PerpetualCache的HashMap存储,其存储作用域为Mapper(Namespace)。
当某一个作用域(二级缓存Namespaces)进行了C/U/D操作后,默认该作用域下所有select中的缓存将被clear。
为什么要避免使用二级缓存:
多个Mapper(Namespace)可能对同一个表有相同的操作,会发送错误(两个命名空间下的数据不一致)
5 MyBatis拦截器原理?
mybatis给Executor、StatementHandler、ResultSetHandler、ParameterHandler提供了拦截器功能;
Executor提供了增删改查的接口;
StatementHandler负责处理Mybatis与JDBC之间Statement的交互;
ResultSetHandler负责处理Statement执行后产生的结果集,生成结果列表;
ParameterHandler是Mybatis实现Sql入参设置的对象;
拦截器采用了责任链模式,把请求发送者和请求处理者分开,各司其职;
SpringBoot框架;
网络架构问题
详情请参考另一篇文章互联网架构发展及其专业术语
1 (1次)Dubbo,Zookeeper;
2 Dubbo完整的一次调用链路介绍?
3 请说说SpringBoot自动装配原理?
4 有用过SpringCloud吗,请说说SpringCloud和Dubbo有什么不一样?
5 什么是WebService,如何基于WebService开发接口?
6 谈谈项目中分布式事务应用场景?
7 使用Redis如何实现分布式锁?
8 请谈谈SSO单点登录原理?
9 Tomcat如何优化?
10 后台系统怎么防止请求重复提交?
11 Linux常见命令有哪些?
12 请说说什么是Maven的依赖、继承以及聚合?
13 Git暂存区和工作区的区别?
14 Git如何创建、回退以及撤销版本?
15 常见的设计模式有哪些?
项目部分
一、请你自我介绍一下
二、请你描述一下你的项目(为谁开发、介绍、功能、你负责的模块等等)
三、谈谈此项目由多少张表组成,你参与了哪写,如何设计
四、此项目是否上线、开发周期、开发人员组成
五、请你谈谈你在这个项目中遇到的问题(解决办法)
六、阅读过哪些源码(并根据你说的源码问一些细节的问题)
扩展内容
数据结构
查找(适用场景,案例)
排序(适用场景,案例)
基本算法
(未完待续)欢迎留言提出宝贵意见,将不断完善!所有资料均来自网络,有错误请及时指正,蟹蟹
注:文章所涉及表情包来自[麦田]的[抱抱]系列,如有侵权,请联系;