适用人群:求职者、转行开发者
学习时长:约1-2周集中准备
覆盖内容:简历、算法、项目、面试技巧
一、简历撰写
1.1 简历结构
✅ 基本信息(姓名、联系方式、GitHub)
✅ 技术技能(语言、框架、工具)
✅ 工作经历(按时间倒序)
✅ 项目经历(STAR法则描述)
✅ 教育背景
✅ 自我评价(可选)
1.2 技能描述示例
编程语言:Python(熟练)、Go(熟练)、JavaScript/TypeScript(熟练)、PHP(熟悉)、Java(熟悉)
前端框架:Vue.js 3、React、Element Plus、Ant Design
后端框架:Laravel、Flask、Gin、Spring Boot、Express
数据库:MySQL、PostgreSQL、MongoDB、Redis
工具:Git、Docker、Nginx、Linux、GitHub Actions
其他:RESTful API设计、微服务架构、CI/CD
1.3 项目描述(STAR法则)
项目名称:电商后台管理系统
技术栈:Vue 3 + Element Plus + Laravel + MySQL + Redis
项目描述:
- Situation:公司需要一个统一的后台管理系统管理商品、订单、用户
- Task:负责后端API开发和数据库设计
- Action:
- 设计并实现了RESTful API,包含50+接口
- 使用Redis缓存热点数据,QPS提升3倍
- 实现了RBAC权限管理系统
- Result:
- 系统上线后处理效率提升50%
- 支持日均10万+订单处理
二、常见面试题
2.1 PHP面试题
// Q1:PHP数组类型有哪些?
// 答:索引数组、关联数组、多维数组
// Q2:== 和 === 的区别?
// 答:== 只比较值,=== 比较值和类型
"0" == false // true
"0" === false // false
// Q3:Session和Cookie的区别?
// 答:Session存在服务端,Cookie存在客户端;Session更安全
// Q4:如何防止SQL注入?
// 答:使用预处理语句(PDO prepare)
// Q5:PHP的垃圾回收机制?
// 答:引用计数 + 循环收集器
2.2 MySQL面试题
-- Q1:索引的类型?
-- 答:主键索引、唯一索引、普通索引、全文索引、联合索引
-- Q2:什么是覆盖索引?
-- 答:查询的列都在索引中,不需要回表
SELECT username FROM users WHERE username = '张三';
-- 如果username有索引,就是覆盖索引
-- Q3:事务的ACID特性?
-- 答:原子性、一致性、隔离性、持久性
-- Q4:MySQL的存储引擎有哪些?
-- 答:InnoDB(默认,支持事务)、MyISAM(不支持事务)
-- Q5:如何优化慢查询?
-- 答:EXPLAIN分析、添加索引、避免SELECT *、优化JOIN
2.3 JavaScript面试题
// Q1:var、let、const的区别?
// 答:var有变量提升,let/const有块级作用域,const不可重新赋值
// Q2:Promise的三种状态?
// 答:pending、fulfilled、rejected
// Q3:什么是闭包?
// 答:函数能够访问其外部作用域的变量
function outer() {
let count = 0
return function inner() {
return ++count
}
}
// Q4:深拷贝和浅拷贝的区别?
// 答:深拷贝完全复制,浅拷贝只复制一层
const deep = JSON.parse(JSON.stringify(obj))
const shallow = { ...obj }
// Q5:async/await的原理?
// 答:基于Generator和Promise的语法糖
2.4 框架面试题
Vue面试题:
- Vue2和Vue3的区别?(Composition API、Proxy响应式)
- Vue的生命周期?(setup、onMounted、onUpdated、onUnmounted)
- Vuex和Pinia的区别?(Pinia更轻量、支持Composition API)
- Vue Router的导航守卫?(beforeEach、beforeRouteEnter)
React面试题:
- Hooks的使用规则?(不能在条件/循环中调用)
- useEffect的依赖数组?(空数组=挂载时,有值=值变化时)
- Redux和Zustand的区别?(Zustand更简洁)
- 虚拟DOM的作用?(减少真实DOM操作,提高性能)
Laravel面试题:
- 服务容器是什么?(依赖注入容器)
- 中间件的作用?(请求过滤、认证、日志)
- Eloquent的关系类型?(hasOne、hasMany、belongsTo、belongsToMany)
- 队列的作用?(异步处理耗时任务)
三、算法准备
3.1 必刷题目(LeetCode)
数组:
- 两数之和(#1)
- 三数之和(#15)
- 合并两个有序数组(#88)
链表:
- 反转链表(#206)
- 合并两个有序链表(#21)
- 环形链表(#141)
字符串:
- 有效的括号(#20)
- 最长回文子串(#5)
- 字符串转整数(#8)
树:
- 二叉树的中序遍历(#94)
- 对称二叉树(#101)
- 二叉树的最大深度(#104)
动态规划:
- 爬楼梯(#70)
- 最大子序和(#53)
- 买卖股票的最佳时机(#121)
3.2 常见算法模板
// 二分查找
function binarySearch(nums, target) {
let left = 0, right = nums.length - 1
while (left <= right) {
const mid = Math.floor((left + right) / 2)
if (nums[mid] === target) return mid
if (nums[mid] < target) left = mid + 1
else right = mid - 1
}
return -1
}
// 快速排序
function quickSort(arr) {
if (arr.length <= 1) return arr
const pivot = arr[0]
const left = arr.slice(1).filter(x => x <= pivot)
const right = arr.slice(1).filter(x => x > pivot)
return [...quickSort(left), pivot, ...quickSort(right)]
}
// BFS层序遍历
function levelOrder(root) {
if (!root) return []
const result = [], queue = [root]
while (queue.length) {
const level = []
const size = queue.length
for (let i = 0; i < size; i++) {
const node = queue.shift()
level.push(node.val)
if (node.left) queue.push(node.left)
if (node.right) queue.push(node.right)
}
result.push(level)
}
return result
}
四、系统设计面试
4.1 常见问题
设计一个URL短链接系统
设计一个微博/推特系统
设计一个秒杀系统
设计一个聊天系统
设计一个分布式缓存
4.2 回答框架
1. 需求澄清:确认功能需求和非功能需求
2. 高层设计:画出系统架构图
3. 数据库设计:表结构、索引
4. API设计:接口定义
5. 详细设计:核心流程
6. 扩展讨论:性能优化、扩展性
4.3 示例:设计秒杀系统
需求:
- 商品限量100件
- 预计10万用户同时抢购
- 需要防止超卖
设计:
1. 前端:按钮防抖、CDN静态化
2. 网关:限流(令牌桶)
3. 库存预热:Redis预减库存
4. 异步下单:消息队列
5. 数据库:乐观锁防超卖
关键代码:
// Redis预减库存
if (redis.decr('stock:123') >= 0) {
// 发送消息到队列
rabbitmq.send('order', { userId, productId })
}
// 数据库乐观锁
UPDATE products SET stock = stock - 1
WHERE id = 123 AND stock > 0
五、面试技巧
5.1 面试流程
1. 自我介绍(2-3分钟)
2. 技术问答(15-20分钟)
3. 编程题(20-30分钟)
4. 项目介绍(10-15分钟)
5. 系统设计(15-20分钟)
6. 反问环节(5分钟)
5.2 注意事项
✅ 提前了解公司和岗位
✅ 准备好自我介绍
✅ 项目经历要熟悉细节
✅ 算法题要边写边讲思路
✅ 不会的问题诚实说不会
✅ 反问环节要问有价值的问题
❌ 不要背诵答案
❌ 不要和面试官争论
❌ 不要贬低前公司
5.3 反问面试官
- 团队的技术栈是什么?
- 日常工作流程是怎样的?
- 这个岗位的主要挑战是什么?
- 团队规模和组织结构?
- 公司对新员工有什么培训?
六、学习资源
算法:
- LeetCode(https://leetcode.cn/)
- 代码随想录(https://programmercarl.com/)
面试题:
- 牛客网(https://www.nowcoder.com/)
- 掘金(https://juejin.cn/)
系统设计:
- System Design Primer(GitHub)
- 极客时间《系统设计面试》
项目:
- GitHub Trending
- 仿写知名项目(如仿微博、仿淘宝)
学习建议
- 先刷50道LeetCode,掌握基本数据结构和算法
- 准备3个项目,能深入讲解技术细节
- 背诵常见面试题,理解原理而不是死记
- 模拟面试,找朋友练习
- 保持心态,面试是双向选择