May 23, 2018

关于多线程中的面试题

常见面试的

1.现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?

答:使用join就OK了。

public class ThreeThread {

public static void main(String[] args) throws InterruptedException {

OneThread one =new OneThread();

one.setName("one");

one.start();

one.join(); //进入等待,只有one线程执行完毕......

May 18, 2018

redis笔记(一)

redis简介

Redis 是一个开源的 使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志 型、Key-Value 数据库。

存储操作

redis的key-value需要特别说明下,key只能为字符串类型,但value可以为字符串,hash表,列表(list),集合(set),有序集合(sorted set)等多种数据类型,这也是redis与memcached的区别。memcached也是key-value数据库,但是key,value都只能是字符串类型。

redis的key

Redis 的 key 是字符串类型,但是 key 中不能包括边界字符 ,由于 key 不......

May 02, 2018

记一次SpringBoot 部署到resin容器

springboot打包war包

第一步:将<packaging>war</packaging>改为war包

第二步:移除tomcat

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

<!--移除嵌入式tomcat插件-->

<exclusions>

<exclusi......

April 24, 2018

RabbitMQ的使用

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

它可以使对应的客户端(client)与对应的消息中间件(bro......

April 23, 2018

RabbitMq集群之高可用(二)

前面一文中搭建了集群,还有镜像模式,看似安全了,但是RabbitMq却没有负载均衡,就是说,你在使用客户端连接mq的时候,即使有node1,node2两台mq集群,但是client只会连接到一台,当node1挂了,才会连接到node2中,如果node1没有挂掉,将会一直使用node1,这样一来node2就成了摆设了,或者成了备份机了。集群我们更希望的是高可用,高性能。比如node1,node2分别能处理60万的请求,有集群的情况下按理可以处理120万的请求。client只会连接到一台mq中,它的瓶颈还是60万的数量级,node2在大量请求时并没有派上用场,只有在node1挂掉的时候才有用。所以......

April 23, 2018

RabbitMQ集群之安装(一)

RabbitMQ安装

集群准备工作

现在有两台服务器:192.168.10.100,192.168.10.101

//进入到100服务器中

//查看hostname,或者使用hostname node1修改主机名

> hostname

//配置hosts

> vi /etc/hosts

//修改如下

192.168.10.100 homename1

192.168.10.101 homename2

//在101服务器中同样配置就OK了

//注意:homename1是当前主机名哦!

如果不设置主机名,那么就查看主机名是什么,在hosts里面配置上就OK了。

linu......

March 22, 2018

java集合-CopyOnWrite系列

Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。

什么是CopyOnWrite

CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以......

March 20, 2018

MySql笔记(一)

数据库的基本概念

磁盘文件--> 层次模型 --> 网状模型 --> (Codd) 关系模型

主键(Primary key):用于惟一确定一个记录的字段;复合主键:多个字段组合成一个主键(NOT NULL);

惟一键:一个或多个字段的组合,填入的数据必须能在本表 中唯一标识本行;允许为NULL,但只能有一个null。

约束:

主键约束:惟一、非空;一张表只能有一个;

惟一键约束:惟一,可以存在多个;

外键约束:参考性约束;

检查性约束:check;

三层模型:

物理层 --> SA (决定数据的存储格式,即RDBMS在磁盘上如何组织文件)

逻辑层......

January 30, 2018

你不了解的Java-序列化(五)

序列化是干什么的?

我们知道,在jvm中引用数据类型存在于栈中,而new创建出的对象存在于堆中。如果电脑断电那么存在于内存中的对象就会丢失。那么有没有方法将对象保存到磁盘(对象持久化存储)或通过网络传输到远处的其他地方呢?

答案是可以,但是我们必须要求所有支持持久化存储的类实现Serializable接口。原因是,jvm不仅需要考虑将对象存储到硬盘等其他介质,还需要考虑将其读取(反序列化)出来。

什么是序列化?

将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其当前状态写入到临时存储区或持久性存储区,之后,便可以通过从存储区中读取或反序列化对象的状态信息,来重新创......

January 30, 2018

你不了解的Java-基础操作(四)

&与&&的区别

public class OptionDemo {

public static void main(String[] args) {

int a = 1;

int b = 0;

if (a == 0 & (b++) == 1) {

System.out.println("&操作1" + b);

}else{

System.out.println("&操作" + b);

......