文档章节

怎么面试架构师

nerozhao
 nerozhao
发布于 2015/06/15 20:57
字数 3408
阅读 538
收藏 36
点赞 0
评论 4

其实本文想说的是:当面试一个架构师的时候,我们应该问什么问题?我觉得,问什么样的问题,体现了team leader更加看重架构师的哪些特点。

我一直认为,做技术就跟练武一样,在练武的不同阶段,分招式和心法。技术也一样,在不同的阶段,也分招式和心法。另外,就我个人而言,经常忘记招式,一方面可以说十二年来,我用过的招式很多,到了现在也不记得几个。另一方面我自己也不会特意去记。事实上,十二年代码写下来,我反而越来越不关注招式,而是越来越关注如何解决问题,也就是心法。所以我作为team leader的时候,我会更加看重这个架构师候选人是不是有一套属于自己的心法。

上面说的听着很玄,下面我就直接回到正题:我们面试架构师候选人时,应该问什么样的问题?




大致会有几种类型的问题:

  1. 当前技术领域中的一些技术细节

  2. 算法和数据结构

  3. 方案设计思路




当前技术领域的技术细节类问题

针对第一类问题,我认为是很有必要问的,架构师对技术细节的理解,是很能够影响他做架构时的设计思路的。毕竟每一个领域都有不同,了解不同领域的差异,以及特定领域的技术细节,很影响架构时的设计思路和实现手段。

然而,这并不是鼓励大家去挖出各种细节的问题,然后去考察架构师候选人,这里需要有一个度。举个例子:


你如何去把一个view的所有subview清空?


  1. 如果知道NSArray有makeObjectsPerformSelector这个方法的人,他们能够说出直接使用这个方法,然后在selector里面写removeFromSuperView的selector,就好了,而且很省事,一句话就搞定。

  2. 如果知道NSArray有enumerator方法的人,他们会说出使用这种方法枚举每一个subview,在block里把removeFromSuperView调用起来,也差不多两三行的事儿。

  3. 不知道NSArray有上面这些方法的人,他会说用for...in...的方法遍历,然后取到这每一个subview,让他们执行removeFromSuperView。可能要花费大概四五行。




这几种答案谁的更好?在我看来一样好。为什么?

因为这个问题其实考察的是这个人知不知道某个方法,当然你可以说他知道这个方法是因为他仔细看过文档或者头文件。但除了这个以外,这个问题对判断这个人是不是一个合格的架构师没有任何意义。架构师的任务在于使用合理的手段完成架构的任务,上面三种做法都是合理的手段,只不过是实现技巧上的不同而已。

这样的问题还可以拓展开来:你完全可以问一个架构师候选人某一个领域的这种类似问题,而恰好你比他熟悉,如果候选人答不上来,你会认为他可能在这方面花的时间还不够,这方面的理解不够深,导致减分。但如果答上来了,有可能加分有可能不加分。

然而,这一切并没有什么卵用。如果角色对调,让候选人来面试你,他完全可以问出各种这样类似的问题,一样让你抓耳挠腮百思不得其解。那么该如何考察一个架构师候选人对自己领域中技术细节的理解呢?我们来看下面这些问题:


你觉得block当初是为了解决什么样的问题而设计的?你如何区分何时使用block,何时不使用? 
你觉得ReactiveCocoa当初是为了解决什么样的问题而设计的?你何时会考虑使用RAC,何时不用? 
你觉得MVVM这样的思想是为了解决什么样的问题而产生的? 


答案在本文不是重点,当然如果各位对答案感兴趣,可以在评论区问一下,我在评论区回答。在我遇到的各种面试官中,我从来没遇到过能问出这样类似问题的面试官 。我面试别人的时候,我问过这种比较侧重对某一项技术的理解的问题,有人能答好有人答不好,然后从招进来的人看,当初答好这种问题的人,后来都在团队中起到了顶梁柱的作用。答不好这样问题的人,但是他们因为知道很多技术细节,也还是招进来了,虽然也能很好地完成需求和任务,但是代码结构、设计思路都会有或多或少的缺陷,写出来的组件在使用上也会感觉怪怪。

所以,考察一个架构师候选人在某一领域的技术时,通用的技术细节的问题可以问一下,偏门的技术细节问出来就很没有意义。一个架构师最关键的是他对技术的理解深度,理解深刻的人,才能写出简单易用易拓展的架构。然后面试官需要区分好问题,有些问题是属于“知道、不知道”,有些问题是属于“理解、不理解”,对于面试一个高级工程师来说,可能会比较偏向前者,因为他需要知道足够多,然后完成需求的速度才快,不需要总是去Google。但对于面试一个架构师来说,其实大部分基础知识应该是已经具备了的,不至于写个TableView还要去翻Google。但在做SDK的时候,是会遇到一些偏门问题的,是需要去Google的。但架构师跟高级工程师的区别就在于,架构师知道该往哪个方向去Google,能够把握住问题的实质去解决问题。所以对于考察架构师而言,应该更加偏向后者,理解和不理解。

回想一下,其实有很多类似知道、不知道的问题,你是在code review中,其他人的博客中,文档中就能学到的。但是那些理解、不理解的问题,其实大部分都是你多年代码的经验思考出来的,即便你去看了博客看了文档,该不理解的还是不理解。而作为一名架构师,真正要考察的就是理解、不理解的问题。所以你明白,为什么当初那些技术细节答不上来的人,但是对技术理解很深刻的人能成为顶梁柱,成为架构师。而技术细节知道很多,但技术理解不深刻的人还是只能做高级工程师的原因了吧?



算法和数据结构类问题


第二类问题,算法和数据结构相关的问题。这种问题也是很需要问的,但似乎现在在社招的时候会问这种问题的面试官不太多,只有在面试比较初级的人或者应届生的时候才会拿来问。

我觉得面试官即便在面试架构师的时候,还是要问这样的问题的,只是要注意考察侧重点。一个架构师如果不了解数据结构和算法,那他真的很难做出靠谱的架构,毕竟很多SDK底下充斥着各种各样的数据结构,而且有经验的人都很清楚,对于一类数据而言,不同的结构设计或表达方式,很影响最终实现的方案的优雅程度。所以我们面试架构师时,侧重点在于,对于某个问题,你如何去选择合适的数据结构,合适的算法来解决这样的问题。

但是,在面试应届生时,我们问算法和数据结构问题时,其实更加关注的是他的动手能力,给一个很简单的问题,然后让他把代码写出来,或白板,或IDE。就国内大部分公司招聘的情况和其公司自身的情况来看,如果你学facebook/google那样出算法题,你基本上招不到人。因为会这些题目的人,都在facebook/google那儿排队呢。

然后算法和数据结构相关的问题第二个考察点在于,候选人的思考是否足够细密。这个不管是对架构师候选人,还是对应届生还是对社招的高级工程师而言,重要程度都是一样的。这个就不多说了。

你让一名架构师候选人在面试的时候做一个华容道算法,在你而言其实是对他的一种鄙视,在他而言他也很有可能写不出。但如果你让一名架构师候选人在面试时候展示他对各数据结构的理解,不同场景下如何设计合理的数据结构和算法,如何权衡时间与空间的取舍,这才是对他的一种重视。



方案设计思路类问题


第三类问题,方案设计思路。大概一年以前我在面试携程的时候,遇到过面试官问我这种问题,其它我就没有遇到过了,一般都是我在自我介绍的时候主动挑一个去讲。我在面试别人的时候,我也会问这样的问题,比如说:


对于一个app的网络层,你在设计时,你会考虑哪些问题? 
对于一个app的持久层,如果让你直接用sqlite,你如何设计版本迁移方案? 
工作中,你会采用哪些手段来做解耦? 

严格来说,大部分面试官也会问这样的问题,但是是看到你简历上写过你有这个经验,然后直接问这个方案你是怎么做的,而不是问这个方案你是怎么设计的。在我看来,大部分方案的实现其实没有什么技术含量,真正有技术含量的地方在于,拿到这个问题时,你是如何思考的。就比如数据库版本迁移方案,设计的过程是很艰苦的,但设计完毕实现的时候,就是码代码,不能说完全没有技术含量,只能说实现的时候所需要耗费的脑力跟设计时候比,差太远了,在我看来属于没有什么技术含量。

说到技术含量的事情,我也遇到过特别多的面试官喜欢问这个问题:过去你解决了哪些比较有技术含量的问题?我一般不会拿这个问题去问候选人,因为我觉得真的到了代码层面,是基本上不存在技术含量的概念的,码代码这个工作本身,就是用计算机能懂的方式告诉计算机应该怎么做事,其实就是一件很没技术含量的事情。

所以我认为的技术含量是,你如何去设计一个靠谱的解决方案,这个解决方案足够周密,思考足够长远,提供的API很好看,代码很容易阅读,很好维护。

还有就是逃不掉的23种设计模式。设计模式这种东西早年被业界说了很多,都说烂了,但我不否认的是,这种对设计方法的总结,是每个架构师的起步和入门。如果一个架构师连什么场合使用设么设计模式都分不清楚,各种设计模式他的设计初衷和希望解决的问题都不知道,那他算是不合格的架构师。然而面试官也很少会去问这样的问题,一方面可能觉得问这种问题很low,另一方面其实也有少部分面试官对设计模式仅仅处在了解和知道的情况,不敢随便拿出来问。



总结


面试架构师其实是一件不容易的事情,能考察架构师候选人实力的面试官,首先自己就已经对架构本身有了很好的理解,就应该是一个合格的架构师,其次是需要足够务实,有合理的手段合理的问题,通过面试来了解候选人是不是一个适合做架构师的人。最后,要有足够识人的眼光以及合适的判断标准,通过候选人的回答,对候选人进行筛选。从我对目前面试的情况来看,对这个我持悲观态度。大部分面试官给候选人的感觉更多的是:我问你一个这个问题,看你知不知道?而不是:我问你一个这个问题,看你怎么去思考?

架构师和更高级的高级工程师之间,还是有区别的。所以各家公司如果要想找到合理靠谱的架构师,还是很不容易的。


本文转载自:http://casatwy.com/zen-yao-mian-shi-jia-gou-shi.html

共有 人打赏支持
nerozhao
粉丝 10
博文 30
码字总数 5823
作品 0
武汉
程序员
加载中

评论(4)

乌龟壳
乌龟壳
设计模式有啥好问的?
开源无憾
开源无憾
首先要嘲讽和鄙视他
nerozhao
nerozhao

引用来自“yaray”的评论

很多人关注的是你做了什么,比较少的人关注的是怎么做的。

所以问怎么做的公司level才更高嘛
zigzagroad
zigzagroad
很多人关注的是你做了什么,比较少的人关注的是怎么做的。
怎么面试架构师

其实本文想说的是:当面试一个架构师的时候,我们应该问什么问题?我觉得,问什么样的问题,体现了team leader更加看重架构师的哪些特点。 我一直认为,做技术就跟练武一样,在练武的不同阶段...

java大哥 ⋅ 2017/10/17 ⋅ 0

如何面试架构师

其实本文想说的是:当面试一个架构师的时候,我们应该问什么问题?我觉得,问什么样的问题,体现了 team leader 更加看重架构师的哪些特点。   我一直认为,做技术就跟练武一样,在练武的不...

CashCat ⋅ 2015/06/18 ⋅ 0

一张图告诉你什么是系统架构师

image.png 这张图从架构师的综合能力、岗位认识、岗位职责等方面,清楚的画出了作为一个架构的基本准则。人人都想成为架构师,可作为架构你达到了上面的要求了吗? 系统架构师是个神奇的岗位...

架构之路 ⋅ 01/08 ⋅ 0

BAT资深架构师告诉你从程序员到架构师,你需要掌握什么能力?

1、开发者和架构师之间最大的区别是什么? 架构师和开发者一样,也经常写代码,简单的说,开发者和架构师之间最大的区别就是技术领导力。 软件架构师的角色需要理解最重要的架构驱动力是什么...

马蹄上的茉莉清香i ⋅ 05/31 ⋅ 0

BAT资深 架构师告诉你从程序 员 到架构师,你需要掌握什么能力?

1、开发者和架构师之间最大的区别是什么? 架构师和开发者一样,也经常写代码,简单的说,开发者和架构师之间最大的区别就是技术领导力。 软件架构师的角色需要理解最重要的架构驱动力是什么...

原来是泽镜啊 ⋅ 05/31 ⋅ 0

一位五年工作经验架构师的感悟

架构师的成长之路是怎样的呢,请看看五年陈架构师写的感悟吧。 写给五年陈的自己 写周报,写的兴起,编写周报,还边用虎跑泉,泡铁观音喝。自己写周报的习惯还是要改一改,自己是个性情中人,...

两味真火 ⋅ 2017/06/01 ⋅ 67

关于抽象类和接口的问题

一直很搞不懂这两个东东到底怎么合理使用的,在面试中也经常问到。谁能具体给我讲讲呢!不要那些理论知识。 我就是想知道,比如作为一个架构师,改如何处理抽象类和接口,在什么情况下使用接...

小乔流水 ⋅ 2012/06/23 ⋅ 4

给你讲一个只有程序员才能听懂的笑话

1 架构师相亲,说:我是架构师。美女:贾先生你好。架构师:叫我狗屎就好了 2 某程序员退休后决定练习书法,于是重金购买文房四宝。一日,饭后突生雅兴,一番研墨拟纸,并点上上好檀香。定神...

Lunaqi ⋅ 2017/11/17 ⋅ 0

如何理解并掌握 Java 数据结构

一说起“数据结构”可能很多同学都又交给老师了。但是实际工作中如果做得深入一些,特别是越往上发展,越大公司越离不开数据结构。本场 Chat 作者将带领大家重温《Java 数据结构》,讲解的内...

valada ⋅ 04/12 ⋅ 0

2018年4-5月java程序员最新面试总结分享!

本人三年java工作经验,下面是这两个月的面试历程,分享给大家! 1、新东方 04_19 技术面试,两轮,地点:中关村地铁站E口,鼎好大厦6层, 面试官:龙彦俊,李经理 面试时间:20180419_10:3...

java高级架构牛人 ⋅ 05/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Linux中的端口大全

1 被LANA定义的端口 端口 名称 描述 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 d...

寰宇01 ⋅ 22分钟前 ⋅ 0

Confluence 6 如何备份存储文件和页面信息

备份的 ZIP 文件包含有 entities.xml,这个 XML 文件包含有 Confluence 的所有页面内容和存储附件的目录。 备份 Zip 文件结构 页面的附件是存储在附件存储目录中的,通过页面和附件 ID 进行识...

honeymose ⋅ 24分钟前 ⋅ 0

【每天一个JQuery特效】根据状态确定是否滑入或滑出被选元素

主要效果: 本文主要采用slideToggle()方法实现以一行代码同时实现以展开或收缩的方式显示或隐藏被选元素。 主要代码如下: <!DOCTYPE html><html><head><meta charset="UTF-8">...

Rhymo-Wu ⋅ 28分钟前 ⋅ 0

度量.net framework 迁移到.net core的工作量

把现有的.net framework程序迁移到.net core上,是一个非常复杂的工作,特别是一些API在两个平台上还不能同时支持。两个类库的差异性,通过人工很难识别全。好在微软的工程师们考虑到了我们顾...

李朝强 ⋅ 34分钟前 ⋅ 0

请不要在“微服务”的狂热中迷失自我!

微服务在过去几年一直是一个非常热门的话题(附录1)。何为“微服务的疯狂”,举个例子: 众所周知,Netflix在DevOps上的表现非常棒。Netfix可以做微服务。因此:如果我做微服务,我也将非常...

harries ⋅ 35分钟前 ⋅ 0

oAuth2 升级Spring Cloud Finchley.RELEASE踩坑分享

背景 6.19号,spring团队发布了期待已久的 Spring Cloud Finchley.RELEASE 版本。 重要变化: 基于Spring Boot 2.0.X 不兼容 Spring Boot 1.5.X 期间踩过几个坑,分享出来给大伙,主要是关于...

冷冷gg ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 理发师小姐姐的魔法

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @冰冰棒- :分享田馥甄的单曲《My Love》 《My Love》- 田馥甄 手机党少年们想听歌,请使劲儿戳(这里) @Li-Wang :哎,头发又长了。。。又要...

小小编辑 ⋅ 今天 ⋅ 9

Kafka1.0.X_消费者API详解2

偏移量由消费者管理 kafka Consumer Api还提供了自己存储offset的功能,将offset和data做到原子性,可以让消费具有Exactly Once 的语义,比kafka默认的At-least Once更强大 消费者从指定分区...

特拉仔 ⋅ 今天 ⋅ 0

NEO智能合约之发布和升级(二)

接NEO智能合约之发布和升级(一),我们接下来说说智能合约的升级功能。 一 准备工作 合约的升级需要在合约内预先设置好升级接口,以方便在升级时调用。接下来我们对NEO智能合约之发布和升级...

红烧飞鱼 ⋅ 今天 ⋅ 0

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部