2019-03-11 小米散招面试-Java后台实习
1.项目
简历上的项目描述:
2018.09-2018.12 企业级电商系统
本项目使用SMM框架开发,使用Git控制版本,数据库使用MySQL,商品模块抽象出 POJO,BO,VO 模型,并实现了高效分页及动态排序,与 FTP 服务器对接,可以进行 SpringMVC 文件上传和富文本文件上传。搭建 Tomcat集群和 Redis分布式,并利用 Nginx 进行负载均衡。
问题:
1.介绍一下你的项目,可以画图讲解一下。(项目做了什么,用了什么技术,遇到什么难题,怎么解决)
2.数据库怎么搭建的?
3.一共有几张数据表,画图表示下表之间的关系
4.Tomcat集群,搭建了几个tomcat?
5.Git命令(Git push, Git commit)?
2.Java基础/数据库
2.1. ConcurrentHashMap的size方法怎么实现的
2.2. 画一个B+树
2.3. 为什么数据库索引用B+树不用红黑树(IO代价)
2.4. 100万条数据,用B+树,放几层(数据库一般3-5层)(IO代价)
2.5. 手写一个线程安全的单例模式(没有volatile关键字会怎样,volatile关键字的理解)
2.6. synchronize的理解(是什么锁)
2.7. Java内存分配(什么放新生代,什么放老年代)
2.8. 垃圾回收时,怎么确定哪些是要被回收的?
2.9. class A里的方法a 中 synchronize(A.class) 方法b 中也synchronize(A.class),那方法b能被执行么
synchronize(A.class) 和synchronize(this.class)的区别
3.算法
3.1. 原地反置链表
3.2. 中序遍历二叉树(非递归)
感受
面试问题问的很深入,很细节,小米的环境很像学校实验室的感觉,准备的不够充分,答的不好,但是面试官人很Nice,就是当我答不上来的时候,他的眼神像是在质问我为啥这都不会,感觉非常羞愧!