王文伟

Results 102 issues of 王文伟

http://seanlook.com/2016/05/27/mysql-pt-online-schema-change/ https://segmentfault.com/a/1190000005642807 https://help.aliyun.com/knowledge_detail/41734.html http://seanlook.com/2016/05/24/mysql-online-ddl-concept/ https://help.aliyun.com/knowledge_detail/41723.html

事务传播属性 ``` @Transactional(propagation=Propagation.REQUIRED) //如果有事务,那么加入事务,没有的话新建一个(不写的情况下) **默认** @Transactional(propagation=Propagation.NOT_SUPPORTED) //容器不为这个方法开启事务 @Transactional(propagation=Propagation.REQUIRES_NEW) //不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务 @Transactional(propagation=Propagation.MANDATORY) //必须在一个已有的事务中执行,否则抛出异常 @Transactional(propagation=Propagation.NEVER) //必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反) @Transactional(propagation=Propagation.SUPPORTS) //如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务. @Transactional(propagation=Propagation.NESTED) //如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。 @Transactional (propagation = Propagation.REQUIRED,readOnly=true) //readOnly=true只读,不能更新,删除 @Transactional (propagation = Propagation.REQUIRED,timeout=30)//设置超时时间 @Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)//设置数据库隔离级别...

Spring

效果如下 ![image](https://cloud.githubusercontent.com/assets/7789698/16605514/28534b6a-4362-11e6-8f1e-5c3f5d298f1e.png) 关于表设计,网上大部分人的设计是储存一个父评论id,采用自反递归查询 http://www.tracefact.net/Software-Design/Unlimited-comment-quote-using-recursion.aspx 我认为 1.这个父id可以按层次顺序存储所有父id,这样批量查询一次就行了。 2.可以在评论内容里面直接写入盖楼效果,展示的时候css控制就好了 3.闭包表 http://blog.jobbole.com/112315/

**数据库**:物理操作系统或其他形式文件类型集合。 **实例**:后台线程及一个共享内存组成。在系统表现上就是一个进程。 数据库和实例关系:一个数据库可能对应多个实例(集群),一个实例对应一个数据库。实例才是真正操作数据库文件的。 Mysql组成部分: - 连接池组件 - 管理服务和工具组件 - SQL接口组件 - 查询分析器组件 - 优化器组件 - 缓存组件 - 插件式存储引擎 - 物理文件 InnoDB 体系结构 后台线程: 1. Master Thread: 负责将缓冲池中数据异步刷新到磁盘,保证数据一致性,包括脏页的刷新、合并插入缓存(INSERT BUFFER)、UNDO页回收 2. IO...

1.utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。 2.修改mysql配置文件my.cnf(windows为my.ini) my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容: ``` [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' ``` 在mysql中执行: ``` set character_set_client...

数据库带来的并发问题包括: 1.丢失或覆盖更新。(幻像读) 2.未确认的相关性(脏读)。 3.不一致的分析(非重复读)。 详细描述如下: # 一.丢失更新 当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。 e.g.事务A和事务B同时修改某行的值, - 1.事务A将数值改为1并提交 - 2.事务B将数值改为2并提交。 这时数据的值为2,事务A所做的更新将会丢失。 解决办法:对行加锁,只允许并发一个更新事务。 # 二.未确认的相关性(脏读) 当第二个事务选择其它事务正在更新的行时,会发生未确认的相关性问题。第二个事务正在读取的数据还没有确认并且可能由更新此行的事务所更改。 - 1.Mary的原工资为1000, 财务人员将Mary的工资改为了8000(但未提交事务) - 2.Mary读取自己的工资 ,发现自己的工资变为了8000,欢天喜地! - 3.而财务发现操作有误,回滚了事务,Mary的工资又变为了1000 像这样,Mary记取的工资数8000是一个脏数据。 解决办法:如果在第一个事务提交前,任何其他事务不可读取其修改过的值,则可以避免该问题。 # 三.不一致的分析(非重复读)  ...

MySql
Spring

# 什么是字节码? - 机器码 机器码(machine code)是CPU可直接解读的指令。机器码与硬件等有关,不同的CPU架构支持的硬件码也不相同。 - 字节码 字节码(bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件。字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。通常情况下它是已经经过编译,但与特定机器码无关。字节码主要为了实现特定软件运行和软件环境、与硬件环境无关。 字节码的实现方式是通过编译器和虚拟机器。编译器将源码编译成字节码,特定平台上的虚拟机器将字节码转译为可以直接执行的指令。 而在Java里,通过类加载器把字节码读入加载并转换成 java.lang.Class类的一个实例。 ## 类文件结构 一个编译后的类文件包含下面的结构: ``` ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info...

java基础

# Java跟踪利器---BTrace 地址:https://github.com/btraceio/btrace > BTrace 是基于动态字节码修改技术(Hotswap)来实现运行时 java 程序的跟踪和替换。大体的原理可以用下面的公式描述:Client(Java compile api + attach api) + Agent(脚本解析引擎 + ASM + JDK6 Instumentation) + Socket其实 BTrace 就是使用了 java attach api 附加 agent.jar ,然后使用脚本解析引擎+asm来重写指定类的字节码,再使用...

工具

http://blog.jobbole.com/24006/ # 索引区分度 > 区分度: 指字段在数据库中的不重复比 区分度在新建索引时有着非常重要的参考价值,在MySQL中,区分度的计算规则如下: > 字段去重后的总数与全表总记录数的商。 例如: ` select count(distinct(name))/count(*) from t_base_user; ` count(distinct(name))/count(*) -- 1.0000 其中区分度最大值为1.000,最小为0.0000,区分度的值越大,也就是数据不重复率越大,新建索引效果也越好,在主键以及唯一键上面的区分度是最高的,为1.0000,在状态,性别等字段上面的区分度值是最小的。 (这个就要看数据量了,如果只有几条数据,这时区分度还挺高的,如果数据量多,区分度基本为0.0000。也就是在这些字段上添加索引后,效果也不佳的原因。) 值得注意的是: 如果表中没有任何记录时,计算区分度的结果是为空值,其他情况下,区分度值均分布在0.0000-1.0000之间。 个人强烈建议, 建索引时,一定要先计算该字段的区分度,原因如下: 1、单列索引 可以查看该字段的区分度,根据区分度的大小,也能大概知道在该字段上的新建索引是否有效,以及效果如何。区分度越大,索引效果越明显。 2、多列索引(联合索引) 多列索引中其实还有一个字段的先后顺序问题,一般是将区分度较高的放在前面,这样联合索引才更有效,例如: `select...

MySql

# transient 如果一个对象实现了Serilizable,如果你想排除某些属性的序列化,就在改变量钱加上transient 如private transient Thread exclusiveOwnerThread; # volatile 一个很通俗的解释 http://www.importnew.com/18126.html > 在一个多线程应用里面,如果没有使用volatile修饰变量,为了性能,每个线程可能会从内存拷贝变量到cpu。如果你的电脑是多核,每个线程跑在不同的cpu里面。这意味着,每个线程可能会把同一个变量拷贝到不同cpu的cpu缓存里面。 > ![](http://tutorials.jenkov.com/images/java-concurrency/java-volatile-1.png) 假如现在有多个线程使用下面这个类 ``` public class SharedObject { public int counter = 0; } ``` 假如线程1对counter增加,线程2只是偶尔读取。 如果该变量没有声明为volatile,就可能发生,这个值没有被写回内存,线程2读到的还是原来的值。...

java基础