爱因斯坦说过“耐心和恒心总会得到报酬的”,我也一直把这句话当做自己的座右铭,这句箴言在今年也彻底在我身上实现了。
每一个程序员都拥有一座大厂梦,我也不例外,去年面试阿里 P6,竟然被 MySQL 问倒了,很多相关性的问题都没有答上来,才 2 面就凉凉了。回去之后也潜心复习了,准备了二战,如今终于进入了阿里,被天猫团队录用。
以下展示的阿里面试题(含答案)、学习资料、实战文档等
01 阿里面试题之 MySQL
之前的阿里面试题都有做总结,具体面试题内容整理成了文档,本文是针对 MySQL 系列的,所以下面只展示了自己第一次面试阿里时被吊打问到的一些 MySQL 难题
-
请解释关系型数据库概念及主要特点?
-
请说出关系型数据库的典型产品、特点及应用场景?
-
请详细描述 SQL 语句分类及对应代表性关键字。
-
什么是 MySQL 多实例,如何配置 MySQL 多实例?
-
如何加强 MySQL 安全,请给出可行的具体措施?
-
误操作执行了一个 drop 库 SQL 语句,如何完整恢复?
-
详述 MySQL 主从复制原理及配置主从的完整步骤。
-
MySQL 如何实现双向互为主从复制,并说明应用场景?
-
MySQL 如何实现级联同步,并说明应用场景?
-
MySQL 主从复制故障如何解决?
02 二战阿里,天猫团队面试题(3 轮技术面+HR 面)
阿里面试技术题:
-
自我介绍呗
-
项目介绍呗(先自己介绍项目,然后再聊天)
-
junit 用法,before,beforeClass,after,afterClass 的执行顺序
-
分布式锁
-
nginx 的请求转发算法,如何配置根据权重转发
-
用 hashmap 实现 redis 有什么问题(死锁,死循环,可用 ConcurrentHashmap)
-
线程的状态
-
线程的阻塞的方式
-
sleep 和 wait 的区别
-
hashmap 的底层实现
-
一万个人抢 100 个红包,如何实现(不用队列),如何保证 2 个人不能抢到同一个红包,可用分布式锁
-
Java 内存模型,垃圾回收机制,不可达算法
-
两个 Integer 的引用对象传给一个 swap 方法在方法内部交换引用,返回后,两个引用的值是否会发现变化
-
AOP 的底层实现,动态代理是如何动态,假如有 100 个对象,如何动态的为这 100 个对象代理?
-
是否用过 maven install、 maven test、git(make install 是安装本地 jar 包)
-
Tomcat 的各种配置,如何配置 docBase
-
Spring 的 bean 配置的几种方式
-
Web.xml 的配置
-
Spring 的监听器。
-
Zookeeper 的实现机制,有缓存,如何存储注册服务的
-
IO 会阻塞吗?readLine 是不是阻塞的
-
用过 Spring 的线程池还是 java 的线程池?
-
字符串的格式化方法 (20,21 这两个问题问的太低级了)
-
时间的格式化方法
-
定时器用什么做的
-
线程如何退出结束
-
java 有哪些锁?乐观锁 悲观锁 synchronized 可重入锁 读写锁,用过 reentrantlock 吗?reentrantlock 与 synmchronized 的区别
-
ThreadLocal 的使用场景
-
Java 的内存模型,垃圾回收机制
-
为什么线程执行要调用 start 而不是直接 run(直接 run,跟普通方法没什么区别,先调 start,run 才会作为一个线程方法运行)
-
qmq 消息的实现机制(qmq 是去哪儿网自己封装的消息队列)
-
遍历 hashmap 的三种方式
-
JVM 的一些命令
-
memcache 和 redis 的区别
-
Mysql 的行级锁加在哪个位置
-
ConcurrentHashmap 的锁是如何加的?是不是分段越多越好
-
myisam 和 innodb 的区别(innodb 是行级锁,myisam 是表级锁)
-
MySQL 其他的性能优化方式
-
Linux 系统日志在哪里看
-
如何查看网络进程?
-
统计一个整数的二进制表示中 bit 为 1 的个数
-
JVM 内存模型,java 内存模型
面试题答案:
03 二战前,我是如何复习的?
(1)MySQL 专题部分(先刷题)
-
Mysql 中有哪几种锁?
-
MYSQL 数据表在什么情况下容易损坏?
-
MySQL 里记录货币用什么字段类型好
-
MYSQL 支持事务吗?
-
解释访问控制列表
-
什么是通用 SQL 函数?
-
什么是非标准字符串类型?
-
Mysql 表中允许有多少个 TRIGGERS?
-
什么样的对象可以使用 CREATE 语句创建?
-
NOW()和 CURRENT_DATE()有什么区别?
-
可以使用多少列创建索引?
-
InnoDB 是什么?
-
Mysql 如何优化 DISTINCT?
-
如何输入字符为十六进制数字?
-
如何显示前 50 行?
-
......
MySQL 面试题答案:
(2)MySQL 性能优化的 21 个最佳实践
-
为查询缓存优化你的查询
-
EXPLAIN 你的 SELECT 查询
-
当只要一行数据时使用 LIMIT 1
-
为搜索字段建索引
-
在 Join 表的时候使用相当类型的例,并将其索引
-
千万不要 ORDER BY RAND()
-
避免 SELECT *
-
永远为每张表设置一个 ID
-
使用 ENUM 而不是 VARCHAR
-
从 PROCEDURE ANALYSE() 取得建议
-
尽可能的使用 NOT NULL
-
Prepared Statements
-
无缓冲的查询
-
把 IP 地址存成 UNSIGNED INT
-
固定长度的表会更快
-
垂直分割
-
拆分大的 DELETE 或 INSERT 语句
-
越小的列会越快
-
选择正确的存储引擎
-
使用一个对象关系映射器(Object Relational Mapper)
-
小心“永久链接”
面试阿里 P6,竟被 MySQL 难倒,再次二战,进入天猫团队(研发岗)
(3)MySQL 性能调优与架构设计
-
基础篇:
-
MySQL 基本介绍
-
MySQL 架构组成
-
MySQL 存储引擎简介
-
MySQL 安全管理
-
MySQL 备份与恢复
-
性能优化篇:
-
影响 MySQLServer 性能的相关因素
-
MySQL 数据库锁定机制
-
MySQL 数据库 Query 的优化
-
MySQL 数据库 Schema 设计的性能优化
-
MySQLServer 性能优化
-
常用存储引擎优化
-
架构设计篇:
-
MySQL 可扩展设计的基本原则
-
可扩展性设计之 MySQLReplication
-
可扩展性设计之数据切分
-
可扩展性设计之 Cache 与 Search 的..
-
MySQLCluster
-
高可用设计之思路及方案
-
高可用设计之 MySQL 监控
04 我的复习宝典资料
(1)Java 面试手册
-
性能优化面试专栏
-
微服务架构面试专栏
-
并发编程高级面试专栏
-
开源框架面试题专栏
-
分布式面试专栏
(2)实战文档
-
Redis 实战
-
MySQL 实战
-
Spring Boot 实战
-
Spring Cloud 实战
-
实战 Java 虚拟机
以实战 Java 虚拟机为例:
-
初探 Java 虚拟机
-
认识 Java 虚拟机的基本结构
-
常用 Java 虚拟机参数
-
垃圾回收概念与算法
-
垃圾收集器和内存分配
-
性能监控工具
-
分析 Java 堆
-
锁与并发
-
Class 文件结构
-
Class 装载系统
-
字节码执行
(3)Java 核心知识点整理文档
由于篇幅限制,很多内容都只展示了目录和截图,这些都整理在文档里,需要这些文档资料的,均可以免费分享给大家,希望所有的程序员都能够学习起来,努力实现我们的大厂梦!