除了其他答案中提出的好建议外,我总是喜欢问(任何与Web相关的开发人员候选人):“当用户在浏览器地址栏中键入www.foo.com并按回车键时,会发生什么?请尽可能详细或简要地描述,然后我们可能会深入探讨答案的某些或所有部分。”除了使用的服务器端框架之外,这可以告诉我关于候选人对其他重要技术的理解的很多:HTTP和它下面的整个TCP / IP堆栈,DNS,各种缓存(以及它们有时会成为问题以及您作为开发人员可以尝试做些什么...),浏览器技术的表面可见方面,cookie,HTML和CSS以及可能一些JavaScript等。是的,我们使用的日常技术,例如框架,努力摆脱所有这些(从而增加生产力),但Joel Spolsky的泄漏的抽象法则适用-意识到您通常抽象化的堆栈层对于真正掌握软件工艺至关重要。根据应聘者面试的职位细节,需要在不同领域适当深入探讨。例如,描述(以合理抽象级别)HTTP请求如何(通过Web服务器和Turbogears机制,可能通过WSGI)到达您的应用程序代码,大致了解您的代码如何研究请求并准备响应,响应如何打包并发送回请求浏览器,这些都可能是感兴趣的项目 - 具体取决于开发人员可能有哪些前端/UI责任,更多关于浏览器将如何处理响应的各个方面(包括链接到样式表、脚本、图像等)也可能是适当的。任何人都可以“填鸭式”学习特定技术,比如框架,如果他们聪明到足以在“问答式”面试中“获胜”。但是,任何能够在更开放式、自由式的面试中获胜的人,往往已经真正掌握并理解了相关技术和抽象层次的许多方面 - 即使他们从未使用过Turbogears(而是Django、Wekrzeug和web.py),也更愿意雇用具有这种彻底、深入根深蒂固的理解的人[他们可以在一周内把Turbogears特定的细节填满],而不是那些已经记住了一大堆Turbogears参考手册但实际上并不理解HTTP、cookie、TCP/IP等知识...(那种缺陷至少需要几个月才能弥补)。
最好的面试问题是那些要求被面试者解决问题的问题。以下是一些半随机的建议(在 FizzBizz test 之后): Python 让他们在你所在领域内实现一个非平凡的项目,需要一周时间。我曾经申请过一个搜索公司,他们要求我实现一个协同过滤系统。通常会让人感到困惑的领域包括装饰器、类型系统、元类,也许还有迭代器。你可以问他们一些关于这些东西的问题来探究他们的深度。 TurboGears 我在这里不能提出太多建议,但你可以考察他们所选择的 ORM(构建一些映射器和查询),询问一些关于验证的问题(我在使用 FormEncode 时遇到了一些有条件的验证问题)。你还可以稍微谈谈他们如何测试应用程序,确保它具有可扩展性,测试其性能并部署它。