-
字符串拼接时一定会在堆上创建新的字符串常量。
-
new字符串的时候一定会在堆上创建新的字符串常量,同理,当问String a=“abc”;产生多少对象时,答案是可能一个可能2个,因为要判断原来字符串常量池有没有这个字符串。
-
如果使用String的sublist方法截取字符串,当传入参数截取的是整个字符串,那么返回的是原字符串,并不会产生新字符串在堆上,而如果截取的是部分原字符串,那么就会深复制一段新的所求字符串并放入堆中。
4.Integer定义的对象在-128到127的闭区间之内,都会从常量池去获取对象,当不在此范围就会新创建一个。
5.接口中的默认方法默认是public和abstract修饰的,对于abstract类型的方法必须要重写。
6.Interface属于like a,而abstract继承属于is a问题
7.接口中的变量都是public static final修饰的,方法都是public abstract修饰的
8.当输入一个URL后会发生什么?
**1. 校验URL正确性
**2. 监测本地缓存
**3. 访问DNS服务器
**4. 建立TCP连接
**5. 浏览器将传输请求信息发送给服务器端
**6. 服务器得到请求信息,进行业务处理
**7. 服务器将信息返回给客户端
**8. 浏览器拿到响应信息后,通过浏览器执行引擎解析结果并将结果展示给用户
**9. TCP4次挥手断开连接
-
内存只有2G,如何从10G数据中检索出出现次数最多的5个数。
**每次读取内存限定的值,对数据进行哈希地址计算,放入对应的桶,重复数据对应次数直接+1,非重复数据初始化出现次数为1。如果一个桶满了,即该桶大小超过内存值了,就要创建子桶放新的数据。当所有数据都存放完成,对每个桶进行快排,最后进行所有父桶与子桶的归并排序,就统计出了出现次数最多的数据。
**同理,要求出topK的数据,只需要维护一个大小为K的最小堆,当读入一个数据发现比堆顶元素小直接丢弃,比堆顶元素大就替换然后维护一下最小堆,继续读入直到全部数据读取完成。 -
Comparator和Comparable区别:
**Comparator是java.util包下的,是集合外部实现的排序方法,比较时还需要传入比较器参数,如Arrays.sort(arr,new CatCompare());
**Comparable是java.lang包下的,是集合内部实现的排序方法,实现Comparable接口的类重写compareTo方法,定义比较规则,真正的排序在类外部直接使用Arrays.sort()或者Collection.sort()。
- 求一个限定范围的随机数:
**求[min,max]之间的随机数
**random.nextInt(max)会生成[0,20]的随机数,对(max-min+1)取余最大可获得值为max-min,最小可获得值为min。
import java.util.Random;
public class text{
public static void main(String[] args) {
Random random=new Random();
int max=20,min=10;
int a=random.nextInt(max)%(max-min+1)+min;
System.out.println(a);
}
}