Java面试题整理-基础

HashMap排序
1.继承Comparable接口
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。

2.自定义比较器
强行对某个对象 collection 进行整体排序 的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。

/**
 * 实现对HashMap集合排序
 * /
public class HashMapTest {
    public static void main(String[] args) {
        HashMap<Integer, User> users = new HashMap<>();
        users.put(1, new User("张三", 25));
        users.put(3, new User("李四", 22));
        users.put(2, new User("王五", 28));
        System.out.println(users);
        // 如何将hashmap排序呢?
        HashMap<Integer, User> sortHashMap = sortHashMap(users);
        System.out.println(sortHashMap);
    }

    private static HashMap<Integer, User> sortHashMap(HashMap<Integer, User> users) {
        Set<Map.Entry<Integer, User>> entrySet = users.entrySet();
        // 将set集合转化为list集合,因为我们要使用集合工具类对数据进行排序
        ArrayList<Map.Entry<Integer, User>> list = new ArrayList<>(entrySet);
        Collections.sort(list,
                   // 这里使用的是Java8兰布达表达式
                (Map.Entry<Integer, User> o1, Map.Entry<Integer, User> o2) ->
                        o2.getValue().getAge() - o1.getValue().getAge()
        );
        // LinkHashMap是有序的Map集合
        LinkedHashMap<Integer, User> linkedHashMap = new LinkedHashMap<>();
        for (Map.Entry<Integer, User> entry : list) {
            linkedHashMap.put(entry.getKey(), entry.getValue());
        }
        return linkedHashMap;
    }
}

Java 中会存在内存泄漏吗?
理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题。开发中,可能会存在无用但可达的对象,这些对象不能被GC回收,因此也会导致内存泄露的发生。例如hibernate的Session(一级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无用的垃圾对象,如果不及时关闭(close)或清空(flush)一级缓存就可能导致内存泄露。

GC是什么? 为什么要有GC?
GC可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。调用下面的方法之一:System.gc() 或Runtime.getRuntime().gc() ,但JVM可以屏蔽掉显示的垃圾回收调用。

什么时候用assert (断言):
常用的调试方式。对程序的一条语句进行检查,保证其为true。若为false,说明程序处于不正确状态,系统将给出警告或退出。assertion检查通常在开发和测试时开启。为了提高性能, 在软件发布后,assertion检查通常是关闭的。

Webservice与RPC的区别:
RPC:
1)RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。
2)RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯)
3)RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(类似于Http的工作方式)
4)RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)
WebService: http传输信道、XML的数据格式、SOAP封装格式、WSDL的描述方式、UDDI,是一种目录服务,企业可以使用它对WebService进行注册和搜索

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值