Java的第一次面试(记录)

Java的第一次面试(记录)

Java第一次面试

空指针异常

为什么会有空指针问题?从JVM的内存解释
网上:指针是对象的引用。空指针,就是指针的内容为空。由于这是一个空的指针,指向了声明类型的类的空对象,所以你在应用这个对象的属性或者方法的时候,就会报空指针异常。
那么空指针指向了空的地址还是指向了错误的地址呢还是没指呢?
1.未加载入内存中(方法区)。
2.未初始化。 not initialized,创建了一个引用,没有为该对象分配任何内存。(java堆)
3.指向了null,方法区地址为系统的0地址单元,对象 = null 指向到一个空地址,声明了一个对象的引用,并没有在jvm中开辟内存,已进行存储。同未初始化,但是null有指向。(java堆)
【注:new出来的就已经是实体了,这个实体会占用内存的。】

类的加载
上面的内容涉及类的加载,网上很多我就不在这里说了,可以在这看看JVM内存结构,类加载器、运行时数据区(内存)、执行引擎。
引用自 超级战斗王 :https://blog.csdn.net/m0_38075425/article/details/81627349

== 与 equals

网上也很多,简单说就是equals比较值,==比较地址。我只说了string比较值,他让我描述源码。string就是逐个比较字符,其实很多包装类也比较的是值。但是对象的话需要重写equals方法。
在这里插入图片描述

微信/支付宝支付的订单号唯一问题

我只遇到过支付宝支付唯一,因为做项目的时候就测试支付宝支付,微信支付的订单号那个时候写了,其实这两个都是订单号唯一,否则不能支付。(厚着脸皮问了对方的解决办法!)
解决:
我的: 如果支付不成功,把订单的状态改为一个失效(比如-1),然后复制订单号,新加一条订单,code不变,id自增肯定变了。
【很麻烦,不知道自己的脑子怎么抽了想出这种】

对方: 调用第三方支付开一张新表,新表的中生成新的下单ucode码(这里有有两个,一个是给用户看的code码,一个是下单用的ucode码,一个是订单id),新表包含ucode和订单id,这样一条失效可以创建新的ucode,而且不用复制订单,只需要用id关联即可。
【欸,一说新表就清楚了,但是谁给你机会呢。】

数组取最多次数

开一个map,存储值的内容和次数。map内原来数组的值做键,次数做值这样的键值对<你要记录的值,次数>,最后查map,两次遍历。或者map排序,肯定低于O(n)。
【还有一个想法,可行性未知。当剩下数个数小于当前最大数量值的个数,可以直接出,不用全部遍历,会不会更快点。但是如何获得这个最大数量值的个数。。。。。】

想着map,我说开一个set???我是馋set的身子

分布式事务问题

这一块太多了,等我自己理清了再贴。

感谢面试官给我的教训,只会敲代码还是没用!准备不充足没戏!

以上内容,说的有问题,请大佬们务必直接指出,不胜感激!!!谢谢!!!