常见问题
常见问题指的是编程语言,数据库,操作系统等基础问题。另外根据你在简历上的描述以及岗位要求,也可能会考核其他内容。一般来说,除了资深工程师岗位或特定工程师岗位,基础知识的面试占比并不重,大部分情况下主要精力应该放在算法,OOD 以及系统设计上。
练习题
由于基础知识涉及的内容过于广泛,你可以先通过做一些练习题了解面试的考核范围,再针对不熟悉的地方进行复习,推荐的练习题包括:
| 语言基础 | 数据库 | 前端 |
|---|---|---|
| C++ | Database 基础 | Frontend |
| C++ 基础 | SQL 练习 | Javascript |
| Java | SQL Beginner | Javascript Beginner |
| Java 基础 | ||
| Python |
知识点
计算机基础
| 主题 | 例子 | 参考题目 |
|---|---|---|
| 进制 | 二进制,十六进制的基础知识,补码,反码,浮点数的表达方式 | 为什么无法精确表达浮点数 |
| 硬件设备 | 内存,磁盘,网卡的基础知识 | 网卡是如何获取以及提供数据的?如果获取速度比提供数据的速度快的话会怎么样? |
| 程序运行原理 | 程序运行堆栈,函数调用 | Java 中变量是存储在堆还是栈里面? |
编程语言基础
| 主题 | 例子 | 参考题目 |
|---|---|---|
| 编程语言特性 | 关键字,常用库 | Java 中 Synchronized 关键字的底层原理 |
| 常见机制与运行原理 | 垃圾回收机制,渲染过程 | 简述 Java 垃圾回收原理 |
| 程序运行原理 | 程序运行堆栈,函数调用 | Java 中变量是存储在堆还是栈里面? |
| 数据结构实现 | 哈希表,数组 | HashMap 与 ConcurrentHashMap 的实现原理 |
| 面向对象 | 设计模式,抽象类 | Java 中接口和抽象类的区别 |
| 并发相关 | 多线程,多进程 | 简述 Netty 线程模型,Netty 为什么如此高效? |
网络协议
| 主题 | 例子 | 参考题目 |
|---|---|---|
| 协议的基础组成与用途 | HTTP 状态码,TCP 报文头部结构 | 简述常见的 HTTP 状态码的含义 |
| 协议的常见机制 | 拥塞控制,加密过程 | TCP 中常见的拥塞控制算法有哪些? |
| 不同协议的区别 | TCP 与 UDP,HTTP 与 HTTPS | TCP 与 UDP 的区别是什么? |
| 协议相关组件 | JWT 原理,RPC 调用流程 | 简述 RPC 的优点和缺点 |
数据库
| 主题 | 例子 | 参考题目 |
|---|---|---|
| 基本概念 | 事务,存储引擎,隔离级别 | 数据库的事务隔离级别有哪些?各有哪些优缺点? |
| 数据库设计与优化 | 范式和反范式,索引的类型 | 数据库有哪些常见索引?数据库设计的范式是什么? |
| 数据库原理及高级特性 | 分区分表,分布式 | Redis 如何实现分布式锁? |
常见问题
编程语言
- What is your favorite programming language?
- What is the different between Python/Java/C++/Javascript?
- Why does Java not make use of pointers compare to C++?
- What is Garbage Collection in Java?
- What is the difference between reference and pointer in C++?
网络
- What is Restful API? What is its advantage?
- Difference between HTTP and HTTPS
- Tell me about the HTTP method you are most familiar with
- What is the difference between GET and POST method
- Tell me about the HTTP status code
数据库
- What is the difference between a SQL database and a No-SQL database?
- How to design a SQL database?
- How to design a No-SQL database?
- What is transactions?
- How do MySQL indexes work?
操作系统
- What is the difference between Process and Thread
- What is the difference between multiprocessing vs multithreading
- What are the different states of the process?
- What are the different scheduling algorithms?
- What is virtual memory in os?
如何回答基础知识问题?
分点叙述:对于复杂的题目尝试分成几个要点,举个例子,题目:“从输入 URL 到展现页面的全过程” 涉及非常多细节和内容,面试回答的时候尝试分解成:
- URL 解析
- 建立连接
- 服务器处理请求
- 客户端渲染
先总后分: 一个常见的错误是针对问题直接说出一大段内容,让面试官进行阅读理解找重点。正确的方式是应该根据总分结构,分点后先将要点的关键字说出来,让面试官对你接下来要讲的内容有一定的预期,然后再阐述对应的细节。
选点阐述:要有侧重地从这些要点中选择一两个你比较熟悉的阐述细节,其他要点简单介绍即可。例如如果你最熟悉的是建立连接阶段:
- URL 解析:包括 URL 分析以及域名解析
- 建立连接:包括 TCP 连接以及 HTTP/S 连接,首先 TCP 使用三次握手建立连接 ...... 如果涉及到 HTTPS 的话,那么还需要密钥协商 ......
- 服务器处理请求:服务器收到请求后会根据业务逻辑处理请求,并返回结果给客户端
- 客户端渲染:客户端收到返回的数据,会将数据渲染到对应的设备
这种情况下,面试官会从你比较熟悉的点去进行延伸提问。