自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 资源 (1)
  • 收藏
  • 关注

原创 [Docker] 使用Docker-compose部署WordPress服务

使用WordPress可以快速构建一个blog,试了下很方便,主要参考:https://docs.docker.com/compose/wordpress/项目结构:|- <project_dir> |- db |- mysql.cnf # mysql的配置文件 |- db_data # 将mysql的数据持久化下来,包含WordPress的...

2018-12-18 16:51:54 1239 1

原创 [微服务] OpenShift Online 服务部署体验

1. 注册openshift账号(要等它给我发邮件,账户才可用,等了差不多一个月。。。)2. 登录openshift,下载客户端命令行工具并安装:3. 在页面创建一个project:4. copy登录命令,在CLI中登录:5. oc status查看项目的当前状态,目前没有service在跑:6. 使用我docker hub里的两个镜像创建两个service、跑一个网站(项目源...

2018-12-14 17:56:58 1008 1

原创 [Docker] mongodb容器化:初始化数据并挂载到本地

去年一门课程,用nodejs+mongodb重构了一个jsp+servlet+mysql的web网站(具体参见这篇论文),但是网站是本地部署的,数据库也是本地先创建好的,想要把这个网站用docker-compose跑起来,需要写一些脚本、Dockerfile文件和对应的docker-compose文件。(重点在于数据库的容器化,参考文章:docker-compose 构建mongodb并导入基础...

2018-11-16 13:54:02 6652

原创 [Istio] 外部访问Istio自带的Prometheus和Grafana

Isitio目前自带Prometheus和Grafana,但无法从外部访问,使用port forward只能从本地访问。运行下面的命令:kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 9...

2018-11-15 19:11:44 2832

原创 [Zipkin] zipkin-ui修改后单独打成镜像

由于要在zipkin的界面基础上进行修改,所以需要单独打包zipkin-ui并以docker形式跑起来(zipkin后台一直运行着)。一个学长曾经做过,记录如下,亲测可用:Maven打包zipkin:parent(root) -> package把打好的zipkin-ui.jar包放到文件夹zipkin-ui中,里面还要放入三个文件:nginx.conf文件user ...

2018-11-08 20:28:52 1107

原创 [Zipkin] 将数据持久化到elasticsearch,并在istio-k8s中运行

zipkin自带支持elasticsearch数据库,所以只要修改两个环境变量STORAGE_TYPE和ES_HOSTS就好了;但是只运行zipkin会发现没法看到依赖图,elasticsearch里面也只有span的信息,没有dependencies的数据,还需要运行zipkin-dependencies镜像:---apiVersion: extensions/v1beta1kind...

2018-07-13 15:03:17 4688 8

翻译 [微服务] 演化历史与未来挑战

Microservices-The Journey So Far and Challenges Ahead翻译,原文出处——IEEE SOFTWARE | PUBLISHED BY THE IEEE COMPUTER SOCIETY 2018Microservices-The Journey So Far and Challenges Ahead与SOA架构的关系微服务的好处...

2018-07-11 20:25:39 1135

翻译 [微服务] 微服务Bad Smell 的定义

On the Definition of Microservice Bad Smells翻译,原文出处——Taibi D, Lenarduzzi V. On the Definition of Microservice Bad Smells[J]. IEEE Software, 2018, vol 35(3):56-62.On the Definition of Microservi...

2018-07-11 20:19:06 735 1

转载 [Docker] 配置HTTP API访问

Docker1.10.1以上版本配置http API访问:1、在/usr/lib/systemd/system/docker.service,配置远程访问。主要是在[Service]这个部分,加上下面两个参数: -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock# vim /usr/lib/systemd/system/docker...

2018-07-05 14:16:26 5288

原创 [kubernetes] 安装和集群初始化

1. 时钟同步(不同步安装可能会出问题):// 安装yum install -y chrony// 启用systemctl start chronydsystemctl enable chronyd// 设置亚洲时区timedatectl set-timezone Asia/Shanghai// 启用NTP同步timedatectl set-ntp yes最后用 dat...

2018-06-29 19:56:07 2045

原创 [Docker] 基本命令

Docker 服务centos通过systemctl命令管理docker服务:systemctl start docker.service通过service命令重启Docker服务:service docker restart查看版本信息:docker versionDocker 镜像获取镜像:docker pull [name(镜像仓库名)...

2018-05-10 16:37:32 287

转载 [重构] 改善既有代码的设计

在做微服务拆分相关的课题,会涉及到模块化重构和代码重构相关的东西,重构的速度和质量很大程度上取决于代码原本质量的好坏,所以看了一下这本书,有些知识点我也不知道,所以摘抄了其中比较重要的部分规则。文章目录重构——改善既有代码的设计序前言第1章 重构,第一个案例第2章 重构原则第3章 代码的坏味道第4章 构筑测试体系第5章 重构列表第6章 重新组织函数第7章 在对象之间搬移特性第8章 重新组织数据第...

2019-07-02 16:00:49 349

转载 [码出高效] 阿里巴巴Java开发手册 1.4.0

在做微服务拆分相关的课题,会涉及到模块化重构和代码重构相关的东西,重构的速度和质量很大程度上取决于代码原本质量的好坏,所以看了一下这本书,有些知识点我也不知道,所以摘抄了其中比较重要的部分规则。文章目录编程规约命名风格常量定义代码格式OOP规约集合处理并发处理控制语句其它异常日志异常处理日志规约单元测试安全规约MySQL数据库建表规约索引规约SQL语句ORM映射工程结构应用分层二方库依赖服务器设...

2019-06-26 21:55:48 416

原创 [Docker] 两份docker-compose.xml共用一个network

1. 先起neo4j数据库和一个网络:version: '3'services: neo4j: image: neo4j:3.5.5 volumes: - ./conf:/var/lib/neo4j/conf - ./mnt:/var/lib/neo4j/import - ./plugins:/plugins - ./dat...

2019-05-16 16:24:56 3210 1

原创 [Neo4j] Spring Boot项目访问Neo4j报错

Spring Boot项目使用spring-data-neo4j连接neo4j,一直在本地跑可以正常启动、访问数据库;写好dockerfile,使用docker compose在服务器上跑会报错,如:Caused by: java.lang.NullPointerException: null at org.neo4j.ogm.MetaData.entityType(MetaData.j...

2019-05-16 16:12:21 1102

转载 [Neo4j] 添加算法插件包

下载graph-algorithms-algo-xxx.jar包,我下的是3.5.3.1,放到neo4j目录的plugins文件夹下修改 conf目录下的配置文件 neo4j.conf ,加一行:dbms.security.procedures.unrestricted=algo.*重启neo4j:...

2019-05-08 20:01:22 878

转载 [Neo4j] CQL命令

文章目录docker运行neo4jCQLcreate创建一个节点match获取数据RETURN子句MATCH & RETURN匹配和返回关系where子句delete子句remove子句SET子句ORDER BY子句UNION子句AS子句用于给一些别名UNION ALL子句LIMIT子句SKIP子句MERGE命令IN操作符字符串函数AGGREGATION聚合关系函数索引UNIQUE约束d...

2019-05-06 20:31:17 849

原创 [Docker] 使用Docker-compose部署Neo4j

项目结构:|- <project_dir> |- conf |- data |- logs |- mnt |- plugins |- docker-compose.ymldocker-compose.ymlversion: '3'services: neo4j: image: neo4j:3.5.5 volumes: - ....

2019-05-06 20:26:11 2173

转载 [面试] 找实习面试时问到的跟项目、分布式和数据库有关的问题

kubernetes:kubernetes的体系结构,master上的三大进程和作用,node上的三大进程和作用;服务发现和负载均衡,任务调度都怎么实现的;k8s网络模型:Flannel:数据从源容器中发出后,经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡,这是个P2P的虚拟网卡,flanneld服务监听在网卡的另外一端。Flannel通过Etcd服务维护了一张节点...

2019-04-11 20:06:21 414

原创 [高性能MySQL] 第1章 MySQL架构与历史

事务ACID1. 原子性(Atomicity)事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。回滚可以用回滚日志来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。2. 一致性(Consistency)数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。3. 隔离性(Isolation...

2019-02-22 14:29:33 249

原创 [Java并发编程实战] 第15章 原子变量与非阻塞同步机制

锁的劣势:如果线程持有锁而延迟,会导致其他的线程的等待。高优先级的线程阻塞,而低优先级的线程持有锁造成 优先级反转(priority inversion)。如果持有锁的线程被永久地阻塞,所有等待这个锁的线程就无法执行下去,造成 死锁(dead lock)。硬件对并发的支持比较并交换CAS:我认为V的值应该是A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为...

2019-01-17 19:22:18 174

原创 [Java并发编程实战] 第14章 构建自定义的同步工具

状态依赖性的管理构成前提条件的状态变量必须由对象的锁来保护,从而使他们在测试前提条件的同时保持不变;如果前提条件尚未满足,就必须释放锁,以便其它线程可以修改对象的状态,否则,前提条件就永远无法变成真。在再次测试前提条件之前,必须重新获得锁将前提条件的失败传递给调用者,调用者可以选择休眠等待、自旋等待或者调用Thread.yield可以通过简单的“轮询与休眠”重试机制实现阻塞,同时...

2019-01-17 18:54:59 201

原创 [Java并发编程实战] 第13章 显式锁

Lock与ReentrantLockLock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作ReentrantLock实现了Lock接口,并提供了与synchronized相同的互斥性和内存可见性,还提供了可重入的加锁语义可中断的锁获取操作:public boolean sendOnSharedLine(String message) throws Interrp...

2019-01-16 21:03:56 176

原创 [Java并发编程实战] 第12章 并发程序的测试

并发测试大致分两类:安全性测试和活跃性测试正确性测试:找出需要检查的不变性条件和后验条件基本的单元测试对阻塞操作的测试安全性测试(要最大程度检测出一些对执行时序敏感的数据竞争,那么测试中的线程数量应该多于CPU数量,这样在任意时刻都会有一些线程在运行,而另一些被交换出去,从而可以检查线程间交替行为的可预测性)资源管理的测试(堆快照、GC执行)使用回调在访问共享状态的操作中...

2019-01-16 21:02:33 177

原创 [Java并发编程实战] 第11章 性能与可伸缩性

想通过并发获得更好的性能,需要努力做好两件事情:更有效利用现有资源再出现新的处理资源时是程序尽可能地利用这些新的资源可伸缩性:当增加计算资源时(CPU/内存/存储容量/I/O带宽),程序的吞吐量或处理能力能相应地增加Amdahl定律:在增加计算资源的情况下,程序在理论上能够实现最高加速比,这个值取决于程序中可并行组件与串行组件所占的比重:最高加速比(F为串行执行的部分...

2019-01-16 21:01:16 218

原创 [Java并发编程实战] 第10章 避免活跃性危险

死锁锁的获取顺序要一致;如果锁的顺序未知,可以使用“加时赛”锁,在获得两个锁之前,先要获得这个“加时赛”锁,从而保证每次只有一个线程以未知的顺序获得这两个锁协作对象之间产生死锁:如果在持有锁时调用某个外部方法,将出现活跃性问题。在这个外部方法中可能会获取其它锁(这可能会产生死锁),或者阻塞时间过长,导致其它线程无法及时获得当前被持有的锁开放调用:调用某个方法时,不需要持有锁...

2019-01-16 20:59:10 192

原创 [Java并发编程实战] 第9章 图形用户界面应用程序

GUI是单线程的,因为多线程容易死锁,单线程通过线程封闭实现线程安全性:一部分原因在于输入事件的处理过程和GUI组件的面向对象模型之间存在错误的交互;另一个是MVC设计模式的应用导致不一致的锁定顺序——控制模块可以调用模型模块,模型模块将变化通知视图模块,但控制模块还能调用视图模块,并调用模型模块查询模型的状态所有Swing组件和数据模型对象都被封闭在事件线程中,因此任何访问他们的代码都...

2019-01-13 19:30:04 247

原创 [Java并发编程实战] 第8章 线程池的使用

在任务与执行策略之间的隐形耦合只有当任务都是同类型的并且相互独立时,线程池的性能才能达到最佳线程饥饿死锁:线程池小了,正在执行任务的线程在等待处于工作队列中的任务而阻塞对于运行时间较长的任务,可以限定任务等待资源的时间,缓解线程池的响应性问题线程池最优大小:CPU数量 * CPU利用率 *(1 + W/C(等待时间和计算时间的比值))配置ThreadPoolExecu...

2019-01-13 19:29:01 177

原创 [Java并发编程实战] 第7章 取消与关闭

任务取消每个线程有一个boolean类型的中断状态,中断线程时被置为true;静态的interrupted方法将清除当前线程的中断状态,并返回它之前的值,这是清除中断状态的唯一方法阻塞库方法(Thread.sleep/Object.wait)会检查线程何时中断,发现中断提前返回:清除中断状态、抛出InterruptedException。当线程在非阻塞状态下中断时,它的中断状态将...

2019-01-13 19:27:41 207 1

原创 [Java并发编程实战] 第6章 任务执行

在线程中执行任务大多数服务器应用都提供一种自然的任务边界选择方式:以独立的客户请求为边界当为每个请求创建一个线程时,任务处理代码必须是线程安全的,因为有多个任务时会并发调用这段代码无限制创建线程的缺陷:线程生命周期开销非常高资源消耗:活跃的线程会消耗内存,大量线程在竞争CPU时也会产生其他的性能开销稳定性:可以存在线程的数量存在限制,超出限制会抛出OutOfMemory...

2019-01-13 19:26:13 152

原创 [Java并发编程实战] 第5章 基础构建模块

同步容器类包括Vector和Hashtable,线程安全的实现方法是:将状态封装起来并对每个公有方法进行同步,使得每次只有一个线程能访问容器的状态同步容器类都是线程安全的,但在某些情况下需要额外的客户端加锁保护复合操作(迭代、跳转、条件运算)同步容器的迭代器没有考虑并发修改问题,当它们发现迭代过程中容器被修改了(迭代期间检查与容器关联的计数器是否被修改),会“及时失败”,抛出一个...

2019-01-11 09:15:04 194

原创 [Java并发编程实战] 第4章 对象的组合

设计线程安全的类过程包含三个基本要素:找出构成对象状态的所有变量找出约束状态变量的不变性条件建立对象状态的并发管理策略同步策略:如何在不违背对象不变条件或后验条件的情况下对其状态的访问操作进行协同如果在某个操作中包含有基于状态的先验条件,那么这个操作就称为依赖状态的操作实例封闭将对象封装在类的一个实例(作为类的一个私有成员)中,或者封闭在某个作用域内(作为局...

2019-01-10 09:34:23 196

原创 [Java并发编程实战] 第3章 对象的共享

可见性:缺乏同步可能产生:失效数据最低安全性:当线程在没有同步的情况下读取变量时,可能得到一个失效值,但至少是之前某个线程设置的值,而不是一个随机值最低安全性的例外:非volatile类型的64位数值变量,所以多线程共享可变的long和double等类型的变量是不安全的,除非用volatile声明,或用锁保护起来加锁的含义不仅局限于互斥行为,还包括内存可见性。为了确保所有线...

2019-01-10 09:30:28 241

原创 [Java并发编程实战] 第2章 线程安全性

对象的状态中包含了任何可能影响其外部可见行为的数据计算过程中的临时状态仅存在于线程栈上的局部变量中,并且只能由正在执行的线程访问无状态对象一定是线程安全的原子性:当某个计算正确性取决于多个线程的交替执行时序时,就会发生竞态条件先检查后执行:大多数竞态条件的本质,基于一种可能失效的观察结果来做出判断或者执行某个计算原子操作:对于访问同一个状态的所有操作(包括该...

2019-01-10 09:28:38 148

原创 [深入理解Java虚拟机] 第13章 线程安全与锁优化

文章目录线程安全Java语言中的线程安全1. 不可变2. 绝对线程安全3. 相对线程安全4. 线程兼容5. 线程对立线程安全的实现方法1. 互斥同步2. 非阻塞同步3. 无同步方案锁优化1. 自旋锁与自适应自旋2. 锁消除3. 锁粗化4. 轻量级锁5. 偏向锁笔者认为《Java Concurrency In Practice》的作者Brian Goetz对“线程安全”有一个比较恰当的定义:“当...

2019-01-08 09:12:32 199

原创 [深入理解Java虚拟机] 第12章 Java内存模型与线程

文章目录Java内存模型1. 主内存与工作内存2. 内存间交互操作3. volatile型变量的特殊规则4. 对于long和double型变量的特殊规则5. 原子性、可见性与有序性6. 先行发生原则Java与线程1. 线程的实现1.1. 使用内核线程实现1.2. 使用用户进程实现1.3. 使用用户线程加轻量级进程混合实现1.4. Java线程的实现2. Java的线程调度2.1. 协同式线程调度2...

2019-01-08 09:12:22 265

原创 [深入理解Java虚拟机] 第11章 晚期(运行期)优化

文章目录HotSpot虚拟机内的即时编译器解释器与编译器编译对象与触发条件编译过程编译优化技术1. 公共子表达式消除2. 数组边界检查消除3. 方法内联4. 逃逸分析Java与C/C++的编译器对比HotSpot虚拟机内的即时编译器解释器与编译器许多主流的商用虚拟机,如HotSpot、J9等,都同时包含解释器与编译器。解释器与编译器两者各有优势:当程序需要迅速启动和执行的时候,解释器可以首先...

2019-01-08 09:12:13 254

原创 [深入理解Java虚拟机] 第10章 早期(编译期)优化

文章目录Javac编译器1. 解析与填充符号表1.1. 词法、语法分析1.2. 填充符号表2. 注解处理器3. 语义分析和字节码生成3.1. 标注检查3.2. 数据及控制流分析3.3. 解语法糖3.4. 字节码生成Java语法糖1. 泛型与类型擦除2. 自动装箱、拆箱与遍历循环3. 条件编译Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端...

2019-01-08 09:12:01 323

原创 [深入理解Java虚拟机] 第8章 虚拟机字节码执行引擎

文章目录运行时栈帧结构1. 局部变量表2. 操作数栈3. 动态连接4. 返回地址5. 附加信息方法调用1. 解析2. 分派2.1. 静态分派2.2. 动态分派2.3. 单分派与多分派2.4. 虚拟机动态分派的实现3. 动态类型语言支持3.1. 动态类型语言MethodHandleinvokedynamic指令基于栈的字节码解释执行引擎运行时栈帧结构1. 局部变量表局部变量表是一组变量值存...

2019-01-07 13:54:26 492

原创 [深入理解Java虚拟机] 第7章 虚拟机类加载机制

文章目录类加载时机类加载过程1. 加载2. 验证2.1. 文件格式验证2.2. 元数据验证2.3. 字节码验证2.4. 符号引用验证。3. 准备4. 解析5. 初始化类加载器1. 类与类加载器2. 双亲委派模型与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序...

2019-01-07 13:53:00 136

Appium测试原理与工具安装(PPT演示)

对Appium的发展历史、安卓端测试原理进行讲解,同时简要介绍了Appium的安装配置与使用流程。

2018-10-31

空空如也

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

TA关注的人

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