自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

倪先生的博客

路漫漫其修远兮,吾将上下而求索。。。

  • 博客(48)
  • 收藏
  • 关注

原创 MySQL-获取天、周、月等时间划分的数据

1.今天select * from 表名 where to_days(时间字段名) = to_days(now());2.昨天SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 13.近7天SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)4.近30天SELECT * FROM 表名 where DATE_SU

2020-12-31 15:05:34 798

原创 shell-xsync脚本同步文件

前言:因为最近在安装zk集群,发现单纯使用scp或rsync命令同步文件非常麻烦,学习下编写一个名为xsync脚本,并附上遇到的问题及解决方案,效率飞快。环境:三台服务器分别叫ni103,ni104,ni105,后面有配置要用到主机名代码:#!/bin/sh## 获取输入参数个数,如果没有参数,直接退出pcount=$#if((pcount==0)); then echo no args...; exit;fi# 获取文件名称p1=$1fname=`b

2020-11-13 16:39:35 465

原创 Zookeeper本地安装及参数解读

安装前准备(1) 安装jdk我本地用的1.8版本(2)拷贝zk安装包到linux下官网的最新版本安装包(3)解压到指定目录下tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz -C /opt/module2.配置修改(1)将/opt/module/apache-zookeeper-3.6.2-bin/conf这个路径下的zoo_sample.cfg改为zoo.cfg,这个文件就是zk的主要配置文件,参数下面解释mv zoo_sample.c..

2020-11-11 17:26:17 184

原创 Zookeeper入门

概述:1.Zookeeper是一个开源的分布式实现,为分布式应用提供协调服务的Apache项目。2.Zookeeper=文件系统+通知机制工作机制:Zookeeper从设计模式角度来理解:是一个基于观察者模式设计(博客里有相应的文章)的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上的注册的那些观察者作出相应的反应。特点:Zookeeper:一个领导者(Leader),多个跟随者(

2020-11-05 17:12:38 81

原创 shell学习-检测MySQL是否存活

**简介:**有段时间没更新了,趁着有时间今天学习下如何使用shell脚本来检测MySQL服务是否存活。代码:#!/bin/bash#Author.nhx#为你需要检测的Mysql主机的IP地址,user为Mysql账户名,passwd为密码#这些信息需要根据实际情况修改后方可使用host=127.0.0.1user=rootpasswd=123456mysqladmin -h 127.0.0.1 -u root -p'$passwd' ping &>/dev/nullif

2020-10-30 15:58:37 779

原创 shell学习-斐波那契数列

简介:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。这个数列从第3项开始,每一项都等于前两项之和。下面看看使用shell如何实现的代码:#!/bin/bash#Author.nhx#斐波那契数列后的一个数字,永远是前2个数字之和#如:0 1 1 2 3 5 8 13 。。。list=(0 1)for i in `seq 2 11`dolist[$i]

2020-09-04 15:15:22 2035 2

原创 shell学习-检测MySQL数据库连接量

简介:为了一劳永逸,今天学习下使用shell脚本实时查看mysql的数据库连接。代码:#!/bin/bash#Author.nhx#本脚本每2秒检测一次Msql并发连接数,可以将脚本设置为开机启动脚本,或在特定时间执行#以满足Myql数据库的监控要求,查看Myaql连接是否正常#本案例中用户名和密码需要根据实际情况修改后方可使用log_file=/var/log/mysql_count.loguser=rootpasswd=123456while :dosleep 2count=`

2020-08-28 16:29:39 595

原创 shell学习-统计进程信息

简介:在proc的目录中记录着linux中正在运行的进程信息,下面通过脚本来统计相关的进程信息。代码:#!/bin/bash#Author.nhxrunning=0sleeping=0stoped=0zombie=0#在proc目录下所有以数字开始的都是当前计算机正在运行的进程的进程PID#每个PID编号的目录下纪律有该进程相关的信息for pid in /proc/[1-9]*do procs=${procs+1} stat=$(awk '{print $3}' $p

2020-08-21 15:29:12 269

原创 shell学习-猜数字游戏

简介:生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,猜小了或猜大了,直至用户猜对脚本结束。代码:#!/bin/bash#Author.nhx#RANDOM为系统自带的系统变量,值为0-32767的随机数#使用取余算法将随机数变为1-100的随机数num=$[RANDOM%100+1]#使用read提示用户猜数字#使用if判断用户猜数字的大小关系:-eq(等于),-gt(大于),while :doread -p "计算机生成一个1-100的随机数,你猜"

2020-08-14 16:56:59 1802

原创 shell学习-实时监控磁盘和内存空间

简介:在对服务器的日常操作中,我们经常会使用df和free命令去查看服务的空间情况,非常麻烦。在这里,将用一个脚本去实时监控空间情况,,当剩余内存小于 500M、根分区剩余空间小于 1000M 时,发送报警邮件给root 管理员,有相关的类似需求可以以此借鉴。代码:首先创建一个sh文件 touch monitor.sh附上核心代码:#!/bin/sh#Anthor.nhx#提取磁盘剩余空间disk_size=$(df / |awk '/\//{print $4}')#提取内存剩余空间mem

2020-08-07 16:07:05 881

原创 shell学习-编写猜拳游戏

简介:使用shell脚本,实现人机<石头,剪刀,布>游戏代码:#!/bin/bash#Author:nhxgame=(石头 剪刀 布)num=$[RANDOM%3]computer=${game[$num]}#通过随机数获取计算机的出拳#echo "${computer}"#出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别是3中不同的可能echo "请根据下列提示选择你的出拳手势"echo "1.石头"echo "2.剪刀"echo "3.

2020-07-31 15:57:02 1544

原创 MySQL-递归CTE

不了解CTE的先查看这篇文章–公用表达式(CTE)递归CTE的语法:WITH RECURSIVE cte_name AS ( initial_query UNION ALL recursive_query)SELECT * FROM cte_name;1、递归CTE的主要组成:形成CTE结构的基本结果集的初始查询(initial_query),初始查询部分被称为锚成员。递归查询部分是引用CTE名称的查询,因此称为递归成员。递归成员由一个UNION ALL或UNIO

2020-07-24 16:34:10 1822

原创 java并发之线程池

简介:池化技术相比大家大家已经屡见不鲜了,线程池、数据库连接池、Http连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。线程池类的相关结构:ExecutorService接口继承了Executor接口,定义了管理线程任务的方法。ExecutorService的抽象类AbstractExecutorService提供了submit、invokeAll()等部分方法实现,但是核心方法Executor.execute()并没有实现。因为所有任务都在这个方法

2020-06-17 16:45:25 123

原创 java并发Executor、ExecutorService、ScheduledExecutorService接口

简介:在以往创建线程时,我们通常使用new Thread()创建一个类对象,通过start()方法运行一个线程,当有多个线程,就要用上面的方法多个创建,看起来非常繁琐,代码看起来也不是非常整洁。而在JUC包下其实已经提供了相关接口(Executor、ExecutorService、ScheduledExecutorService)来作为池化技术的基础,通过Executors工具类创建各种线程池,减少每次获取资源的消耗,提高对资源的利用率。在这里主要介绍上面所说的三个接口的方法使用一、Executor接口:

2020-06-11 17:17:06 204

原创 Java并发之AtomicIntegerArray类

简介:java.util.concurrent.atomic.AtomicIntegerArray类提供了支持int数组的原子更新,还包含高级操作,如变量的读取与写入,保证原子的一致性。方法:示例:下面通过AtomicIntegerArraryTest 程序显示了基于线程的环境中AtomicIntegerArray变量的使用。import java.util.concurrent.atomic.AtomicIntegerArray;public class AtomicIntegerArrar

2020-06-05 16:08:56 226

原创 Java并发AtomicBoolean类

简介:java.util.concurrent.atomic.AtomicBoolean类提供了可以原子读取和写入的底层布尔值的操作,并且还包含高级原子操作。 AtomicBoolean支持基础布尔变量上的原子操作。 它具有获取和设置方法,如在volatile变量上的读取和写入。 也就是说,一个集合与同一变量上的任何后续get相关联。 原子compareAndSet方法也具有这些内存一致性功能。方法:摘自jdk1.8示例:以下AtomicBooleanTest程序显示了基于线程的环境中AtomicB

2020-06-03 15:07:27 367

原创 Java并发之AtomicLong类

简介:java.util.concurrent(JUC)有个atomic小型工具包,支持单个变量上的无锁线程安全编程。以上是这个包下的所有相关类,java.util.concurrent.atomic.AtomicLong类只是其中的一种,提供了可以被原子地读取和写入的底层long值的操作,并且还包含高级原子操作。下面我们一来学习这个类的方法及用途。方法:示例:以下AtomicLongTest程序显示了在基于线程的环境中使用AtomicLong的计数器的安全实现,帮助我们更好的理解为什么使用。

2020-06-01 17:10:16 555

原创 java并发Condition接口

简介:之前文章中介绍过线程间通信示例,里面的用到了Object.wait和Object.notify,同时也知晓这两个方法要配合synchronized关键字使用,synchronized依赖于JVM,实现机制都在虚拟机层面,并没有暴露给我们。作为Lock系列功能中的Condition接口配合lock锁是可以替代Object监视器方法,依赖于API,它具有很好的灵活性。方法:示例:为了更好的...

2020-05-06 17:29:20 131

原创 Java并发ReadWriteLock接口

在这里,我先介绍一些锁的相关概念介绍: 1、可重入锁    如果锁具备可重入性,则称作为 可重入锁 。像 synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了 锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举个简单的例子,当一个线程执行到某个synchronized方法时,比如说method1,而在method1中会调用另外一个synchro...

2020-04-28 17:02:03 117

原创 Java并发Lock接口

简介:Lock 接口实现类提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition (Condition实现类ConditonObject来实现线程的通知/与唤醒机制,关于Condition后期会进行介绍)对象。锁是用于控制多线程访问共享资源的工具。通常,锁提供对共享资源的独占访问:一次只有...

2020-04-27 17:04:02 111

原创 Java并发死锁

简介:所谓死锁就是描述两个或多个线程因竞争资源出现等待彼此造成永久阻塞的情况,若无外力作用,形成一种“僵局”。java 死锁产生的四个必要条件:1、互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。2、请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。3、不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。4...

2020-04-24 16:28:40 133

原创 Java并发线程间通信

简介:java既然作为支持多线程编程语言,当你开发两个或多个线程交换一些信息的应用程序时,线程间的通信还是很重要的。在这里使用wait()和notify()/notifyAll()方法以及syncrhoized关键字实现一个简单的线程间对话通信。您可以使用相同的概念来创建一个复杂的系统。注意事项:不了解wait()和notify()/notifyAll()方法看我上篇文章-点击为什么使用sy...

2020-04-23 17:14:10 108

原创 Java并发主要操作

简介:java核心提供了多线程程序的完全控制。我们完全可以根据的要求开发出完全暂停,停止或恢复的多线程程序。有各种方法可以控制线程的行为。下面介绍这些常用方法的特性sleep()—使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)suspend() —使当前线程处于挂起状态,要恢复目标线程调用resume()方法resume()—恢复使用suspend()方法挂起的线程。stop()...

2020-04-22 17:16:07 179

原创 Java并发是什么

简介: java是一种多线程编程语言,我们可以使用java来开发多线程程序。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程程序包含两个或多个可同时运行的部分,每个部分可以同时处理不同的任务,从而能更好地利用可用资源达到充分利用 CPU 的目的。这里定义和线程相关的另一个术语 - 进程:进程是程序的一次性执行过程,是系统运行程序的基本单位...

2020-04-21 17:24:15 1291

原创 MySQL-公用表达式(CTE)

简介:公用表表达式是一个命名的临时结果集,仅在单个SQL语句(例如SELECT,INSERT,UPDATE或DELETE)的执行范围内存在。与派生表类似,CTE不作为对象存储,仅在查询执行期间持续。 与派生表不同,CTE可以是自引用(递归CTE),也可以在同一查询中多次引用。 此外,与派生表相比,CTE提供了更好的可读性和性能。语法:WITH cte_name (column_list) AS...

2020-03-31 17:30:35 894

原创 java8新特性-日期时间api

简介:旧的java版本中,我们经常使用java.util.Date包来处理日期,使用起来繁琐,功能也不是非常的强大,线程不安全。随着Java 8的发布,新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理,弥补了之前版本的弊端。很多新的 API类放在了java.time 包下,重要的api有:LocalDate ,LocalDateTime,LocalTime,Zon...

2020-01-10 17:11:17 145

原创 java8新特性-Optional 类

简介:在以往的版本开发中,我们经常用null去做判断条件来解决NullPointerException问题,从8开始,引入了Optional 类,可以作为包含或不包含非空值的容器对象,很好的解决空指针异常。下面通过代码示例来看看有哪些好用的方法来帮助我们高效的工作。类方法:示例代码:public class OptionalTest { public static void main(S...

2020-01-02 17:40:20 276 1

原创 java8新特性-Stream

简介:Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。它支持顺序和并行聚合操作的一系列元素,大多数流都由集合,数组或生成函数支持,把这些要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。流管线可以顺序执行,也可以在并行中执行。 此执行模式是流的属性。 流被创建为具有顺序或并行执行的初始选择。 (例...

2019-12-30 16:57:28 82

原创 设计模式之模板模式

简介:在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。优点:1、封装不变部分,扩展可变部分,方便维护。 2、行为由父类控制,子类实现。缺点::每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。概要设计:我们将创建一个定义操...

2019-08-22 15:00:22 100

原创 设计模式之访问者模式

简介:访问者模式是一种将算法与对象结构分离的行为型模式。基本想法如下:首先我们拥有一个由许多对象构成的对象结构,这些对象的类都拥有一个accept方法用来接受访问者对象;访问者是一个接口,它拥有一个visit方法,这个方法对访问到的对象结构中不同类型的元素作出不同的反应;在对象结构的一次访问过程中,我们遍历整个对象结构,对每一个元素都实施accept方法,在每一个元素的accept方法中回调访问者...

2019-08-21 16:21:41 83

原创 设计模式之策略模式

简介:策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。这种类型的设计模式属于行为型模式。优点:1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。设计概要:我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用...

2019-08-16 16:07:40 66

原创 设计模式之观察者模式

简介:观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主题是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。观察者模式不仅被广泛应用于软件界面元素之间的交互,在业务对象之间的交互、权限管理等方面也有广泛的应用。优点:1、观察者模式解除了主题和具体观...

2019-08-14 16:23:57 108

原创 设计模式之迭代器模式

简介:迭代器模式(Iterator Pattern)是 行为型模式。它可以让用户透过特定的接口巡访容器中的每一个元素而不用了解底层的实现。优点: 1、它支持以不同的方式遍历一个聚合对象。 2、迭代器简化了聚合类。 3、在同一个聚合上可以有多个遍历。 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应...

2019-08-13 15:30:23 54

原创 设计模式之命令模式

简介:命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。请求以命令的形式包裹在对象中,将一组行为抽象为对象,并传给调用对象,实现二者之间的松耦合,下面将用一个买卖商品相关的案例进一步深入了解。优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。3、调用同一方法实现不同的功能...

2019-08-12 16:28:36 65

原创 设计模式之责任链模式

简介:顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。优点:降低耦合度。它将请求的发送者和接收者解耦。 ...

2019-08-06 15:52:01 66

原创 设计模式之代理模式

简介:所谓代理模式(Proxy Pattern),为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。这种类型的设计模式属于结构型模式。优点:1、职责清晰。 2、高扩展性。 3、智能化。缺点: 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 ...

2019-07-31 17:23:32 64

原创 设计模式之享元模式

简介:享元模式(英语:Flyweight Pattern)是一种软件设计模式。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。这种类型的设计模式属于结构型模式。享元模式尝试重用现有的同类对象,如果未找到匹配的对...

2019-07-30 17:39:43 99

原创 设计模式之外观模式

简介:外观模式(Facade Pattern)隐藏系统的复杂性,外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式又称为门面模式,它是一种对象结构型模式。优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。缺点:缺点:不符合开闭原则,如果要改东西很麻烦,继承重写...

2019-07-17 17:44:26 115

原创 设计模式之装饰器模式

简介:装饰器(Decorator)模式又名包装(Wrapper)模式,装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。...

2019-07-16 17:48:49 82

原创 设计模式之组合模式

简介:组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。优点:1、高层模块调用简单。 2、节点自由增加。缺点:在使用组合模式时,其叶子和树枝的声明都...

2019-07-15 15:54:21 76

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除