github无法更新的问题

使用github 无法正常更新

阅读全文

工厂模式的学习

工厂模式的基本含义就是抽象化创建类实例的过程,将对象和创建和使用进行解耦。又称创建型模式,Creational Pattern。所以工厂模式的主要作用就是帮组进行实例化对象的。

阅读全文

分布式锁的学习

锁是什么

锁的意义在于多个线程(单点)或者进程(分布式)对于共享的资源进行修改操作时,要保证一个先后顺序。

比如多个人买票,同一个座位只能卖给同一个人。

实现锁的基本原理是设置一个所有人都能及时查看、修改的标记,然后所有人在操作资源之前查看修改该标记。

阅读全文

Elastic 启动出现bug

创建多个Elastic节点的时候,需要拷贝多份,注意端口号不需要配置,会自动占用新的端口号。

但是如果拷贝时携带了 data文件夹,就会有冲突,报错如下:

with the same id but is a different node instance

解决办法:

删除 data 文件夹即可。

JVM内存模型学习

JVM内存结构

Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁。

阅读全文

连接池思想

JDBC是一个规范,遵循JDBC接口规范,各个数据库厂家各自实现自己的驱动程序(Driver)。

在标准JDBC对应用的接口中,并没有提供资源的管理方法。所以,缺省的资源管理由应用自己负责。虽然在JDBC规范中,多次提及资源的关闭/回收及其他的合理运用。但最稳妥的方式,还是为应用提供有效的管理手段。所以,JDBC为第三方应用服务器(Application Server)提供了一个由数据库厂家实现的管理标准接口:连接缓冲(connection pooling)。引入了连接池( Connection Pool )的概念 ,也就是以缓冲池的机制管理数据库的资源。

阅读全文

JVM调优

​ Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。

数据类型

基本类型和引用类型

阅读全文

webMagic超时错误

使用场景

使用webmagic爬取百度榜单的时候,出现超时错误

阅读全文

Elastic-1简介和安装

安装插件:

1
elasticsearch-plugin install analysis-icu

开启多个

1
2
3
bin/elasticsearch -E node.name=node1 -E cluster.name=demo -E path.data=node1_data -d
bin/elasticsearch -E node.name=node2 -E cluster.name=demo -E path.data=node2_data -d
bin/elasticsearch -E node.name=node3 -E cluster.name=demo -E path.data=node3_data -d

删除进程

1
2
ps | grep elasticsearch
kill pid

安装Kibana

直接下载安装。运行时报错——必须使用和Elastic同一个版本才能正常启动运行。

https://www.elastic.co/cn/downloads/logstash

使用logstash导入数据

1
2
3
4
5
6
7
8
9
10
11
12
E:\tyg\elastic\movielens\logstash.conf

logstash -f E:\tyg\elastic\movielens\logstash.conf ##不行,失败了

logstash.bat -f logstash.conf





logstash.bat -e 'input { stdin { } } output { stdout {} }'
logstash -e 'input { stdin { } } output { stdout {} }'

一些查询命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//查看索引相关信息
GET kibana_sample_data_ecommerce

//查看索引的文档总数
GET kibana_sample_data_ecommerce/_count

//查看前10条文档,了解文档格式
POST kibana_sample_data_ecommerce/_search
{
}

//_cat indices API
//查看indices
GET /_cat/indices/kibana*?v&s=index

//查看状态为绿的索引
GET /_cat/indices?v&health=green

//按照文档个数排序
GET /_cat/indices?v&s=docs.count:desc

//查看具体的字段
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt

//How much memory is used per index?
GET /_cat/indices?v&h=i,tm&s=tm:desc

Docker 安装docker

1
2
3
docker images

docker search elastic

分布式事务的解决

分布式系统的核心就是处理各种异常情况,这也是分布式系统复杂的地方,因为分布式的网络环境很复杂,这种“断电”故障要比单机多很多,所以我们在做分布式系统的时候,最先考虑的就是这种情况。这些异常可能有 机器宕机、网络异常、消息丢失、消息乱序、数据错误、不可靠的TCP、存储数据丢失、其他异常等等…

CAP理论

  • 一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生效)
  • 可用性(Availability) : 每个操作都必须以可预期的响应结束
  • 分区容错性(Partition tolerance) : 即使出现单个组件无法可用,操作依然可以完成

BASE理论

在分布式系统中,我们往往追求的是可用性,它的重要程序比一致性要高,那么如何实现高可用性呢? 前人已经给我们提出来了另外一个理论,就是BASE理论,它是用来对CAP定理进行进一步扩充的。BASE理论指的是:

  • Basically Available(基本可用)
  • Soft state(软状态)
  • Eventually consistent(最终一致性)

我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

阅读全文