常见java相关问题

简介:
  1. HashMap的put怎么实现,如何解决hash冲突。
    调用putval,计算相应hash码,然后初始化(默认64的capacity)或调用resize函数调整大小,判断bucket是否有值,若没有在数组初始化改值。若有则以拉链法(链表的形式)解决hash冲突,这里和ThreadLocalMap不一样,ThreadLocalMap使用的是线性探测法,接着将相应节点加入链表头部。如果超过8个元素会进化为RBtree,防止hash攻击。
  2. RBtree是怎样的数据结构,有什么性质?
    二叉树,有序的,四种性质。从而推得路径最长2n,最短n。复杂度为log2N.(此处省略n多话,感兴趣的同学请自行Google)
  3. RBtree什么时候会变色?
    旋转时,共有四种旋转方式。一般是为了保持平衡,如左边太长,右边太短这样。(打哈哈过去,具体记不清了)
  4. hashmap什么时候会调整大小?
    根据负载因子来搞事,默认为0.75。
  5. 什么是负载因子?
    根据capacity来,举个例子,当capacity为100时,如果HashMap的ele的数量到了75就会resize,resize后的大小为原来的2倍,这样可以直接使用位运算得到原来的元素新的hash值。
  6. 扩容存在什么问题?
    (楞了一会,发现应该是说多线程的情况)然后说了多线程会有死循环问题。如果要解决可以使用concurrentHashMap。
  7. 为什么有死循环?
    扯了半天,发现不画图,只通过电话根本扯不清。然后说就是因为1.7扩容后链表会逆序,1.8不会,所以1.8没这个问题,1.7就是两个线程同时扩容,一个扩到一半,到另一个了开始并完成扩容,之前那个再继续,就会出现。(然后说小姐姐,有机会我当面画给你看,开个玩笑)

  8.你刚才提到concurrentHashMap,你知道怎么实现吗?
     1.7使用分段锁,分为16个,每个segment可以视为一个hashtable,然后一次一个线程只锁一个segment,减小了锁的粒度,提高了并发。1.7使用的是Lock的实现类,可重入锁来同步的。1.8使用的是CAS和synchronized。如果已有元素,需要解决hash冲突,会使用synchronized锁住相应的bucket,然后再添加,同样元素在八个以上会转化为RBtree。
  9.你提到Lock,知道哪些相应的锁?
   读写锁,可重入锁
10.知道AQS吗,他的实现是怎样的?AQS可重入吗?
知道,读写锁,可重入锁都是通过AQS实现的,AQS维护一个链表,并主要提供tryacquire和tryrelease方法。默认为非公平锁,此时当一个线程需要请求锁时...

11.AQS如何实现可重入

维护一个int类型的status作为计数器,同一个线程acquire就加1,release就减1.到0就释放锁。读写说则是将status分为两部分使用。内部维护一个shift变量做位运算的变化。。。(AQS可以看占小狼的blog或者并发编程的艺术

12.volatile、aba问题

13.volatile什么作用
指令重排序,内存可见性
14、指令重排序指什么?指令重排序的好处是什么?如何防止指令重排序。
编译器重排序,cpu重排序,内存重排序。好处是流水线技术,提高并发性能等。通过禁止编译器优化,以及汇编使用Lock信号,java中的cpp加入volatile等防止。
15.内存可见性具体指什么?volatile通过什么机制防止

讲了下JMM,以及计组原理中的三级cache,buffer,缓存行等。

顺便扯了下c语言的volatile只保证防止编译器优化以及内存可见性的语义,而不能保证顺序性。然后是C11的acquire,release语义 接着回归java,扯了下内存屏障的实现与作用。(并发编程的艺术)然后扯了下#LOCK信号,包括总线锁,mesi的缓存一致性等。最后是先行发生的语义(语无伦次,不过基本点都讲到了)

16.synchronized内部分为几种锁,他们的使用场景是什么
偏向锁,轻量级锁,重量级锁(又有自旋锁等),然后详细讲了实现和使用场景(周志明的书和并发编程的艺术都有讲,此处省略)。

 17.nio、bio

没有,讲了下自己准备学习netty,然后谈了下c语言的nio,包括Nginx和redis的多路复用,然后讲了下select和epoll的区别。以及epoll的优点和实现。然后设想java里的nio应该也是映射到epoll里面。

18.netty是怎么实现?


18. 操作系统调度进程有哪些算法?

优先级,时间片,FIFO,最近deadline什么的。

19.Redis有几种持久化方式?

四种,2种被废弃,比如磁盘交换。目前主要使用rdb,aof。rdb属于物理备份,aof属于逻辑日志(逐行追加)。然后又讲了aof重写。rdb和aof的配置。以及aof的rewrite机制。

18.Redis分布式的实现方式

(此处省略,Redis的设计与实现有详解)

19。 数据库特性
ACID,顺便分别提了下实现原理

20.具体讲下隔离性。
四种隔离级别和实现方式

https://www.cnblogs.com/fjdingsd/p/5273008.html


21.如何理解一致性?

说了下单个事务的一致性,以及分布式一致性。

22 一致性的三种级别
强,弱,最终一致性

23,持久性的实现方式

redo,同时使用insert buffer等方式。

24数据库mysql innodb myISAM区别




目录
相关文章
|
6月前
|
域名解析 弹性计算 开发者
阿里云备案服务码在哪申请?申请流程与服务码使用常见问题解答
备案服务码是用于阿里云备案系统的重要凭证,需通过购买云服务器等产品获取。用户需先购买符合要求的云服务器,再通过控制台申请备案服务码,且服务码可跨账号使用但需授权。云虚拟主机也可申请备案服务码。备案时,需在备案管理系统填写对应服务码。
|
存储 人工智能 安全
5款值的推荐的高效工具软件
本文介绍了五款实用工具软件:矢量设计工具Affinity Designer、数字绘画软件Sketchable、在线AI工具箱3171.CN、密码管理工具KeePassX及效率搜索软件Listary,涵盖设计、办公、安全与系统效率提升,助力高效工作。
711 0
|
存储 缓存 自然语言处理
SCOPE:面向大语言模型长序列生成的双阶段KV缓存优化框架
KV缓存是大语言模型(LLM)处理长文本的关键性能瓶颈,现有研究多聚焦于预填充阶段优化,忽视了解码阶段的重要性。本文提出SCOPE框架,通过分离预填充与解码阶段的KV缓存策略,实现高效管理。SCOPE保留预填充阶段的关键信息,并在解码阶段引入滑动窗口等策略,确保重要特征的有效选取。实验表明,SCOPE仅用35%原始内存即可达到接近完整缓存的性能水平,显著提升了长文本生成任务的效率和准确性。
923 3
SCOPE:面向大语言模型长序列生成的双阶段KV缓存优化框架
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
498 1
|
负载均衡 网络协议 网络架构
静态路由 及其 实验操作
静态路由 及其 实验操作
|
Linux
Linux 驱动开发基础知识—— LED 驱动程序框架(四)
Linux 驱动开发基础知识—— LED 驱动程序框架(四)
451 0
Linux 驱动开发基础知识—— LED 驱动程序框架(四)
|
Java Linux 网络安全
在Linux上搭建Maven仓库的实战教程
在Linux上搭建Maven仓库的实战教程
1289 0
|
SQL 存储 消息中间件
小米基于 Flink 的实时数仓建设实践
本次分享围绕小米在实时数仓方面的探索与实践展开,主要涉及:Flink+Iceberg 实时数仓架构升级,稳定性与实时性优化;基于当前 Flink 实时数仓的不确定性问题,介绍 Merge into 功能和算子级状态清理的解决方案。
8615 0
小米基于 Flink 的实时数仓建设实践
|
传感器 算法 数据可视化
IMU模块中的一些基本概念和常见问题
IMU模块中的一些基本概念和常见问题
IMU模块中的一些基本概念和常见问题
|
XML Java 数据库连接
mybatis传参为map的写法
mybatis传参为map的写法
296 0

热门文章

最新文章