互联网公司/软件公司进行程序员面试的基本套路

匿名网友 匿名网友 发布于: 2016-03-30 00:00:00
阅读 124 收藏 0 点赞 0 评论 0

考察内容:

 

1. 编写程序:出一道现场编程题,考查编程功底, 编程思维, 代码细节, 熟练度

2. 软件设计:出一道设计题

3. 使用的库或框架:考查其涉略技术广度, 是否有技术热情, 对相关技术的理解深度

4. 程序调试:介绍一次bug调试经历

5. 编程工具:让其介绍下个人的开发环境, 可以了解他的技术热情, 工作效率等

6. 其他 沟通表达能力,团队协作能力,自我学习能力,故障处理能力

 

面试官需要考察反馈的内容:

 

1. 语言表达能力 2. 分析能力 3. 学习能力 4. 创新能力 5. 掌握的技术知识水平 6. 经验如何,实践动手能力 7. 个性,是否善于沟通交流,团队合作

 

编程题

 

编程题涉及array,list,tree,set,map 等数据结构

 

 

面试总体流程:

 

1. 电话面试

2. 第一轮技术面试

3. 第二轮技术面试

4. CTO/HR 面试

 

电话面试考查点

 

第一轮技术面试

 

项目经验

 

针对做过的项目经验问问题,问最骄傲的是哪个项目,在该项目中担任什么角色,参与完成了哪些东西,学到了什么,并针对相关技术细节问一些深入的问题。大概10-15分钟 可以考察工作经验,掌握的知识技能,并且可以核对简历有没夸大,也可以考察语言表达能力,学习能力(总结能力),分析能力,创新能力 Judging from your resume, you have a lot of experience in information retrieval and machine learning。 Which is your favorite project? What’s the purpose of this project? What’s the algorithm?(how did you implement it?)

 

技术基础知识

 

操作系统 存储

 

Stack vs heap

 

stack belongs to one thread, heap to process

life cycle

thread vs process

 

the containers: list, array, queue, stack, heap, map, tree,

 

会哪几种语言, 比较他们的优缺点

 

JAVA基础知识

 

hashmap 和 treemap 的特性区别, 实现原理

 

hashmap 与 hashcode,equals

 

treemap 与 comparable

 

gc : 可考可不考, 很少有人有实战经验, 基本都是看书的 classloader:

 

spring

 

事务 SQL 注入 安全 缓存 mvc 各个层

 

Web development

 

How would you manage the migration of a project from MySQL to PostgreSQL?

How would you manage database schema migrations?

How is Lazy Loading achieved? When is it useful? What are its pitfalls?

Why in SQL SELECT * FROM table WHERE field = null does not match records with null field?

How would you find the most expensive queries in an application?

HTTP Specific Questions

 

What happens between the time you enter a URL in your browser until you see the page that you requested? How does the 3-way TCP handshake occur when you request a page from a server? What are the contents of an HTTP request header? Response header? What is the difference between HTTP and HTTPS? How would you design a URL shortener similar to bit.ly

 

开发环境

 

What are your development environments like?

 

使用版本控制

 

一定要学会使用版本控制工具,什么叫mainline/trunk,什么叫tag,什么叫branch,怎么做patch,怎么merge代码,怎么reverse,怎么利用版本控制工具维护不同版本的软件。这是程序员需要明的的软件配置管理中最重要的一块。

 

单元测试

 

单元测试是每个程序都需要做的。很多单元测试也是需要编码的。一定要学会在xUnit框架下进行单元测试。比如JUnit, NUnit, CppUnit等等。

 

重构代码

 

每个程序员都需要有最基本的能力去重构目前已有的代码,使代码达到最优但却不能影响任何的已有的功能。有一本书叫《软件的重构》,每个程序员都应该读一下。

 

自动化编译

 

程序员需要使用一个脚本,其能自动化编程所有的工程和代码,这样,整个开发团队可以不停地集成代码,自动化测试,自动化部署,以及使用一些工具进行静态代码分析或是自动化测试。

 

分布式系统

 

How to test a distributed system?

In which case whould you apply asynchronously communication between two systems?

What are the general pitfalls of Remote Procecure Call?

If you are building a distributed system for scalability and robustness, what are the different things you’d think of in the case you are working in a closed and secure network environment or in geographically distributed and public system?

How to manage Fault Tolerance in a Web application? And in a Desktop one?

How to deal with failures in Distributed Systems?

Let’s talk about the several approaches to Reconciliation after network partitions

What are the Fallacies of Distributed Computing?

When would you use Request/Reply and when Publish/Subscribe?

阅读代码

 

编写程序

 

given a positive integer array, its size is n, find a sequence whose summary equals to m answer: use the first element in the array as the initial sequence, the summary of the sequence equals to the first element, if the summary equals to m, then we find the sequence, else if summary is less than m, then add the next element in the array to the sequence else if summary is larger than m, then remove the first element from the sequence repeat it until we find such a sequence or reach the end of the array

4.2 You know google, the most popular search engine. It serves billions of queries each day. Google wants to find the top 10 popular queries of the day. Can you design an algorithm for google? 假设机器为32核, 32g, 数据量在T 级别 由于数据量太大, 需要多台机器协作完成, 或者单机多线程完成 按照关键字 hash 成几份, 每份足够小使得能够在内存用 hashtable 计算所有的 query, frequency

 

第二轮技术面试考查点

 

| 软件设计 | 出一道设计题 | | 使用的库或框架 | 考查其涉略技术广度, 是否有技术热情, 对相关技术的理解深度 | | 程序调试 | 介绍一次bug调试经历 | | 编程工具 | 让其介绍下个人的开发环境, 可以了解他的技术热情, 工作效率等 | | 其他 | 沟通表达能力,团队协作能力,自我学习能力,故障处理能力 |

评论列表
文章目录