开发人员的面试中,面试官经常会让你描述之前做过的一些项目,以及你在其中开发的部分。看似很简单,很多人就是讲不清楚,要么寥寥几句讲不清楚,要么东扯西凑不着重点。原因很简单,要么你不懂接口,要么你描述不清接口。

小白面试者:“我做过手机开发,最近一个项目是个在线订餐的APP,我做的用户下单,订单列表这块功能。” 
资深面试官:“好,说说你是怎样从后台取一个用户的订单列表的。” 
小白:“调一个函数。。。呃,就从后台取到数据。。。然后显示到页面上。” 
资深:“调什么样的函数,它是怎么与后台通讯的?后台返回的数据是什么样子?” 
小白:“调ajax,后台会返回一个数组。。。” 
资深心想:“呵呵,啥叫后台返回数组,接口协议的过程完全不清楚。问问看接口原型能不能讲清楚。”,问:“数组的具体数据结构你能描述一下吗?” 
小白:“就是一个变量。。。没有结构啊。。。” 
资深(心想):“捉急啊,数据类型也讲不清楚,真奇怪应用是怎么做出来的。。。”

一个表达良好且真实做过这块开发的程序员,应该有能力描述出细节:前端通过HTTP协议发出请求,调用这样的语句$.get("api/queryOrder?status=1"),可以用参数status表示只取指定状态的订单,后端返回JSON格式的数据,它表示是一个数组,数组每一项是个订单(Order类型),订单的属性有整型的id, 数值型的总价total等。

重点抓到了吗?首先他是大体知道通讯协议(HTTP/JSON等),并且可以详细描述出怎样调用后台;其次,对这次调用,他可以清楚的描述出了参数和返回值的类型、含义这些细节,对原型有一定描述能力。

而他可能对HTTP协议的细节不太了解。如果是个爱钻研或资深些的开发,可以把HTTP协议交互的细节讲清楚: 
前端以HTTP GET方式向后端发出请求,发送请求像这样:

GET api/queryOrder?status=1

其中,应用层定义网址中,queryOrder是调用名,status是调用函数,参数通过urlencoded方式传递。后端成功时返回数据像这样:

200 OK[{id:1, dscr:"order 1", total:100}, {id:2, dscr:"order 2", status:1}]

能说到这个程度,接口协议这一块已经很懂了。如果再遇到抽象能力强的,会直接写出形式化的接口原型,像这样:

queryOrder(status) -> [ {id, dscr, total} ]

那么这已经是精通前后端通讯的架构师水平了。

看到这里,新手会若有所思,但还是不禁要问,“到底啥叫接口?是Java里面那个Interface关键字吗?”没错,接口的英文是Interface。不过它不局限于是一个关键字,而是一组设计思想:

  • 把待开发对象的接口理清楚,就决定了你对需求的理解程度和设计方案的方向正确性,其实就是需求分析和概要设计,它也同时决定了测试设计的质量。
  • 把对象的内部接口理清楚(划分模块,理清它们之间的交互),决定了方案的实现,其实就是详细设计和编码的工作。
  • 代码写乱了,已经难以理解了,这时要使用接口分离,这叫重构。

怎样才能把接口描述清楚呢?描述接口有两个重点,称为2P:一是协议(Protocol),二是原型(Prototype),它们分别描述了交互的方式与内容。协议说的是,调用方和被调用方是怎样交互的,比如基于HTTP协议,请求参数用urlencoded格式,返回内容用JSON格式;原型描述的是一个请求的内容,调用名称,参数和返回内容是什么含义,以及类型。

大到软件工程,小到编写个去后台获取订单列表的函数,多半的时间都花在确定接口和实现接口上。

转载:http://blog.csdn.net/skyshore/article/details/50995163

面试中初级程序员常常遇到的问题—— 描述你做过的项目相关推荐

  1. HR怎么从面试中了解程序员的真实水平?需要面试的程序员,注意了!

    HR肯定不懂或至少不太懂专业技术,这点,是一定的. 一个外行,怎么面试内行,很多求职者会很好奇. 其实,HR初试,更多的是看"人怎么样",对"能力行不行"的观察 ...

  2. 从循环条件的代码里,我能在面试中甄别程序员是否是高级

    一般来说,工作经验满3后,程序员就达到了高级程序员的年限要求,但能力上是否达到?又如何在面试里短短30分钟里验证程序员是否达到高级程序员的水准?我会那个大家一定用到过的循环语句来作为面试题. 我们可以 ...

  3. 谈谈如何在面试中发掘程序猿的核心竞争力 什么是程序员的核心竞争力?

    谈谈如何在面试中发掘程序猿的核心竞争力 早两天看了知乎日报的这篇文章<什么是程序员的核心竞争力?>,caoz讲的几点是让我感同身受.这让我联想起了给程序猿的面试,其实也就是通过短暂的接触来 ...

  4. java初级程序员简历上不能写,但是不能不会的项目!

    今天给大家讲讲找工作之前要练习写哪些项目,简历上的项目经验怎么写(初级程序员,没有工作过的实习生). 目录 一:练习哪些项目 二:简历上应该怎么写 一:练习哪些项目 1.J2SE记账本 本项目是基于S ...

  5. 以技术面试官的经验分享毕业生和初级程序员通过面试的技巧(Java后端方向)...

    本来想分享毕业生和初级程序员如何进大公司的经验,但后来一想,人各有志,有程序员或许想进成长型或创业型公司或其它类型的公司,所以就干脆来分享些提升技能和通过面试的技巧,技巧我讲,公司你选,两厢便利. 毕 ...

  6. 初级程序员面试不靠谱指南(二)

    3.read-only的const.如果你突然冒出一句看似很高深的话但又不解释一般都是装逼,就像前面提到过const准确的应该理解为一个read-only的变量而不是一个常量,那么常量和变量的区别到底 ...

  7. 以面试官的经验分享毕业生和初级程序员通过面试的技巧

    微信公众号:javafirst 本来想分享毕业生和初级程序员如何进大公司的经验,但后来一想,人各有志,有程序员或许想进成长型或创业型公司或其它类型的公司,所以就干脆来分享些提升技能和通过面试的技巧,技 ...

  8. 初级程序员面试话术(1)

    其实我也是一个刚入行不是很久的小白,和同为初开的朋友们聊天所得,来和大家分享一下在面试的时候或者想成为java程序员的时候应该去注意些什么,首先是从简历下手,简历的好坏也决定着面试机会! 一:简历 简 ...

  9. 千锤百炼始成钢之初级程序员面试总结(非技术1)

    背景 以往曾就职于计算机培训行业,也培养除了不少出色的软件工程师,记得很多刚刚出师的学员在就业面试时给我写过总结,先在就分享给大家希望对伙伴们有点启发和帮助. 正文 公元后2008年9月1日星期一,要 ...

  10. 初级程序员常犯错误一览

    作者 | 饶全成 来源 | 码农桃花源(ID:CoderPark) 最近接手其他人做的项目,导致之前的一些幻想破灭了.因为刚工作的时候做项目是php,而php本身的web框架一般只简单区分mvc,稍微 ...

最新文章

  1. 如何从我的Android应用程序发送电子邮件?
  2. 洛谷——P2118 比例简化
  3. Little Sub and Enigma
  4. Laravel查询搜索函数集合:find  first  firstWhere firstOr findOrFail firstOrFail firstOrNew firstOrCreate
  5. 客户说发货慢怎么回复_?沐言恋爱学:当女生说“我累了”,怎么回复最合适?...
  6. 移动应用开发商的生存之道
  7. canvas drawImage方法不显示图片的解决方案
  8. shader一些语义或术语的解释
  9. 解决Excel 闪退问题(如果你最近装了visio的话点进来)
  10. 西门子博途v14 SP1 S7-1200之间的以太网双边通讯(两个S7-1200 在一个项目中)
  11. 通达信股票软件日线数据分析
  12. RJ45-网口变压器及网口变压器-cpu之间的一些抗干扰防雷设计
  13. python破解b站验证码实现登陆
  14. 前端——阿里图标的使用详解
  15. python金额数字转大写完整代码
  16. iOS App 签名的原理
  17. 台式计算机怎样能搜无线连接,台式机怎样能够连入wifi呢
  18. ROS中的imu_transformer包是什么,在哪里可以下载啊
  19. 算法训练-二进制加法
  20. RHCSA操作第四次作业

热门文章

  1. 考题篇(7.0) 05 ❀ FortiGate防火墙 ❀ Fortinet 网络安全专家 NSE 4
  2. Windows系统下安装使用Zookeeper
  3. 【大数据】数仓5.0_业务采集➕数据同步策略(数仓环境搭建完成)
  4. 我的密码之旅:从统一密码,到云同步的随机密码器
  5. python创建生成器_Python生成器
  6. DFS解决连通性模型问题
  7. 【多线程 二】线程创建和启动的四种方式(以及详解Thread和Runnable方式的优缺点)
  8. mybatis-plus 分页
  9. Android中关于字符串与颜色的转换问题
  10. 业余做自由职业,对国外客户如何收款?