建议收藏!面试讲不清MySQL索引底层

本文记录了一次美团面试经历,涵盖了设计模式的应用、分布式系统的负载均衡、数据库优化、Java并发及JVM知识,以及Spring框架的使用。面试官提问涉及SOA、微服务、内存管理、ConcurrentHashMap、SQL优化等多个技术点,展现了在实际项目中如何灵活运用技术解决问题的重要性。
摘要由CSDN通过智能技术生成

前言

设计模式是我们编程道路上绕不开的一环,用好了设计模式能够让代码拥有良好的维护性、可读性以及扩展性,它仿佛就是“优雅”的代名词,各个框架和库也都能见到它的身影。

正是因为它有种种好处,所以很多人在开发时总想将某个设计模式用到项目中来,然而往往会用得比较别扭。其中一部分原因是业务需求并不太符合所用的设计模式,还有一部分原因就是在Web项目中我们对象都是交由Spring框架的Ioc容器来管理,很多设计模式无法直接套用。那么在真正的项目开发中,我们就需要对设计模式做一个灵活的变通,让其能够和框架结合,在实际开发中发挥出真正的优势。

美团一面:

中间省略掉大概几个问题,因为我不记得了,下面记得的基本都是我没怎么答好的。

  1. 了解SOA,微服务吗?
  2. 分布式系统如何负载均衡?如何确定访问的资源在哪个服务器上?
  3. 一.轮询。二.随机。三.最小响应时间。四. 最小并发数。五.哈希。
  4. 设计一个分布式负载均衡缓冲系统,如何快速定位到是那个服务器(使用key分段、一致性hash)
  5. 如何保证缓冲区和数据库之间的强一致性(使用加锁)
  6. HashMap高并发情况下会出现什么问题,(扩容问题)
  7. 说一说在浏览器中输入一个url后,直到浏览器显示页面的过程中发生了什么(我主要说了DNS,然后他有接着问了DNS的细节,然后就是ARP路由,然后服务器处理,返回,浏览器呈现,获取html中的依赖资源)
  8. 字符串中句子的反转(比如ABC DEF,输出DEF ABC)(很简单,可以先反转整个字符串,然后反转单词,或者先将句子切分为单词,然后反转);
  9. 给任意二叉树的所有结点加next指针(这个有原题,也可以参考按层打印二叉树)。
  10. 用过反向代理吗?

美团二面:

  1. 进程间共享内存的方式有哪些?(8种)
  2. linux下如何查看网络端口状态(netstat),如何查看内存使用情况(top)?
  3. ConcurrentHashMap如何扩容?
  4. 知道java的异常吗?
  5. 运行时异常如果不处理会怎么样?应该怎么处理运行时异常?
  6. 写代码:给你5000万个int,求出前1000个最大的数,有2G内存。(我刚开始以为5000万个int很多,还把G和byte的换算忘了,后来面试官指导才想起来。我的方法是维护一个1000的小根堆,然后遍历数组,总体下来时间复杂度是O(nlg1000))
  7. 给你n个不重复的整数,随机找出m个不重复的整数,要求时间和空间复杂度都是O(m)。(方法很简单,就是每次把取出来的数放到后面,只在前面的数组随机访问就可以了,时间复杂度是O(m),空间复杂度是O(1),不过我刚开始没有想到把选出来的放后面去)。
  8. 对于SQL慢查询的优化?(主要是从查询语句和数据库表设计两个方面来考虑,查询语句方面可以增加索引,增加查询筛选的限制条件;数据库表设计的时候可以拆分表,设计得更细粒度。但是后来才发现面试官想要的就是查询大量数据的慢查询问题的优化。)
  9. 用过哪些容器?(tomcat)对比过Tomcat与其他服务器的区别吗?比如nginx?
  10. 用过动态代理吗?以后会经常用到的。

美团三面:

  1. 自我介绍,说说你项目中的数据流向(画结构框图)
  2. 看过什么书?
  3. 说说深入理解JVM中印象最深刻的章节(我说了JVM内存模型,垃圾回收和类加载);
  4. 补充:还问了堆和栈中存的是什么?static修饰的遍历存在哪里?(方法区)
  5. 说说《Effective Java》中你印象最深的三条和你的理解
  6. 你觉得你哪一块只是最熟悉(我说了Java的基本数据结构)
  7. 那你说说HashMap的内部实现;
  8. HashMap是线程安全的吗?(不是,ConcurrentHashMap是)
  9. 那ConcurrentHashMap内部是如何实现的?每个segment是个什么数据结构?(HashTable)
  10. 你的项目中用到哪些技术?(Spring)
  11. 说说你用了它的什么?(Spring IOC用的最多)
  12. Spring的优点?Spring AOP的原理?Spring如何实现解耦合?
  13. 对链表了解吗?(我说是List吗)是,(了解ArrayList和LinkedList),那你说说他们的区别?
  14. 会做链表两个结点的交换吗?(链表反转吗?)是的,你写代码实现把。
  15. 再写一个,给你一个链表和一个整数k(k大于等于0,小于等于链表长度,链表长度未知),按k步
  16. 反转链表(比如1->2->3->4->5->6->7,当k=3的时候结果是3->2->1->6->5->4->7)
  17. 说说mybatis配置了xml过后是如何完成数据库操作的?

总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后,如果有想要我整理的面试资料的,可以**戳这里免费领取**,我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

面试了阿里,滴滴,网易,蚂蚁,最终有幸去了网易【面试题分享】

学习共同进步,还有一些职业经验的分享。

[外链图片转存中…(img-JDKmhBhF-1621572589106)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值