标签:架构师、面试、软件工程师
在CNC已经有六个年头了,算上之前三年多的工作经验,不知不觉已经码农快十年。前两天接到了个邻居公司的架构师面试邀请,这应该是从来到CNC后第一次被面试了。。。
面试官是他们服务优化的技术总监和架构主管。。。
除了常规的一些开场白外,面试是以我最近在重构的一个项目开始的,在架构主管的要求下,我在一块白板上把整个系统的架构大概画出来,然后整个过程就围绕着这个架构图展开讨论了一个小时左右,主要包含一些高并发、横向扩展等问题。。。
记忆比较深刻的两个问题是对方的主管问了一个数据库的索引有哪些?
当时对这问题也没有想太多也是知识面窄了点,就举例讲了MySQL的唯一索引、普通索引、联合索引、地理位置索引。。。
后面那个主管又点了下算法这块?才恍然大悟原来他是想了解我是否对数据库索引算法这块有过了解?
当然平常对这块也没有深入过,所以也就如实回答。。。
另外一个是对方的技术总监一直比较在意为什么我们原有系统已经算是很成熟了,还要再重新在重构?
针对这个问题说真的当时我比较排斥,毕竟如果不是了解我们的项目背景和整个产品架构,是很难简单的说清楚为什么?重构后有什么优势?
虽然我也简单的列了三点说明了下重构原因,但是从交谈过程还是能感受到他对这个答案不是很肯定。
最后是我提问的环节,说真的这次面试没有太多其他想法,所以在面试这方面问题时,想到的更多是想了解下目前他们在针对行内一些比较棘手的难点是如何做的?
比如:
数据库MySQL这块跨机房如何备份的?开发过程中的CI CD如何控制的等?
虽然最终得到的答案和我想要的有些出入,但还是或多或少有些收获。。。
对于这次的面试个人总结及经验:
1.软件工程师的三个阶段:Copy,Code,Comprehend
Copy:记得刚开始时,我们实现一个功能很多时候都是从别的项目或是书上或是网上把相似的技术copy过来完成这个功能,这个阶段叫盲目阶段。
Code:后来积累了点经验后,就开始按自己所积累的所认识的一些技术去实现一些功能,这个阶段我称之为Code,这个阶段很典型的就是知道技术点可以怎么用,但是不知道why?
Comprehend:这个阶段我称为飞升的阶段,对于更好的使用一种技术,最好的就是深入去了解其原理,这种理解不仅仅是简单的写个demo,做点测试,看下它的架构设计;更多的是需要你去翻阅他的官网,找出它的源码,一行行解读,理解设计者的设计理念?思考整个设计的背景及优缺点?
2.新产品、新项目、新需求、新设计的开始,往往需要投入的是大量的时间用于分析并整理出其产生的背景、原因等信息,或许自己心中有可以说服自己这样做的理由,但是这个理由并不一定能再别人心中站得住。所以一个项目的开始很多文档是少不了的,一个项目结束,很多文档也是缺不得的。
这让我突然想起最近在网上买了个学习视频,里面的讲师在给他的学员上课后,都会要求学员们,每次作业都要交这样几份资料:博客、流程图、代码、readme。
标签:架构师、面试、软件工程师
原文地址:http://blog.51cto.com/13764081/2123099