面试问题
- 二分钟自我介绍
- MySQL与Redis区别?
- MySQL索引有哪些?索引失效的场景有哪些?
- String s1 = new String("abc") 创建对象过程
- 熟悉哪些“高级”SQL? 后来说比如 JOIN这类的?
- 左外链接和右外连接的区别?
- 自动装箱和拆箱原理?
- 数据结构有哪些?
- 本科参加的一个比赛详细谈谈?
- 问了老家哪里的?笔试题分数不高为什么?(估计找不到问的了)
复盘解析:
1. MySQL与Redis区别?
- 数据库类型:MySQL是关系型数据库,主要存放持久化数据,将数据存储在硬盘中,读取速度较慢;Redis是NOSQL,非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行速度,但是保存时间有限。
- 运行机制:MYSQL每次访问都存在着I/O操作,花费时间多,数据库负载过高;Redis直接从缓存中读取数据。
- 存放位置:MYSQL存放在磁盘中(存放基本数据);Redis存放在内存中(适合存放热点数据)。
- 一般采用MYSQL(主)+Redis(辅)
2.MySQL索引有哪些?索引失效的场景有哪些?
Hash索引和B+树索引(InnoDB引擎默认索引)
- Hash索引:底层就是hash表,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据。
- B+树索引:底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据.
- Hash索引与B+树索引区别:hash索引等值查询更快,无法进行范围查询;而B+树索引可以,因为B+树的所有节点都遵循(左节点小于父节点,右节点大于父节点,天然支持范围。 hash索引一定需要回表操作;B+树看采用聚簇索引还是费聚簇索引。
- B+树索引还分为聚簇索引和非聚簇索引 聚簇索引:按照每个表的主键构造B+树,叶子节点存放的是行记录数据,每个表只能有一个聚簇索引; 非聚簇索引:在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找。辅助索引页子节点存储得的不再是行的物理地址,而是主键值,接着在通过获得主键值回表找到对应主键值的行数据。
索引失效场景: 1.查询条件中有or,即使有部分条件带索引也会失效
、 2.like查询是以%开头0
3.如果列类型是字符串,那在查询条件中需要将数据用引号引用起来,否则不走索引
4.索引列上参与计算会导致索引失效
5.违背最左匹配原则
Mysql最左匹配原则_李歘歘的博客-CSDN博客_mysql最左匹配原则
3.String s1 = new String("abc") 创建对象过程
首先会判断字符串常量池中是否存在字符创“abc”,不存在先在字符串常量池中创建,在栈中创建变量s并指向在堆中创建一个字符串对象,内容等于常量池的“abc”。
4.熟悉哪些“高级”SQL? 后来说比如 JOIN这类的?
左外连接,也称左连接,左表为主表,左表中的所有记录都会出现在结果集中,对于那些在右表中并没有匹配的记录,仍然要显示,右边对应的那些字段值以NULL来填充。右外连接,也称右连接,右表为主表,右表中的所有记录都会出现在结果集中。左连接和右连接可以互换,MySQL目前还不支持全外连接
5.自动装箱和拆箱原理?
- 装箱:将基本类型用它们对应的引用类型包装起来;
- 拆箱:将包装类型转换为基本数据类型;
6.数据结构有哪些?
常用的数据结构有:数组(Array)、栈(Stack)、队列(Queue)、链表(Linked List)、树(Tree)、图(Graph)、堆(Heap)、散列表(Hash)