Solo  当前访客:1 开始使用

CoderV的进阶笔记


Everybody wants go to heaven, but nobody wants to die.

存档: 2020 年 04 月 (5)

常见算法总结 - 数组篇

2020-04-30 10:10:12 valarchie
0  评论    0  浏览

1.给定一个数值在1-100的整数数组,请找到其中缺少的数字。

找到丢失的数字 利用byte数组的1或0标记该数字是否被删除,例如byte数组下标为0的数值为1的话,代表数字1存在

public static void findMissNumber1(int[] ints) {
        // 声明一个byte数组
        byte[] isExist = new byte[100];
        for (int i = 0; i < ints.length; i++) {
            // 由于数值比下标大1, 0位置其实代表的是数字1
            isExist[ints[i] - 1] = 1;

        }
        for (int i = 0; i < isExist.length; i++) {
            if (isExist[i] == 0) {
                System.out.println("删除的数字是:" + ++i );
            }
        }
}

我们可以利用1-100的总和为5050,我们依次减掉数据内的所有值,得到的差值即为删除的值

public static void findMissNumber2(int[] ints) {
        int sum = 5050;
        for (int i = 0; i < ints.length; i++) {
            sum -= ints[i];
        }
        System.out.println("删除的数字:" + sum);
}

2.从数组中找出给定目标数字的两数组合。例如数组为{2, 3, 5, 7, 8, 9, 11, 14, 18},给定数字给17,那么数组内的3+14=17。

先利用Set存储对应的数字,然后再遍历数组,假设遍历到数字3的时候,检查set中是否存在(17-3)=14这个数字,如果存在的话,即存在这个组合。

public static void findPairNumber(int[] arrays, int target) {

        Set<Integer> existIntegers = new HashSet<>();
        for (int i = 0; i < arrays.length; i++) {
            existIntegers.add(arrays[i]);
        }
        for (int i = 0; i < arrays.length; i++) {
            if (existIntegers.contains(target - arrays[i])) {
                System.out.println("找到对应的数字组合:" + arrays[i] + "和" + (target - arrays[i]));
                // 去除掉已使用过的数字
                existIntegers.remove(arrays[i]);
            }
        }
    }

3.将数组进行反转。

只需要将数组按中间位置为对称轴进行位置交换即可

public static void reverseArray(int[] arrays) {

    for (int i = 0; i < arrays.length/2; i++) {

        int tmp = arrays[i];
        arrays[i] = arrays[arrays.length -1 - i];
        arrays[arrays.length -1 - i] = tmp;

    }

}

sysbench压测MySQL性能及优化 有更新!

2020-04-13 20:49:29 valarchie
0  评论    0  浏览

sysbench安装流程

下载
wget https://github.com/akopytov/sysbench/archive/master.zip
unzip安装
yum install unzip
解压
unzip master.zip
安装相关依赖
yum -y install  make automake libtool pkgconfig libaio-devel vim-common
yum -y install mysql-devel 
编译

进入之前解压后的文件夹

./autogen.sh
#如果不是yum安装的原文件地址的话,需要添加参数改
./configure 
make
make install

RR级别下update操作的是快照读还是当前读? 有更新!

2020-04-08 16:32:17 valarchie
0  评论    0  浏览

我们知道在RR级别下,重复的select操作,读取的值都会是一致的。即便在两次select操作的中间,有一个事务B修改了值,但是在事务A中select读取的值还是一致的。

那么如果是update操作呢?之前在网上看到一篇博客说RR级别下,CAS操作是没有意义的。因为version值在一个事务中都是一致不变的。于是我有了疑惑打算自己来验证一下。

验证想法

RR级别下update操作的是快照读还是当前读?

准备数据

准备了以下简单的表数据结构。

sidnamesexversion
1zhangsan00
2lisi10

Java工程师知识体系脑图 - 失眠无聊起来整理一波

2020-04-03 05:12:41 valarchie
0  评论    0  浏览

Java基础.png
计算机基础知识脑图.png

Hutool - 小而全的Java开发工具库推荐

2020-04-02 17:16:43 valarchie
0  评论    0  浏览

Hutool简介

Hutool是一款小而全的开源开发工具类库,在github上拥有将近一万九的star,基本上你能想到的开发当中常需要用到的小轮子,基本上都有具备。学习一下hutool工具包可以避免我们在平常开发中重复造轮子。这款hutool开源库,更新频率快,jar包小仅1.5Mb。对比其他同款类型的基础工具类库来说,是一大优势。因为其他同款类型的基础工具类库多多少少都有基于apache commons做了一些封装。

对于很多小型公司来说,公司内部并没有完善的基础工具类库,使用hutool可以节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务同时可以最大限度的避免封装不完善带来的bug。

hutool github地址

Hutool主要组件

模块介绍
hutool-aopJDK动态代理封装,提供非IOC下的切面支持
hutool-bloomFilter布隆过滤,提供一些Hash算法的布隆过滤
hutool-cache简单缓存实现
hutool-core核心,包括Bean操作、日期、各种Util等
hutool-cron定时任务模块,提供类Crontab表达式的定时任务
hutool-crypto加密解密模块,提供对称、非对称和摘要算法封装
hutool-dbJDBC封装后的数据操作,基于ActiveRecord思想
hutool-dfa基于DFA模型的多关键字查找
hutool-extra扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)
hutool-http基于HttpUrlConnection的Http客户端封装
hutool-log自动识别日志实现的日志门面
hutool-script脚本执行封装,例如Javascript
hutool-setting功能更强大的Setting配置文件和Properties封装
hutool-system系统参数调用封装(JVM信息等)
hutool-jsonJSON实现
hutool-captcha图片验证码实现
hutool-poi针对POI中Excel的封装
hutool-socket基于Java的NIO和AIO的Socket封装

hutool库的工具类非常全,一篇文章难以概括。以下就列举开发中常用到的工具类。

TOP