2020年11月30日星期一

佩雷拉首度回应胡尔克冲突!巴西巨星3大下家曝光,有望留在中超_上港

原标题:佩雷拉首度回应胡尔克冲突!巴西巨星3大下家曝光,有望留在中超

北京时间11月30日消息,胡尔克与上港的合同即将到期,现在,他的下一站可能是3个地方,分别是波尔图、帕尔梅拉斯和另外一支中超球队。上一场,胡尔克没进大名单。如今,他貌似和主帅佩雷拉和解了。

上港0-1不敌横滨水手的比赛,胡尔克中途被换下,下场时,胡尔克冲佩雷拉喊话——我跟你彻底结束了。结果上一场比赛,胡尔克没有进入比赛大名单。让胡尔克尴尬的是,他没进大名单,上港就赢球了,2-1击败了横滨水手。赛后,佩雷拉没有回应胡尔克的问题。

如今,佩雷拉谈到了胡尔克,"作为主教练,我当然希望球队能够在场上展现出训练中的内容,让球队踢得更加团队,展现合作精神。胡尔克昨天也在训练场上。教练会决定一名球员上场与否,并且都是出于技战术原因。我十分信任我的球队、球员以及球队的团队精神。"

从佩雷拉的表态来看,他貌似和胡尔克和解了。对于胡尔克来说,他为上港做出了贡献。2018赛季,上港首次问鼎中超冠军,胡尔克居功至伟。不过,胡尔克肯定要和上港好聚好散了。

胡尔克接下来的新东家有可能是波尔图(葡萄牙)、帕尔梅拉斯(巴西)和另一支中超球队。

由于胡尔克和上港的合同即将到期,因此,如果胡尔克离开,其他球队可以自由身签下他。当年,上港在胡尔克身上砸下了超过5000万欧元转会费。如今,胡尔克要自由身走人了。

此外,胡尔克在上港的年薪是2200万欧元,如果留在中超,去到另外一队,他的年薪最多是300万欧元。当然,胡尔克已经34岁,他能够拿300万欧元年薪,也应该知足。返回搜狐,查看更多

责任编辑:

原文转载:http://sport.shaoqun.com/a/373636.html

stadium:https://www.ikjzd.com/w/2729

敦煌网:https://www.ikjzd.com/w/189

ishare:https://www.ikjzd.com/w/2308


原标题:佩雷拉首度回应胡尔克冲突!巴西巨星3大下家曝光,有望留在中超北京时间11月30日消息,胡尔克与上港的合同即将到期,现在,他的下一站可能是3个地方,分别是波尔图、帕尔梅拉斯和另外一支中超球队。上一场,胡尔克没进大名单。如今,他貌似和主帅佩雷拉和解了。上港0-1不敌横滨水手的比赛,胡尔克中途被换下,下场时,胡尔克冲佩雷拉喊话——我跟你彻底结束了。结果上一场比赛,胡尔克没有进入比赛大名单。让胡尔
pocket:pocket
eprice:eprice
五星漂流为何改为牛仔谷漂流?:五星漂流为何改为牛仔谷漂流?
兰卡威美食介绍:兰卡威美食介绍
独立站shopify优缺点!shopify特点与后台功能详细介绍,让您轻松了解shopify!:独立站shopify优缺点!shopify特点与后台功能详细介绍,让您轻松了解shopify!

Vue.js 桌面端自定义滚动条组件|vue美化滚动条VScroll

基于vue.js开发的小巧PC端自定义滚动条组件VScroll。

前段时间有给大家分享一个vue桌面端弹框组件,今天再分享最近开发的一个vue pc端自定义滚动条组件。

vscroll 一款基于vue2.x开发的网页端轻量级超小巧自定义美化滚动条组件。支持是否原生滚动条、鼠标移出是否自动隐藏、自定义滚动条尺寸及颜色等功能。

组件在设计开发之初借鉴了 el-scrollbar 及 vuebar 等组件设计思想。

通过简单的标签写法  <v-scroll>...</v-scroll>  即可快速生成一个漂亮的替换原生滚动条。

参数配置

props: { // 是否显示原生滚动条 native: Boolean, // 是否自动隐藏滚动条 autohide: Boolean, // 滚动条尺寸 size: { type: [Number, String], default: '' }, // 滚动条颜色 color: String, // 滚动条层级 zIndex: null},

◆ 引入组件

在main.js中引入滚动条组件VScroll。

 import VScroll from './components/vscroll' 

 Vue.use(VScroll) 

◆ 快速使用

** 在使用前需要设置v-scroll外层div容器的宽度或高度。

<!-- 设置原生滚动条 --><v-scroll native> <img src="https://cn.vuejs.org/images/logo.png" style="max-width:100%;" /> <p>这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!</p></v-scroll><!-- 设置自定义参数 --><v-scroll autohide size="10" color="#f90" zIndex="2020"> <img src="https://cn.vuejs.org/images/logo.png" style="max-width:100%;" /> <p>这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!</p></v-scroll>

◆ 实现过程

vscroll组件目录结构如下:

<!-- //VScroll 自定义滚动条模板 --><template> <div class="vui__scrollbar" ref="ref__box" @mouseenter="handleMouseEnter" @mouseleave="handleMouseLeave" v-resize="handleResize"> <div :class="['vscroll__wrap', {native: native}]" ref="ref__wrap" @scroll="handleScroll">  <div class="vscroll__view" v-resize="handleResize">  <slot />  </div> </div> <!-- //滚动条 --> <div :class="['vscroll__bar vertical', {ishide: !isShow}]" @mousedown="handleClickTrack($event, 0)" :style="{'width': parseInt(size)>=0 ? parseInt(size)+'px' : '', 'z-index': parseInt(zIndex)>=0 ? parseInt(zIndex) : ''}">  <div class="vscroll__thumb" ref="ref__barY" :style="{'background': color, 'height': barHeight+'px'}" @mousedown="handleDragThumb($event, 0)"></div> </div> <div :class="['vscroll__bar horizontal', {ishide: !isShow}]" @mousedown="handleClickTrack($event, 1)" :style="{'height': parseInt(size)>=0 ? parseInt(size)+'px' : '', 'z-index': parseInt(zIndex)>=0 ? parseInt(zIndex) : ''}">  <div class="vscroll__thumb" ref="ref__barX" :style="{'background': color, 'width': barWidth+'px'}" @mousedown="handleDragThumb($event, 1)"></div> </div> </div></template>

在vue中如何通过指令directtive函数来监听元素/DOM尺寸变化?

非常简单,写一个轮询自定义指令就行。这里就直接监听滚动区DOM宽/高变化来动态更新滚动条状态。

// 监听元素/DOM尺寸变化directives: { 'resize': {  bind: function(el, binding) {   let width = '', height = '';   function get() {   const elStyle = el.currentStyle ? el.currentStyle : document.defaultView.getComputedStyle(el, null);   if (width !== elStyle.width || height !== elStyle.height) {    binding.value({width, height});   }   width = elStyle.width;   height = elStyle.height;   }   el.__vueReize__ = setInterval(get, 16);  },  unbind: function(el) {   clearInterval(el.__vueReize__);  } }},

/** * @Desc  vue.js自定义滚动条直接VScroll * @Time  andy by 2020-11-30 * @About Q:282310962 wx:xy190310 */<script> import domUtils from './utils/dom' export default { props: {  // 是否显示原生滚动条  native: Boolean,  // 是否自动隐藏滚动条  autohide: Boolean,  // 滚动条尺寸  size: { type: [Number, String], default: '' },  // 滚动条颜色  color: String,  // 滚动条层级  zIndex: null }, data() {  return {  barWidth: 0,   // 滚动条宽度  barHeight: 0,   // 滚动条高度  ratioX: 1,    // 滚动条水平偏移率  ratioY: 1,    // 滚动条垂直偏移率  isTaped: false,   // 鼠标光标是否按住滚动条  isHover: false,   // 鼠标光标是否悬停在滚动区  isShow: !this.autohide, // 是否显示滚动条  } }, mounted() {  this.$ref__box = this.$refs.ref__box  this.$ref__wrap = this.$refs.ref__wrap  this.$ref__barY = this.$refs.ref__barY  this.$ref__barX = this.$refs.ref__barX  this.$nextTick(this.updated) }, // ... methods: {  // 鼠标移入  handleMouseEnter() {  this.isHover = true  this.isShow = true  this.updated()  },  // 鼠标移出  handleMouseLeave() {  this.isHover = false  this.isShow = false  },  // 拖动滚动条  handleDragThumb(e, index) {  let _this = this  this.isTaped = true  let c = {}  // 阻止默认事件  domUtils.isIE() ? (e.returnValue = false, e.cancelBubble = true) : (e.stopPropagation(), e.preventDefault())  document.onselectstart = () => false  if(index == 0) {   c.dragY = true   c.clientY = e.clientY  }else {   c.dragX = true   c.clientX = e.clientX  }  domUtils.on(document, 'mousemove', function(evt) {   if(_this.isTaped) {   if(c.dragY) {    _this.$ref__wrap.scrollTop += (evt.clientY - c.clientY) * _this.ratioY    _this.$ref__barY.style.transform = `translateY(${_this.$ref__wrap.scrollTop / _this.ratioY}px)`    c.clientY = evt.clientY   }   if(c.dragX) {    _this.$ref__wrap.scrollLeft += (evt.clientX - c.clientX) * _this.ratioX    _this.$ref__barX.style.transform = `translateX(${_this.$ref__wrap.scrollLeft / _this.ratioX}px)`    c.clientX = evt.clientX   }   }  })  domUtils.on(document, 'mouseup', function() {   _this.isTaped = false     document.onmouseup = null;   document.onselectstart = null  })  },  // 点击滚动槽  handleClickTrack(e, index) {  console.log(index)  },  // 更新滚动区  updated() {  if(this.native) return  // 垂直滚动条  if(this.$ref__wrap.scrollHeight > this.$ref__wrap.offsetHeight) {   this.barHeight = this.$ref__box.offsetHeight **2 / this.$ref__wrap.scrollHeight   this.ratioY = (this.$ref__wrap.scrollHeight - this.$ref__box.offsetHeight) / (this.$ref__box.offsetHeight - this.barHeight)   this.$ref__barY.style.transform = `translateY(${this.$ref__wrap.scrollTop / this.ratioY}px)`  }else {   this.barHeight = 0   this.$ref__barY.style.transform = ''   this.$ref__wrap.style.marginRight = ''  }  // 水平滚动条  ...  },  // 滚动区元素/DOM尺寸改变  handleResize() {  // 更新滚动条状态  },  // ... } }</script>

滚动至指定位置

<p> <span class="vs__btn" @click="handleScrollTo('top')">滚动至顶部</span> <span class="vs__btn" @click="handleScrollTo('bottom')">滚动至底部</span> <span class="vs__btn" @click="handleScrollTo(150)">滚动至150px</span></p><v-scroll ref="vscrollRef"> <img src="https://cn.vuejs.org/images/logo.png" style="height:180px;" /> <p><img src="https://cn.vuejs.org/images/logo.png" style="height:350px;" /></p> <p>这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!</p></v-scroll>

// 滚动到指定位置handleScrollTo(val) { this.$refs.vscrollRef.scrollTo(val);},

监听scroll滚动事件

<v-scroll @scroll="handleScroll"> <img src="https://cn.vuejs.org/images/logo.png" style="height:180px;margin-right:10px;" /> <br /> <p><img src="https://cn.vuejs.org/images/logo.png" style="height:250px;" /></p> <p>这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!这里是内容信息!</p></v-scroll>

// 监听滚动事件handleScroll(e) { this.scrollTop = e.target.scrollTop // 判断滚动状态 if(e.target.scrollTop == 0) {  this.scrollStatus = '到达顶部' } else if(e.target.scrollTop + e.target.offsetHeight >= e.target.scrollHeight) {  this.scrollStatus = '到达底部' }else {  this.scrollStatus = '滚动中....' }},

OK,以上就是基于vue.js实现自定义滚动条组件。希望能对大家有些帮助!💪

最后附上vue.js桌面端弹出框组件

vue pc端弹窗组件:https://www.cnblogs.com/xiaoyan2017/p/13913860.html

 









原文转载:http://www.shaoqun.com/a/494401.html

电霸:https://www.ikjzd.com/w/2597

达方物流:https://www.ikjzd.com/w/2562

全球速卖通:https://www.ikjzd.com/w/81


基于vue.js开发的小巧PC端自定义滚动条组件VScroll。前段时间有给大家分享一个vue桌面端弹框组件,今天再分享最近开发的一个vuepc端自定义滚动条组件。vscroll一款基于vue2.x开发的网页端轻量级超小巧自定义美化滚动条组件。支持是否原生滚动条、鼠标移出是否自动隐藏、自定义滚动条尺寸及颜色等功能。组件在设计开发之初借鉴了el-scrollbar及vuebar等组件设计思想。通过简
camel:camel
vava:vava
水下脱衣舞夜总会?全球七大水下奇景建筑:水下脱衣舞夜总会?全球七大水下奇景建筑
购在兰卡威 玩转海岛游 - :购在兰卡威 玩转海岛游 -
三亚蜈支洲岛要不要门票?:三亚蜈支洲岛要不要门票?

黄奕不顾形象跳热舞,把尔冬升吓到四仰八叉,惨遭好友马伊琍调侃

原标题:黄奕不顾形象跳热舞,把尔冬升吓到四仰八叉,惨遭好友马伊琍调侃

近日,在综艺节目《演员请就位》的一段花絮中,黄奕为饰演"许媚"一角在排练时霸气热舞,但这番操作吓到了在场导演尔冬升。

视频里,尔冬升紧张地抱紧双臂向后退,作四仰八叉状。没等黄奕跳完舞蹈,尔冬升就问她"还没演完?",并要求黄奕退后一点。

虽然被黄奕的热舞吓到,不过尔冬升还是很配合地做出剧本里"求婚"的动作,这也使得两人的互动趣味满满。

黄奕与尔冬升的互动令不少网友觉得有趣,不过也有部分网友指出黄奕的舞蹈略显油腻。

在热舞视频被广泛讨论后,黄奕在社交平台也放出了这段跳舞视频,并主动询问网友"姐跳舞真的很吓人吗 ",以自嘲方式作出回应。

黄奕好友马伊琍在评论区直言两人相识二十多年来,黄奕就一直是这样"又虎又直"的性格。黄奕也很快回复了马伊琍的评论,亲昵地称其为"马司令",夸赞好姐妹懂自己。

其实黄奕和马伊琍关系一直不错,两人曾在《还珠格格》第三部中合作,分别饰演小燕子和紫薇。

近期,黄奕在《演员请就位》的表现备受关注。最新一期节目中,尔冬升组的演员状况百出,这一组老戏骨齐聚——黄奕、马苏和倪虹洁等演员都在,但他们各自对剧本都有自己的想法,出现了想改词的情况。黄奕改了不少台词,这个行为在导演点评阶段也遭到了尔冬升的批评。

这一季的《演员请就位》中,黄奕的表现总体来说是可圈可点的。她在《风月》片段中的惊鸿一瞥,赢得了观众以及多位导演的赞美。

作为曾经家喻户晓的女星,黄奕出演过《上错花轿嫁对郎》这样国民度极高的电视剧作品,如今出演综艺也让她的人气回升了很多。

黄奕早年佳作不断,以至于如今大众对她的演技有很高的期待值。对黄奕来说,保持自身的专业度,呈现更好的作品,未来发展才会更加长远。返回搜狐,查看更多

责任编辑:

原文转载:http://yl.shaoqun.com/a/209070.html

focalprice:https://www.ikjzd.com/w/1094.html

imgur:https://www.ikjzd.com/w/156

首信易:https://www.ikjzd.com/w/1841


原标题:黄奕不顾形象跳热舞,把尔冬升吓到四仰八叉,惨遭好友马伊琍调侃近日,在综艺节目《演员请就位》的一段花絮中,黄奕为饰演"许媚"一角在排练时霸气热舞,但这番操作吓到了在场导演尔冬升。视频里,尔冬升紧张地抱紧双臂向后退,作四仰八叉状。没等黄奕跳完舞蹈,尔冬升就问她"还没演完?",并要求黄奕退后一点。虽然被黄奕的热舞吓到,不过尔冬升还是很配合地做出剧本里"求婚"的动作,这也使得两
gtc:gtc
马士基航运:马士基航运
神奇手环爆卖,连起来可以绕地球一圈!:神奇手环爆卖,连起来可以绕地球一圈!
深圳旅游景点有哪些?:深圳旅游景点有哪些?
情感口述:妻酒后不小心吐露出轨秘密:情感口述:妻酒后不小心吐露出轨秘密

字节面试:谈谈索引为什么能提高查询性能?

前言
昨天,有个女孩子问我提高数据库查询性能有什么立竿见影的好方法?

这简直是一道送分题,我自豪且略带鄙夷的说,当然是加「索引」了。

她又不紧不慢的问,索引为什么就能提高查询性能。

这还用问,索引就像一本书的目录,用目录查当然很快。

她失望地摇了摇头,你说的只是一个类比,可为什么通过目录就能提高查询速度呢。

唉,对啊,通过书目可以快速查询,这只是一个现象,真正原因到底是什么呢。

那女孩看着诧异且表情僵硬的我,满意而又意味深长的笑笑:原来你这个男程序员也不会,看来我还得靠自己研究了。

哎,熬夜又要憔悴了我这该死的美貌。

来自同行的羞辱,是可忍孰不可忍?!

于是,我踏上了数据库索引学习的不归路,原来数据库索引使用了一种叫 B+ 树的古老数据结构,当然也有 Hash 等类型,暂且不说,可 B+ 树 这是个什么妖魔鬼怪呢?

下面就来浅尝辄止的扒一扒树的前世今生。



正文
二叉树
由 n( n > 0)个有限节点组成一个具有层次关系的集合,看起来就像一个倒挂的树,因此称这样的数据结构为树。

一个节点的子节点个数叫做度,通俗的讲就是树叉的个数。树中最大的度叫做树的度,也叫做阶。一个 2 阶树最多有 2 个子节点即最多有 2 叉,因此这样的树称为二叉树,二叉树是树家族中最简单的树。





两个叉的树就是二叉树,可这除了用来按一定结构存放数据外,跟查询性能好像也没关系,不会又是一个没用的噱头吧。



二分查找
听说二叉树的原始威力来源于一种叫做二分查找的算法。

相传在鹦鹉的原始社会,存在着森严的等级制度,每只鸟必须按高矮顺序分出等级和尊卑。

那么问题来了,如下图,怎样才能找出最高、最矮、中等高的那些鹦鹉呢、以及指定高度的那只呢?





第一种方法: 扫描法
一个一个依次测量,完毕后所有的问题都迎刃而解。

这种一个一个依次全部测量的方法叫做扫描,他的缺点很明显,最高和最矮,需要全部测量完毕才能知晓。

而对于指定高度,最好的情况是第一次就找到;最坏的情况是最后一次才找到,时间复杂度为 n,也就是说从 13 个鹦鹉中找到指定身高的那只,最坏的情况是查 13 次。

第二种方法:二分法
13 个鹦鹉全部听令,按从矮到高列队,向左看齐,报数。





报数字 1 的就是最矮的,报数字 13 的就是最高的,报数字 7 的就是中等身高的那只。

最好和最坏的情况都是一次找到。而查询性能一下子提高 13 倍,我的个乖乖,无论多个只鹦鹉,时间复杂度都是 1,好可怕。

问题:我不服,你这是偷换概念,有本事对比一个查找指定高度鹦鹉的性能。
因为鹦鹉们已经按高矮排好了队,所以指定高度的鹦鹉,要么是站中间那个只,要么就是在它的左边或右边的那群里。

如果是中间那个,一次就找到,如果不是只需要从中间左边或右边那一半中找,再在这一半中找中间那只,对比身高。

以此类推,每次都把查询的范围减半,时间复杂度log2(n)。

那么 log2(13) 就是 4,最坏的情况也才 4 次,时间复杂度确实不是 1 了,但好像也不糟,简化如下:





问题:如果按高矮排队,仍然需要一个一个比较,跟扫描有什么区别,那还不如直接扫描呢?
事实确实如此,单纯的一次查询,先排序,再二分查找,不见得比扫描快,甚至还不如。

但是,在数据的世界,大部分数据一生会被查询无数次,如果只在数据降生的时候排一次序,往后余生,是不是就可以直接用二分查找,这似乎就是传说的读多写少,以及对应的复用。

优点:

  • 查找快
缺点:

  • 必须有序,需要提前排序
  • 每次查找都需要不断计算中间位置


二分查找树
如果一组数据不会或不常变更,那么他们的位置也基本不变。可是每次查询都需要重新计算中间位置是一种浪费,而浪费可耻。

我们能不能把所有中间节点组织起来,每次使用时,直接取中间节点?

请看下图,找到所有单次二分查找的中间节点,把他们连起来,并用手提起最中间的那个节点,就是一棵二分查找树。





优点:二分查找树就是通过数据结构的方式实现了二分查找算法,通过存储中间节点的数据,弥补了二分查找每次都要计算中间位置的缺点。



平衡二叉树:
如果二分查找树不断进行修改,比如删除某些节点,经过一段时间后,最早那个中间节点的数据(根),很可能就不在中间了。

中间位置就像一个天平的支点,如果他不在中间了,那么整个天平就会失衡,失衡的世界就会坍塌成不伦不类的瘸树,甚至是降维成一个链表或者数组。

二分查找算法的关键在于有序和中间节点,而二分查找树的关键是中间节点的维护,如果维护的节点已经不在中间了,那么它就失去了意义。

所以必须保证「二分查找树」是一个正确的树,一个根节点在中心的树,一个左右子树层级(高度)基本相等(高度相差不超过1)的树,一个平衡的树。

平衡二叉树中最常见的就是红黑树:





红黑树规定了一系列节点颜色规则,以及对应的左旋和右旋操作来保证颜色规则,从而达到树的平衡性。

看到这花里胡哨的颜色以及复杂的规则,让人第一眼就望而却步,但所有的这些,也不过是为了保证二叉树的平衡性,由于维持平衡的操作太过麻烦,无法用一句话简单概括,只好用一堆人鬼难分的规则和步骤来实现,只要按着这些步骤就一定能实现二叉树的平衡。

平衡二叉树 = 二分查找树 + 平衡(左右高度相差不超过 1 )

平衡二叉树并未提高二分查找树的性能,它只是保正树不会被二向箔(多次增删改)打击降维成链表或不对称的残缺树,永远维持平衡。

另外,不仅仅是二叉树,其他种类的树,也是需要有序和平衡,才能发挥最大的威力。



多叉树之 B-tree
两个叉的树就能折半查询,理论可以提高一倍性能,那么多个叉是不是能提高更多倍性能?

如下图的 3 阶(叉)树(所有数据仅用于演示,非真实分布)





每个节点维护两个数据,并指向最多 3 个子节点。如图 3 个子节点的数据分别为:小于 17, 17 ~ 35 ,大于 35。

假设,从上图中查找 10 这个数,步骤如下:

  1. 找到根节点,对比 10 与 17 和 35 的大小,发现 10 < 17 在左子节点,也就是第 2 层节点;
  2. 从根节点的指针,找到左子节点,对比 10 与 8 和 12 的大小,发现 8 < 10 < 12,数据在当前节点的中间子节点,也就是第 3 层节点;
  3. 通过上步节点的指针,找到中间子节点(第 3 层节点),对比 10 与 9 和 10 的大小,发现 9 < 10 == 10,因此找到当前节点的第二数即为结果。
加上忽略的 12 个数据,从 26 个数据中查找一个数字 10,仅仅用了 log3(26)≈ 3 次,而如果用平衡二叉树,则需要 log2(26)≈5 次,事实证明,多叉树确实可以再次提高查找性能。

多叉树是在二分查找树的基础上,增加单个节点的数据存储数量,同时增加了树的子节点数,一次计算可以把查找范围缩小更多。

优点:二叉平衡树的基础上,使加载一次节点,可以加载更多路径数据,同时把查询范围缩减到更小。

复杂节点: 至此,我们列举的数据都是孤零零的单个数字。试想,你手里已经有一个数据 10,为什么还要费力吧唧的再从一堆数据中找到这个 10,自己找自己?这不是有病吗?

单个数字只能活在演示中,现实的世界要复杂的多,我们来看一个接近真实场景的案例。

现有一个以年龄为索引的 3 阶树,存储了一批用户信息,如下图:





数字为用户的年龄,其它为与树排序查找无关的业务数据,像这种索引数据与树排序查找无关的业务一起维护在节点的平衡多叉(阶)树称为 B- 树( B 树)。

缺点:业务数据的大小可能远远超过了索引数据的大小,每次为了查找对比计算,需要把数据加载到内存以及 CPU 高速缓存中时,都要把索引数据和无关的业务数据全部查出来。本来一次就可以把所有索引数据加载进来,现在却要多次才能加载完。如果所对比的节点不是所查的数据,那么这些加载进内存的业务数据就毫无用处,全部抛弃。



磁盘I/O
计算机的功能主要为:计算、存储和网络。而用于计算的数据以及计算后的结果很大一部分都需要存储起来,以备后续再次使用。向磁盘中存储和读取的过程叫磁盘 I/O。磁盘的读取方式和速度会严重影响到整个业务的计算性能。

下面我们简单了解一下磁盘是如何工作的。

磁盘大概长这个样子:





磁盘主要由磁盘盘片、传动手臂、读写磁头和马达组成。

为了存储容量,主轴像穿糖葫芦一样把多个磁盘片组成一个阵列。通过马达驱动主轴转动以及传动手臂移动,使读写磁头在磁盘片上读写数据。大概如下:





磁盘片由很多半径不等的同心圆组成,这些圆被称为磁道,数据就是写在这些磁道上。





每个磁道又划分成块称为扇区。





如果磁盘是一记事本,那么一张磁盘片就是本子的一页纸,而主轴就是本子的装订线;磁道就是纸页的行,而扇区可以看作是很宽的列。





如果在磁盘中存储一首诗,想象中大概这个样子。





磁盘的读 I/O 操作,需要找到数据所在的磁盘片,以及对应的磁道和扇区。这些操作类似于从一本书中找到数据所在的页,行,列。

因为每个磁盘片都对应一个磁头,所以性能的关键就在于找行和列,即寻道和磁盘旋转。寻道即通过磁头找到数据所在的磁道,相当于换行到数据所在行。由于磁头只能水平移动,即只能换行寻道,无法在指定磁道上移动,因此需要磁盘高速旋转移动到指定扇区,类似写春联时,笔不动,纸动。





综上所述,磁盘的读写是通过机械运动来定位数据所在位置,而 cpu 是通过电信号进行数字运算。粗略的认为,机械查询数据,与光速处理数据的性能完全不是在一个量级,总之一句话就是磁盘处理太慢太慢了。

虽然磁盘处理数据太慢了,但是它是目前相对廉价且稳定的存储设备,所以又不能舍弃不用,但大致可以通过以下方法进行优化。

  • 尽量减少 I/O 次数,比如可以使用缓存;
  • 每次 I/O 尽量获取更多的数据;
  • 每次 I/O 尽量获取有用的数据,当然相应的也间接减少总 I/O 次数;


多叉树之 B+tree
做为数据库的索引,无论用什么样的数据结构维护,这些数据最终都会存储到磁盘中。

鉴于磁盘 I/O 的性能问题,以及每次 I/O 获取数据量上限所限,提高索引本身 I/O 的方法最好是,减少 I/O 次数和每次获取有用的数据。

B-tree 已经大大改进了树家族的性能,它把多个数据集中存储在一个节点中,本身就可能减少了 I/O 次数或者寻道次数。

但是仍然有一个致命的缺陷,那就是它的索引数据与业务绑定在一块,而业务数据的大小很有可能远远超过了索引数据,这会大大减小一次 I/O 有用数据的获取,间接的增加 I/O 次数去获取有用的索引数据。

因为业务数据才是我们查询最终的目的,但是它又是在「二分」查找中途过程无用的数据,因此,如果只把业务数据存储在最终查询到的那个节点是不是就可以了?

理想很丰满,现实很骨瘦如柴,谁知道哪个节点就是最终要查询的节点呢?

B+tree 横空出世,B+ 树就是为了拆分索引数据与业务数据的平衡多叉树。





B+ 树中,非叶子节点只保存索引数据,叶子节点保存索引数据与业务数据。这样即保证了叶子节点的简约干净,数据量大大减小,又保证了最终能查到对应的业务数。既提高了单次 I/O 数据的有效性,又减少了 I/O 次数,还实现了业务。

但是,在数据中索引与数据是分离的,不像示例那样的?

如图:我们只需要把真实的业务数据,换成数据所在地址就可以了,此时,业务数据所在的地址在 B+ 树中充当业务数据。







总结
  • 数据存储在磁盘( SSD 跟 CPU 性能也不在一个量级),而磁盘处理数据很慢;
  • 提高磁盘性能主要通过减少 I/O 次数,以及单次 I/O 有效数据量;
  • 索引通过多阶(一个节点保存多个数据,指向多个子节点)使树的结构更矮胖,从而减少 I/O 次数;
  • 索引通过 B+ 树,把业务数据与索引数据分离,来提高单次 I/O 有效数据量,从而减少 I/O 次数;
  • 索引通过树数据的有序和「二分查找」(多阶树可以假设为多分查找),大大缩小查询范围;
  • 索引针对的是单个字段或部分字段,数据量本身比一条记录的数据量要少的多,这样即使通过扫描的方式查询索引也比扫描数据库表本身快的多;


知识扩展
树的结构最大的优点就是查询性能高,因此所有需要提高查询性能的都可以考虑树。

而现实中也确实有这样的例子,比如:

  • HashMap 中的数据冲突时,链表转化成红黑树;
  • 数据库索引使用的 B+ 树;
  • 搜索引擎倒排索引使用的字典树;
以上只是浅尝辄止、点到为止的描述了数据库使用 B+ 树索引为什么能提高查询性能原因及简单过程。

并没有深入各种数据结构的细节,也未提及其它索引类型和索引的具体存储格式,目的仅仅是,为了让大家对索引有一个感性的认识。

 

感谢阅读
码邦主:程序员必备计算机基础知识总结电子书下载

码邦主:程序员必备 Java 核心知识点整理

Java学习书籍整理、Web前后端、各种框架、数据库及IT行业等类型电子书
 


 

有完整的Java初级,高级对应的学习路线和资料!专注于java开发。分享java基础、原理性知识、JavaWeb实战、spring全家桶、设计模式、分布式及面试资料、开源项目,助力开发者成长!


欢迎关注微信公众号:码邦主


 

原作者:木叶潇潇

链接:https://mp.weixin.qq.com/s/KxSlNnXQSaMemYdqyRCMOg

来源:小林coding /侵删


 



 
 








原文转载:http://www.shaoqun.com/a/494353.html

c2c模式:https://www.ikjzd.com/w/1576

易佰:https://www.ikjzd.com/w/2023

亿恩:https://www.ikjzd.com/w/1461


前言昨天,有个女孩子问我提高数据库查询性能有什么立竿见影的好方法?这简直是一道送分题,我自豪且略带鄙夷的说,当然是加「索引」了。她又不紧不慢的问,索引为什么就能提高查询性能。这还用问,索引就像一本书的目录,用目录查当然很快。她失望地摇了摇头,你说的只是一个类比,可为什么通过目录就能提高查询速度呢。唉,对啊,通过书目可以快速查询,这只是一个现象,真正原因到底是什么呢。那女孩看着诧异且表情僵硬的我,满
文化衫事件:文化衫事件
mil:mil
贵州旅游景点推荐——必去五大旅游景点:贵州旅游景点推荐——必去五大旅游景点
厦门皓月园门票是多少?:厦门皓月园门票是多少?
清远金龙洞地下河怎么走?:清远金龙洞地下河怎么走?

记录idea自定义快捷键习惯

ALT + /

idea 改成

eclipse 快捷键设置后需要设置一下操作
在这里插入图片描述
settings ->kemymap 搜索completion,修改basic 快捷键为alt+/ ;cyclic expand word 去掉快捷键,怎么设置右键add 或者remove

在这里插入图片描述

全局替换

搜索 replace in path 修改为ctrl +shift+L

在这里插入图片描述

格式化代码

原来的格式化代码快捷键应该是Ctrl+alt+L
同样搜索Reformat code 修改为ctrl+shidt+f在这里插入图片描述









原文转载:http://www.shaoqun.com/a/494352.html

usps国际快递查询:https://www.ikjzd.com/w/513

rfq:https://www.ikjzd.com/w/251

联动优势:https://www.ikjzd.com/w/1921


ALT+/idea改成eclipse快捷键设置后需要设置一下操作settings->kemymap搜索completion,修改basic快捷键为alt+/;cyclicexpandword去掉快捷键,怎么设置右键add或者remove全局替换搜索replaceinpath修改为ctrl+shift+L格式化代码原来的格式化代码快捷键应该是Ctrl+alt+L同样搜索Reformatcode
卖家精灵:卖家精灵
retriever:retriever
广州正佳极地海洋世界停车方便吗?正佳广场海洋馆停车收费吗?:广州正佳极地海洋世界停车方便吗?正佳广场海洋馆停车收费吗?
深圳东部华侨城黑森林酒店怎么样?:深圳东部华侨城黑森林酒店怎么样?
清远三八节女士免费景点?三八节清远去哪里玩免费?:清远三八节女士免费景点?三八节清远去哪里玩免费?

馋哭!张嘉益、闫妮组cp,电视剧开播第一天,网友沸腾了!

原标题:馋哭!张嘉益、闫妮组cp,电视剧开播第一天,网友沸腾了!

人啊,就是你给我装台,我给你装台。

——《装台》

↑↑ 开启元气满满的一天 ↑↑

早!上!好!

由中央电视台、陕西省委宣传部

西安兆麦影视传媒有限公司

西安电影制片厂有限公司

西安曲江影视投资(集团)有限公司

联合出品的现实主义题材电视剧

《装台》

昨晚,CCTV-1 黄金档开播!

你追了吗?

这是"陕西人写的陕西故事"

也是"西安人演的西安烟火气"。

闫妮和张嘉益的第四次合作

没想到,画风斗转!

《一仆二主》里的老板唐红

《少年派》里的强势母亲

却变成了《装台》里

低眉顺目的蔡素芬?

网友纷纷笑问:

"你俩拿错剧本了吧?"

张嘉益和闫妮再次组CP

中年追爱

....

一言难尽

电视剧中的男女主人公是由张嘉益饰演的刁顺子与闫妮饰演的蔡素芬,因为偶然的相遇,凑在一起,过起了平凡人的小日子。只不过刁顺子有一个已经成年的女儿菊花,成为两个中年人第二次婚姻中的巨大障碍。刁顺子又是一个憨中带怂的爸爸,对于女儿也是敢怒不敢言,后面要靠斗智斗勇和女儿抗争,充满了看点。

闫妮扮演蔡素芬

首集开播,顺子哥张嘉益就收获了"干饭人"称号。 腊牛肉夹馍、胡辣汤......这是电视剧?这是妥妥是陕西美食大赏!

这个蹲,这个碗,这个辣子

这个口音

确认过眼神,是我们陕西的人!

这是电视剧?!

这分明是西安的宣传片!

一直以来,人们为舞台上的歌舞戏剧鼓掌喝彩,却鲜有人留意过搭建"舞台"的人。《装台》的故事镜头对准了一群舞台搭建者的真实生活,以张嘉益饰演的刁顺子的视角出发,讲述一群普通小人物生活中的酸甜苦辣。当朴素憨厚的刁顺子遇上羞答答的蔡素芬,家长里短、鸡飞狗跳,尽显人间烟火气,装台人将平凡的精彩人生照向现实,温暖而珍贵。

刁顺子和蔡素芬"半路夫妻"以及家长里短的故事,是社会中存在的真实情景。装台团队朴实地道的处事风格是每一位现实劳动者最佳的映射。平凡的工作和简单的生活中也饱含精彩,奋斗中的每一位平凡人,都在苦难中积极向上的抓紧每一次机会,这也是《装台》里为什么每一位小角色都带有坚韧和责任感。因为他们就是社会中你我的真实缩影,渺小却努力,扛起责任和担当,在生活中笑泪相交,身上散发着时代进步的光芒。

小编友情提醒

看这个剧要有心理准备

笑点不断泪点不断陕西话和美食不断

顺子哥亲切的好像大舅

素芬姐朴实可爱太讨人喜欢

咱陕西人演的陕西电视剧

今天继续追!

央视一套黄金时段

给顺子哥奋力追爱打call!

刚刚,陕西一市发布最新人事任免,涉及2名副市长

咸阳市政府要西迁?刚刚,官方回应!

最新!恢复扫码测温进小区!

紧急寻人!陕西榆林流入无症状感染者接触货物!这些人速速进行核酸检测!

综合:芒果TV 电视剧装台微博 cctv电视剧 陕视新闻

编辑:王玥瑶 刘璐

审核: 邱陆 杨静返回搜狐,查看更多

责任编辑:

原文转载:http://yl.shaoqun.com/a/209044.html

upc:https://www.ikjzd.com/w/111

telegram:https://www.ikjzd.com/w/1734

c88是什么:https://www.ikjzd.com/w/1017.html


原标题:馋哭!张嘉益、闫妮组cp,电视剧开播第一天,网友沸腾了!人啊,就是你给我装台,我给你装台。——《装台》↑↑开启元气满满的一天↑↑早!上!好!由中央电视台、陕西省委宣传部西安兆麦影视传媒有限公司西安电影制片厂有限公司西安曲江影视投资(集团)有限公司等联合出品的现实主义题材电视剧《装台》昨晚,CCTV-1黄金档开播!你追了吗?这是"陕西人写的陕西故事"也是"西安人演的西安烟火气"。闫妮和张嘉益
prime day:prime day
etsy:etsy
广州十一游玩攻略:广州十一游玩攻略
口述:得知我没车 美女拒绝我送她回家:口述:得知我没车 美女拒绝我送她回家
峨眉山可以露营吗 :峨眉山可以露营吗