笔试特点与流程
- 形式:在线笔试,通常使用牛客网等平台。
- 时间:一般持续 90 - 120 分钟。
- 结构:
- 编程题 (1-3道):通常是算法题,难度中等偏上,与 LeetCode Medium 到 Hard 的难度相当,重点考察时间复杂度和空间复杂度的优化。
- 选择题/填空题 (不定项)非常广泛,覆盖计算机基础、数据结构、算法、网络、操作系统、数据库、C++/Java/Python 语言特性等。
- 主观题/简答题 (部分岗位):可能会涉及项目经验、设计思路、系统设计等开放性问题,但较少见,主要面向资深岗位。
主要考察内容
编程题
这是笔试的重中之重,刷题是必须的。
-
核心算法:
- 数组/字符串:双指针、滑动窗口、前缀和、差分数组。
- 链表:快慢指针、反转、合并、环检测。
- 树与图:二叉树的遍历(前中后序、层序)、最近公共祖先、二叉搜索树相关操作,图的遍历、最短路径、最小生成树(Dijkstra, Prim, Kruskal)。
- 动态规划:背包问题(0-1, 完全, 多重)、最长递增子序列、编辑距离、股票买卖问题等,这是高频考点。
- 回溯/DFS/BFS:全排列、组合、子集、N皇后、数独求解。
- 排序与查找:快速排序、归并排序、堆排序的原理和实现;二分查找的各种变种。
-
数据结构:
- 哈希表:解决查找、去重、计数等问题的利器。
- 栈与队列:实现队列用栈、实现栈用队列、单调栈。
- 堆:优先队列、Top K 问题。
-
语言特性:
- C++:智能指针、虚函数与多态、模板、STL 容器(
vector,map,set,unordered_map等)的底层原理和复杂度。 - Java:集合框架(
ArrayList,LinkedList,HashMap,ConcurrentHashMap)、JUC 并发包、线程池、JVM 内存模型。 - Python:列表、字典、集合的底层实现(哈希表)、生成器、装饰器、GIL 全局解释器锁。
- C++:智能指针、虚函数与多态、模板、STL 容器(
基础知识 (选择题/填空题)
这部分考察的是你的“内功”,范围广,需要系统性地复习。
-
数据结构与算法:
- 各种数据结构的定义、特性、操作复杂度。
- 经典算法(排序、查找、图论)的原理、时间/空间复杂度分析。
- 算法思想:贪心、分治、动态规划、回溯。
-
计算机网络:
- TCP/IP 模型:各层协议(应用层:HTTP/HTTPS, FTP, DNS;传输层:TCP/UDP;网络层:IP;数据链路层/物理层)。
- HTTP:请求方法、状态码(200, 301, 302, 400, 404, 500)、Cookie 与 Session、HTTPS 原理(SSL/TLS 握手过程)。
- TCP:三次握手、四次挥手、滑动窗口、拥塞控制、可靠传输机制。
- UDP:与 TCP 的区别和应用场景。
- 其他:DNS 解析过程、ARP 协议、子网划分。
-
操作系统:
- 进程与线程:区别与联系、进程调度算法(FCFS, SJF, RR)、线程同步(互斥锁、信号量、死锁)。
- 内存管理:虚拟内存、分页、分段、页面置换算法(FIFO, LRU, OPT)。
- 文件系统:inode、文件目录结构。
- Linux 常用命令:
grep,awk,sed,ps,top,netstat等。
-
数据库:
- SQL:熟练编写复杂的
JOIN、GROUP BY、HAVING查询。 - 索引:B+ 树索引的原理、聚簇索引与非聚簇索引、索引优化(最左前缀原则)。
- 事务:ACID 特性、隔离级别(读未提交、读已提交、可重复读、串行化)。
- 锁:行锁、表锁、乐观锁、悲观锁。
- 范式:三大范式(1NF, 2NF, 3NF)的理解。
- SQL:熟练编写复杂的
-
面向对象:
- 封装、继承、多态。
- C++:虚函数、纯虚函数、虚表、虚继承。
- Java:接口、抽象类、
final和static关键字、重写与重载。
-
设计模式:
常见的设计模式:单例模式、工厂模式、观察者模式、策略模式、适配器模式等,需要理解其解决的问题和应用场景。
备考策略
-
刷题是核心:
- 平台:LeetCode 是首选,按照“剑指 Offer” -> “Hot 100” -> “公司题库”的顺序刷。
- 方法:不要只刷一遍,第一遍按专题刷,理解思想;第二遍重做,追求最优解;第三遍定期回顾,防止遗忘。
- 目标:确保 Medium 难度的题目能快速、准确地写出代码,并分析出时间和空间复杂度。
-
基础知识系统复习:
- 书籍:《计算机网络:自顶向下方法》、《操作系统概念》、《深入理解计算机系统》、《SQL 必知必会》、《Effective C++/Java》。
- 方法:不要死记硬背,要理解“为什么”,为什么 TCP 是可靠的?HTTP 和 HTTPS 的区别是什么?索引为什么能加速查询?
- 用思维导图或笔记整理知识点,形成自己的知识体系。
-
模拟实战:
- 在牛客网上找 360 历年的笔试真题进行模拟。
- 严格控制时间,模拟真实考试环境,锻炼做题速度和抗压能力。
- 考后认真分析错题,查漏补缺。
-
关注项目经验:
如果简历上有项目,一定要能清晰地讲清楚项目的背景、你的角色、使用的技术栈、遇到的难点以及如何解决的,这可能会在后续的面试中被问到。
真题示例 (回忆版)
编程题示例
1:字符串中的最大异或值**
给定一个整数数组
nums,返回nums[i] XOR nums[j]的最大值,0 <= i < j < len(nums)。这是一个经典的最大异或对问题,可以使用字典树来解决,时间复杂度为 O(N 32),比暴力 O(N^2) 优秀得多。* 2:数组中的第K个最大元素** 在未排序的数组中找到第 k 个最大的元素,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
可以使用快速选择算法(Quickselect),是快速排序的变种,平均时间复杂度为 O(N)。 3:LRU 缓存机制** 设计和实现一个 LRU (最近最少使用) 缓存机制,它应该支持以下操作:获取数据
get和写入数据put。
get(key):如果关键字key存在于缓存中,则返回关键字的值,否则返回 -1。put(key, value):如果关键字已经存在,则变更其数据值;如果不存在,则插入该组「关键字-值」,当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据。标准解法是使用 哈希表 + 双向链表,哈希表实现 O(1) 的查找,双向链表实现 O(1) 的插入和删除。
选择题示例
-
TCP 和 UDP,以下说法正确的是? A. TCP 是面向连接的,UDP 是无连接的。 B. TCP 提供可靠传输,UDP 不提供。 C. TCP 的开销比 UDP 大。 D. 以上都正确。
-
在 Linux 中,用于查看网络连接和侦听端口的命令是? A.
psB.topC.netstatD.ls -
下列哪种排序算法在最坏情况下时间复杂度为 O(n log n)? A. 快速排序 B. 堆排序 C. 冒泡排序 D. 插入排序
-
C++ 中,以下关于虚函数的描述,错误的是? A. 虚函数是实现多态的基础。 B. 虚函数通过虚表 实现。 C. 构造函数不能是虚函数。 D. 析构函数可以是虚函数,但不能是纯虚函数。
面试准备
通过笔试后,面试环节通常包括:
- 技术一面 (基础+项目):深挖项目细节,考察基础知识的掌握程度,可能会出一道简单的手撕代码题。
- 技术二面 (算法+系统设计):难度更大的算法题,或者针对一个具体场景(如设计一个短链接系统、高并发秒杀系统)进行系统设计,考察架构能力。
- HR 面:了解你的求职动机、职业规划、团队合作精神、薪资期望等。
保持积极心态,把笔试当作一次检验自己知识体系的机会。 祝你笔试顺利,成功拿到 360 的 Offer!
