「校招季」怎样做一个漂亮的项目介绍 And 面试官到底在考察什么? | 掘金技术征文

1,894 阅读9分钟

为什么要重视项目介绍?

你可以尝试着讲一遍你的项目经历。我第一次讲的时候就挺乱的,卡壳、专业词汇匮乏、逻辑混乱、用词不当、没有介绍到项目重点……

项目经验面试在面试中占很大比重,面试官通过一些专业性的技术问题来了解你的技术水平,问题从哪来?要么来源于结构化面试题库(每个面试者的问题都一样,多出现在校招一面),要么,就是从你的简历中项目经验来。所以对项目整体而深入复习的重要性不言而喻。

介绍项目时面试官会考察应聘者的沟通能力和思考能力,我们大部分情况都是做产品的一个功能或一个模块,但是即使是这样,自己有没有把整个系统架构或产品搞清楚,并能介绍清楚,为什么做这个系统?这个系统的价值是什么?这个系统有哪些功能?优缺点有哪些?如果让你重新设计这个系统你会如何设计?这些都是值得你好好思考的。

项目介绍思路

这部分技巧对简历上的项目介绍也是通用的。

  1. 首先用一句话介绍这个项目做了什么,打个比方,我使用XX 框架实现了一个 XX

  2. 主要功能

    挑亮点和创新点讲,细碎的功能点一句带过。

  3. 然后讲基本的实现:主要运用到的技术点有XXX。

    (这里面试官从你介绍的技术点切入考察,所以要好好回顾复习项目中运用到的技术点细节。)

  4. 架构

    (面试官还会问一问为什么你选了这样的架构/方法来实现。)

  5. 我在项目中的角色

    主要介绍项目中的职责和作用,是多面手 or 组长 or 技术 。这点主要凸显你的工作量和贡献率。

注:可以在简历上附上项目github地址,上传重点功能的演示 gif ,让面试官可以很直观地评估你的项目规模和难度。

面试官会考察些什么?

知己知彼,摸清面试官心理,你才能有针对性去准备。

1. 能力、技术

  • 考察深度:深入了解哪个技术?

    整个项目中用到了哪些开源框架?他们的实现思路是什么?你看过他们的源码吗?你不仅仅是要会用开源库和第三方SDK,还需要知道实现原理和技术细节。不然一个都是第三方堆砌起来的App,问这个说不了解,用的第三方框架,问哪个说不了解,用的SDK,你还要面试官问什么?[摊手]

  • 考察广度

    在进行技术选型的时候,你有过什么考虑,做过多少调查。详细地了解不同的工具/框架 思想的对比。最后是什么原因,你选定了这个技术。记住一句话:技术没有优劣,只有合不合适。功能点的实现方式有很多,往往选择的是最适合的。

    同时面试官可能会考察你是否关注产品数据,是否关注合理的工作流程,是否关注前后台交互时的相关知识和流程,是否关注测试自动化、持续集成等其他方面。

2. 潜力

  • 做项目中怎么解决问题?

    主要展示自己解决问题的思路。

  • 举一反三的能力

    面试官会提出和项目技术类似的点,考察你是否能将新知识点联系到已学的技术,然后尝试解决它。

  • 优化项目哪些部分

    面试官意在考察你的思考力和动手能力,开源库多多少少都会有坑,你是否在应用中排查出坑并且能埋坑。

  • 如何快速学习项目需要的技术点

    首先,找资料顺序是:官网文档->权威书籍->google->StackOverflow->博客。其次,新技术的学习非常考验基础。打个比方,没学过RxJava,但是如果你知道设计模式的观察者模式,理解起来就很快。

3. 细节

  • sdk的细节了解在哪里

    自己造轮子确实费时间,但是你又是否知道SDK做了哪些优化?

  • 自定义控件优化

  • 作品对比

    自己的项目有没有和市面上的竞品比较过,客观地评价下从别人的作品中学到了什么,基于此你有没有改进自己的作品?

  • 算法

    主要是一些坑和解决思路、解决的灵感来源等,在项目中肯定会涉及到数据结构,比如缓存最近100条点击记录,超出100条则移除最早缓存的记录,自己实现。可能你会想到用队列或堆实现,那可以去看看缓存算法Lru算法的原理,用的什么容器,为什么这么设计?

4. 主动性

  • 是否做过知识总结、知识沉淀?(这就是平时注重博客积累的好处了)
  • 是否实践过知识分享?
  • 是否主动给项目提出过意见或建议?

5. 沟通能力

在面试的过程中,悄声无息进行的还有另一项考察 —— 沟通能力。想想自己面谈时是否能让面试官感觉舒服,是否能清晰表达自己的要点,是否能清晰表达自己未来的个人发展规划。可以尝试模拟面试录下音,看是否有过多的语气词表达出的不自信。

6. 例子

说了这么多,搞个直观的例子谈谈。

问:

项目中推送是怎么实现的?

答:

刚开始做推送的时候,对目前主流的推送方案大致了解了一下。发现推送实现不止一种。

(展示技术选型和方案,简单谈下就ok)

(1)GCM服务

优点:Google提供的服务、原生、简单,无需实现和部署服务端。

缺点:该服务在国内不够稳定、需要用户绑定Google帐号。

(2)XMPP:

优点:开放性,标准性,可扩展,跨平台,且已有开源项目。

缺点:数据冗余(基于XML),不支持二进制数据,协议虽然完整扩展性虽然好,它耗费网络流量很大,跑起来比MQTT慢很多;有高达70%的流量是耗费在XMPP本身的标签和编解码上面。

(3)MQTT

优点:协议简洁、小巧、可扩展性强、省流量、省电。

缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。

(4)HTTP轮循
优点:实现简单、可控性强,部署硬件成本低。
缺点:实时性差。

(体现技术细节)

所以后续选型,我选择了 XMPP + MINA + AndroidPN 来实现推送。

(体现项目优化改进之处,体现自己的思考和能力,对开源项目进行改造)

但是 AndroidPN 开源项目也存在一些不足之处:

  1. 如果将消息从服务器上推送出去,就不再管理了。

    我的做法是:客户端收到推送后给服务端一个反馈,如果服务端在一定时间内没有收到反馈,则重发。

  2. androidpn服务器收到消息后如何知道要发给哪个用户?

    所以我加了个tag维度来做用户分组

  3. 一旦服务器重启了,客户端似乎不会自动重连,需要用户自己中断后台Service再重启应用。

    完善的方法是加上心跳机制和断线重连

  4. AndroidPN服务器不保存消息。就是说它一有消息就会发出去,即使客户端根本不在线,它也不会重发。

    解决方案是让服务端保持对客户端状态的监控

再问:

怎么不用现有的极光推送?

答:

极光推送初始的版本文档不全,接入麻烦,同时我对推送的原理很感兴趣,所以想自己实践下。

问题示例

最后,是面试官针对项目面试可能提出的问题汇总。

  • 你参与的项目是独立完成的还是团队协作完成的,在团队里是什么角色?是负责人还是参与者?

  • 项目执行过程中的难题你是怎么处理的?

  • 问一些专业性的技术问题来了解你的水平。

  • 如果是没有明确结果的项目,你从项目里学到了什么,有什么经验教训?

    看你的项目经验,还有思维逻辑性,对项目整体的认识,包括技术的选型和架构的设计等等。

  • 项目技术点具体的使用场景,比如多线程的控制、性能优化、数据库设计、加密混淆等等。

  • 挑一个你最熟悉的项目讲讲吧。

  • 讲解你是怎么从0到1对项目进行开发和改造的。

    题目确立 -> 产品需求开发 -> 概要设计 -> 详细设计 -> 测试用例 -> 编码 -> 测试 -> 优化 -> 宣传视频海报的制作。

开放性问题

当然,存在有的面试官倾向于问一些开放性的问题。主要看重你是如何解决问题的,看你的思维方式是怎么发散的。

比如面试官问我,你为什么觉得你做的产品就比别人好?你为什么要对你们的产品进行性能优化,主要瓶颈在哪里?你是通过什么方式进行优化?你优化的点是怎么考虑的?你在使用第三方服务是处于什么目的,你对它的评价是什么,它们给你带来的好处是什么?让你去思考如何更好的为开发者提供服务,你觉得还有什么东西是开发者需要的?你对开发工具类产品感兴趣吗?

可以从这些问题看出,面试官并不仅仅看重你的技术能力,还有你对产品的认识。面试官想找的人不仅仅要在技术上有亮点,还有其他方面能吸引到他们。

最后

最重要的一点:不知道的技术点不要不懂装懂。很多时候我们都会遇到一个情况,就是面试官的问题我不会,这时候大多数情况下不要马上说我不会,也不要糊弄回答,要懂得牵引,转移话题往类似的你擅长的技术点方向去,不然当你抱着侥幸心理随便回答出问题后,面试官会一直沿着往下深挖,挖到挖不出来为止,这就很尴尬了。

受限于个人水平,如有错误之处,敬请谅解。
征文活动地址
本文简书地址