【人事面试篇】 十八道人事面试题

PHP技术交流资料收集专员 发表了文章 • 0 个评论 • 182 次浏览 • 2018-07-06 09:39 • 来自相关话题

第一题#请你自我介绍一下你自己?
#这道面试题是大家在以后面试过程中会常被问到的,那么我们被问到之后, 该如果回答呢?是说姓名?年龄?还是其他什么一般人回答这个问题往往会进入误区,回答的过于平常,只说姓名、年龄、爱好、工作经验等,但是你们想到没有,其实这些信息你的个人简历上都有,那么面试官还问你干什么?

其实,面试官最希望知道的是求职者能否胜任这份工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但一定要突出积极的个性和做事的能力,说得合情合理企业的面试官才会相信。

企业很重视一个人的礼貌,求职者要尊重面试官,在回答每个问题之后还可以加一句“谢谢”,企业喜欢有礼貌的求职者。切记:回答面试官问题的时候一定要回答的自然,有底气,否则你给面试官留下一个“假”的印象。

第二题#你最大的优点和缺点是什么?#

这个问题是企业面试过程中被问到的概率很大的,因为一个人如果不能认清自己或者了解自己的话,那么他做任何事情都不能端正自己的态度,这样自然而然的无法给企业带来价值,企业还会聘用你吗?

常面试官不希望听到直接回答的优缺点是什么等,例如:我优点很多、我最大的优点就是追求完美,最大的缺点就是优点太多,有的人以为这样回答会显得自己比较出色,但事实上,已经岌岌可危了,或者求职者说自己的缺点是小心眼、爱忌妒人、非常懒、脾气大、工作效率低,这些回答之后,企业是肯定不会录用你的!怎么才能回答出企业面试官想要的答案呢?大家可以结合自己的性格,这么说:沉着冷静、条理清楚、立场坚定、顽强向上、乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在××单位经过一到两年的项目实

战,使我更适合这份工作,企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分,企业喜欢聪明的求职者。

第三题#谈谈你对公司加班的看法?#

哈哈,被面试官问到这题,你就“中大奖”了!为什么呢?因为十有八九这家公司将来会让你加班哦!不过话又说回来,现在的 IT 行业又有哪个程序员可以朝九晚五上下班而不加班的呢?所以被问到这题,求职者一定要把分寸自己拿捏好了。

实际上好多公司会问这个问题,并不证明一定要加班,只是有时候项目多了要加班,想提前测试你是否愿意为公司奉献。被面试官问到这道题,千千万万不要幼稚地反问面试官:“加班是否有加班费”?这样你是不会被公司录用的,因为我之前说过面试官想提前测试你是否愿意为公司奉献,更何况加班费在如今的 IT 行业的私企中已经不复存在,只有为数不多的公司现在还有。

看到这里,肯定有人就说了,既然这样,那我就回答愿意加班了,你这样回答如果你入职了,公司可能让你往死里加班,谁让你当初愿意加班了,那么回答不愿意加班的话,相信大家已经能猜到后果了,这里我就不多说了。既然这样我们回答愿意不行,不愿意更不行,叫我们如何是好,接下来我就告诉大家在问到这到面试题该如何的回答:如果是工作需要我会义不容辞加班,我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班;或者说如果是工作需要我会义不容辞加班,我现在已经成家,生活上已经稳定,这样更能全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班。这么回答之后,这道题你就顺利的过关了,我说过公司喜欢录用聪明的人!

第四题#你对薪资的要求?#

在这里我提醒大家一下,在大家投递简历的时候,千万别再简历上体现“期望薪资”、“原来薪资”等一些关于薪资明确的数字,如果用一些招聘网站的简历模板时,该项必须要填写的时候,大家可以写“面议”。真正的薪资要是不是你写出来的,是你在面试的时候自己的价值体现,下面就让播妞告诉大家如何在面试的时候如何把自己的价值最大化!

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

第五题#在未来的五年的时间内,你的职业规划是什么?#

所谓不想当将军的士兵不是好士兵,所以大家一定要自强。遇到这样的问题,又该怎么解决呢?这是每一个应聘者都不希望被问到的问题,但是几乎每个人都会被问到,比较多的答案是

“管理者”。但是近几年来,许多公司都已经建立了专门的技术途径。这些工作地位往往被称作“顾问”、“参议技师”或“高级软件工程师”等等。当然,说出其他一些你感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与你的专业有相关背景的工作。要知道,考官总是喜欢有进取心的应聘者,此时如果说“不知道”,所以你在回答这道题的时候,一定要符合自己实际情况,千万不要大而空,这样面试官会觉得你是一个好高骛远之人,就会使你丧失一个好机会。最普通的回答应该是“我准备在技术领域有所作为,比如**技术上有所突破”或“我希望能按照公司的管理思路发展”。

回答这道题时要注意的事项和第二天的面试题一样(下面往期回顾里面有链接),大家可以这么回答面试官,“我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺;或者说“我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题。”

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

第六题#谈谈你的朋友对你的评价是什么?#

其实企业面试官问你这道题,是想从侧面了解一下你的性格及与人相处的问题,那我们该如何去回答呢?
 
大家可以这么回答面试官,“我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺;或者说“我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题。”

第七题#你还有什么问题要问吗?#

今天这道面试题是大家面试的时候最后都会被问到的:“你还有什么问题要问吗?”不要小看这道题,一定要回答好了
 
企业面试官问的这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。

第八题#如果我们公司录用了你,但你却在工作后发现根本不适合这个职位,你怎么办?#

这个现象在实际工作中很常见,为什么呢?有句老话:“不当家不知柴米油盐贵”,在你向往这份工作的时候,你往往看到的是这份工作比较好的那一面,而看不到它相反的一面,当你真正投入这份工作的时候,你会感觉理想与现实的差别,会造成你心里极大的落差,从而你会有离职的思想,所以选择一份工作的同时,你一定要明确知道你要在这份工作中得到什么,是否在你的人生规划当中,如果你在面试过程中真的被问到这道题,播妞告诉大家该如何去回答!

在公司工作一段时间之后发现工作不适合自己,一般会有两种情况:

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

2.如果你自己觉得这个职业对你来说可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对公司和个人都有好处。

第九题#在完成某项工作时,你认为自己的方式比领导要求的更好,你应该怎么做?#

实际工作中,自己和领导有不同的意见很常见,这个是好事,面试官问这道题是想知道你遇到这种情况你怎么处理,因为如果处理好了,会给公司带来更大的价值,所以你回答好了,面试官这官你应该可以轻松的过了。

1.原则上我会尊重和服从领导的工作安排,同时私底下找机会以请教的口吻,婉转地表达自己的想法,看看领导是否能改变想法。

2.如果领导没有采纳我的建议,我也同样会按领导的要求认真地去完成这项工作,并私下找领导分析下我的想法有哪些考虑是不周到的,这样也可以去提高自己。

3.还有一种情况,假如领导要求的方式违背原则,我会坚决提出反对意见,如领导仍固执己见,我会毫不犹豫地再向上级领导反映。(注:这个你可以在面试的时候这么说,但一定要明确是面试官不是你将来的直接主管,而且实际中你也不要这么干!)

第十题#如果你出现工作失误,给公司造成经济损失,你认为该怎么办?#

这个问题是在面试上基本上都会问到的,其实面试官是在考察你是否可以承担责任,所以那我们该如果回答呢?

1.我本意是为公司努力工作,如果造成经济损失,我认为首要的问题是想方设法去弥补或挽回经济损失。如果我无能力负责,希望公司帮助解决。

2.分清责任,各负其责,如果是我的责任,我甘愿受罚;如果是一个我负责的团队中的人失误,也不能幸灾乐祸,作为一个团队,需要互相提携共同完成工作,安慰同事并且帮助同事查找原因总结经验。

3.总结经验教训,一个人的一生不可能不犯错误,重要的是能从自己的或者是别人的错误中吸取经验教训,并在今后的工作中避免发生同类的错误。检讨自己的工作方法、分析问题的深度和力度是否不够,以致出现了本可以避免的错误。

第十一题#如果你做的一项工作受到上级表扬,主管却说是他做的,你该怎样?#

不要觉得不公平,这样的不公平的事以后你们会遇见有的多,在你不能改变环境的时候,就该适应环境,但是这些虽说是实际情况,面试的时候你千万不能这么去回答,那我们该如何回答呢?

我首先不会找那位上级领导说明这件事,我会主动找我的主管领导来沟通,因为沟通是解决人际关系的最好办法,但结果会有两种:

1.我的主管领导认识到自己的错误,我想我会视具体情况决定是否原谅他。

2.他更加变本加厉的来威胁我,那我会毫不犹豫地找我的上级领导反映此事,因为他这样做会造成负面影响,对今后的工作不利。

第十二题#谈谈你对跳槽的看法?#

这道题,比较简单,大家可以在面试的时候在扩展一下。
1.正常的“跳槽”能促进人才合理流动,应该支持。
2.频繁的跳槽对单位和个人双方都不利,应该反对。
 
第十三题#谈谈工作中你难以和同事、上级相处,你该怎么办?#
现在为人处世可以说是最难学的也是最容易学的一门课程,这个只有在实践
中去学习,遇到这个问题让播妞教你去如何回答!1.我会服从领导的指挥,配合同事的工作。2.我会从自身找原因,仔细分析是不是自己工作做得不好让领导不满意,同事看不惯。还要

看看是不是为人处世方面做得不好,如果是这样的话我会努力改正。3.如果我找不到原因,我会找机会跟他们沟通,请他们指出我的不足,有问题就及时改正。4.作为优秀的员工,应该时刻以大局为重,即使在一段时间内,领导和同事对我不理解,我

也会做好本职工作,虚心向他们学习,我相信,他们会看见我在努力,总有一天会对我微笑的。

第十四题#你因工作比较突出,虽说得到领导肯定,但同事越来越孤立你,你该怎么办?#
播妞给大家总结了一下,可以从四点去说:1.成绩比较突出,得到领导的肯定是件好事情,以后更加努力。

2.检讨一下自己是不是对工作的热心度超过同事间交往的热心了,加强同事间的交往及共同的兴趣爱好。

3.工作中,切勿伤害别人的自尊心。
4.不再领导前拨弄是非。
第十五题#说说你选择这份工作的动机#
其实这道面试题是面试官想知道面试者对这份工作的热忱及理解度,并筛选因一时兴起而来应试的人,那么,我们该怎么回答呢?如果你是在这个领域是无经验者,也可以强调“就算职种不同,也希望有机会发挥之前的经验”,所以你在面试时候一定要对该公司做好备课,往往公司不希望自己的公司成为别人的职业跳板。

第十六题#你能为我们公司带来什么呢?#

面试官往往想知道,你比其他面试者能多带给公司什么,播妞接下来就告诉大家该如何去回答这道题。

企业很想知道未来的员工能为企业做什么,求职者应再次重复自己的优势,然后说:“就我的能力,我可以做一个优秀的员工在组织中发挥能力,给组织带来高效率和更多的收益”。

企业喜欢求职者就申请的职位表明自己的能力,比如申请营销之类的职位,可以说:“我可以开发大量的新客户,同时,对老客户做更全面周到的服务,开发老客户的新需求和消费。”

第十七题#说说喜欢这份工作的哪一点?#

相信其实大家心中一定都有答案了吧!那我们就畅所欲言吧!如果你没有喜欢的,说明你对企业的忠诚度不高,企业自然不会聘用你!

每个人的价值观不同,自然评断的标准也会不同,但是,在回答面试官这个问题时可不能太直接就把自己心理的话说出来,尤其是薪资方面的问题,不过一些无伤大雅的回答是不错的考虑,如交通方便,工作性质及内容颇能符合自己的兴趣等等都是不错的答案,不过如果这时自己能仔细思考出这份工作的与众不同之处,相信在面试上会大大加分。

第十八题#你是怎样看待学历和能力的?#

学历和能力在当今的社会都不可或缺,学历往往是你面试的敲门砖,敲完门用途就不大了,后面才是证明你能力价值的,那我们被问到:“你是怎样看待学历和能力的?”该如何回答呢?

学历我想只要是大学专科的学历,就表明觉得我具备了根本的学习能力。剩下的,你是学士也好,还是博士也好,对于这一点的讨论,不是看你学了多少知识,而是看你在这个领域上发挥了什么,也就是所说的能力问题。一个人工作能力的高低直接决定其职场命运,而学历的高低只是进入一个企业的敲门砖,如果贵公司把学历卡在博士上,我就无法进入贵公司,当然这不一定只是我个人的损失,如果一个专科生都能完成的工作,您又何必非要招聘一位博士生呢? 查看全部
第一题#请你自我介绍一下你自己?
#这道面试题是大家在以后面试过程中会常被问到的,那么我们被问到之后, 该如果回答呢?是说姓名?年龄?还是其他什么一般人回答这个问题往往会进入误区,回答的过于平常,只说姓名、年龄、爱好、工作经验等,但是你们想到没有,其实这些信息你的个人简历上都有,那么面试官还问你干什么?

其实,面试官最希望知道的是求职者能否胜任这份工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但一定要突出积极的个性和做事的能力,说得合情合理企业的面试官才会相信。

企业很重视一个人的礼貌,求职者要尊重面试官,在回答每个问题之后还可以加一句“谢谢”,企业喜欢有礼貌的求职者。切记:回答面试官问题的时候一定要回答的自然,有底气,否则你给面试官留下一个“假”的印象。

第二题#你最大的优点和缺点是什么?#

这个问题是企业面试过程中被问到的概率很大的,因为一个人如果不能认清自己或者了解自己的话,那么他做任何事情都不能端正自己的态度,这样自然而然的无法给企业带来价值,企业还会聘用你吗?

常面试官不希望听到直接回答的优缺点是什么等,例如:我优点很多、我最大的优点就是追求完美,最大的缺点就是优点太多,有的人以为这样回答会显得自己比较出色,但事实上,已经岌岌可危了,或者求职者说自己的缺点是小心眼、爱忌妒人、非常懒、脾气大、工作效率低,这些回答之后,企业是肯定不会录用你的!怎么才能回答出企业面试官想要的答案呢?大家可以结合自己的性格,这么说:沉着冷静、条理清楚、立场坚定、顽强向上、乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在××单位经过一到两年的项目实

战,使我更适合这份工作,企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分,企业喜欢聪明的求职者。

第三题#谈谈你对公司加班的看法?#

哈哈,被面试官问到这题,你就“中大奖”了!为什么呢?因为十有八九这家公司将来会让你加班哦!不过话又说回来,现在的 IT 行业又有哪个程序员可以朝九晚五上下班而不加班的呢?所以被问到这题,求职者一定要把分寸自己拿捏好了。

实际上好多公司会问这个问题,并不证明一定要加班,只是有时候项目多了要加班,想提前测试你是否愿意为公司奉献。被面试官问到这道题,千千万万不要幼稚地反问面试官:“加班是否有加班费”?这样你是不会被公司录用的,因为我之前说过面试官想提前测试你是否愿意为公司奉献,更何况加班费在如今的 IT 行业的私企中已经不复存在,只有为数不多的公司现在还有。

看到这里,肯定有人就说了,既然这样,那我就回答愿意加班了,你这样回答如果你入职了,公司可能让你往死里加班,谁让你当初愿意加班了,那么回答不愿意加班的话,相信大家已经能猜到后果了,这里我就不多说了。既然这样我们回答愿意不行,不愿意更不行,叫我们如何是好,接下来我就告诉大家在问到这到面试题该如何的回答:如果是工作需要我会义不容辞加班,我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班;或者说如果是工作需要我会义不容辞加班,我现在已经成家,生活上已经稳定,这样更能全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班。这么回答之后,这道题你就顺利的过关了,我说过公司喜欢录用聪明的人!

第四题#你对薪资的要求?#

在这里我提醒大家一下,在大家投递简历的时候,千万别再简历上体现“期望薪资”、“原来薪资”等一些关于薪资明确的数字,如果用一些招聘网站的简历模板时,该项必须要填写的时候,大家可以写“面议”。真正的薪资要是不是你写出来的,是你在面试的时候自己的价值体现,下面就让播妞告诉大家如何在面试的时候如何把自己的价值最大化!

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

第五题#在未来的五年的时间内,你的职业规划是什么?#

所谓不想当将军的士兵不是好士兵,所以大家一定要自强。遇到这样的问题,又该怎么解决呢?这是每一个应聘者都不希望被问到的问题,但是几乎每个人都会被问到,比较多的答案是

“管理者”。但是近几年来,许多公司都已经建立了专门的技术途径。这些工作地位往往被称作“顾问”、“参议技师”或“高级软件工程师”等等。当然,说出其他一些你感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与你的专业有相关背景的工作。要知道,考官总是喜欢有进取心的应聘者,此时如果说“不知道”,所以你在回答这道题的时候,一定要符合自己实际情况,千万不要大而空,这样面试官会觉得你是一个好高骛远之人,就会使你丧失一个好机会。最普通的回答应该是“我准备在技术领域有所作为,比如**技术上有所突破”或“我希望能按照公司的管理思路发展”。

回答这道题时要注意的事项和第二天的面试题一样(下面往期回顾里面有链接),大家可以这么回答面试官,“我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺;或者说“我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题。”

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

第六题#谈谈你的朋友对你的评价是什么?#

其实企业面试官问你这道题,是想从侧面了解一下你的性格及与人相处的问题,那我们该如何去回答呢?
 
大家可以这么回答面试官,“我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺;或者说“我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题。”

第七题#你还有什么问题要问吗?#

今天这道面试题是大家面试的时候最后都会被问到的:“你还有什么问题要问吗?”不要小看这道题,一定要回答好了
 
企业面试官问的这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。

第八题#如果我们公司录用了你,但你却在工作后发现根本不适合这个职位,你怎么办?#

这个现象在实际工作中很常见,为什么呢?有句老话:“不当家不知柴米油盐贵”,在你向往这份工作的时候,你往往看到的是这份工作比较好的那一面,而看不到它相反的一面,当你真正投入这份工作的时候,你会感觉理想与现实的差别,会造成你心里极大的落差,从而你会有离职的思想,所以选择一份工作的同时,你一定要明确知道你要在这份工作中得到什么,是否在你的人生规划当中,如果你在面试过程中真的被问到这道题,播妞告诉大家该如何去回答!

在公司工作一段时间之后发现工作不适合自己,一般会有两种情况:

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

2.如果你自己觉得这个职业对你来说可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对公司和个人都有好处。

第九题#在完成某项工作时,你认为自己的方式比领导要求的更好,你应该怎么做?#

实际工作中,自己和领导有不同的意见很常见,这个是好事,面试官问这道题是想知道你遇到这种情况你怎么处理,因为如果处理好了,会给公司带来更大的价值,所以你回答好了,面试官这官你应该可以轻松的过了。

1.原则上我会尊重和服从领导的工作安排,同时私底下找机会以请教的口吻,婉转地表达自己的想法,看看领导是否能改变想法。

2.如果领导没有采纳我的建议,我也同样会按领导的要求认真地去完成这项工作,并私下找领导分析下我的想法有哪些考虑是不周到的,这样也可以去提高自己。

3.还有一种情况,假如领导要求的方式违背原则,我会坚决提出反对意见,如领导仍固执己见,我会毫不犹豫地再向上级领导反映。(注:这个你可以在面试的时候这么说,但一定要明确是面试官不是你将来的直接主管,而且实际中你也不要这么干!)

第十题#如果你出现工作失误,给公司造成经济损失,你认为该怎么办?#

这个问题是在面试上基本上都会问到的,其实面试官是在考察你是否可以承担责任,所以那我们该如果回答呢?

1.我本意是为公司努力工作,如果造成经济损失,我认为首要的问题是想方设法去弥补或挽回经济损失。如果我无能力负责,希望公司帮助解决。

2.分清责任,各负其责,如果是我的责任,我甘愿受罚;如果是一个我负责的团队中的人失误,也不能幸灾乐祸,作为一个团队,需要互相提携共同完成工作,安慰同事并且帮助同事查找原因总结经验。

3.总结经验教训,一个人的一生不可能不犯错误,重要的是能从自己的或者是别人的错误中吸取经验教训,并在今后的工作中避免发生同类的错误。检讨自己的工作方法、分析问题的深度和力度是否不够,以致出现了本可以避免的错误。

第十一题#如果你做的一项工作受到上级表扬,主管却说是他做的,你该怎样?#

不要觉得不公平,这样的不公平的事以后你们会遇见有的多,在你不能改变环境的时候,就该适应环境,但是这些虽说是实际情况,面试的时候你千万不能这么去回答,那我们该如何回答呢?

我首先不会找那位上级领导说明这件事,我会主动找我的主管领导来沟通,因为沟通是解决人际关系的最好办法,但结果会有两种:

1.我的主管领导认识到自己的错误,我想我会视具体情况决定是否原谅他。

2.他更加变本加厉的来威胁我,那我会毫不犹豫地找我的上级领导反映此事,因为他这样做会造成负面影响,对今后的工作不利。

第十二题#谈谈你对跳槽的看法?#

这道题,比较简单,大家可以在面试的时候在扩展一下。
1.正常的“跳槽”能促进人才合理流动,应该支持。
2.频繁的跳槽对单位和个人双方都不利,应该反对。
 
第十三题#谈谈工作中你难以和同事、上级相处,你该怎么办?#
现在为人处世可以说是最难学的也是最容易学的一门课程,这个只有在实践
中去学习,遇到这个问题让播妞教你去如何回答!1.我会服从领导的指挥,配合同事的工作。2.我会从自身找原因,仔细分析是不是自己工作做得不好让领导不满意,同事看不惯。还要

看看是不是为人处世方面做得不好,如果是这样的话我会努力改正。3.如果我找不到原因,我会找机会跟他们沟通,请他们指出我的不足,有问题就及时改正。4.作为优秀的员工,应该时刻以大局为重,即使在一段时间内,领导和同事对我不理解,我

也会做好本职工作,虚心向他们学习,我相信,他们会看见我在努力,总有一天会对我微笑的。

第十四题#你因工作比较突出,虽说得到领导肯定,但同事越来越孤立你,你该怎么办?#
播妞给大家总结了一下,可以从四点去说:1.成绩比较突出,得到领导的肯定是件好事情,以后更加努力。

2.检讨一下自己是不是对工作的热心度超过同事间交往的热心了,加强同事间的交往及共同的兴趣爱好。

3.工作中,切勿伤害别人的自尊心。
4.不再领导前拨弄是非。
第十五题#说说你选择这份工作的动机#
其实这道面试题是面试官想知道面试者对这份工作的热忱及理解度,并筛选因一时兴起而来应试的人,那么,我们该怎么回答呢?如果你是在这个领域是无经验者,也可以强调“就算职种不同,也希望有机会发挥之前的经验”,所以你在面试时候一定要对该公司做好备课,往往公司不希望自己的公司成为别人的职业跳板。

第十六题#你能为我们公司带来什么呢?#

面试官往往想知道,你比其他面试者能多带给公司什么,播妞接下来就告诉大家该如何去回答这道题。

企业很想知道未来的员工能为企业做什么,求职者应再次重复自己的优势,然后说:“就我的能力,我可以做一个优秀的员工在组织中发挥能力,给组织带来高效率和更多的收益”。

企业喜欢求职者就申请的职位表明自己的能力,比如申请营销之类的职位,可以说:“我可以开发大量的新客户,同时,对老客户做更全面周到的服务,开发老客户的新需求和消费。”

第十七题#说说喜欢这份工作的哪一点?#

相信其实大家心中一定都有答案了吧!那我们就畅所欲言吧!如果你没有喜欢的,说明你对企业的忠诚度不高,企业自然不会聘用你!

每个人的价值观不同,自然评断的标准也会不同,但是,在回答面试官这个问题时可不能太直接就把自己心理的话说出来,尤其是薪资方面的问题,不过一些无伤大雅的回答是不错的考虑,如交通方便,工作性质及内容颇能符合自己的兴趣等等都是不错的答案,不过如果这时自己能仔细思考出这份工作的与众不同之处,相信在面试上会大大加分。

第十八题#你是怎样看待学历和能力的?#

学历和能力在当今的社会都不可或缺,学历往往是你面试的敲门砖,敲完门用途就不大了,后面才是证明你能力价值的,那我们被问到:“你是怎样看待学历和能力的?”该如何回答呢?

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

请问x-admin有没有图片上传的方法呢

X-admin相关资料收集专员 回复了问题 • 2 人关注 • 1 个回复 • 328 次浏览 • 2018-07-04 09:56 • 来自相关话题

2.0版本如何点击左侧导航 刷新右侧tab

X-admin相关leezhen 回复了问题 • 2 人关注 • 2 个回复 • 370 次浏览 • 2018-07-04 09:54 • 来自相关话题

字符编码:Unicode和UTF-8之间的关系

PHP技术交流资料收集专员 发表了文章 • 0 个评论 • 77 次浏览 • 2018-06-28 10:11 • 来自相关话题

Unicode和UTF-8之间的关系

1. ASCII码

我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。

ASCII码一共规定了128个字符的编码,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

2、非ASCII编码

英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。

但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段。

至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。

中文编码的问题需要专文讨论,这篇笔记不涉及。这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的Unicode和UTF-8是毫无关系的。

3.Unicode

正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字"严"。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表。

4. Unicode的问题

需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

比如,汉字"严"的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别Unicode和ASCII?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果Unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

它们造成的结果是:1)出现了Unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示Unicode。2)Unicode在很长一段时间内无法推广,直到互联网的出现。

5.UTF-8

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16(字符用两个字节或四个字节表示)和UTF-32(字符用四个字节表示),不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

下表总结了编码规则,字母x表示可用编码的位。

Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

跟据上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

下面,还是以汉字"严"为例,演示如何实现UTF-8编码。

已知"严"的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此"严"的UTF-8编码需要三个字节,即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,从"严"的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,"严"的UTF-8编码是"11100100 10111000 10100101",转换成十六进制就是E4B8A5。

6. Unicode与UTF-8之间的转换

通过上一节的例子,可以看到"严"的Unicode码是4E25,UTF-8编码是E4B8A5,两者是不一样的。它们之间的转换可以通过程序实现。

在Windows平台下,有一个最简单的转化方法,就是使用内置的记事本小程序Notepad.exe。打开文件后,点击"文件"菜单中的"另存为"命令,会跳出一个对话框,在最底部有一个"编码"的下拉条。

里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。

1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。

2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。

3)Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。

4)UTF-8编码,也就是上一节谈到的编码方法。

选择完"编码方式"后,点击"保存"按钮,文件的编码方式就立刻转换好了。

7. Little endian和Big endian

上一节已经提到,Unicode码可以采用UCS-2格式直接存储。以汉字"严"为例,Unicode码是4E25,需要用两个字节存储,一个字节是4E,另一个字节是25。存储的时候,4E在前,25在后,就是Big endian方式;25在前,4E在后,就是Little endian方式。

这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。

因此,第一个字节在前,就是"大头方式"(Big endian),第二个字节在前就是"小头方式"(Little endian)。

那么很自然的,就会出现一个问题:计算机怎么知道某一个文件到底采用哪一种方式编码?

Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。

如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。

8. 实例

下面,举一个实例。

打开"记事本"程序Notepad.exe,新建一个文本文件,内容就是一个"严"字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。

然后,用文本编辑软件UltraEdit中的"十六进制功能",观察该文件的内部编码方式。

1)ANSI:文件的编码就是两个字节"D1 CF",这正是"严"的GB2312编码,这也暗示GB2312是采用大头方式存储的。

2)Unicode:编码是四个字节"FF FE 25 4E",其中"FF FE"表明是小头方式存储,真正的编码是4E25。

3)Unicode big endian:编码是四个字节"FE FF 4E 25",其中"FE FF"表明是大头方式存储。

4)UTF-8:编码是六个字节"EF BB BF E4 B8 A5",前三个字节"EF BB BF"表示这是UTF-8编码,后三个"E4B8A5"就是"严"的具体编码,它的存储顺序与编码顺序是一致的。

9. 延伸阅读

* The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets(关于字符集的最基本知识)

* 谈谈Unicode编码
* RFC3629:UTF-8, a transformation format of ISO 10646(如果实现UTF-8的规定) 查看全部
Unicode和UTF-8之间的关系

1. ASCII码

我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。

ASCII码一共规定了128个字符的编码,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

2、非ASCII编码

英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。

但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段。

至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。

中文编码的问题需要专文讨论,这篇笔记不涉及。这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的Unicode和UTF-8是毫无关系的。

3.Unicode

正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字"严"。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表。

4. Unicode的问题

需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

比如,汉字"严"的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别Unicode和ASCII?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果Unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

它们造成的结果是:1)出现了Unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示Unicode。2)Unicode在很长一段时间内无法推广,直到互联网的出现。

5.UTF-8

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16(字符用两个字节或四个字节表示)和UTF-32(字符用四个字节表示),不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

下表总结了编码规则,字母x表示可用编码的位。

Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

跟据上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

下面,还是以汉字"严"为例,演示如何实现UTF-8编码。

已知"严"的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此"严"的UTF-8编码需要三个字节,即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,从"严"的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,"严"的UTF-8编码是"11100100 10111000 10100101",转换成十六进制就是E4B8A5。

6. Unicode与UTF-8之间的转换

通过上一节的例子,可以看到"严"的Unicode码是4E25,UTF-8编码是E4B8A5,两者是不一样的。它们之间的转换可以通过程序实现。

在Windows平台下,有一个最简单的转化方法,就是使用内置的记事本小程序Notepad.exe。打开文件后,点击"文件"菜单中的"另存为"命令,会跳出一个对话框,在最底部有一个"编码"的下拉条。

里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。

1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。

2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。

3)Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。

4)UTF-8编码,也就是上一节谈到的编码方法。

选择完"编码方式"后,点击"保存"按钮,文件的编码方式就立刻转换好了。

7. Little endian和Big endian

上一节已经提到,Unicode码可以采用UCS-2格式直接存储。以汉字"严"为例,Unicode码是4E25,需要用两个字节存储,一个字节是4E,另一个字节是25。存储的时候,4E在前,25在后,就是Big endian方式;25在前,4E在后,就是Little endian方式。

这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。

因此,第一个字节在前,就是"大头方式"(Big endian),第二个字节在前就是"小头方式"(Little endian)。

那么很自然的,就会出现一个问题:计算机怎么知道某一个文件到底采用哪一种方式编码?

Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。

如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。

8. 实例

下面,举一个实例。

打开"记事本"程序Notepad.exe,新建一个文本文件,内容就是一个"严"字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。

然后,用文本编辑软件UltraEdit中的"十六进制功能",观察该文件的内部编码方式。

1)ANSI:文件的编码就是两个字节"D1 CF",这正是"严"的GB2312编码,这也暗示GB2312是采用大头方式存储的。

2)Unicode:编码是四个字节"FF FE 25 4E",其中"FF FE"表明是小头方式存储,真正的编码是4E25。

3)Unicode big endian:编码是四个字节"FE FF 4E 25",其中"FE FF"表明是大头方式存储。

4)UTF-8:编码是六个字节"EF BB BF E4 B8 A5",前三个字节"EF BB BF"表示这是UTF-8编码,后三个"E4B8A5"就是"严"的具体编码,它的存储顺序与编码顺序是一致的。

9. 延伸阅读

* The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets(关于字符集的最基本知识)

* 谈谈Unicode编码
  1. * RFC3629:UTF-8, a transformation format of ISO 10646(如果实现UTF-8的规定)

添加小窗口添加完成以后要怎么关闭呢?

X-admin相关资料收集专员 回复了问题 • 4 人关注 • 4 个回复 • 1128 次浏览 • 2018-06-23 16:15 • 来自相关话题

2.0版本中 内置iframe选项卡功能

X-admin相关资料收集专员 回复了问题 • 2 人关注 • 1 个回复 • 464 次浏览 • 2018-06-09 15:31 • 来自相关话题

浅谈CSRF攻击方式

PHP技术交流资料收集专员 发表了文章 • 0 个评论 • 278 次浏览 • 2018-05-22 15:09 • 来自相关话题

一.CSRF是什么?

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

二.CSRF可以做什么?

你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

三.CSRF漏洞现状

CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。

四.CSRF的原理

下图简单阐述了CSRF攻击的思想:

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

1.登录受信任网站A,并在本地生成Cookie。

2.在不登出A的情况下,访问危险网站B。

看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:

1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。

2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了......)

3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

 

上面大概地讲了一下CSRF攻击的思想,下面我将用几个例子详细说说具体的CSRF攻击,这里我以一个银行转账的操作作为例子(仅仅是例子,真实的银行网站没这么傻:>)

示例1:

银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer ... D1000

危险网站B,它里面有一段HTML的代码如下:<img src=http://www.mybank.com/Transfer ... gt%3B首先,你登录了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块......

为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B的之前,你已经登录了银行网站A,而B中的<img>以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资源“http://www.mybank.com/Transfer ... D1000”,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作......

示例2:

为了杜绝上面的问题,银行决定改用POST请求完成转账操作。

银行网站A的WEB表单如下:<form action="Transfer.php" method="POST">
<p>ToBankId: <input type="text" name="toBankId" /></p>
<p>Money: <input type="text" name="money" /></p>
<p><input type="submit" value="Transfer" /></p>
</form>
后台处理页面Transfer.php如下:[复制代码]<?php
session_start();
if (isset($_REQUEST['toBankId'] && isset($_REQUEST['money']))
{
buy_stocks($_REQUEST['toBankId'], $_REQUEST['money']);
}
?>[复制代码]危险网站B,仍然只是包含那句HTML代码:<img src=http://www.mybank.com/Transfer ... gt%3B和示例1中的操作一样,你首先登录了银行网站A,然后访问危险网站B,结果.....和示例1一样,你再次没了1000块~T_T,这次事故的原因是:银行后台使用了$_REQUEST去获取请求的数据,而$_REQUEST既可以获取GET请求的数据,也可以获取POST请求的数据,这就造成了在后台处理程序无法区分这到底是GET请求的数据还是POST请求的数据。在PHP中,可以使用$_GET和$_POST分别获取GET请求和POST请求的数据。在JAVA中,用于获取请求数据request一样存在不能区分GET请求数据和POST数据的问题。

示例3:

经过前面2个惨痛的教训,银行决定把获取请求数据的方法也改了,改用$_POST,只获取POST请求的数据,后台处理页面Transfer.php代码如下:[复制代码]<?php
session_start();
if (isset($_POST['toBankId'] && isset($_POST['money']))
{
buy_stocks($_POST['toBankId'], $_POST['money']);
}
?>
[复制代码]然而,危险网站B与时俱进,它改了一下代码:[复制代码]<html>
<head>
<script type="text/javascript">
function steal()
{
     iframe = document.frames["steal"];
   iframe.document.Submit("transfer");
}
</script>
</head>

<body onload="steal()">
<iframe name="steal" display="none">
<form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">
<input type="hidden" name="toBankId" value="11">
<input type="hidden" name="money" value="1000">
</form>
</iframe>
</body>
</html>
[复制代码]如果用户仍是继续上面的操作,很不幸,结果将会是再次不见1000块......因为这里危险网站B暗地里发送了POST请求到银行!

总结一下上面3个例子,CSRF主要的攻击模式基本上是以上的3种,其中以第1,2种最为严重,因为触发条件很简单,一个<img>就可以了,而第3种比较麻烦,需要使用JavaScript,所以使用的机会会比前面的少很多,但无论是哪种情况,只要触发了CSRF攻击,后果都有可能很严重。

理解上面的3种攻击模式,其实可以看出,CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的!

五.CSRF的防御

我总结了一下看到的资料,CSRF的防御可以从服务端和客户端两方面着手,防御效果是从服务端着手效果比较好,现在一般的CSRF防御也都在服务端进行。

1.服务端进行CSRF防御

服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。

(1).Cookie Hashing(所有表单都包含同一个伪随机值):

这可能是最简单的解决方案了,因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了:><?php
//构造加密的Cookie信息
$value = “DefenseSCRF”;
setcookie(”cookie”, $value, time()+3600);
?>
在表单里增加Hash值,以认证这确实是用户发送的请求。[复制代码]<?php
$hash = md5($_COOKIE['cookie']);
?>
<form method=”POST” action=”transfer.php”>
<input type=”text” name=”toBankId”>
<input type=”text” name=”money”>
<input type=”hidden” name=”hash” value=”<?=$hash;?>”>
<input type=”submit” name=”submit” value=”Submit”>
</form>
[复制代码]然后在服务器端进行Hash值验证[复制代码]
      <?php
if(isset($_POST['check'])) {
   $hash = md5($_COOKIE['cookie']);
   if($_POST['check'] == $hash) {
   doJob();
} else {
//...
   }
} else {
//...
}
?>
[复制代码]这个方法个人觉得已经可以杜绝99%的CSRF攻击了,那还有1%呢....由于用户的Cookie很容易由于网站的XSS漏洞而被盗取,这就另外的1%。一般的攻击者看到有需要算Hash值,基本都会放弃了,某些除外,所以如果需要100%的杜绝,这个不是最好的方法。
(2).验证码

这个方案的思路是:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,厄....这个方案可以完全解决CSRF,但个人觉得在易用性方面似乎不是太好,还有听闻是验证码图片的使用涉及了一个被称为MHTML的Bug,可能在某些版本的微软IE中受影响。

(3).One-Time Tokens(不同的表单包含一个不同的伪随机值)

在实现One-Time Tokens时,需要注意一点:就是“并行会话的兼容”。如果用户在一个站点上同时打开了两个不同的表单,CSRF保护措施不应该影响到他对任何表单的提交。考虑一下如果每次表单被装入时站点生成一个伪随机值来覆盖以前的伪随机值将会发生什么情况:用户只能成功地提交他最后打开的表单,因为所有其他的表单都含有非法的伪随机值。必须小心操作以确保CSRF保护措施不会影响选项卡式的浏览或者利用多个浏览器窗口浏览一个站点。

以下我的实现:

1).先是令牌生成函数(gen_token()):[复制代码]
     <?php
     function gen_token() {
//这里我是贪方便,实际上单使用Rand()得出的随机数作为令牌,也是不安全的。
//这个可以参考我写的Findbugs笔记中的《Random object created and used only once》
          $token = md5(uniqid(rand(), true));
          return $token;
     }
[复制代码]2).然后是Session令牌生成函数(gen_stoken()):[复制代码]
     <?php
       function gen_stoken() {
$pToken = "";
if($_SESSION[STOKEN_NAME]  == $pToken){
//没有值,赋新值
$_SESSION[STOKEN_NAME] = gen_token();
}    
else{
//继续使用旧的值
}
       }
     ?>
[复制代码]3).WEB表单生成隐藏输入域的函数:[复制代码]
     <?php
     function gen_input() {
            gen_stoken();
          echo “<input type=\”hidden\” name=\”" . FTOKEN_NAME . “\”
                 value=\”" . $_SESSION[STOKEN_NAME] . “\”> “;
       }
     ?>
[复制代码]4).WEB表单结构:[复制代码]
     <?php
          session_start();
          include(”functions.php”);
     ?>
     <form method=”POST” action=”transfer.php”>
          <input type=”text” name=”toBankId”>
          <input type=”text” name=”money”>
          <? gen_input(); ?>
          <input type=”submit” name=”submit” value=”Submit”>
     </FORM>
[复制代码]5).服务端核对令牌:

这个很简单,这里就不再啰嗦了。

上面这个其实不完全符合“并行会话的兼容”的规则,大家可以在此基础上修改。

 

其实还有很多想写,无奈精力有限,暂且打住,日后补充,如果错漏,请指出:>

PS:今天下午写这篇文档的时候FF崩溃了一次,写了一半文章的全没了,郁闷好久T_T.......

转载请说明出处,谢谢[hyddd(http://www.cnblogs.com/hyddd/)] 查看全部
一.CSRF是什么?

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

二.CSRF可以做什么?

你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

三.CSRF漏洞现状

CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。

四.CSRF的原理

下图简单阐述了CSRF攻击的思想:

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

1.登录受信任网站A,并在本地生成Cookie。

2.在不登出A的情况下,访问危险网站B。

看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:

1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。

2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了......)

3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

 

上面大概地讲了一下CSRF攻击的思想,下面我将用几个例子详细说说具体的CSRF攻击,这里我以一个银行转账的操作作为例子(仅仅是例子,真实的银行网站没这么傻:>)

示例1:

银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer ... D1000

危险网站B,它里面有一段HTML的代码如下:<img src=http://www.mybank.com/Transfer ... gt%3B首先,你登录了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块......

为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B的之前,你已经登录了银行网站A,而B中的<img>以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资源“http://www.mybank.com/Transfer ... D1000”,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作......

示例2:

为了杜绝上面的问题,银行决定改用POST请求完成转账操作。

银行网站A的WEB表单如下:<form action="Transfer.php" method="POST">
<p>ToBankId: <input type="text" name="toBankId" /></p>
<p>Money: <input type="text" name="money" /></p>
<p><input type="submit" value="Transfer" /></p>
</form>
后台处理页面Transfer.php如下:[复制代码]
<?php
session_start();
if (isset($_REQUEST['toBankId'] && isset($_REQUEST['money']))
{
buy_stocks($_REQUEST['toBankId'], $_REQUEST['money']);
}
?>
[复制代码]危险网站B,仍然只是包含那句HTML代码:<img src=http://www.mybank.com/Transfer ... gt%3B和示例1中的操作一样,你首先登录了银行网站A,然后访问危险网站B,结果.....和示例1一样,你再次没了1000块~T_T,这次事故的原因是:银行后台使用了$_REQUEST去获取请求的数据,而$_REQUEST既可以获取GET请求的数据,也可以获取POST请求的数据,这就造成了在后台处理程序无法区分这到底是GET请求的数据还是POST请求的数据。在PHP中,可以使用$_GET和$_POST分别获取GET请求和POST请求的数据。在JAVA中,用于获取请求数据request一样存在不能区分GET请求数据和POST数据的问题。

示例3:

经过前面2个惨痛的教训,银行决定把获取请求数据的方法也改了,改用$_POST,只获取POST请求的数据,后台处理页面Transfer.php代码如下:[复制代码]
<?php
session_start();
if (isset($_POST['toBankId'] && isset($_POST['money']))
{
buy_stocks($_POST['toBankId'], $_POST['money']);
}
?>

[复制代码]然而,危险网站B与时俱进,它改了一下代码:[复制代码]
<html>
<head>
<script type="text/javascript">
function steal()
{
     iframe = document.frames["steal"];
   iframe.document.Submit("transfer");
}
</script>
</head>

<body onload="steal()">
<iframe name="steal" display="none">
<form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">
<input type="hidden" name="toBankId" value="11">
<input type="hidden" name="money" value="1000">
</form>
</iframe>
</body>
</html>

[复制代码]如果用户仍是继续上面的操作,很不幸,结果将会是再次不见1000块......因为这里危险网站B暗地里发送了POST请求到银行!

总结一下上面3个例子,CSRF主要的攻击模式基本上是以上的3种,其中以第1,2种最为严重,因为触发条件很简单,一个<img>就可以了,而第3种比较麻烦,需要使用JavaScript,所以使用的机会会比前面的少很多,但无论是哪种情况,只要触发了CSRF攻击,后果都有可能很严重。

理解上面的3种攻击模式,其实可以看出,CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的!

五.CSRF的防御

我总结了一下看到的资料,CSRF的防御可以从服务端和客户端两方面着手,防御效果是从服务端着手效果比较好,现在一般的CSRF防御也都在服务端进行。

1.服务端进行CSRF防御

服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。

(1).Cookie Hashing(所有表单都包含同一个伪随机值):

这可能是最简单的解决方案了,因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了:><?php
//构造加密的Cookie信息
$value = “DefenseSCRF”;
setcookie(”cookie”, $value, time()+3600);
?>
在表单里增加Hash值,以认证这确实是用户发送的请求。[复制代码]
<?php
$hash = md5($_COOKIE['cookie']);
?>
<form method=”POST” action=”transfer.php”>
<input type=”text” name=”toBankId”>
<input type=”text” name=”money”>
<input type=”hidden” name=”hash” value=”<?=$hash;?>”>
<input type=”submit” name=”submit” value=”Submit”>
</form>

[复制代码]然后在服务器端进行Hash值验证[复制代码]
      
<?php
if(isset($_POST['check'])) {
   $hash = md5($_COOKIE['cookie']);
   if($_POST['check'] == $hash) {
   doJob();
} else {
//...
   }
} else {
//...
}
?>

[复制代码]这个方法个人觉得已经可以杜绝99%的CSRF攻击了,那还有1%呢....由于用户的Cookie很容易由于网站的XSS漏洞而被盗取,这就另外的1%。一般的攻击者看到有需要算Hash值,基本都会放弃了,某些除外,所以如果需要100%的杜绝,这个不是最好的方法。
(2).验证码

这个方案的思路是:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,厄....这个方案可以完全解决CSRF,但个人觉得在易用性方面似乎不是太好,还有听闻是验证码图片的使用涉及了一个被称为MHTML的Bug,可能在某些版本的微软IE中受影响。

(3).One-Time Tokens(不同的表单包含一个不同的伪随机值)

在实现One-Time Tokens时,需要注意一点:就是“并行会话的兼容”。如果用户在一个站点上同时打开了两个不同的表单,CSRF保护措施不应该影响到他对任何表单的提交。考虑一下如果每次表单被装入时站点生成一个伪随机值来覆盖以前的伪随机值将会发生什么情况:用户只能成功地提交他最后打开的表单,因为所有其他的表单都含有非法的伪随机值。必须小心操作以确保CSRF保护措施不会影响选项卡式的浏览或者利用多个浏览器窗口浏览一个站点。

以下我的实现:

1).先是令牌生成函数(gen_token()):[复制代码]
     <?php
     function gen_token() {
//这里我是贪方便,实际上单使用Rand()得出的随机数作为令牌,也是不安全的。
//这个可以参考我写的Findbugs笔记中的《Random object created and used only once》
          $token = md5(uniqid(rand(), true));
          return $token;
     }
[复制代码]2).然后是Session令牌生成函数(gen_stoken()):[复制代码]
     <?php
       function gen_stoken() {
$pToken = "";
if($_SESSION[STOKEN_NAME]  == $pToken){
//没有值,赋新值
$_SESSION[STOKEN_NAME] = gen_token();
}    
else{
//继续使用旧的值
}
       }
     ?>
[复制代码]3).WEB表单生成隐藏输入域的函数:[复制代码]
     <?php
     function gen_input() {
            gen_stoken();
          echo “<input type=\”hidden\” name=\”" . FTOKEN_NAME . “\”
                 value=\”" . $_SESSION[STOKEN_NAME] . “\”> “;
       }
     ?>
[复制代码]4).WEB表单结构:[复制代码]
     <?php
          session_start();
          include(”functions.php”);
     ?>
     <form method=”POST” action=”transfer.php”>
          <input type=”text” name=”toBankId”>
          <input type=”text” name=”money”>
          <? gen_input(); ?>
          <input type=”submit” name=”submit” value=”Submit”>
     </FORM>
[复制代码]5).服务端核对令牌:

这个很简单,这里就不再啰嗦了。

上面这个其实不完全符合“并行会话的兼容”的规则,大家可以在此基础上修改。

 

其实还有很多想写,无奈精力有限,暂且打住,日后补充,如果错漏,请指出:>

PS:今天下午写这篇文档的时候FF崩溃了一次,写了一半文章的全没了,郁闷好久T_T.......

转载请说明出处,谢谢[hyddd(http://www.cnblogs.com/hyddd/)]

x_admin_show打开页面(添加弹窗)执行成功后如何刷新父窗口?

X-admin相关资料收集专员 回复了问题 • 2 人关注 • 3 个回复 • 835 次浏览 • 2018-05-22 15:01 • 来自相关话题

X-admin1.0中左侧的菜单栏鼠标划过的css样式怎样调整

X-admin相关资料收集专员 回复了问题 • 2 人关注 • 1 个回复 • 437 次浏览 • 2018-05-22 15:00 • 来自相关话题

又长姿势了

学习日志K 回复了问题 • 4 人关注 • 3 个回复 • 494 次浏览 • 2018-05-10 14:09 • 来自相关话题