没有合适的资源?快使用搜索试试~ 我知道了~
阿里巴巴/招行信用卡中心21届实习面试知识点汇总
需积分: 0 0 下载量 112 浏览量
2020-12-21
10:28:19
上传
评论
收藏 195KB PDF 举报
温馨提示
试读
8页
基础 JDK1.8的新特性(阿里) ①引入了lambda表达式,可以简化匿名内部类的代码,允许将方法作为参数。②方法引用,可以进一步简化lambda表达式的书写,可以引用类的构造方法,静态方法,特定类的方法和某个对象的方法。③可以在接口中使用default定义默认方法和静态方法,引入默认方法方便了接口升级的维护,之前如果在接口中新增一个方法必须修改所有实现类。④引入了stream类,支持链式编程,为集合类和数组提供了一些方便的操作方法,例如filter、skip、limit和map、concat等。⑤可以通过类型自动推测泛型参数。⑥允许重复使用注解,扩大了注解的使用范围,可以用在局部变量和泛型
资源详情
资源评论
资源推荐
阿里巴巴阿里巴巴/招行信用卡中心招行信用卡中心21届实习面试知识点汇总届实习面试知识点汇总
基础
JDK1.8的新特性(阿里)
①引入了lambda表达式,可以简化匿名内部类的代码,允许将方法作为参数。②方法引用,可以进一步简化lambda表达式的
书写,可以引用类的构造方法,静态方法,特定类的方法和某个对象的方法。③可以在接口中使用default定义默认方法和静态
方法,引入默认方法方便了接口升级的维护,之前如果在接口中新增一个方法必须修改所有实现类。④引入了stream类,支持
链式编程,为集合类和数组提供了一些方便的操作方法,例如filter、skip、limit和map、concat等。⑤可以通过类型自动推测
泛型参数。⑥允许重复使用注解,扩大了注解的使用范围,可以用在局部变量和泛型,方法异常上。⑦引入了Optional类解决
空指针异常,更新了日期类的API等。
HashMap的数据结构,源码原理,线程安全问题,红黑树
数据结构(招行)
JDK1.8之前使用的是数组+链表的数据结构,每一个元素是一个Entry结点,包含key、value、hash值、指向下一个元素的
next指针四个属性。JDK1.8之后使用的是数组+链表或红黑树的数据结构,每一个元素是一个Node结点,Node实现了Entry接
口,Node有一个子类TreeNode,代表树结点。
源码原理(阿里)
put方法:
①在存放数据时会先通过hash方法计算key的hashCode,JDK1.8之前的计算比较复杂,但是效率并不高,JDK1.8将计算出的
hashCode高低16位进行异或运算,可以保证尽可能多的位数参与运算,并且让结果中的0和1尽量分布均匀,降低哈希冲突的
概率,使键值尽可能分散,提高查询效率。
②计算出hash值后,再将hash值与数组的长度-1进行与操作,这样可以保证索引的范围在数组的范围之内,由于数组长度必
须是2的幂次方,-1后必然是011…11这样的形式,进行与运算就可以保证结果的0和1分别更加均匀。
③计算出索引后,JDK1.8之前如果结点为空就创建新的Entry结点,否则遍历链表根据hash值和key决定覆盖value值还是创建
新的结点。JDK1.8中,如果结点为空直接增加一个链表结点,如果是一个树结点就增加一个树结点,如果都不是则代表是链
表结点,就遍历链表,根据key和hash值判断是否重复以决定替代value值还是新增结点,如果添加链表后,达到建树阈值
TREEIFY_THRESHOLD-1时,就会将链表转为红黑树,TREEIFY_THRESHOLD是一个值为8常量。由于链表查找时间复杂
度为O(n),红黑树为O(logn),当数值太小时查找效率相差无几,因此设有一个阈值。
resize方法:
①重新规划table的长度和阈值,如果达到扩容阈值,就把table的容量增加到旧容量的2倍。如果新的容量小于默认的初始化容
量16就置为16,阈值重新设置为新容量和加载因子之积。如果新的table容量超出或等于最大容量(1<<30),将阈值调整为最大
整形数,并且return终止过程。
②重新排列数据结点,遍历table上的每一个结点分别处理。如果是null则跳过,如果不为null且没有next结点,重新计算hash
值并存入新的table。如果结点为树结点,调用split方法处理,如果红黑树太小就退化回链表。如果都不是,则说明是链表结
点,如果hash值和oldCap与的结果为0则不处理,否则存放到新的下标。
线程安全问题(阿里)
①JDK1.8之前,链表结点的插入使用头插法,在多线程操作的时候可能会产生链表死循环问题。②JDK1.8起,链表结点的插
入改为尾插法,不会形成环,但是多线程操作时可能会存在值丢失的问题。③如果要解决线程安全,可以使用
ConcurrentHashMap,是线程安全的HashMap,数据结构是Segment数组和Entry数组,采用了减小锁粒度的思想使用分段锁
来保证线程安全,Segment的数量就是锁的并发度,默认为16,一个Segment包含一个HashEntry链表,HashEntry用来存储
数据,当修改HashEntry的时候必须先获取对应的Segment锁。
红黑树(招行)
①红黑树就是一种自平衡二叉树,实现原理和平衡二叉树类似,但性能要优于平衡二叉树。
②红黑树的特性:每个结点是红色或黑色、根结点是黑色、每个叶子结点是黑色、每个红色结点的两个子结点是黑色、从任意
结点到每个叶子的路径包含数目相同的黑色结点。
③红黑树的插入过程主要操作有两种,变色,用于调整两个红色结点相邻的情况,适应性质4,旋转,用于调整左右子树黑色
结点数目不同的情况,适应性质5。
④在HashMap中putTreeVal用于保存树结点,执行二叉树查找,每一次都比较当前结点和待插入结点的大小,如果小就在左子
树查找,否则往右子树查找。找到空位后,执行两个方法,balanceInsertion平衡插入,将结点插入红黑树并使之平
衡,moveRootToFront重置红黑树的根结点。
并发
线程的实现方式(阿里)
①直接继承Thread类,重写run方法,缺点是无法继承其他类。②实现Runnable接口,重写run方法,将实现类作为参数传入
Thread的构造方法。优点是可以继承其他类,实现了解耦操作,适合多个线程访问同一个共享资源。③实现Callable接口,重
写call方法,将实现类包装成一个FutureTask对象作为参数传入Thread的构造方法。优点是可以带有返回值,缺点是相对复
杂。④还可以提高线程池来创建线程。
synchronized关键字
作用:
①用于为Java对象、方法、代码块提供线程安全的操作,属于排它的悲观锁,也属于可重入锁。②被synchronized修饰的方法
和代码块在同一时刻只能有一个线程访问,其他线程只有等待当前线程释放锁资源后才能访问。③Java中的每个对象都有一个
monitor监视器对象,加锁就是在竞争monitor,对代码块加锁是通过在前后分别加上monitorenter和monitorexit指令实现的,
对方是否加锁是通过一个标记位来判断的。
内部结构:
synchronized内部包括6个区域,每个区域的数据都代表锁的不同状态。①ContentionList:锁竞争队列,所有请求锁的线程都
weixin_38729607
- 粉丝: 4
- 资源: 964
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Javascript和Python的微商城项目设计源码 - MicroMall
- 基于Java的网上订餐系统设计源码 - online ordering system
- 基于Javascript的超级美眉网络资源管理应用模块设计源码
- 基于Typescript和PHP的编程知识储备库设计源码 - study-php
- Screenshot_2024-05-28-11-40-58-177_com.tencent.mm.jpg
- 基于Dart的Flutter小提琴调音器APP设计源码 - violinhelper
- 基于JavaScript和CSS的随寻订购网页设计源码 - web-order
- 基于MATLAB的声纹识别系统设计源码 - VoiceprintRecognition
- 基于Java的微服务插件集合设计源码 - wsy-plugins
- 基于Vue和微信小程序的监理日志系统设计源码 - supervisionLog
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0