Skip to content

Latest commit

 

History

History
258 lines (218 loc) · 9.5 KB

interview-questions.md

File metadata and controls

258 lines (218 loc) · 9.5 KB

一面:技术基础面+理论基础面

理论基础(重点是基础、潜力、学习能力、独立研究能力)

1.数据结构算法题目

  • 如何计算有向无环图中的单源最短路径
  • 如何判断一颗二叉树是对称的
  • 如何用O(1)的时间复杂度计算栈中的最大最小值
  • 如何复制一个双向链表(如何复制一个有向图)
  • 介绍参加过数学建模、ACM程序设计大赛的经验(应届生)

2.语言题目

  • 高级语言是如何编译成机器语言的,机器是如何执行的
  • 如何实现一个json或XML的语法解析器
  • 编程语言的垃圾回收是如何做到的

3.系统题目

  • 操作系统是如何支持多线程
  • 什么是原子操作,系统如何实现的
  • 简述线程调度的过程和原理
  • 操作系统管理的核心功能主要有哪些
  • 现代操作系统内存管理中的页和段有什么区别
  • 进程的虚拟内存结构是什么
  • 进程通信和线程通信分别有哪些

4.网络题目

  • 简述TCP的三次握手协议
  • 简述HTTP协议头部的各个字段的含义和作用
  • 简述ping命令背后的过程和原理

5.数据库题目

  • 简述数据库锁的分类和死锁的处理
  • 简述数据库的存储过程、触发器的概念和作用
  • 简述数据库索引的分类和作用
  • 简述数据库事务的概念、特性、作用
  • 简述数据库事务的锁与并发的关系

6.分布式题目

  • 简述一致性HASH算法的原理和应用
  • 简述分布式的消息广播和领导选举算法(洪泛算法、生成树算法...)
  • 简述MapReduce基本执行过程

7.大数据题目

  • 海量日志数据,提取出某日访问百度次数最多的那个IP。
  • 有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。

8.数据挖掘与机器学习题目

  • 机器学习算法分为哪几类,各有哪些精典算法且适用于哪些场景,择一种熟悉的算法举例
  • 简述贝叶斯分类算法原理以及用于文本分类的应用
  • 简述关联分析中的Apriori算法思想和原理
  • 简述SVM算法原理以及google对SVM算法最新的研究成果
  • 谈谈对CNN算法的理解

技术经验(重点是项目理解的深度、独立解决问题的能力、技术的深度、技术的宽度)

前端方向

1.javascipt

  • 用javascript设计并实现一个简单的继承,包括子类、父类,并用构造函数实例化一个子类对象
  • 介绍javascript的闭包和作用域链,试举例
  • javascript函数调用共有哪4种方式,试举例
  • javascript函数中的this如何确定,共有几种情况,试举例
  • ajax的原理和过程,如何调试
  • json字符串转换为对象的方法,浏览器兼容性如何处理,试举例
  • 如何进行浏览器特征侦测
  • 那些操作会造成内存泄漏
  • 简述jsonp的原理
  • ajax通信中常用的content-type类型, 以及它们之间的区别
  • 不同浏览器版本关于Array API的差异
  • 介绍你用过的es6和promise的知识点(你认为的优缺点)
  • for-in循环的用法举例, 注意不同浏览器的兼容性
  • 代码相关
// 问题:foo的值是什么?
var foo = 10 + '20';

// 问题:如何实现以下函数?
add(2, 5); // 7
add(2)(5); // 7

// 问题:下面两个 alert 的结果是什么?
var foo = "Hello";
(function() {
  var bar = " World";
  alert(foo + bar);
})();
alert(foo + bar);

// 问题:foo.x的值是什么?
var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};

// 问题:下面代码的输出是什么?
console.log('one');
setTimeout(function() {
  console.log('two');
}, 0);
console.log('three');

// 问题:下面代码的输出是什么?
var a = 1;
function fn() {
    if (!a) {
        var a = 2;
    }
    console.log(a); // ?
}
fn();

// 问题:下面代码的输出是什么?
var a = 1;
function fn() {
    a = 2;
    return;
    function a() {}
}
fn();
console.log(a); // ?


// 问题:下面代码的输出是什么?
var i = 0,
    j = 0;
for (; i<100; i++) {
    j = j++;
}
alert(j);

// 问题:下面代码的输出是什么?
var obj = {
    count: 1,
    func: function(count) {
        console.log(this.count);
        console.log(count);
    }
};

(function test() {
    var count = 10;
    obj.func(count);
    var gunc = obj.func;
    gunc(count);
})();

2.css

  • 简述css选择器的用法
  • 简述css盒模型、定位
  • 简述css float的用法
  • 简述css flex布局的优点
  • 简述css规则的优先级、CSS的层叠特性
  • 简述css3动画和javascript动画的区别
  • 简述css伪类的用法,试举例
  • 详细描述盒模型与background的关系
  • 详细描述字符串不换行、布局居中显示分别如何实现

3.html

  • 行内元素和块元素的区别?
  • Doctype作用?严格模式与混杂模式如何区分?它们有何意义?
  • HTML5 为什么只需要写 ?
  • Label的作用是什么?是怎么用的?
  • 简述iframe的缺点
  • html DOM文档树的节点类型有哪些,如何遍历DOM树
  • html 如何获取和设置一个节点的属性

4.浏览器事件

  • 简述浏览器事件的处理过程
  • 如何进行事件委托和防止事件导致内存泄露
  • 简述DOM0级,DOM2级,DOM3级事件的使用方式
  • 简述IE事件对象和chrome, firefox事件对象的差异
  • 哪些html元素拥有onload事件, 如何使用, 浏览器兼容性如何
  • 简述scroll与mousewheel事件的区别
  • overflow:hidden, 子节点被父节点遮盖的部分能否触发click事件
  • 自定义实现页面组件拖动效果

5.html表单

  • 有哪些表单元素,input表单元素有哪些事件
  • form能否嵌套,如果嵌套会发生什么情况
  • 如何进行表单验证
  • 如何防止表单多次提交
  • 如何对表单进行序列化

服务端方向

  • 介绍熟悉的框架及其原理以及遇到的问题(java方向,node方向,C++方向,.net方向自选)
  • 介绍计算机编码知识unicode字符集和utf-8编码, 介绍你遇到的中文乱码问题, 并如何解决的。
  • 简述socket多线程通信的原理和过程(C, java自选)
  • 常用的哪些数据结构,介绍其原理、优缺点(不分语言,如LinkedHashMap,ConcurrentHashMap)
  • 简述数据存储和处理(oracle, mysql, postgre, mongodb, redis, hdfs)经验
  • 尾递归如何用循环实现
  • 简述设计模式六大原则
  • 什么情况下会导致栈溢出发生,如何避免

node可选

  • js作用域有什么特别的地方
  • js的继承如何实现
  • js中的this如何确定
  • js中的apply, call和bind有什么区别
  • js函数的caller, callee和arguments分别是什么
  • js函数有哪几个基本属性
  • js中的闭包是什么, 有哪些用处
  • node的架构分层和核心模块各有哪些
  • node的全局对象有哪些,各有什么用法
  • node的事件循环怎么定义,有什么用处
  • node的文件读写有哪些api,有什么区别
  • node的常用web框架有哪些
  • node的异步回调处理有哪些库,具体如何使用

前后端综合

  • 描述字符串拼接提升性能的方法和原理(可以是自己熟悉的语言)
  • 阐述多线程死锁形成的条件并简单举例
  • 介绍前后端通信的协议和数据格式(json, protocal buffer等),服务端远程调用的协议(xmlrpc, soap, hessain等)
  • 描述一个页面从输入 URL 到页面加载完的过程中都发生了什么事情?越详细越好
  • 简述你遇到哪些非常难的问题是google搜索不到解决方案的,详细介绍独立解决的过程

系统运维和监控

  • shell进程与前台进程的关系
  • 介绍熟悉的中间件或web服务器
  • 如何优化JVM参数
  • 如何调优web容器参数(线程数,会话存活时间)
  • 常用的性能监控手段(数据库,中间件,日志,业务访问)

二面:技术实践面+知识深度和广度面

  1. 参与过项目的核心经验(接口的设计和维护, 核心算法的实现, 性能优化和提升, 内存泄露的查找, 多线程或携程的使用)
  2. 软件设计模式,代码重构,编码规范,工程构建(工具,可以分语言介绍各自的工具,C++, java(ant,maven,gradle), javascript(grunt, gulp, webpack)
  3. 介绍阅读过的经典技术书籍, 关注过的业界技术大牛
前端可选
  1. 业界各大主流前端框架或库的的理解和比较(jquery, YUI, EXT, Kendo UI, Angular, React, Vue)
  2. 介绍AMD、CMD、CommonJS的发展历史和标准
  3. 前端页面性能优化的常用技术手段和经验(代码,服务器,缓存,网络,跨域)
  4. 保持页面流畅、不卡顿的常用技术手段
  5. 保护WEB安全攻击的常用方法(XSS跨站脚本,数据库SQL注入等...)
  6. UI设计的经典法则和经典案例
  7. 简述你所理解的优雅降级和渐进增强
服务端可选
  1. 介绍常见的数据挖掘和机器学习算法库,了解或熟悉哪些算法
  2. 数据库性能优化的常用方法
  3. 介绍分布式通信原理和过程、分布式数据存储和计算(实践过或了解过的开源框架)
  4. 谈谈对C10K问题的理解
  5. 简述进程、携程的理解
  6. 谈谈对函数式编程、golang、scala语言的想法
  7. 简述web框架的分层架构、数据库分片、软件设计原则的看法
  8. 简述处理web安全的常用手段

三面:价值倾向面+公司选择倾向面

  1. 如何看待当前的创业
  2. 为什么选择创业公司(或小公司),而不选择互联网大公司(BAT)
  3. 如何分配自己的时间
  4. 对新技术的发展有什么看法,或准备深入研究哪方面的技术
  5. 计划阅读哪些书籍