文库网
ImageVerifierCode 换一换
首页 文库网 > 资源分类 > PDF文档下载
分享到微信 分享到微博 分享到QQ空间

RC90(RC+5.0版本)_控制器手册r2.pdf

  • 资源ID:2181510       资源大小:8.05MB        全文页数:208页
  • 资源格式: PDF        下载积分:6文币
微信登录下载
快捷下载 游客一键下载
账号登录下载
三方登录下载: QQ登录 微博登录
二维码
扫码关注公众号登录
下载资源需要6文币
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

RC90(RC+5.0版本)_控制器手册r2.pdf

1、行动口试经典题库【能源零碎】1、成绩需要界说:成绩需如果指对取得任务上的胜利或自我的开展有激烈的请求,敢于应战困难,为寻求高于普通规范的事迹而采用举动。操纵界说:a、盼望把状况做得完满;b、存眷结果,在改良事迹的同时也重视效力的晋升;c、为本人设破有应战性却又能够实现的目标;d、有决计去实现一项有难度的义务,在艰苦眼前不保持;e、为告竣目标而实验应用差其余方法;f、在胜利、掉败跟抵触中检核检束本身的咨询题,成认掉误,寻求改良;g、自动反击,不等候下级的布置。行动口试标题:a、请引见一个你自动为本人设破的存在应战性的目标,你是怎样实现那个目标的。b、请谈谈你以为最胜利的一段任务阅历,事先的状况是

2、怎么样的?你都做了哪些任务?c、请讲一个你在任务中寻求完满的例子。d、请描绘你为本人设破的最主要的目标是什么,是怎样实现的?e、请给我讲一个你没能实现的目标,什么原因没能实现?f、请描绘一个你为了实现目标而支付宏年夜尽力或就义的例子。g、请报告一个你在任务中不满意于近况,力图把任务做得更好的例子。h、在你的任务中有不碰到如此的状况,当应用传统的任务办法无奈实现任务义务时,你引进了新技巧来胜利实现义务。2、坚固性/保持界说:坚固性/保持指外举动中坚决不移,即便碰到重重艰苦,还能够尽力不懈并到达既定目标的一种心思品性。操纵界说:正面a、面对波折时能够保持心情的波动;b、碰到应战或在宏年夜的压力下能

3、够保持任务;c、能够踊跃寻寻无效的办法处置艰苦、缓解压力。负面a、当碰到不赞成见或攻打时就会优柔寡断;b、在还不到达最后的目标时就让步了;c、不肯承担义务。行动口试标题:a、锲而不舍、锲而不舍是胜利所必须的珍贵品质,请讲一个你在任务中保持了非常久的习惯,那个习惯是怎样帮助你取得胜利的?在那个进程中,你碰到过哪些艰苦?b、请描绘一个如此的阅历:当你在做一个工程时碰到了宏年夜的应战或艰苦,你是怎么样想法去克制艰苦实现工程的?c、请讲一个不人都保持了,而你却保持实现的任务义务。d、请谈谈你做过的最有应战的工程跟任务,你是怎样克制种种妨碍的?e、当你的看法不克不及被下级或共事所承受时,你会怎样再去压服

4、他们?请举例阐明。f、请讲一个你半途保持的工程或任务,什么原因会保持?g、请描绘一次你非常尽力地去做一项任务,但不胜利的阅历。3、自动性界说:自动性是指在不被请求的状况下,发觉需要并自发地采用举动以实现任务目标。操纵界说:a、不需要不人提出请求,能够见解到并依照以后的情况行事;b、在状况发作前就有所预备,并能精确控制时机;c、能够自动承担更多的任务跟义务;d、踊跃寻求外部的支撑,以了解不人的办法;e、能够独破举动,改动状况的开展偏向;f、为实现目标而敏捷采用一些办法,使得结果远远超越了预期;g、为了寻寻新的时机,会尽力拓展任务外延,猎取新技艺、新阅历;h、能贡献本人的树破性看法。行动口试标题:

5、a、请描绘一个你曾经做过的格外任务的阅历,你什么原因要承担这些任务?b、你以为你地点的公司有哪些规章轨制或流程需要改动?你为此做了什么?c、为了做好你格外的任务,你是怎样取得不人的支撑跟帮助的?e、请描绘一次你自动改动,从而使你的任务变得更无效力或更轻松的阅历。f、请描绘一个由你发动的工程或任务,你什么原因以为有须要如此做?施行的结果是怎么样的?g、请讲一个你在信息不充沛、缺少指点的状况下实现的工程或义务。h、请举一个因为你的尽力而使一个工程或办法得以胜利施行的例子。i、作为部分的指点,你是怎样增进部分绩效的改良的?j、你是否做过一些超越任务请求范畴的任务?请举例阐明。k、请你给出3个在近来的

6、任务中展示自动性的例子,能够是所唱任务请求内的,也能够是你改动或改良的某些货色。4、热忱界说:热忱是指不管碰到何种波折与掉败,一直酷爱从人事的任务,情愿为之支付尽力。操纵界说:a、对构造的远景跟本身开展有所了解,对将来有向往;b、持有踊跃的、朝上进步的立场;c、对从事的任务充溢酷爱,情愿支付更多的尽力;d、不克不及言而不行,要举动敏捷、有步调、有层次、有零碎性;e、面对种种波折与掉败依然能够保持踊跃的任务立场;f、不只本人任务充溢热忱,并且能够激起团队的热忱。行动口试标题:a、现在入职场的新颖感逐渐消灭,所有归于平庸时,你是怎样保持对任务的热忱的?b、请谈谈你怎样妨碍你的团队,让他们跟你一样在

7、任务中充溢热忱的?c、请回忆一下在你的任务阅历傍边最能表白你热忱的时分,事先你都做了什么?d、回忆一次高兴的任务阅历,此次阅历让你感到非常高兴、精神充沛。请谈谈事先的状况,并通知我什么原因它会让你感到称心。5、义务心界说:义务心是指在任务中能够自动采用举动,敢于承担任务职责,踊跃为构造开展作贡献的一种特性品质。操纵界说:a、对任务保持一种踊跃担任的立场,值得信赖;b、为了胜利实现任务而保持高度热忱;c、办事沉思熟虑,精准、零碎、高效、坚固、勤劳、有层次;d、在任务中寻求杰出,能够为任务支付额定的尽力;e、构造见解强,认同跟支撑构造的目标,恪守规则跟次序。行动口试标题:a、请举一个你自动承担非本

8、人职责范畴的任务的例子。b、当客户请求你供给职责之外的效劳时,你是怎样做的?请举例阐明。c、在你的一样平常任务中,有没无为了更好地实现义务而支付了非常多额定的尽力的阅历?请具体描绘。d、你地点公司的目标是什么?你是怎样了解的?为了告竣那个目标你做过哪些尽力?e、任务中未免会有波折,但碰到艰苦时,你是怎样做的?请举一个具体的事例。f、请报告一次你自动帮助一位营业上不太熟习的员工晋升才干的阅历。6、构造许诺界说:构造许诺是支使团体的行动与构造的代价不雅、原那么跟目标保持分歧。操纵界说:a、情愿帮助不人实现义务;b、能够依照构造的请求调剂本人的运动;c、存在协作肉体,以便更好地告竣构造目标;d、存眷

9、构造的临时开展;e、为契合构造的请求而保持团体或专业上的好处。行动口试标题:a、你地点构造的代价不雅或目标是什么,你对此有什么见解,你是怎样调剂本人帮助构造实现目标的?b、请描绘如此一次阅历:当你出于对构造无益的思索做了不受欢送的决议时,你是怎样做的?c、当你发觉了有悖于构造目标或代价不雅的行动时,你是怎样做的?请举例阐明。d、请描绘一次你自动参加一个不受欢送然而关于构造临时开展非常有利的工程的阅历。e、当团体或专业上的好处与构造的目标发作抵触时,你会怎样样处置?请举一个例子。f、你是如作甚构造的开展献计献策的?7、进修能源界说:进修能源是指促使团体去进修以到达生长目标的内涵能源。操纵界说:a

10、、置信进修的感化,情愿为之支付时刻跟精神;b、猎奇心强,有探求肉体;c、有明白的进修偏向,能够经过团体不时的尽利巴新常识组合到本人的认知构造中;d、能够应用恰当的进修办法;e、在碰到艰苦跟波折时仍能保持进修的热忱;行动口试标题:a、孔子有一句名言“知之者不如好之者,好知者不如乐知者。请联合本人的阅历谈谈你是怎样了解这句话的?b、请谈一次在你的任务傍边需要控制新常识的阅历,你是怎样做的?c、你近来进修了哪些新常识?什么原因要进修这些新常识?怎样学的?有什么播种?怎样应用到任务中的?d、你在进修进程中碰到的最年夜艰苦是什么?如那边置的?e、与不人比拟,你有什么专门的进修办法吗?请举例阐明这种办法对

11、你的帮助。f、请报告一次你尽力进修专业常识,从而帮助团队进步任务效力的阅历。8、寻求杰出界说:寻求杰出是指对团体的才干跟任务表示有高于普通规范的请求,能够继续存眷任务表示是否令人称心,并不时进修、改良,力图片面地晋升。操纵界说:a、不时寻求更高的绩效,为本人设定的目标每每高于不人的请求;b、充沛应用构造中的种种资本,不时取得任务所需要的常识与技艺;c、为了实现目标,既能与不人竞争,也能与不人协作;d、为了能够实现目标而承担额定的任务与义务;e、当掉败时,能够实验差其余方法或行动来到达目标。行动口试标题:a、请谈谈你在任务中是怎样不甘平庸、寻求杰出的。b、为到达杰出的绩效,需要你支付宏年夜的尽力

12、,请讲一次你在这方面印象最深化的阅历。c、请报告你经过诲人不倦地继续改良某个任务流程的细节,以求得最优任务品质的实践阅历。d、请报告在指点对你担任的某项任务曾经特不称心的状况下,你依然给本人提出更高规范的实践例子。e、请回忆一次你所承担的任务碰到艰苦,指点决议保持的状况下,你依然尽力实验新办法的阅历。f、当你的事迹表示曾经到达优良时,你是怎样逾越自我,实现更年夜的成果的?请举例阐明。9、举动导向界说:举动导向是指在任务中表示出非常强的自动性跟举能源,乐于承受变更,能够设破临时的开展目标并尽力付诸实现。操纵界说:a、夸年夜举动的主要性;b、设破有应战性的目标,任务绩效优于所希冀的;c、能够在不人

13、之前看到需要改动的地点,并情愿承担危险来开场革新的过程;d、外举动前能够片面思索咨询题的各个方面;e、能够捉住时机,使任务做得更好,团体跟专业都能有所开展;f、为实现目标会支付宏年夜的尽力。行动口试标题:a、请描绘一个你做过的非常有应战性的任务。b、为了实现你为本人设破的目标,你都市做哪些任务?请举例阐明。c19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/geektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2019/1/15 15:35:44 19|散列表(中):如何打造一个工业级水平的散列表? 通过上一节的学习,我

14、们知道,散列表的查询效率并不能笼统地说成是O(1)。它跟散列函数、装载因子、散列冲突等都有关系。如果散列函数设计得不好,或者 装载因子过高,都可能导致散列冲突发生的概率升高,查询效率下降。 在极端情况下,有些恶意的攻击者,还有可能通过精心构造的数据,使得所有的数据经过散列函数之后,都散列到同一个槽里。如果我们使用的是基于链表的冲 突解决方法,那这个时候,散列表就会退化为链表,查询的时间复杂度就从O(1)急剧退化为O(n)。 如果散列表中有10万个数据,退化后的散列表查询的效率就下降了10万倍。更直接点说,如果之前运行100次查询只需要0.1秒,那现在就需要1万秒。这样就有可 能因为查询操作消耗

15、大量CPU或者线程资源,导致系统无法响应其他请求,从而达到拒绝服务攻击(DoS)的目的。这也就是散列表碰撞攻击的基本原理。 今天,我们就来学习一下,如何设计一个可以应对各种异常情况的工业级散列表,来避免在散列冲突的情况下,散列表性能的急剧下降,并且能抵抗散列碰撞攻 击? 如何设计散列函数? 散列函数设计的好坏,决定了散列表冲突的概率大小,也直接决定了散列表的性能。那什么才是好的散列函数呢? 首先,散列函数的设计不能太复杂。过于复杂的散列函数,势必会消耗很多计算时间,也就间接的影响到散列表的性能。其次,散列函数生成的值要尽可能随机 并且均匀分布,这样才能避免或者最小化散列冲突,而且即便出现冲突,

16、散列到每个槽里的数据也会比较平均,不会出现某个槽内数据特别多的情况。 实际工作中,我们还需要综合考虑各种因素。这些因素有关键字的长度、特点、分布、还有散列表的大小等。散列函数各式各样,我举几个常用的、简单的散列 函数的设计方法,让你有个直观的感受。 第一个例子就是我们上一节的学生运动会的例子,我们通过分析参赛编号的特征,把编号中的后两位作为散列值。我们还可以用类似的散列函数处理手机号码, 因为手机号码前几位重复的可能性很大,但是后面几位就比较随机,我们可以取手机号的后四位作为散列值。这种散列函数的设计方法,我们一般叫作“数据分析 法”。 第二个例子就是上一节的开篇思考题,如何实现Word拼写检

17、查功能。这里面的散列函数,我们就可以这样设计:将单词中每个字母的ASCll码值“进位”相加,然后 再跟散列表的大小求余、取模,作为散列值。比如,英文单词nice,我们转化出来的散列值就是下面这样: hash(“nice“)=(“n“ - “a“) * 26*26*26 + (“i“ - “a“)*26*26 + (“c“ - “a“)*26+ (“e“-“a“) / 78978 实际上,散列函数的设计方法还有很多,比如直接寻址法、平方取中法、折叠法、随机数法等,这些你只要了解就行了,不需要全都掌握。 装载因子过大了怎么办? 我们上一节讲到散列表的装载因子的时候说过,装载因子越大,说明散列表中的

18、元素越多,空闲位置越少,散列冲突的概率就越大。不仅插入数据的过程要多次 寻址或者拉很长的链,查找的过程也会因此变得很慢。 对于没有频繁插入和删除的静态数据集合来说,我们很容易根据数据的特点、分布等,设计出完美的、极少冲突的散列函数,因为毕竟之前数据都是已知的。 对于动态散列表来说,数据集合是频繁变动的,我们事先无法预估将要加入的数据个数,所以我们也无法事先申请一个足够大的散列表。随着数据慢慢加入,装 19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/geektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2019/1/15

19、 15:35:44 载因子就会慢慢变大。当装载因子大到一定程度之后,散列冲突就会变得不可接受。这个时候,我们该如何处理呢? 还记得我们前面多次讲的“动态扩容”吗?你可以回想一下,我们是如何做数组、栈、队列的动态扩容的。 针对散列表,当装载因子过大时,我们也可以进行动态扩容,重新申请一个更大的散列表,将数据搬移到这个新散列表中。假设每次扩容我们都申请一个原来散 列表大小两倍的空间。如果原来散列表的装载因子是0.8,那经过扩容之后,新散列表的装载因子就下降为原来的一半,变成了0.4。 针对数组的扩容,数据搬移操作比较简单。但是,针对散列表的扩容,数据搬移操作要复杂很多。因为散列表的大小变了,数据的

20、存储位置也变了,所以我们需 要通过散列函数重新计算每个数据的存储位置。 你可以看我图里这个例子。在原来的散列表中,21这个元素原来存储在下标为0的位置,搬移到新的散列表中,存储在下标为7的位置。 19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/geektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2019/1/15 15:35:44 对于支持动态扩容的散列表,插入操作的时间复杂度是多少呢?前面章节我已经多次分析过支持动态扩容的数组、栈等数据结构的时间复杂度了。所以,这里我 就不啰嗦了,你要是还不清楚的话,可以回去复习一

21、下。 19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/geektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2019/1/15 15:35:44 插入一个数据,最好情况下,不需要扩容,最好时间复杂度是O(1)。最坏情况下,散列表装载因子过高,启动扩容,我们需要重新申请内存空间,重新计算哈希 位置,并且搬移数据,所以时间复杂度是O(n)。用摊还分析法,均摊情况下,时间复杂度接近最好情况,就是O(1)。 实际上,对于动态散列表,随着数据的删除,散列表中的数据会越来越少,空闲空间会越来越多。如果我们对空间消耗非常敏感,我们可

22、以在装载因子小于某个 值之后,启动动态缩容。当然,如果我们更加在意执行效率,能够容忍多消耗一点内存空间,那就可以不用费劲来缩容了。 我们前面讲到,当散列表的装载因子超过某个阈值时,就需要进行扩容。装载因子阈值需要选择得当。如果太大,会导致冲突过多;如果太小,会导致内存浪费 严重。 装载因子阈值的设置要权衡时间、空间复杂度。如果内存空间不紧张,对执行效率要求很高,可以降低负载因子的阈值;相反,如果内存空间紧张,对执行效率 要求又不高,可以增加负载因子的值,甚至可以大于1。 如何避免低效地扩容? 我们刚刚分析得到,大部分情况下,动态扩容的散列表插入一个数据都很快,但是在特殊情况下,当装载因子已经到

23、达阈值,需要先进行扩容,再插入数据。这 个时候,插入数据就会变得很慢,甚至会无法接受。 我举一个极端的例子,如果散列表当前大小为1GB,要想扩容为原来的两倍大小,那就需要对1GB的数据重新计算哈希值,并且从原来的散列表搬移到新的散列 表,听起来就很耗时,是不是? 如果我们的业务代码直接服务于用户,尽管大部分情况下,插入一个数据的操作都很快,但是,极个别非常慢的插入操作,也会让用户崩溃。这个时候,“一次 性”扩容的机制就不合适了。 为了解决一次性扩容耗时过多的情况,我们可以将扩容操作穿插在插入操作的过程中,分批完成。当装载因子触达阈值之后,我们只申请新空间,但并不将老的 数据搬移到新散列表中。

24、当有新数据要插入时,我们将新数据插入新散列表中,并且从老的散列表中拿出一个数据放入到新散列表。每次插入一个数据到散列表,我们都重复上面的过 程。经过多次插入操作之后,老的散列表中的数据就一点一点全部搬移到新散列表中了。这样没有了集中的一次性数据搬移,插入操作就都变得很快了。 19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/geektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2019/1/15 15:35:44 这期间的查询操作怎么来做呢?对于查询操作,为了兼容了新、老散列表中的数据,我们先从新散列表中查找,如果没有找

25、到,再去老的散列表中查找。 19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/geektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2019/1/15 15:35:44 通过这样均摊的方法,将一次性扩容的代价,均摊到多次插入操作中,就避免了一次性扩容耗时过多的情况。这种实现方式,任何情况下,插入一个数据的时间 复杂度都是O(1)。 如何选择冲突解决方法? 上一节我们讲了两种主要的散列冲突的解决办法,开放寻址法和链表法。这两种冲突解决办法在实际的软件开发中都非常常用。比如,Java中LinkedHashMap就采 用了链表

26、法解决冲突,ThreadLocalMap是通过线性探测的开放寻址法来解决冲突。那你知道,这两种冲突解决方法各有什么优势和劣势,又各自适用哪些场景 吗? 1.开放寻址法 我们先来看看,开放寻址法的优点有哪些。 开放寻址法不像链表法,需要拉很多链表。散列表中的数据都存储在数组中,可以有效地利用CPU缓存加快查询速度。而且,这种方法实现的散列表,序列化起 来比较简单。链表法包含指针,序列化起来就没那么容易。你可不要小看序列化,很多场合都会用到的。我们后面就有一节会讲什么是数据结构序列化、如何序 列化,以及为什么要序列化。 我们再来看下,开放寻址法有哪些缺点。 上一节我们讲到,用开放寻址法解决冲突的散

27、列表,删除数据的时候比较麻烦,需要特殊标记已经删除掉的数据。而且,在开放寻址法中,所有的数据都存储在 一个数组中,比起链表法来说,冲突的代价更高。所以,使用开放寻址法解决冲突的散列表,装载因子的上限不能太大。这也导致这种方法比链表法更浪费内存 空间。 所以,我总结一下,当数据量比较小、装载因子小的时候,适合采用开放寻址法。这也是Java中的ThreadLocalMap使用开放寻址法解决散列冲突的原因。 2.链表法 首先,链表法对内存的利用率比开放寻址法要高。因为链表结点可以在需要的时候再创建,并不需要像开放寻址法那样事先申请好。实际上,这一点也是我们前 面讲过的链表优于数组的地方。 链表法比起

28、开放寻址法,对大装载因子的容忍度更高。开放寻址法只能适用装载因子小于1的情况。接近1时,就可能会有大量的散列冲突,导致大量的探测、再 散列等,性能会下降很多。但是对于链表法来说,只要散列函数的值随机均匀,即便装载因子变成10,也就是链表的长度变长了而已,虽然查找效率有所下降, 但是比起顺序查找还是快很多。 还记得我们之前在链表那一节讲的吗?链表因为要存储指针,所以对于比较小的对象的存储,是比较消耗内存的,还有可能会让内存的消耗翻倍。而且,因为链 表中的结点是零散分布在内存中的,不是连续的,所以对CPU缓存是不友好的,这方面对于执行效率也有一定的影响。 当然,如果我们存储的是大对象,也就是说要存

29、储的对象的大小远远大于一个指针的大小(4个字节或者8个字节),那链表中指针的内存消耗在大对象面前就可 以忽略了。 实际上,我们对链表法稍加改造,可以实现一个更加高效的散列表。那就是,我们将链表法中的链表改造为其他高效的动态数据结构,比如跳表、红黑树。这 样,即便出现散列冲突,极端情况下,所有的数据都散列到同一个桶内,那最终退化成的散列表的查找时间也只不过是O(logn)。这样也就有效避免了前面讲到的 散列碰撞攻击。 19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/geektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2

30、019/1/15 15:35:44 所以,我总结一下,基于链表的散列冲突处理方法比较适合存储大对象、大数据量的散列表,而且,比起开放寻址法,它更加灵活,支持更多的优化策略,比如 用红黑树代替链表。 工业级散列表举例分析 刚刚我讲了实现一个工业级散列表需要涉及的一些关键技术,现在,我就拿一个具体的例子,Java中的HashMap这样一个工业级的散列表,来具体看下,这些技术 是怎么应用的。 1.初始大小 19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/geektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2019/1/15

31、 15:35:44 HashMap默认的初始大小是16,当然这个默认值是可以设置的,如果事先知道大概的数据量有多大,可以通过修改默认初始大小,减少动态扩容的次数,这样会 大大提高HashMap的性能。 2.装载因子和动态扩容 最大装载因子默认是0.75,当HashMap中元素个数超过0.75*capacity(capacity表示散列表的容量)的时候,就会启动扩容,每次扩容都会扩容为原来的两倍大小。 3.散列冲突解决方法 HashMap底层采用链表法来解决冲突。即使负载因子和散列函数设计得再合理,也免不了会出现拉链过长的情况,一旦出现拉链过长,则会严重影响HashMap的性 能。 于是,在JD

32、K1.8版本中,为了对HashMap做进一步优化,我们引入了红黑树。而当链表长度太长(默认超过8)时,链表就转换为红黑树。我们可以利用红黑树快 速增删改查的特点,提高HashMap的性能。当红黑树结点个数少于8个的时候,又会将红黑树转化为链表。因为在数据量较小的情况下,红黑树要维护平衡,比起 链表来,性能上的优势并不明显。 4.散列函数 散列函数的设计并不复杂,追求的是简单高效、分布均匀。我把它摘抄出来,你可以看看。 int hash(Object key) int h = key.hashCode(); return (h (h 16) /capicity表示散列表的大小 其中,hashCo

33、de()返回的是Java对象的hash code。比如String类型的对象的hashCode()就是下面这样: public int hashCode() int var1 = this.hash; if(var1 = 0 for(int var3 = 0; var3 16) /capicity 表示散列表的大小 19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/geektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2019/1/15 15:35:44 先补充下老师使用的这段代码的一些问题:在JDK HashMap源码

34、中,是分两步走的: 1. hash值的计算,源码如下: static final int hash(Object key) int hash; return key = null ? 0 : (hash = key.hashCode() hash 16; 2. 在插入或查找的时候,计算Key被映射到桶的位置: int index = hash(key) & (capacity - 1) - JDK HashMap中hash函数的设计,确实很巧妙: 首先hashcode本身是个32位整型值,在系统中,这个值对于不同的对象必须保证唯一(JAVA规范),这也是大家常说的,重写equals必须重写ha

35、shcode的重 要原因。 获取对象的hashcode以后,先进行移位运算,然后再和自己做异或运算,即:hashcode (hashcode 16),这一步甚是巧妙,是将高16位移到低16位,这样 计算出来的整型值将“具有”高位和低位的性质 最后,用hash表当前的容量减去一,再和刚刚计算出来的整型值做位与运算。进行位与运算,很好理解,是为了计算出数组中的位置。但这里有个问题: 为什么要用容量减去一? 因为 A % B = A & (B - 1),所以,(h (h 16) & (capitity -1) = (h (h 16) % capitity,可以看出这里本质上是使用了除留余数法 综上,

36、可以看出,hashcode的随机性,加上移位异或算法,得到一个非常随机的hash值,再通过除留余数法,得到index,整体的设计过程与老师所说的“ 散列函数”设计原则非常吻合! - 有分析不准确的地方,请指正! 72赞 作者回复2018-11-05 02:00:42 19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/geektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2019/1/15 15:35:44 天王 2018-11-02 00:38:20 能否每节讲完都有个代码的demo? 27赞 作者回复2018-11-0

37、2 02:05:31 是个好建议 我考虑下 拉欧 2018-11-02 01:03:13 比如Redis中的hash,set,hset,都是散列表实现,他们的动态扩容策略是同时维护两个散列表,然后一点点搬移数据 22赞 SCu 2018-11-16 03:54:28 可能会有同学对那个mod (capacity-1)有疑问 这个很正常,因为缺少前置描述条件 即当且仅当 capacity是2的整数倍的时候该公式才成立 当capacity为2的整 数倍时(无符号)仅有一位是1其余位为0 减1后 后续为为1当前位为0 做与运算等于取后面的所有位的值 比如capacity=8 即00001000 减1

38、为00000111 如has cod e=5 即00000101 此时5%8=00000101&00000111=00000101=5 其他大家举一反三即可 13赞 2018-11-01 23:50:12 老师能不能就具体的题,讲讲数据结构呀。这种高大上的,对我来说有点难 9赞 作者回复2018-11-02 02:07:32 我后面还打算把所有的课后题集中写一写答案 那个时候会具体分析题目对应的就解决思路 姜威 2018-11-03 01:56:18 总结:散列表(中) 面试题目:如何设计一个工业级的散列函数? 思路: 何为一个工业级的散列表?工业级的散列表应该具有哪些特性?结合学过的知识,我

39、觉的应该有这样的要求: 1.支持快速的查询、插入、删除操作; 2.内存占用合理,不能浪费过多空间; 3.性能稳定,在极端情况下,散列表的性能也不会退化到无法接受的情况。 方案: 如何设计这样一个散列表呢?根据前面讲到的知识,我会从3个方面来考虑设计思路: 1.设计一个合适的散列函数; 2.定义装载因子阈值,并且设计动态扩容策略; 3.选择合适的散列冲突解决方法。 知识总结: 一、如何设计散列函数? 1.要尽可能让散列后的值随机且均匀分布,这样会尽可能减少散列冲突,即便冲突之后,分配到每个槽内的数据也比较均匀。 19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/ge

40、ektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2019/1/15 15:35:44 2.除此之外,散列函数的设计也不能太复杂,太复杂就会太耗时间,也会影响到散列表的性能。 3.常见的散列函数设计方法:直接寻址法、平方取中法、折叠法、随机数法等。 二、如何根据装载因子动态扩容? 1.如何设置装载因子阈值? 可以通过设置装载因子的阈值来控制是扩容还是缩容,支持动态扩容的散列表,插入数据的时间复杂度使用摊还分析法。 装载因子的阈值设置需要权衡时间复杂度和空间复杂度。如何权衡?如果内存空间不紧张,对执行效率要求很高,可以降低装载因子的阈值;相反,如果 内

41、存空间紧张,对执行效率要求又不高,可以增加装载因子的阈值。 2.如何避免低效扩容?分批扩容 分批扩容的插入操作:当有新数据要插入时,我们将数据插入新的散列表,并且从老的散列表中拿出一个数据放入新散列表。每次插入都重复上面的过程 。这样插入操作就变得很快了。 分批扩容的查询操作:先查新散列表,再查老散列表。 通过分批扩容的方式,任何情况下,插入一个数据的时间复杂度都是O(1)。 三、如何选择散列冲突解决方法? 常见的2中方法:开放寻址法和链表法。 大部分情况下,链表法更加普适。而且,我们还可以通过将链表法中的链表改造成其他动态查找数据结构,比如红黑树、跳表,来避免散列表时间复杂度 退化成O(n)

42、,抵御散列冲突攻击。 但是,对于小规模数据、装载因子不高的散列表,比较适合用开放寻址法。 7赞 Infinite_gao 2018-11-02 00:47:16 老师可以分享一下,你对hashmap的默认负载因子是0.75的理解吗?是与泊松分布有关吗? 7赞 作者回复2018-11-02 02:04:58 大牛 能否详细说说 w1sl1y 2018-11-05 03:42:03 看了下,的确是TREEFY_THRESHOLD等于8 UNTREEFY_THRESHOLD等于6 6赞 喜欢你的笑 2018-11-02 01:38:02 能分析一下HashMap的散列函数吗? 5赞 作者回复2018

43、-11-02 01:53:54 不建议搞得这么详细 :)你就看一眼 有个印象就好了 w1sl1y 2018-11-03 03:51:09 我怎么hashmap记得红黑树树化的阈值是8,退化的阈值是6,回头看看源码确认下 4赞 19|散列表(中):如何打造一个工业级水平的散列表? file:/F/temp/geektime/数据结构与算法之美/19散列表(中):如何打造一个工业级水平的散列表?.html2019/1/15 15:35:44 作者回复2018-11-05 02:05:15 确认好留言给我啊 4、“妈妈”两次问“你在伞里吗”,可以看出这是一个 的妈妈;女儿两次“响亮而干脆的回答在”,

44、可以看出这是一个 的女儿。(2分) 5、第段中加点的词“砸”换成“落”好不好?为什么?(2分) 6、你是怎样理解“泪水和着雨水,从我的脸上流淌下来一瞬间打湿了我的脸”这句话的?(2分) 7、在你的生活中,有没有母子或母女互相关心的事?请你用简洁的语言描述出来。(2分) 十一、作文。(30分)生活中充满了温馨,目睹感人的情景,我们常常心潮起伏,热泪盈眶;生活中充满了爱,我们常常被爱和关怀感动请以“感动”为题,写一篇作文,记录下令你感动的瞬间。内容要具体,语句要通顺,书写要工整。微信扫描二维码关注:优秀教师之家,获取更多免费好资源您的支持,是我们努力的动力!更多免费资料、微信关注公众号:优秀教师之家


注意事项

本文(RC90(RC+5.0版本)_控制器手册r2.pdf)为本站会员(始于喜欢终于深爱)主动上传,文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文库网(点击联系客服),我们立即给予删除!




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

文库网用户QQ群:731843829  微博官方号:文库网官方   知乎号:文库网

Copyright© 2025 文库网 wenkunet.com 网站版权所有世界地图

经营许可证编号:粤ICP备2021046453号   营业执照商标

1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png