java面试2

本文详细探讨了Java面试中常见的技术问题,涵盖右移运算符、数据类型存储、对象解析、MySQL事务处理、内存管理、类加载机制等多个方面。深入讲解了对象头、实例数据、对齐填充的内存布局,以及MySQL的自动提交设置、事务隔离级别和表操作。同时,讨论了内存泄露和溢出、对象存活判断、MyBatis游标操作,以及Class.forName和new的区别。文章还涵盖了类加载过程,包括加载、验证、准备、解析和初始化的详细步骤,以及类加载器的工作原理。
摘要由CSDN通过智能技术生成

1 java中右移和无符号右移的区别

右移>> :该数对应的二进制码整体右移,左边的用原有标志位补充,右边超出的部分舍弃。

无符号右移>>> :不管正负标志位为0还是1,将该数的二进制码整体右移,左边部分总是以0填充,右边部分舍弃。

2 double和Double分别占用几个字节

计算方式: 对象头+实例数据+对齐填充

类型 64位(无压缩)
boolean 1
byte 1
short 2
char 2
int 4
float 4
long 8
double 8
普通对象头 16
数组对象头 24
reference(引用类型) 8

3 java对象解析

HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。  

3.1 对象头

HotSpot虚拟机的对象头包含两部分信息

 第一部分用来存储对象自身的运行数据,如哈希码(HashCode),GC分代年龄,锁状态标志,线程持有的锁,,偏向线程ID,偏向时间戳等; 这部分数据的长度在32位和64位的虚拟机(未开启压缩指针)中分别为32比特和64比特,官方称为"Mark Word"; 对象需要存储的运行时数据很多, 其实已经超出了32,64位Bitmap结构所能记录的最大限度,但对象头里的信息是与对象自身定义的数据无关的额外存储成本,考虑到虚拟机的空间效率, Mark Word 被设计成一个有着动态定义的数据结构, 以便在极小的空间内存储尽量多的数据, 根据对象的状态复用自己的存储空间; 

对象头的另外一部分是类型指针, 即对象指向它的类型元数据的指针, java虚拟机通过这个指针来确定该对象是哪个类的示例;如果对象是一个Java数组,那在对象头中还必须有一块用于记录数组长度的数据,

3.2 实例数据

实例数据部分是对象真正存储的有效信息, 即我们在程序代码里面所定义的各种类型的字段内容,无论是从父类集成下来的,还是在子类中定义的字段都必须记录起来;

这部分的存储顺序会受到虚拟机分配策略参数(-XX:FieldsAllocationStyle参数)和字段在Java源码中定义顺序的影响。HotSpot虚拟机默认的分配顺序为longs/doubles、ints、shorts/chars、bytes/booleans、oops(OrdinaryObject Pointers,OOPs),从以上默认的分配策略中可以看到,相同宽度的字段总是被分配到一起存放,在满足这个前提条件的情况下,在父类中定义的变量会出现在子类之前

3.3对齐填充

对齐填充并不是必然存在的,也没有特别的含义,它仅仅起着占位符的作用; 由于HotSpot虚拟机的自动内存管理系统要求对象起始地址必须是8字节的整数倍,也就是说任何对象的大小必须是8字节的整数倍; 对象头部分已经被设计成正好8字节的倍数,因此, 如果对象实例部分没有对齐的话,就需要对齐填充来补全

4 mysql自动提交如何更改,是数据库级别的更改还是连接级别的更改

  • 一种是通过set命令修改会话级别或者数据库级别的参数,但是数据库重启后参数会恢复默认值;
  • 第二种方法是修改mysql的配置文件my.ini,一直生效。

5 mysql 在一个事务中,删除了一张表, 回滚之后,这张表还存在吗

不存在

mysql> select * from person;
+----+------+
| id | name |
+----+------+
|  1 | 2    |
|  2 | 22   |
|  3 | 33   |
+----+------+
3 rows in set (0.00 sec)

mysql> start  transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> drop table person;
Query OK, 0 rows affected (0.01 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from person;
ERROR 1146 (42S02): Table 'person.person' doesn't exist
mysql>

6 如果一个表没有主健会怎么样

1 不规范, 不满足第一范式

2 查询比较慢

InnoDB表是基于聚簇索引建立的, 对主键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hero_孙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值