粉丝2205获赞6893

数据库在你工作当中应用吧?就是你主要用它来做什么?做一些用户信息后台数据的一些经商改查的一个操作。比如我之前做的那个业主信息管理的那个模块,就会用到数据库的语句去做这个操作。 物业项目里面有很多数据是真山改茶,但是这个真山改茶是你通过界面去真山改茶,并不是你自己通过数据库来真山改茶, 能理解吧?所以你通过界面去做镇上改查的话,我可能需要去查库,确认一下这个数据到底有没有增加成功,对吧?但是我其实在做功能测试的时候,在界面呢,我们确认的也不一定非得查数据库,可以举个具体例子,比如说我会用到这个茶, 那么这个查体现在哪方面呢?呃,你说的业主管理你比较熟,对吧?那你在测这个业主管理的时候,有查看那个业主数据比较多的时候,那这个数据到底完不完整?在页面上在后台显示的完不完整,我可能会需要去查一下库,对比一下他的数据是不是有这么多条数据。

什么是数据库?简单来说,数据库就是数据的仓库,这么说对于初学者来说会有些疑惑,比如每个超市都有收货价,收货价是用来干啥的呢? 是用来存放不同食品相同的。数据库就是存放数据的地方,因为有了数据库,我们可以直接查询数据, 比如查看自己银行卡的余额,在网络上查找资料,就是从数据库读取数据后给你的。这时候很多人就会好奇,数据存放到 u 盘里就可以,为啥还要搞个数据库呢? u 盘你使用了,其他人就用不了。数据库就好比网盘, 可以很多人同时访问里面的数据,并且数据库可以比 u 盘存放更多的数据。数据库是长期存储在计算机内部,有结构的,大量的共享的数据集合, 有结构,因为数据库不仅存放数据,而且存放的数据还是有类型的。什么是类型?比如一二三四是整数类型, abcd 是字符类型等等。大量大多数据库都是文件系统,也就是说存储在数据库中的数据, 实际上是存储在词盘上的文件中,共享多个应用程序,比如小程序 ipad 可以通过数据库实现数据共享。有哪些不理解的,欢迎评论区留言。

作为自然语言处理 nlp 领域的基础性技术,中文分词系统在向量数据库的构建与优化中扮演着直观重要的角色,其核心价值主要体现在以下几个方面, 语义单元的精准界定。向量数据库的核心在于将非结构化数据映设为高维向量,从而实现基于语义相似度的剪缩。中文分词系统能够将连续的汉字序列切分为具有独立于义的词汇单元,这一过程直接决定了向量化的原子单位。 精准的分词能够确保苹果手机与苹果水果被正确区分,从而在向量空间中映射到不同的区域,避免语义混淆。 提升向量表示的纯净度和准确性,提升向量化效率与质量。在传统分词加向量的技术路线中,高质量的分词是生成优质词向量的前提。准确的分词能够减少语义噪声,使词向量更聚焦于核心含义。 这些高质量的词向量在通过加权、句类等方式合成句向量或文档向量,能够显著提升向量空间中语义关系的清晰度,进而优化后续的相似性、剪辑和句类分析效果, 增强领域适应性与专业性。通用的向量化模型在处理特定领域的专业文本时, 往往因素与识别不准而效果欠佳。通过引入领域自定义词典和规则的中文分词系统, 可以强制保留关键绩效指标、 kpi、 三百六十度评估等专业术语的完整性, 防止其被错误切分为关键绩效指标,从而确保领域知识被准确编码进向量,大幅提升向量数据库在垂直领域的专业性和实用性。 优化锁影构建与解锁效率在某些混合架构的向量数据库中,分词结果可被用于构建倒排锁影等辅助结构,实现关键词匹配加向量相似度的混合解锁。 这种机制能够在进行耗时的向量计算前,先通过轻量级的关键词过滤多效候选集,从而大幅提高大规模数据下的解锁效率。 目前国内中文分词工具生态繁荣,百花齐放,不同工具在设计理念、技术架构和适用场景上各有侧重。接把分词基本作为国内使用最广泛的开源分词工具, 以其简单易用、社区活跃著称。它支持精确模式、全模式和搜索引擎模式,并允许用户方便的添加自定义词典,在快速开发和原型验证中占据主导地位。 panlp 由言辞所开发的全能型 nlp 工具包,其分词模块集成了从传统算法到深度学习的多种先进模型,并支持多余种处理。 panlp 在 分词准确率和功能全面性上表现优异,常被用于对效果要求较高的复杂 nlp 任务中。 初吻清华中文词法分析器由清华大学自然语言处理与社会人文计算实验室研发,特点是高效且兼具优秀的分词和词性标注能力, 适合需要同时进行多种基础 nlp 分 析的场景。括号中文词系统由吴广印研究员组织开发,使用了多年积累的科技词系统、中文同义词词系统和机构地名知识库开发,实现了中文分词 主题发现、实体识别等一体化服务功能,可直接用于向量数据库调用,以 less for l 协议对外提供接口服务,主要是用科技信息资源的预处理。 凸塞由北京大学团队开发,专注于多领域分词,支持用户在特定领域数据上训练自己的模型,因此在需要高精度领域适配的项目中备受青睐。 尽管中文分词技术已取得长足进步,但在与向量数据库等前沿 ai 系统深度融合的背景下,仍面临一系列前瞻性挑战。动态语境下的真奇异消解 如何让系统像人一样根据极其微妙的上下文甚至背景知识准确判断真奇异句子的正确切分?例如乒乓球拍卖完了仍是巨大的挑战。未来需要探索将世界知识和常识推理更深度的融入分词模型。 持续演化的语言适应性网络新词、流行语层出不穷,且生命周期各异,构建能够实时获进、实时的自动发现、识别并纳入新词的自适应分词系统,是保持向量数据库语义新鲜度的关键。 端到端学习与分词边界的博弈随着 bird 等预训练模型的兴起,其内部的子词 subword 切分机制在一定程度上绕过了传统中文分词。未来的一个核心问题是,在向量化的端到端流程中显示着高质量的传统分词是会逐渐被取代, 还是会以一种新的形式,如作为提示约束和厚处理,与深度学习模型共存并发挥互补优势。 多力度分词的统一表示中文词语的边界本就具有模糊性,不同任务可能需要不同力度的切分。如何在同一向量空间中有效的表示和处理这种多力度的语义信息,实现一词多切的灵活表达,是一个极具前瞻性的研究方向。 综上所述,中文分词系统不仅是向量数据库的基石,更是其智能化水平的放大器。未来,随着深度学习与知识图谱等技术的进一步融合, 中文分词技术必将向着更智能、更动态、更深度融合的方向引进。该视频由老吴工作室设计制作,未经授权不得复制、编辑和传播。

circle 中的函数总共就三种,分别是聚合函数、标量函数和窗口函数。聚合函数常用的只有五个,分别是加总、求平均、求最大值、求最小值和计数。它有两种用法,第一种是单独使用,它会基于整个表对于某一列进行数值的计算。比如说我们这个例子就是对于这个列求一下平均值。 这种用法跟 java 语句进行配合,它会根据你指定的分组对于这个数值进行计算。第二类函数叫做标量函数,它不会改变数据返回有多少含的数量,而会对于某一列做一些特定的计算。我们 这边用到了两个函数,一个是 up, 一个是 k, k 的 作用是对于这个列取大写字母,然后 k, k 的 话是把里面这一个字母串进行拼接,最后得到第二列这里的结果。 在返回的结果里面,它不会对数据进行聚合。也就是说 customer 里面原来有多少含,返回的还是多少含,不会增加,也不会减少。这里需要提一下,不同数据库用到的标量函数会有很大的差别, my circle, circle over 和 p g 基本上是不通用的,所以我不建议去花很多时间去学函数,因为它们差别真的非常大。 你用的时候去看一下文档,或者问一下 ai, 这样比较好一点。最后一部分叫窗口函数,它处在聚合函数和标量函数之间,既可以包含明细的细节,也可以包含聚合后的结果。比如说这就是一个简单例子,前面三列的数据来自于电影这个表格, 然后第四列做了一个开窗的预算,对于第三列这个数据进行了一个加总,然后我们没有指定加总的范围,它默认情况下是对于整个列进行加总。对于第四列这里返回的结果,它每一个行都是第三列数值的全表加总,你可以通过指定 partition by 的 方式来修改它加总的维度,比如说我们在这里 t 恤 by, 然后根据 rating 来进行加总。这样运行一下,这边 g 的 话,它的加总情况是五百一十四,然后这边的 p g 它加总的情况是五百九十二,所以根据不同的加总的维度,它会得到不一样的结果。 所以窗口函数既可以保留具体的数据明细,也可以保留加总后的结果,它还可以控制数据加总的范围,然后做排名, 在实际分析的工作中是非常有用。我总结一下,搜索中只有三类函数,第一类是聚合函数,总共只有五个,在所有数据库中都是通用的。第二类是标量函数,数量非常多,那比较遗憾的是,不同数据库之间是不通用的。第三类是窗口函数,它可以同时保留数据明细和聚合后的结果,在大部分数据库中都是通用的。

第十五题,关于数据库的操作型处理的描述,不正确的是我们看到数据库的操作型一定要想到 o、 l、 t、 p, 如果是数据仓库呢, 就一定要想到 olap 连击分析处理,我们来看一下不正确的是什么。第一个,对连击的数据库进行日常的操作,那么这个没问题,操作,对,操作数据库日常的操作就是我们数据库的基本的一个功能,大部分呢是真三 改查,这是我们数据库里面最多用的增加数据、删除数据,修改数据、查询数据,好。第二个是什么?是对数据库记录中的查询和修改,哎,我们刚刚讲了查询和修改,如果他改 变成增加和删除也是没有问题的。好。第三个用来提供决策分析,我们前面讲了,这个很明显就不对,为什么?因为提供决策分析不是数据库的一个功能,而是数据仓库的一个功能。第四个, 强调处理速度的一个响应时间,为什么我们增加速度要不要快,删除数据要不要快?包括我们修改 查询都要快,我们不可能增加一条数据,等个一两天才能够把这个数据添加上去,所以在传统数据库里面响应时间, 真三改查他的日常操作,这个都是操作型数据库的一些基本特征,所以这道题我们选择 c, 这一分就送给你了,关注我,轻松搞定系统基层。

哎你好。哎你好,秘书。哎,坐。呃简单地先做一下自我介绍吧。好的 呃,你可以简单地说一下什么是堡垒机以及堡垒机它在我们运维的日常工作中的核心作用具体是什么? 呃面试官你好。嗯我认为堡垒机其实就是运维和开发人员啊,咱们访问服务器或者网络设备的一个统一的一个入口啊,以及一个安全的管控平台, 又怎么去理解的话就是它相当于咱们数据中心的一个安检门啊,不管我们是去登录线上的一个另一个服务器数据库 或者是我们的交换机呢,我们都不能够直接去连啊,必须通过咱们的堡垒机去认证授权之后才能够跳转过去操作啊。 然后堡垒机的话它不是不仅仅说是一个硬架儿啊,大多数的话是咱们的软件或者云服务的形式啊,部署在咱们公网或者咱们啊内网服务器之间的一道隔离屏障。 嗯他在运维工作里的核心作用呢我觉得主要有三点哦第一的话是集中的权限管控,因为咱们运维的人员很多,服务器也很多啊,不可能呢把所有的服务器的密码呢都发给每个人,那么堡垒机的话可以给不同的人啊配一些不同的操作权限。 第二点的话是一个操作审计的功能,因为所有的通过堡垒机的操作来,不管是你敲的每一条命令啊,就是咱们命令或者说改了一些数据库的配置啊,都可以被实施的记录下来形成一个日记啊,甚至说是录屏。 那么以后万一哪天线上出现问题了之后呢,我们也可以通过这些日记和录屏去进行溯源和追责啊,这个也是很多的,等等保了一个合规要求。 那么第三点就是阻断一些高危的一些操作啊,就是可以设置一些策略去拦截一些高危的命令,就相当于给咱们腹泻的加了一道安全锁。那么有些时候可能是一些误操作或者恶意操作的风险呢,就可以减少。好的, 你之前在上一家公司做过具体哪些项目可以说一下吗?运维测试开发相关的面试资料我都整理好了,留来份快递我发给你。

什么是 riders? 我们先来看一下 riders 这个词儿的意思啊,它是源于这三个单词的缩写 remote dictionary、 solar 远程字典服务器。 呃,为什么这么叫呢?是这样,就是他是一个独立的数据库的软件啊,所以他可以被独立的安装在一台服务器上,他可以远程操作,所以他是远程的。然后他是用剑直存主的形式啊,剑城存剑直存主是不是就像查字典一样,我们根据一个一个词去查这个词的解释。那我们的见就是根据一个关键字 k 查,他对应的只是歪柳,是不是就是这这个意思啊?所以呢,他叫远程字典服务器啊,他是一个基于内存的啊,当然是开源的数据库,然后通常的用作建筑存储, 然后缓存,或者是消息列队等等等等。然后如果你不知道什么是数据库,你去看我的一万小时计划十一那一期的视频。然后我们 来看一下什么叫做基于内存的数据库呢?是这样,瑞迪斯通常呢,将所有的数据都存在内存中。当然,嗯,不通常的情况下就是你有寻你内存吗?寻你内存本质上不在内存里对吧?但他也是内存, 他逻辑上也是内存啊。呃,然后当然呢,他他为了实实现持久化,他是这样,他是默认情况下是每隔两秒把这个数据也写入到硬盘来实现持久化。但是他写入到硬盘里的数据呢,仅仅仅仅是为了重新打开这个软件的时候把数据给加载回来,加载回内存。 为什么要这么做啊?是因为我们内存的速度是不是要比硬盘快一个数量挤压,这样做我们这个数据库的性能就会非常的 nice。 正因为他性能的非常的 nice, 他在这个 dbnjins 的里的排名,他也是连续好多年是这个兼职存储的第一名啊。最受欢迎最受欢迎的。咱们来看一 ridis 的发展减少一个意大利成全,叫做萨罗巴 toli。 三飞利普他发明了 redisa。 他最早的是用普通的原来的传统的数据库 做了一个实时的外部日制分析仪器啊。然后他对这个传统数据库的性能不是很满意,然后就开发了 redis。 不过要注意的是,二零二零年的六月,呃,他已经辞去了 reds 的这个维护者的身份啊。就就就是这样就没了。你明白了吗? fun channel。

今天我们不聊虚的理论,专门来拆解一个在生产环境里让大家又爱又恨的核心,组建 my circle 的 锁机制。 大家先试想一下,如果没有锁,我们的数据库会变成什么样?两个字,混沌。比如脏读、不可重复读、幻读。甚至最严重的库存超卖, 明明只剩一件商品,两个用户同时下单都成功了,这就麻烦了。所以所的核心作用就一个,本视频完整笔记,我都整理进了两百万字的 java 加 ai 面试提库里了, 里面包含了主流技术站与几十个项目场景题,还有各个工作年限的简历模板,以及 java 和 ai 大 模型的学习路线。 在病发的环境下,给资源的访问排个序,既要保证数据安全,又要尽量跑得快。 那 my circle 里到底有哪些锁?如果要分类,最直观的标准就是力度。大家想,你是把整个小区的大门锁上安全, 还是只锁你自己家的防盗门更合适?这就是力度的权衡,力度越小,病发度越高,但管理的开销也越大。我们先看第一种力度最大的 全局锁。这就好比把整个数据库实体的大门焊死了,命令是 flash tables with red lock, 一旦加上整个库,就只读了增删改,全部堵塞。这玩意有啥用?主要是做全库逻辑备份。但是这里有个生产环境的大坑, 如果你在主库上加全局锁,业务直接停板,在存库加主存同步会延迟,怎么优化? 只要咱们用的是 uno db 引擎,备份时一定要加上 single transaction 这个参数,它能利用 m v c c 机制,在不加锁的情况下搞定一致性备份。大家记住了,能不用全局锁,就别用 第二种,力度中等的表级锁。这里面有两个狠角色,一个是大家熟悉的 lock tables 手动加读锁或斜锁。 另一个是大家容易忽略的隐形杀手, mdl 锁,也就是原数据库。为什么叫它杀手?因为它是自动加的。当你查询表的时候加 mdl 读锁,当你修改表结构,比如加个字段的时候,加 mdl 写锁。 恐怖的场景是这样的,一个长事物正在查询持有毒锁,你这个时候去改表结构,请求鞋锁被堵塞,紧接着后面所有进来的查询请求毒锁都会被那个被堵塞的鞋锁挡住, 瞬间数据库连接池打满,业务直接血崩。所以做 ddl 变更一定要避开业务高峰期。好,前菜吃完了,现在上主菜 indl 的 行级锁, 这是我们最常用的,也是病发之王。行锁分两类,大家都能读的叫共享锁, s 锁,我想改谁也别动的,叫排他锁, x 锁。但是重点来了,大家一定要把这句话记在小本本上。行锁是完全依赖所以实现的。 如果你的 circle 语句里未有条件,没有走缩影,或者缩影失效了会发生什么? my circle 会被迫进行全表扫描,然后把整张表的所有行都锁住, 这时候行锁直接退化成表锁,并发性能归零。这是面试和实战中最高频的坑, 千万别踩。那行锁具体锁住了什么呢?除了锁记录本身,还有个东西叫间隙。这就引出了行锁的三种算法。第一种,记录锁 record lock, 最简单的 锁住锁影上的一条记录。第二种,间隙锁 gap lock, 它锁的是锁影之间的空隙。为什么要锁空隙?为了解决幻读,比如我查 id 十到二十之间的数,为了防止别的事物突然插入一个 id 十五的数据, inodib 会把这个空隙锁死,谁也插不进来。第三种,零件锁 next key lock, 它是前两者的组合,锁住一个左开右闭的区间,这也是 inodib 默认的行锁算法。 这里有个口诀送给大家。唯一,所以等值查退化变成记录锁,普通,所以无论啥,全都加上零件锁。讲完了机制,我们要聊聊策略,悲观锁 vs 乐观锁,这其实是两种人生态度。 悲观所觉得总有刁民想害朕,操作前必须先独占资源,比如 for updates, 这适合写多读少、一致性要求极高的场景,比如银行转账。 乐观所觉得世界很美好,冲突很少见。它不加锁,而是在提交的时候校验一下版本号 version, 这适合读多写少的高吞吐场景,比如点赞浏览量。接下来还有一个幕后英雄要介绍,意向锁 intention lock。 很多同学不理解,既然有行锁了,为啥还要个意向锁?大家试想一下,如果事物 a 锁住了表里的一行,这时候事物 b 想给整张表加一个斜锁,事物 b 怎么知道表里有没有行锁?难道要便利全表几百万行去检查吗?效率太低了。 所以意向锁就是个信号灯。事物 a 锁行之前,先给表贴个意向锁标签, 事务 b 一 看表头有标签,就知道不能加表锁了。所以意向锁是为了解决表锁和行锁的冲突,检测效率问题的。好了,原理讲透了,如果线上真的出事了,比如死锁或堵塞,我们怎么排查? 我有三版斧教给大家。第一招,快速定位,执行 show process list, 看 state 栏,如果是 waiting for table metadata lock, 那 就是被 ddl 卡住了。 如果是 waiting for real lock, 那 就是行所竞争。第二招,死所分析,执行 show engine in db status, 找到 latest detected dialog 这一节, 他会明明白白告诉你谁锁了,谁构成了死锁还路。第三招,精准排查。如果你用的是 my circle 八点零,恭喜你直接查 performance schema data logs 这张表,锁的信息一目了然。最后我们总结一下生产环境的避坑心法, 第一,锁影为王, update 和 delete 必须走,所以避免全表锁。第二事务,瘦身事务里别搞什么 r p c 调用,发邮件事务越短,锁持有时间越短。第三,顺序一致, 如果你要更新多行,所有事物都按相同的顺序,比如按 id 从小到大去更新,这样能彻底消除死锁环路。第四,在线变更,利用好 mycircle 八点零的 online ddl 特性,减少锁阻塞。 好了,关于 mycleo 锁的实战内容咱们今天就讲到这里,锁的使用没有绝对的最优,只有最适合业务的选择。希望大家下去结合自己的项目多思考,大家还有什么问题可以评论去聊聊。我是 fox, 关注我,技术面试不迷路!