gitbook/面试现场/docs/91908.md
2022-09-03 22:05:03 +08:00

78 lines
8.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 30 | 面试答疑(三):如何更好地体现你的能力?
## 写在前面
你好,我是白海飞。今天是面试答疑时间。
专栏更新接近尾声,而我发现大家的回复中,直接问的问题越来越少,总结和思考越来越多,而且读过之后,让人受益匪浅。留言中问的很多问题很有针对性,我反复斟酌,筛选了一些在这里我们一起探讨下。
## 问题答疑
#### 1\. 为什么要考查逻辑思维能力?
> “为什么面试要考逻辑题呢?”
这涉及编程技能和逻辑分析能力的关系。考逻辑题,最根本的目的是想看你聪不聪明。聪明的头脑,可以更快更准地理解、表达、分析和解决问题。
计算机编程,是一门技术活,那些把编程说成“搬砖”的人,很可能还没有为复杂的问题写出过高效的代码。一个好的程序员,应该有清晰的逻辑分析能力。
我在面试时,除了考查应聘者的计算机基础(操作系统、编程语言、算法、网络等),还会检查他的逻辑能力:包括表达、思考。这有两种考查方法:一是看回答时的反应和思路,二是直接考查逻辑、算法或者智力题。
我在面试过程中其实不太在意对方回答的结果是否正确,而主要看他如何理解这个问题,采取了哪些有意义的尝试,在碰壁之后如何自我修正,逐渐接近合理的答案。这个过程,能反应出应聘者是否能锲而不舍地从多方面看问题,思考过程是否有条理、成体系,是否在用计算机思维思考问题。
说到计算机思维,我们来说一下如何培养计算机逻辑分析能力。还记得离散数学这门课吧?我认为,这门课奠定了计算机思维的基础。无论是计算机原理、编程算法,以及复杂业务逻辑实现,都离不开离散数学里讲的逻辑。我的感受是,它让我能够按计算机的思路去思考生活中的问题。
经常看到有的程序员长时间停留在只能编简单的类或写简单的SQL的水平碰到复杂算法和架构就头痛甚至调程序都困难追根究底是计算机思维这块存在欠缺。如果你转行学计算机而且想打好逻辑训练基础的话可以学学离散数学。
#### 2\. 我讲不清楚东西,怎么走出单纯听别人讲的状况?
> “我不擅长讲东西,工作内容讲得一般,生活小故事也讲不清。所以更喜欢听别人讲,然后自己去梳理逻辑。这个怎么调节呢?”
这是上个问题的延伸,也涉及逻辑分析能力。
有时候,听一个东西,我们以为自己理解了,其实只是当时大脑按照讲解者的提示,走通了,新知识并不一定和已知的知识体建立了连接,这样过后儿自己回想,可能就又糊涂了。而且,你如果要讲出来的话,得把新知识按某条逻辑组织起来,捏着某个点提起来,这其实很考验对知识的“连接”程度。所以才听懂容易,讲明白难。
想提高的话,还是得多练。比如,故事复述,给别人讲题,口述笔记……一开始讲不流利,没关系,先写出来,把节奏放慢,一边写一边思考前后怎么衔接。不妨先从百字的小段落做起,贵在坚持,三个月后再来看看效果。
#### 3\. 如何体现我的“资深”?
> “请问,高级和资深如何在简历中体现?”
所谓“高级”“资深”,在简历中,体现在工作范围和难度方面。想一想在你的职位级别上,你解决过哪些领域的问题,并且有哪些是复杂的、有深度的、有难度的、有意义的工作。比如,你是一位工程师或者技术骨干,你有没有做过设计、问题分析、改造缺陷等工作内容。再比如,你只是在兢兢业业地完成分配的任务,还是会关注跨领域、跨团队、跨专业的工作?这些问题的复杂性、挑战性在哪里?另外,“贯通篇”中提到的几种能力,做好了,就可谓是高级和资深了。
有位用户说,“一份儿优秀的简历最重要的是背后这个人是优秀的”。这句话的含义是说,简历得由能力和经验支撑。所以,工作中我们不断挖掘自己的潜力,扩展工作范围,去尽量探索和完成一些挑战性的的工作,才能让自己技术有宽度,业务有规模,解决的问题有复杂性,带队有规模有成长……这些都能体现出“高级”和“资深”。
注意,“高级”和“资深”不能只看工作年头,也不能只看某一个种能力。
#### 4\. 如何把兴趣爱好发展到产出层?
> “我有不少兴趣爱好,但都是处于消遣娱乐的层次,怎么进入生产稳定的层次呢?”
其实,爱好,本来就是以消遣娱乐为目的的,不一定非要进入产出层,所以没有产出层的爱好,一点问题没有。因为这仅仅是个爱好呀,谁给我们压力说某个爱好做不好,就怎么怎么样?
但是有的人即使在没有任何压力的情况下也会自愿追求一种更高层面的消遣娱乐心理成就感甚至自我实现而不是单纯停留在感官娱乐上。比如滑雪已经不满足于滑行的快感而是追求Get各种技能或者得到更多的赞美或者教会其他人交更多的朋友。这样一来他自己“玩出花样”努力做到更好自然而然地就进入了产出层。
可以看到,“主观、自愿”这点很重要。是什么因素在推动着“自愿”行动呢?首先要有对这个爱好的热情,或者目标感和认同感;然后是自律,能在困难和辛苦面前,持续努力;再就是追求成就感,也就是精神上的收获,进而让你的身心处于一种“心流”状态,而这种状态可以促使你自己更加努力,不断冲向下一个目标。所以,是热情、自律、成就感这些内驱力,让你把对爱好的追求上升到“心流”的层次,水到渠成地收获更多产出。
#### 5\. 我没有时间做精益提高
> “对于996的工作来说时间都被新需求的开发或者Bug占用了这样的场景下即使找到了可提高的点对于实现来说恐怕没有时间挤出来做出改变……面对这些情况应该如何去做为好
解决好这个问题,我个人以为主要看团队的做法,个人能改变的空间比较小。
代码里可提高的点,我们称为“技术债”。对于技术债,敏捷开发里的做法,是和业务需求放到一起排优先级,然后放到迭代里做。一个迭代中给技术债的占比设置一个合适的值,这样,达到做新需求和改造旧代码的平衡。
当然这有个前提就是需要产品经理认可解决技术债的重要性。如果项目业务压力过大产品经理往往更关注在功能产出上而忽略了产品的“内功”。长期下去代码越来越难维护Bug越来越容易出现开发效率会严重降低。这时候再关注技术债就要动大手术了。
我们很多项目都是这样一步步变得“不可救药”的。为了持续满足客户需要大家996地面向Bug编程本来可以半小时搞定的编码工作可能需要一整天还要解决几个毫无头绪的新Bug。这样的加班对自己的技术积累确实没多少价值。
所以如果有加班应该是为了“减少加班”而加班。首先通过梳理客户需求按照价值优先级去实现而不是眉毛胡子一把抓不要什么都做。不要在计划中用加班去实现需求奖励大家去解决技术债去优化代码。如果大家用加班的时间去解决技术债不要打击大家的激情。随着代码质量的渐渐提高Bug越来越少需求会实现得越来越快。当然这中间有很多问题要考虑很考验业务团队的耐心以及开发团队的决心。
## 写在后面
今天的答疑就到这里。你可能发现,今天这篇答疑的内容,都和我们专栏自始至终强调的“能力”相关。所谓,面试不只是临时抱佛脚的事,让别人认可你的能力,不能仅靠“说”的功夫,重要的前提是能“做”。
“做”是根本,把你做出的工作成果、解决问题的过程、选取方案的原则,甚至失败的尝试,能系统地总结,有条理地讲出来,改变大家的认知和做法,获得面试官的认可,是对大家学习这个专栏的期望。阅读专栏至今,你觉得自己有没有哪里做得更好了呢?或者意识上有了些改变?
最后,如果今天的文章让你有所收获,欢迎在文章下方留言,也欢迎把它分享给你的朋友,一起探讨提高。