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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
杨老师课堂之JavaScript定时器案例的红绿灯设计
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kese7952/article/details/80346866 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>红绿灯倒计时</title> <style> .box { width: 250px; height: 52px; padding: 15px 30px; border: 2px solid #ccc; border-radius: 16px; margin: 0 auto; } .box .count { width: 60px; color: #666; font-size: 280%; line-height: 50px; padding-left: 6px; margin-left: 5px; border: 1px solid #fff } .box div { margin-left: 5px; float: ...
- 下一篇
Java 生成PDF文档
最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料。整理之后,发现有如下几个框架可以实现这个功能。 1. 开源框架支持 iText,生成PDF文档,还支持将XML、Html文件转化为PDF文件; Apache PDFBox,生成、合并PDF文档; docx4j,生成docx、pptx、xlsx文档,支持转换为PDF格式。 比较: iText开源协议为AGPL,而其他两个框架协议均为Apache License v2.0。 使用PDFBox生成PDF就像画图似的,文字和图像根据页面坐标画上去的,需要根据字数手动换行。 docx4j用来生成docx文档,提供了将WORD文档转换为PDF文档的功能,并不能直接生成PDF文档。 2. 实现方案 — 格式复杂 格式简单 数据量大 docx4j+freemarker docx4j或PDFBox 数据量小 docx4j PDFBox 2.1 纯数据生成PDF 1.docx4j,适用于生成格式简单或格式复杂且数据量小的PDF文档; 2.Apache PDFBox,适用于生成格式简单且数据量小的PDF文档。 1.d...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题