【JAVA】美团面试七连问
问题1:解释一下对象的创建过程(半初始化)。
申请一块内存,给它赋值默认值(8大类型都有自己的默认值,此时为半初始化状态),然后调用构造方法,赋初始值,然后建立关联
线程上锁
需要两遍检查,DCL= double check lock,开始的时候判断是否为空,加锁,进去后再判断实例是否为空,然后再进行执行,检查两遍。
Volatile :保持线程可见性,禁止指令重排序(谁先请求的,就先返回谁,然后再进行下一个指令。),
问题2:DCL单例到底需不需要volatile?(指令重排)
如果没有禁止指令重排,第一个线程来了会进行版初始化状态,让t不为空,第二个线程来了判断t不为空,直接使用半初始化状态的值,出现不同的异常状态。因此要加上volatile,禁止指令重排序(对内存区域加了volatile,对这个内存限制)。[订单更新的时候会有更新]
问题3:对象在内存中的存储布局(对象与数组的存储不同)
普通对象和数组不同。
普通对象有四项:占用16个字节
markword(标记用,放锁状态年龄 hashcode等)、 8个字节
类型指针classpointer(指向属于哪个类型 a.class)、4个字节
实例数据instance data(存放实例数据int a = new int[0],存放a)、
对齐padding(前面三个内容的位数不是8的倍数(读一块内容的时候,整块读最快),则补上) 4个字节,
JOL能将能将对象打印出来,打印布局。
数组对象有5项:
markword(标记用,放锁状态年龄 hashcode等)、 8个字节
类型指针classpointer(指向属于哪个类型 a.class)、4个字节
数组长度
实例数据instance data(存放实例数据int a = new int[0],存放a)、
对齐padding(前面三个内容的位数不是8的倍数(读一块内容的时候,整块读最快),则补上) 4个字节,
问题4:对象头具体包括什么(markword、 classpointer、synchronized锁信息)
最主要的内容:锁的信息。有一个锁升级的过程。
New--- 偏向锁——自旋锁(无锁 lock-free 轻量级锁)— 重量级锁
偏向锁:贴标签
自旋锁:取消偏向锁,多个线程进行CAS竞争(先读出来,然后修改,再回去对比一下,如果值还是原来的,则贴上标签,加锁成功。), ABA问题,加个版本。自旋次数超过ncpu内存的一半,在jvm中进行抢占,则升级为重量级锁。
重量级锁:将线程放到队列里面,按照顺序执行
问题5:对象怎么定位(直接、间接)
在JVM中怎么指向对象。
1.句柄两次引用,效率低,唯一好处:垃圾回收的比较方便。
T在堆中通过实例数据指针倒找对象,通过类型数据指针在方法区找到t.class。
2.直接指针,平时常用
T指向堆中的类型数据指针,在方法区中找到t.class.
问题6:对象怎么分配(栈上-线程本地-Eden-Old)
Start — new (优先在栈上分配,栈上分配的好处:方法没了之后,栈及没有了,不需要对栈内存进行gc回收。需要满足1.逃逸分析,2.标量替换。)—- 栈上空间够用,直接end,如果不够用,如果很大,看看老年代,可能会fullgec;如果不大,线程本次分配TLAB,年轻代分配里面分配内存,
栈上比堆上快一倍。(java 优化,参照c语言的struct,struck在栈上分配)
1.栈上分配:不会有逸出,没有别的线程访问(没有别的方法使用)。直接使用成员两边替换这个对象。满足以上两个条件则可以进行栈上分配。
e.g. User对象,有两个成员变量 id 和name,小内容的东西直接放在栈上,别的方法不会调用这个user对象;直接使用id和name代替user对象,直接放到栈上。
Gc回收一次,年龄加一,到达一定年龄则进行回收。age是4位,最大表示15.
问题7:object o = new object() 在内存中占用多少字节
普通对象指针 o 占用4个字节,正常占用8个字节,但是开启了压缩,所以是4个。
Object对象占用:16字节,如果有压缩的话,padding是4,如果没有压缩的话,padding是0,指针占用8个字节了。默认压缩。
4字节寻址的最大空间:指向的最大数字2**4*8-1,32g
堆内存超过一定值,访问不到所有对象,压缩自动不起作用了,就算你自己扩展内存为48个g,结果发现对象跟32g一样,内存自动膨胀了。
【JAVA】美团面试七连问相关推荐
- Java中面试官常问问题
Arraylist 与 LinkedList 异同 1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全: 2. 底层数据结构: Arraylis ...
- setnx是原子操作吗_Redis面试七连问,你能扛得住吗?
1.使用redis有哪些好处? 速度快:因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) 支持丰富数据类型:支持string,list,set,so ...
- java开发面试中经常问到的问题(2019年5月)
1.jsp内置对象有哪些? * 在jsp页面中不需要创建,直接使用的对象 * 一共有9个: 变量名 真实类型 ...
- 美团科技 Java工程师_美团网java工程师面试都会问哪些问题?
美团网java工程师面试主要考察面试者的专业知识,涉及TCP/IP 线程.synHashMap底层.进程关系.servlet生命周期.pringMVC单例异常.Object方法.ConcurrentH ...
- 美团Java实习面试经历(拿到Offer)
美团我是在拉勾网上投的简历,之前也投过一次,简历都没通过删选,后来让学姐帮我改了一下简历,重新投另一个部门,获得了面试机会.10月23日中午HR打电话过来预约了下午4点半面试,说会在线写代码,让我准备 ...
- Java程序员从阿里、京东、美团面试回来,这些面试题你会吗?
前言 作为一个 Java 程序员,你平时总是陷在业务开发里,每天噼里啪啦忙敲着代码,上到系统开发,下到 Bug 修改,你感觉自己无所不能.然而偶尔的一次聚会,你听说和自己一起出道的同学早已经年薪 50 ...
- java 反射获取属性名和值_面试官这样问我Java反射原理,我刚好都会
上周我投递出了简历,岗位是java后端开发工程师.这周美团面试官给我进行了面试,面试过程中他问了Java的反射原理.(不得不夸一句,美团的效率真高,上午面完一面,晚上二面马上安排上了.) 无论什么Ja ...
- cms是什么意思啊_美团面试官问我:ZGC 的 Z 是什么意思?
本文的阅读有一定的门槛,请先了解 GC 的基本知识. 现代垃圾收集器的演进大部分都是往减少停顿方向发展. 像 CMS 就是分离出一些阶段使得应用线程可以和垃圾回收线程并发,当然还有利用回收线程的并行来 ...
- 冒泡排序java代码_美团面试,我竟然输给了冒泡排序。。。
前一阵子有个读者在微信里跟我聊了一件很有趣的事情,他去美团实习,面试让他哭笑不得,因为败在了冒泡排序上. 情况是这样子的,当时和面试官聊的感觉还可以,就在他觉得好像差不多快结束的时候,面试官给他扔了个 ...
最新文章
- 4块硬盘做raid几_HP-P4500存储RAID硬盘离线数据恢复案例
- iOS之runtime详解api(三)
- redis linux 文件位置,Linux下Redis的安装和部署
- php 下拉菜单 搜索,DedeCMS实现百度搜索下拉菜单提示信息功能
- 异动分析技术解决方案—异动归因之指标拆解
- grub rescue修复
- 【ARM 】CMSIS
- 【JS逆向系列】某服务器平台sm系列算法分析
- python视频补帧_视频补帧软件(DAIN APP)
- 关于geoserver中line图层线颜色不统一,style中sld写法
- 使用C# .net开发微信公众号之设置所属行业
- 杨绛:越是难熬的时候,人越要体面
- apache服务器wind 下载,安装及部署
- 温度补偿计算公式_温度补偿的方法
- Bowtie2的安装与使用
- 帅到没朋友 (20 分)
- ubuntu下网页快捷方式,chrome网页添加到桌面
- laravel一键生成模型、控制器、视图、表单验证类等等
- python扫描局域网端口和ip_python实现扫描局域网指定网段ip的方法
- vue3前端js通过navigator.serial直接连接地磅仪串口显示重量