美团java后台面经

美团一面

1. 自我介绍

我叫xxx,来自xxx大学,xxx专业研二,在实验室主要做区块链技术的研究与应用,我写过xxx,了解了xxx。暑假在xx实习,参与了xxx项目,实现了xxx。我觉得自己java基础还可以,希望之后能继续从事后台开发方面的工作。

2. 堆和栈的区别

堆是存放实例化后的对象的,被一个进程内所有线程共享,堆是垃圾回收的主要区域。

栈是存放当前线程相关的信息,被每个线程私有,栈中为每个方法创建一个栈帧,栈帧中包括局部变量表、操作数栈、方法出口、动态链接、堆中对象的引用等。

3. 进程和线程的区别

进程:资源分配的单位,一个进程可包括多个线程,实现操作系统层面的并发。进程在执行过程中拥有独立的内存单元。进程间通信机制:管道/命名管道、socket、信号量、消息队列、共享内存。

线程:是进程的子任务,是cpu调度的基本单位,实现进程内部的并发。多个线程共享进程的内存。线程间通信:互斥量Synchronized,信号量Semphare,事件(信号)wait/notify/notifyAll

4. 内存映射是什么?

内存映射是共享内存的一种实现方式,允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制。共享内存可以通过内存映射实现。

传统文件访问方法是,如果有多个进程访问一个文件,则每一个进程在自己的地址空间都包含有该文件的副本,这会浪费存储空间。当两个进程同时读一个文件的同一页时,系统要将该页从磁盘读到高速缓冲区中,每个进程再执行一个内存期内的复制操作将数据从高速缓冲区读到自己的地址空间。

共享内存映射访问文件的方法是进程A和进程B都将该页映射到自己的地址空间,当进程A第一次访问该页中的数据时,它生成一个缺页中断,内核此时读入这一页到内存并更新页表使之指向它,以后,当进程B访问同一页面而出现缺页中断时,该页已经在内存,内核只需要将进程B的页表登记项指向此页即可。

5. 为什么要有虚拟内存?什么是虚拟地址?

虚拟内存:解决物理内存地址不够用的问题,使用虚拟逻辑地址,让需要大内存的进程可运行。

正在运行的一个进程,他所需的内存是有可能大于内存条容量之和的,比如你的内存条是256M,你的程序却要创建一个2G的数据区,那么不是所有数据都能一起加载到内存(物理内存)中,势必有一部分数据要放到其他介质中(比如硬盘),待进程需要访问那部分数据时,在通过调度进入物理内存。所以,虚拟内存是进程运行时所有内存空间的总和,并且可能有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条。

那么,什么是虚拟内存地址和物理内存地址呢。假设你的计算机是32位,那么它的地址总线是32位的,也就是它可以寻址0~0xFFFFFFFF4G)的地址空间,但如果你的计算机只有256M的物理内存0x~0x0FFFFFFF256M),同时你的进程产生了一个不在这256M地址空间中的地址,那么计算机该如何处理呢?回答这个问题前,先说明计算机的内存分页机制。
计算机会对虚拟内存地址空间(32位为4G

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值