精华内容
下载资源
问答
  • 尊重原则:职场新人新到职场遭到“欺生”很常见,如果掌握了处事技巧这就没问题了,小峰在佛山觅得一份新文案策划职位,新公司让其过完年后报到。有一年工作经验小峰,这次并不像当初大学刚毕业时表现得那么青涩...

    职场的新人做事要有自己的原则,那么职场新人如何把握原则呢?一起来和小编看看吧。

    尊重原则:

    职场新人新到职场遭到“欺生”很常见,如果掌握了处事技巧这就没问题了,小峰在佛山觅得一份新的文案策划职位,新公司让其过完年后报到。

    有一年工作经验的小峰,这次并不像当初大学刚毕业时表现得那么青涩。在人力部办好入职手续、来到办公座位后,便立即与附近的同事作自我介绍,并到相邻的工作部门进行问好,很快便已熟悉办公室的所有同事了。许多职场新人突然要认识一班陌生人的时候,往往会记不住名字。小峰表示,自己没有这样的困扰,“当对方报自己名字的时候,我会立即重复一边并说出声来,以便记忆。如果听不清楚,我会直截了当地再问他们的名字怎么写。这样,一轮下来,便不会再私下询问旁边的同事进行对号了。”

    对于新人,职业顾问一般会建议要勤快多做事。在新的公司,除了安排的工作外,可以主动向上司咨询,看还有哪些要协助,如整理办公室、拿取文件等。主动向同事多请教工作上的问题,但要把握尺度,有些情况暂不了解则不要去碰触,例如薪资待遇方面、对其他同事的随意评价等。

    处事原则:

    一、尽快学习业务知识

    你必须有丰富的知识,才能完成上司交代的工作。这些知识与学校所学的有所不同,学校中所学的是书本上的死知识,而工作所需要的是实践经验。

    二、在预定的时间内完成工作

    一项工作从开始到完成,必定有预定的时间,而你必须在这个时间内将它完成,绝不可借故拖延,如果你能提前完成,那是再好不过的了。

    三、在工作时间内避免闲聊

    工作中的闲聊,不但会影响你个人的工作进度,同时也会影响其他同事的工作情绪,甚至妨碍工作场所的安宁,招来上司的责备,所以工作时绝对不要闲聊。

    如何避免遭“欺生”

    1.把握尊重原则

    有的新员工不屑于从琐碎的事情开始做起,别小看打水、扫地、擦桌子,许多人习惯从这些小事中品人。新人如果扎扎实实坚持做这些“小事”,势必能很快融入新环境。当有一个新项目或者新机会时,大家就会首先想到与那些善于做小事的新同事合作。有了合作的机会,才有展示才华的平台。

    在日常交往中,新员工不要将自己“裹”在壳子里,适当地新同事敞开心扉,这也是对他人的尊重。比如业余时间,大家在一起谈论成长经历时,不可避免要相互了解出生地和大学毕业的学校。如果你想参与到这种愉快的聊天当中,不要对自己的相关信息“守口如瓶”。尽管你的出生地可能是一个偏僻的小城镇,尽管你毕业的大学没有显赫的名声,但这都没有关系,因为在人格沟通中有一个非常重要的“对等原则”,就是别人对你袒露相关的个人资料,你在接受以后,要尽可能提供给对方相应的对等信息。

    2.不要斤斤计较

    领导在安排工作的时候,常常安排新员工加班,而对于一些新员工而言,双休日是他们聚会、购物、料理家务的大好时机,往往在周一就已经将双休日安排好,一旦在周五被临时通知周末加班,就会大有失落感,有的人甚至产生抵触的心理。所以,新人首先要理解加班是得到了工作机会,以积极的心态来工作,带着感恩之心去面对。

    此外,除了不要斤斤计较加班这样的事情,还不要过于计较他人的评点和误解。与男员工相比,年轻女性更计较自己在工作中的信任度。有些心理承受力比较低的人,也许因为一个善意的批评,就变成一只咆哮的狮子,认为丢了面子,就没有发展前途。其实,这是自我意识过强的表现。

    在工作中,每个人都会犯错误,尤其是信任,由于业务不熟练,社会阅历比较少,常常比一般人更容易出错。而且许多新员工都常常有这样的感觉,就是越担心出错,越错误不断。所以,坦然面对自己的错误,勇于承担责任,诚恳向老同事和领导请教,把坏事当成好事。反之,如果总是没完没了地推脱责任,千方百计找客观原因,就会给人留下不成熟和难以承担责任的印象。

    3.少发表个人观点

    在一些女同志比较多的单位,大家在业余时间聊天的时候,更容易有意无意地评点不在场的人。此时,新人不可退避三舍,坐下来听听,是不会给自己惹来“杀身之祸”的。但要注意的是,千万不要轻易发表自己的观点,更不要将一些信息传给不在场的人。否则,会给大家留下“新来的女孩子怎么这么是非”的不良印象。因为大家的潜意识中,即便老同志之间有什么矛盾,都比较正常,因为长时间的工作中,难免有摩擦。但是对于新人,大家就不会这么宽容了,毕竟思维比较简单,阅历又比较浅,应该是一张白纸,如果过早画上是非,就会自己贬低自己的信誉度。

    展开全文
  • 面试常见问题回答技巧(70题)

    千次阅读 2020-10-14 22:43:01
    回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道是求职者能否胜任工作,包括:最强技能、最深入研究知识领域、个性中最积极部分、做过最...

    面试过程中我们往往会遇到很多的提问,有时候容易卡壳,这里基本涵盖了绝大部分面试可能出现的提问,主要是讲针对提问我们应该从哪些方面去回答,给新人或者初入职场的童鞋一点参考指导

    1、请你自我介绍一下你自己,

    回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,求职者要尊重考官,在回答每个问题之后都说一句“谢谢”。企业喜欢有礼貌的求职者。

    2、你觉得你个性上最大的优点是什么?

    回答提示:沉着冷静、条理清楚、立场坚定、顽强向上。
    乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在北大青鸟经过一到两年的培训及项目实战,加上实习工作,使我适合这份工作。我相信我能成功。

    3、说说你最大的缺点?

    回答提示:这个问题企业问的概率很大,通常不希望听到直接回答的缺点是什么等,如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低,企业肯定不会录用你。绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,有的人以为这样回答会显得自己比较出色,但事实上,他已经岌芨可危了。企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分。企业喜欢聪明的求职者。

    4、你对加班的看法?

    回答提示:实际上好多公司问这个问题,并不证明一定要加班。 只是想测试你是否愿意为公司奉献。
    回答样本:如果是工作需要我会义不容辞加班。我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班

    5、你对薪资的要求?

    回 答提示:如果你对薪酬的要求太低,那显然贬低自己的能力;如果你对薪酬的要求太高,那又会显得你分量过重,公司受用不起。一些雇主通常都事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱。他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。
    回答样本一:“我对工资没有硬性要求。我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会,所以只要条件公平,我则不会计较太多
    回答样本二:我受过系统的软件编程的训练,不需要进行大量的培训。而且我本人也对编程特别感兴趣。因此,我希望公司能根据我的情况和市场标准的水平,给我合理的薪水。
    回答样本三:如果你必须自己说出具体数目,请不要说一个宽泛的范围,那样你将只能得到最低限度的数字。最好给出一个具体的数字,这样表明你已经对当今的人才市场作了调查,知道像自己这样学历的雇员有什么样的价值。

    6、在五年的时间内,你的职业规划?

    回答提示:这是每一个应聘者都不希望被问到的问题,但是几乎每个人都会被问到。比较多的答案是“管理者”。但是近几年来,许多公司都已经建立了专门的技术途径。这些工作地位往往被称作“顾问”、“参议技师”或“高级软件工程师”等等。当然,说出其他一些你感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与你的专业有相关背景的工作。要知道,考官总是喜欢有进取心的应聘者,此时如果说“不知道”,或许就会使你丧失一个好机会。最普通的回答应该是“我准备在技术领域有所作为”或“我希望能按照公司的管理思路发展”。

    7、你朋友对你的评价?

    回答提示: 想从侧面了解一下你的性格及与人相处的问题。
    回答样本:“我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺。
    回答样本:”我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题“

    8、你还有什么问题要问吗?

    回答提示:企业的这个问题看上去可有可无,其实很关键,企业不喜欢说“没有问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。

    9、如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?

    回答提示:一段时间发现工作不适合我,有两种情况:

    1、如果你确实热爱这个职业,那你就要不断学习,虚心向领导和同事学习业务知识和处事经验,了解这个职业的精神内涵和职业要求,力争减少差距;

    2、你觉得这个职业可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对单位和个人都有好处。

    10、在完成某项工作时,你认为领导要求的方式不是最好的,自己还有更好的方法,你应该怎么做?

    回答提示:①.原则上我会尊重和服从领导的工作安排;同时私底下找机会以请教的口吻,婉转地表达自己的想法,看看领导是否能改变想法;
    ②如果领导没有采纳我的建议,我也同样会按领导的要求认真地去完成这项工作;
    ③.还有一种情况,假如领导要求的方式违背原则,我会坚决提出反对意见;如领导仍固执己见,我会毫不犹豫地再向上级领导反映。

    11、如果你的工作出现失误,给本公司造成经济损失,你认为该怎么办?

    回答提示:
    ①我本意是为公司努力工作,如果造成经济损失,我认为首要的问题是想方设法去弥补或挽回经济损失。如果我无能力负责,希望单位帮助解决;
    ②是责任问题。分清责任,各负其责,如果是我的责任,我甘愿受罚;如果是一个我负责的团队中别人的失误,也不能幸灾乐祸,作为一个团队,需要互相提携共同完成工作,安慰同事并且帮助同事查找原因总结经验。
    ③总结经验教训,一个人的一生不可能不犯错误,重要的是能从自己的或者是别人的错误中吸取经验教训,并在今后的工作中避免发生同类的错误。检讨自己的工作方法、分析问题的深度和力度是否不够,以致出现了本可以避免的错误。

    12、如果你在这次考试中没有被录用,你怎么打算?

    回答提示:现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败.往往成功的背后有许多的困难和挫折,如果这次失败了也仅仅是一次而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败.
    第一、要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行.能够超越自我.
    第二、善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人.
    第三、走出阴影,要克服这一次失败带给自己的心理压力,时刻牢记自己弱点,防患于未然,加强学习,提高自身素质.
    第四、认真工作,回到原单位岗位上后,要实实在在、踏踏实实地工作,三十六行,行行出状元,争取在本岗位上做出一定的成绩.
    第五、再接再厉,成为软件工程师或网络工程师一直是我的梦想,以后如果有机会我仍然后再次参加竞争.

    13、如果你做的一项工作受到上级领导的表扬,但你主管领导却说是他做的,你该怎样?

    回答提示:我首先不会找那位上级领导说明这件事,我会主动找我的主管领导来沟通,因为沟通是解决人际关系的最好办法,但结果会有两种:1.我的主管领导认识到自己的错误,我想我会视具体情况决定是否原谅他;2.他更加变本加厉的来威胁我,那我会毫不犹豫地找我的上级领导反映此事,因为他这样做会造成负面影响,对今后的工作不利。

    14、谈谈你对跳槽的看法?

    回答提示:
    (1)正常的"跳槽"能促进人才合理流动,应该支持;
    (2)频繁的跳槽对单位和个人双方都不利,应该反对。

    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、你新到一个部门,一天一个客户来找你解决问题,你努力想让他满意,可是始终达不到群众得满意,他投诉你们部门工作效率低,你这个时候怎么作?

    回 答提示:(1)首先,我会保持冷静。作为一名工作人员,在工作中遇到各种各样的问题是正常的,关键是如何认识它,积极应对,妥善处理。 (2)其次,我会反思一下客户不满意的原因。一是看是否是自己在解决问题上的确有考虑的不周到的地方,二是看是否是客户不太了解相关的服务规定而提出超出规定的要求,三是看是否是客户了解相关的规定,但是提出的要求不合理。 (3)再次,根据原因采取相对的对策。如果是自己确有不周到的地方,按照服务规定作出合理的安排,并向客户作出解释;如果是客户不太了解政策规定而造成的误解,我会向他作出进一步的解释,消除他的误会;如果是客户提出的要求不符合政策规定,我会明确地向他指出。 (4)再次,我会把整个事情的处理情况向领导作出说明,希望得到他的理解和支持。(5)我不会因为客户投诉了我而丧失工作的热情和积极性,而会一如既往地牢记为客户服务的宗旨,争取早日做一名领导信任、公司放心、客户满意的职员。

    41、对这项工作,你有哪些可预见的困难?”

    回答提示::①不宜直接说出具体的困难,否则可能令对方怀疑应聘者不行;②可以尝试迂回战术,说出应聘者对困难所持有的态度——“工作中出现一些困难是正常的,也是难免的,但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备,任何困难都是可以克服。”
    分析:一般问这个问题,面试者的希望就比较大了,因为已经在谈工作细节。但常规思路中的回答,又被面试官“骗”了。当面试官询问这个问题的时候,有两个目的。第一,看看应聘者是不是在行,说出的困难是不是在这个职位中一般都不可避免的问题。第二,是想看一下应聘者解决困难的手法对不对,及公司能否提供这样的资源。而不是想了解应聘者对困难的态度。

    42、如果我录用你,你将怎样开展工作?”

    回答提示: ①如果应聘者对于应聘的职位缺乏足够的了解,最好不要直接说出自己开展工作的具体办法;②可以尝试采用迂回战术来回答,如“首先听取领导的指示和要求,然后就有关情况进行了解和熟悉,接下来制定一份近期的工作计划并报领导批准,最后根据计划开展工作。”
    分析:这个问题的主要目的也是了解应聘者的工作能力和计划性、条理性,而且重点想要知道细节。如果向思路中所讲的迂回战术,面试官会认为回避问题,如果引导了几次仍然是回避的话。此人绝对不会录用了。

    43、“你希望与什么样的上级共事?”

    回答提示:①通过应聘者对上级的“希望”可以判断出应聘者对自我要求的意识,这既上一个陷阱,又是一次机会;②最好回避对上级具体的希望,多谈对自己的要求;③如“做为刚步入社会的新人,我应该多要求自己尽快熟悉环境、适应环境,而不应该对环境提出什么要求,只要能发挥我的专长就可以了
    分析:这个问题比较好的回答是,希望我的上级能够在工作中对我多指导,对我工作中的错误能够立即指出。总之,从上级指导这个方面谈,不会有大的纰漏。

    44、在完成某项工作时,你认为领导要求的方式不是最好的,自己还有更好的方法,你应该怎么做?

    回答提示:
    ①.原则上我会尊重和服从领导的工作安排;同时私底下找机会以请教的口吻,婉转地表达自己的想法,看看领导是否能改变想法;
    ②如果领导没有采纳我的建议,我也同样会按领导的要求认真地去完成这项工作;
    ③.还有一种情况,假如领导要求的方式违背原则,我会坚决提出反对意见;如领导仍固执己见,我会毫不犹豫地再向上级领导反映。

    45、与上级意见不一是,你将怎么办?”

    回答提示:①一般可以这样回答“我会给上级以必要的解释和提醒,在这种情况下,我会服从上级的意见。”②如果面试你的是总经理,而你所应聘的职位另有一位经理,且这位经理当时不在场,可以这样回答:“对于非原则性问题,我会服从上级的意见,对于涉及公司利益的重大问题,我希望能向更高层领导反映。”
    分析:这个问题的标准答案是思路1,如果用2的回答,必死无疑。你没有摸清楚改公司的内部情况,先想打小报告,这样的人没有人敢要。

    46、“你工作经验欠缺,如何能胜任这项工作?”

    常规思路:①如果招聘单位对应届毕业生的应聘者提出这个问题,说明招聘公司并不真正在乎“经验”,关键看应聘者怎样回答;②对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业;③如“作为应届毕业生,在工作经验方面的确会有所欠缺,因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现,实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力,而且比较勤奋,所以在兼职中均能圆满完成各项工作,从中获取的经验也令我受益非浅。请贵公司放心,学校所学及兼职的工作经验使我一定能胜任这个职位。” 点评:这个问题思路中的答案尚可。突出自己的吃苦能力和适应性以及学习能力(不是学习成绩)为好。

    47、您在前一家公司的离职原因是什么?”

    回答提示:①最重要的是:应聘者要使找招聘单位相信,应聘者在过往的单位的“离职原因”在此家招聘单位里不存在;②避免把“离职原因”说得太详细、太具体;③不能掺杂主观的负面感受,如“太辛苦”、“人际关系复杂”、“管理太混乱”、“公司不重视人才”、“公司排斥我们某某的员工”等;④但也不能躲闪、回避,如“想换换环境”、“个人原因”等;⑤不能涉及自己负面的人格特征,如不诚实、懒惰、缺乏责任感、不随和等;⑥尽量使解释的理由为应聘者个人形象添彩;⑦相关例子:如“我离职是因为这家公司倒闭;我在公司工作了三年多,有较深的感情;从去年始,由于市场形势突变,公司的局面急转直下;到眼下这一步我觉得很遗憾,但还要面对显示,重新寻找能发挥我能力的舞台。”同一个面试问题并非只有一个答案,而同一个答案并不是在任何面试场合都有效,关键在应聘者掌握了规律后,对面试的具体情况进行把握,有意识地揣摩面试官提出问题的心理背景,然后投其所好。
    分析:除非是薪资太低,或者是最初的工作,否则不要用薪资作为理由。“求发展”也被考官听得太多,离职理由要根据每个人的真实离职理由来设计,但是在回答时一定要表现得真诚。实在想不出来的时候,家在外地可以说是因为家中有事,须请假几个月,公司又不可能准假,所以辞职。这个答案一般面试官还能接受。

    48、“你工作经验欠缺,如何能胜任这项工作?”

    回答提示:①如果招聘单位对应届毕业生的应聘者提出这个问题,说明招聘公司并不真正在乎“经验”,关键看应聘者怎样回答;②对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业;③如“作为应届毕业生,在工作经验方面的确会有所欠缺,因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现,实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力,而且比较勤奋,所以在兼职中均能圆满完成各项工作,从中获取的经验也令我受益非浅。请贵公司放心,学校所学及兼职的工作经验使我一定能胜任这个职位。”
    分析:这个问题思路中的答案尚可。突出自己的吃苦能力和适应性以及学习能力(不是学习成绩)为好。

    49、为了做好你工作份外之事,你该怎样获得他人的支持和帮助?

    回答提示:每个公司都在不断变化发展的过程中;你当然希望你的员工也是这样。你希望得到那些希望并欢迎变化的人,因为这些人明白,为了公司的发展,变化是公司日常生活中重要组成部分。这样的员工往往很容易适应公司的变化,并会对变化做出积极的响应。此外,他们遇到矛盾和问题时,也能泰然处之。下面的问题能够考核应聘者这方面的能力。
    据说有人能从容避免正面冲突。请讲一下你在这方面的经验和技巧。
    有些时候,我们得和我们不喜欢的人在一起共事。说说你曾经克服了性格方面的冲突而取得预期工作效果的经历。

    50、如果你在这次面试中没有被录用,你怎么打算?

    回答提示:现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败.往往成功的背后有许多的困难和挫折,如果这次失败了也仅仅是一次而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败.
    第一、要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行.能够超越自我.
    第二、善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人.
    第三、走出阴影,要克服这一次失败带给自己的心理压力,时刻牢记自己弱点,防患于未然,加强学习,提高自身素质.
    第四、认真工作,回到原单位岗位上后,要实实在在、踏踏实实地工作,三十六行,行行出状元,争取在本岗位上做出一定的成绩.
    第五、再接再厉,成为国家公务员一直是我的梦想,以后如果有机会我仍然后再次参加竞争.

    51、假如你晚上要去送一个出国的同学去机场,可单位临时有事非你办不可,你怎么办?

    回答提示:我觉得工作是第一位的,但朋友间的情谊也是不能偏废的。这个问题我觉得要按照当时具体的情况来决定。
    (1)、如果我的朋友晚上9点中的飞机,而我的 加班八点就能够完成的话,那就最理想了,干完工作去机场,皆大欢喜。
    (2)、如果说工作不是很紧急,加班仅仅是为了明天上班的时候能把报告交到办公室,那完全可以跟领导打声招呼,先去机场然后回来加班,晚点睡就是了。
    (3)、如果工作很紧急,两者不可能兼顾的情况下,我觉得可以由两种选择。1)如果不是全单位都加班的话,是不是可以要其他同事来代替以下工作,自己去机场,哪怕就是代替你离开的那一会儿。2)如果连这一点都做不到的话,
    那只好忠义不能两全了,打电话给朋友解释一下,小心他会理解,毕竟工作做完了就完了,朋友还是可以再见面的。

    52、如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?

    回答提示:一段时间发现工作不适合我,有两种情况:

    1、如果你确实热爱这个职业,那你就要不断学习,虚心向领导和同事学习业务知识和处事经验,了解这个职业的精神内涵和职业要求,力争减少差距;

    2、你觉得这个职业可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对单位和个人都有好处。

    53、你做过的哪件事最令自己感到骄傲?

    回答提示:这是考官给你的一个机会,让你展示自己把握命运的能力。这会体现你潜在的领导能力以及你被提升的可能性。假如你应聘于一个服务性质的单位,你很可能会被邀请去午餐。记住:你的前途取决于你的知识、你的社交能力和综合表现。

    54、谈谈你过去做过的成功案例

    回答提示:举一个你最有把握的例子,把来龙去脉说清楚,而不要说了很多却没有重点。切忌夸大其词,把别人的功劳到说成自己的,很多主管为了确保要用的人是最适合的,会打电话向你的前一个主管征询对你的看法及意见,所以如果说谎,是很容易穿梆的。

    55、谈谈你过去的工作经验中,最令你挫折的事情

    回答提示:曾经接触过一个客户,原本就有耳闻他们以挑剔出名,所以事前的准备功夫做得十分充分,也投入了相当多的时间与精力,最后客户虽然并没有照单全收,但是接受的程度已经出乎我们意料之外了。原以为从此可以合作愉快,却得知客户最后因为预算关系选择了另一家代理商,之前的努力因而付诸流水。尽管如此,我还是从这次的经验学到很多,如对该产业的了解,整个team的默契也更好了。
    分析:借此了解你对挫折的容忍度及调解方式。

    56、如何安排自己的时间?会不会排斥加班?

    回答提示:基本上,如果上班工作有效率,工作量合理的话,应该不太需要加班。可是我也知道有时候很难避免加班,加上现在工作都采用责任制,所以我会调配自己的时间,全力配合。
    分析:虽然不会有人心甘情愿的加班,但依旧要表现出高配合度的诚意。

    57、为什么我们要在众多的面试者中选择你?

    回答提示:根据我对贵公司的了解,以及我在这份工作上所累积的专业、经验及人脉,相信正是贵公司所找寻的人才。而我在工作态度、EQ上,也有圆融、成熟的一面,和主管、同事都能合作愉快。
    分析:别过度吹嘘自己的能力,或信口开河地乱开支票,例如一定会为该公司带来多少钱的业务等,这样很容易给人一种爱说大话、不切实际的感觉。

    58、对这个职务的期许?

    回答提示:希望能借此发挥我的所学及专长,同时也吸收贵公司在这方面的经验,就公司、我个人而言,缔造“双赢”的局面。
    分析:回答前不妨先询问该公司对这项职务的责任认定及归属,因为每一家公司的状况不尽相同。以免说了一堆理想抱负却发现牛头不对马嘴。

    59、为什么选择这个职务?

    回答提示::这一直是我的兴趣和专长,经过这几年的磨练,也累积了一定的经验及人脉,相信我一定能胜任这个职务的。
    分析:适时举出过去的“丰功伟业”,表现出你对这份职务的熟稔度,但避免过于夸张的形容或流于炫耀。

    60、为什么选择我们这家公司?

    回答提示:曾经在报章杂志看过关于贵公司的报道,与自己所追求的理念有志一同。而贵公司在业界的成绩也是有目共睹的,而且对员工的教育训练、升迁等也都很有制度。
    分析:去面试前先做功课,了解一下该公司的背景,让对方觉得你真的很有心想得到这份工作,而不只是探探路。

    61、你认为你在学校属于好学生吗?

    回答提示:企业的招聘者很精明,问这个问题可以试探出很多问题:如果求职者学习成绩好,就会说:“是的,我的成绩很好,所有的成绩都很优异。当然,判断一个学生是不是好学生有很多标准,在学校期间我认为成绩是重要的,其他方面包括思想道德、实践经验、团队精神、沟通能力也都是很重要的,我在这些方面也做得很好,应该说我是一个全面发展的学生。”如果求职者成绩不尽理想,便会说:“我认为是不是一个好学生的标准是多元化的,我的学习成绩还可以,在其他方面我的表现也很突出,比如我去很多地方实习过,我很喜欢在快节奏和压力下工作,我在学生会组织过 ××活动,锻炼了我的团队合作精神和组织能力。” 有经验的招聘者一听就会明白,企业喜欢诚实的求职者。

    62、请谈谈如何适应办公室工作的新环境?

    回答提示
    ①办公室里每个人有各自的岗位与职责,不得擅离岗位。
    ②根据领导指示和工作安排,制定工作计划,提前预备,并按计划完成。
    ③多请示并及时汇报,遇到不明白的要虚心请教。
    ④抓间隙时间,多学习,努力提高自己的政治素质和业务水平。

    63、在工作中学习到了些什么?

    回答提示:这是针对转职者提出的问题,建议此时可以配合面试工作的特点作为主要依据来回答,如业务工作需要与人沟通,便可举出之前工作与人沟通的例子,经历了哪些困难,学习到哪些经验,把握这些要点做陈述,就可以轻易过关了

    64、有想过创业吗?

    回答提示:这个问题可以显示你的冲劲,但如果你的回答是“有”的话,千万小心,下一个问题可能就是“那么为什么你不这样做呢?”

    65、最能概括你自己的三个词是什么?

    回答提示:我经常用的三个词是:适应能力强,有责任心和做事有始终,结合具体例子向主考官解释,使他们觉得你具有发展潜力

    66、你认为你在学校属于好学生吗?

    回答提示:企业的招聘者很精明,问这个问题可以试探出很多问题:如果求职者学习成绩好,就会说:“是的,我的成绩很好,所有的成绩都很优异。当然,判断一个学生是不是好学生有很多标准,在学校期间我认为成绩是重要的,其他方面包括思想道德、实践经验、团队精神、沟通能力也都是很重要的,我在这些方面也做得很好,应该说我是一个全面发展的学生。”如果求职者成绩不尽理想,便会说:“我认为是不是一个好学生的标准是多元化的,我的学习成绩还可以,在其他方面我的表现也很突出,比如我去很多地方实习过,我很喜欢在快节奏和压力下工作,我在学生会组织过 ××活动,锻炼了我的团队合作精神和组织能力。” 有经验的招聘者一听就会明白,企业喜欢诚实的求职者。

    67、除了本公司外,还应聘了哪些公司?

    回答提示:很奇怪,这是相当多公司会问的问题,其用意是要概略知道应徵者的求职志向,所以这并非绝对是负面答案,就算不便说出公司名称,也应回答“销售同种产品的公司”,如果应聘的其他公司是不同业界,容易让人产生无法信任的感觉。

    68、何时可以到职?

    回答提示:大多数企业会关心就职时间,最好是回答\’如果被录用的话,到职日可按公司规定上班”,但如果还未辞去上一个工作、上班时间又太近,似乎有些强人所难,因为交接至少要一个月的时间,应进一步说明原因,录取公司应该会通融的

    69、你并非毕业于名牌院校?

    回答提示:是否毕业于名牌院校不重要,重要的是有能力完成您交给我的工作,我接受了北大青鸟的职业培训,掌握的技能完全可以胜任贵公司现在工作,而且我比一些名牌院校的应届毕业生的动手能力还要强,我想我更适合贵公司这个职位。

    70、你怎样看待学历和能力?

    回答提示:学历我想只要是大学专科的学历,就表明觉得我具备了根本的学习能力。剩下的,你是学士也好,还是博士也好,对于这一点的讨论,不是看你学了多少知识,而是看你在这个领域上发挥了什么,也就是所说的能力问题。一个人工作能力的高低直接决定其职场命运,而学历的高低只是进入一个企业的敲门砖,如果贵公司把学历卡在博士上,我就无法进入贵公司,当然这不一定只是我个人的损失,如果一个专科生都能完成的工作,您又何必非要招聘一位博士生呢?

    展开全文
  • 实战应用篇为职场Excel技能提升,系统讲解了实际工作中常见的7大类问题,内容包括数据整理、统计计算、查找筛选、数据展示、多表操作、打印输出和数据安全等。  本书内容丰富,深度和广度兼顾,可以帮助职场中经常...
  • PS下降问题分析

    2018-01-15 15:22:33
    个人总结:性能测试常见问题案例与原因 ...功能介绍 做有态度有内涵技术类文章分享,多为本人实际工作过程中技术总结、思考和学习,内容分享包括但不限于:测试技术、测试招聘、职场经验、业内

    个人总结:性能测试常见问题案例与原因

    2016-12-31  洁2510  来源

    个人总结:性能测试常见问题案例与原因

    2016-05-11 测试那点事儿
    测试那点事儿

     做有态度有内涵的技术类文章分享,多为本人实际工作过程中技术总结、思考和学习,内容分享包括但不限于:测试技术、测试招聘、职场经验、业内奇闻趣事。


    不定期发布有态度不忽悠的靠谱的文章,有内涵,有节操。

    喜欢的朋友欢迎关注和转发


    TPS下降问题分析

    某产品为方便用户使用开发SDK接口,对HTTP API进行了包装。测试过程中,SDK接口与直接使用HTTP API访问的性能对比,发现在同样的压力测试场景下SDK的TPS下降很多。

    使用工具Nprofile定位发现代码中调用连接池管理部分代码消耗时间比HTTP API长,进一步查看代码发现SDK使用HttpClient连接池时默认的最大连接数DEFAULT_MAX_CONNECTIONS = 50,将其设置为400时,SDK的TPS增大。

    建议:TPS上不去,首先检查连接数、线程池等配置是否合理。


    HTTP请求响应码为5XX问题的定位和分析

    正常的HTTP请求响应码为2XX,表示成功响应,但是测试过程中经常会遇到响应码为5XX的情况。常见的5XX响应码有500和502错误:

     

    * 500错误

    原因:500错误表示服务器内部错误

    案例:出现500错误时,服务端日志中同时会出现错误日志,曾经遇到的错误有:数据库处理能力成为瓶颈,连接数不够,出现get null from pool 异常,通过调整DDB 连接池的大小解决该问题。

    定位方法:当遇到500错误时,首先查看服务端日志,通过错误日志信息进一步定位返回码错误的原因。

     

    * 502错误

    原因:502错误是网关错误,同时nginx error日志中会出现(104: Connection reset by peer) while reading response header from upstream

    案例:曾经一次性能测试过程中,因为并发连接数超过了nginx配置的最大连接数,导致出现502错误,通过调整nginx的最大连接数解决该问题。

    定位方法:

    出现502以及Connection reset by peer错误的常见原因有:

    1、并发连接数大于服务端最大连接数,服务端会将其中一些连接关闭掉;

    2、客户关掉了浏览器,而服务端还在给客户端发送数据;

    当测试过程中出现该错误时,可以从以上几个方面定位问题。

    展开全文
  • 欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎加我微信「java_front」一起交流学习 1 文章概述 在互联网场景中缓存系统是一个...

    欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎加我微信「java_front」一起交流学习


    1 文章概述

    在互联网场景中缓存系统是一个重要系统,为了防止流量频繁访问数据库,一般会在数据库层前设置一道缓存层作为保护。

    缓存是一个广义概念,核心要义是将数据存放在离用户更近的地方,或者是将数据存放在访问更快的介质。

    缓存对应到实际应用中可以分为内存缓存、远程缓存。内存缓存常见工具例如Guava、Ecache等,远程缓存常见系统例如Redis,memcache等。本文以远程缓存Redis为例进行讲解。

    缓存穿透和击穿是高并发场景下必须面对的问题,这些问题会导致访问请求绕过缓存直接打到数据库,可能会造成数据库挂掉或者系统雪崩,下面本文根据下图提纲来分析这些问题的原理和解决方案。
    在这里插入图片描述


    2 缓存穿透与击穿区分

    缓存穿透和击穿从最终结果上来说都是流量绕过缓存打到了数据库,可能会导致数据库挂掉或者系统雪崩,但是仔细区分还是有一些不同,我们分析一张业务读取缓存一般流程图。
    在这里插入图片描述

    我们用文字简要描述这张图:

    (1) 业务查询数据时首先查询缓存,如果缓存存在数据则返回,流程结束

    (2) 如果缓存不存在数据则查询数据库,如果数据库不存在数据则返回空数据,流程结束

    (3) 如果数据库存在数据则将数据写入缓存并返回数据给业务,流程结束

    假设业务方要查询A数据,缓存穿透是指数据库根本不存在A数据,所以根本没有数据可以写入缓存,导致缓存层失去意义,大量请求会频繁访问数据库。

    缓存击穿是指请求在查询数据库前,首先查缓存看看是否存在,这是没有问题的。但是并发量太大,导致第一个请求还没有来得及将数据写入缓存,后续大量请求已经开始访问缓存,这是数据在缓存中还是不存在的,所以瞬时大量请求会打到数据库。


    3 CAS实例与源码分析

    现在我们把缓存问题放一放,一起来分析CAS这个概念的实例源码,后面我们编写缓存工具需要借鉴这个思想。

    3.1 一道面试题

    我们来看一道常见面试题,相信这个面试题大家并不会陌生:分析下面这段代码输出的值是多少。

    class Data {
        volatile int num = 0;
        public void increase() {
            num++;
        }
    }
    
    public class VolatileTest {
        public static void main(String[] args) {
            Data data = new Data();
            
            // 100个线程操作num累加
            for (int i = 1; i <= 100; i++) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(1000L);
                            data.increase();
                        } catch (Exception ex) {
                            System.out.println(ex.getMessage());
                        }
                    }
                }).start();
            }
            
            // 等待上述线程执行完 -> 数值2表示只有主线程和GC线程在运行
            while (Thread.activeCount() > 2) {
                // 主线程让出CPU时间片
                Thread.yield();
            }
            System.out.println(data.num);
        }
    }
    

    运行结果num值一般小于100,这是因为num++不是原子性,我们编写一段简单代码进行证明。

    public class VolatileTest2 {
        volatile int num = 0;
    
        public void increase() {
            num++;
        }
    }
    

    执行下列命令获取字节码:

    javac VolatileTest2.java
    javap -c VolatileTest2.class
    

    字节码文件如下所示:

    $ javap -c VolatileTest2.class
    Compiled from "VolatileTest2.java"
    public class com.java.front.test.VolatileTest2 {
      volatile int num;
    
      public com.java.front.test.VolatileTest2();
        Code:
           0: aload_0
           1: invokespecial #1                  // Method java/lang/Object."<init>":()V
           4: aload_0
           5: iconst_0
           6: putfield      #2                  // Field num:I
           9: return
    
      public void increase();
        Code:
           0: aload_0
           1: dup
           2: getfield      #2                  // Field num:I
           5: iconst_1
           6: iadd
           7: putfield      #2                  // Field num:I
          10: return
    }
    

    我们观察num++代码片段,发现其实分为三个步骤:

    (1) getfield 
    (2) iadd  
    (3) putfield 
    

    getfield读取num值,iadd运算num+1,最后putfield将新值赋值给num。这就不难理解为什么num最终会小于100:因为线程A在执行到第二步后执行第三步前,还没来得及将新值赋给num,数据就被线程B取走了,这时还是没有加1的旧值。


    3.2 CAS实例分析

    那么怎么解决上述问题呢?常见方案有两种:加锁方案和无锁方案。

    加锁方案是对increase加上同步关键字,这样就可以保证同一时刻只有一个线程操作,这不是我们这篇文章重点,不详细展开了。

    无锁方案可以采用JUC提供的AtomicInteger进行运算,我们看一下改进后的代码。

    import java.util.concurrent.atomic.AtomicInteger;
    
    class Data {
        volatile AtomicInteger num = new AtomicInteger(0);
        public void increase() {
            num.incrementAndGet();
        }
    }
    
    public class VolatileTest {
        public static void main(String[] args) {
            Data data = new Data();
            for (int i = 1; i <= 100; i++) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(1000L);
                            data.increase();
                        } catch (Exception ex) {
                            System.out.println(ex.getMessage());
                        }
                    }
                }).start();
            }
            while (Thread.activeCount() > 2) {
                Thread.yield();
            }
            System.out.println(data.num);
        }
    }
    

    这样改写之后结果正如我们预期等于100,我们并没有加锁,那么为什么改用AtomicInteger就可以达到预期效果呢?


    3.3 CAS源码分析

    本章节我们以incrementAndGet方法作为入口,进行CAS源码分析。

    class Data {
        volatile AtomicInteger num = new AtomicInteger(0);
        public void increase() {
            num.incrementAndGet();
        }
    }
    

    进入incrementAndGet方法:

    import sun.misc.Unsafe;
    
    public class AtomicInteger extends Number implements java.io.Serializable {
        private static final Unsafe unsafe = Unsafe.getUnsafe();
        private static final long valueOffset;
    
        public final int incrementAndGet() {
            return unsafe.getAndAddInt(this, valueOffset, 1) + 1;
        }
    }
    

    我们看到一个名为Unsafe的类。这个类并不常见,到底有什么用呢?Unsafe是位于sun.misc包下的一个类,具有操作底层资源的能力。例如可以直接访问操作系统,操作特定内存数据,提供许多CPU原语级别的API。

    我们继续分析源码跟进getAndAddInt方法:

    public final int getAndAddInt(Object o, long offset, int delta) {
        int v;
        do {
            v = getIntVolatile(o, offset);
        } while (!compareAndSwapInt(o, offset, v, v + delta));
        return v;
    }
    

    我们对参数进行说明:o表示待修改的对象,offset表示待修改字段在内存中的偏移量,delta表示本次修改的增量。

    整个方法核心是一段do-while循环代码,其中方法getIntVolatile比较好理解,就是获取对象o偏移量为offset的某个字段值。

    我们重点分析while中compareAndSwapInt方法:

    public final native boolean compareAndSwapInt(
        Object o,
        long offset,
        int expected,
        int x);
    

    其中o和offset含义不变,expected表示期望值,x表更新值,这就引出了CAS核心操作三个值:内存位置值、预期原值及新值。

    执行CAS操作时,内存位置值会与预期原值比较。如果相匹配处理器会自动将该位置值更新为新值,否则处理器不做任何操作。

    Unsafe提供的CAS方法是一条CPU的原子指令,底层实现即为CPU指令cmpxchg,不会造成数据不一致。

    我们再回过头分析这段代码:

    public final int getAndAddInt(Object o, long offset, int delta) {
        int v;
        do {
            v = getIntVolatile(o, offset);
        } while (!compareAndSwapInt(o, offset, v, v + delta));
        return v;
    }
    

    代码执行流程如下:

    (1) 线程A执行累加,执行到getAndAddInt方法,首先根据内存地址获取o对象offset偏移量的字段值v1

    (2) while循环中compareAndSwapInt执行,这个方法将再次获取o对象offset偏移量的字段值v2,此时判断v1和v2是否相等,如果相等则自动将该位置值更新为v1加上增量后的值,跳出循环

    (3) 如果执行compareAndSwapInt时字段值已经被线程B改掉,则该方法会返回false,所以无法跳出循环,继续执行直至成功,这就是自旋设计思想

    通过上述分析我们知道,Unsafe类和自旋设计思想是CAS实现核心,其中自旋设计思想会在我们缓存工具中体现。


    4 分布式锁实例分析

    在相同JVM进程中为了保证同一段代码块在同一时刻只能被一个线程访问,JAVA提供了锁机制,例如我们可以使用synchroinzed、ReentrantLock进行并发控制。

    如果在多个服务器的集群环境,每个服务器运行着一个JVM进程。如果希望对多个JVM进行并发控制,此时JVM锁就不适用了。这时就需要引入分布式锁。顾名思义分布式锁是对分布式场景下,多个JVM进程进行并发控制。

    分布式锁在实现时小心踩坑:例如没有设置超时时间,如果获取到锁的节点由于某种原因挂掉没有释放锁,导致其它节点永远拿不到锁。

    分布式锁有多种实现方式,可以自己通过Redis或者Zookeeper进行实现,也可以直接使用Redisson框架。本章节给出Redis分布式锁Lua脚本实现。本文不进行展开。


    5 缓存工具实例分析

    上述章节分析了CAS原理和分布式锁实现,现在我们要将上述知识结合起来,实现一个可以解决缓存击穿问题的缓存工具。

    缓存工具核心思想是如果发现缓存中无数据,利用分布式锁使得同一时刻只有一个JVM进程可以访问数据库,并将数据写入缓存。

    那么没有抢到分布式锁的进程怎么办呢?我们提供以下三种选择:

    方案一:直接返回空数据
    方案二:自旋直到获取到数据
    方案三:自旋N次仍然没有获取到数据则返回空数据
    

    缓存工具代码如下:

    /**
     * 业务回调
     *
     * @author 微信公众号「JAVA前线」
     *
     */
    public interface RedisBizCall {
    
        /**
         * 业务回调方法
         *
         * @return 序列化后数据值
         */
        String call();
    }
    
    /**
     * 安全缓存管理器
     *
     * @author 微信公众号「JAVA前线」
     *
     */
    @Service
    public class SafeRedisManager {
        @Resource
        private RedisClient RedisClient;
        @Resource
        private RedisLockManager redisLockManager;
    
        public String getDataSafeRetry(String key, int lockExpireSeconds, int dataExpireSeconds, RedisBizCall bizCall, int retryMaxTimes) {
            try {
                int currentTimes = 0;
                boolean getLockSuccess = false;
                while(currentTimes < retryMaxTimes) {
                    String value = redisClient.get(key);
                    if (StringUtils.isNotEmpty(value)) {
                        return value;
                    }
                    /** 竞争分布式锁 **/
                    if (getLockSuccess = redisLockManager.tryLock(key, lockExpireSeconds)) {
                        value = redisClient.get(key);
                        if (StringUtils.isNotEmpty(value)) {
                            return value;
                        }
                        /** 查询数据库 **/
                        value = bizCall.call();
    
                        /** 数据库无数据则返回**/
                        if (StringUtils.isEmpty(value)) {
                            return null;
                        }
    
                        /** 数据存入缓存 **/
                        redisClient.setex(key, seconds, value);
                        return value;
                    } else {
                        Thread.sleep(100L);
                        logger.warn("尝试重新获取数据,key={}", key);
                        currentTimes++;
                    }
                }
            } catch (Exception ex) {
                logger.error("getDistributeSafeRetryError", ex);
                return null;
            } finally {
                if (getLockSuccess) {
                    redisLockManager.unLock(key);
                }
            }
        }
    }
    

    在上面代码中我们采用分布式锁,对访问数据库资源的行为进行了限制,同一时刻只有一个进程可以访问数据库资源。如果有数据则放入缓存,解决了缓存击穿问题。如果没有数据则结束循环,解决了缓存穿透问题。使用方法如下:

    /**
     * 缓存工具使用
     *
     * @author 微信公众号「JAVA前线」
     *
     */
    @Service
    public class StudentService implements StudentService {
        private static final String KEY_PREFIX = "stuKey_";
    
        @Resource
        private StudentDao studentDao;
        @Resource
        private SafeRedisManager safeRedisManager;
    
        public Student getStudentInfo(String studentId) {
            String studentJSON = safeRedisManager.getDataRetry(KEY_PREFIX + studentId, 30, 600, new RedisBizCall() {
                public String call() {
                    StudentDO student = studentDao.getStudentById(studentId);
                    if (null == student) {
                        return StringUtils.EMPTY;
                    }
                    return JSON.toJSONString(student);
                }, 5);
                if(StringUtils.isEmpty(studentJSON) {
                    return null;
                }
                return JSON.toJSONString(studentJSON, Student.class);
            }
        }
    }
    

    6 数据库与缓存一致性问题

    本文到第五章节缓存击穿问题从原理到解决方案已经讲清楚了,这个章节我想引申一个问题:到底是先写缓存还是先写数据库,或者说数据库与缓存一致性怎么保证?

    我的结论非常清晰明确:先写数据库再写缓存。核心思想是数据库和缓存之间追求最终一致性,如无必要则无需保证强一致性。

    (1) 在缓存作为提升系统性能手段的背景下,不需要保证数据库和缓存的强一致性。如果非要保证二者的强一致性,会增大系统的复杂度没有必要

    (2) 如果更新数据库成功,再更新缓存。此时存在两种情况:更新缓存成功则万事大吉。更新缓存失败没有关系,等待缓存失效,此处一定要合理设置失效时间

    (3) 如果更新数据库失败,则操作失败,重试或者等待用户重新发起

    (4) 数据库是持久化数据,是操作成功还是失败的判断依据。缓存是提升性能的手段,允许短时间和数据库的不一致

    (5) 在互联网架构中,一般不追求强一致性,而追求最终一致性。如果非要保证缓存和数据库的一致性,本质上是在解决分布式一致性问题

    (6) 分布式一致性问题解决方案有很多,可以选择比如两阶段提交、TCC、本地消息表、MQ事务性消息


    7 文章总结

    本文介绍了缓存击穿问题原因和解决方案,其中参考率CAS源码的自旋设计思想,结合分布式锁实现了缓存工具,希望文章对大家有所帮助。

    欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎加我微信「java_front」一起交流学习

    展开全文

空空如也

空空如也

1 2 3 4
收藏数 72
精华内容 28
关键字:

常见的职场问题包括