- 博客(46)
- 资源 (1)
- 收藏
- 关注
原创 对InnoDB引擎中Doublewrite作用的理解
doublewrite(两次写)技术解决了InnoDB存储引擎的数据页没写完整导致的数据损坏问题。本文尝试说明为何redo log不能解决该问题,以及为何doublewrite技术可以解决该问题。
2024-04-21 22:55:43 281
原创 Redis持久化 - 应用篇
与传统数据库不同,Redis把所有数据存储在内存中,虽然存储在内存中提升了Redis服务的性能,但内存中的所有数据在系统断电之后就会丢失,为此Redis提供了RDB、AOF、RDB-AOF混合等多种持久化功能。当然,用户也可以关闭持久化功能,让服务器处于无持久化的状态。
2024-02-29 18:20:43 833
原创 从业务应用开发者的角度优化MySQL性能
MySQL的性能优化包括操作系统和硬件优化、MySQL服务配置优化、合理的表结构设计和索引设计、查询优化等等,其中业务应用开发者能做的主要在表结构、索引、查询三个方面,以下对这三个方面的优化思路做简单介绍。
2024-02-23 23:25:04 689 1
原创 如何使用Kafka可靠地发送消息-《Kafka权威指南(第二版)》阅读笔记
可靠性是系统而不是某个独立组件的一个属性,所以,在讨论Kafka的可靠性保证时,需要从系统的整体出发。说到可靠性,那些与Kafka集成的系统与Kafka本身一样重要。正因为可靠性是系统层面的概念,所以它不只是某个个体的事情。Kafka管理员、Linux系统管理员、网络和存储管理员,以及应用程序开发者,所有人必须协同作战才能构建出一个可靠的系统。
2023-02-26 17:55:54 516 2
原创 cnpm : 无法加载文件 C:\Users\azhao\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本 问题解决
cnpm作为npm在国内的镜像,安装模块的速度要快上很多。在安装好cnpm并执行cnpm -v时,提示如下错误:解决方案如下:1.打开Windows PowerShell,以管理员身份运行;2.输入命令set-ExecutionPolicy RemoteSigned更改执行策略3.出现提示时,输入Y执行完成后,回到命令行重新执行npm -v,已经可以正常执行了。...
2022-04-16 12:04:49 476
原创 《领域驱动设计》笔记
# 领域驱动设计## 第一部分:运用领域模型### 第一章 消化知识* 有效建模的要素 * 模型和实现的绑定 * 建立了一种基于模型的预言 * 开发一个蕴含丰富知识的模型 * 提炼模型 * 头脑风暴和实验* 知识消化 * 研发人员和领域专家一起参与领域知识的消化,不断重塑模型,最终获得一组适用于所有细节的抽象概念* 持续学习 * 高效的团队需要有意识地积累知识,并持续学习。对于开发人员来说,这意味着既要完善技术知识,也要培养一般的领域建模技巧...
2021-02-28 22:55:32 170
转载 Push dev to origin/dev was rejected by remote
最近在 push 代码到 github 时,IDEA报错Push rejected: Push to origin/master was rejected在网友找了一圈,发现都不是想要的答案于是在命令行敲了一遍 git push,报错信息如下remote: error: GH007: Your push would publish a private email address....
2020-02-29 23:13:23 15695 1
原创 java.lang.RuntimeException: Can't start redis server. Check logs for details.
今天在做应用的单元测试时,遇到一个使用embedded-redis的问题,记录如下:在启动单元测试时,本地的redisServer启动失败,异常栈信息如下:java.lang.RuntimeException: Can't start redis server. Check logs for details. at redis.embedded.AbstractRedisInsta...
2019-06-27 22:10:45 5641 2
原创 Bridge(桥接)模式
一、目的将抽象部分与它的实现部分分离,使它们都可以独立地变化。二、背景现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体...
2019-06-15 00:15:55 6926
原创 Adapter(适配器)模式
一、定义将一个的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。二、背景有时,为复用而设计的工具类不能被复用的原因恰恰是因为它的接口和专业领域现有的接口不匹配。如果遇到了接口无法兼容的问题,我们可以改掉工具类的接口使之适应于现有的接口,但前提是你拥有修改工具类的权限;即使你拥有的修改工具类源代码的权限,我们仅仅为了一个应用就...
2019-06-03 22:39:08 406
原创 设计模式
最近在重构现有系统的代码,其中有不少地方都用到了设计模式。虽然之前也看过一些设计模式相关的书籍,但总感记忆模糊,因此最近又重温了GOF的23种设计模式。GOF把设计模式分为三大类,分别是创建性模式、结构型模式和行为模式。接下来一段时间我将一一对这些模式做整理和学习,并分享在博客中。一、创建型模式Abstract Factory(抽象工厂)模式 Builder(生成器)模式 Fact...
2019-06-03 22:36:20 113
原创 FullGC触发条件和解读GC日志
前几天在做功能压测时发现应用在启动时出现了4次Full GC,并且当时还没有开始压测,当时排查了很长时间,最终发现是犯了一个低级错误,本想配置-Xss256k的,结果把-XX:MetaspaceSize配置成了256k。o(╥﹏╥)o本着不在同一块儿石头上绊倒两次的原则,又系统了学习了一下Full GC的触发条件和如何查看GC日志。简单来说有如下几种情况会触发gc1.调用System....
2019-04-21 18:40:20 9753 2
原创 Spring Boot功能简介及简单的应用搭建(附带源码)
Spring Boot是一个用于简化Spring应用搭建和开发的框架,它提供了四个主要特性,能够改动开发Spring应用程序的方式:1.Spring Boot Starter:它将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中;Spring Boot Starter的实现原理不复杂,主要是利用Maven和Gradle的依赖传递方案...
2019-03-24 21:28:12 240
原创 如何更好对系统进行测试
TDD(测试驱动开发)的三项法则: 在编好失败单元测试之前,不要编写任何产品代码。 只要有一个单元测试失败了,就不要再写测试代码;无法通过编译也是一种失败情况。 产品代码恰好能够让当前失败的单元测试成功通过即可,不要多写。 测试代码的一个问题是必须隔离出待测试的代码。如果一个函数调用了其他函数,单独测试它通常会比较困难。为了编写测试,你必须找出将这个函数和其他函数解耦...
2019-03-21 23:20:25 2268
原创 限流算法
常见的限流算法有:令牌桶、漏捅。计数器也可以用来进行粗暴限流实现。1.令牌桶算法:是一个存放固定容量令牌的桶,按照固定速度往桶里添加令牌。令牌桶算法的描述如下。 假设限流2r/s,则按照500毫秒的固定速率往桶中添加令牌; 桶中最多存放b个令牌,当桶满时,新添加的令牌被丢弃或拒绝; 当一个n个字节大小的数据包到达,将从桶中删除n个令牌,接着数据包被发送到网络上。 ...
2019-03-21 23:13:18 121
原创 volatile变量使用姿势
Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。在访问volatile变量时不会执行加...
2019-03-21 23:11:37 209
原创 如何合理设置Java线程池大小
《Java并发编程实战》一书中,Brian Goetz和合著者们为线程池大小的优化提供了不少中肯的建议。这非常重要,如果线程池中线程的数量过多,最终它们会竞争稀缺的处理器和内存资源,浪费大量的时间在上下文切换上。反之,如果线程的数目过少,正如你的应用所面临的情况,处理器的一些核可能就无法充分利用。Brian Goetz建议,线程池大小与处理器的利用率之比可以使用下面的公式进行估算:Nt...
2019-03-21 23:07:57 1348
原创 /bin/bash^M: bad interpreter: No such file or directory
错误原因之一可能是你的脚本文件是DOS格式的。我们需要先查看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的vi filename:set ff?接下来可以看到dos或unix的字样;如果是dos格式, 用set ff=unix把它强制为unix格式的,然后存盘退出,再运行。
2017-02-06 12:27:17 385
原创 Linux下的压缩命令
压缩文件:tar -zcv -f filename.tar.gz 要被压缩的文件或目录查看解压文件:tar -ztv -f filename.tar.gz解压文件:tar -zxv -f filename.tar.gz -C 要解压的目录
2017-01-08 23:36:39 307
原创 利用redis实现的分布式锁
假设一个场景:在分布式系统中,通常会遇到多个服务器处理同一个业务的场景,我们需要利用某种机制避免并发问题。Java语言中,我们可以通过锁的方式避免单个服务的多线程并发问题,而分布式系统中的并发问题用Java的锁机制是很难解决的。分布式锁也有类似地“首先获取锁, 然后执行操作,最后释放锁”的动作,为了解决分布式系统的并发问题,我们可以使用redis实现一个跨机器的分布式锁。下面先看r
2016-09-15 23:33:11 8374 2
原创 Cannot use Jedis when in Multi. Please use Transation or reset jedis state.
使用jedis的transaction时,执行如下代码会报异常:Jedis conn = new Jedis("localhost");conn.select(0);Transaction trans = conn.multi();conn.hdel("count:" + counter, pair.getKey() + "");trans.exec();异常如下:
2016-08-30 23:27:58 6930
原创 Java的类加载步骤
1、Java虚拟机(JVM)和类的关系在Java中,启动某个Java程序时,会启动一个JVM进程,无论Java程序多么复杂,是单线程还是多线程,它们都是在JVM进程中运行的。在不同的JVM中运行的同一个类是不同的,两个JVM进程之间并不会共享数据,所有的JVM内存共享都是指同一个JVM内存共享。public class JVMTest { public static void m
2016-05-05 17:57:19 785
原创 使用IntelliJ IDEA开发Java Web项目时,修改了JSP后刷新浏览器无法及时显示修改后的页面
使用IntelliJ IDEA开发Java Web项目时,修改了JSP后刷新浏览器无法及时显示修改后的页面?解决办法:tomcat配置中,On frame deactivation属性选择Update classes and resources即可。
2016-05-04 22:56:05 38749 10
原创 Strnig str = new String("123");究竟创建了几个String对象?
今天在面试的时候被问到标题上的问题,今天回来看了Java API中关于String对应构造方法的文档描述,如下:初始化一个新创建的,和参数的字符序列相同的String对象,换句话说,新创建的String对象是传入的String类型参数的副本。由于String对象是不可变的,因此除非需要一个显式的字符串对象副本,否则无需使用该构造方法。通过new String(String original
2016-05-03 21:50:58 1802
原创 JavaScript中创建对象的几种方式
一、工厂模式创建对象function createPerson(name,age,job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayHello = function(){ alert("Hello,my name is " + this.name + " and i am " + t
2015-08-26 22:31:40 522
原创 Oracle数据库实例间的连接—link
工作中使用的是Oracle数据库。今天在工作中遇到正式库的表数据缺失的问题,这些缺失的数据需要从另外一个数据库实例的表中获取数据来补全,但是由于是两个数据库实例之间的数据迁移,之前没有遇到过,刚好最近又在学习Oracle数据库,于是便在网上学习了一些方式,其中的一种方式便是,利用数据库实例的连接来实现不同数据库实例中的数据迁移。现总结如下:当前我的Oracle数据库上只有一个数据库实例即O
2015-07-15 22:33:48 3197
原创 Oracle未选定行的问题
在Oracle10g的SQL*Plus中输入select table_name from all_tables where owner='scott';查询某个用户下有多少表的时候,按下回车键会报未选定行的问题。原因是大小写输入不正确,改为select table_name from all_tables where owner='SCOTT';即可。
2015-07-11 23:01:36 25013 2
转载 常用SQL语句
查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>s
2015-07-11 22:45:47 440
原创 JavaScript的原型问题
在JavaScript中,我们创建的每一个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途则是包含可以由特定类型的所有实例所共享的属性和方法。如下面的例子。function Apple(){}Apple.prototype.name = "阿克苏";Apple.prototype.color = "red";Apple.prototype.sa
2015-06-06 16:18:35 782
原创 JavaScript中对象的创建方式
面向对象的语言有一个标志,那就是都有类的概念,通过类可以创建任意多个具有相同属性和方法的对象。在JavaScript中,没有类的概念,因此JavaScript中的对象和基于类的语言中的对象也是不同的。在JavaScript中,对象是“无序属性的集合,其属性可以包含基本值、对象或者函数”。对象本质是值,就是一组没有特定顺序的值。其中值可以是数据,也可以是函数。每个对象都是基于一个引用类型
2015-06-06 13:52:25 1085
原创 Spring异常:org.xml.sax.SAXParseException: cvc-complex-type.2.4.c
本人使用的spring版本是spring-framework-4.0.0,在配置文件中使用util:property-path标签时,在配置文件的beans标签中添加xmlns:util="http://www.springframework.org/schema/util"字符片段以后运行程序,发现报如下错误:Exception in thread "main" org.springfr
2015-05-03 18:27:44 3705
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人