常见java相关问题

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介:
  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区别




相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
分布式计算 安全 Java
A First Look At Java
A First Look At Java
124 0
A First Look At Java
|
存储 自然语言处理 运维
JAVA问答11
JAVA问答11
101 0
1062 最简分数(JAVA)
一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。
1062 最简分数(JAVA)
|
资源调度 Java C++
聊聊java中的二进制问题
java中的进制也算是面试中经常会遇到的一个知识点,不管是计算问题,还是涉及到的基础知识。因此这篇文章对其进行一个整理。主要参考了慕课网上的视频,特在此说明。不管是你初学者还是工作中,又或者是找工作中。本文都能对你有所帮助。 本篇文章主要解决以下几个问题: 1、二进制的历史 2、java中的进制转换 3、java中的移位运算 4、数据大小端问题 5、进制在java中的使用 下面我们就针对这些问题,来分析一下java中的进制。
188 0
聊聊java中的二进制问题
|
Java
Java一些常见的坑
总是觉得自己Java基础还是不行,需要恶补。今天偶然mark了一本《Java解惑》,其中以端程序的方式罗列了95个即常见又不常见的xian(坑)jing(儿),拿来瞻仰一下。
57 0
|
Java 编译器
Java synthetic
读完这篇文章你将会收获到 • synthetic fields • synthetic method • synthetic class
264 0
|
存储 Java 开发者
Java - 9 个小技巧让你的 if else 看起来更优雅(三)
Java - 9 个小技巧让你的 if else 看起来更优雅(三)
236 0
|
存储 Java 程序员
JAVA
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
|
Java 编译器 API
Java 17 浅析
openJDK官方介绍文档https://openjdk.java.net/projects/jdk/17/oracle官方文档https://docs.oracle.com/en/java/javase/17/index.html注意:IDEA需要升级到2021版本才能兼容jdk17下载安装JDK17官网下载页面https://www.oracle.com/java/technologies/d
1382 0
Java 17 浅析
|
存储 安全 算法
一篇文章让你真正了解Java
“你学习一门技术的最佳时机是三年前,其次是现在。”这句话对于哪一种行业都很适用,如果你已经学习过Java,那么恭喜你你很有先见之明,如果你并不了解Java,这篇文章带你快速掌握Java的几个核心知识点。