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

长沙 网站建设/宁波seo排名外包

长沙 网站建设,宁波seo排名外包,中央电视台新闻联播广告价格,能浏览的海外网站本文作者为 360 奇舞团前端工程师VSCode 是一款非常流行的代码编辑器。它支持多种编程语言,拥有丰富的插件和调试功能,不论是处理前端工程还是后端工程,VSCode 都能提供给开发者优秀的用户体验。鉴于 VSCode 超高的流行度,我会默认…

本文作者为 360 奇舞团前端工程师

VSCode 是一款非常流行的代码编辑器。它支持多种编程语言,拥有丰富的插件和调试功能,不论是处理前端工程还是后端工程,VSCode 都能提供给开发者优秀的用户体验。

鉴于 VSCode 超高的流行度,我会默认各位使用过 VSCode,这里就不对其再多做赘述,我会着重介绍标题里的另一位主角 —— Vim。

本文会从 Vim 的设计哲学和功能特性出发,让你了解 Vim 究竟有怎样的魅力,能在 30 多年里经久不衰,成为众多用户的编辑器第一选择。之后我会回到 VSCode,聊聊如何在 VSCode 中集成 Vim 的强大能力。最后,我会给出 Vim 的学习路线,怎么样,准备好开始这场 Vim 之旅了吗?

引子

不知道大家第一次听到用到 Vim 是什么时候?对我而言,第一次用还是在大学,当时需要在 Linux 上使用 Vim 编辑一些配置文件,那时我还是是一个纯小白,对 Vim 一无所知,只是知道 Vim 是一个编辑器,进去以后我既不知道怎么输入文字,也不知道如何退出(嘿,在 Vim 里 Crtl-C 都退不出去 😂)。后面即便了解了一些基础操作,也不由得感到写起东西来费时费力,心中暗想,在命令行里写东西真是太不方便了,对那个时代程序员的 Respect 油然而生。当时的我一定想不到,我有一天会用 Vim 写一篇安利 Vim 的文章。

好了,该给大家好好介绍下 Vim 这个「老家伙」了。

「老家伙」Vim

Vim 是一款由 Bram Moolenaar 开发的文本编辑器,Vim 的名字是 Vi IMproved 的缩写,意为改进的 Vi 编辑器,于 1991 年首次发布。Vim 只有几兆的体积,但是它有着强大的文本编辑功能和高度的可定制化,有着「编辑器之神」的美誉。

Vim 确实够老了,今年 2023,它已经 32 岁了,不过这家伙还是很有活力的,最新的 Vim 9 于 2022 发布,社区也涌现除了 Neovim 这样的分支版本。另外,Vim 的用户群体也在不断扩大,Vim 的用户群体中有很多大佬,比如说 Linux 的创始人 Linus Torvalds 就是 Vim 的忠实用户。

如果你用过一些支持插件的 IDE 或编辑器,那么你一定能找到一款 Vim 插件。这不但证明了 Vim 用户群体的庞大,也证明了 Vim 的经久不衰,即使到了其他编辑器中,Vim 的操作方式依旧让大家恋恋不舍。

「专注」--- Vim 的「模式」

Vim 的哲学之一是「快速编辑文本」,这是 Vim 的核心理念,也是 Vim 的设计目标。Vim 的设计者 Bram Moolenaar 一直坚持这个哲学,他认为 Vim 的设计应该是简单的且高效的。

Vim 包含多种模式,每种模式都有不同的用途,这些模式之间可以相互切换,这也是 Vim 的核心特性。Vim 的模式粗略分为以下几种:

  • Normal 模式:用于文本编辑

  • Insert 模式:用于文本输入

  • Visual 模式:用于文本选择

  • Command 模式:用于执行命令

「模式」是 Vim 中最重要的概念,Vim 为每种模式赋予了一种场景,根据不同的场景,切换到不同的模式,让我们能够专注于当前的任务,并迅速处理。有很多人说过 Vim 的编辑模式,容易让人进入「心流」的状态,想必这就是专注的魅力。


默认情况下,Vim 会进入 Normal 模式,这时可以使用 Vim 的各种命令,比如 hjkl 移动光标,dd 删除一行,u 撤销等等。

进入 Vim 后,默认为 Normal 模式。

622e8f7dc5a9bdbd244bd239702866a9.jpeg

按下 i 进入 Insert 模式,此时可以输入文本。

26f388e42bd241e62e2570af96962334.jpeg

此时按下 Esc 键,就可以回到 Normal 模式。

「简练」--- Vim 的语法

很多人都尝试要学习过 Vim,但是却被 Vim 那琳琅满目的快捷键所吓退,但是我想说它的快捷键并不复杂。

Vim 输入命令的方式非常不同,我们常规的命令就像是「和弦」,比如 CMD + C 复制,CMD + Shift + 4 截图,我们需要同时按下多个按键,这种方式叫做「组合键」。而 Vim 就像是在弹奏一段「旋律」,每个音符都是一个命令,我们按照顺序依次输入。

使用 Vim 有的时候就像是在跟它对话,你需要去学习它的语言,而不是死记硬背。人类的语言有很多语法,而 Vim 也不例外,我们来学习其中最重要的一种,这种语法足够覆盖大部分场景了:

verb + noun

或者说 「动词」+「名词」。我举一个例子,dw 这个命令可以理解为 delete wordd 是动词,w 是名词,d 是删除,w 是单词,所以 dw 就是删除单词。同理,ce 就是 change endc 是修改,e 是结尾,所以 ce 就是修改文本直到单词结尾。

⚠️ 这里用了不太准确的说法,旨在让大家理解 Vim 的语法,对于命令的准确解释下文会进一步介绍。

我们还可以加入数字,比如 2dwd2w 来执行 2 次 dw 命令,这样就可以删除两个单词了。

这太令人兴奋了,这意味着我们只要学会 Vim 这门语言的「单词」,我们就能随意排列组合,创造出无数的命令,和 Vim 畅快的对话。

用更 Vim 的话来说:

  • 动词:Operator(操作符)

  • 名词:

    • Motion(动作)

    • Text Object(文本对象)

接下来,我会分别介绍这三个基本概念。

「明了」--- Operator

Operator 是 Vim 负责编辑的命令,它们是一种动作,比如:

  • d Delete 删除

  • c Change 修改

  • y Yank 复制

  • p Put 粘贴

  • 反转大小写

而由于行操作太常见了,所以 Vim 设计了一些快捷指令:

  • dd 删除一行

  • yy 复制一行

  • cc 修改一行

  • D 删除到行尾

  • C 修改到行尾

「精准」--- Motion

Motion 是 Vim 负责移动光标的命令。最最基础的命令就是 hjkl,它们分别代表光标的上下左右移动:

c3540f42bd1f4a47b9ab97da153d663d.jpeg

但是这些命令只能移动一个字符,如果我们想要移动到指定的位置,就需要使用更加精准的命令了:

  • w Word 下一个 word 的开头

  • e End 下一个 word 的结尾

  • f{character} Find 到本行下一个指定字符

其中 word 在 Vim 中是一个特殊的概念,它是由字母、数字、下划线组成的字符串,比如 hello_worldhelloWorldhello123 都是 word。而我们平时编写代码时,经常会带上特殊符号,诸如 helloWorld()helloWorld!helloWorld?,这些都不是 word。不过 Vim 中存在 WORD 的概念,标记了由空格分割的字符串,Vim 为我们提供了 WE 这些命令,它们的作用和 we 命令一样,只是它们会跳过特殊符号。

986603c4e835b2bb7ddad94d6917f0ad.jpeg

很可惜,Vim 默认并不识别中文的词语,虽说可以通过一些 Vim 插件来实现,但是这并不在本文的讨论范围内。我们更多将 Vim 用作编程,所以中文支持其实我认为意义不大。

「魔法」--- Text Object

Text Object 标明了 Vim 中一个「文本组」。这是我最爱的 Vim 特性,没有之一,是真正让我爱上 Vim 的原因。

Text Object 有两种描述词:

  • i{object}:Inner Object,内部对象

  • a{object}:A Object,外部对象

对象类型就多了,比如:

  • w Word 单词

  • b Bracket 括号

  • B Big bracket 大括号

  • t Tag 标签

  • " 引号

比方说 (hello vim),就是一个文本对象:

  • ib:Inner bracket,内部括号,Vim 会选择 hello vim

  • ab:A bracket,外部括号,Vim 会选择 (hello vim)

在加上我们之前学到的 Operator,我们就可以做出很多有趣的事情了:

通过 dib 快速的删除括号中的内容,通过 dab 快速的删除括号以及括号中的内容:

7f3dbd5259f6274154df2e19a92c0496.gif

通过 ciB 快速删除大括号中的内容,来重写整个函数:

4628f1b7d0fe4118de8d8e7e3b348e3b.gif


通过 dit 快速删除 HTML 标签中的内容:

465455f40dc5324ecd92288d222ddc1b.gif

当你意识到 Vim 可以按一定语义来分割文本的时候,你就能深深体会到 Vim 的强大了。

回到 VSCode

嘿,Vim 说的够多了,不知道你是否能感受到 Vim 的魅力。Vim 不断成长,社区繁荣发展,Vim 可以通过各种插件强化自身,以至于不输市面上任何一款 IDE。

98ccfd1080169866e1e348b478a48970.png

SpaceVim

不过,我并不喜欢使用纯 Vim 开发。我也多次尝试过,但总是被各种插件问题搞的头大,最后我跟自己和解了,我爱 Vim 的编辑模式,但不得不说,VSCode 是目前来说我最喜欢的编辑器,它的许多功能早就成为我工作中必不可少的部分了(比如万能的 CMD + P CMD + Shift + P),其稳定的插件市场也让人安心。所以 VSCode + Vim 插件,对于我来说,就是双剑合璧!

如果你还不想成为一个 Vim 专家,想要开箱即用的使用 Vim 最核心的功能,那么我强烈推荐你使用 VSCodeVim 插件。

VSCodeVim 是一款为 VSCode 设计的 Vim 模拟器,它把 Vim 中的各种操作映射到 VSCode 中,让你可以在 VSCode 中使用 Vim 的编辑模式。虽说无法体验 Vim 的全部功能,但是它已经足够高效好用了。

进入 VSCode 插件市场,搜索 Vim,安装 Vim 插件即可。

8fa0f28e5259ab85325f135173bc7560.png

VSCodeVim

此时你进入 VSCode,打开一个文件,应该就能注意到那个在 Vim 中很常见的闪烁光标了,左下角也会有一个 -- NORMAL --,用来表示现在所处的模式。

好了,你可以开始使用 VSCodeVim 了,尝试下我们之前说的一些命令吧!

VSCodeVim 的功能扩充

VSCodeVim 是个有趣的插件,它不仅仅是一个 Vim 模拟器,它还扩充了原本的 Vim 的功能,将 VSCode 中的一些功能映射到了 Vim 中。

首先,它扩充了 Text Object:

  • e:Entire file,整个文件

  • q:Quote,引号(单引号、双引号、反引号)

  • a:Argument,参数

这个 daa 我真的是太常用了,能够快速的删除一个参数。

12ea7a1af0e5e28a44aeee0c34f99dbe.gif

daa

除此之外,还有一些其他的 Vim 操作,也都映射为了 VSCode 的功能,而且我觉得比原版更好用,比如:zc zo 可以开关折叠,zR zM 可以折叠所有或者展开所有。

43a2e9dbfb49aba9b62e76e5697cc157.gif

zczo

VSCodeVim 中的插件

Vim 插件是 Vim 的延伸,提供了相当强大的能力,一些常用 Vim 插件已经被 VSCodeVim 集成了,比如:「Vim Surround」。

它可以让你快速的给文本 添加 / 删除 / 修改 括号、引号、标签等等。

你可以通过检查一下 VSCode 配置文件,确认 Vim Surround 插件是开启的:

cc1c4aec8e84985ee4ebfa23284cbdf4.png

vim surround

比如一个相当常见的场景,如果你想要修改一个标签名,可以这样:

1280587c4caa4d6b86553cdb688eb617.gif

cstt

cs 意为 Change Surround,呼出 Vim Surround 插件,t 意为 Tag。cstt 合起来就是 Change Surround from Tag to Tag,也就是 「修改围绕的标签为另一个标签」。

如何自定义快捷键

Vim 的精髓之一就在于自定义快捷键,这样用户就能根据自己的习惯来使用 Vim,而不是被 Vim 的快捷键束缚住。VSCodeVim 当然也支持自定义快捷键,你可以在 VSCode 的设置中找到 vim.normalModeKeyBindingsvim.insertModeKeyBindings,分别对应 Vim 的 Normal 模式和 Insert 模式。

Vim 为了防止用户自定义快捷键和 Vim 内置快捷键冲突,会建议用户在自定义快捷键前面加上一个 「Leader Key」记作 <Leader>,默认为 \,你可以在 VSCode 的设置中找到 vim.leader 来修改它。

{"vim.leader": "<Space>","vim.normalModeKeyBindingsNonRecursive": [{"before": ["J"],"after": ["5", "j"]},{"before": ["K"],"after": ["5", "k"]},{"before": ["<Leader>", "j"],"after": ["J"]},]
}

比如我们可以进行如上的配置,使用 JK 来快速的上下移动。而为了避免和 Vim 内置快捷键 J 冲突,我们可以使用 <Leader> + j 来代替 J

除了用来覆盖 Vim 的快捷键,我们还可以来定义一些新的快捷键来调用 VSCode 的能力,比如可以添加下面的配置:

{"vim.normalModeKeyBindingsNonRecursive": [{"before": ["<Leader>", "p"],"commands": ["workbench.action.showCommands",]},]
}

这样我们就可以通过 <Leader> + p 来调出 VSCode 的命令面板了。

VSCode 的 commands 可以通过查看 VSCode 的快捷键设置 JSON 文件来查看。

何去何从

非常感谢你能看到这里,朋友。希望我能通过这篇文章让你一窥 Vim 的强大能力。我相信 Vim + VSCode 一定会给你带来很多惊喜。

受限于篇幅,本文只展现了 Vim 很小的一部分,还有很多很酷的东西我没有提到,诸如:

  • 查找替换

  • . 命令

  • 寄存器

  • Ex command

  • Vim script

  • NeoVim

  • 一系列 Vim 插件

但 VSCodeVim 并无法提供 Vim 全部的能力,所以你可以先学习 Vim 的基础操作,然后再使用 VSCodeVim 来提升你的开发效率,你可以选择性(着重看基础命令,跳过 Vim Script 和 插件开发)的看看下面这些资料,特别是 Boost Your Coding Fu With VSCode and Vim 这本书:

  1. vimtutor,在你安装好 Vim 之后,可以通过 vimtutor 命令来学习 Vim 的基础操作。

  2. Boost Your Coding Fu With VSCode and Vim,这是一本 VSCode + Vim 的书籍,它会带你一步步的使用 VSCode + Vim 来提升你的开发效率。

  3. Learn Vim (the Smart Way),这是一本非常好的 Vim 入门书籍,它会带你从 Vim 的基础操作,到 Vim 的高级操作,再到 Vim 的插件开发。

  4. Vim Adventures,这是一个非常有趣的 Vim 游戏,它会带你一步步的学习 Vim 的基础操作。

靡不有初,鲜克有终,Vim 有一定的学习曲线,希望你能给自己多一点时间去适应它,我相信 Vim 不会让你失望。

参考资料

  1. Vim Wiki

  2. Learn Vim (the Smart Way)

  3. Boost Your Coding Fu With VSCode and Vim

相关文章:

编辑器进化 VSCode + Vim

本文作者为 360 奇舞团前端工程师VSCode 是一款非常流行的代码编辑器。它支持多种编程语言&#xff0c;拥有丰富的插件和调试功能&#xff0c;不论是处理前端工程还是后端工程&#xff0c;VSCode 都能提供给开发者优秀的用户体验。鉴于 VSCode 超高的流行度&#xff0c;我会默认…...

LearnOpenGL-高级OpenGL-6.天空盒

本人刚学OpenGL不久且自学&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/LearnOpenGLProject 文章目录天空盒介绍如何采样OpenGL纹理目标例子0&#xff1a;天空盒效果环境映射反射例子1&#xff1a;Cube…...

Printk打印内核日志

一、背景 Linux 内核中提供了内核日志打印的工具printk。它的使用方式C语言中的printf是类似的。接下来我们介绍一下printk的使用方式。本文以打印Binder中的日志为例&#xff0c;进行演示。 printk的方法声明和日志级别binder驱动中增加 打印代码android系统中查看日志信息 …...

界面控件DevExpress WPF 202计划发布的新功能合集

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。本文将介绍今年DevExpr…...

Spring Cloud Alibaba 微服务2,注册中心演变 + Nacos注册中心与配置中心

目录专栏导读一、什么是Nacos&#xff1f;二、注册中心演变及其设计思想1、RestTemplate调用远程服务2、通过Nginx维护服务列表&#xff08;upStream&#xff09;3、通过Nacos实现注册中心4、心跳版Nacos三、Nacos Discovery四、Nacos核心功能1、服务注册2、服务心跳3、服务同步…...

Navicat 图形化界面工具

Navicat 介绍 Navicat是一套可创建多个连接的数据库管理工具&#xff0c;用以方便管理 MySQL、Oracle、SQL Server等不同类型的数据库 目录 Navicat 介绍 Navicat 下载 Navicat 安装 Navicat 使用 Navicat连接MySQL数据库 Navicat创建数据库和表 Navicat 下载 1、点击这…...

2023年网络安全比赛--attack(新)数据包分析中职组(超详细)

一、竞赛时间 180分钟 共计3小时 任务环境说明: 1 分析attack.pcapng数据包文件,通过分析数据包attack.pcapng找出恶意用户第一次访问HTTP服务的数据包是第几号,将该号数作为Flag值提交; 2.继续查看数据包文件attack.pcapng,分析出恶意用户扫描了哪些端口,将全部的端口号…...

C语言之extern(七十)

extern同一个文件&#xff1a;修饰变量声明#include <stdio.h>int add(){extern int x,y;return x y; }int main(){printf("%d\n", add()); }int x 10; int y 20;extern文件之间&#xff1a;修饰函数声明<1>.add.cint sum(){extern int x ;extern in…...

树的前中后序的Morris遍历

目录 一.Morris遍历 1.什么是Morris遍历 2.基本思想 3.Morris遍历的优点和缺点 4.知识回顾----二叉树的线索化 二.中序Morris遍历 1.中序Morris遍历的分析 2.中序Morris遍历的思路 3.具体的代码实现 三.前序Morris遍历 1.前序Morris遍历的思路 2.具体的代码实现 四…...

到底什么是线程?线程与进程有哪些区别?

上一篇文章我们讲述了什么是进程&#xff0c;进程的基本调度 http://t.csdn.cn/ybiwThttp://t.csdn.cn/ybiwT 那么本篇文章我们将了解一下什么是线程&#xff1f;线程与进程有哪些区别&#xff1f;线程应该怎么去编程&#xff1f; 目录 http://t.csdn.cn/ybiwThttp://t.csdn…...

你真的知道如何系统高效地学习数据结构与算法吗?

文章目录前言&#xff1a;什么是数据结构&#xff1f;什么是算法&#xff1f;学习这个算法需要什么基础&#xff1f;学习的重点在什么地方&#xff1f;一些可以让你事半功倍的学习技巧1.边学边练&#xff0c;适度刷题2.多问、多思考、多互动3.打怪升级学习法4.知识需要沉淀&…...

Linux操作系统基础的常用命令

1&#xff0c;Linux简介Linux是一种自由和开放源码的操作系统&#xff0c;存在着许多不同的Linux版本&#xff0c;但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中&#xff0c;比如手机、平板电脑、路由器、台式计算机。1.1Linux介绍Linux出现于1991年&#xff0c…...

Jasypt加密库基本使用方法

目录 1 Jasypt简介... 2 基础知识回顾... 3 Jasypt基本加密器... 4 JasyptPBE加密器... 5 Jasypt池化加密器... 6 Jasypt客户端工具... 7 JasyptSpringboot基本用法... 8 JasyptSpringboot自定义加密器... 9 JasyptSprin…...

C++并发编程之五 高级线程管理

文章目录5.1.1 线程池5.1.1 线程池 在前面我们引入了线程的通信和同步手段&#xff0c;那么为什么还要引入线程池呢&#xff1f; 线程池是一种管理多个线程的技术&#xff0c;它可以减少线程的创建和销毁的开销&#xff0c;提高并发性能。线程池中有一定数量的空闲线程&#x…...

单片机——IIC协议与24C02

1、基础知识 1.1、IIC串行总线的组成及工作原理 I2C总线只有两根双向信号线。一根是数据线SDA&#xff0c;另一根是时钟线SCL。 1.2、I2C总线的数据传输 I2C总线进行数据传送时&#xff0c;时钟信号为高电平期间&#xff0c;数据线上的数据必须保持稳定&#xff0c;只有在时钟…...

案例05-将不必要的逻辑放到前端(发送调查问卷)

目录一&#xff1a;背景介绍背景二&#xff1a;思路&方案重大问题&#xff1a;解决办法优点&#xff1a;三&#xff1a;总结一&#xff1a;背景介绍 本篇博客书写的意义是警示大家不必把不必要的逻辑放到前端。 明确前后端分离的意义。 背景 下面的主要逻辑是&#xff1…...

【每日一题】——矩阵相等判定

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e2; 读书笔记 &#x1f7e1; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…...

Linux防火墙的关闭

查看防火墙的状态打开终端输入如下命令systemctl status firewalld如图所示&#xff1a;running表示防火墙目前处于打开状态输入命令进行关闭防火墙&#xff1a;systemctl stop firewalld如图所示正常的用户是没有权限的&#xff0c;需要输入管理员的密码才能够进行关闭防火墙。…...

Request和Response的概述

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;输出优质文章⭐作者主页&#xff1a;︶ㄣ释然⭐如果觉得文章写的不错&#xff0c;欢迎点个关注&#x1f609;有写的不好的地方也欢迎指正&#xff0c;一同进步&#x1f601;Request和Respo…...

常见的Web安全漏洞:SYN攻击/CSRF/XSS

一、SYN攻击&#xff08;属于DOS攻击&#xff09; 什么情况下被动方出现SYN_RCVD状态?(flood攻击服务) 客户伪造 ip 端口&#xff0c; 向服务端发送SYN请求。完成2次握手&#xff0c;第三次服务端 等待客户端ACK确认&#xff0c;但由于客户不存在服务端一直未收到确认&#…...

【STC15单片机】 超声波模块的使用

目录 1 基于STC15F2K60S2的超声波测距代码 1.1 基本注意事项 1.1.1 跳线帽接法 1.1.2 晶振设置 1.2 板载超声波工作原理 1.2.1 原理总结 1.2.2 超声波代码思路 1.3 STC15单片机代码部分 1.3.1 定时器0&定时器1初始化 1.3.2 超声波ultrasonic.c ultrasonic.h文件配…...

SpringBoot 动态操作定时任务(启动、停止、修改执行周期)增强版

前段时间编写了一篇博客SpringBoot 动态操作定时任务&#xff08;启动、停止、修改执行周期&#xff0c;该篇博客还是帮助了很多同学。 但是该篇博客中的方法有些不足的地方&#xff1a; 只能通过前端控制器controller手动注册任务。【具体的应该是我们提前配置好我们的任务&am…...

快排函数 -- qsort函数(Quick Sort)

文章目录&#x1f50e;1.qsort函数简介&#x1f4a1;1.1.函数原型&#x1f4a1;1.2.参数含义&#x1f50e;2.比较函数介绍&#x1f50e;3.比较函数使用案例&#x1f4a1;3.1.整型数组&#x1f4a1;3.2.浮点型数组&#x1f4a1;3.3.结构体类型 - 字符串&#x1f50e;4.利用冒泡排…...

条形码和二维码

前言&#xff1a;需要的包的相关文档 1. Barcode&#xff1a;https://pypi.org/project/python-barcode/0.8.1/ 2. Qrcode&#xff1a;https://pypi.org/project/qrcode/ 3. Zbar: https://pypi.org/project/pyzbar/ 4. Opencv: https://docs.opencv.org/3.4.11/ 5. OpenC…...

大数据-学习实践-5企业级解决方案

大数据-学习实践-5企业级解决方案 (大数据系列) 文章目录大数据-学习实践-5企业级解决方案1知识点2具体内容2.1小文件问题2.1.1 SequenceFile2.1.2 MapFile2.1.3 小文件存储计算2.2数据倾斜2.3 YARN2.3.1 YARN架构2.3.2 YARN调度器2.3.2 YARN多资源队列配置和使用2.4Hadoop官方…...

破解吲哚花菁素IR-808 N3,IR-808 azide,IR-808叠氮,酯溶性染料修饰叠氮基团,相关知识

基础产品数据&#xff08;Basic Product Data&#xff09;&#xff1a;CAS号&#xff1a;N/A中文名&#xff1a;IR-808叠氮英文名&#xff1a;IR-808 N3&#xff0c;IR-808 azideIR-808结构式&#xff08;Structural&#xff09;&#xff1a;详细产品数据&#xff08;Detailed …...

面试官:MQ的好处到底有哪些?

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…...

事务机制:Redis能实现ACID属性吗?

ACID特性无需多言。我们知道关系数据库比如mysql可以实现事务的ACID特性&#xff0c;begin,commit,回滚实现。 那么redis可以实现ACID吗&#xff0c;结论是不能完全保证。 首先要知道redis通过MULTI关键字开启事务&#xff0c;中间一系列操作&#xff0c;加到操作队列中并不执…...

如何在 Apinto 实现 HTTP 与 gRPC 的协议转换(上)

什么是 gRPC 像 gRPC 是由 google 开发的一个高性能、通用的开源 RPC 框架&#xff0c;主要面向移动应用开发且基于 HTTP/2 协议标准而设计&#xff0c;同时支持大多数流行的编程语言。 gRPC 基于 HTTP/2 协议传输&#xff0c;而 HTTP/2 相比 HTTP1.x &#xff0c;有以下优势:…...

3分钟看完-丄-Python自动化测试【项目实战解析】经验分享

目录&#xff1a;导读 引言 自动化测试 背景 测试团队 测试体系发展 测试平台 自动化测试现状 现状一&#xff1a; 现状二&#xff1a; 现状三&#xff1a; 现状四&#xff1a; 现状五&#xff1a; 现状六&#xff1a; 失败的背景 失败的经历 失败总结 引言 内…...