首页
在线工具
搜索
1
使用Metrics指标度量工具监控Java应用程序性能(Gauges, Counters, Histograms, Meters和 Timers实例)
2
如何将Virtualbox和VMware虚拟机相互转换
3
Jumpserver的MFA配置
4
Markdown正确使用姿势
5
Kuboard与KubeSphere的区别:Kubernetes管理平台对比
杂谈与随笔
工具与效率
源码阅读
技术管理
运维
数据库
前端开发
后端开发
Search
标签搜索
Angular
Docker
Phabricator
SpringBoot
Java
Chrome
SpringSecurity
SpringCloud
DDD
Git
Mac
K8S
Kubernetes
ESLint
SSH
高并发
Eclipse
Javascript
Vim
Centos
Jonathan
累计撰写
86
篇文章
累计收到
0
条评论
首页
栏目
杂谈与随笔
工具与效率
源码阅读
技术管理
运维
数据库
前端开发
后端开发
页面
搜索到
86
篇与
的结果
2016-09-27
随手记-为了保证实时一致需要使用强制事务
随手记-为了保证实时一致需要使用强制事务 事务相关原则 强制事务保证实时一致:为确保数据在任何时刻的一致性,对于一些关键场景需要使用强制事务来保障数据的实时准确性。 互联网强调最终一致:在互联网环境中,允许业务线在时间轴上的某个阶段数据和动作存在不一致情况,但最终必须保证数据的一致性。 第三方交互的消息机制:当与第三方系统进行交互时,务必采用消息机制作为中间层,以避免第三方系统的问题导致自身系统被拖垮。 消息中间件应用场景 大数据量请求扩展:主要用于减少系统中重要业务的压力,可处理大数据量请求。不过并非所有请求都适合用消息中间件异步处理,对于像ajax的主要业务且需要实时更新数据的情况,仍需采用同步方式。 特殊消息类型: 顺序消息:在一些业务场景中,如订单下单后通知出库信息,若消息顺序错误,可能导致报表统计数据不一致,所以需要保证消息顺序。同时存在后发消息先被消费的可能,因此要处理好顺序消息。 定时消息:按照设定的时间进行消息发送。 重复消息:当消费者未响应时,投递者会重复投递消息,例如气象系统通知消息。且要保证消息的幂等性,即无论消息投递多少次,都不会影响请求或数据的一致性,如订单通知始终只对应一条订单操作。 高并发场景:例如直播业务中更新粉丝数的操作,可利用消息中间件应对高并发情况。 消息中间件对比 RabbitMQ:其特点是放弃一定的吞吐量来保证数据一致性,当达到一定吞吐量时,可能需要进行特定的定制。 RocketMQ:目前已不再进行维护。 KafkaMQ:具有高吞吐量,但数据一致性表现不佳,存在数据丢失的风险。 DRDs(分布式关系型数据库服务) DRDs通过member_id来定位数据库,用于分布式数据库的管理和数据定位。 TXC(Taobao Transaction Construction) 数据库事务业务场景:由于单库存储在容量和性能上存在限制,TXC可用于解决分布式数据库事务相关问题,以满足业务需求。 分布式session处理:在分布式系统中,需要将session存放在redis中,以保证在不同节点间session的共享和一致性。 下订单业务示例 操作消耗差异:下订单操作中,insert操作消耗相对较低,而update操作消耗较高。在高并发情况下,为避免性能瓶颈,需要将update等操作进行异步化处理。 消息中间件与事务:消息中间件无法保证消息一定能发送成功,且本身不支持事务。但在分布式系统中,可通过半事务机制实现最终一致性。 半事务理解: 第一次理解:客户端以分布式、高并发的方式发送消息给消息中间件,而消费者(服务端)在消费消息时必须遵循事务规则(此理解可能存在错误)。 第二次理解:对于分布式事务,假设有两个存在先后顺序的事务,如事务1为消费10,事务2为增加10。通过消息中间件处理,事务1的消息发送给消息中间件后,消费者可消费事务1,但事务2必须在事务1执行完成后才能启动。 消费顺序:以双十一的下订单、付款、扣款流程为例,消费者必须按照事务的执行顺序,先消费下订单消息并提示用户下订单成功,接着处理付款消息并提示付款成功,最后进行扣款操作。按照这样的顺序逐步实现业务逻辑,以保证业务流程的正确和数据的一致性。
2016年09月27日
2016-09-19
Lombok 安装、入门 - 消除冗长的java代码
Lombok 安装、入门 - 消除冗长的java代码 前言 逛开源社区的时候无意发现的,用了一段时间,觉得还可以,特此推荐一下。lombok提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的java代码。特别是相对于POJO,光说不做不是我的风格,先来看看吧。 lombok的官方网址:http://projectlombok.org/ lombok其实到这里我就介绍完了,开个玩笑,其实官网上有lombok三分四十九秒的视频讲解,里面讲的也很清楚了,而且还有文档可以参考。在这里我就不扯太多,先来看一下lombok的安装,其实这个官网视频上也有讲到啦 lombok安装 使用lombok是需要安装的,如果不安装,IDE则无法解析lombok注解。先在官网下载最新版本的JAR包,现在是0.11.2版本,我用的是0.11.0。第一次使用的时候我下载的是最新版本的,也就是我现在用的0.11.0,到现在已经更新了两个版本,更新的好快啊...... 1. 双击下载下来的JAR包安装lombok 我选择这种方式安装的时候提示没有发现任何IDE,所以我没安装成功,我是手动安装的。如果你想以这种方式安装,请参考官网的视频。 2. eclipse / myeclipse手动安装 将lombok.jar复制到myeclipse.ini / eclipse.ini所在的文件夹目录下 打开eclipse.ini / myeclipse.ini,在最后面插入以下两行并保存: -Xbootclasspath/a:lombok.jar -javaagent:lombok.jar 重启eclipse / myeclipse lombok注解 lombok提供的注解不多,可以参考官方视频的讲解和官方文档。 Lombok注解在线帮助文档:http://projectlombok.org/features/index. 下面介绍几个我常用的lombok注解: @Data:注解在类上;提供类所有属性的getting和setting方法,此外还提供了equals、canEqual、hashCode、toString方法 @Setter:注解在属性上;为属性提供setting方法 @Getter:注解在属性上;为属性提供getting方法 @Log4j:注解在类上;为类提供一个属性名为log的log4j日志对象 @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法 @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法 下面是简单示例 1. 不使用lombok的方案 public class Person { private String id; private String name; private String identity; private Logger log = Logger.getLogger(Person.class); public Person() { } public Person(String id, String name, String identity) { this.id = id; this.name = name; this.identity = identity; } public String getId() { return id; } public String getName() { return name; } public String getIdentity() { return identity; } public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public void setIdentity(String identity) { this.identity = identity; } } 2. 使用lombok的方案 @Data @Log4j @NoArgsConstructor @AllArgsConstructor public class Person { private String id; private String name; private String identity; } 上面的两个java类,从作用上来看,它们的效果是一样的,相比较之下,很明显,使用lombok要简洁许多,特别是在类的属性较多的情况下,同时也避免了修改字段名字时候忘记修改方法名所犯的低级错误。最后需要注意的是,在使用lombok注解的时候记得要导入lombok.jar包到工程。
2016年09月19日
2016-09-08
ESLint 安装与命令选项说明
ESLint 安装与命令选项说明 安装步骤 安装 node.js 环境,可上网百度 执行 npm i -g eslint 命令安装 eslint 安装完成后执行 eslint -f junit -o D:\report.xml D:\test\code\dwzy\com.sgcc.pms.dwzy.bzzx\face ESLint 相关命令选项说明 1. -c 此选项允许你指定 ESLint 的替代配置文件(更多信息请参阅配置 ESLint)。默认情况下,ESLint 使用位于 conf/eslint.json 的自有配置文件。 示例: eslint -c ~/my-eslint.json file.js 该例子使用 ~/my-eslint.json 这个文件替代默认的配置文件。 2. --env 此选项启用特定环境。有关每个环境定义的全局变量的详细信息,请参阅配置文档。此标志仅启用环境,不会禁用其他配置文件中设置的环境。要指定多个环境,请使用逗号分隔它们,或多次使用该标志。 示例: eslint --env browser,node file.js eslint --env browser --env node file.js 3. --ext 此选项允许你指定 ESLint 在搜索 JavaScript 文件时将使用哪些文件扩展名。默认情况下,它仅使用 .js 作为文件扩展名。 示例: # 仅使用 .js2 扩展名 eslint --ext .js2 # 同时使用 .js 和 .js2 eslint --ext .js --ext .js2 # 也可同时使用 .js 和 .js2 eslint --ext .js,.js2 4. -f, --format 此选项指定控制台的输出格式。可能的格式有 "stylish"(默认)、"compact"、"checkstyle"、"jslint-xml"、"junit" 和 "tap"。 示例: eslint -f compact file.js 你还可以通过指定自定义格式化器文件的路径从命令行使用自定义格式化器。 示例: eslint -f ./customformat.js file.js 指定格式后,给定格式将输出到控制台。如果你想将输出保存到文件中,可以在命令行上这样做: eslint -f compact file.js > results.txt 这会将输出保存到 results.txt 文件中。 5. --global 此选项定义全局变量,使其不会被 no-undef 规则标记为未定义。全局变量默认为只读,但在变量名后附加 :true 可使其可写。要定义多个变量,请使用逗号分隔它们,或多次使用该标志。 示例: eslint --global require,exports:true file.js eslint --global require --global exports:true 6. -h, --help 此选项输出帮助菜单,显示所有可用选项。当存在此选项时,所有其他标志都将被忽略。 7. --ignore-path 此选项允许你指定用作 .eslintignore 的文件。默认情况下,ESLint 在当前工作目录中查找 .eslintignore。你可以通过提供不同文件的路径来覆盖此行为。 示例: eslint --ignore-path tmp/.eslintignore file.js 8. --no-color 禁用管道输出中的颜色。 示例: eslint --no-color file.js 9. --no-eslintrc 禁用使用 .eslintrc 和 package.json 文件中的配置。 示例: eslint --no-eslintrc file.js 10. --no-ignore 禁止从 .eslintignore 和 --ignore-path 文件中排除文件。 示例: eslint --no-ignore file.js 11. -o, --output-file 启用将报告写入文件。 示例: eslint -o ./test/test.xml 指定后,给定格式将输出到提供的文件名中。 12. --plugin 此选项指定要加载的插件。你可以省略插件名称中的前缀 eslint-plugin-。在使用插件之前,你必须使用 npm 安装它。 示例: eslint --plugin jquery file.js eslint --plugin eslint-plugin-mocha file.js 13. --quiet 此选项允许你禁用警告报告。如果启用此选项,ESLint 只报告错误。 示例: eslint --quiet file.js 14. --reset 此选项关闭 ESLint 默认配置文件(位于 conf/eslint.json)中启用的所有规则。ESLint 仍会报告语法错误。 示例: eslint --reset file.js 15. --rule 此选项指定要使用的规则。它们将合并到之前定义的任何规则中。要重新开始,只需与 --reset 标志组合使用。要定义多个规则,请使用逗号分隔它们,或多次使用该标志。使用 levn 格式来指定规则。如果规则在插件中定义,则必须在规则 ID 前加上插件名称和 /。 示例: eslint --rule 'quotes: [2, double]' eslint --rule 'guard-for-in: 2' --rule 'brace-style: [2, 1tbs]' eslint --rule 'jquery/dollar-sign: 2' 16. --rulesdir 此选项允许你指定第二个目录,从中加载规则文件。这允许你在运行时动态加载新规则。当你有不适合与 ESLint 捆绑在一起的自定义规则时,这很有用。 示例: eslint --rulesdir my-rules/ file.js 自定义规则目录中的规则必须遵循与捆绑规则相同的格式才能正常工作。你还可以通过包含多个 --rulesdir 标志来指定自定义规则的多个位置: eslint --rulesdir my-rules/ --rulesdir my-other-rules/ file.js 17. --stdin 此选项告诉 ESLint 从 STDIN 而不是文件读取和检查源代码。你可以使用它向 ESLint 传输代码。 示例: cat myfile.js | eslint --stdin 18. -v, --version 此选项将当前 ESLint 版本输出到控制台。存在此选项时,所有其他选项都将被忽略。
2016年09月08日
2016-09-06
Centos rm -rf恢复删除的文件
centos rm -rf恢复删除的文件 Linux有时候执行了rm -rf等操作误删了文件绝对是一件可怕的事情,好在有一些解决的办法可以临时救急。这时我们就要用到一款叫做extundelete的工具了。 Linux下执行rm并不会真正删除,而是将inode节点中的扇区删除,同时释放数据块。在数据块被系统重新分配前,这部分数据还是可以找回来的。 网上说在删除文件后要立即unmount这个分区,这样做其实是为了让外界不再写入,我们也可以设置为readonly模式代替。当然,如果为了不影响其它应用的运行,也可以不做unmount。 好的,现在就该神器extundelete上场了。以CentOS6.5为例 依赖 yum -y install e2fsprogs e2fsprogs-libs e2fsprogs-devel 安装 wget http://jaist.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 tar jxvf extundelete-0.2.4.tar.bz2 cd extundelte-0.2.4 ./configure make; make install 查找要恢复的驱动器名 df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 495844 64150 406094 14% /boot 运行恢复 默认恢复到当前目录下的RECOVERED_FILES目录中去 恢复单个文件 extundelete /dev/sdb1 --restore-file hosts 恢复一个目录 extundelete /dev/sdb1 --restore-files test/ 恢复整个分区 extundelete /dev/sdb1 –-restore-all 这个工具貌似支持EXT4文件系统,经过实际测试,restore-all比较好用,在初次删除后可以很好的恢复文件及目录结构,但是如果我在相同位置新建了相同的文件名或者目录名,就会恢复失败(找不到了)。而恢复单独的文件或者目录则没有成功,如果有成功的可以告诉我。
2016年09月06日
2016-08-25
chrome-viminum快捷键
网页导航 基本滚动操作 j:向下滚动网页 k:向上滚动网页 h:向左滚动 l:向右滚动 gg:滚动到网页头部 G:滚动到网页底部 PageUp:向上翻一页 PageDown:向下翻一页 End:向下翻到底部 网页操作 r:刷新网页 gf:查看网页源码 zi:放大 zo:缩小 yy:复制当前网址 i:进入插入模式 f:进入链接提示模式,按下所有链接及输入框都被索引,链接是在当前网页打开。 F:进入链接提示模式,按下所有链接及输入框都被索引,链接是在新标签网页打开。 /:进入查找模式 n:转到下一个搜索到的字符串 N:转到上一个搜索到的字符串 历史导航 H:返回上一页 L:前进到下一页 标签操作 K,gt:向右移动一个标签 J,gT:向左移动一个标签 t:新建一个标签 d:关闭当前标签 u:恢复关闭的标签
2016年08月25日
1
...
14
15
16
...
18