2/9滴滴实习

1.Collections.sort()底层用的什么排序方法
Collections.sort(list)
Collections.sort(list,comparator)
Collections.sort(list)底层先将list转化为数组,用Arrays.sort()。Arrays.sort()用的是Timsort(归并排序和插入排序的混合算法)排完了再转回list。
2.Comparable和comparetor
1)实现Comparable<T你想要的类>接口
Comparable接口提供了一个方法compareTo(T o),来实现任何类,以便可以比较该类的两个实例。 方法签名为:
public int compareTo(T o);
一个是实例本身,将调用compareTo方法。另一个比较数作为参数o传递。返回int值。
public class Student implements Comparable
{ private int id;
public int compareTo(Student stu)
{
if (this.id > stu.id)
return 1;
else if (this.id-stu.id == 0)
return 0;
else
return -1;
}
2)Comparator比较器
Comparator接口里面有一个compare方法,方法有两个参数T o1和T o2,是泛型的表示方式,分别表示待比较的两个对象。
自定义单独类构成比较器。
public class MyComparator implements Comparator {
public int compare(Object arg0, Object arg1) {
和前边一样。
}
用法:MyComparator myComparator =new MyComparator()
Collections.sort(list,myComparator)
Arrays.sort(array,myComparator)
TreeSet tree =new TreeSet(myComparator)
TreeMap map=new TreeMap(myComparator)
3)区别:
实现comparable要重写compareTo方法 comparator要重新compare方法。
comparable是实体类来实现的(要保存对象的类中),
comparator 要单独放一个类中,在treeset,treemap,构造方法使用,在list集合中sort方法中,在hashset ,hashmap不可以使用。
3.接口中能否定义常量?
可以,默认public final static
4.Jvm的内存模型
在这里插入图片描述虚拟机栈:
创建一个栈帧来存放方法的各种信息,比如返回值,局部变量表和各种对象引用等,方法开始执行前就先创建栈帧入栈,执行完后就出栈
5.类的静态变量和静态方法能否被子类继承?
可以被继承无法被重写 。但是在重写父类静态方法时无法表现出多态。
Father father = new Son();
father.show(); //没有运行重写的子类方法,仍走得父类
Son son = new Son();
son.show(); 正常走的子类中的覆盖方法
6.子类中能否调用父类的静态变量和静态方法?
可以的,和上面那道题一样
7.String a = New string (“a”);在jvm中如何存储?
用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象
8.String str = "abc"在jvm中创建过程:
先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc" ,如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”
9.Jvm(java虚拟机)调整堆大小?
整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小,所以增大年轻代后,将会减小年老代大小。
对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数
,过多的GC和Full GC是会占用很多的系统资源(主要是CPU),影响系统的吞吐量。特别要关注Full GC。
-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n:设置年轻代大小
-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:MaxPermSize=n:设置持久代大小
10.Java用过什么集合框架
Collection:List,Set
Map
11.ArrayList如何扩容
默认初始10,每次1.5倍扩容,grow函数内部调用Arrays.copy()采用数组复制的方法扩容
int oldcapacity = oldcapacity + (oldcapacity>>1)
12.线程安全的Map有哪些 如果不加锁HashMap怎么保证put安全
HashTable(Synchroized)
ConcurrentHashMap(CAS+Synchronized)
put操作多线程很容易造成死循环或者数据丢失
无法保证只能用别的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值