为什么很多人深入理解并行编程 pdf不了 Max Howell 通不过白板编程面试

面试前做好这几点,求职成功率高几倍【加薪吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:120贴子:
面试前做好这几点,求职成功率高几倍收藏
【文章摘要】一生要面试多少回?才能不流泪;一生要流多少泪,才能不心碎。关于面试,我从这么几个主题去说说:求职类型、面试准备、面试过程、反馈,希望能够对正在工作的,正在找工作或想找工作的同学有点帮助。求职类型我把求职类型分为主动求职和被动求职。初入职场找工作、钱没给够心委屈了想换工作,这都算主动求职。朋友推荐、猎头挖人,算是被动求职。我推荐大家主动求职,主动总是好事,我们可以有规划按步骤的找到新的工作空间,被动求职则偶然性更大一些。猎头找你了,千万别觉得自己身价倍增,很多因素需要自己考虑,职业方向、环境、空间、薪资等等,猎头是不会替你考虑这些的,他们唯一的目的就是让你入职目标公司并获取那份佣金。当然,如有确实有好机会你也别愣躲,我有个朋友,在几个公司之间跳来跳去,但每次都能恰如其分的躲过事业发展和积累财富的机会,就像上帝在天空中拿着一把机会往他身上砸,但每次都让他以无比凌厉的步伐躲过,看的上帝扼腕叹息。有一次吃饭我问他,你是肿么做到的?他点根烟说,「这是命。」其实不是命,判断和选择而已。该主动的时候,要主动。面试准备既然是主动求职,那一定要做好充分的准备。如果你想做一次慎重的工作变动,那么花3-6个月的时间去准备是值得的。当然这3-6个月不是让你辞职在家闭门思过,利用业余时间对自己的目标知识体系查漏补缺就可以了。很多人找工作采用广撒网多捕鱼的方式,满世界撒简历,期望搂草打兔子,碰见一个算一个。这种方式靠的是运气,找到一份心仪的工作,最终还是得靠实力和准备。准备内容大概有这些:1、明确自己现有的知识领域和目标职位的匹配程度。如果你是个 PHP 程序员,现在想换个写 Java 的工作,这种匹配程度还是可以的,在技能层面做准备就可以了。如果你现在是个程序猿,想去从事销售这种似乎更有前途但也可能死的更惨的职业,匹配程度就差多了,需要花更多的时间去准备,3-6个月可能还说少了。2、技能准备搞清楚职业诉求,就可以对症下药了。如果你是技术人员,先把基础的东西收拾收拾,IT 技术虽然浩如烟海一日千里,但基础的东西几十年没有太大的变化,操作系统原理、进程和线程、并行和并发、I/O、文件系统、TCP/IP、数据结构、面向对象、函数式编程等等,看看哪儿薄弱哪些急需,按需进补别吃错药。关于算法,如果你不打算做算法工程师,了解一下排序查找二叉树就差不多了,想想吧,连 HomeBrew 的作者 Max Howell 都不能徒手反转二叉搜索树呢。基础夯实之后,就要针对你目标职位的领域内容做些知识储备了。想做大数据的,最好知道 GFS、Hadoop 等技术;想去做移动开发的,iOS 和 Android不能比翼齐飞,至少要选择其中一个;想去做搜索和推荐的,那算法就成为必备技能了,等等,诸如此类,余不一 一。3、目标公司主动求职最好有目标公司。根据你的特长、诉求和发展规划,选择自己喜爱的公司,别太多,你要是把世界500强都列进去,那下半生估计都将踯躅于面试和赶往面试的途中,此恨绵绵无绝期。也别太少,非 Google 和 Apple 不进的同样具备找抽的潜质。选择了心仪的公司不是让你把这些公司的 Logo 挂墙上供奉的,去了解这些公司的业务范围、招聘需求和招聘的时间区间。了解业务是为了防止面试时人家问你「Why Apple?」,你回复「Sorry,I have no idea about this fruit」。了解招聘需求是为了让你的技能准备更有针对性。了解招聘区间当然是为了让你适时投简历啦,这还用问吗?好了,经过了长时间的自我提升和完善,你的能力和精力已经达到巅峰状态,你拔剑四顾心茫然……这时突然有个心仪的公司高薪把你挖走了……咳,这位同学醒醒,擦干嘴角的口水,这种戏剧性的变化要么发生在梦里要么发生在别人身上。咱该准备简历了……简历我听说过最牛的一份简历是这样的,作者是 Python 的作者。拽吧?你没发明 Python,就不要这么拽了,出门右拐去「小道消息」,今天写了一篇「简历做好这一点,求职成功几率高几倍」,写得简洁有力,要读。面试过程面试一般分为笔试(鄙视)和面试(面基)。笔试没什么可说的,对错都在笔墨之间。面试的时候呢,会则答,多问多答,少问少答,在回答过程尽可能展示自己的特色和特长。比较忌讳的是问到一个你熟悉的领域就开始滔滔不绝撒开嘴叉子讲,面试官都睡了你还不知道。当然,如果面试者愿意和你一同分析问题解决问题就不一样了,你可以尽情展现自己分析问题的能力和技巧,直到对方喊停为止。最忌讳的是问到你不会的问题或不熟悉的领域,你去猜答案,被看穿的话非常减分,直接说不会就好了,不丢人,爱因斯坦还有不会的问题呢。坦诚一点,加分!有时候对方可能只是想知道你是不是会说不知道的人。这句话有点绕,罪过。除了技术类的,有个问题几乎是必问题,那就是「说说你做过最得意的项目」,如果你听到这个问题又看过 MacTalk 的文章,是不是就开心啦?把准备好的内容进行精彩呈现,如能辅以白板配图,或直接用自己的 Mac 进行现场演示和讲解,就更好了。这种问题对方一般都会刨根问底,如果你准备充分,那就是一场精彩的对攻战,效果非常好。还有一些常规性的问题,也要做好准备,比如:「你为什么离开」「你为什么来这」「你为什么总跳槽」「你为什么这么长时间不跳槽」「你有什么优点」「你有什么弱点」「你的长期规划」「你的短期规划」诸如此类,正常回复就好,做到不卑不亢,简单明了。最后一个问题,有经验的面试官一般会留给你,就是请你提问。如果你的问题是「我可以走了吗」,那可能就真的不用再来了。把握好这个机会,提出有水准的问题,最好与面试内容相关,加分。终于,笔试面试机试 HR 试都结束了,擦干额头的汗水,回家等通知吧。反馈永远不要高估一个公司招聘流程的严谨程度,如果你觉得自己面试结果还不错,十天内没收到任何消息,可以主动询问一下,别老觉着自己是诸葛孔明,就算你是,也得有刘备才行。如果一个职位选中了两个候选人,经历能力都相当,而你主动询问面试结果和进度,你说招聘的蜀黍会选谁呢?无论是在工作中,还是面试中,要形成反馈闭环。了解更多求职面试经验,关注【加薪吧】微信号:jiaxinbacom
登录百度帐号推荐应用面试前做好这几点,求职成功率高几倍 - 滚动_【北京联盟】
面试前做好这几点,求职成功率高几倍
/ 作者:小易
北京联盟摘要:
面试前做好这几点,求职成功率高几倍,上一篇:
下一篇: 。一生要面试多少回?才能不流泪;一生要流多少泪,才能不心碎。 这篇算是冯老师的番外篇吧。关于面试,我从这么几个主题去说说:求职类型、面试准备、面试过程、反馈,希望能够对正在工作的,正在找工作或想找工作的同学有点帮助。 求职类型 我把求职类型分为
一生要面试多少回?才能不流泪;一生要流多少泪,才能不心碎。这篇算是冯老师的番外篇吧。关于面试,我从这么几个主题去说说:求职类型、面试准备、面试过程、反馈,希望能够对正在工作的,正在找工作或想找工作的同学有点帮助。求职类型我把求职类型分为主动求职和被动求职。初入职场找工作、钱没给够心委屈了想换工作,这都算主动求职。朋友、猎头挖人,算是被动求职。我推荐大家主动求职,主动总是好事,我们可以有规划按步骤的找到新的工作空间,被动求职则偶然性更大一些。猎头找你了,千万别觉得自己身价倍增,很多因素需要自己考虑,职业方向、环境、空间、薪资等等,猎头是不会替你考虑这些的,他们唯一的目的就是让你入职目标公司并获取那份佣金。当然,如有确实有好机会你也别愣躲,我有个朋友,在几个公司之间跳来跳去,但每次都能恰如其分的躲过事业发展和积累财富的机会,就像上帝在天空中拿着一把机会往他身上砸,但每次都让他以无比凌厉的步伐躲过,看的上帝扼腕叹息。有一次吃饭我问他,你是肿么做到的?他点根烟说,「这是命。」其实不是命,判断和选择而已。该主动的时候,要主动。面试准备既然是主动求职,那一定要做好充分的准备。如果你想做一次慎重的工作变动,那么花3-6个月的时间去准备是值得的。当然这3-6个月不是让你辞职在家闭门思过,利用业余时间对自己的目标知识体系查漏补缺就可以了。很多人找工作采用广撒网多捕鱼的方式,满世界撒简历,期望搂草打兔子,碰见一个算一个。这种方式靠的是运气,找到一份心仪的工作,最终还是得靠实力和准备。准备内容大概有这些:1、明确自己现有的知识领域和目标职位的匹配程度。如果你是个 PHP 程序员,现在想换个写 Java 的工作,这种匹配程度还是可以的,在技能层面做准备就可以了。如果你现在是个程序猿,想去从事销售这种似乎更有前途但也可能死的更惨的职业,匹配程度就差多了,需要花更多的时间去准备,3-6个月可能还说少了。2、技能准备搞清楚职业诉求,就可以对症下药了。如果你是技术人员,先把基础的东西收拾收拾,IT 技术虽然浩如烟海一日千里,但基础的东西几十年没有太大的变化,操作系统原理、进程和线程、并行和并发、I/O、文件系统、TCP/IP、数据结构、面向对象、函数式编程等等,看看哪儿薄弱哪些急需,按需进补别吃错药。关于算法,如果你不打算做算法工程师,了解一下排序查找二叉树就差不多了,想想吧,连 HomeBrew 的作者 Max Howell 都不能徒手反转二叉搜索树呢。基础夯实之后,就要针对你目标职位的领域内容做些知识储备了。想做大数据的,最好知道 GFS、Hadoop 等技术;想去做开发的,iOS 和 Android不能比翼齐飞,至少要选择其中一个;想去做搜索和推荐的,那算法就成为必备技能了,等等,诸如此类,余不一一。关于技能面试的准备,有一本圣经级别的教材,叫做《Cracking the Coding Interview》,150道编程面试题几乎涵盖了各个领域的编程知识,你觉得把这些题都做一遍得多长时间?按照正常人一天做五道,你得用足一个月!看到这儿是不又崩溃了,「哪有那么多时间啊魂淡」。别急,我很早就说过,世界上总是存在一些看起来不是那么正常的人,他们会做一些凡人不能理解的东西,面试界也是一样,有位面霸级别的,不仅把这些题做了,还写了一篇《Cracking the coding interview–问题与解答》的博客,逐一翻译和讲解,最后还把代码放到了 github 上,看到这里别以为伸出湿漉漉的手指点赞就算了,记得以后做些傻事回馈!博文地址:/posts/ctci-solutions-contents.html如果你是非技术人员……那你为啥要看这篇文章呢?3、目标公司主动求职最好有目标公司。根据你的特长、诉求和发展规划,选择自己喜爱的公司,别太多,你要是把世界500强都列进去,那下半生估计都将踯躅于面试和赶往面试的途中,此恨绵绵无绝期。也别太少,非 Google 和 Apple 不进的同样具备找抽的潜质。选择了心仪的公司不是让你把这些公司的 Logo 挂墙上供奉的,去了解这些公司的业务范围、招聘需求和招聘的时间区间。了解业务是为了防止面试时人家问你「Why Apple?」,你回复「Sorry,I have no idea about this fruit」。了解招聘需求是为了让你的技能准备更有针对性。了解招聘区间当然是为了让你适时投简历啦,这还用问吗?好了,经过了长时间的自我提升和完善,你的能力和精力已经达到巅峰状态,你拔剑四顾心茫然……这时突然有个心仪的公司高薪把你挖走了……咳,这位同学醒醒,擦干嘴角的口水,这种戏剧性的变化要么发生在梦里要么发生在别人身上。咱该准备简历了……简历我听说过最牛的一份简历是这样的,作者是 Python 的作者。I wrote python.拽吧?你没发明 Python,就不要这么拽了,出门右拐去「小道消息」,冯老师今天写了一篇「简历做好这一点,求职成功几率高几倍」,写得比我简洁有力,要读。面试过程面试一般分为笔试(鄙视)和面试(面基)。笔试没什么可说的,对错都在笔墨之间。面试的时候呢,会则答,多问多答,少问少答,在回答过程尽可能展示自己的特色和特长。比较忌讳的是问到一个你熟悉的领域就开始滔滔不绝撒开嘴叉子讲,面试官都睡了你还不知道。当然,如果面试者愿意和你一同分析问题解决问题就不一样了,你可以尽情展现自己分析问题的能力和技巧,直到对方喊停为止。最忌讳的是问到你不会的问题或不熟悉的领域,你去猜答案,被看穿的话非常减分,直接说不会就好了,不丢人,爱因斯坦还有不会的问题呢。坦诚一点,加分!有时候对方可能只是想知道你是不是会说不知道的人。这句话有点绕,罪过。除了技术类的,有个问题几乎是必问题,那就是「说说你做过最得意的项目」,如果你听到这个问题又看过 MacTalk 的文章,是不是就开心啦?把准备好的内容进行精彩呈现,如能辅以白板配图,或直接用自己的 Mac 进行现场演示和讲解,就更好了。这种问题对方一般都会刨根问底,如果你准备充分,那就是一场精彩的对攻战,效果非常好。还有一些常规性的问题,也要做好准备,比如:「你为什么离开」「你为什么来这」「你为什么总跳槽」「你为什么这么长时间不跳槽」「你有什么优点」「你有什么弱点」「你的长期规划」「你的短期规划」诸如此类,正常回复就好,做到不卑不亢,简单明了。最后一个问题,有经验的面试官一般会留给你,就是请你提问。如果你的问题是「我可以走了吗」,那可能就真的不用再来了。把握好这个机会,提出有水准的问题,最好与面试内容相关,加分。终于,笔试面试机试 HR 试都结束了,擦干额头的汗水,回家等通知吧。反馈永远不要高估一个公司招聘流程的严谨程度,如果你觉得自己面试结果还不错,十天内没收到任何消息,可以主动询问一下,别老觉着自己是诸葛孔明,就算你是,也得有刘备才行。如果一个职位选中了两个候选人,经历能力都相当,而你主动询问面试结果和进度,你说招聘的蜀黍会选谁呢?无论是在工作中,还是面试中,要形成反馈闭环,如果你不知道什么是闭环原则,建议阅读「二十年三原则」。这算一篇旧文,之前写得有点罗嗦,修改后我自己舒服多了。能不能做到「面试前做好这几点,求职成功率高几倍」呢,仁者见仁吧。(顺便说下,我部招 PHP、前端和 iOS 程序员 · )
面试前做好这几点,求职成功率高几倍
免责声明:本站文章除注明来源“北京联盟”外的文章均来自网络和网友投稿,著作权归原作者所有。北京联盟不承担任何连带责任!一生要面试多少回?才能不流泪;一生要流多少泪,才能不心碎。
这篇算是的番外篇吧。关于面试,我从这么几个主题去说说:求职类型、面试准备、面试过程、反馈,希望能够对正在工作的,正在找工作或想找工作的同学有点帮助。
我把求职类型分为主动求职和被动求职。初入职场找工作、钱没给够心委屈了想换工作,这都算主动求职。朋友推荐、猎头挖人,算是被动求职。
我推荐大家主动求职,主动总是好事,我们可以有规划按步骤的找到新的工作空间,被动求职则偶然性更大一些。猎头找你了,千万别觉得自己身价倍增,很多因素需要自己考虑,职业方向、环境、空间、薪资等等,猎头是不会替你考虑这些的,他们唯一的目的就是让你入职目标公司并获取那份佣金。当然,如有确实有好机会你也别愣躲,我有个朋友,在几个公司之间跳来跳去,但每次都能恰如其分的躲过事业发展和积累财富的机会,就像上帝在天空中拿着一把机会往他身上砸,但每次都让他以无比凌厉的步伐躲过,看的上帝扼腕叹息。有一次吃饭我问他,你是肿么做到的?他点根烟说,「这是命。」
其实不是命,判断和选择而已。该主动的时候,要主动。
既然是主动求职,那一定要做好充分的准备。如果你想做一次慎重的工作变动,那么花3-6个月的时间去准备是值得的。当然这3-6个月不是让你辞职在家闭门思过,利用业余时间对自己的目标知识体系查漏补缺就可以了。
很多人找工作采用广撒网多捕鱼的方式,满世界撒简历,期望搂草打兔子,碰见一个算一个。这种方式靠的是运气,找到一份心仪的工作,最终还是得靠实力和准备。准备内容大概有这些:
1、明确自己现有的知识领域和目标职位的匹配程度。
如果你是个 PHP 程序员,现在想换个写 Java 的工作,这种匹配程度还是可以的,在技能层面做准备就可以了。如果你现在是个程序猿,想去从事销售这种似乎更有前途但也可能死的更惨的职业,匹配程度就差多了,需要花更多的时间去准备,3-6个月可能还说少了。
2、技能准备
搞清楚职业诉求,就可以对症下药了。如果你是技术人员,先把基础的东西收拾收拾,IT 技术虽然浩如烟海一日千里,但基础的东西几十年没有太大的变化,操作系统原理、进程和线程、并行和并发、I/O、文件系统、TCP/IP、数据结构、面向对象、函数式编程等等,看看哪儿薄弱哪些急需,按需进补别吃错药。关于算法,如果你不打算做算法工程师,了解一下排序查找二叉树就差不多了,想想吧,连 HomeBrew 的作者 Max Howell 都不能徒手反转二叉搜索树呢。
基础夯实之后,就要针对你目标职位的领域内容做些知识储备了。想做大数据的,最好知道 GFS、Hadoop 等技术;想去做移动开发的,iOS 和 Android不能比翼齐飞,至少要选择其中一个;想去做搜索和推荐的,那算法就成为必备技能了,等等,诸如此类,余不一一。
关于技能面试的准备,有一本圣经级别的教材,叫做《Cracking the Coding Interview》,150道编程面试题几乎涵盖了各个领域的编程知识,你觉得把这些题都做一遍得多长时间?按照正常人一天做五道,你得用足一个月!看到这儿是不又崩溃了,「哪有那么多时间啊魂淡」。别急,我很早就说过,世界上总是存在一些看起来不是那么正常的人,他们会做一些凡人不能理解的东西,面试界也是一样,有位面霸级别的人物,不仅把这些题做了,还写了一篇《Cracking the coding interview–问题与解答》的博客,逐一翻译和讲解,最后还把代码放到了 github 上,看到这里别以为伸出湿漉漉的手指点赞就算了,记得以后做些傻事回馈社会!
博文地址:/posts/ctci-solutions-contents.html
如果你是非技术人员……那你为啥要看这篇文章呢?
3、目标公司
主动求职最好有目标公司。
根据你的特长、诉求和发展规划,选择自己喜爱的公司,别太多,你要是把世界500强都列进去,那下半生估计都将踯躅于面试和赶往面试的途中,此恨绵绵无绝期。也别太少,非 Google 和 Apple 不进的同样具备找抽的潜质。
选择了心仪的公司不是让你把这些公司的 Logo 挂墙上供奉的,去了解这些公司的业务范围、招聘需求和招聘的时间区间。
了解业务是为了防止面试时人家问你「Why Apple?」,你回复「Sorry,I have no idea about this fruit」。
了解招聘需求是为了让你的技能准备更有针对性。
了解招聘区间当然是为了让你适时投简历啦,这还用问吗?
好了,经过了长时间的自我提升和完善,你的能力和精力已经达到巅峰状态,你拔剑四顾心茫然……这时突然有个心仪的公司高薪把你挖走了……
咳,这位同学醒醒,擦干嘴角的口水,这种戏剧性的变化要么发生在梦里要么发生在别人身上。咱该准备简历了……
我听说过最牛的一份简历是这样的,作者是 Python 的作者。
I wrote python.
拽吧?你没发明 Python,就不要这么拽了,出门右拐去「小道消息」,冯老师今天写了一篇「简历做好这一点,求职成功几率高几倍」,写得比我简洁有力,要读。
面试一般分为笔试(鄙视)和面试(面基)。
笔试没什么可说的,对错都在笔墨之间。
面试的时候呢,会则答,多问多答,少问少答,在回答过程尽可能展示自己的特色和特长。比较忌讳的是问到一个你熟悉的领域就开始滔滔不绝撒开嘴叉子讲,面试官都睡了你还不知道。当然,如果面试者愿意和你一同分析问题解决问题就不一样了,你可以尽情展现自己分析问题的能力和技巧,直到对方喊停为止。最忌讳的是问到你不会的问题或不熟悉的领域,你去猜答案,被看穿的话非常减分,直接说不会就好了,不丢人,爱因斯坦还有不会的问题呢。坦诚一点,加分!
有时候对方可能只是想知道你是不是会说不知道的人。这句话有点绕,罪过。
除了技术类的,有个问题几乎是必问题,那就是「说说你做过最得意的项目」,如果你听到这个问题又看过 MacTalk 的文章,是不是就开心啦?把准备好的内容进行精彩呈现,如能辅以白板配图,或直接用自己的 Mac 进行现场演示和讲解,就更好了。这种问题对方一般都会刨根问底,如果你准备充分,那就是一场精彩的对攻战,效果非常好。
还有一些常规性的问题,也要做好准备,比如:
「你为什么离开」
「你为什么来这」
「你为什么总跳槽」
「你为什么这么长时间不跳槽」
「你有什么优点」
「你有什么弱点」
「你的长期规划」
「你的短期规划」
诸如此类,正常回复就好,做到不卑不亢,简单明了。
最后一个问题,有经验的面试官一般会留给你,就是请你提问。如果你的问题是「我可以走了吗」,那可能就真的不用再来了。把握好这个机会,提出有水准的问题,最好与面试内容相关,加分。
终于,笔试面试机试 HR 试都结束了,擦干额头的汗水,回家等通知吧。
永远不要高估一个公司招聘流程的严谨程度,如果你觉得自己面试结果还不错,十天内没收到任何消息,可以主动询问一下,别老觉着自己是诸葛孔明,就算你是,也得有刘备才行。如果一个职位选中了两个候选人,经历能力都相当,而你主动询问面试结果和进度,你说招聘的蜀黍会选谁呢?
无论是在工作中,还是面试中,要形成反馈闭环,如果你不知道什么是闭环原则,建议阅读「」。
你或许也喜欢&p&这几天在“在行”卖身(&a href=&///?target=http%3A///mentor//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&刘飞- 嘟嘟美甲联合创始人,锤子科技产品经理&i class=&icon-external&&&/i&&/a&),给几个朋友提供了一些产品经理如何入门的建议,结合我之前几年的工作经历,跟大家分享下。&/p&&p&写在前面:&/p&&p&1.
&a class=&member_mention& href=&///people/b4db1bfb5a1c78ffa9b09aa& data-hash=&b4db1bfb5a1c78ffa9b09aa& data-hovercard=&p$b$b4db1bfb5a1c78ffa9b09aa&&@大海&/a& 提到了很多需要具备的能力、阅读的书籍和掌握的工具,都是很赞同的。但一方面他并没有提到如何去做,另一方面大部分工具的使用和能力的掌握都应该是因地制宜的,不能盲目去学。我的回答将更侧重“如何去做”和“怎样去做”,而不是“用什么工具去做”和“查哪本攻略去做”。&/p&&p&2. 我的方法大概都能适用于中小团队,并不一定适用于有严谨流程和细致分工的大公司。要问后者怎么办,跟你的 leader 学啊,干嘛自学,如果没人带这公司就太不靠谱了,还是赶快换下家。&/p&&p&3. 产品经理最重要的就是独立思考的能力。有句话说兼听则明,偏听则暗,我是觉得产品经理不能光听,要自己想,而且能有讲道理、摆事实说服别人的能力(不是靠耍嘴皮子抖机灵说服别人)。所以记住不要把我说的(和其他任何人说的)当攻略一步一步走。&/p&&p&4. 谨以此文,感谢领我入门的学长、嘟嘟美甲创始人彪哥,感谢带我飞的锤子科技二位总监木爷、刘炯。&/p&&p&————————————————&/p&&p&&b&1. 锻炼对自己产品的理解。&/b&&/p&&p&初学者可能刚入门就会被琳琅满目的原型工具和一堆堆的案例绑架,满脑子想的是别人花哨的功能和亮瞎自己狗眼的方案,但唯独对自己产品不了解,脑子里全是别人的东西。&/p&&p&这样的 PM 平时跟别人的对话一般是:&/p&&blockquote&A(老板):你觉得这里放四个标签页合理不合理?&br&P(PM):当然合理,美团啊、点评啊、微信啊都这么做的。这是天下大势。&br&A:那我们页面上功能排版这样靠谱不?&br&P:没问题。现在这样的排版方式是最常见的,交互方式也保证是最流行的。唯一色调设计手法是国际上流行的设计理念 Minimal 。&br&A:额,那我们这几个功能是必需的吗?&br&P:这几个功能竞品都有了,我们没有的话不好吧?&br&A:......&/blockquote&&p&&br&&/p&&p&对自己产品的理解又分为多个方面:&/p&&ul&&li&对公司定位的理解,跟老板和投资方有关&br&&/li&&li&对用户定位的理解,跟公司的定位和市场的状况有关&/li&&li&对产品定位的理解,跟用户的定位和推出产品的初衷有关&/li&&li&对公司研发能力的理解,包括设计能力、开发能力和运营能力&/li&&li&对其他部门状况的理解,包括各部门在做的事情、大家进行的状态&/li&&li&...&/li&&/ul&&p&&br&&/p&&p&总之,你做出的每个判断必须基于对产品多方面的理解,而不是对竞品的理解、对市场的理解这零散的因素。&/p&&p&只有这样,当设计师做出你不满意的稿子时你可以说“你的这个风格可能适合年轻人,但我们的目标用户是商务人士”,而不是说“你这个不够大气,没有 feel 啊”;当你要求工程师改一个看起来不重要的 BUG 时可以说“后续运营部门计划有好几次大型活动,到时流量会瞬间暴涨,你这个 BUG 会放大 10 倍,所以很危险”,而不是说“重要不重要不是你工程师定的,是产品经理定的,你改就行啦”;当你跟老板讨论要不要加一个功能时可以说“我觉得我们这样的功能是一个重要的补充,跟下个版本要做的事情不谋而合”,而不是“竞品做了咱们不能落下啊,管它有没有用”。&/p&&p&那具体怎么去锻炼,其实是件费力又费脑的事情,你要不断地去跟老板沟通、跟同事们沟通,去跟用户聊,去做调研,同时做大量的思考和总结。你要有自己的一本词典,记录关于你名下产品相关的事无巨细的解释,每当需要查询就能随时翻阅。&/p&&p&这本词典可以记在心里,也可以整理成笔记。别人看来,它可能无关紧要,也不是那种张口“人机交互的趋势”闭口“立体化设计语言”这些可以用来装逼的术语。但没有这本词典,你每走一步都是一个坑,等走远了回来想填的时候,已经晚了。&/p&&p&&b&2. 提高分析和判断能力。&/b&&/p&&p&如果说对产品理解是第一步,那第二步就是怎样基于你的理解做出靠谱的判断。&/p&&p&说来也怪,很多 PM 除了参考别人的,也就是做用户调研,或者唯老板是从。但很多事情简单得要命,只要有生活常识、有基础的推理能力,明明是可以更靠谱的。&/p&&p&举个例子吧。&/p&&blockquote&当初 MIUI 做安卓本地化的时候,日历里加入阴历是作为主打特色之一的,也广受好评。在做 T1 的日历的时候,我们也在考虑这个问题:到底加不加阴历?&br&&br&加的话,整个界面非常满,显得丑陋;不加的话,需要看阴历的用户又会不爽。&br&&br&这是常见的一个日历界面:&/blockquote&&img src=&/b7ea2eccd7f9ce390352_b.jpg& data-rawwidth=&320& data-rawheight=&480& class=&content_image& width=&320&&&p&对于重调研的 PM 来说,就做个调查问卷,规模越大越好,看哪边的用户多;对用户定位是偏高端用户或者说发烧友的 PM 来说,可能就做个开关选项,用的打开,不用的关了。&br&&br&但实际上完全可以往前推理一步:用户到底为什么需要阴历?&br&&br&大概场景就几个:春节前后用;阴历的节假日用;自己和亲友生日用。这基本囊括了所有用户的需求。&br&&br&那就简单了,我们能不能就在春节和节假日的时候显示阴历?对于生日的话,我们可以提供设置项,在用户和亲友每年生日那天显示阴历。&br&&br&这是 T1 的日历界面:&br&&/p&&img src=&/ed76ff3cebcbf_b.jpg& data-rawwidth=&288& data-rawheight=&421& class=&content_image& width=&288&&&p&这样既在很大程度上防止了界面始终显示阴历的尴尬,又满足了大部分用户对阴历的需求。这种方案凭常识很快就能推断出来吧?也不用复杂的问卷调查吧?也不用复杂的产品设计吧?&/p&&p&&br&&/p&&p&你可能说,这就是个抖机灵的需求分析,况且是个小功能。我再举个例子。&/p&&blockquote&我们之前在嘟嘟美甲讨论最基本的功能和界面时,并不是参考的市面流行的 O2O 工具都有什么功能、都有哪几个标签页、都怎么排版的。我们先做了一次用户的分析。&br&&br&用户的分析不是靠什么问卷来做的。你在问卷里问“你是哪类用户”、“你平时做美甲会更看重什么?”,他们很难答清楚。如果你给的是具体的选项,又会有诱导回答的可能,最后的结论往往不能说明问题。&br&&br&我们的分析方法是,先从常识判断美甲用户使用我们的产品有哪几种场景:&/blockquote&&ol&&li&已经有想做的样式的用户。&/li&&li&想来做美甲但不确定样式的用户。&/li&&li&不确定做不做只随便来看看的用户。&/li&&/ol&&p&对于每种用户,来这的需求肯定是不同的:&br&&/p&&ol&&li&看你这有没有想做的那个样式或者类似的样式。&/li&&li&看你这有没有好看的样式。&/li&&li&看你这有没有什么足够吸引她做美甲的地方。&/li&&/ol&&p&对于这三种需求,我们要提供的功能又是不同的:&br&&/p&&ol&&li&根据用户的样式提供定制服务;搜索和筛选功能。&/li&&li&精品/热门推荐;搜索和筛选功能。&/li&&li&专题;精品/热门推荐。&/li&&/ol&&p&所以,在用户第一次看到我们产品的时候,我们需要提供的功能就一目了然了:专题、推荐、搜索/筛选和定制。&br&&br&而我们起初的判断是,产品刚上线,第 3 种用户肯定最多,第 2 种用户会逐渐多起来,而第 1 种用户会是高端、深度的用户,出现得更晚。这样对功能的主次也都分得清了。&br&&br&最后初版的产品,我们就决定把主要精力放在推荐和专题上,搜索功能是第二版上线的功能,而定制将是更未来版本的功能。而界面的布局和排版,也都因为功能主次分明,所以心里有数了。&/p&&p&&br&&/p&&p&最终结果上来看,做出来的界面似乎大同小异。但因为每个功能从研发角度都会消耗精力、从用户角度都会影响体验,如果是拍脑袋想的,一点小差别、一些可有可无的功能都会成为南辕北辙的错误决定。&/p&&p&其实这些东西都是常识完全可以判断的。你说我不是女人哪懂美甲咋回事,但你总逛过淘宝用过京东吧?购物时用户的思路还是可以想象得出来吧?当你有了初步判断之后,用户调研的意义就体现出来了:&b&它是作为验证的手段。但它不能作为需求的来源。&/b&&/p&&p&总结起来,产品经理在做任何决定时,都要做到三个字:&/p&&p&&b&讲道理。&/b&&/p&&p&&br&&/p&&p&那怎样培养这种能力呢?也不难。就是在日常生活中多问为什么。&/p&&p&这个小区的停车场入口需要绕三个圈,为什么这么设计?这个优衣库进门一眼看到的全都是内衣裤,这么摆放是什么道理?楼下咖啡店平时顾客也不多,但居然撑了五年还没关门,他们的收支能够平衡吗?&/p&&p&很多道理是相通的,每天都在想明白一些事情,那真遇到棘手的产品问题,你肯定想的比别人远,也比别人靠谱。&/p&&p&&a class=&member_mention& href=&///people/1cadfcf934acc3aa21ccefc89cf9dba0& data-hash=&1cadfcf934acc3aa21ccefc89cf9dba0& data-hovercard=&p$b$1cadfcf934acc3aa21ccefc89cf9dba0&&@hyukming&/a& 提到的纯银说的办法也是这种考虑(&a href=&/question//answer/& class=&internal&&产品经理如何入门,没人带的情况下如何学习? - hyukming 的回答&/a&)。不断去看别人的产品,但不是学皮毛,而是去想从商业模式、到交互细节、再到视觉风格的原因,这么做都是什么道理。&/p&&p&&b&3. 确保良好的沟通和表达能力。&/b&&/p&&p&如果能够对产品有充分的理解、对各种问题有了清晰有据的判断,下一步就是把这些自己的理解和判断跟同事们做充分的交流和沟通。&/p&&p&其实说来也不会很难,也就是注意沟通的技巧,一方面是说要有常提到的情商,怎样让没有实权的你在推进大家完成任务、在协调大家的工作时不那么讨厌;另一方面是要让每次沟通都有效率,不耽误时间。&/p&&p&对于前者,我的建议有:&/p&&ul&&li&始终清楚自己是产品经理,但不是经理,不要盛气凌人&/li&&li&用有理有据的事实来说服别人,而不是“老板的决定”、“反正跟你没关系”这种操蛋的说法&/li&&li&别人遇到困难不要说“我不管,这是你的事儿”,主动去理解他的困难,并且尽力帮忙解决,解决不了的一起想备选方案&/li&&li&产品项目组中的任何同事之间有了矛盾,要主动去协调,别在旁边看热闹&/li&&li&随时让每个产品线上的同事了解全局的进展,让大家产生主人意识&/li&&li&用户的反馈整理后可以周知同事,让大家产生成就感,觉得自己做的事有价值&/li&&/ul&&p&&br&&/p&&p&对于后者,我的建议有:&/p&&ul&&li&每次讨论问题,不管是一对一聊,还是开会,都明确这次的目的,有腹稿&/li&&li&描述问题清晰,想好了再说,同时不要偏题&/li&&li&每个问题都形成结论,不要讨论来讨论去觉得很充实就行了,没有结论都是瞎扯&/li&&li&不要把任何事情都交给别人决定,自己时刻准备提出更多方案和建议&/li&&li&每次讨论的过程和结论都有记录,可以随时查阅&/li&&/ul&&p&&br&&/p&&p&交际能力学习最快的方法其实不是从书本上背诵,或者记下我说的这些小抄,而是找一个你觉得交往起来特别舒服、又很优秀的人,学习他身上的优点。&/p&&p&&b&4. 对产品的责任心。&/b&&/p&&p&责任心似乎是最容易能有的,但却是我直到现在面对很多优秀的 PM 都觉得自愧不如的。&/p&&p&我特别喜欢 &a class=&member_mention& href=&///people/5dea5dbed1458& data-hash=&5dea5dbed1458& data-hovercard=&p$b$5dea5dbed1458&&@池建强&/a& 老师的一句话:产品经理最重要的能力就是让正确的事情相继发生。&/p&&p&你做到我说的 1-3 了,但那只是做“正确的事情”,是不是能让它们相继发生,却要考验你的责任心。&/p&&p&在午夜工程师为项目上线加班时,你是在楼下电影院里吃爆米花,还是在旁边默默陪他?在设计师跟老板因为方案闹僵了的时候,你是等着他们握手言和,还是主动找老板或者设计师聊一聊赶快把项目推进下去?在运营的同事为了某个紧急活动给你提出不太实际的功能需求时,你是一句“做不完”就打发走,还是认真跟她讨论下有没有什么别的方法能凑合着用?&/p&&p&是的,严格来说,你跟公司是劳动契约,你不能被强制加班;你的岗位是产品,不该去帮别人想解决方案;你也不是老板,公司的各种坑也不必由你来填。&/p&&p&但一个优秀的产品经理,是要对任何与产品相关的事务负责的。任何阻碍产品正常上线的事情都应该由你解决,任何能对产品产生帮助的事情都应该给予关心。&/p&&p&在这方面如何抉择,就决定了你作为产品经理是平庸还是优异。&/p&&p&&b&5. 关于工具的使用。&/b&&/p&&p&工具放到最后说,是因为实际意义上的产品经理,并不必掌握太多原型工具、交互绘制工具甚至绘图工具。&/p&&p&不管是什么样的工具,都是为人和当前做的事情服务的。还是刚才那句话,你为什么要用它?它对你现在做的事情有帮助吗?&/p&&p&很多初创团队刚刚起步,就开始搭建各种大规模的 Feature/Bug 的记录和处理平台,都在用特别复杂的需求文档描述规则,都把脑图、Axure 作为必备的工具。没有提高效率,反而造成了很多问题。&/p&&p&就跟 MBA 不适合创业者一样,复杂的流程会严重拖累中小公司的运作。我平时就用 Keynote 、Sketch 这样的工具,完全能覆盖 90% 的需求设计工作;产品研发的需求记录和处理就用 Trello 或者风车,操作简单,易用。&/p&&p&记住一条就可以了:只要觉得目前手头的工具好用、高效,那就没必要换成高大上的。除了装逼,没有别的意义。&/p&&p&&b&6. 尽力涉猎广泛。&/b&&/p&&p&上次“在行”的一个朋友问我,他经常会与设计师有争论,他总觉得那样画排版上有问题,但却说不出哪有问题,该怎么办。我说很简单,如果你直觉上觉得有问题,那可能真的犯了一些基本错误,那你多去学习些排版上的知识,多去了解下常见的排版规则,那之后遇到争论肯定就有底气了呗。&/p&&p&作为产品经理,懂一些其他岗位的基本知识是很有用处的。这样既能保证良好的沟通,也能让你在考虑需求、设计方案时心中有数。这是一个好的补充,当然没有也无所谓。&/p&&p&去看看他们都在看什么书,找些基础的看一下;也可以到知乎这来看点快餐类的文章。这样别人就不会在背后说,这小子就会每天瞎逼想些点子、画点不靠谱的原型、做点不接底气的方案。&/p&&p&&b&7. 广告。&/b&&/p&&p&公众号 liufeinotes&/p&&p&个人微信号 wojiushiliufei (请加自我介绍&/p&
这几天在“在行”卖身(),给几个朋友提供了一些产品经理如何入门的建议,结合我之前几年的工作经历,跟大家分享下。写在前面:1.
提到了很多需要具备的能力、阅读的书籍和掌握的工具,都是很赞同的。但…
通过日志保证数据的正确性,而不是通过数据保证数据的正确性。&br&日志是顺序写的,非常快。&br&数据,是随机写的,数据如果非常分散。效率会低得一塌糊涂。&br&简单点说。数据可以延后写,日志却不行。&br&因为数据相对于日志,是根本不重要的。它并不决定数据的安全。&br&=======================&br&有人说倒数第二句有点不友善,删了。大概楼主公司对日志要求不低,可是过高流量使日志到了影响正常流程性能地步,所以都异步出去了。才会有这样的疑问。&br&可是数据库中日志才是一等公民。
通过日志保证数据的正确性,而不是通过数据保证数据的正确性。 日志是顺序写的,非常快。 数据,是随机写的,数据如果非常分散。效率会低得一塌糊涂。 简单点说。数据可以延后写,日志却不行。 因为数据相对于日志,是根本不重要的。它并不决定数据的安全。…
移动端的我不知道,,,我列几本我觉得好的给你:&br&&br&&ol&&li&Modern Operating Systems 4th,这本书是教材,Tanenbaum 是谁不用多说了吧,估计 Linus 见了他也得叫一声老师。这本书理论性较强,讲的是普遍原理,但是不够深入,如调度算法等等,有时就是一句话,但是不会跟你说明具体实现。不过是一本操作系统入门的好教材。&br&&/li&&/ol&&img src=&/7ece7cbc9ece5d9a150dd85c8b803507_b.jpg& data-rawwidth=&260& data-rawheight=&331& class=&content_image& width=&260&&&br&&br&2. Operating System Concepts 9th,这本书也叫“恐龙书”,名气与第一本齐名,也是教材,第九版对比前书第三版 (第四版我没看) 来说更好,对于算法的解释更详细,但是对于一些特别基础的东西,比如 MMU 工作起来大概是什么样子的等描述不如第一本详细。&br&&img src=&/6ca272fe67b999c1d1bf5_b.jpg& data-rawwidth=&241& data-rawheight=&346& class=&content_image& width=&241&&&br&3. Operating Systems Design and Implementation 3rd,还是 Tanenbaum 的书,主要基于 Minix 讲操作系统实现,这本书比前两本书,要落地一些,理论性不是那么强。但是建议你看完前两本任意一本再看这本。&br&&br&&img src=&/a61f3f55c5fdeb65760ffdae7df015a9_b.jpg& data-rawwidth=&141& data-rawheight=&182& class=&content_image& width=&141&&&br&4. 下面就是一些特定平台的书了,基于以上理论,这些书对于特定平台的实现讲的非常深入,比如都是内核,OS X,Windows 实现有何不同,你就要看这些了&br&&br&比如 Windows,你要看 Windows Internals 6th&br&&br&&img src=&/bf1ab9000e_b.jpg& data-rawwidth=&260& data-rawheight=&317& class=&content_image& width=&260&&&br&比如 OS X,你要看 Mac OS X Internals: A Systems Approach&br&&br&&img src=&/1f38f3c93fe030c9ff17c_b.jpg& data-rawwidth=&260& data-rawheight=&343& class=&content_image& width=&260&&&br&&br&或 Mac OS X and iOS Internals: To the Apple's Core&br&&br&&img src=&/4b166d8cfc8f50becf80f596e2404086_b.jpg& data-rawwidth=&260& data-rawheight=&329& class=&content_image& width=&260&&&br&&br&移动操作系统,iOS 没有什么特别好的书,因为是闭源的,但是由于其和 OS X 同源,很多东西你可以参考 OS X 以及 XNU 源代码。Android 我不关心也没兴趣,也不知道,Windows 要问做 WP 开发的朋友。&br&&br&另外,看这些书,你要有一些 C 语言的功底,不然一些例子什么的你搞不定,还要有点汇编语言的知识,不然源代码很多你也看不太懂。&br&&br&&br&另外,如果觉得这些书很贵,可以到诸如 MIT 等大学网站找操作系统课程的讲义看,都非常不错。免费。
移动端的我不知道,,,我列几本我觉得好的给你: Modern Operating Systems 4th,这本书是教材,Tanenbaum 是谁不用多说了吧,估计 Linus 见了他也得叫一声老师。这本书理论性较强,讲的是普遍原理,但是不够深入,如调度算法等等,有时就是一句话,但是不…
对争议内容做下解释:&br&&ul&&li&感谢 &a data-hash=&c43e5d712d62332dd8eacb& href=&///people/c43e5d712d62332dd8eacb& class=&member_mention& data-editable=&true& data-title=&@cc CC& data-hovercard=&p$b$c43e5d712d62332dd8eacb&&@cc CC&/a& 的回复,以AppContainer特权等级运行的应用才是较为现代的解决方案,开发、上架、安装一条龙,全程没有UAC弹窗,也没有常规的隐私和安全问题;&br&&/li&&li&Win32和.Net应用安装到ProgramFiles都需要管理员权限,原因是在Windows的权限机制中对系统目录中运行和读取不需要管理员权限,但写入是需要的。等他们安装完成,也是以用户模式运行的,并非安装的时候点一次UAC确认,以后就会永久提权;&/li&&li&普通用户在UAC弹窗里借用管理员账户安装的话,由于管理员账户也没有访问其他用户目录的权限,所以应该是借管理员账户的权限使用Trusted Installer来进行安装。&/li&&/ul&这条答案很多内容与问题无关,论点也比较琐碎,答主也是刚刚接触Windows安全机制相关的知识。如果读完之后感觉头昏脑胀纯属正常,请收好蓄势待扔的板砖,答主都跑题习惯了╮( ̄▽ ̄&)╭&br&希望下面的各种“题外话”能让大家养成良好的使用习惯,把系统安全掌握在自己而不是各路管家的手中。考试季过去之后,答主会将Windows安全机制和使用习惯整理成文,来取代这篇凌乱的回答。欢迎大家关注&a href=&/yicong& class=&internal&&二葱写字的地方 - 知乎专栏&/a&(刚刚开通,目前还空空如也,好羞耻),答主会在这儿跟大家分享更多干货:)&br&&br&==============回答开始==============&br&&br&安全问题需要客观分析,不是用通俗的语言打个比方就能分出孰优孰劣的。让我来陈述一件事实吧:&br&&br&在2010年的Pwn2Own大赛上,白帽黑客Charlie Miller通过OS X Snow Leopard系统中Safari的一个漏洞成功侵入系统,在普通账户的登陆环境上取得了整个系统的控制权。&a href=&///?target=http%3A///article/pwn2own-macbook-attack-charlie-miller-hacks-safari-again/%23& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pwn2Own MacBook attack: Charlie Miller hacks Safari again&i class=&icon-external&&&/i&&/a&! 嗯没错,当时新闻的标题是这家伙&b&又&/b&黑掉Safari了。&br&&br&事后通过分析Charlie Miller的入侵过程,发现是因为OS X系统缺乏一项名为“&b&Address Space Layout Randomization&/b&”(&a href=&///?target=http%3A///articles/uaEbEjB& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&地址空间布局随机化&i class=&icon-external&&&/i&&/a&)的特性,这项技术可以使完成特定功能的系统代码,在每次系统启动的过程中都存储在随机的、不同的位置,缺乏了这个特性,系统的关键数据、可执行的堆栈就可以在每次入侵的过程中被精确定位。而这一特性,在同时期的Windows Vista中早已得到了完备的支持。在Snow Leopard的接替者Lion发布的时候,苹果引入了ASLR技术,并首次引入沙盒机制来保证系统的安全性。&br&&br&这是一个操作系统发展过程中很小的一件事,但&b&如果你想认真地讨论安全问题,就应该着眼于客观分析系统所提供的整个安全机制。而不应该从病毒数量、窗户大门这些比喻上主观论断&/b&。&br&&br&之所以要举出这个例子,就是要说明:&br&&ul&&li&OS X也好,Windows也好,都不可避免的存在安全性漏洞,而只要漏洞存在,就能对系统造成一定破坏;&br&&/li&&li&大家都在吃一堑长一智的向前走,&b&操作系统每一天都比昨天更安全&/b&&br&&/li&&/ul&=====题外话开始=====&br&所以用Windows的请不要关闭自动更新,用Mac的请&b&尽量&/b&使用App Store里的应用(为什么是“尽量”后边会提到)。尤其需要注意的是,占据主导性市场份额的操作系统,流氓应用也会越多,所以如果你用Android,请使用权限管理功能禁掉百度、网易等应用读取系统敏感日志、读取正在运行的程序这样的流氓权限……跑题了……尤其需要注意的是,Windows用户请慎点UAC的确定按钮,像QQ、百度云这种在安装的时候需要提权的软件一定要慎重,Windows Vista以后的系统为普通应用提供了专门的安装位置,在地址栏里敲一下“C:\Users\你的用户名\AppData”就能看到像印象笔记、Telegram这样的应用都装在这里,并且安装他们的时候不需要触发UAC。不论是Windows还是OS X,一旦你给了未知来源的应用以管理员权限,从那一刻开始你的整个系统就没有安全性可言了。不知有多少人知道QQ的部分组件其实是运行在内核模式下的(更正一下,QQ作为一个可执行文件的确是运行在用户模式下的,但加载的QQFrmMgr.sys作为驱动程序,在SSDT HOOK里是以内核模式运行的。)?&br&&img src=&/c77fccdfad38_b.jpg& data-rawwidth=&783& data-rawheight=&508& class=&origin_image zh-lightbox-thumb& width=&783& data-original=&/c77fccdfad38_r.jpg&&在SSDT上可以对系统函数下钩子,这是我在虚拟机里装了QQ但还没装管家之前的景象,平时你们新建文件、打开程序、创建进程什么的QQ全都知道好嘛……真的真的真的没人在乎打开安装程序的时候弹出的UAC窗口吗?&br&&br&插一句,如果QQ、百度云一定要用,那安装时、在点UAC的确定按钮之前,请确认一下安装程序的数字签名是不是腾讯、百度,如果不是,那一定被人做过手脚,果断拒绝安装。只安装具备有效签名的程序在一定程度上是可以保障系统安全的。嗯,只是插一句而已,给大家提个醒。&br&&img src=&/aeba553c04c11f_b.jpg& data-rawwidth=&405& data-rawheight=&527& class=&content_image& width=&405&&&br&上图的微信安装包是腾讯签名的,如果见到其他公司签名的微信安装包,甚至是不带签名的,估计就是盗号程序了。&br&&img src=&/e78efaf0fa7d474be70ef594_b.jpg& data-rawwidth=&405& data-rawheight=&527& class=&content_image& width=&405&&下面这张图是从百度上“高速下载”的Chrome安装包,点开必弹UAC,确认必会装上百度全家桶(其实原版Chrome安装包也会弹UAC,不给权限的话,就会自动装到AppData去了,&u&可是其实AppData才是它们的正确归宿啊 &/u&其实是不对的,大部分程序仍然需要UAC弹窗并安装到Program Files下,感谢 &a data-hash=&65b4e6c17fa87e& href=&///people/65b4e6c17fa87e& class=&member_mention& data-editable=&true& data-title=&@烈之斩& data-hovercard=&p$b$65b4e6c17fa87e&&@烈之斩&/a& 指出)&br&&br&另外再插一句,在Windows 8.1以后的操作系统上,病毒程序要想绕过UAC,除了采用添加以最高权限运行的计划任务之外,基本只剩下DLL注入(利用了运行微软签名的应用可以直接提权)和替换UninstallLauncher两种办法了。而这两种办法在实施之前也是需要先获取一次管理员权限的。所以在每次点击UAC的确定之前,一定要知道自己在做什么。像我这种不想让杀毒软件来保证安全的,靠把UAC的Level拉到最严格、在组策略里把点击确定改成输入凭据,就能抵挡大部分的威胁了。虽然这样做打开任务管理器我都得输个PIN码,但我觉得与其让每个过手我电脑的人都能打开任务管理器然后任意结束进程玩,还不如我每次改动关键设置的时候都输入密码来的安心呢。&br&&img src=&/014d0feccf3afcc11a420c_b.jpg& data-rawwidth=&746& data-rawheight=&553& class=&origin_image zh-lightbox-thumb& width=&746& data-original=&/014d0feccf3afcc11a420c_r.jpg&&&br&&br&其实,UAC真的不是为了转嫁中毒责任、脑残的发明,想当年在没有UAC的XP时代,只要你登陆的是管理员账户,那么你运行的每一个程序都可以获得管理员权限,戳一下就会死。在XP SP2之前连DEP(数据执行保护)都没有,也就是说内存数据有被当作代码来执行的风险,而DEP正是在冲击波扫荡全球之后,微软被迫提出“可信计算”时被引入的。现在的Windows能提供基于软件的DEP,Intel的CPU也都能进行硬件DEP了。这就是进步,哪怕是亡羊补牢式的进步。&br&=====题外话结束=====&br&&br&&ul&&li&那些说“Mac每次提权都需要输密码,而Windows只需要点个确定”的人,你知道Windows通过组策略就可以做到把点确定换成输入凭据吗?&br&&/li&&li&那些说“Mac系统只要用App Store的东西就安全,安全源于正确的使用习惯”的人,只要你深入的用上一年Mac,就会知道总有些时候不可避免的使用非App Store的程序,而这类程序是不受沙盒保护的,并且,App Store版的Movist连加载字幕都需要弹窗让用户选择,而不能自动搜索电影目录完成加载,安全性难道需要这样才能保证吗?&br&&/li&&li&还有一些“苹果控制在“声源”和“传播途径”,微软控制在“人耳””,你想说明什么啊= =&/li&&/ul&还是那句话,&b&如果你想认真地讨论安全问题,就应该着眼于分析系统所提供的整个安全机制。而不应该从病毒数量、窗户大门这些东西上主观论断&/b&。&br&&br&如今的操作系统早已不是给硬件提供一个抽象层、让开发者更方便的写程序那么简单,在云计算、移动化的时代,大家都在力图把操作系统打造成提供服务的平台,不管是OS X还是Windows,要想构建完整的生态系统(从开发环境、API的提供到应用分发的渠道和一些必要的安全性验证等),不仅需要&b&构建一个安全可信任的使用流程&/b&(比如从应用商店安装应用,安装具备可信任签名的应用等),而且需要&b&保证系统整个机制的严密性、安全性&/b&(像Snow Leopard那样黑客可以直接从Safari攻破系统那当然不行,Windows 7上病毒程序可以轻松绕过UAC当然也不行)。&br&&br&苹果的安全机制落后十年吗?我觉得并不是,十年前的XP并没有沙盒机制来保护系统安全、也没有App Store这样统一的应用分发渠道。但是十年前的XP远比现在的OS X面临更多的病毒和入侵威胁,随着OS X日渐流行,苹果也迟早要面对这个问题。据我所知,苹果并没有像微软那样,提供一个激励白帽黑客发现并提交Windows漏洞的途径,这就导致Mac上尚未发现的漏洞可能还有很多。但OS X和Windows每个Build都比上一个要好、要完善,媒体啊,请不要用“落后十年”这样的话来妖言惑众、危言耸听。&br&&br&表达能力退化、另外答主也是这方面的小小初学者,如有不当之处请轻拍。借这条答案说了好多东西,就是想传播下关于权限、安全问题的知识,让更多人不再受流氓应用的监视。&br&&br&==========&br&&br&评论区有人提到第一次知道UAC的点击确定按钮改成输入PIN码,这里贴个链接,是具体的操作方法:&br&&a href=&///?target=http%3A///zh-CN/windows7/How-do-I-change-the-behavior-of-User-Account-Control-by-using-Group-Policy& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何使用组策略更改用户帐户控制的行为?&i class=&icon-external&&&/i&&/a&&br&由于UAC的安全桌面下没法截图,就贴一些网络图片了(图片来源:&a href=&///?target=http%3A///p/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&关于组策略的UAC详细设置图解_bilibili水吧&i class=&icon-external&&&/i&&/a&) &br&&img src=&/83e93c1e1eb4f7577ceeeff30f915239_b.jpg& data-rawwidth=&800& data-rawheight=&572& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/83e93c1e1eb4f7577ceeeff30f915239_r.jpg&&&br&&img src=&/7da9f50b_b.jpg& data-rawwidth=&740& data-rawheight=&478& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&/7da9f50b_r.jpg&&&br&&img src=&/b9c68a0cdc33fa8c0b33b_b.jpg& data-rawwidth=&466& data-rawheight=&238& class=&origin_image zh-lightbox-thumb& width=&466& data-original=&/b9c68a0cdc33fa8c0b33b_r.jpg&&&br&△修改前&br&&br&&img src=&/ed51ae32af2cf7892bb8dfdc71fb872d_b.jpg& data-rawwidth=&466& data-rawheight=&337& class=&origin_image zh-lightbox-thumb& width=&466& data-original=&/ed51ae32af2cf7892bb8dfdc71fb872d_r.jpg&&&br&△修改后&br&=============&br&&img src=&/6c74f963f915d14c0ff9_b.jpg& data-rawwidth=&1673& data-rawheight=&581& class=&origin_image zh-lightbox-thumb& width=&1673& data-original=&/6c74f963f915d14c0ff9_r.jpg&&把这些词条都读完,估计对这类问题又有全新的认识了吧(论查字典才是靠谱的学习方法⊙﹏⊙)。这条答案暂时就更到这了,&a href=&/yicong& class=&internal&&专栏&/a&见:)
对争议内容做下解释: 感谢
的回复,以AppContainer特权等级运行的应用才是较为现代的解决方案,开发、上架、安装一条龙,全程没有UAC弹窗,也没有常规的隐私和安全问题; Win32和.Net应用安装到ProgramFiles都需要管理员权限,原因是在Windows的权…
答主也是安全领域小白一枚,如有错误之处欢迎提出: )&br&&br&这个问题可以简化成三个子问题:&br&&ol&&li&杀毒软件的哪些构造可能存在可利用的漏洞?&/li&&li&为什么通过浏览器就能入侵系统?&/li&&li&为什么取道杀软比浏览器更容易获得漏洞并利用?&/li&&/ol&我们先来分析杀毒软件中存在漏洞的潜在机会。&br&杀毒软件不只要对抗病毒,还要能检测木马程序、间谍软件、具备反Rootkit能力,现代杀毒软件还要确保浏览器不被安装恶意插件、扫描你的邮箱中潜在的病毒、以及智能化地分析恶意软件的行为等。其中杀毒软件检测病毒的方式有两种常用手段:特征码识别和启发式识别。特征码识别的原理是检测病毒文件中某种恶意代码的存在,但这种检测方式很笨拙,病毒制作者在病毒程序中随意加入一些无关代码就能扰乱杀毒软件对齐识别的能力。并且不同语言、不同编译器、甚至32位和64位平台下编译出来的代码都不同,靠特征码识别只能亡羊补牢,先发现后补救。而这也是数十年前,电脑病毒甚是流行的原因之一。而启发式的识别则会在一个虚拟空间内检测病毒程序的行为,解剖病毒程序的结构,从而判定是否会对系统造成威胁。熊猫烧香病毒流行的时候,微点就做到了不升级病毒库就能查杀该病毒。&br&&br&杀毒软件会提供“实时防护”,也就是当你打开程序、下载文件时,杀毒软件都会对当前操作的程序进行一次扫描,如果发现可以文件还可能进行一次启发式分析,当然这些都发生在从你双击程序到程序打开前的几秒空白时间里。短短几秒钟,&b&从杀毒软件在后台默默运行的服务到正在被监视的explorer.exe进程,从双击操作的消息被转发到user32.dll,再从CreateProcess操作跳转到杀毒软件设下的SSDT HOOK中,再从鉴定病毒到删除、处理病毒程序,每个环节都涉及高权限的操作&/b&。进入内核态之后,无论是杀毒软件,还是系统代码、驱动程序,大家都在内核态中各自穿行,一点点的不稳定因素都可以导致蓝屏,内核态的代码被注入、篡改,都能导致丢掉整个系统的控制权。&br&&br&杀毒软件所安装的驱动程序、内核钩子,所启动的服务、守护进程,都可以视作对原系统的修改。如果它们自身存在缺陷而被替换的系统组件固若金汤,那么安装了杀毒软件的系统反而更容易遭到入侵。&br&&br&总结一下就是杀毒软件本身具备高权限,如果被病毒附体,那看门人就变成了大强盗。那么普普通通的浏览器为何也能被入侵呢?&br&&img src=&/ea705e30eea7ccecb4ca19_b.jpg& data-rawwidth=&170& data-rawheight=&141& class=&content_image& width=&170&&以Chrome为例,Chrome本身具备一些安全措施,保证恶意程序不会通过浏览器释放到系统环境中。这些技术包括ASLR、DEP和沙盒等。其中ASLR全程即Address Space Layout Randomization(&a href=&///?target=http%3A///articles/uaEbEjB& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&地址空间布局随机化&i class=&icon-external&&&/i&&/a&),每次打开Chrome时其核心组件都位于内存中不同的位置,就基本消除了通过在特定位置注入恶意代码来入侵浏览器的可能。DEP即Data Execution Protection(数据执行保护),可以帮助避免Chrome在保留用于不可执行代码的内存区域中插入恶意代码。而Chrome的沙盒技术则利用了Windows所提供的安全机制来实现:&br&&ol&&li&受限的Token&br&&/li&&li&Job机制&br&&/li&&li&窗口站隔离&br&&/li&&li&桌面隔离&br&&/li&&li&一致性级别(Integrity Level)&br&&/li&&/ol&篇幅所限就不在这里一一解释所有概念,大家可以自行查阅维基百科。&br&除此之外,随着HTML5技术的发展,网页应用所能获取的本地权限也越来越多,此前Chrome就出现过授权给网页应用一次以录音权限、该应用就能持续监听用户声音的事件(&a href=&///?target=http%3A///security/2014/01/speech-recognition-hack-turns-google-chrome-into-advanced-bugging-device/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Speech recognition hack turns Google Chrome into advanced bugging device&i class=&icon-external&&&/i&&/a&)。本地缓存、硬件绘图等新组件也为浏览器带来了潜在的被入侵机会。&br&&br&现在我们可以讨论正题了,为什么说现如今取道杀软比浏览器更容易获取漏洞并利用?&br&&ol&&li&相比浏览器,杀毒软件本身具备的高权限,使病毒一旦侵入,可以获得更大的自由和活动空间,进行更大范围的监听或造成更大范围的破坏;&/li&&li&现代浏览器提供了完善的机制来对网页应用进行限制,而系统对应用程序的限制主要靠UAC和杀毒软件来保证,对高权限应用程序的需求一直存在(QQ为了防止输入密码时按键被记录,就需要部分代码运行在内核态)而网页应用理论上是绝对不能获取高权限的;&/li&&li&杀毒软件的更新频率要高于浏览器的更新频率,其中存在更多分析杀毒软件行为的机会。&/li&&/ol&虽然Chrome的安全机制也有被攻破的时候(&a href=&///?target=http%3A///article/google-chrome-hacked-with-sophisticated-exploit/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Google Chrome hacked with sophisticated exploit&i class=&icon-external&&&/i&&/a&),但即便被攻破,也只能获得中等的执行权限,要想对系统造成破坏,仍然需要经过UAC和杀毒软件的关卡。费尽心机却不能获得最高权限,作为病毒制造者,为什么不直接从杀毒软件下手呢?&br&事实上,真正盯上卡巴斯基的人,不是盗号软件的作者们,也不是白帽黑帽黑客们,而是像NSA和英国GCHQ这样的情报集团。而卡巴斯基自曝的入侵事件,也被声明是“国家级的入侵”。&br&其实漏洞这种东西,你永远不知道正在被利用、没有被公开的有多少,因为建立在软件上的绝对安全,是不存在的。
答主也是安全领域小白一枚,如有错误之处欢迎提出: ) 这个问题可以简化成三个子问题: 杀毒软件的哪些构造可能存在可利用的漏洞?为什么通过浏览器就能入侵系统?为什么取道杀软比浏览器更容易获得漏洞并利用?我们先来分析杀毒软件中存在漏洞的潜在机会。 …
Material和iOS的规范出来很久了,现在才回答他们俩的差异可能有点晚。不过近日重温了这两套规范,发现了它们俩的一些突出差异点,与楼主分享一下。&br&&br&&p&个人认为,如果说ios是清新日本妹子,那么Material就是火辣欧美女郎。两者之间有三个突出的差异点:&/p&&br&&p&&b&1.Z轴空间&/b&&/p&&ul&&li&Material,顾名思义是“材质”的设计。代表的材质是“纸张”,由此衍生出卡片(Cards)/纸片(Chips)等组件。&/li&&li&由于取材于现实世界,Material很讲究反应出组件之间的(物理世界)层次关系,典型代表就是投影(Z轴)的运用。通过控制元素的投影来反映其海拔高度,z值(海拔高度)越高,元素离界面底层(水平面)越远,投影越重。&/li&&/ul&&img src=&/f820d6c83de99fa2cf592c044cc3ba4a_b.jpg& data-rawwidth=&812& data-rawheight=&680& class=&origin_image zh-lightbox-thumb& width=&812& data-original=&/f820d6c83de99fa2cf592c044cc3ba4a_r.jpg&&&ul&&li&iOS非常扁平化,在iOS上很少看到多层不同海拔高度的元素层叠在一起,最多是两层例如Actionsheet,或者是用于举列项目的提醒事项(Reminders),很少看到页面上的元素本身是有处于多个不同海拔高度的。&/li&&li&iOS的的层叠具有半透明效果(磨砂玻璃),Material则是不允许层次之间相互穿透。&/li&&/ul&&img src=&/ccdc1e0be2ea39a058cf38c7_b.jpg& data-rawwidth=&829& data-rawheight=&715& class=&origin_image zh-lightbox-thumb& width=&829& data-original=&/ccdc1e0be2ea39a058cf38c7_r.jpg&&&br&&br&&ul&&li&即使是天气这种元素之间有递进关系的app,iOS的处理方式也非常扁平——上一层元素停靠在屏幕顶部,下一层元素上滑时消失于分界线,元素之间没有明显的Z轴关系。&/li&&/ul&&img src=&/a72b1e18433db7bdc17dd9e10364fded_b.jpg& data-rawwidth=&368& data-rawheight=&643& class=&content_image& width=&368&&&br&&br&&br&&p&&b&2.动画&/b&&/p&&ul&&li&Material强调动画要贴近真实物理世界,所有的动画都与现实生活有关联,具体形象指示性强(但过多的动画难免会显得繁琐低效)。例如,点击任意的元素,都应伴随着水波涟漪的动画效果;界面切换的过渡动画中,对象会放大缩小变形折叠(Material的材质特性),或者发生Z轴的变化(例如进入二级页面时,二级页面沿Z轴上升浮起伴随有投影效果)。&/li&&/ul&&img src=&/2ece338fd051bdce46cf54af_b.jpg& data-rawwidth=&874& data-rawheight=&399& class=&origin_image zh-lightbox-thumb& width=&874& data-original=&/2ece338fd051bdce46cf54af_r.jpg&&&ul&&li&iOS强调以内容为主,动画干净利落,不作过多的修饰(以免分散用户注意力)。淡化(Fade)、推挤(MoveIn)、揭开(Push)、覆盖(Reveal),结合进出的方向(上下左右),就构成了iOS最常用的过渡动画。&/li&&li&当然,iOS也有一些拟物化的动画,用于增强直接操作的感觉,但使用的地方并不广泛,往往是用于特定类型的app(例如ibook的翻页动画)或是图标之间的变换。游戏另当别论。&/li&&/ul&&br&&br&&p&&b&3.配色&/b&&/p&&ul&&li&Material提倡在大片区域使用醒目、高饱和度的色彩以表达应用的张力,尤其是主要操作按钮以及组件(如开关),特别需要用到对比度强烈的强调色。&/li&&li&Material建议基础色的饱和度为500(use the 500 color of the primary color of your app),其他元素以此为基准调整饱和度,而主操作则配以强调色反(或作补色)。&/li&&/ul&&img src=&/6ac64b6a823e9caab344b9_b.jpg& data-rawwidth=&750& data-rawheight=&454& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&/6ac64b6a823e9caab344b9_r.jpg&&&br&&ul&&li&iOS并没有提倡用使用低调或鲜明的颜色,它只希望设计师们用色时要注意温柔细腻的质感。选择一种颜色作为基准色后,需要确保应用中的其它颜色不会与它发生冲突(更别使用补色了)。这样的例子随处可见,例如系统自带的calendar,应用以红色为基准色,每个组件、界面都是红灿灿的,我们不会在这里看到任何绿色(补色)的元素。&/li&&/ul&&img src=&/bfd3fe319be2b_b.jpg& data-rawwidth=&755& data-rawheight=&650& class=&origin_image zh-lightbox-thumb& width=&755& data-original=&/bfd3fe319be2b_r.jpg&&&br&总而言之,我无法直接评论iOS与Material孰优孰劣,两者风格迥异的,即使是小细节抠出来也不能单纯地做出优劣评判,因为它们的设计思路本身已经决定了细节。只能说,iOS扁平简洁,Material贴近真实世界。&br&回答的拙劣,请多多指教。&br&&br&&br&&p&&b&附:&/b&&/p&&p&iOS设计规范-&a href=&///?target=https%3A///library/ios/documentation/UIKit/Reference/UIKit_Framework/index.html%23//apple_ref/doc/uid/TP& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UIKit Framework Reference&i class=&icon-external&&&/i&&/a&&/p&&p&Material设计规范-&a href=&///?target=http%3A///design/spec/material-design/introduction.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Introduction&i class=&icon-external&&&/i&&/a&&/p&
Material和iOS的规范出来很久了,现在才回答他们俩的差异可能有点晚。不过近日重温了这两套规范,发现了它们俩的一些突出差异点,与楼主分享一下。 个人认为,如果说ios是清新日本妹子,那么Material就是火辣欧美女郎。两者之间有三个突出的差异点: 1.Z轴…
&p&一般当你的几个int变量存在竞争又没有互相耦合的时候&/p&&p&C#:用volatile就可以了&/p&&p&C++:得用interlocked操作&/p&
一般当你的几个int变量存在竞争又没有互相耦合的时候C#:用volatile就可以了C++:得用interlocked操作
&p&作为有类似遭遇的应聘者,我是非常支持 Max Howell 的。&/p&&br&&p&### 为什么很多人理解不了 Max Howell 通不过白板编程面试&/p&&br&&p&这个事件在国内也引起了很大讨论,各大社区都有,以下主要总结 [如何看待 Max Howell 被 Google 拒绝?]( &a href=&/question/?rf=& class=&internal&&如何看待 Max Howell 被 Google 拒绝? - 互联网&/a& ) 里的讨论,态度主要分为以下两派:&/p&&p&1. 大多是惊讶或者调侃大牛居然连这个算法里的基础题也做不出来,有讨论具体算法细节的,也有发明段子讽刺连面试官给你放水都还帮不了你。&/p&&p&2. 小部分人怀疑白板面试是否真的能很好的筛选人才,毕竟没有多少项目经验的做过算法功课的应届生也可以做到通过这种白板算法面试。 &/p&&br&&p&很不幸的是,我并没有看到更多有分量的开源软件牛人(像 Max Howell 作出 Homebrew 这样巨作的,上了 Github 排行榜的)出来支持 Max Howell 的观点。这也说明了程序员的地位相对企业的地位而言是远不如的,更多聪明的人是选择了沉默,我也听说过[为什么优秀开发者进入Google后就不参与开源了](&a href=&///?target=http%3A//timyang.net/google/open-source/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&为什么优秀开发者进入Google后就不参与开源了&i class=&icon-external&&&/i&&/a&)。&/p&&br&&p&我想这个是有本质原因的,那就是开发复杂且优雅的软件系统 和 在脑子里背下各种计算机科学的算法 是矛盾的。这不是说复杂且优雅的软件系统不需要算法,而是算法已经被工程化地内含在项目里了,项目和代码都是真实世界里存活的东西,而纯粹算法代码只是存活于阉割版(用的字符最精简)证明理论里的,只是被人们用于口头交流功用而抽象出的逻辑沟通系统,但却不是用于真实业务代码的理解和修改之用的。不得不承认的是,真正能做出复杂且优雅的软件系统的人比例很少,我指的是写出真正流行的框架和语言的那些人,没错,就是你平时用的那些,所以别太指望有很多人真的能理解 Max Howell 为什么就通不过白板编程面试呢。举个有意思的例子,你会发现有名的开源软件写的代码,和通常算法里写的代码完全是两种路子,虽然从狭义的算法原理上看干的是同一件事,但是前者是富有层次的工程结构,而后者则强调把全部细节都放在脑子里直观地去一次性理解,所以这也是很多初中级程序员啃不下开源代码的原因。&/p&&br&&p&在面试这种紧张(其他的还有考试和演出等)情况下 ,其考察的是肌肉记忆能力,而不是分析和创造能力。即使在面试中能写出完全正确的算法逻辑代码,那么对该人的程序创作能力也是有损伤的,所以白板编程面试是考察候选人能力的下策。&/p&&br&&p&上策是考察过去项目经历,从而推断出其经验和学习能力;其次才是是通过一些实际或虚拟问题去考察。这两者都应该建立在双向沟通反馈上,才算的上是合格的面试。&/p&&br&&p&最后补充一条信息,一年多前我也发过 “ [面试时候如何用 Ruby 写一个最短二分查找代码]( &a href=&///?target=https%3A//ruby-china.org/topics/16601& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&面试时候如何用 Ruby 写一个最短二分查找代码&i class=&icon-external&&&/i&&/a& ) ” 文章来描述去某公司面试时的在算法流程上的失败。当时我是写 Ruby 的,面试官是写 Python 的。摘录文章最后一小段,“最后面试官总结我应用或Rails方面的经验比较多,但是算法不太行,他准备和CEO再讨论看看。于是我咨询他公司技术部有哪些算法工作,他提了一个数据排重,然后我说如果准确度不太要求的话,可以用bloomfilter进行过滤。但是他坚持这一轮面试结束了,于是只能出门和他道别了。”有讽刺意味的是,在我加入新公司半年里就用 Python (进入公司当天我就现学 Python 干了一个统计的活了)实现了 百万题库排重算法(相同题目因为各种原因导致进入题库后有微小差异)的开源框架,源码地址在 &a href=&///?target=https%3A///mvj3/detdup& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&mvj3/detdup · GitHub&i class=&icon-external&&&/i&&/a& ,演讲稿在 &a href=&///?target=https%3A///mvj3/detdup& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/mvj3/de&/span&&span class=&invisible&&tdup&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 。多说几句,目前我的工作内容大部分都是在 Hadoop 上实现离线业务模型,并自己在写了一个不错的 DAG 任务管理框架,地址在 &a href=&///?target=https%3A///17zuoye/luiti& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&17zuoye/luiti · GitHub&i class=&icon-external&&&/i&&/a&
。对 Hadoop 的上手时间基本等同于熟悉一个 Python 类库的时间,再继续上手 Spark, Storm 也是不在话下,而这恰恰是有些看上去熟悉算法的人不容易做到的。&/p&&br&&p&### 关于 Invert Binary Tree 的技术讨论&/p&&br&&p&首先是 [Invert Binary Tree] 的递归版本,虽然我之前从来没有做过这个程序,不过在
LintCode 上读了需求后,用 Python 第一次写就通过了,&a href=&///?target=http%3A///submission/630731/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LintCode - Coding interview questions online training system&i class=&icon-external&&&/i&&/a& ,但是脑子里还是慢慢反应一下,甚至还不太自信。&/p&&br&&p&其次是 [Invert Binary Tree] 的非递归版本,即是用栈实现的,我没想出来,主要想法是因为每个节点最多有两个子节点,是不是用数组来模拟索引啥的。因为不是实际想做的,所以和平时工作学习一样,直接搜索了,是用 Stack 实现,其逻辑大概稍微复杂了一点。总之,凭我的经验,是需要一些时间来突然顿悟这个算法是怎么回事的,但是我知道过段时间我肯定忘了,所以就不想了。&/p&&br&&p&最后是关于 Google 面试官考察的到底是不是
Invert Binary Tree。我看到 Max Howell 给某人的回复是 &min-max the tree, ascending to descending&,地址在 &a href=&///?target=https%3A///mxcl/status/170944& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/mxcl/status&/span&&span class=&invisible&&/170944&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 。这样听上去好像是要做个上下翻转,而不是左右翻转,这可能是 Max Howell 没说清问题,也可能就是本身问题描述就不是一下子能说清的,那么请考虑在如何实现时就需要去理顺更多细节,可想而知会更容易出错了。&/p&&br&&br&&p&### 傲娇的人只是对事情更认真而已&/p&&br&&p&有些人说 Max Howell 是大牛,被考察一个简单的 Invert Binary Tree 太不上档次了。&/p&&br&&p&对于这个问题,我首先强调的是,优秀是一种习惯,同样一个人的代码风格往往是一致的,更深一点理解,TA 解决问题的范式都已经形成了自己的一套经验体系。所以大牛去写一个算法,通常是工作中的,那么必然是考虑到各种和其他模块如何整合,API 是如何的形式,而自身的代码组织逻辑又是如何自恰。举个象棋或围棋的例子,虽然规则大家都懂(这个类比到算法的步骤),但是大师看布局的角度和一般人的是完全不同的(这个类比到有人觉得 Homebrew 没啥复杂技术,可是却不是一般人能做出来的),而且也不太好解释(要知道机器至今在围棋成绩上仍远远落后于人类水平)。所以突然把大牛放到一个陌生的工作模式里,即是换成教科书的算法步骤思维,并且是面试的场景,而且是短时间,做不出来是很正常很可以理解的事情。要知道真正一个算法整合到实际项目里是得花很长时间的,里面涉及到不断的反复构思和调整。&/p&&br&&p&有些人说 Max Howell 傲娇了,但他其实已经做了算法面试准备了(A good thing that came out of it is, I *did* prepare, and actually I found a bunch of common algorithm problems a lot of fun. Will continue.
&a href=&///?target=https%3A///mxcl/status/276224& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/mxcl/status&/span&&span class=&invisible&&/276224&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)。而且大家得注意一个事实,工作多年的人去复习算法和训练专门用于测试的思维方式是有时间成本的,相对来说应届生的时间成本就少多了,专门做算法的人在此不谈(TA们的软件工程水平相比而言也是低一点的)。算法确实很有意思,这两年我也在提高,它仅仅是解决问题的关键之一,而且大部分场景下,刻意的教科书算法对于工程来说都不是关键的。&/p&&br&&p&说一下我个人对编码面试的观点,我热于在实际工作中接受任何相关项目的挑战,但是我不想做无用的压抑的耍猴游戏(可能也和我不喜欢玩电子游戏有关)。&/p&&br&&br&&p&### 面试时气场不合是个关键问题&/p&&br&&p&很多时候人都是相当情绪驱动的,我人生经验里有一个让我震惊的观点是,有些我认为是应该非常理性的人居然也很坦率地承认自己对这个问题就是感性的。Max Howell 的气质是偏艺术家型的(这里有他在 Github 的演讲视频 &a href=&///?target=https%3A///results%3Fsearch_query%3Dhomebrew%2Bmax%2Bhowell& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/results?&/span&&span class=&invisible&&search_query=homebrew+max+howell&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& ),我猜测 Google 的那个面试官是偏死板的工程型的。所以如果和面试官气场不和,我理解是主要是TA感受不到你在TA未来的控制(中性词)范围内。&/p&&br&&p&我一直有个疑问,对于一些很有想法的人(理解 Max Howell 的个性看他个人主页的色彩设计就知道了 &a href=&///?target=http%3A//mxcl.github.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&mxcl&i class=&icon-external&&&/i&&/a& ),面试官在看到简历时,为何不直接拒绝呢。还有另一个可能性是,一个面试官去面试可能是别人要求去的。如果让对方来了,为何大家不和和气气好好沟通呢,面对一个可能是未来的同事,非得拿那些刁钻的题目来为难对方呢(举个人人努力一下都会做的算术题,比如 7*19 比 200*300 难多了,虽然同是两个数,而且前者数还小),工作应该是快乐和有激情的啊(有些人其实是在组织里很压抑的)。&/p&&br&&p&举一个我认为相当侮辱人的程序员段子,美女来面试,连不会写 HelloWorld 都能过(所谓程序员鼓励师),长相不好看的来面试,一定得拿红黑树来压制。虽然大家都当是个笑话,可是也折射出一些潜在的不良价值观。我理解 culture fit 是个一直都存在的常见问题,但是我还是觉得工作能力优先,这样才不会劣币驱良币。有一个调查是全球盲人比例约为千分之五,而城市道路上基本都人性化的加上了盲道,从道德上来说,应该谴责强势雇主在性格上歧视应聘者,另外我也相信大多数人还是知趣的吧 :)&/p&&br&&br&&p&### 其他一些关于面试的问题&/p&&br&&p&我看到一篇看上去很好的文章 &a href=&///?target=http%3A///blog//developer-interviews-are-broken-and-you-cant-fix-it& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Developer Interviews are Broken, and You Can't Fix It&i class=&icon-external&&&/i&&/a& ,主旨是讲面试流程无论如何改进,都是有缺陷的。我的想法是,这真的是典型的逻辑式废话,从各种利益权衡来证明现有的制度是合理的和没办法的,同时为了公平性而不能更改任何细节。&/p&&br&&p&我唯一的想法是,很直观的,一个大牛活生生的站在你的面前和你善意地沟通,同样希望得到一些相互的尊重,而面试官却非得照着一个脆弱的流程,去让自己和大牛都去适应这个规范(虽然实际工作时大家都是很灵活的),让旁观者也是干着急啊。&/p&&br&&p&有必要我可以逐条反驳文章里我认为不妥的意见。&/p&&br&&p&&b& 更新: 在 &a href=&///?target=http%3A///t/reply19& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&为什么很多人理解不了 Max Howell 通不过白板编程面试&i class=&icon-external&&&/i&&/a& 还有一些我的回复。&/b&&/p&
作为有类似遭遇的应聘者,我是非常支持 Max Howell 的。 ### 为什么很多人理解不了 Max Howell 通不过白板编程面试 这个事件在国内也引起了很大讨论,各大社区都有,以下主要总结 [如何看待 Max Howell 被 Google 拒绝?](
最著名的不是彩蛋,而是一个设计失误……&br&&br&就是仙剑1蛇妖洞窟,蛇妖起居室的后面的房间可以看到满地的金银财宝,保守估计也价值50万两银子,但是找不到后面房间的入口。那个年代的人都很骨灰,所以全国人民开始地毯式搜查,并穷尽各种剧情上的可能性,以免漏掉支线剧情。&br&过了很久从大宇传来消息,美工设计地图的时候,觉得起居室后面空空的太难看了,就用宝箱填满了空间……
最著名的不是彩蛋,而是一个设计失误…… 就是仙剑1蛇妖洞窟,蛇妖起居室的后面的房间可以看到满地的金银财宝,保守估计也价值50万两银子,但是找不到后面房间的入口。那个年代的人都很骨灰,所以全国人民开始地毯式搜查,并穷尽各种剧情上的可能性,以免漏…
大家想得太复杂了。&br&&br&这葫芦是太上老君炼丹用的,设计之初就没考虑到人机交互。后来银角童子把它盗出来,加了个输入输出模块,其实原理是这样的。&br&&br&&div class=&highlight&&&pre&&code class=&language-text&&char foo[16];
printf(&%s\n&, &叫你一声你敢答应吗?&);
scanf(&%s&, foo);
&/code&&/pre&&/div&&br&其实压根就没有判断这个人是不是这名字,只要你应了就吸,你不应程序就卡在那儿走不下去。&br&&br&所以么,孙猴子就是好面子,如果二话不说直接上去一顿闷棍,金角银角早求爷爷告奶奶了。或者可以说个奇长无比的名字,也可能导致内存越界,但这个结果行为就不确定了。&br&&br&有人说还有人脸识别什么的,但是就这么一个葫芦,又不是联网的智能家居,去哪里更新人脸数据库呢?所以完全没必要,本地做个应答判断,装逼效果不一样一样的么。
大家想得太复杂了。 这葫芦是太上老君炼丹用的,设计之初就没考虑到人机交互。后来银角童子把它盗出来,加了个输入输出模块,其实原理是这样的。 char foo[16];
printf("%s\n", "叫你一声你敢答应吗?");
scanf("%s", foo); 其实压根就没有判断这个人是不是…
已有帐号?
无法登录?
社交帐号登录
110 人关注
107 条内容
612 条内容
213 条内容
1078 人关注
824 条内容

我要回帖

更多关于 怎么理解面向对象编程 的文章

 

随机推荐