- 博客(122)
- 收藏
- 关注
原创 Linux环境下搭建mysql并配置主从服务器
本文主要介绍使用tar包的方式安装mysql5.7版本,并且配置至少一主一从的主备服务器。1.下载mysql下载网址: https://dev.mysql.com/downloads/mysql/博主选择的是5.7.27社区版的64位mysql,各位可以按照自己的需求自行下载。2.安装mysql最好的安装位置是/usr/local,因为mysql有很多配置的默认的这个位置,放在这里会避免很多不必要的麻烦,当然你也可以安装在你需要的位置。我的本地环境是安装在此位置下,生产环境并不是。.
2020-11-06 14:54:22
648
原创 mybatis中 无效的比较: invalid comparison: java.util.Date and java.lang.String
invalid comparison: java.util.Date and java.lang.String无效的比较解决: 把mapper.xml中<if test="XXX !=null and XXX!=''"> XXX!=' ' 去掉就OK原因: 时间与空字符串比较是无效的的原因是mybatis中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串''进行对比判断则会引发异常. 所以在上面的代码中去该该判断, 只保留非空判断就正常了
2020-10-13 16:19:53
359
原创 java使用try-with-resources语句优雅的关闭资源
在Java编程过程中,如果打开了外部资源(文件、数据库连接、网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们。因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编程时确保在正确的时机关闭外部资源,就会导致外部资源泄露,紧接着就会出现文件被异常占用,数据库连接过多导致连接池溢出等诸多很严重的问题。在java1.7以前,我们关闭资源的方式如下:public class CloseTest { public static void main(String[] ar
2020-09-18 15:35:45
8002
原创 java8的时间函数
学习时间函数,我们先直接学习api。java8在线api:https://www.matools.com/api/java8先贴图:我们使用的时间函数,大部分都是出自于java.time这个包下,从Clock到ZoneOffset,基本上都是时间类型的抽象,而我们经常使用到的就是我圈起来的两个类。LocalDate和LocalDateTime。看api就知道,LocalDate只包含年月日,不包含时分秒,LocalDateTime可以到具体的时分秒。下面就使用LocalDateT
2020-09-17 16:12:50
1697
原创 linux的uniq命令
1.功能用于去除有序文件中的重复行并将结果输出到标准输出。uniq经常和sort合用,为了使uniq起作用,所有的重复行必须是相邻的。2.格式uniq [选项] [file]选项说明:-c,--count//在每行前加上表示相应行目出现次数的前缀编号 -d,--repeated//只输出重复的行 -D,--all-repeated//只输出重复的行,不过有几行输出几行 -f,--skip-fi...
2020-09-16 13:56:31
265
原创 linux的scp远程复制命令
1.scp是干什么的scp是 secure copy的缩写,也就是安全拷贝 scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令,是cp命令的加强版。2.命令详解用法: scp [可选参数] 源文件/目录 目标文件/目录常用的可选参数-P大写的,指定端口号 -r递归复制整个目录 -v显示所有 debug 信息 -q不显示传输进度 -C大写的,启用压缩 -4使用 IPv4 地址 -6使用 IPv6 地址本地复制到远程s...
2020-09-16 10:52:36
648
原创 linux的sort排序命令
sort是在Linux里非常常用的一个命令,是用来排序的一个命令。1.sort的工作原理sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出[root@qiangdalao shells]# cat seq.txtbananaapplepearorange[root@qiangdalao shells]# sort seq.txtapplebananaorangepear2 sort的-u选项作用
2020-09-15 21:15:45
828
原创 linux的wc统计命令
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。先查看linux里面的解释:1.命令格式wc[选项]文件...2.命令功能统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。3.命令参数-c统计字节数。 -m统计字符数。这个标志不能与-c标志一起使用。 -l统计行数。 -...
2020-09-15 09:55:29
695
原创 linux的gawk命令
1.awk 简介 awk 以记录和字段的方式来查看文本文件 和其他编程语言一样, awk 包含变量、条件和循环 awk 能够进行运算和字符串操作 awk 能够生成格式化的报表数据 2.awk 概述awk 程序 awk 命令、括在括号(或写在文件)中的程序指令以及输入文件的文件名几个部分组成。如果没有输入文件,输入则来自于标准输入。awk 指令由模式、操作或者模式与操作的组合组成。模式是由某种类型的表达式组成的语句。如果某个表达式中没有出现关键在 if ,.
2020-09-14 11:10:38
2258
原创 linux在VI和VIM命令下使用全局替换功能
linux在文本编辑的情况下,有时候需要使用全局替换功能,下面给出使用方法。在编辑模式下,使用 :%s/旧的字符串/新的字符串/g 就可以使用全局替换了。回车,发现已经替换了注意:有些关键字符串无法替换,需要使用转义符进行特殊标记。比如,文本里面的"/",则需要替换为"\/", "\"是一个转义符。...
2020-09-11 11:01:52
948
转载 redis集群搭建
redis5.0.4集群模式搭建:# redis-cli -a 123456 --cluster create 192.168.30.128:7001 192.168.30.128:7002 192.168.30.129:7003 192.168.30.129:7004 192.168.30.130:7005 192.168.30.130:7006 --cluster-replicas 1转载:https://blog.csdn.net/miss1181248983/article/details/
2020-09-10 15:09:38
106
原创 java中ReentrantLock类的tryLock的标准例子和用法
package Lock;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class LockDemo { .
2020-08-21 16:34:00
2160
原创 JAVA设计模式之模板方法设计模式(Template Method)
模板方法定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。实例场景:headfirst里面是这样的一个例子:在一个店里面,有2种饮料,它们的冲泡步骤是这样的:咖啡:把水煮沸,用沸水冲泡咖啡,倒进杯子,加糖和牛奶 茶:把水煮沸,用沸水浸泡茶叶,倒进杯子,加柠檬/** * 咖啡 */public class Coffee { /** * 准备 */ publ
2020-08-18 16:59:41
281
原创 JAVA设计模式之适配器模式(Adapter Pattern)
适配器模式定义:将一个类的接口,转换成客户期望的另外一个接口。适配器让原本接口不兼容的类可以合作无间。适配器模式UML图:对象适配器:使用对象组合,以修改的接口包装被适配者:这种做法还有额外的优点,那就是,被适配的任何子类,都可以搭配着适配器使用类适配器:对象适配器和类适配器的区别就是类适配器继承了Targt和Adaptee,而对象适配器使用组合的方式将请求传递给被适配者。实例代码:现在有两个类,一个鸭子,一个火鸡,如下所示:public interface
2020-08-17 18:03:50
580
原创 MySql报错:You can‘t specify target table ‘t‘ for update in FROM clause
工作中遇到一个需求,现在抽象出来,简单来说,就是一个update 语句的条件是需要用select查询语句查出来的,数据如下:需要更新p_id字段为主键id,一开始sql如下:UPDATE test.`user` t SET t.p_id = ( SELECT p.id FROM test.`user` p );直接报错:查询资料后,发现有解决办法,是在update的时候使用join连表(网上一大堆说在包一层select查询的不行),正确的sql如下:UPDATE test.
2020-08-14 11:14:45
513
原创 JAVA设计模式之装饰者模式(Decorator Pattern)
今天我们来学习一下装饰者模式。作为一名程序猿,相信许多人都跟我一样,在平时写代码的过程中,习惯使用继承。但是继承有时候会出现非常严重的问题,不过,没担心。装饰者模式将会给爱用继承的我们一个全新的设计眼界!一、星巴兹咖啡的故事 我们通过一个生动有趣的例子来引出我们今天的主角--装饰者模式。 1、现在呢,有一个咖啡馆,它有一套自己的订单系统,当顾客来咖啡馆的时候,可以通过订单系统来点自己想要的咖啡。他们原先的设计是这样子的: 2、此时、咖啡馆为了吸引更多的顾客,需要在订单系统中允许顾
2020-08-10 13:46:30
308
原创 JAVA设计模式之策略模式(strategy pattern)
编写鸭子项目,具体要求如下 :1)有各种鸭子(比如 野鸭、北京鸭、水鸭等)鸭子有各种行为,比如叫、飞行等等。2)显示鸭子的信息项目进度1:传统方案解决鸭子问题的分析和代码实现1)传统的设计方案(类图)public abstract class Duck { public Duck() {} // 显示鸭子信息 public abstract void display(); public void quack() { System.out.println(
2020-08-07 11:10:17
433
1
原创 传递对象依赖的三种方式
对象的依赖关系有三种方式来传递,如下所示:1.构造函数传递对象依赖关系在类中通过构造函数声明依赖对象,按照依赖注入的说法,这种方式叫做构造函数注入。public interface IDriver {//是司机就应该会驾驶汽车public void drive();}public class Driver implements IDriver{private ICar car;//构造函数注入public Driver(ICar _car){this.car = _car;
2020-08-04 18:17:32
1225
原创 偏向锁,轻量级锁及重量级锁的加锁和升级过程分析
说明:本文不探讨这些锁的原理,仅仅简单说明锁升级的流程锁的简单说明:偏向锁:偏向锁是JDK6中引入的一项锁优化,它的目的是消除数据在无竞争情况下的同步原语,进一步提高程序的运行性能。偏向锁会偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁没有被其他的线程获取,则持有偏向锁的线程将永远不需要同步。大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。轻量级锁轻量级锁提升程序同步性能的依据是:对于绝大部分的锁,在整个同步周期内
2020-07-15 13:45:11
1284
转载 ReentrantLock的原理和AQS的应用
转载中华石杉大神的文章[link]https://mp.weixin.qq.com/s/PAn5oTlvVmjMepmCRdBnkQ
2020-07-14 16:39:11
142
原创 java安全的发布一个对象
发布与逸出对象发布:"发布"一个对象的意思是指,使对象能够在当前作用域之外的代码中使用.例如:将一个指向该对象的引用保存到其他代码可以访问的地方,或者在某一个非私有的方法中返回该引用,或者将引用传递到其他类的方法中.发布一个对象最简单的方法是将对象的引用保存到一个公有的静态变量中,以便任何类和变量都能看见该对象.public class PublishDemo { public static Set<String> stringSet; public
2020-07-13 15:10:03
338
原创 wait()方法为什么要放在while循环里面(虚假唤醒 过早唤醒)
java在使用内置锁实现消费者-生产者模式的时候,可以使用wait,notify,notifyAll三个方法,而且这三个方法都是基类Object的方法,要调用某一个对象的同步方法时,必须将其放在sycronized修饰的方法、对象、代码块里面,你必须先持有对象上的锁,才能在某个条件下,修改其等待状态,下面给出了使用同步方法的标准代码模式:synchronized (obj) { while (<condition does not hold>竞态条件)
2020-07-08 17:21:59
3693
2
原创 ReentrantLock的三种获取锁Lock,tryLock,lockInterruptibly的区别
重入锁有三种获取锁的方式,本文就是来说明三种方式的异同点的.
2020-07-08 11:21:16
5772
原创 显示锁ReentrantLock和Lock的使用
Jdk1.5以后,Doug Lea大神添加了新的多线程的包,在java.util.concurrent.locks下,有一组实现线程同步的接口Lock和类ReentrantLock.ReentrantLock也是Lock接口的唯一实现类.Lock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,所有的加锁和解锁方法都是显示的.public interface Lock { // 用来获取锁,如果锁已经被其他线程获取,则一直等待,直到获取到锁 void lock(); /
2020-07-07 15:21:10
584
原创 JAVA语言模拟CAS的ABA问题
什么是CAS机制CAS是英文单词Compare And Swap的缩写,翻译过来就是比较和替换。CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。如何保证多核心下的线程安全?系统底层进行CAS操作的时候,会判断当前系统是否是多核心系统,如果是就给"总线"加锁,只有一个线程能对总线加锁成功,加锁成功之后会进行CAS操作,CAS的原子性是平台级别的..
2020-07-03 17:58:08
246
原创 Executors的unconfigurableExecutorService()方法
Executors有一个静态方法,该方法可以对现有的ExecutorService进行包装,使其只暴露出ExecutorService的方法,因此不能对其进行配置,如果我们需要创建不可更改的线程池,可以使用这个方法: Executors.unconfigurableExecutorService(executorService);//不可配置的线程池 Executors.unconfigurableScheduledExecutorService(scheduledExecut..
2020-07-03 10:41:41
554
原创 自定义代码实现简单的CAS逻辑
场景:创建20个线程,每一个线程循环给成员变量加一,循环次数为100次,理论结果线程结束后结果为2000.下面先给出基本代码:输出结果并不是2000,而是比2000小,这是因为count++这个操作,并非原子操作,具体原因可以百度volitile关键字.下面给出使用CAS原理改造的代码:package com.springcloud.server.springserver.thread;public class CasDemo { private static vo..
2020-07-02 17:45:18
829
4
原创 java的try后面跟括号
如题,在工作中遇见了在try...catch语句的try后面加括号,不懂,查资料明白之后,特此记录.下面是一段很简单的从文件读取文本的输入流:package com.springcloud.server.springserver;import java.io.*;public class TryTest { public static void main(String[] args) { File file = new File("E:\\springcloud\\
2020-07-01 14:25:05
6540
原创 shell获取指定名字的进程号并kill掉pid
工作中使用到的一个shell脚本,部分功能是获取进程pid,并且kill调,下面贴出脚本#! /bin/bashsearchName=XXXpids=${ps -ef | grep ${searchName} |grep -v grep |awk '{print $2}'}for pid in ${pids}do echo "kill pid" $pid kill -9 $piddoneecho "finished ..."grep -v grep的作用是过滤掉gr
2020-06-28 18:06:23
3331
3
原创 ThreadPoolExecutor 中的 shutdown() 、shutdownNow() 、awaitTermination() 的用法和区别
在使用线程池的时候,ExecutorService提供了两种关闭线程池的方法,shutdown()和shutdownNow(),先不墨迹,直接写出这两个方法的作用:使用shutdown正常关闭将线程池状态置为SHUTDOWN,线程池并不会立即停止:停止接收外部submit的任务 内部正在跑的任务和队列里等待的任务,会执行完 等到第二步完成后,才真正停止使用shutdownNow强行关闭将线程池状态置为STOP。企图立即停止,事实上不一定:跟shutdown()一样,先停止接收外部提交的
2020-06-23 11:34:44
13536
原创 类加载的类初始化的6种场景
对于类的初始化阶段,虚拟机严格规定了有且只有6种情况必须的对类进行"初始化":1.遇到new、getstatic、putstatic或invokestatic这四条字节码指令的时候,如果类没有进行初始化,则需要先触发其初始化.生成这四条指令的最常见的java代码场景是;使用new关键字实例化对象的时候 读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候 调用一个类的静态方法的时候2.使用java.lang.reflect包的方法对类进行反射调用的
2020-06-18 09:07:40
681
原创 redis的内存维护策略
Redis中的内存维护策略Redis作为优秀的缓存中间件,而且是基于内存的,会存储大量的数据,即使采用了集群来扩容,也需要随时整理内存,防止内存溢出,保证性能。两种解决方法:一:为数据设置超时时间redis> SET mykey "Hello"OKredis> EXPIRE mykey 10(integer) 1redis> TTL mykey(integer) 10redis> SET mykey "Hello World"OKredis> TTL m
2020-06-16 23:18:30
421
原创 docker镜像里面无法使用vi和vim命令,亲测有效
在部署项目到docker容器里的mysql,我们需要修改相关配置文件,有的时候会发现vi命令无法使用。解决办法apt-get updateapt-get install vim但是国外的镜像下载龟速,我们可以修改为国内的网址:mv /etc/apt/sources.list /etc/apt/sources.list.bakecho 'deb http://mirrors.163.com/debian/ jessie main non-free contrib' > .
2020-05-27 23:28:30
5990
1
原创 MySQL并发控制之锁介绍
无论何时,只要有多个查询需要在同一时刻修改数据,都会产生并发控制的问题,MySQL在解决并发问题的时候,是通过实现一个由两种类型的锁组成的锁系统来解决的:读写锁事务可以通过以下语句给sql加共享锁和排他锁:共享锁:select …… lock in share mode;排他锁:select …… for update;1.共享锁(shared lock)共享锁也叫读锁(read lock),是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),
2020-05-22 10:37:58
279
原创 mysql使用EXPLAIN查看执行计划
我们经常使用 MySQL 的执行计划来查看 SQL 语句的执行效率:如下id列这一列总是包含一个编号,标识select所属的行,如果在语句中没有子查询或联合查询,那么只会有唯一的select,于是每一行在这个列中都将显示一个1.mysql将select查询分为简单和复杂类型,复杂类型可以分为三大类:简单子查询、所谓的派生表(在from子句中的子查询),以及union查询id 相同,执行顺序由上至下 id 不同,如果是子查询,id 的序号会递增,id 值越大优先级越高,越先被执行..
2020-05-21 10:50:40
525
原创 pom文件排除jar包冲突
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.11</ve...
2020-05-07 23:27:42
5536
原创 曲线救国使用内部类实现"多重继承"
为什么需要内部类:每个内部类都能独立的继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响.如果使用的是抽象的类或者具体的类,而不是接口,那就只能使用内部类才能实现多重继承.https://blog.csdn.net/litaosdau/article/details/38758587如果不需要解决"多重继承"的问题,那么可以使用别的...
2020-04-23 23:20:32
236
原创 内部类之.this和.new
如果你需要生成对外部类对象的引用,可以使用外部类的名字后面紧跟着圆点和this.这样产生的引用自动地具有正确的类型,这一点在编译期间就被知晓并受到检查,因此没有任何运行时期的开销.有时你可能想告知某些其他对象,去创建某个内部类的对象,要实现此目的,你必须在new表达式中提供对其他外部类对象的引用,这需要圆点和new语法.创建内部类的两种方法:1.在外部类中创建一个方法,该方...
2020-04-23 22:56:41
421
原创 java的protected关键字详解
关于protected关键字:java编程思想里面解释道:关键字protected指明:就类用户而言,这是private的,但对于任何继承于此类的导出类或其他任何位于同一个包内的类来说,它确是可以访问的.这句话有两层含义:1.父类的protected成员是包内可见的,并且对子类可见;2.若子类与父类不在同一个包内,那么在子类中,子类实例可以访问其从父类继承而来的protec...
2020-04-22 00:00:42
5639
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅