当前位置: 首页 > news >正文

哪个网站可以做电视背景墙WordPress站点地址填错

哪个网站可以做电视背景墙,WordPress站点地址填错,在360网站上怎么做推广,石家庄站建设费用多少前言 又到了一年一度的金三银四面试季#xff0c;我们拿着自己的面试秘籍去面试#xff0c;但是面试官的问题五花八门#xff0c;让我们摸不清他们的套路。今天我就总结了面试时必问的hashmap面试题#xff0c;无论面试官怎么问#xff0c;我们都对答如流。 另外本人整理了…前言 又到了一年一度的金三银四面试季我们拿着自己的面试秘籍去面试但是面试官的问题五花八门让我们摸不清他们的套路。今天我就总结了面试时必问的hashmap面试题无论面试官怎么问我们都对答如流。 另外本人整理了20年至23年的面试题大全包含spring、并发、数据库、Redis、分布式、dubbo、JVM、微服务等方面总结下图是部分截图需要的话点这里点这里暗号CSDN。 1.JDK8中的HashMap与JDK7的HashMap有什么不一样 JDK8中新增了红黑树JDK8是通过数组链表红黑树来实现的JDK7中链表的插入是用的头插法而JDK8中则改为了尾插法JDK8中的因为使用了红黑树保证了插入和查询了效率所以实际上JDK8中 的Hash算法实现的复杂度降低了JDK8中数组扩容的条件也发了变化只会判断是否当前元素个数是否查过了 阈值而不再判断当前put进来的元素对应的数组下标位置是否有值。JDK7中是先扩容再添加新元素JDK8中是先添加新元素然后再扩容 2.HashMap中PUT方法的流程 通过key计算出一个hashcode通过hashcode与“与操作”计算出一个数组下标在把put进来的key,value封装为一个entry对象判断数组下标对应的位置是不是空如果是空则把entry直接存在该数组位 置如果该下标对应的位置不为空则需要把entry插入到链表中并且还需要判断该链表中是否存在相同的key如果存在则更新value如果是JDK7则使用头插法如果是JDK8则会遍历链表并且在遍历链表的过程中统计当前链表的元 素个数如果超过8个则先把链表转变为红黑树并且把元素插入到红黑树中 3.JDK8中链表转变为红黑树的条件 链表中的元素的个数为8个或超过8个同时还要满足当前数组的长度大于或等于64才会把链表转变为红黑树。为什么因为链表转变为红黑树的目的是为了解决链表过长导致查询和插入效率慢的问题而如果要解决这个问题也可以通过数组扩容把链表缩短也可以解决这个问题。所以在数组长度还不太长的情况可以先通过数组扩容来解决链表过长的问题。 4.HashMap扩容流程是怎样的 HashMap的扩容指的就是数组的扩容 因为数组占用的是连续内存空间 所以数组的扩容其实只能新开一个新的数组然后把老数组上的元素转移到新 数组上来这样才是数组的扩容在HashMap中也是一样先新建一个2被数组大小的数组然后遍历老数组上的没一个位置如果这个位置上是一个链表就把这个链 表上的元素转移到新数组上去在这个过程中就需要遍历链表当然jdk7和jdk8在这个实现时是有不一样 的jdk7就是简单的遍历链表上的没一个元素然后按每个元素的hashcode结 合新数组的长度重新计算得出一个下标而重新得到的这个数组下标很可能和 之前的数组下标是不一样的这样子就达到了一种效果就是扩容之后某个 链表会变短这也就达到了扩容的目的缩短链表长度提高了查询效率而在jdk8中因为涉及到红黑树这个其实比较复杂jdk8中其实还会用到 一个双向链表来维护红黑树中的元素所以jdk8中在转移某个位置上的元素 时会去判断如果这个位置是一个红黑树那么会遍历该位置的双向链表遍 历双向链表统计哪些元素在扩容完之后还是原位置哪些元素在扩容之后在新 位置这样遍历完双向链表后就会得到两个子链表一个放在原下标位置 一个放在新下标位置如果原下标位置或新下标位置没有元素则红黑树不用 拆分否则判断这两个子链表的长度如果超过八则转成红黑树放到对应的 位置否则把单向链表放到对应的位置。元素转移完了之后在把新数组对象赋值给HashMap的table属性老数组 会被回收到。 5.为什么HashMap的数组的大小是2的幂次方数 JDK7的HashMap是数组链表实现的 JDK8的HashMap是数组链表红黑树实现的 当某个key-value对需要存储到数组中时需要先生成一个数组下标index并且这个 index不能越界。 在HashMap中先得到key的hashcodehashcode是一个数字然后通过 hashcode (table.length - 1) 运算得到一个数组下标index是通过与运算计算出 来一个数组下标的而不是通过取余与运算相比于取余运算速度更快但是也有一 个前提条件就是数组的长度得是一个2的幂次方数。 6、常见的 HashMap 的迭代方式 在实际开发过程中我们对于 HashMap 的迭代遍历也是常见的操作HashMap 的迭代遍历常用方式有如下几种 方式一迭代器模式 MapString, String map new HashMap(16); IteratorMap.EntryString, String iterator map.entrySet().iterator(); while (iterator.hasNext()) {Map.EntryString, String next iterator.next();System.out.println(next.getKey() : next.getValue()); }方式二遍历 Set方式 MapString, String map new HashMap(16); for (Map.EntryString, String entry : map.entrySet()) {System.out.println(entry.getKey() : entry.getValue()); }方式三forEach 方式JDK8 特性lambda MapString, String map new HashMap(16); map.forEach((key, value) - System.out.println(key : value));方式四keySet 方式 MapString, String map new HashMap(16); IteratorString keyIterator map.keySet().iterator(); while (keyIterator.hasNext()) {String key keyIterator.next();System.out.println(key : map.get(key)); }把这四种方式进行比较前三种其实属于同一种都是迭代器遍历方式如果要同时使用到 key 和 value推荐使用前三种方式如果仅仅使用到 key那么推荐使用第四种。 7.为什么说HashMap是线程不安全的 答HashMap在多线程并发时线程不安全主要表现在下面两个方面 (1) 当向HashMap中put(添加)元素时导致的多线程数据不一致 比如有两个线程 A 和 B 首先 A 希望插入一个 key-value键值对到HashMap 中它首先计算记录所要落到的 hash 桶的索引坐标然后获取到该桶里面的链表头结点此时线程 A 的时间片用完了而此时线程 B 被调度得以执行和线程 A 一样执行只不过线程 B 成功将记录插到了桶里面。假设线程 A 插入的记录计算出来的 hash 桶索引和线程 B 要插入的记录计算出来的 hash 桶索引是一样的那么当线程 B 成功插入之后线程 A 再次被调度运行时它依然持有过期的链表头但是它对此一无所知以至于它认为它应该这样做如此一来就覆盖了线程 B 插入的记录这样线程 B 插入的记录就凭空消失了造成了数据不一致的行为。 简单来说就是在多线程环境下向HashMap集合中添加元素会存在覆盖的现象导致了线程不安全。 (2) 当HashMap进行扩容调用resize()函数时引起死循环 HashMap在put的时候插入的元素超过了容量由负载因子决定的范围就会触发扩容操作就是rehash这个会重新将原数组的内容重新hash到新的扩容数组中在多线程的环境下存在同时其他的元素也在进行put操作如果hash值相同可能出现同时在同一数组下用链表表示造成闭环导致在get时会出现死循环所以HashMap是线程不安全的。 HashMap的线程不安全主要体现在下面两个方面 1.在JDK1.7中当并发执行扩容操作时会造成环形链和数据丢失的情况。 2.在JDK1.8中在并发执行put操作时会发生数据覆盖的情况。 8.HashMap 的工作原理是什么? 一存储方式 Java中的HashMap是以键值对(key-value)的形式存储元素的。 二调用原理 HashMap需要一个hash函数它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候HashMap会计算key的hash值然后把键值对存储在集合中合适的索引上。如果key已经存在了value会被更新成新值。 HashMap的实现原理 利用key的hashCode重新hash计算出当前对象的元素在数组中的下标 存储时如果出现hash值相同的key此时有两种情况。(1)如果key相同则覆盖原始值(2)如果key不同出现冲突则将当前的key-value放入链表中 获取时直接找到hash值对应的下标再进一步判断key是否相同从而找到对应值。 理解了以上过程就不难明白HashMap是如何解决hash冲突的问题核心就是使用了数组的存储方式然后将冲突的key的对象放入链表中一旦发现冲突就在链表中做进一步的对比。 最后 针对最近很多人都在面试我这边也整理了相当多的面试专题资料也有其他大厂的面经。希望可以帮助到大家。 下面的面试题答案都整理成文档笔记。也还整理了一些面试资料最新2020至2023年收集的一些大厂的面试真题都整理成文档小部分截图有需要的可以点击进入暗号CSDN
http://www.zqtcl.cn/news/813024/

相关文章:

  • 做本地生活网站深圳建设工程信息网站
  • C2C电商网站做博客的网站有哪些
  • 住房和城乡建设部网站 事故安微省建设厅田网站
  • 百度一下你就知道官页淘宝seo搜索引擎优化
  • 网站平台维护phpwind做的网站
  • 网站怎么做移动适配怎么样才算是一个网站页面
  • 做pc端网站策划百度网站建立
  • 高级网站开发技术青岛网站建设方案服务
  • 深圳公司网站建设设房地产网址大全
  • 怎么里ip做网站女生学广告学后悔死了
  • 做西餐网站wordpress 作者栏
  • 创建了网站安卓做视频网站
  • asp自助建站系统房地产楼盘微信网站建设营销方案
  • 网站建设公司发展方向及趋势低代码小程序开发平台
  • 临沂网站建设企业响应式网站首页
  • 福州网上商城网站建设wordpress登录界面logo
  • 子目录网站wordpress无中断音乐插件
  • 网站开发算是研发支出吗淘宝客网站建设的策略
  • 如果在工商局网站上做股权质押刷推广链接的网站
  • 保定建站公司模板wordpress 华为云
  • 好的网页设计网站推荐开发定制软件公司
  • 深圳做网站设计多媒体网站开发
  • 什么是网站组件高端网站设计高端网站制作
  • 网易网站建设深圳专业营销网站制作
  • 有口碑的佛山网站建设东莞网约车资格证官网登录入口
  • 网站建设合同 保密条款wordpress网站手机端
  • 汕头建站费用wordpress转cms
  • 全美网站开发PHP 网站开发 重点知识
  • 电商网站建设重要性一个公司可以做几个网站吗
  • 婚恋网站系统淘宝联盟推广做网站违法