自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhenglin的博客

运维、测试技术博客

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

原创 Promise在vue项目中快速灵活的应用

Promise用法博主个人博客网站简介promise和ajax功能类似,都是用来做异步请求的。promise的优势在于可以链式编程,在response还没回应时,then操作中可以把正常流程代码实现,catch捕获异常(而且可以放在最后进行统一捕获),可以不断then 下去; 前后端分离大背景下,ajax是基于原生的xhr,已经不能很好的适应mvvm这种前端模型了。如何申明本章主要是用来描述vue项目开发前端页面的,为何先介绍promise呢?因为vue核心组件始终是围绕着Promise展开的;

2020-05-17 11:13:34 1099 1

原创 java常用工具类和方法总结

常用工具类和方法总结博主网站:https://blog.zhenglin.workjava中好用的方法判断字符串是否都是数字if (null != str && 0 != str.trim().length() && str.matches("\\d*")) { return true; } 计算字符串中 字母a出现的次数int aLength = str.length()-str.replace("a","").length(); 打印json中的

2020-05-16 15:57:46 1444 1

原创 for循环实践:生成10000以内的质数

for循环实践:生成10000以内的质数更多干货见博主个人网站:https://blog.zhenglin.work分析:质数是只能被1和本身整除的正整数,最小质数是2,所以要对质数求余,除本身外,除以其他数都会有余数;int zs = 0;x1:for (int i = 2; i <= 100; i++) { x2: for (int j = 2; j &lt...

2020-02-14 11:48:52 719

原创 NIO和IO遍历指定目录效果对比

NIO和IO遍历指定目录效果对比更多干货见博主个人网站:https://blog.zhenglin.workNIO是jdk7引入的,IO是1.6版本之前就有的;现在就分别利用NIO和IO分别遍历一下某个目录下所有文件,对比写法、效率;利用IO的File遍历目录:public static void showPath(String dir){ File files = new Fil...

2020-02-14 11:47:25 198

原创 运用简单的超市购物车系统,理解重写equals、hashcode的意义

更多干货见博主个人网站:https://blog.zhenglin.work运用简单的超市购物车系统,理解重写equals、hashcode的意义,以及map的学习商品类:先编写一个商品类,要有编号、名称、价格三个成员变量,然后把getter、setter都写好(可以用ide生成)package com.zhengling.work;import java.util.HashMap...

2020-02-14 11:46:19 1770

原创 利用反射机制遍历String的字段和方法、构造器

利用反射机制遍历String的字段和方法、构造器更多干货见博主个人网站:https://blog.zhenglin.work利用java反射机制能获取某个类或某个对象的所属类、拥有的方法、成员变量等信息。很多java反编译工具就是利用这个机制。类名的获取java所有的类,都属于Class 类型,这个Class和class是不一样的,class属于java关键字、Class是类名,如同Str...

2020-02-14 11:20:47 488

原创 利用单向链表 进行递归的实践

利用单向链表 进行递归的实践更多干货见博主个人网站:https://blog.zhenglin.work原理阐述首先阐述一下什么叫递归呢,就是方法不断的自身调用,直至不满足条件,跳出这个递归循环;举个栗子:从前有座山,山里有座庙,庙里有个小和尚、小和尚让老和尚给他讲故事,然后老和尚开始讲故事:“从前有座山,山里有座庙,庙里有个小和尚、小和尚让老和尚给他讲故事,然后老和尚开始讲故事……” 这...

2020-02-13 16:11:49 464

原创 如何利用多线程交替输出奇偶数

如何利用多线程交替输出奇偶数更多干货见博主个人网站:https://blog.zhenglin.work用两个线程分别输出奇数、偶数思路:两个线程,一个输出奇数,一个输出偶数;说明这两个线程公用一个数据池。一个线程输出数据时,另一个线程不能输出,需要等另一个线程完成任务后,再执行输出任务。所以我们要抽象出一个数据池类,我们线程都调用数据池类型的同一个对象,然后用synchronize 同...

2020-02-13 16:10:43 1665

原创 利用lamda表达式实现接口方法

利用lamda表达式实现接口方法更多干货见博主个人网站:https://blog.zhenglin.work若想直接使用 接口中方法,在jdk8之前的做法有:1,编写一个类实现这个接口的(抽象)方法;2,或者直接在创建对象时 采用匿名类。接口:package com.zhengling.work;public interface DecoratorF { void m1()...

2020-02-13 16:09:17 2038

原创 枚举与switch结合实践

枚举与switch结合实践更多干货见博主个人网站:https://blog.zhenglin.work枚举,可以罗列出有限序列集合,比如最常见的周一至周日,switch分支判断语句,这里可以做一下结合,这样能掌握两个知识点。package com.zhengling.work;// 枚举中也可以使用构造器,默认是使用private修饰的; 枚举中每个元素 都是按照构造器(格式)生成的...

2020-02-13 16:07:25 362

原创 java如何利用装饰者模式进行方法扩充

如何利用装饰者模式进行方法扩充博主个人网站:https://blog.zhenglin.work适用场景说明在编码过程中经常会遇见到原有方法需要扩充的情况,要么在原有类上进行扩充、要么写一个继承类进行扩充; 但这样做都有一定的弊端;原有类进行扩充会返工 导致其他问题,继承类进行扩充耦合度太高;这时候装饰者模式就派上用场了。如有一个类DecoratorA,里面有一个m1方法:publ...

2020-02-13 16:03:13 230

原创 利用synchronized关键字了解死锁

利用synchronized关键字了解死锁博主个人网站:https://blog.zhenglin.worksynchronized是java关键字从字面上理解是同步的意思,它的作用是限制多线程的,使多线程暂时变成一个线程,确保线程的安全;synchronized代码块(包括方法、某个对象)只能一个线程调用;待这个线程调用完成后,其他线程才能调用此代码块; 就像生活中 ,第一个线程执行遇到s...

2020-02-13 16:01:58 246

原创 关于数组位置调整和元素出现次数统计代码

关于数组位置调整和元素出现次数统计代码博主网站:https://blog.zhenglin.work数组位置调整需求:调整数组,正数放在左边 负数放在右边,0在中间相对位置不变public static int[] tzsx(int[] myarr) throws ArrayIndexOutOfBoundsException { int[] newarr = new int[mya...

2020-02-13 15:59:45 206

原创 for和while如何相互转换

for和while相互转换博主网站:https://blog.zhenglin.work先看段代码:for (int i = 1; i <10 ; i++) { for (int j = 1; j <= i ; j++) { System.out.print(j+"\t"); } System.out.println();}Syst...

2020-02-13 15:57:47 21220

原创 数组一致性比较

数组比较需求:比较两个数组是否相同(忽略元素位置),值都相同即可public static boolean comparaarry(int[] arr1,int[] arr2) { if(arr1.length != arr2.length) { return false; }else { Arrays.sort(arr1); Arrays.sort(arr2); int ...

2020-02-13 15:55:33 976

原创 利用NIO复制文件学习buffer、Channel

利用NIO复制文件学习buffer、Channel可以通过博主个人网站:https://blog.zhenglin.work/middleware/use-NIO-read-write.html 查看更多详情本文主要目的是利用NIO技术复制文件,然后说明NIO比IO操作先进性,对输出输入流的操作从jdk1.7版本以前的IO方式转换到NIO上来。在上一章NIO和IO遍历指定目录效果对比已经说明...

2020-02-13 15:31:15 316

原创 jdk8新特性-Stream详解

jdk8新特性-Stream详解更多java技术文章参见博主网站:https://blog.zhenglin.work/jdk8与之前版本比较增加了几个重大的功能,这里重点说明Stream的原理、用法,也会简单罗列一些其他几个新增功能。其它新增功能新增功能1-日期时间处理类之前java版本,对日期和时间处理比较繁琐 ,所以在jdk8中引入了LocalDate、LocalTime以及结合这...

2020-02-12 22:21:26 992

原创 在bat脚本中巧用linux中的sed awk grep命令三巨头

在bat脚本中巧用linux中的sed awk grep命令三巨头更新更详细(贴图更多)的博客,见博主官网:https://blog.zhenglin.work场景描述有批安卓设备,需要刷机后,生成一个系统序列号文件,推送到这台安卓设备;由于时间原因、刷机人员能力限制,要快速搞出一套程序,能特别简单的生成这个序列文件,并推送到设备上;这种急需又简单的功能,可以考虑用bat脚本来快速实现,...

2020-01-31 12:12:37 5392

原创 如何去掉行首行尾的空格

如何去掉行首行尾的空格本人博客地址:https://blog.zhenglin.work通过sed替换方法去掉行首或行尾的空格$ echo -e "Hello Word " | sed 's#\s*##;s#\s*$##'Hello Word#可以与/互换,避免混淆这里统一用#来表示分隔符\s匹配任何空白字符,包括空格、制表符、换页符等等,等价于[ \f\n\r\...

2019-08-10 18:52:29 3502

原创 利用gitbook+git+jenkins+nodejs搭建起一套多版本说明的文档网站

利用gitbook+git+jenkins+nodejs搭建起一套多版本说明的文档网站博主博客网站:https://blog.zhenglin.work 干货满满 都有图片说明。现有这么一场景,产品产出了大量的文档,这些文档要对外展示,且产品每个版本的文档内容不一样,如何实现这么复杂的需求呢。首先拆解需求,然后再分步实现。1).文档编写采用统一标准,都用Markdown格式的,最后可以用...

2019-07-28 15:50:26 681

原创 uiautomator自动化测试原理和实现过程

uiautomator自动化测试原理和实现过程博主博客网站:https://blog.zhenglin.work 干货满满原理阐述​ 本人从事过很长一段时间的自动化测试,其中安卓的自动化主要选用的uiautomator框架,我这里阐述一下uiautomator自动化测试的原理,从整体入手、化繁为简,可以轻松理解这款框架精妙之处。就相当于有了屋子的图纸,再分步来添砖加瓦就容易的多。​...

2019-07-28 15:47:43 4179

原创 利用jenkins+harbor+k8s搭建起一套实时更新测试环境

利用jenkins+harbor+k8s搭建起一套实时更新测试环境由于copy图片太麻烦,本人所有原版带有图片博客地址为:https://blog.zhenglin.work场景描述有这么一场景,Java被测应用和Java探针一起制作成镜像后部署到k8s环境,当有新版探针发布时,要基于新版探针制作一个新的镜像,并在k8s集群中更换镜像。分析需求后,决定用两个jenkins job来完...

2019-07-18 16:59:50 1247

原创 Vcenter中利用模板快速部署centos虚拟机

Vcenter中利用模板快速部署centos虚拟机:带有图片原版博客:https://blog.zhenglin.work/1,登录vcenter<https://ip:port 输入账号,密码;进入后选择HTML5格式的2,找到centos虚机模板找到之前已经制作好的centos7.5模板[外链图片转存失败(img-fpjt7qj5-1563196581189)(images...

2019-07-15 21:18:14 1052

原创 was8.5在线安装和示例部署

was8.5在线安装和示例部署WebSphere8.5及以上版本,都是采用控制台安装安装解压从官网下载下来的文件后,要在有可视化界面的Linux进行操作;执行./install进行安装只选择我们要安装的WebSphere 服务器,因为需要到IBM服务器下载,异常缓慢;如果我们安装时,异常缓慢或者服务器总掉线时,我们可以先停止安装,编辑install.xml文件;修改之前备份一份...

2019-07-15 21:14:03 995

原创 jenkins pipeline风格的构建

pipeline风格的构建pipeline顾名思义,流水线;这种风格job具有良好的阅读性;这里重点要说的是传统pipeline和多分支pipeline两种构建方式;[外链图片转存失败(img-BhMMUrfJ-1563113106369)(images/1562939006935.png)]如上图所示两种pipelinepipeline就是传统的流水线构建,构建过程用(groove)s...

2019-07-14 22:06:30 798

原创 Jenkins 配置和job的备份

Jenkins 配置和job的备份关于jenkins中的备份可以借助插件:thinBackup来实现;备份插件一般有 Backup+Plugin PeriodicBackup+Plugin thinBackup备份如果只备份配置和job, 选用thinBackup(也是最可靠的),安装插件thinBackup后 就可以设定备份[外链图片转存失败(img-HpXmqDSO-1563...

2019-07-14 22:04:47 3626

原创 新建一个自由风格的job

新建一个自由风格的job自由风格的job,最容易上手,一般项目初期或者小型团队和不是特别复杂工程,都可以选择这种风格job进行编译构建。创建点击左上角New Item(中文语言环境下是“新建”)[外链图片转存失败(img-P00NazNN-1563112818558)(images/1562920041390.png)]填写名称,选择构建什么类型项目,这里选择自由风格的[外链图...

2019-07-14 22:02:19 192

原创 kafka常用命令

kafka常用命令我这里zookeeper端口修改为12181 kafka端口为19092了cd kafka/bin/列出所有topic./kafka-topics.sh --list --zookeeper localhost:12181查看某个topic详情./kafka-topics.sh --describe --zookeeper localhost:12181 --...

2019-07-14 21:41:31 322

原创 mongodb安装

mongodb安装官网下载地址:https://repo.mongodb.org/yum/redhat/7/mongodb-org/3.6/x86_64/RPMS/ 可以根据情况选择具体版本,下载五个安装包,分别是org mongos server shell tools 要保持每一个安装包版本一致。mongodb安装非常简单,网上资料非常丰富,这里简单写了一个脚本来实现安装mongo,并修...

2019-07-14 21:40:16 165

原创 linux中安装mysql5.6和5.7

linux中安装mysql5.6和5.7安装检查检查是否已有mariadb 数据库rpm -qa | grep mariadb如果检查出有mariadb安装文件,一定要卸载掉,否则无法安装rpm -e --nodeps $mariadbname ($mariadbname代表检查出来mariadb的数据库安装包名称)安装mysql5.6官网下载下来的mysql5.6可能含有多个安装文...

2019-07-14 21:37:46 750

原创 单台机器redis多实例

单台机器redis多实例redis作为缓冲、验证码数据库非常好用,但redsi是单线程的,如果通过rpm工具安装的话,一台机器只能安装一个实例,如果有多个实例,需要部署多台机器上;下面脚本就实现了,一台机器安装5个redis,每个redis端口都不一样;端口从16379开始。#!/bin/bash# 告诉bash如果任何语句的执行结果不是true则应该退出set -eecho ""e...

2019-07-14 21:35:48 485

原创 一些常用nginx小知识汇总

一些常用nginx小知识汇总nginx自动调整进程数(调整到和核数同样大小)worker_processes auto;调整客户端最大body大小client_max_body_size 20m;包含其他配置(这样就更便于模块化配置)include /etc/nginx/conf.d/*.conf;某一个访问(80或其他)端口,强制跳转到https(443)协议端口上...

2019-07-11 16:04:48 132

原创 nginx实现负载均衡和反向代理

nginx实现负载均衡 upstream ygcr { server 192.16.35.30:38080 weight=1; server 192.16.33.20:38080 weight=1; ip_hash; }利用upstream(轮询) 可以进行负载均衡,通过weight值的大小决定权重。 ip_hash...

2019-07-11 16:03:16 184

原创 NGINX指向静态网页

NGINX指向静态网页 server { listen 8081; #也可以指派其他端口 server_name localhost; root /home/apptrace/tracing/dashboard; #如果NGINX非root用户运行,不要放在root目录下 autoindex on; ...

2019-07-11 16:01:43 2052

原创 rancher应用商店的使用

rancher应用商店的使用​ 应用商店可以理解为helm源或charts仓库;启用后,找到自己要部署的应用,直接通过helm模板进行部署。在部署的时候 有些问答就是重置默认key-value配置的。配置应用商店全局启用、配置应用商店[外链图片转存失败(img-i6DraPNw-1562831427263)(images/1562745039456.png)]默认只开启了基于Lib...

2019-07-11 15:52:13 10161 1

原创 rancher中快速部署应用

rancher中快速部署应用阅读前提:有docker知识储备,并对kubernetes有一定的了解通过UI 部署应用rancher在命名空间又抽象出一层,项目的概念(这个只是便于管理rancher抽象出来的,kubernetes中并没有这层);我们可以先创建一个项目,然后在里面创建命名空间;这里为方便演示直接使用默认default的项目和default命名空间。工作负载(deploymen...

2019-07-11 15:49:51 2877

原创 gitlab 在线安装与备份

gitlab 在线安装与备份gitlab 安装方法说明在线安装文档:https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/编辑yum gitlab源vim /etc/yum.repos.d/gitlab-ce.repo[gitlab-ce]name=Gitlab CE Repositorybaseurl=https://mirro...

2019-07-11 15:47:38 364

原创 主备 Harbor 部署(harbor同步)

主备 Harbor 部署(harbor同步)前提 两台或以上harbor服务器,其中一台为主服务器,其他为备份服务器1,仓管管理中,新建目标[外链图片转存失败(img-rBXvvYkr-1562830960854)(images/1562656559566.png)]2,编辑目标[外链图片转存失败(img-Jo0zMh3U-1562830960855)(images/15626566...

2019-07-11 15:44:51 4288

原创 界面选择项(PS3)用法

界面选择项用法PS3="Enter option: "select option in "Install All" "Install Elasticsearch" "Install Mongo" "Install Nginx" "Install Kafka" "Install Redis" \"Install Druid" "Reboot System" "Exit Program"do...

2019-07-07 19:01:33 518

原创 getopt 与 getopts用法详解

getopt 与 getopts用法详解我们经常使用脚本 后面跟参数这种用法,这个时候使用getopt/getopts再合适不过了;下面就来详细说明 getopt (系统外部用法,后来增加的)与 getopts(内部,不支持长选项 只能是单个字符的短选项)的用法先看一段代码#!/bin/bashset -eset -o pipefailcmd=$(basename $0)defau...

2019-07-07 18:59:46 7592

空空如也

空空如也

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

TA关注的人

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