程序员面试 技术题汇总 All In One
一面:技术基础面+理论基础面
理论基础(重点是基础、潜力、学习能力、独立研究能力)
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 为什么只需要写 <!DOCTYPE HTML>?
- 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容器参数(线程数,会话存活时间)
- 常用的性能监控手段(数据库,中间件,日志,业务访问)
二面:技术实践面+知识深度和广度面
- 参与过项目的核心经验(接口的设计和维护, 核心算法的实现, 性能优化和提升, 内存泄露的查找, 多线程或携程的使用)
- 软件设计模式,代码重构,编码规范,工程构建(工具,可以分语言介绍各自的工具,C++, java(ant,maven,gradle), javascript(grunt, gulp, webpack)
- 介绍阅读过的经典技术书籍, 关注过的业界技术大牛
前端可选
- 业界各大主流前端框架或库的的理解和比较(jquery, YUI, EXT, Kendo UI, Angular, React, Vue)
- 介绍AMD、CMD、CommonJS的发展历史和标准
- 前端页面性能优化的常用技术手段和经验(代码,服务器,缓存,网络,跨域)
- 保持页面流畅、不卡顿的常用技术手段
- 保护WEB安全攻击的常用方法(XSS跨站脚本,数据库SQL注入等...)
- UI设计的经典法则和经典案例
- 简述你所理解的优雅降级和渐进增强
服务端可选
- 介绍常见的数据挖掘和机器学习算法库,了解或熟悉哪些算法
- 数据库性能优化的常用方法
- 介绍分布式通信原理和过程、分布式数据存储和计算(实践过或了解过的开源框架)
- 谈谈对C10K问题的理解
- 简述进程、携程的理解
- 谈谈对函数式编程、golang、scala语言的想法
- 简述web框架的分层架构、数据库分片、软件设计原则的看法
- 简述处理web安全的常用手段
三面:价值倾向面+公司选择倾向面
- 如何看待当前的创业
- 为什么选择创业公司(或小公司),而不选择互联网大公司(BAT)
- 如何分配自己的时间
- 对新技术的发展有什么看法,或准备深入研究哪方面的技术
- 计划阅读哪些书籍
1
本文首发于博客园,作者:xgqfrms,原文链接:https://www.cnblogs.com/xgqfrms/p/5686162.html
未经授权禁止转载,违者必究!