您的位置:首页 > 文旅 > 旅游 > 中电金信-杭州工商银行|面试真题|2024年

中电金信-杭州工商银行|面试真题|2024年

2024/12/23 16:16:16 来源:https://blog.csdn.net/weixin_45948874/article/details/140507313  浏览:    关键词:中电金信-杭州工商银行|面试真题|2024年

中电金信-杭州工商银行

  1. JAva集合用过哪些?

    • ArrayList、LinkedList、HashSet、TreeSet、HashMap、LinkedHashMap、ConcurrentHashMap
  2. Arraylist和linkbist区别

    • ArrayList底层是数据,查询快,增删慢,线程不安全,效率高
    • LikedList 底层是双向链表,查询慢,增删快,线程不安全,效率高
    • Vector:底层数组,查询快,增删慢,线程安全
  3. hashmap和Hashset的区别,以及査询时问复杂度?

  • HashMap实现了Map接,存储是key,value结构,key不能重复,value可以重复。
  • HashSet实现了Set接口,存储是对象,单列结构,不能重复。
  • 都是基于散列函数, 时间复杂度 O(1) 但是如果太差的话是桶内元素小于6个O(n),大雨8个O(logN)
  • TreeSet==>O(log(n))
  1. 他们是线程安全的吗 ? 如果让你改成线程安全的会怎么做?

  • 1、使用线程安全的集合ConcurrentHashMap
    • 使用volatile修饰节点数组,保证其可见性,禁止指令重排。
    • 做插入操作时,首先进入乐观锁,
      然后,在乐观锁中判断容器是否初始化,
      如果没初始化则初始化容器,
      如果已经初始化,则判断该hash位置的节点是否为空,如果为空,则通过CAS操作进行插入。
      如果该节点不为空,再判断容器是否在扩容中,如果在扩容,则帮助其扩容。
      如果没有扩容,则进行最后一步,先加锁,然后找到hash值相同的那个节点(hash冲突),
      循环判断这个节点上的链表,决定做覆盖操作还是插入操作。
      循环结束,插入完毕。
    • ConcurrentHashMapget()方法是不加锁的,为什么可以不加锁?因为tablevolatile关键字修饰,保证每次获取值都是最新的。
  • 2、使用集合工具类 Collections.synchronizedList
  1. 对锁有了解吗?synchronized和Lock的区别是什么?

​ 有了解,锁的分类有公平锁,非公平/可重入锁,不可重入锁/单机锁,分布式锁/悲观锁,乐观锁

  • Synchronized 无法判断获取锁的状态,Lock 可以判断是否获取到了锁

  • synchronized 内置的Java关键字,Lock 是一个Java类

  • Synchronized 会自动释放锁, Lock 必须要手动释放锁,如果不释放锁,死锁

  • Synchronized 可重入锁不可以中断的,非公平;Lock 可重入锁,可以判断锁,可以自己设置是否公平。

  1. 多线程有用过吗?创建线程的方式有哪些?怎么启动线程?

  • 有用过,每日报表
  • 继承Thread,实现Runnable重写run方法,实现Callable类重写Call方法。
  • 启动线程使用start方法来启动,线程池是使用submit和exceute方法提交
  1. 数据库优化有做过吗?比如:S0L性能调优,分析思路和过程?

  • explain关键字
  1. redis有了解吗?分布式锁的实现,常用的数据类型有哪些?

    • String,zset,set,hash,list
  2. 分布式项目中的事务控制怎么做的?

    1.2PC 2.本地消息表 3.3PC 4.TCC 5.消息事务+最终一致性

  3. 你们开发自测怎么做的?

    参考:单元测试、测试案例要覆盖

覆盖测试,单元测试*,联调测试*,常见错误集合,最后测试统一测试压测

不同的关键字通过相同的哈希函数计算出相同的哈希地址