Java初级程序员面试总结(二)

引言:
我是一个菜鸟程序员,坐标HZ,以下为整理的面试题.
Q1: Hashmap源码你看过没?
Answer: hashmap在jdk1.8之前,采用数组+链表的结构.在jdk1.8及以后,采用数组+链表/红黑树的结构.hashmap在1.8及以后的版本,初始容量为0.在第一次put时,如果初始容量为0,那么容量修改为16.调用本地的hashcode方法计算hash值.将hash值异或高16位,使其重复参与运算.再通过与上数组的length-1,得到数组的索引值.如果key为null,调用响应的方法进行存储.不为null,调用equals方法比较key是否相同,如果相同,进行覆盖.如果不同,发生hash碰撞.如果大于等于8,放到红黑树中.当进行树形化且容量小于64时,发生扩容,扩容2倍.如果长度不大于等于8,放到链表中.如果hashmap Entry数量大于容量负载因子(默认16),则发生扩容.当树形化长度小于等于6时,退回链表.hashmap在1.8之前时,entry数量大于等于容量负载因子(默认16)且发生hash碰撞时,进行扩容,扩容2倍.
Q2: 快速失败和安全失败的区别?
Answer: 快速失败是并发修改异常,常见于Arraylist,原理是在for循环时,其count与之前的count不同,当其进行add或者remove时,会修改count值.这样子,原先的count值与for循环中的count不同,抛出此异常.可以使用迭代器或者安全失败解决.安全失败是并发包中的,复制原先循环的内容,使用add或者remove时修改复制的内容.最后结束循环后完成修改.
Q3: ConcurrentHashMap1.7和1.8的区别
Answer: 1.7采用分段锁机制,将entry一段段锁起来,分成16个锁,每个锁放入2个entry,其中默认的8个没有entry,有新的entry再进行分配.1.8采用CAS+sync的办法,使用CompareAndSwap方法,用内存值V比较旧值A,如果相同,用新值B代替旧值A.其中会产生ABA问题,可以使用Version来解决.
Q4: 什么map适合存null?
Answer: Hashmap,其他map都不能存null.在源码中Concurrent,Table等都会检查key和value是否包含null,包含抛出空指针异常


集合源码有兴趣的可以看一下,面试主要问Hashmap,ConcurrentHashMap,ArrayList等
主要是数组,链表,树,栈,队列等数据结构

Java初级程序员面试总结(二) --HashMap篇相关推荐

  1. 初级程序员面试不靠谱指南(二)

    3.read-only的const.如果你突然冒出一句看似很高深的话但又不解释一般都是装逼,就像前面提到过const准确的应该理解为一个read-only的变量而不是一个常量,那么常量和变量的区别到底 ...

  2. java初级程序员考试_Java初级程序员必须要知道的10个基础面试题

    Java初级程序员一般在业内定义为刚毕业或者工作1-2年的新人,对于Java初级程序员,经常面试中会被问到很多基础知识,因为基础知识可以考察个人对专业知识的基础有多扎实. Java 关于基础面试题小编 ...

  3. 一小时让你Get到面试套路:记一次Java初中级程序员面试流程梳理

    视频教程传送门: 一小时让你Get到面试套路:记一次Java初中级程序员面试流程梳理_哔哩哔哩_bilibili听了N多个师兄师姐的面试录音,采访了N多个师兄时间的面试经历,才总结出来的java面试流 ...

  4. 程序员面试金典——番外篇之下一个较大元素II

    程序员面试金典--番外篇之下一个较大元素II Solution1:我的答案,时间复杂度为O(n2)O(n2)O(n^2) 垃圾算法 class NextElement { public:vector& ...

  5. 程序员面试金典——番外篇之下一个较大元素I

    程序员面试金典--番外篇之下一个较大元素I Solution1:我的答案,时间复杂度为O(n2)O(n2)O(n^2) 垃圾算法 class NextElement { public:vector&l ...

  6. 【重点】程序员面试金典——番外篇之数组中的逆序对

    程序员面试金典--番外篇之数组中的逆序对 此题曾多次遇到,然鹅还是本能的想起来复杂度为O(n2)O(n2)O(n^2)的笨蛋方法... Solution1:笨蛋方法 class AntiOrder { ...

  7. 程序员面试金典——番外篇之约瑟夫问题2

    程序员面试金典--番外篇之约瑟夫问题2 参考网址:https://www.nowcoder.com/profile/9270572/codeBookDetail?submissionId=157791 ...

  8. 程序员面试金典——番外篇之约瑟夫问题1

    程序员面试金典--番外篇之约瑟夫问题1 Solution1:我的答案.脑子是个好东西,希望我总是带着他~ 该算法模拟了游戏过程,不算好. 要理清逻辑关系,因果关系,再下笔~ class Joseph ...

  9. 【To Understand】程序员面试金典——番外篇之洪水

    程序员面试金典--番外篇之洪水 参考网址:https://www.nowcoder.com/profile/1917743/codeBookDetail?submissionId=12679910 S ...

  10. java初级程序员简历上不能写,但是不能不会的项目!

    今天给大家讲讲找工作之前要练习写哪些项目,简历上的项目经验怎么写(初级程序员,没有工作过的实习生). 目录 一:练习哪些项目 二:简历上应该怎么写 一:练习哪些项目 1.J2SE记账本 本项目是基于S ...

最新文章

  1. java学mybatis还用学jdbc吗,mybatis系统学习(二)——使用基础mybatis代替原始jdbc
  2. python 一个文本是否包含另一字符串 in find是区分大小写的
  3. centos7 mysql安装配置_mysql 5.7.17 安装配置方法图文教程(CentOS7)
  4. Hash特征编码在推荐系统的应用
  5. 笔记本计算机属于微型计算机吗,微型计算机和笔记本计算机有什么区别
  6. qpython3怎么安装库_如何在安装pip3以及第三方python库
  7. spring cloud gateway 源码解析(4)跨域问题处理
  8. xp系统 护眼模式
  9. Python语言程序设计(嵩天老师版)第二周代码解析
  10. 存储区域网络(SAN)
  11. 我的盖洛普“优势识别器”测试证书
  12. java有道翻译_java实现有道翻译爬虫
  13. 计算机网卡接口类型,一文带你全方位了解网卡
  14. Python随机函数
  15. Centos 7分区合并
  16. uni-app 预编译器错误:代码使用了scss/sass语言,但未安装相应的编译器插件,请前往插件市场安装该插件
  17. 倍福PLC Modbus通信区
  18. 类的成员函数指针和静态成员函数指针 调用成员函数***
  19. 【状语从句练习题】综合训练
  20. 盛志凡:TVOS标准体系建设及产业化推进与广电终端智能化

热门文章

  1. [转载] 七龙珠第一部——第016话 寻找石头的功夫
  2. 计算机原理视频罗克露优酷,计算机组成原理42讲 电子科技大学 罗克露
  3. Unity基础补漏(1)_GameObject类_Time类_Transform类_Camera_光面板_物理面板/物理材质_碰撞检测函数_刚体加力
  4. 大华C++客户端面经
  5. 韩语在线翻译图片识别_最强文字识别APP
  6. 三星9158p 升级android版本,三星I9158P官方固件rom系统刷机包_原版系统线刷包_可救砖用...
  7. c语言求正弦余弦正切,公式( 正弦 余弦 正切 余切 正割 余割 )
  8. 生产排程遇难题?APS系统来解决
  9. Angular测试机床TestBed
  10. PyTorch——手写数字识别