跳到主要内容

常见问题

常见问题指的是编程语言,数据库,操作系统等基础问题。另外根据你在简历上的描述以及岗位要求,也可能会考核其他内容。一般来说,除了资深工程师岗位或特定工程师岗位,基础知识的面试占比并不重,大部分情况下主要精力应该放在算法,OOD 以及系统设计上。

练习题

由于基础知识涉及的内容过于广泛,你可以先通过做一些练习题了解面试的考核范围,再针对不熟悉的地方进行复习,推荐的练习题包括:

语言基础数据库前端
C++Database 基础Frontend
C++ 基础SQL 练习Javascript
JavaSQL BeginnerJavascript Beginner
Java 基础
Python

知识点

计算机基础

主题例子参考题目
进制二进制,十六进制的基础知识,补码,反码,浮点数的表达方式为什么无法精确表达浮点数
硬件设备内存,磁盘,网卡的基础知识网卡是如何获取以及提供数据的?如果获取速度比提供数据的速度快的话会怎么样?
程序运行原理程序运行堆栈,函数调用Java 中变量是存储在堆还是栈里面?

编程语言基础

主题例子参考题目
编程语言特性关键字,常用库Java 中 Synchronized 关键字的底层原理
常见机制与运行原理垃圾回收机制,渲染过程简述 Java 垃圾回收原理
程序运行原理程序运行堆栈,函数调用Java 中变量是存储在堆还是栈里面?
数据结构实现哈希表,数组HashMap 与 ConcurrentHashMap 的实现原理
面向对象设计模式,抽象类Java 中接口和抽象类的区别
并发相关多线程,多进程简述 Netty 线程模型,Netty 为什么如此高效?

网络协议

主题例子参考题目
协议的基础组成与用途HTTP 状态码,TCP 报文头部结构简述常见的 HTTP 状态码的含义
协议的常见机制拥塞控制,加密过程TCP 中常见的拥塞控制算法有哪些?
不同协议的区别TCP 与 UDP,HTTP 与 HTTPSTCP 与 UDP 的区别是什么?
协议相关组件JWT 原理,RPC 调用流程简述 RPC 的优点和缺点

数据库

主题例子参考题目
基本概念事务,存储引擎,隔离级别数据库的事务隔离级别有哪些?各有哪些优缺点?
数据库设计与优化范式和反范式,索引的类型数据库有哪些常见索引?数据库设计的范式是什么?
数据库原理及高级特性分区分表,分布式Redis 如何实现分布式锁?

常见问题

编程语言

  1. What is your favorite programming language?
  2. What is the different between Python/Java/C++/Javascript?
  3. Why does Java not make use of pointers compare to C++?
  4. What is Garbage Collection in Java?
  5. What is the difference between reference and pointer in C++?

网络

  1. What is Restful API? What is its advantage?
  2. Difference between HTTP and HTTPS
  3. Tell me about the HTTP method you are most familiar with
  4. What is the difference between GET and POST method
  5. Tell me about the HTTP status code

数据库

  1. What is the difference between a SQL database and a No-SQL database?
  2. How to design a SQL database?
  3. How to design a No-SQL database?
  4. What is transactions?
  5. How do MySQL indexes work?

操作系统

  1. What is the difference between Process and Thread
  2. What is the difference between multiprocessing vs multithreading
  3. What are the different states of the process?
  4. What are the different scheduling algorithms?
  5. What is virtual memory in os?

如何回答基础知识问题?

  1. 分点叙述:对于复杂的题目尝试分成几个要点,举个例子,题目:“从输入 URL 到展现页面的全过程” 涉及非常多细节和内容,面试回答的时候尝试分解成:

    1. URL 解析
    2. 建立连接
    3. 服务器处理请求
    4. 客户端渲染
  2. 先总后分: 一个常见的错误是针对问题直接说出一大段内容,让面试官进行阅读理解找重点。正确的方式是应该根据总分结构,分点后先将要点的关键字说出来,让面试官对你接下来要讲的内容有一定的预期,然后再阐述对应的细节。

  3. 选点阐述:要有侧重地从这些要点中选择一两个你比较熟悉的阐述细节,其他要点简单介绍即可。例如如果你最熟悉的是建立连接阶段:

    1. URL 解析:包括 URL 分析以及域名解析
    2. 建立连接:包括 TCP 连接以及 HTTP/S 连接,首先 TCP 使用三次握手建立连接 ...... 如果涉及到 HTTPS 的话,那么还需要密钥协商 ......
    3. 服务器处理请求:服务器收到请求后会根据业务逻辑处理请求,并返回结果给客户端
    4. 客户端渲染:客户端收到返回的数据,会将数据渲染到对应的设备

这种情况下,面试官会从你比较熟悉的点去进行延伸提问。