Vim常用命令总结 修改 i - 在光标之前插入 I - 在这行行首插入 a - 在光标之后插入 A - 在这行行末插入 x - 删除当前光标的字符 v - 可以移动光标来选中内容 V - 移动光标将选中整行 ctrl+v - 移动光标选取一个矩阵 D - 删除从当前光标到行末信息 d - 剪切选中内容 diw ...
Vim常用命令总结 修改 i - 在光标之前插入 I - 在这行行首插入 a - 在光标之后插入 A - 在这行行末插入 x - 删除当前光标的字符 v - 可以移动光标来选中内容 V - 移动光标将选中整行 ctrl+v - 移动光标选取一个矩阵 D - 删除从当前光标到行末信息 d - 剪切选中内容 diw ...
向Maven中央仓库提交JAR包 本文将详细介绍所有向Maven中央仓库提交SDK(对于JAVA即是jar包)的流程。如果您已经完成了整个流程但遇到一些问题,可以直接跳到文末,那里总结了很多遇到的问题以及解决的方案。1. sonatype工单为了向Maven中央仓库提交SDK,我们首先要向sonatype系统提交工单 如果没有账户,首先注册账户 选择Create Issue 创建发布 按照要求填写信息...
从JavaScript到ES6再到TypeScript 严格地说,这个题目是不够严谨的。JavaScript和ES6之间是版本的区别而并不是两种不同的事物,但是我们往往用ES6表示新一代的JS,所以简单的说是JavaScript和新版JS和其他与JS相似的变体间的比较与区别。JavaScript这里的JavaScript指的是我们使用的最初的简单的JS脚本语言,下面我们对语法和特点做一些回顾。 能够改变并控制页面中的所有HTML元素、属性...
从JavaScript到ES6再到TypeScript 严格地说,这个题目是不够严谨的。JavaScript和ES6之间是版本的区别而并不是两种不同的事物,但是我们往往用ES6表示新一代的JS,所以简单的说是JavaScript和新版JS和其他与JS相似的变体间的比较与区别。JavaScript这里的JavaScript指的是我们使用的最初的简单的JS脚本语言,下面我们对语法和特点做一些回顾。 能够改变并控制页面中的所有HTML元素、属性...
前端脚手架BigFish Bigfish 企业级前端开发框架,与常见的前端框架和工具不同,它从工程角度集成了各类功能,从初始化开发到最终上线整套技术方案,解决了前端开发经常遇到的前端技术栈整合配置麻烦、开发联调麻烦、前端资源发布上线麻烦三大痛点。Bigfish主要具备以下功能: 基于 umi 整合了前端工具链:整合了 Ant Design、Dva、Ant Design Pro 技术栈,最小化成本开发 简...
GPG GnuPG(全称:Gnu Privacy Guard,简称:GPG)的前身是PGP,他们都是简单好用的加密软件,但因GPG是免费的所以得到更广泛的使用。具体的说,GPG是一个命令行工具,可以为数据和通信进行加密和签名,因为其良好的集成性,所以很多的应用都可以使用GPG作为加密工具。下面在介绍GPG用法前,先介绍其加密签名的原理。密钥对加密传统的双向加密只用一把密钥,在发送加密文件的同时也会...
JUnit和mockito 我们都希望写出没bug的代码,那么测试就是必不可少的一个环节。在CI持续集成并发布我们的代码的过程中,有很多测试方法,可以提高我们代码的覆盖率,查缺补漏。单元测试单元测试用于测试最小的功能单元,这是各种测试中范围最小的一种。在单元测试中,我们一般会测试一个方法以其为单位,检测是否能返回我们期望的结果。理论上,单元测试应该在内存中进行,被测试的代码在理论上不应该和其他外部信息进行交互,这些外...
代码覆盖率 代码覆盖率指我们运行所有项目中的测试方法后,能够执行的语句和所有语句的比值。更具体一些,我们用行覆盖率举例,行覆盖率应该等于运行所有测试方法能够执行到的行数除以代码所有能够执行的行数。客观看待代码覆盖率简单的说,覆盖率是指我们代码在测试中能够被覆盖的程度。所以,覆盖率理论上来说越高越好,代码覆盖率高说明我们的每一段代码都经过了测试,得到了预期的答案。但我们也不应该太纠结于代码覆盖率的高低,...
代码覆盖率 代码覆盖率指我们运行所有项目中的测试方法后,能够执行的语句和所有语句的比值。更具体一些,我们用行覆盖率举例,行覆盖率应该等于运行所有测试方法能够执行到的行数除以代码所有能够执行的行数。客观看待代码覆盖率简单的说,覆盖率是指我们代码在测试中能够被覆盖的程度。所以,覆盖率理论上来说越高越好,代码覆盖率高说明我们的每一段代码都经过了测试,得到了预期的答案。但我们也不应该太纠结于代码覆盖率的高低,...
JVM内存管理调优 运行时数据区是JVM把自己管理的内存部分抽象出来的模型,抽象出来的不同的数据区域,以便于管理,具体有程序计数器、堆、栈、本地方法栈和方法区这几个区域。这几个区域有的会产生内存溢出的问题,在实际生产中会导致服务不可用,所以确保机器的鲁棒性,JVM调优是不可忽视的一环。对象回收判断在进行JVM调优之前,我们要先对对象回收判断和垃圾回收方式有所了解,才能针对他们的特点考虑如何进行回收。如何判断对...
三代HTTP协议间的差异与优化 目前我们使用的HTTP协议是HTTP1.1,对于现在的网络来说这个版本的协议足够好用和稳定。HTTP2相比较HTTP1.x进行了更多的优化,大幅度的提升了web的性能,让网络足够优秀,进一步减少了网络的延迟。这里我们探讨一下HTTP的1.0、1.1、2.0这三个版本的差异和升级后对前一代的优化情况。HTTP1.0 与 HTTP1.1 的区别增加方法增加了很多请求方法,1.0中只有POS...
如何优雅的使用MySQL索引 MySQL最常用的引擎是MyISAM和innoDB两种,这两种引擎里innoDB因其拥有外键、事物、各类锁等功能所以在生产环境的应用更加广泛。innoDB的索引根据功能划分有单列索引、组合索引,按照性质划分有聚簇索引和非聚簇索引。在编写SQL语句时,使用索引可以大大加快语句执行速度。MySQL组成MySQL大概是由以下这些个部分组成:连接池:MySQL顶层有连接池,这是类似于线程池的池...
对于不同任务的线程池设计方案 池化技术的应用很广泛,比如线程池、连接池等。在业务有需要的地方建池,将宝贵的资源重复利用,从而提升效率和性能。ThreadPoolExecutor是JAVA提供的一种线程池技术,通过使用它,我们可以很方便的建立池化技术的应用很广泛,比如线程池、连接池等。在业务有需要的地方建池,将宝贵的资源重复利用,从而提升效率和性能。ThreadPoolExecutor是JAVA提供的一种线程池技术,通过使用...
如何设计大量数据的查重和去重 至少在现阶段内存和CPU的执行效率在固定时间内是有限的,大量的数据的查重和去重处理不可能同时在内存中进行。就像外部排序算法和内部排序算法差别很大,遇到此类大量数据查重问题对算法进行设计是有必要的。ConcurrentHashMap数据量不大的时候可以采用concurrentHashMap来操作,在内存中对数据进行同步的CRUD操作。这种做法的好处是很明显的,逻辑处理很简单易懂。但是会产...
spring中IoC和AOP的实现 6.2 spring IoCIoC容器是Spring的核心。容器从配置文件中读取需要创建哪些对象,并在创建后按照要求把它们进行装配,通过这样的方法达到业务代码解耦的目的。不仅如此,spring还负责管理这些对象从创建到销毁的整个生命周期。在代码实现中,我们通常把这些对象叫做SpringBean,通过结构复杂的Bean工厂来完成它们的创建。6.2.1 BeanFactoryBeanFac...
微服务架构 1 基本概念1.1 高可用负载均衡、限流、熔断、降级、高并发控制、回滚、隔离、压力测试1.2 高并发缓存、异步操作、池化技术、扩容、队列2 负载均衡外网(广域网)通过DNS全局负载均衡解析到不同的局域网集群进行分流 内网(局域网)通过搭建API网关,比如LVS(软件负载均衡器)、NginX、F5多层次进行负载均衡 NginX将解析结果分配给服务器2.1 LVSLV...
JAVA知识点全总结——(九)系统业务开发 上一篇:JAVA知识点全总结——(八)算法与数据结构9. 系统业务开发9.1 设置系统缓存可以使用缓存做数据库的一个缓冲,如果有大量的数据直接连进数据库肯定导致异常,先把数据存放在缓存中,在用一些算法进行处理,确保安全性,可靠性。9.2 进行应用降级降级是指将一些非核心的服务端功能有限制的降级,这样可以释放计算机的资源,用来保证核心的业务能够顺利进行。降级的话可以有很多个级别,...
JAVA知识点全总结——(八)算法与数据结构 上一篇:JAVA知识点全总结——(七)设计模式8. 算法与数据结构8.1 排序算法冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序8.2 查找算法遍历查找 二分查找 二叉树查找 红黑树查找 跳表查找8.3 拓扑排序对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,...