自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(205)
  • 问答 (1)
  • 收藏
  • 关注

原创 AQS

AQS抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架。它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源时会进入此队列)。state的访问方式有三种:getState()setState()compareAndSetState()AQS定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share(共享,多个线程可同时执行,如Semaphore/CountDownLa

2020-09-14 22:45:07 302

原创 lvs+keepalived

LVS架构中,不管是NAT模式还是DR模式,当后端的RS宕掉后,调度器依然会把请求转发到宕掉的RS上,这样的结果并不是我们想要的。其实,keepalived就可以解决问题,它不仅仅有高可用的功能,还有负载均衡。也就是说keepalived已经嵌入了LVS功能,完整的keepalived+LVS架构需要有两台调度器实现高可用,提供调度器的只需要一台,另外一台作为备用。这里指演示主keepalived...

2017-12-31 21:15:57 316 4

原创 keepalived

一台服务器的硬件配置总是有限的,当服务器上运行的资源超过服务器的承载能力时,必将导致该服务器崩溃。在生产环境中,多数企业会使用多台服务器搭建成一个集群来运行应用程序,这样不仅可以避免单点故障,还能提升服务器的承载能力。集群从功能实现上分为两种:高可用集群和负载均衡集群。高可用,就是当一台服务器宕机不能提供服务了,还有另外的服务器顶替。负载均衡集群,简单讲就是把用户的请求分摊到多台服务器上。

2017-12-31 21:15:40 327 4

原创 用commons-fileupload实现文件上传

用commons-FileUpload实现文件上传

2017-04-18 10:01:56 1633 17

原创 idea-常用软件的配置和使用

配置JDKFile->Project Structure->Platform Settings->SDKs在左侧列表框中,选择SDKs列表项,进入SDK配置页面。选择JDK列表项,在SDK ’JDK’选项卡页面中,单击JDK home path项目的浏览按钮,定位JDK安装路径并保存配置TomcatFile->Settings->Build,Execu...

2018-07-07 10:50:52 841 6

原创 Java 8-Stream API-练习

交易员类public class Trader { private final String name; private final String city; public Trader(String name, String city) { this.name = name; this.city = city; } ...

2018-07-03 21:18:28 891 5

原创 Java 8-Stream API-用流收集数据

用指令使风格对交易按照年份分组 @Test public void test9() { //建立根据年份分组的Map Map<Integer,List<Transaction>> transactionByCurrencies=new HashMap<>(); //遍历Transactio...

2018-07-03 20:17:38 1144 4

原创 Java 8-Stream API-创建流

使用stream方法从集合生成流由值创建流可以使用静态方法Stream.of,通过显示值创建一个流。它可以接受任意数量的参数。Stream<String> stream=Stream.of("Java 8","Lambdas","In","Action");stream.map(String::toUppe

2018-07-03 11:42:45 491 4

原创 Java 8-新的日期和时间API

日期和时间:LocalDate和LocalTimeLocalDate类,该类的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息。另外,它也不附带任何与时区相关的信息。可以通过静态工厂方法of创建一个LocalDate实例。LocalDate实例提供了多种方法来读取常用的值,比如年份、月份、星期几等。LocalDate date=LocalDate.of(2014,3...

2018-07-02 21:07:42 6264 3

原创 Java 8-Stream API-数值流

int colories=menu.stream() .map(Dish::getCalories) .reduce(0,Integer::sum);这段有一个暗含的装箱成本。每个Integer都必须拆箱成一个原始类型,再进行求和。map方法会生成一个Stream<T>,虽然流中的元素是Integer类型,但Stream接口没有定义sum方法。为...

2018-07-02 16:59:40 791 1

原创 Java 8-Stream API-流操作

java.util.stream.Stream中的Stream接口定义了许多操作。它们可以分为两大类。filter、map和limit可以连成一条流水线collect触发流水线执行并关闭它可以连接起来的操作称为中间操作,关闭流的操作称为终端操作。 操作 类型 返回类型 使用的类型/函数式接口 函数描述符 filter 中间 Stream&...

2018-07-02 16:50:29 903 2

原创 Java 8-Stream API

流处理流是一系列数据项,一次只生产一项。程序可以从输入流中一个一个读取数据项,然后以同样的方式将数据项写入输出流。一个程序的输出流很可能是另一个程序的输入流。流,简短的定义就是“从支持数据处理操作的源生成的元素序列”源:流会使用一个提供数据的源,如集合、数组或输入输出资源。元素序列:就像集合一样,流也提供了一个接口,可以访问特定元素类型的一组有序值。集合讲的是数据,流讲的是计算。...

2018-07-02 16:46:29 3051 2

原创 Java 8-Lambda表达式-复合Lambda表达式

Java 8的好几个函数式接口都有为方便而设计的方法。具体而言,许多函数式接口,比如Comparator、Predicate和Function等函数式接口都有几个可以用来结合Lambda表达式的默认方法。这意味着你可以把多个简单的Lambda复合成复杂的表达式。比如,你可以让两个谓词之间做一个or操作,组合成一个更大的谓词。而且,你还可以让一个函数的结果成为另一个函数的输入。比较器复合...

2018-07-02 16:04:24 465 3

原创 Java 8-Lambda表达式-方法引用

多线程

2018-06-30 23:09:29 493 1

原创 Java 8-Lambda表达式

StreamAPI

2018-06-30 23:07:31 614 2

原创 UML图-类图

Lambda表达式

2018-06-30 23:06:55 828 2

原创 UML图-用例图

UML图

2018-06-30 23:06:06 780 2

原创 JavaScript-Array类型

虽然ECMAScript数组与其他语言中的数组都是数据的有序列表,但与其他语言不同的是,ECMAScript数组的每一项可以保存任何类型的数据。而且,ECMAScript数组的大小是可以动态调整的。创建数组的基本方式有两种。第一种是使用Array构造函数。var colors=new Array();如果预先知道数组要保存的项目数量,也可以给构造函数传递该数量,而该数量会自动变成le...

2018-05-31 21:31:34 286 9

原创 JavaScript-Object类型

对象是某个特定引用类型的实例。新对象是使用new操作符后跟一个构造函数来创建的。构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的。var person=new Object();这行代码创建了Object引用类型的一个新实例,然后把该实例保存在了变量person中。使用的构造函数时Object,它只为新对象定义了默认的属性和方法。ECMAScript提供了很多原生引用...

2018-05-31 21:30:46 429 6

原创 JavaScript-基本类型和引用类型

基本类型和引用类型的值ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值是指简单的数据段,而引用类型值指那些可能由多个值构成的对象。在将一个值赋给变量时,解析器必须确定这个值是基本类型还是引用类型。基本数据类型:Undefined、Null、Boolean、Number和String。这5中基本数据类型是按值访问的,因为可以操作保存在变量中的实际的...

2018-05-31 21:30:09 280 7

原创 JavaScript-变量和数据类型

变量ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。定义变量时要使用var操作符,后跟变量名。var message;该行代码定义了一个名为message的变量,该变量可以用来保存任何值(像这样未经过初始化的变量,会保存一个特殊的值—undefined)。ECMAScript也支持直接初始化变量,因此在定义变量的同时就可以设置变量的值。va...

2018-05-31 21:29:16 550 6

原创 Git如何解决冲突

解决冲突现在我把gitTest中的东西全删了包括那个.git文件。初始化仓库git init,新建一个a.txt,在里边写个master,执行git add a.txt,然后执行git commit -m ‘add a.txt’然后创建第一个分支 git branch feature1,然后创建第二个分支并切换到第二个分支git checkout -b feature2,在a.txt中...

2018-04-24 08:32:08 8102 26

原创 Git对分支的操作

分支的操作啥是分支,比如老师留了作业让做一个系统,我懒的自己做,就和别人要了一份,但还不能完全用别人的,需要自己改改,但又怕自己没改成功,把给的那份也弄坏了。为了防止自己改错了还不能反悔。可以要过来别人的程序之后,先复制一份,在复制的这份中做改动,改坏了,大不了再复制一份。复制的这个就可以叫做分支,比喻可能不太恰当,git中的分支要比这强大,但大概就是这么个意思。现在我把gitTest中的...

2018-04-24 08:31:08 1676 22

原创 Git基本操作

我在d盘建了一个文件夹gitTest,然后鼠标右键,Git Bash Here。输入git init,之后就会在这个目录下创建一个隐藏文件夹.git。这样就把这个目录变成Git可以管理的仓库了。$ git initInitialized empty Git repository in D:/gitTest/.git/.git目录就是git版本库(又叫仓库,repository),.g...

2018-04-24 08:12:58 664 21

原创 Git的安装和配置用户名和密码

在Windows中进行安装。访问https://git-scm.com/,点击Downloads for Windows,我下载的是Git-2.16.2-64-bit.exe。都按照默认选项即可,其中有一个选项为Checkout Windows-style,commit Unix-style line endings这是因为GitHub中公开的代码大部分都是以Mac或Linux中的...

2018-04-24 08:11:49 75853 24

原创 MySQL关于order by和group by的优化

order by关键字优化尽量使用index方式排序,避免使用filesort方式排序create table tblA( #id int primary key not null auto_increment, age int, birth TIMESTAMP not null);insert into tblA(age,birth) values(22...

2018-04-22 15:24:50 2432 18

原创 MySQL关于in和exists的优化

优化原则:永远是小表驱动大表select * from A where id in(select id from B)等价于for select id from Bfor select * from A where A.id=B.id当B表的数据集必须小于A表的数据集时,用in优于exists也可以不是1,是个常量也行select * from A where exists(sel...

2018-04-22 15:20:57 764 14

原创 MySQL如何建立索引

单表create table if not exists `article`( id int(10) unsigned not null primary key auto_increment, author_id int(10) unsigned not null, category_id int(10) unsigned not null, views i...

2018-03-31 23:21:42 612 5

原创 MySQL性能分析-explain

explainexplain用来查看执行计划,使用explain关键字可以模拟优化器执行SQL查询语句,从而知道mysql是如何处理你的SQL语句,分析你的查询语句或是表结构的性能瓶颈可以获得如下信息表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询如何使用explain + SQL语句执行计划包含的...

2018-03-31 23:20:51 953 7

原创 MySQL数据库设计规范

数据库命名规范所有数据库对象名称必须使用小写字母并用下划线分隔 数据库对象是以文件形式存储的。在Linux系统中字母的大小写是敏感的。禁止使用mysql保留关键字(https://dev.mysql.com/doc/refman/5.7/en/keywords.html)数据库对象的命名要见名识义,并且最好不要超过32个字符临时库表必须以tmp为前缀并以日期为后缀备份库表必须以ba...

2018-03-31 23:19:11 403 2

原创 通过yum的方式安装mysql

访问其官网https://www.mysql.com/,点击downloads,点击community,点击 mysql yum repository,下载一个mysql57-community-release-el7-11.noarch.rpm。怎么用呢?点击A Quick Guide to Using the MySQL Yum Repository,大概意思如下先下载一个对应版本...

2018-03-31 21:42:00 381 3

原创 MySQL索引介绍

什么是索引索引的目的在于提高效率,可以类比字典如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后找y字母,再找到剩下的sql。如果没有索引,那么你可能需要从a找到z,我如我想找到Java开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成?MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质是:索引是数...

2018-02-28 22:39:40 248 12

原创 CentOS 6和CentOS 7的系统服务管理

也许你配置过Windows开机启动的服务,其中有些服务在日常的管理工作中用不到,我们就要把它停止,一来可以节省资源,而来可以减少安全隐患。在Linux上同样也有相关的工具来管理系统的服务。chkconfig服务管理工具CentOS 6上的服务管理工具为chkconfig,Linux系统所有的预设服务都可以通过查看/etc/init.d/目录得到。但里边只有屈指可数的几个文件,因为Cen...

2018-02-28 22:36:24 4248 9

原创 MySQL避免索引失效

create table staffs( id int primary key auto_increment, name varchar(24) not null default '' comment '姓名', age int not null default 0 comment '年龄', pos varchar(20) not null default '' ...

2018-02-28 22:33:28 7027 13

原创 探究keepalived的安装

keepalived

2018-02-04 23:06:41 362 14

原创 关闭SELinux

SELinux是Linux系统特有的安全机制。因为这种机制的限制太多,配置也特别烦琐,所以几乎没有人真正使用它。安装完系统,我们一般都要把SELinux关闭,以免引起不必要的麻烦。临时关闭SELinux的方法为:setenforce 0但这仅仅是临时的,要想永久关闭需要更改配置文件/etc/selinux/config,需要把SELINUX=enforcing改成SELINUX=disa

2018-01-11 21:54:49 1616 11

原创 Linux-修改主机名-设置本地域名解析

更改主机名使用hostname命令就可以查看Linux的主机名可以使用如下命令来修改主机名hostnamectl set-hostname eaglezsx也可以修改其配置文件/etc/hostname里边的内容设置本地域名解析在/etc/hosts文件中添加一句话192.168.188.1 www.baidu.com保存文件后再ping一下www.ba

2018-01-09 12:11:32 32894 7

原创 Linux-yum源的设置

使用本地光盘制作yum源如果你的虚拟机光驱中还有系统安装盘镜像,就可以通过执行如下命令把光驱挂载到/mnt目录下。先检查一下VMware右下角的小光驱图标是否点亮,如果没有,点击一下,再点击“连接”就可以点亮它。执行如下命令挂载光盘mount /dev/cdrom /mnt当挂载光驱后,会在/mnt/Packages目录下看到很多RPM包(DVD版本的Linux镜像会有很多RPM包

2018-01-09 12:07:08 477 5

原创 Linux-源码包的安装

安装源码包安装源码包,需要我们把源代码编译成可执行的二进制文件。源码包的编译用到了Linux系统里的编译器。常见的源码包一般都是用C语言开发的,因为C语言是Linux上最标准的程序语言。Linux上的C语言编译器称为gcc,利用它可以把C语言编译成可执行的二进制文件。所以,如果机器上没有安装gcc,就无法编译源码,可以使用命令yum install -y gcc来完成安装。安装源码包通常需

2018-01-09 12:05:41 801 6

原创 Linux-RPM包的安装

yum是Red Hat所特有的安装RPM程序包的工具。使用RPM工具安装某一个程序包时,有可能会因为该程序包依赖另一个程序包而无法安装;而使用yum工具时,就可以连同依赖的程序包一起安装,很方便。RPM工具RPM是Red Hat Package Manager的缩写,由Red Hat公司开发。它是以一种数据库记录的方式将我们所需要的套件安装到Linux主机的一套管理程序。每个RPM

2018-01-09 12:03:23 741 5

空空如也

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

TA关注的人

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