暂时未有相关云产品技术能力~
暂无个人介绍
sphinx是不支持中文分词的,所以,百度上给的大多数的结果是基于sphinx内核开发的coreseek+mmseg分词的一套组合来实现中文分词+全文检索。
Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用 程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL 也设计了一个存储引擎插件。
索引合并是mysql底层为我们提供的智能算法。了解索引合并的算法,有助于我们更好的创建索引。 索引合并是通过多个range类型的扫描并且合并它们的结果集来检索行的。仅合并来自单个表的索引扫描,而不是跨多个表的索引扫描。合并会产生底层扫描的三种形式:unions(合并)、intersections(交集)、unions-of-intersections(先取交集再合并)。
全文索引(FULLTEXT ):可用于 MyISAM 表,mysql5.6之后也可用于innodb表, 用于在一篇文章中,检索文本信息的, 针对较大的数据,生成全文索引很耗时和空间。
唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引(PRIMARY):它是一种特殊的唯一索引,不允许有空值。 主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。
联合(组合)索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。
我们常用的索引数据结构比较多的是B+TREE。 还有另一种索引数据结构是hash,但是innoDB、mysiam数据引擎不支持hash数据结构。
Mysql中常用的两个存储引擎innodb和mysiam的索引是不同的。 聚集索引就是以主键创建的索引 非聚集索引就是除了主键以外的索引。非聚集索引也叫做二级索引,不用纠结那么多名词,将其等价就行了。非聚集索引在建立的时候也未必是单列的,可以多个列来创建索引。
索引本质上是一种数据结构,让我们在查询数据的时候尽量减少磁盘I/O。 前边大概看了索引的原理。数据库的复杂性,以及读取磁盘时,磁盘I/O等。任何一种数据结构都不是凭空产生的,一定会有它的背景和使用场景,我们现在总结一下,我们需要这种数据结构能够做些什么,其实很简单,那就是:每次查找数据时把磁盘IO次数控制在一个很小的数量级,最好是常数数量级。
索引在MySQL中也叫做“键”或者"key"(primary key,unique key,还有一个index key),是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要,减少io次数,加速查询。 索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。 索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。
抽象工厂模式:提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们具体的类。
观察者模式(Observer Pattern)是设计模式中行为模式的一种,它解决了上述具有一对多依赖关系的对象的重用问题。此模式的参与者分为两大类,一类是被观察的目标,另一类是观察该目标的观察者们。 正因为该模式是基于“一对多”的关系,所以该模式一般是应用于由一个目标对象和N个观察者对象组成(当然也可以扩展为有多个目标对象,但我们现在只讨论前者)的场合。 当目标对象的状态发生改变或做出某种行为时,正在观察该目标对象的观察者们将自动地、连锁地作出相应的响应行为。
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。
迪米特(最少知识)法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
原型模式:就是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。
工厂模式:定义一个用于创建对象的接口,让子类来决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。
代理模式:为其他对象提供一种代理以控制对这个对象的访问。 其通用设计图如下图所示:精髓是RealSubject类和Proxy类都实现Subject,使用Proxy类来限制对RealSubject类的访问
装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。 四个主要角色分别为: 抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。 具体构件(ConCreteComponent)角色:定义一个将要接受附加责任的类。 装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。 具体装饰(ConcreteDecorator)角色:负责给构件对象“贴上”附加的责任。
里氏替换原则,为继承定义规范。 里氏替换原则有如下特点:代码共享,减少创建类的工作量、提高代码的重用性、提高代码的可扩展性、提高产品代码的开放性、继承侵入性 只要继承,必须拥有父类的内容、降低代码的灵活性,子类必须拥有父类的属性和方法、增强耦合性。
依赖倒置原则的包含如下的三层含义:高层模块不应该依赖低层模块,两者都应该依赖其抽象、 抽象不应该依赖细节、 细节应该依赖抽象。
开放封闭原则:软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。 也就是如果需求发生变化导致程序中多个依赖模块都发生了级联的改动,就说明这个程序是有问题的,程序变得相对脆弱、无法重用。开放封闭原则就相对的解决了这个问题,它强调的是你设计的模块应该从不改变(绝对不改变是不可能的,只能相对少改动)。当需求变化时,你可以通过添加新的代码来扩展这个模块的行为,而不去更改那些已经存在的可以工作的代码。
单一职责原则:官方给的说法是,就一个类而言,应该仅有一个因其他变化的原因。 说白了就是,一个类只负责一项职责。 最简单也是最难的原则。难处在于对职责进行划分。单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可度量的,因项目而异,因环境而异。 软件设计真正要做的内容,就是发现职责并把那些职责互相分离。单一职责原则可以使类的复杂度降低,实现什么职责都有清晰明确的定义;类的可读性提高,复杂度降低;可读性提高了,代码就更容易维护;变更(需求是肯定会变)引起的风险(包括测试的难度,以及需要测试的范围)降低。
策略模式:定义了算法家族,分别封装起来,让其之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
应用场景:当你不确定,有多少种操作的时候,例如:计算器中的 + - * / 我们可以使用简单工厂模式。 我们就以上边说过的加减乘除运算举例:建立一个控制台应用,输入两个数字和一个运算符,得到结果。
我这里计划做一个即时聊天的小功能,计划是在一个抽屉组件中实现这个功能。
上一篇中介绍了如何使用onclick为动态添加的dom元素绑定事件。 我现在就可以自定义大图组件了。 为ueditor编辑的html添加onclick这个步骤,我是在后端做的,后端返回到前端的值,就是已经拼装好的html。
怎么在页面加载完成之后给html绑定事件呢? Jquery有$.on方法,但是,我不想再vue里边使用jquery。 哎呀,迷糊了,原生javascript有onclick呀。
项目中需要使用到文件上传。我这里自己定义了一个上传文件的组件 支持显示上传进度显示(我这里显示的是真实的上传进度,当然,这个可以根据你自己的需求修改)。 支持多文件上传。
项目中需要使用到wangeditor,这里封装一个自定义组件,便于后期使用。 首先,官方文档: www.wangeditor.com/
接着自定义组件,这里是我自定义的一个modal对话框组件。
这里自定义了几个alert弹窗组件:带有确定取消的alert弹窗组件、自定义alert,在自定义时间消失(仿layer)、自定义loading,在需要让他消失的时候让其消失 。
刚开始使用vue3写博客的时候,其相关配套的UI库并没有正式发布,但是我还要用,所以这里我自定义了一个分页组件。
懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载。 常用的懒加载方式有两种:即使用vue异步组件 和 ES中的import
新窗口打开标签页这个功能在html中还是很简单的。添加Target=”__blank”就好。
VUE不仅为我们提供了自定义组件,还提供了自定义指令。当然,这个玩意我在VUE2中是没有用到过的。 VUE3中我大概试一下这个自定义指令: 官方文档: vue3js.cn/docs/zh/gui…
压缩可以减小HTTP回复的大小,从而降低web服务器的响应时间。gzip是web服务器广泛使用的压缩工具,可以将HTTP回复的大小降低到原来的50%~30%。既提高了网页的加载速度,又可以节约服务器流量。 nginx在设置了gzip on 后就已经打开了gzip压缩功能,不过这时候nginx所使用的是动态压缩。在动态压缩的情况下nginx会自动的将文件压缩成.gz文件,这时候就算不配置vue也能达到一样的效果。
这部分内容比较少。其实更多的是参考一下vue-router4的官方文档就好。 但是,去掉#之后的路由在配合php框架使用的时候可能会有问题,就是这个链接不知道该去后端还是去前端的路由。
之前在使用VUE2的时候有用到VUEX状态管理系统。 我用的比较多的地方是子父组件传值,或者爷孙组件传值。就是共享状态。 VUEX在我这里的作用主要还是为了简化组件中的代码的复杂度。所用的值使用VUEX统一管理,对后期的维护以及扩展性都有很大的帮助。
axios 基础:从浏览器中创建XMLHttpRequest、从node.js发出http请求、支持Promise API、拦截请求和响应、转换请求和响应数据、取消请求、自动转换JSON数据、客户端支持防止CSRF/XSRF。
下边是我简单封装的几个cookie方法:Utils.ts 、调用。
computed属性,使用 getter 函数,并为从 getter 返回的值返回一个不变的响应式 ref 对象。 watch属性 与 vue2中的 this.$watch (以及相应的 watch 选项) 完全等效。
VUE2中可以将我们需要的插件挂载到VUE的主链上(配置成全局属性),然后通过this调用,但是在VUE3的ts中使用这样的配置方法的话是没法通过编译的,这个时候我们就需要拓展属性。
父传更深的后代 一般往深度层级传递值,有这两种方式: · provide / inject · vuex
在创建项目的时候,官方给出的页面,其实就给出了一个自定义的组件helloworld,里边包含了父传子传值,VUEX的使用,计算属性computed使用,方法的定义以及自定义组件的使用。 计算属性computed和方法的定义,这里使用的并不是VUE3的新语法。 在《VUE3(八)setup与ref函数》这篇中,setup的第二个参数context对象为我们提供了可触发事件emit,我们可以利用emit将子组件中的值传递给父组件。
Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。
上一部分中我们说到的ref只是作为单个变量的响应。 Vue3.0中还为我们提供了一个对象式响应的reactive函数 。 Reactive函数创建一个响应式对象。
Setup是VUE3.0中为我们新提供的的组件选项。 创建组件实例,然后初始化props,紧接着就调用setup函数,从生命周期钩子的视角来看,他在beforecreate之前调用。 setup()是函数,具有return,return函数中定义的变量,把其暴露给模板。
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15
发表了文章
2024-05-15