技术面试

 memo
 

基础打牢了吗?

常问问题(Java)

  • HashTable与HashMap有什么区别?
  • Servlet是线程安全的吗?
  • JSP中@include跟jsp:include的区别。
  • HTTP的respomse code 403和500分别代表什么?

这些问题都很简单,但一些基础不牢的程序员往往会在这个时候露馅。

曾经碰到过一个在简历中说自己精通C++的应聘者,连成员变量的初始化顺序这样的问题都被问得一头雾水,那最终结果也就可想而知了。

技术深度够吗?

我们现在做项目时都会大量使用框架,这能使我们的开发效率和质量都得到提升和保障,但同时也降低了对程序员开发技能的要求。因此一般会询问面试者下面的问题,来考察对使用框架的掌握程度:

请你描述一下,在这个项目中,从一个HTTP请求发起,到最终的Response返回,它在你的系统和框架内部是如何流转的?

这个问题往往能够判断出面试者对于相关技术的掌握深度。较初级的开发人员描述的层级往往比较浅。比如,使用Spring MVC框架的,只能说到实现一个Controller继承BaseCommandController(甚至很多开发人员只知道继承了一个公司内部框架的基类),至于再往下Spring框架是如何进行内部流转的,就再也说不清楚了;而更资深的开发人员,往往能够说出框架内部的实现机制,以及如何调用和处理的。在面试者描述的过程中,会被穿插询问一些比较有深度的问题,比如,框架中某个类这样设计是哪一种设计模式的体现,采用这样的设计有什么好处,等等。这比让面试者默写一个设计模式代码要有效,也自然得多。
除了技术层面上的考察之外,对于资深开发人员,还需要考察他们的设计能力。说到软件设计,大部分面试者都能熟练地背出面向对象的3个基本特性:继承、封装、多态,也能把它们的概念描述清楚。但一般被问及下面的这个问题来考察面向对象设计能力:

请用一段程序代码描述我们所在的这间房间。

至少有一半都很难准确使用Interface和Class来给房间建模,也有一些人会将最基本的代码语法或关键字写错。

适合所在企业文化

让我们看看GitHub负责人的一段话:

我们很严肃地看待我们自己关于招聘流程的哲学。我们希望每一个GitHub员工都了解他们所要面对的环境,并保证他们是能够很好适应的。这包括我们所创造的文化、哲学、计划、错误甚至是晚餐。比起他们的技能是否满足要求,我们更看重他们的潜力,以及是否能够适应我们的企业文化。

虚拟任务

写一个小程序:将一个以特定格式(如CSV)存储的文本文件转换为XML格式,并存储为另一个文件。

开发

基于Spring Boot及其他第三方库所提供的API来开发出基于REST的服务;然后,在前端利用AngularJS将应用分为几个模块(UserManager,ResourceManger,FeedbackManager)分别开发;最后,通过$http调用后端服务来进行业务处理和数据交互。
在整个开发过程中,仍需要去解决一些问题:

* 前后端分离之后,如何进行Session的管理
* 如何实现安全的跨域请求。
* 在Spring Boot中如何整合MyBatis框架。
* 如何利用Spring Security来构建安全的REST服务。
* 如何利用云服务实现图片的上传与处理。

重构——系统改善之道

* 引入构建工具
    对于后端Java程序来说,最常使用的便是Groovy,也可尝试使用Gradle。而对于前端来说,Grunt或更新的Gulp都是不错的选择。

编程习惯

如果应聘者先写单元测试用例,再写解决问题的函数,那么面试官定会刮目相看,因为能做到测试在前、开发在后的程序员实在是太稀缺了,他会毫不犹豫地抛出橄榄枝。

调试功底:熟练地设置断点、单步跟踪、查看内存、分析调用栈。