• 搜索:markdown

webstrom 2021版 试用版本

请注意,这是MAC 系统适配的webstrom 如果你的系统是windows ,那么这个版本不适用,再去网上找一找! 请注意,这是一个老版本 2021版 如果你不接受老版本,那么下面的内容就不用看了. 如果你尝试了很多办法都无法继续使用webstrom 不防试一试这款试用版 (无限循环试用,前提是不要升级) download URL 链接: https://pan.baidu.com/s/1klFAS5mJyWLRGViSq0zomQ 提取码: rqhu 试用方法 下载安装 拖拽直接安装 选择Evaluate 选择30天试用 然后创建一个空项目 把安装包中的 ide-eval-

mac 版 typora 激活使用

推荐官方下载版本 1.5.10 其他版本可能并不适用此方法! 1.下载安装应用后打开 typora 右下角可以看到 "未激活" 字样. 2.推出 typora 程序坞上右键,退出应用. 3.打开finder 按下快捷键 command+shift+g , 输入下面的路径, /Applications/Typora.app/Contents 找到/Resources/TypeMark/page-dist/static/js/LicenseIndex.....如下图 4.使用vscode打开文件 输入 hasActivated="true"e.ha

互联网企业部署BFF 框架的优势

什么是BFF框架 BFF框架指的是一种逻辑分成,而非一种新技术; 即 Backend For Frontend(服务于前端的后端),也就是服务器设计 API 时会考虑前端的使用,并在服务端直接进行业务逻辑的处理,又称为用户体验适配器. 为什么要使用BFF 当然一般情况下后端 api 不需要区别对待不同的前端; 不同的前端平台所带来的差异化不会很大,但有些特殊的商业软件会细分到以上 3 种不同的前端平台. 如果是基于这个假设那么前端每做一点改变都需要后端的支持; 有没有一个中间件平台提供所有前端所需的 api,同时负责和后端交互呢? 对于基本的小改动中间件平台完全可以提供其相应的数据支持,而不

go语言 sync 包简介及使用

sync 包的简介 Go语言的sync包提供了常见的并发编程控制锁; 在并发编程中锁的主要作用是保证多个线程或者 goroutine在访问同一片内存时不会出现混乱; golang 中使用 go 语句来开启一个新的协程。 goroutine 是非常轻量的,除了给它分配栈空间,它所占用的内存空间是微乎其微的; 但当多个 goroutine 同时进行处理的时候,就会遇到比如同时抢占一个资源,某个 goroutine 等待另一个 goroutine 处理完某一个步骤之后才能继续的需求。 在 golang 的官方文档上,作者明确指出,golang 并不希望依靠共享内存的方式进行进程的协同操作。 而是希

centos 系统上安装 yarn

yarn是什么 Yarn是一个用于node.js应用程序的高级包管理软件。它是任意一个其他Nodejs包管理器的快速、安全和可靠的替代方案,比npm更好的解决包依赖问题。本篇文章介绍在CentOS,Redhat和Fedora系统上安装Yarn的方法。 centos下如何安装 使用NPM安装Yarn Yarn组件可与NPM一起安装。只需运行以下命令即可全局安装Yarn。另外,没有-g,就是仅为当前项目安装。 $ sudo npm install yarn -g 用脚本安装Yarn 这是安装Yarn最为推荐的方法。这将下载yarn档案并在home的.yarn目录下提取。脚本还设置了PATH环境

homebrew update 卡住,github下载非常慢

解决Homebrew 更新卡住的问题 brew install 安装软件时会遇到先执行 update , 而整个update 过程brew 会从 github上下载代码, github 用的aws ,而aws在我们的网络环境下访问都非常非常慢, 导致 update 会被卡住,或者几k的速度在下载. 给brew 换源 这里推荐试用 中科大的源, 之前换过 阿里的镜像, 但是 阿里镜像里只有brew-core 没有brew-cask , 导致 update 过程中,依然从 github 拉取 brew-cask的代码, 就算单独把brew-cask 的源换成中科大镜像依然无用. 所以干脆全部换成

微服务框架设计实践

什么是微服务 微服务极大的改变了服务端引擎的架构方式; 微服务不是一个单一的巨型的用来托管应用程序所有业务逻辑的代码库,而是反映了分布式系统模型,在该模型中,一组应用程序组件协同工作来满足业务需求; 通过遵循十项基本的微服务最佳实践,你可以实现一个高效的微服务生态系统,从而避免不必要的架构复杂性. 单一责任原则 就像代码中的类一样,它仅仅在单个原因情况下改变,微服务也是采用类似的方式建模; 构建可能会改变一个以上的业务这种臃肿的服务是一个非常不好的实践. 例如:你正在构建用于订购披萨的微服务; 你可以基于功能构建下面这些组件,诸如InventoryService,OrderService,P

mac 下修改 docker 国内镜像

mac下安装 docker 官网下载地址: https://docs.docker.com/docker-for-mac/install/ 安装启动 docker 左小角显示 docker running shell 执行 docker version $ docker version Client: Docker Engine - Community Cloud integration: 1.0.4 Version: 20.10.0 API version: 1.41 Go version: go1.13.15 Git commit:

mongd 解决“Error parsing YAML config file: yaml-cpp: error

mongod 启动报错 $ mongod --config /usr/local/etc/mongod.conf Error parsing YAML config file: yaml-cpp: error at line 9, column 9: illegal map value try 'mongod --help' for more information 报错原因 mongodb 3.0之后的配置文件采用YAML格式; YAML 格式约定如下: : 形式定义配置文件 : 后面如果有 key 前面有空格(一般是2个)不能是tab键 , value 前面必须有一个空格 :

go 语言实践: switch 语句的使用

go语言中的 switch 可以一个条件一个分支 switch flag { case 1: fmt.Println("one") case 2: fmt.Println("two") } 可以多条件写一个分支 switch flag { case 1: fmt.Println("one") case 2,3,4: fmt.Println("two,three,four") } 可以把判断条件写到case 后面 switch { case flag == 1:

go 语言实践:欧几里得算法-求最大公约数

go语言实现欧几里得算法 求2个数的最大公约数 辗转相除法 大数对小数求余 余数不为零时,小数对余数求余 余数为零时,小数就是俩个数的最大公约数 package main import "fmt" func divisor(min, max int) (maxDivisor int) { //用大数对小数取余 complement := max % min //余数不为零,小数作为大数,将余数作为小数,大数对小数递归求余 if complement != 0 { maxDivisor = divisor(complement, min)

go 语言实践:随机数生成

go语言中的随机数 math/rand包操作随机数, rand.Seed(seedNum)方法设定种子值, rand.Intn(n)获取一个小于n的随机数,[ 同一个种子值,生成的随机数是确定的 ] 所以go语言中的随机数取决于种子的随机性, 一般情况下可以采用系统时间的毫秒数作为种子值. 当种子值相同时 package main import ( "fmt" "math/rand" ) func main() { rand.Seed(888) //获取8个小于1000的随机数 for i := 0; i < 8; i++ {

Docker Compose 事半功倍,容器部署更方便简洁

Docker Compose是什么 Docker Compose 是一个工具,这个工具可以通过一个 yml 文件定义多容器的 Docker 应用. 通过一条命令就可以根据 yml 文件的定义去创建或者管理多个容器. 什么是yml文件 YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式, YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互. 如何定义yml文件 新建 docker-compose.yml 文件 version: '3.7' services: mongodb: contain

go 语言实践:冒泡排序法 和 选择排序法对比

go 冒泡排序 & 选择排序 冒泡排序 将每一个数同相邻的下一个数对比,如果比下一个数大则交换位置. func bubble(list []int) []int { //用来拍断是否完成排序 flag := true len := len(list) for i := 0; i < len-1; i++ { //预设没有发生交换 flag=true,当发生交换,flag=false flag = true for j := 0; j < len-1-i; j++ {

go 语言中的错误捕捉 panic 以及 recover修复错误

go语言中的错误处理 go语言中遇到错误,一般直接返回 error ,如果手动无法处理的 error ,可以直接触发 panic . 当遇到一些严重错误,比如数组,切片越界等错误,直接 panic 也会被触发. panic 一但被触发,当前执行的程序会退出. package main import ( "fmt" ) func main() { fmt.Println("before panic") panic("program crash") fmt.Println("after panic") } 执行结果: ./prog.go:24:2:

Go http.StripPrefix 和 File Server的使用

代码的整洁和进行合理的分流 http.StripPrefix函数的作用之一,就是在将请求定向到你通过参数指定的请求处理处之前,将特定的prefix从URL中过滤出去. 下面是一个浏览器或HTTP客户端请求资源的例子: /assets/js/page.min.js StripPrefix 函数将会过滤掉/assets/, 并将修改过的请求定向到http.FileServer所返回的Handler中去,因此请求的资源将会是: /js/page.min.js http.FileServer 返回的Handler将会进行查找,并将与文件夹或文件系统有关的内容以参数的形式返回给你 (在这里你将&

go 语言中如何实现继承

回顾 一.之前说到了go中如何实现类 传送门 二.go中如何实现类的封装 传送门 go 语言中如何实现继承 package main import ( "fmt" ) type people struct { name string age int } func (p people) GetName() string { return p.name } type Student struct { people grade int } func (s Student) GetGrade() int { return s.gr

go 语言中类的封装

go中的类的定义和使用 之前一篇博客详细介绍了go语言中如何定义类,使用类, 点击查看 go语言中如何实现封装? go是直接支持strut的封装的,go语言的可见性是根据首字母大小写来实现的. 首字母大写表示对外部可见,类似C#中的public,首字母小写,对外部不可见,类似C#中的private. package main import ( "fmt" ) type Student struct { name string age int } func (s Student) GetName() string { return s.name } func

go 语言中的类的实现,类的属性和方法

go语言中的类是如何实现的? go语言中严格意义来说是没有类的概念,当然也不存在面向对象的封装和继承, 但是go语言可以通过struct 结构体来模拟类的概念,试的我们用起来像是一种类. struct 如何来实现面向对象的类? struct 首先是一种类型,值类型.它是由一系列具有相同类型或不同类型的数据构成的数据集合. 和c语言的struct很像,用起来就相当于java / c# 中的的class . struct 的定义 下面的内容中我们直接把struct 称呼为 "类" type student struct { name string age

go语言换行的地方可以用分号替代吗?

go语言中默认用换行来表示语句结束,那么能不能用分号来代替换行呢? package main import ( "fmt" ) func main() { fmt.Println("hello world") main函数的左花括号必须在main同行,否则出错. 为什么go语言要这么玩呢? 这是为了在语言层面强制让所有使用者统一编程规范. 看看go圣经中的原话, 我来手动打一下: In effect, newlines following certain tokens are converted into semicolons, so where newline

Docker 容器之间互访的几种形式

容器之间为什么要互访 docker容器与容器之间是隔离状态,不能互相访问,但如果有些依赖关系的服务要如何访问对方呢? 介绍三种方法来解决容器互访问题. 虚拟IP访问 安装docker时,docker会默认创建一个内部的桥接网络docker0,每创建一个容器分配一个虚拟网卡,容器之间可以根据ip互相访问。 运行一个centos镜像, 查看ip地址得到:192.168.32.2 首先通过 docker ps 查看当前电脑上运行的容器实例 $ docker ps CONTAINER ID IMAGE COMMAND CREATE

docker 创建mongodb 容器 映射本地数据目录和配置文件

docker 创建mongodb 容器 安装 mongodb 镜像 拉取官方镜像 docker pull mongo 本地创建数据库目录 # zhangzhi @ ZhangZhi-MacBook-Pro in ~ [9:03:15] $ sudo mkdir mongodb 不要忘记给目录 777 权限 sudo chmod 777 mongodb 本地配置文件目录 # zhangzhi @ ZhangZhi-MacBook-Pro in ~ [9:27:24] C:130 $ sudo mkdir docker/mongodb 不要忘记给目录 777 权限 sudo chmod

docker 查看日志输入

docker logs-查看docker容器日志 命令格式: $ docker logs [OPTIONS] CONTAINER Options: --details 显示更多的信息 -f, --follow 跟踪实时日志 --since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟) --tail string 从日志末尾显示多少行日志, 默认是all -t, --timestamps 显示时间戳 --until st

Typora搭配PicGo自定义图床 - 让你的markdown飞起来

前言 markdown的流行让大部分人脱离UI编辑专心致志写作,体验非常棒. 但是市场主流的markdown编辑器在上传附件功能方面一直都没有太得心应手的工具. 今天给大家推荐typora编辑器搭配PicGo自定义图床,让你随心所欲文档中插入图片. typora Typora是一款由Abner Lee开发的轻量级Markdown编辑器,适用于OS X、Windows和Linux三种操作系统,是一款免费软件。与其他Markdown编辑器不同的是,Typora没有采用源代码和预览双栏显示的方式,而是采用所见即所得的编辑方式,实现了即时预览的功能,但也可切换至源代码编辑模式。 ---维基百科 下载

TCP 可靠连接的相关命令

关于 TCP可靠连接在之前有专门的介绍,点击连接查看. netstat 命令 netstat 用于打印网络连接、路由表、连接的数据统计等,我们上文中介绍的各种连接状态都可以通过该命令进行统计 参数介绍: - -a:列出所有状态的连接 - -l:列出正在监听状态(State=LISTEN的连接 - -t:列出所有 tcp 协议的连接 - -u:列出所有 udp 协议的连接 - -n: 开启域名解析,将对应的域名解析为 IP - -p:列出正在监听的进程名称和进程 PID(PID/Program name),在 root 用户下启动的进程,普通用户是查不到对应的进程名称的 - -e:列出进程对应

levelup 4.x版本升级node.js下leveldb数据库对照文档

levelup 是一个由谷歌构建的简单 key-value 数据库. 它在 Google Chrome 和许多其他产品中使用,使用 fast Snappy算法,可以将任意字节数组作为键和值. leveldown 它提供了一个纯 C++ 绑定到 LevelDB. 在浏览器或者 memdown 中,有许多可选存储( 如 level.js ),用于内存存储中的. 它们通常支持键和值的字符串和缓冲区. 对于更丰富的数据类型集,可以用 encoding-down 包装存储. level 它可以看做是包的一个集合,捆绑了 levelup , leveldown 和 encoding-down. 它的

es6 class 中 constructor 方法 和 super 的作用

es6 中的class ES6 的 class 属于一种“语法糖”,所以只是写法更加优雅,更加像面对对象的编程,其思想和 ES5 是一致的。 function Point(x, y) { this.x = x; this.y = y; } Point.prototype.toString = function() { return '(' + this.x + ',' + this.y + ')'; } 等同于 class Point { constructor(x, y) { this.x = x; this.y = y; } toStri

区块链是什么

什么是区块链 区块链是一种以区块为基本单位的链式数据结构,区块中利用数字摘要对之前的交易历史进行校验,适合分布式记账场景下防篡改和可扩展性的需求; 它具有分布式数据存储、点对点传输、共识机制、加密算法等计算机技术,通过维护数据块的链式结构进行持续增长的、不可篡改的数据记录. 区块链(Blockchain),是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块. 工作原理 区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组

axios中文使用文档说明

关于axios axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js. 主要功能 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API 拦截请求和响应 转换请求数据和响应数据 取消请求 自动转换 JSON 数据 客户端支持防御 XSRF 浏览器支持 使用 浏览器端 直接引用: <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 使用 bower: bower ins

免费申请SSL证书 - 站点从http升级到https

前言 现在https协议以及成为站点标配, 前面写过一篇关 http跳转https服务的博客, 有些人询问如何申请SSL证书. https优点 提升搜索排名 实现网站HTTPS化,加密用户与网站间的交互访问,强化网站用户侧可信展示程度,防劫持、防篡改、防监听. 采用Https加密的网站在搜索引擎显示结果中的排名将会更高,有利于提升网站的搜索靠前及站点可信度. 申请SSL证书 一般的云服务器厂商都支持购买证书, 我们今天说的是在阿里云免费申请SSL证书. 阿里云SSL证书品牌有 GeoTrust Symantec (赛门铁克) GMO GlobalSign CFCA 我们选择个人免费类型

Nodejs Event Loop 事件循环机制

什么是事件循环 Event loop 事件循环是 Node.js 处理非阻塞 I/O 操作的机制——尽管 JavaScript 是单线程处理的——当有可能的时候,它们会把操作转移到系统内核中去。 既然目前大多数内核都是多线程的,它们可在后台处理多种操作。 当其中的一个操作完成的时候,内核通知 Node.js 将适合的回调函数添加到 轮询 队列中等待时机执行. 工作机制是什么样的? Client 请求到达 node api,该请求被添加到Event Queue(事件队列)[这是因为Node.js 无法同时处理多个请求] Event Loop(事件循环) 始终检查事件队列中是否有待处理事件,如果

vscode 高效率插件koroFileHeader注释辅助和GitLens代码追踪

前言 vscode优势强劲,让各种技术栈同学爱不释手,不仅仅是IDE足够优秀,而且他的生态也非常丰富,各种各样的插件让你武装到牙齿. 今天推荐的2款插件本人都在用. koroFileHeader 文件头部加注释 光标处添加函数注释 文件头部加注释 文件头部注释在你创建文件自动添加, 如果是老文件,保存时自动添加更新记录. /* * @Author: zhangzhi * @Date: 2019-07-11 13:40:28 * @LastEditTime: 07-11 17:15:57 * @LastEditors: zhangzhi * @Description: In User Set

Java 中的内部类有什么用?

什么是内部类 把类定义在另一个类的内部,该类就被称为内部类. 非常重要的一点是,内部类能够访问外部类的所有成员,包括private修饰的. 为什么需要内部类 Java的内部类让我很容易的想起来JavaScript的闭包,闭包就是定义在一个函数内部的函数——这听起来和Java的内部类定义一样一样的. 本质上,闭包是将函数内部与函数外部连接起来的桥梁. 内部类一样,它是将内部类与外部类连接起来的桥梁. 内部类有何优势 内部类可以直接访问外部类中的成员(包括私有成员), 内部类可以独立地继承一个抽象类或者实现一个接口,无论外部类是否也这样做了,对内部类都没有影响. 可以模拟实现多继承 我们知

vue 和 react 的相同点以及不同点

vue 和 react 的相同点 1.他们都是JavaScript的框架,专注于创造前端的富应用 2.不同于早期的JavaScript框架“功能齐全”,React与Vue只有框架的骨架,其他的功能如路由、状态管理等是框架分离的组件。 3.Vue.js(2.0版本)与React的其中最大一个相似之处,就是他们都使用了一种叫’Virtual DOM’的东西都鼓励组件化 4.看到React和Vue都有’props’的概念,这是properties的简写。props在组件中是一个特殊的属性,允许父组件往子组件传送数据。 5.React和Vue都有自己的构建工具,你可以使用它快速搭建开发环境 6.Re

docker 安装 redis 让宿主机访问

docker 安装 redis 拉取镜像 docker pull redis 宿主机创建映射目录 创建目录 sudo mkdir -p docker/redis/redis01/conf sudo mkdir -p docker/redis/redis01/data conf 目录放redis.conf 配置文件 data 目录映射redis数据目录 上面文件都要chmod 777 的权限 创建配置文件 在线拉取一个 redis.conf 放入 docker/redis/redis01/conf 目录下 cd docker/redis/redis01/conf wget http:

ES6 语法中 export 和 export default 的区别是什么

ES6 下export 和 export default 的区别 export与export default均可用于导出常量、函数、文件、模块等 你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用 在一个文件或模块中,export、import可以有多个,export default仅有一个 通过export方式导出,在导入时要加{ },export default则不需要 ES6 下 export 导出方式 //a.js export const str = "blablabla~"; export function

TCP 可靠连接的状态简介

什么是TCP协议 位于 OSI 模型中的传输层(第四层),是一种端对端的传输协议 面向连接的、可靠的协议 通过校验、序列化、确认应答、重发控制、窗口控制等机制实现可靠传输 由建立连接、数据传输和连接释放三个阶段组成 采用三次握手建立连接,采用四次挥手关闭连接 OSI Open Systems Interconnection 网络堆栈中协议的分层结构,TCP在此结构的第四层位置. TCP三次握手 三次握手为了使 Client 和 Server 都确认是否有接受对方的数据和发送数据给对方的能力: 这里不要把图里的 Client/Server 和项目里的客户端服务器端混淆,主动发起连接的一方或者

javascript 中的 Object.defineProperty

javascript中的 object javascript中的object是由多个名/值对组成的无序的集合; object 中每个属性对应任意类型的值; 定义对象可以使用构造函数或字面量的形式. var obj = new Object; obj.name = "一介布衣"; obj.show = function(){}; //添加行为 除了以上添加属性的方式,还可以使用Object.defineProperty定义新属性或修改原有的属性 Object.defineProperty Object.defineProperty(obj, prop, descriptor) 参数说明:

go 语言实践:命名规则

go 语言命名 go 语言不像java 等传统面向对象语言一样有访问修饰符; 它是从语法层面做了限定: 想要对外暴露的名字必须大写字母开头 [类似 public 修饰符] 不想对外暴露的名字必须小写字母开头 [对其他包不可见,类似私有变量] 包名称命名规则 取名要有意义,不与标准库冲突; 包名与目录名一致; 包名要使用小写开头的单词; 不混合大小写或者下划线等; 如: package yijiebuyi 文件命名规则 取名要简短,有意义; 小写单词打头; 多个单词使用下划线分隔; blog_content.go 结构体命名规则 驼峰命名法. 至于大驼峰还是小驼峰取决于该结构体是否要向

mongodb客户端连接报错 Error: Failed to execute "listdatabases" command​

前言 本人当前使用的mongodb客户端版本Robo 3T 1.3.1 配置连接远程mongodb时报错: Error: Failed to execute "listdatabases" command 原因是因为今天mongodb config中指定了权限验证 开启mongodb验证 /etc/mongod.conf security: authorization: enabled 因为mongodb安装以后只在cmd中进行本地访问,所以要使用图形界面就需要使用登录账号及密码 解决方案 之前mongodb 采用 SSH 远程连接mongodb的方式, 现在需要重新编辑 添加Auth

vscode 天赋异禀 - 格式化jsx代码

jsx代码格式化错乱 当你在用vscode编写jsx代码时,也许你的编辑器设置了自动保存,或者自动格式化代码. 而vscode 对js文件中的 jsx 代码格式化是下面这个样子的: 如何修复这种情况 首先安装插件 Prettier vscode扩展插件中搜索 Prettier 安装 修改配置文件 vscode 文件-> 首选项-> 设置->用户->文本编辑器->文件 右侧添加项: "*.js": "javascriptreact" 或者在配置文件settings.json 中搜索 files.associations ,里面添加 "*

使用Electron打造跨平台桌面应用

前言 早期桌面应用的开发主要借助原生 C/C++ API 进行,由于需要反复经历编译过程,且无法分离界面 UI 与业务代码,开发调试极为不便。后期出现的 QT 和 WPF 在一定程度上解决了界面代码分离和跨平台的问题,却依然无法避免较长时间的编译过程。近几年伴随互联网行业的迅猛发展,尤其是 NodeJS、Chromium 这类基于 W3C 标准开源应用的不断涌现,原生代码与 Web 浏览器开发逐步走向融合,Electron 正是在这种背景下诞生的。 electron Electron 是由 Github 开发,通过将Chromium和NodeJS整合为一个运行时环境,实现使用 HTML、CS

react入门示例,最简单的页面使用 react

如何引用react 单页面直接使用react.js文件很简单,只需要像引入普通js文件一样,通过script标签引入即可 <script src="https://unpkg.com/react@16/umd/react.development.js"></script> <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> <script src="https://unpkg.com/babel-standalone@6.1

go 语言中的 Timers Tickers 的使用

go语言中的 Timers 和 Tickers go语言中对某段业务逻辑在未来某一时刻执行或以一定时间间隔周期性执行的需求提供了支持; timer 可以在未来某一时间发生; ticker 可以指定时间间隔周期发生. Timers的使用 Timer表示在未来某一刻执行仅一次的事件 一旦时间到达预设时期,触发程序执行并且 timer 会调用 Stop() 函数停止再次运行. /* * @Author: your name * @Date: 2021-01-14 16:29:13 * @LastEditTime: 2021-01-14 17:03:54 * @LastEditors: P

react , vue 的实现原理比较

react vue 相同点 以虚拟dom和diff算法为核心,通过操作数据来操作dom。 虚拟dom将2次数据改变的dom树结构生成2个js对象,以diff算法比较2个对象的异同点,若相同,则不更新dom; 若遍历到某一个节点时,发现异同点,则停止diff算法,更新该节点的所有子节点的dom结构. 1,都是用了Virtual DOM。 2,都提供了响应式和组件化的视图组件。 3,都将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关库。 react vue 不同点 vue通过getter、setter监听数据数据变化,react通过比较引用的方式监听数据变化,需要使用Pure

使用 IDEA 创建java项目

什么是 IDEA IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境; IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的; IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主; 它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java,Kotlin等少数语言. 如何安装 IDEA 破解版 本文有

强大的java 开发IDE idea 2018 mac版 破解版本 百度网盘下载

下载地址 百度网盘链接: https://pan.baidu.com/s/1TvMYmO0BvKE-tr-VMRkyTg 密码: gpot 打开镜像文件 打开dmg镜像文件,将“IntelliJ IDEA”拖入到“Applications”应用文件夹中进行安装; 安装完成不要运行 回到安装镜像文件的界面; 打开“Crack”文件夹,将文件夹目录下的“JetbrainsCrack.jar”复制到软件的安装目录下, mac默认目录为 【Application/IntelliJ IDEA.app/Contents/bin】 编辑idea.vmoptions文件 在【Application/In

vscode markdownlint插件让你的markdown更加规范 -- Rules规则提示信息

前言 我们在书写代码的时候, 经常会用到eslint来约束代码规范, 这样团队开发或者后期维护都省了很多烦恼. markdown书写时一样有这样的问题, 那么我们如何来约束markdown的书写规范呢. 今天介绍一款 vscode 的插件 markdownlint https://github.com/DavidAnson/markdownlint vscode 直接搜索安装插件 markdownlint 当你在vscode中书写markdown文本时,不符合规范的内容就会有黄色波浪线来提示及时修正. 语法规范提示内容 MD001 - Heading levels should only i

mac 安装jdk后 IDEA 配置jdk

下载安装jdk 官网去下载jdk: https://www.oracle.com/index.html 进入官网,按照如下步骤进行下载 本文以jdk11为例 选择下载 mac 版本 双击安装 配置环境变量 查看是否安装成功: java --version 显示如下,表示安装成功. $ java --version java 11.0.3 2019-04-16 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3

如何提升技术团队效率并宣泄负面情绪

工程师的效率差异 对工程师来说经常会有明显的效率差异,有时一天能搞定好几个模块,顺带加了好几个新的技能点,而有时一个简单的功能投入了两三天还和之前没什么区别。 虽然任务并不复杂,但忍不住会聊微信,刷微博,上QQ,即使硬着头皮去做,往往效率也不如意,甚至引入一些新的低级 Bug。 这个差异与技能水平和工作态度无关,在绝大多数工程师身上都会看到. 什么因素影响效率 执行力崩溃 当任务单一时大家的效率往往很高,集中精力一天的时间把登录模块写出来,这个对绝大多数同学没有太大的心理负担。 但是现实情况并不尽如人意,尤其创业公司前期; 需求不断变化,数据结构来回改动,人员紧张,正在开发一个紧急模块,线上

docker 实践:如何构建自己的镜像

创建自己的项目 我们用简单的 node.js web项目输出 helloworld 为例. 项目目录: npm start app.js 启动项目; app.js 代码 const Koa = require('koa'); const app = new Koa(); const main = ctx => { ctx.response.body = 'Hello World'; }; app.use(main); app.listen(3000); 编写dockerfile FROM node:8.4 COPY . /app WORKDIR /app RUN ["n

Devops实践:Docker 概述及基本使用

什么是Docker 如今的云计算就好比大货轮,docker就是集装箱,一个个封闭式的箱体可以堆放再货轮上,我们不关心箱体里装的是什么货物; 我们这实际开发中,不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,很麻烦,还会造成一些冲突. 比如IIS和Apache访问端口冲突,这个时候你就要隔离.net开发的网站和php开发的网站. 常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高. docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小

java 的内置类型

#内置数据类型 java语言提供了八种基本类型; 六种数字类型(四个整数型,两个浮点型); 一种字符类型,还有一种布尔型. byte: byte 数据类型是8位、有符号的,以二进制补码表示的整数; 最小值是 -128(-2^7); 最大值是 127(2^7-1); 默认值是 0; byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一; 例子:byte a = 100,byte b = -50。 short: short 数据类型是 16 位、有符号的以二进制补码表示的整数 最小值是 -32768(-2^15); 最大值是 32767(

java 中的 ArrayList 介绍

什么是 ArrayList ArrayList 类位于 java.util 包中; 是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素; 它继承了 AbstractList ,并实现了 List 接口. 语法格式 import java.util.ArrayList; // 引入 ArrayList 类 ArrayList<E> objectName =new ArrayList<>();  // 初始化 E为泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型 objectName:

brew install时一直卡在Updating怎么办

前言 当你通过brew安装软件的时候, 发现一只卡在Updating Updating Homebrew... 这个时候有俩种办法来应对 找国内的源Updating Homebrew brew install 时不要 update 切换国内的源 //替换brew源 cd "$(brew --repo)" git remote set-url origin https://mirrors.ustc.edu.cn/brew.git //替换homebrew-core.git cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core" gi

java 中 final 关键字的使用

final 保留字概述 final关键字在java中非常重要,它可以应用于类、方法以及变量; final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。 final 的含义 final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量; 一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误. final 定义的变量 凡是对成员变量或者本地变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫作final变量; final变量经常和static关键字一起使用

redis 缓存造成穿透怎么办

什么是redis 穿透 前面我们有一篇文章介绍了 redis 下的雪崩已经一些解决办法 redis缓存造成雪崩怎么办,点击查看 今天我们再来看下redis下的穿透是什么? 顾名思义:穿透就是把一个容器或者保护罩击穿. 当一个请求过来,我们会根据参数去匹配redis缓存数据; 如果没有找到缓存结果,我们才会接着去请求DB. 那么问题来了: 当成批的并发请求过来,同时去请求一个 redis 缓存中不存在的数据,会发生什么要的效果? 是不是想到了雪崩? 当缓存不能命中,说明我们要去DB上查找数据,而这个并发直接去打DB,真的有点雪崩的意思. 会出现什么要的效果,我们基本想到了. 为什么会有批量并

java 中 static 关键字的使用方法

static 概述 在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,只要程序在运行,那么这块内存就会一直存在; static 定义的类成员 可以直接访问 在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是用static修饰的成员可以通过类名加“.”进行直接访问. static 独立于类的其他成员 任何实例共享 static修饰的成员变量和成员方法独立于该类的任何对象; 它不依赖类

go 语言中的channel

channel Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。 它的操作符是箭头 <- ch <- v // 发送值v到Channel ch中 v := <-ch // 从Channel ch中接收数据,并将数据赋值给v (箭头的指向就是数据的流向) 就像 map 和 slice 数据类型一样, channel必须先创建再使用: ch := make(chan int) 类型 Channel类型的定义格式如下: ChannelType = ( "chan" | "ch

redis 如何造成缓存雪崩

什么是redis雪崩 redis 缓存在同一时间失效,导致请求直接从物理数据库中读取数据,而针对一些热门并发数据, 如果在同一时间缓存全部失效,导致并发过来,物理数据库承担不住大并发请求而导致系统崩溃,就是redis雪崩. 什么情景下会出现这种情况 比如微博热搜,app首页数据已经电商秒杀活动商品等等..... 而这些数据一般情况下是定时任务来创建redis缓存; 比如定时任务执行一次,把热门数据缓存起来,并且设置统一生效时间2小时; 而2小时后,正好面临一场秒杀活动; 我们试想一下, 2小时后的缓存全部失效,这时突然一个高并发请求进来,本来redis能抵抗80%并发请求,结果因为全部失效导

mac 版 IDEA 常用快捷键

Mac 键盘符号和修饰键 ⌘ ——> Command ⇧ ——> Shift ⌥ ——> Option ⌃ ——> Control ↩︎ ——> Return/Enter ⌫ ——> Delete ⌦ ——> 向前删除键(Fn + Delete) ↑ ——> 上箭头 ↓ ——> 下箭头 ← ——> 左箭头 → ——> 右箭头 ⇞ ——> Page Up(Fn + ↑) ⇟ ——> Page Down(Fn + ↓) ⇥ ——> 右制表符(Tab键) ⇤ ——> 左制表符(Shift + Tab) ⎋ —

react 到底符合mvvm模式吗

什么是mvvm模式 m => model 模型 ,也就是数据 v => view 视图, 也就是页面dom vm => view and model ,这可以理解成我们常说的 双向绑定, 视图可以影响数据(v -> m) ,数据也可以影响视图 (m -> v) 所以我们可以很明显的看到mvvm的特性 数据双向绑定 react 是什么 react 本身只是一个函数, ui = render(data) 一个 dom 拼接工具,把数据拼成新 dom 替换旧 dom . 这样看来 react 只有视图,连状态都不存在,更不会有双向数据绑定. react 结合状态管理

go 标准库 container list

list 个双链表(doubly linked list) 如何遍历链表, 其中 l 为 *List : for e := l.Front(); e != nil; e = e.Next() { //链表的每一个元素中通过Next()指针指向下一个元素,直至遍历完成 } 代码: package main import ( "fmt" "container/list" ) func main() { l := list.New() l.PushFront(1) l. PushBack(2) l. PushBack(3

java.lang.String 类定义的方法

char charAt(int index) 返回给定位置的代码单元。除非对底层的代码单元感兴趣, 否则不需要调用这个 方法。 int codePointAt( int Index) 5.0 返回从给定位置开始的码点。 int offsetByCodePoints(int startlndex, int cpCount) 5.0 返回从 startlndex 代码点开始, 位移 cpCount 后的码点索引。 int compareTo(String other) 按照字典顺序, 如果字符串位于 other 之前, 返回一个负数; 如果字符串位于 other 之 后, 返回一个正数; 如果两

浅谈 java 中的集合类 Collection

java中的集合类Collection Collection是最基本的集合接口; 一个Collection代表一组Object,即Collection的元素; 它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作: 添加、删除、清空、遍历(读取)、是否为空、获取大小等,如下语法. 语法 public interface Collection<E> extends Iterable<E> {} iterator接口 不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中

docker 构建镜像

docker 构建镜像 获取镜像 Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像 从 Docker 镜像仓库获取镜像的命令是 docker pull 格式 docker pull [选项] [Docker Registry 地址[:端口号]/] 仓库名[:标签] # 默认官方镜像库拉取,latest 标签 $ docker pull ubuntu # 指定版本标签 $ docker pull ubuntu:18.04 # 指定仓库域名(默认官方仓库) $ docker pull library/ubuntu # 第三方服务商或私有

html5的语义化标签

语义化标签 HTML 5的革新之一:语义化标签. 在HTML 5出来之前,我们用div来表示页面章节,但是这些div都没有实际意义。(即使我们用css样式的id和class形容这块内容的意义)。这些标签只是我们提供给浏览器的指令,只是定义一个网页的某些部分。但现在,那些之前没“意义”的标签因为因为html5的出现消失了,这就是我们平时说的“语义” 如上图那个页面结构没有一个div,都是采用html5语义标签. 但是也不要因为html5新标签的出现,而随意用之,错误的使用肯定会事与愿违; 所以有些地方还是要用div的,就是因为div没有任何意义的元素,他只是一个标签,仅仅是用来构建外观和结构

java 中的枚举类

模拟一个枚举类 日常我们遇到用一个静态类来定义常量 public class Weekday { public static final int SUN = 0; public static final int MON = 1; public static final int TUE = 2; public static final int WED = 3; public static final int THU = 4; public static final int FRI = 5; public static final int

java 中的 String , StringBuffer和StringBuilder的概述说明

定义 String是不可变字符 StringBuffer是可变的字符 StringBuilder也是可变的字符 StringBuffer和StringBuilder的区别 StringBuffer对象是线程安全的,这意味着StringBuffer对象可以同时被多个并行线程修改,因为它所有的方法都被声明为"synchronized(同步)"; StringBuilder类是JDK1.5版引入的非线程安全的类,这意味着它的所有方法都是非同步方法; 因此,在单一模型的应用中,我们应该使用StringBuilder,这样对象不会有锁定和解锁,这样性能就会增加; 如何选择Strin

MAC 环境下 java 开发IDE - IntelliJ IDEA 快捷键

Mac键盘符号和修饰键说明 ⌘ Command ⇧ Shift ⌥ Option ⌃ Control ↩︎ Return/Enter ⌫ Delete ⌦ 向前删除键(Fn+Delete) ↑ 上箭头 ↓ 下箭头 ← 左箭头 → 右箭头 ⇞ Page Up(Fn+↑) ⇟ Page Down(Fn+↓) Home Fn + ← End Fn + → ⇥ 右制表符(Tab键) ⇤ 左制表符(Shift+Tab) ⎋ Escape (Esc) 编辑 Control + Space 基本的代码补全(补全任何类、方法、变量) Control + Shift + Space 智能代码补全(过滤器方法列

java 中的 抽象方法 抽象类 和 接口有啥瓜葛

什么是java中的抽象方法 抽象方法是一种特殊的方法: 它只有声明,而没有具体的实现 例如: abstract void eat(); 上面定义了一个方法 eat() ,有修饰关键词 abstract ,而且只有方法签名,没有方法的具体实现, 这就是一个java中的 抽象方法. 我们可以看到关键词 abstract 前面再没有任何修饰关键词 [ public , protected 或者 private ] 为什么不能有修饰关键词,我们留到下面再讲. 什么是java中的抽象类 一个类含有抽象方法,则称这个类为抽象类 抽象类必须由关键词 abstract 修饰; 我们来看一个抽象类的示例:

java 中的块级作用域

什么是java中的块级作用域 一对大括号括起来的代码区域叫做一个块级作用域; {...} 在块级中定义的变量被称作局部变量; 局部变量的生命周期:从被定义的位置开始,到本块结束. 注意事项 一个块可以嵌套在另一个块中 子块可以访问父块中的变量的 父块不能访问子块的变量 子块不能定义与父块同名的变量 在不嵌套的块中可以定义同名的变量; public class com.yijiebuyi { public static void main(String args[]) { { int k = 1;

关于区块链中的哈希算法

什么是哈希算法 区块链中每个区块都有一个唯一的哈希标识,被称为区块哈希,区块通过记录上一个区块的哈希来指向上一个区块. 这里说说的哈希算法,又称散列算法,它是一个单向函数,可以把任意长度的输入数据转化为固定长度的输出. 我们对下面的字符串求哈希值: 采用SHA-256算法: yijiebuyi.com f4353d56fc3482fe1acd7456b7431acc9dbaa252a82dc1293161ab4fd26368e5 yijiebuyi.com bea4b45352c6101f2c2a7d47ec024b3d7c50a72e38e611b5b3c0d9d33b904983 上

docker 的使用场景

概述 容器技术对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此称为容器。 Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。 使得 Docker 技术比虚拟机技术更为轻便、快捷。 通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用级别的一次封装,到处运行 docker 组成 镜像 Image 容器 Container 仓库 Repository 镜像 Image Docker 镜像是 一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还

remarkable搭配markdown-toc自动生成博文目录

前段时间写过一篇关于showdown和showdown-toc插件自动生成目录的博客 ⬅️点击查看 为什么要改进 showdown-toc作为专门为showdown开发的 toc 插件,搭配使用都非常方便 安装showdown ,showdown-toc toc插件集成到showdown代码中 const Showdown = require('showdown'); const showdownToc = require('showdown-toc'); const showdownHighlight = require("showdown-highlight"); const to

markdown编辑器如何自动生成目录 showdown toc插件的使用

markdown如何转化成html markdown 文本转化成 html 成熟的工具有不少, node 开源库中有 markdown-it showdown markdown-to-html marked markdown 上面的工具各有优势,自行google开源地址,找到一款最适合自己的. 本人博客一直是markdown编辑器撰写, 然后,一直再琢磨如何通过标题来自动生成内容目录, 造轮子的事情还是留给大牛们, 我们能把轮子使用好也是对大牛们的敬仰和支持. markdown-it 介绍 开源地址: https://github.com/markdown-it/markdown-it

node.js Express 中间件是如何实现的呢

什么是node.js 的中间件 在整个web请求的生命周期中, 客户端request 过来一个请求, 接着服务器端做出响应处理, 最后response结果给客户端. 上面这个请求过程中,其中服务器端做出响应处理时,会有一系列处理单元,这些处理单元可以简单的理解成中间件. node.js中间件: 它泛指一种设计模式、一系列的处理单元、过滤器和处理程序; 以函数的形式存在,形成一个异步队列,来完成对数据的预处理和后处理; 它的优点在于灵活处理业务逻辑中的单元模块; 使用中间件我们用极少的操作就能得到一个插件,用最简单的方法就能将新的过滤器和处理程序扩展到现有的系统上. Express 中间件实现

java 语法的命名规范

项目名 命名规范 全部小写 如:yijiebuyi , helloworld package 包名命名规范 强烈推荐使用公司或机构的顶级域名为包名的前缀; 包名的前几个为固定名称, 如果是网站的话,采用网站的域名的反写; package 包名全部为小写字母,以符号(. )来分隔, 但是不能包含*号,具有实际的区分意义. 如: com.yijiebuyi.blog //博客系统 com.yijiebuyi.wechat //微信H5服务站 要求 有意义的名词 传达其用途 结合模块名来命名 使用范例 应用系统中经常应用分层,Dao层(数据库访问)、Service层(业务处理)、Web层(页

markdown基本语法介绍

Markdown是一种轻量级标记语言,创始人为約翰·格魯伯(英語:John Gruber)。 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档。 这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。[维基百科] markdown可以让你专心写作而摆脱排版的困扰. 一些常用语法要花几分钟时间来记住. 标题 一个#表示一级标题, 几个#号对应表示几级标题, 最多支持六级标题. 注:标准语法一般在#后跟个空格再写文字 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 效果: 一级标题

ssh 超时问题改善方案

ssh连接超时问题解决方案: 修改server端的 etc/ssh/sshd_config 配置 ClientAliveInterval 7200 #server每隔7200秒发送一次请求给client,然后client响应,从而保持连接 ClientAliveCountMax 30 #server发出请求后,客户端没有响应得次数达到30,就自动断开连接,正常情况下,client不会不响应 重启配置: service sshd reload $TMOUT系统环境变量 配置 sudo nano /etc/profile 在最后一行增加 export TMOUT=1800(单位秒) 保存并

通过 find 这终端查找文件

find命令搜索文件 find命令非常高效,并且使用简单. find命令来自unix,OS X和Linux系统同样支持该命令. find命令格式: ** find 文件路径 参数** 这用户目录下查找 查找文件名中包含 redis.conf 的文件 find ~ -name "redis.conf*" -name 是指定参数 redis.conf* *号匹配任意字符,说明以 redis.conf 开头的文件 指定文件目录下查找 在特定的文件夹中寻找特定的文件,比如 这 / 目录下查找 redis.conf开头的文件 find ~ -name "redis.conf*" m

一介布衣博客今天开始支持 markdown 编辑

博客经过几次改版,但是阅读性一直不太好,让人读起来比较累,分不清主次. 所以周末尝试把之前的百度编辑器换成了 markdown 编辑器,希望在阅读性方面有提升. 博客的几处改动 因为之前的博客是html格式,现在是 markdown 格式,所以在首页提取缩略内容的功能去掉了. 首页标题字号调小了 列表页标题下方增加了博客分类 内容页的渲染为了兼容以前的老博客,既可以渲染 html 博文,也可以渲染 markdown 博客. 代码视图变动 function(){ console.log('欢迎光临一介布衣博客'); } 单行代码视图 alert('一介布衣'); 关于mar

XtraFinder 让你的mac finder 更有特性扩展更人性

在使用mac 的时候,是不是常常遇到这样一种情况.你想创建一个文件,可是找不到入口.....如果你想再打开一个 finder ,该怎么办?在 finder 图标上右键, 新建 finder 窗口,如果想让它想 chrome 一样新建标签该多爽....那么今天推荐的这个插件可以满足你,而且免费哦.请自己用 google 百度一下 'XtraFinder'查看 XtraFinder 插件提供的扩展功能,根据自己的喜好随心设置.出自:XtraFinder 让你的mac finder 更有特性扩展更人性出自:XtraFinder 让你的mac finder 更有特性扩展更人性 =====下面开始进入

zsh 有哪些方便快捷的功能,提升shell输入体验 优点简介(不断补充)

这几天宅在家里享受胜利日的假期,连续2天下雨,出不去....无聊之时会玩一玩 zsh ,确实是个好东东,作为一个攻城狮的你,必须要去玩转一下.之前介绍了如何配置利用oh-my-zsh 来配置你的zsh 及 zsh 通过修改配置文件,皮肤模板来定制化属于你的shell上面的传送链接你可以直接点击查看 (这句话好像是废话,忽略吧)今天分享几个 zsh 使用小技巧:如果你不知道该如何使用 zsh ,那么你之前如何使用的 bash ,现在就怎么使用.没错,这就是一个技巧.zsh 360°无死角全兼容 bash ,之前怎么写,现在就怎么写. 这才叫酸爽!按 tab 键补全之前在 bash 环境下.如果我

pandoc markdown 生成pdf文档

今天和大家分享一个工具 pandocgithub地址:https://github.com/jgm/pandoc 它被称作是一款神器为什么这样说:标记语言经过一路发展,貌似从最初的复杂架构中渐渐的又回归到了简洁.不得不提的是 2004年发展起来的 markdown 语法,简洁清爽,非常受人欢迎,尤其是不会操作word的用户,不会书写html的用户,简直就是福音.但是问题来了, markdown 语法就算非常简洁,我潇潇洒洒写了5万字的小说,最后这个 md 文件如何变成 word文档(或许是受markdown 限制,打印问题,或者出版社要求) 或者如何变成一个pdf文档.......(关于mar

markdown 语法总结学习

markdown 这种轻量级编辑工具确实给像我这种不会排版的人带来很多亮点,你只需要注重你的内容书写即可,语法也非常简单,常用就是下面这几种,好记好使唤,简单归纳总结一下:文字:*斜体***加粗**_斜体___加粗__上面2种方式都适用.删除线 (像这样 ~~悲剧啊,我被删除了~~)链接:[一介布衣](http://www.yijiebuyi.com)Headers:从#到######表是\<h1>到\<h6>#This is \<h1>##this is \<h2>###### this is <h6>List:1. 1112. 2

html 元素中的 strong em i b 有什么区别

html中的加粗/加重 在网页制作过程中,难免要遇到针对文本的加粗,加重等情况. 但是html中有好几个可以把文本加粗加重的标签,尤其HTML5出现后, 我们常见的加粗/加重标签有: strong em i b strong strong 加粗加重显示, 要比 em 更加强调一些, 比如全文要突出的关键词, 可以让用户一眼就看到的重点内容, 它更加强调的是重要突出的关键词的内容,而不仅仅是针对样式上的加粗需求. strong 全局强调关键词 em em 默认斜体不加粗显示, 一般着重要表示的内容, 它字体没有 strong 粗黑, 所以一般用户不会一眼注意到em 标签的内容. em 局部

回到顶部