美团 暑期实习 后端开发 一面面经 base 成都

面试过程1小时5分钟,其中55分钟问八股文,之后做了一道链表反转easy题,以及对面试官的反问环节,了解部门主要做什么。

1.讲讲Java中的 == 和 equals的区别

答:==,分两种情况:①当比较基本数据类型变量时,比较两个变量保存的数据是否相等。②如比较引用数据类型变量,比较两个对象的地址值是否相同。equals是一个方法,不是运算符(==是运算符)。分两种情况:①在Object类中定义的equals方法与“==”作用完全相同。②在String,Date,File,包装类等类下的equals方法比较的是两个对象的“实体内容”是否相同。(因为上述类重写了equals方法)

2.String a = "123"; String b = new String("123"); 讲讲你的理解

答:a 指向方法区中的字符串常量池,在常量池开辟了一块空间,存放字符串 123,通过 a 对象指向这个常量对象。而b是new了一个字符串对象,由于使用了 new 关键字,所以会在堆空间中开辟一块内存区域,在其中存放字符串 123,并把内存的地址赋予 b 变量。

3.static可以修饰哪些?可以修饰类吗?

答:static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。

4.什么时候会用到静态内部类?

答案:静态内部类的主要特点:1 不持有外部类的引用(普通内部类持有);2 可以直接创建实例,不需要先创建外部类(普通内部类需要);3 可以有静态成员变量、方法(普通内部类不行)和非静态成员变量、方法;4 只可以直接访问外部类静态成员,不可以直接访问外部类的非静态成员(普通内部类可以),需要通过传入外部类引用的方式才能访问。使用场景:外部类与内部类有很强的联系,需要通过内部类的方式维持嵌套的可读性。内部类可以单独创建。内部类不依赖于外部类,外部类需要使用内部类,而内部类不需使用外部类(或者不合适持有外部类的强引用)。

5.讲讲hashmap。那它是怎么扩容的,2^n为什么?

答:hashmap的实现方式是数组加链表,初始化容量为16,通过对象的hashcode和2^n - 1(例如16 ,2 ^4 - 1二进制为:1111)进行按位与操作,那么可以得到该对象的索引(对应着应该放在数组的那个桶)。扩容时,需要保证容量始终满足2^n,原因就是刚刚说的按位与的操作需要,那当用户扩容的容量不满足这个2^n - 1则按照jdk源码,会强制将容量转化为附近的符合条件的数。当装有元素的桶达到0.75(默认的)则会扩容。因此为了提升性能,在能够预知有多少个元素的情况下,提前指定容量。

6.JVM中有哪些区?

答:程序计数器、方法区、堆、虚拟机栈、本地方法栈。其中堆是GC垃圾回收的主要回收区域。方法区存储很多东西,重要的包括常量池、静态变量以及一些类和方法信息;栈区存储方法的参数和局部变量,还有基本数据类型和引用类型的引用。堆是线程共享的内存区域,栈是线程独享的内存区域。堆中主要存放对象实例,栈中主要存放各种基本数据类型、对象的引用。

7.讲讲jvm中的新生代和老年代

答:新生代分为三个区域,一个Eden区和两个Survivor区,它们之间的比例为(8:1:1),这个比例也是可以修改的。通常情况下,对象主要分配在新生代的Eden区上,少数情况下也可能会直接分配在老年代中。Java虚拟机每次使用新生代中的Eden和其中一块Survivor(From),在经过一次Minor GC后,将Eden和Survivor中还存活的对象一次性地复制到另一块Survivor空间上(这里使用的复制算法进行GC),最后清理掉Eden和刚才用过的Survivor(From)空间。将此时在Survivor空间存活下来的对象的年龄设置为1,以后这些对象每在Survivor区熬过一次GC,它们的年龄就加1,当对象年龄达到某个年龄(默认值为15)时,就会把它们移到老年代中。Survival区与Eden区相同都在Java堆的年轻代。Survival区有两块,一块称为from区,另一块为to区,这两个区是相对的,在发生一次Minor GC后,from区就会和to区互换。在发生Minor GC时,Eden区和Survivalfrom区会把一些仍然存活的对象复制进Survival to区,并清除内存。Survival to区会把一些存活得足够旧的对象移至年老代。年老代里存放的都是存活时间较久的,大小较大的对象,因此年老代使用标记整理算法。当年老代容量满的时候,会触发一次Major GC(full GC),回收年老代和年轻代中不再被使用的对象资源。堆=新生代+老年代,不包括永久代(方法区)。

8.新生代中的survival区满了怎么办?老年代满了怎么办?

答:这个没有深入了解,我的思路是survival区满了那么将年龄比较大的对象移到老年代。那如果老年代也满了。。。那。。。那。。。也不能随机清理吧,万一程序崩了呢。
答案:新生代调优建议:对于上述的新生代问题, 如果服务器内存足够用, 建议是直接增大新生代空间(如 -Xmn)。如果内存不够用, 则增加 Survivor 空间, 减少 Eden 空间, 但是注意减少 Eden 空间会增加 Minor GC 频率, 要考虑到应用对延迟和吞吐量的指标最终是否符合。要增大多少 Survivor 空间? 需要观察多次 Minor GC 过程, 看 Minor GC 后存活下来的对象大小, 最终确定 Survivor 的合适大小。 整个调优过程可能需要几次调整, 才能找到比较合适的值。调整几次后, 如果内存还是不够用, 就要需要考虑增大服务器内存, 或者把负载分担到更多的 JVM 实例上。Survivor 空间计算公式: survivor 空间大小 = -Xmn[value] / (-XX:SurvivorRatio=<ratio> + 2)  。
老年代满了该咋办我也没找到答案,求大佬指出思路。

9.怎么判断一个对象是不是垃圾?

答:引用计数法、可达性分析。

10.有没有实际调优过?

答:抱歉,老师,这个我也记得不是很清楚了,大概记得如果cpu满了,可以通过一些命令判断是哪个进程,那个线程。然后通过命令定位到是代码的哪一行出现了问题。具体的命令忘了。

11.http协议是属于哪一层?它与tcp协议的关系。

答:处于应用层。http将内容分为若干个tcp,并给每个tcp记录上顺序,传输到对方之后,按照顺序拼回来。

12.那如果缺失了一些tcp包,有什么机制保证不会出问题。

答:通过超时重传的机制。主要有两种方式,一种是将tcp分组,一个组的包都收到了会发送一个确认,对方收到了确认之后才会进行下一组的传输。另一种就是Go back to n。例如1,2,3,5,6,7,8。那么会从4开始重新传。
-------------------------------------
时间有点紧,先去吃饭了,先写下记得的问题,之后再来填坑

13.拥塞控制有哪些?

14.tcp和udp的区别,tcp怎么保证可靠?

15.了解二叉平衡搜索树吗?

16.了解B+树吗?哪些地方用到了?和B树的区别?

17.mysql有哪些存储引擎?

18.mysql的隔离机制有哪些?默认使用哪个?

19.mysql通过什么来实现read committed 和repeatable read?

20.mysql索引的结构,实现机制。慢查询(写了sql语句发现查询效率很慢),工程上,你怎么去找出问题?怎么看你写的索引是否生效了

21.spring中的注解,bean默认是单例模式吗?

22.spring中的注入,Autowired和Resource的区别

23.AOP讲一下

24.如果有一个类用final修饰,那么AOP能生效吗?

25.redis和数据库怎么保持一致性?

26.synchronize可以修饰哪些?修饰方法的时候,对应内存中是什么样的?

27.volatile的作用是什么

28.TreadLocal怎么使用?

29.equals和hashcode的关系

30.你会用Java实现一个线程池吗,提示JUC包下

31.http有哪些状态码

32.请求类型除了get,post还有哪些呢?

33.讲讲索引失效的场景


八股文问的太多了只记得这些了,好多问的问题现在有点想不起来了。

算法题出了一道简单题:反转链表
思路给面试官说了,2~3分钟写出来之后有没检查,没有调试没有run。最后面试完,盯了一下代码才发现,return错了。。。。哭死
import java.util.*;
public class Main {
    public ListNode reverse(ListNode head){
        if(head == null || head.next == null) return head;
        ListNode pre = head;
        ListNode post = head.next;
        while(post != null){
            ListNode temp = post.next;
            post.next = pre;
            pre = post;
            post = temp;
        }
        return head;
        //太马虎了,这里写错了大意了。没有自己run,2分钟写出来也没检查
        //return head应该改成return tail也就是pre最终指向的节点:
        //正确的如下:13行“return head;”删除,改为:
        head.next = null;
        return pre;
    }
}



#2022春招##实习##面经##美团##后端开发#
全部评论
收到感谢信了牛啊美团
3 回复
分享
发布于 2022-03-11 15:25
即将面试美团成都的我,慌的一批
2 回复
分享
发布于 2022-03-08 22:58
联想
校招火热招聘中
官网直投
我们也在招实习😂
1 回复
分享
发布于 2022-03-08 21:12
兄弟请问一下收到二面通知了吗
1 回复
分享
发布于 2022-03-09 07:59
好舒服  真的很基础  冲冲冲
1 回复
分享
发布于 2022-03-09 14:43
分享一下自己的面经:https://www.nowcoder.com/discuss/855750?source_id=profile_create_nctrack&channel=-1
1 回复
分享
发布于 2022-03-09 15:38
字符串常量池1.8是在堆噢
点赞 回复
分享
发布于 2022-03-08 20:12
电话面吗还是视频面
点赞 回复
分享
发布于 2022-03-08 20:26
这么久啊
点赞 回复
分享
发布于 2022-03-08 21:28
一共几轮呀,准备这周投了🌚🌚🌚,虽然很菜
点赞 回复
分享
发布于 2022-03-08 23:27
请问一下笔试难不难,友友怎么准备的,我收到了下轮笔试邀请。
点赞 回复
分享
发布于 2022-03-09 17:54
有二面消息没
点赞 回复
分享
发布于 2022-03-09 19:34
祝楼主好运!  阿里巴巴盒马鲜生JAVA23届实习内推,部门HC充足,面试流程快,目前竞争压力不大,可全程跟踪,欢迎投递哦~邮箱cangliao.wzy@alibaba-inc.com  链接里面有投递二维码和微信哦,欢迎咨询. https://www.yuque.com/u12501101/kb/zm6mzr
点赞 回复
分享
发布于 2022-03-09 23:08
点赞 回复
分享
发布于 2022-03-10 15:52
通知二面了吗
点赞 回复
分享
发布于 2022-03-10 18:22
我投的深圳的😥为什么周一给我发邮件只能约15,16号的面试
点赞 回复
分享
发布于 2022-03-10 18:37
阿里也在招暑期实习,同学要不要来试试:https://www.nowcoder.com/discuss/850913?source_id=profile_create_nctrack&channel=-1
点赞 回复
分享
发布于 2022-03-11 10:15
淘系互动Java23实习hc多多,同学可以试试:https://www.nowcoder.com/discuss/855139?source_id=profile_create_nctrack&channel=-1
点赞 回复
分享
发布于 2022-03-11 11:47
想问一下面试算法题的IDE是啥,本地吗
点赞 回复
分享
发布于 2022-03-11 15:23
阿里巴巴-菜鸟网络23届暑期实习招聘,部门直推,可帮忙看简历,查内推进度,暑期实习转正率90%,https://www.nowcoder.com/discuss/856980
点赞 回复
分享
发布于 2022-03-11 16:10

相关推荐

54 398 评论
分享
牛客网
牛客企业服务