Java特殊笔记

  1. 字符串拼接时一定会在堆上创建新的字符串常量。

  2. new字符串的时候一定会在堆上创建新的字符串常量,同理,当问String a=“abc”;产生多少对象时,答案是可能一个可能2个,因为要判断原来字符串常量池有没有这个字符串。

  3. 如果使用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次挥手断开连接

  1. 内存只有2G,如何从10G数据中检索出出现次数最多的5个数。
    **每次读取内存限定的值,对数据进行哈希地址计算,放入对应的桶,重复数据对应次数直接+1,非重复数据初始化出现次数为1。如果一个桶满了,即该桶大小超过内存值了,就要创建子桶放新的数据。当所有数据都存放完成,对每个桶进行快排,最后进行所有父桶与子桶的归并排序,就统计出了出现次数最多的数据。
    **同理,要求出topK的数据,只需要维护一个大小为K的最小堆,当读入一个数据发现比堆顶元素小直接丢弃,比堆顶元素大就替换然后维护一下最小堆,继续读入直到全部数据读取完成。

  2. Comparator和Comparable区别:
    **Comparator是java.util包下的,是集合外部实现的排序方法,比较时还需要传入比较器参数,如Arrays.sort(arr,new CatCompare());

**Comparable是java.lang包下的,是集合内部实现的排序方法,实现Comparable接口的类重写compareTo方法,定义比较规则,真正的排序在类外部直接使用Arrays.sort()或者Collection.sort()。

  1. 求一个限定范围的随机数:
    **求[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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值