菜鸟科技网

360招聘笔试考什么?

笔试特点与流程

  1. 形式:在线笔试,通常使用牛客网等平台。
  2. 时间:一般持续 90 - 120 分钟。
  3. 结构
    • 编程题 (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 全局解释器锁。

基础知识 (选择题/填空题)

这部分考察的是你的“内功”,范围广,需要系统性地复习。

  • 数据结构与算法

    • 各种数据结构的定义、特性、操作复杂度。
    • 经典算法(排序、查找、图论)的原理、时间/空间复杂度分析。
    • 算法思想:贪心、分治、动态规划、回溯。
  • 计算机网络

    • 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:熟练编写复杂的 JOINGROUP BYHAVING 查询。
    • 索引:B+ 树索引的原理、聚簇索引与非聚簇索引、索引优化(最左前缀原则)。
    • 事务:ACID 特性、隔离级别(读未提交、读已提交、可重复读、串行化)。
    • :行锁、表锁、乐观锁、悲观锁。
    • 范式:三大范式(1NF, 2NF, 3NF)的理解。
  • 面向对象

    • 封装、继承、多态。
    • C++:虚函数、纯虚函数、虚表、虚继承。
    • Java:接口、抽象类、finalstatic 关键字、重写与重载。
  • 设计模式

    常见的设计模式:单例模式、工厂模式、观察者模式、策略模式、适配器模式等,需要理解其解决的问题和应用场景。


备考策略

  1. 刷题是核心

    • 平台:LeetCode 是首选,按照“剑指 Offer” -> “Hot 100” -> “公司题库”的顺序刷。
    • 方法:不要只刷一遍,第一遍按专题刷,理解思想;第二遍重做,追求最优解;第三遍定期回顾,防止遗忘。
    • 目标:确保 Medium 难度的题目能快速、准确地写出代码,并分析出时间和空间复杂度。
  2. 基础知识系统复习

    • 书籍:《计算机网络:自顶向下方法》、《操作系统概念》、《深入理解计算机系统》、《SQL 必知必会》、《Effective C++/Java》。
    • 方法:不要死记硬背,要理解“为什么”,为什么 TCP 是可靠的?HTTP 和 HTTPS 的区别是什么?索引为什么能加速查询?
    • 用思维导图或笔记整理知识点,形成自己的知识体系。
  3. 模拟实战

    • 在牛客网上找 360 历年的笔试真题进行模拟。
    • 严格控制时间,模拟真实考试环境,锻炼做题速度和抗压能力。
    • 考后认真分析错题,查漏补缺。
  4. 关注项目经验

    如果简历上有项目,一定要能清晰地讲清楚项目的背景、你的角色、使用的技术栈、遇到的难点以及如何解决的,这可能会在后续的面试中被问到。


真题示例 (回忆版)

编程题示例

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) 的插入和删除。

选择题示例

  1. TCP 和 UDP,以下说法正确的是? A. TCP 是面向连接的,UDP 是无连接的。 B. TCP 提供可靠传输,UDP 不提供。 C. TCP 的开销比 UDP 大。 D. 以上都正确。

  2. 在 Linux 中,用于查看网络连接和侦听端口的命令是? A. ps B. top C. netstat D. ls

  3. 下列哪种排序算法在最坏情况下时间复杂度为 O(n log n)? A. 快速排序 B. 堆排序 C. 冒泡排序 D. 插入排序

  4. C++ 中,以下关于虚函数的描述,错误的是? A. 虚函数是实现多态的基础。 B. 虚函数通过虚表 实现。 C. 构造函数不能是虚函数。 D. 析构函数可以是虚函数,但不能是纯虚函数。


面试准备

通过笔试后,面试环节通常包括:

  1. 技术一面 (基础+项目):深挖项目细节,考察基础知识的掌握程度,可能会出一道简单的手撕代码题。
  2. 技术二面 (算法+系统设计):难度更大的算法题,或者针对一个具体场景(如设计一个短链接系统、高并发秒杀系统)进行系统设计,考察架构能力。
  3. HR 面:了解你的求职动机、职业规划、团队合作精神、薪资期望等。

保持积极心态,把笔试当作一次检验自己知识体系的机会。 祝你笔试顺利,成功拿到 360 的 Offer!

分享:
扫描分享到社交APP
上一篇
下一篇