Java 开发者应该会哪些东西才不会被公司淘汰,美团 Java 面试
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) 
- 小心“永久链接” 
 
 (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 核心知识点整理文档
 
 最后
按照上面的过程,4 个月的时间刚刚好。当然 Java 的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。
学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。
“道路是曲折的,前途是光明的!”
 
  
 










 
    
评论