Across the great wall, we can reach the world

kubernetes源码通读-01-项目结构

目录结构 ➜ kubernetes git:(release-1.22) tree -LC 1 . ├── CHANGELOG ├── CHANGELOG.md -> CHANGELOG/README.md ├── CONTRIBUTING.md ├── LICENSE ├── LICENSES ├── Makefile -> build/root/Makefile ├── Makefile.

python3.5 vent

python3.5后原生支持虚拟环境 创建命令: python3 -m venv ./venv --system-site-packages –system-site-packages 参数用于保留已存在的包

kubernetes简介 k8s是一个便携的,可扩展的,以及开源的平台,用来管理容器化的工作负载和服务,该基础设施兼具声明式配置和自动化特性。k8s是一个大型的,快速成长的生态系统。使用k8s服务,支持以及工具,具备广泛的可行性 关键词:容器编排 由于篇幅限制,由来就不做介绍。 详细文档:https://k8s.amrom.tk/ 架构详解 控制平面:kube-controller-manager kube-apiserver kube-scheduler 工作平面:kubelet kube-proxy 数据存储:etcd 通信机制 Kubernetes具有“中心辐射型” API模式。 来自节点(或它们运行的Pod)的所有API使用都在apiserver处终止。 其他控制平面组件均未设计为公开远程服务。 apiserver配置为侦听启用了一种或多种形式的客户端身份验证的安全HTTPS端口(通常为443)上的远程连接。 应该启用一种或多种形式的授权,尤其是在允许匿名请求或服务帐户令牌的情况下。 控制平面与工作平面的通信默认为使用HTTP连接,具体为kubelet与kube-apiserver的实时通信。通信的主要目的有如下:

ack-edge介绍

介绍 阿里云边缘容器服务[email protected]是阿里云容器服务针对边缘计算场景推出的云边一体化协同托管方案。本文介绍阿里云边缘托管Kubernetes集群的产生背景和主要功能。

kubeedge调研

kubeedge介绍 KubeEdge是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于kubernetes构建,并为网络应用程序提供基础架构支持。云和边缘之间的部署和元数据同步。 KubeEdge使用Apache 2.0许可。并且绝对可以免费用于个人或商业用途。我们欢迎贡献者! 我们的目标是创建一个开放平台,使能边缘计算,将容器化应用编排功能扩展到边缘的节点和设备,后者基于kubernetes构建,并为云和边缘之间的网络,应用部署和元数据同步提供基础架构支持。 以上是官方给的介绍,理解起来就2个核心概念: 容器编排 边缘计算 容器编排 容器编排概念已经很成熟了,典型的有dokcer swarm和kubernetes,其都是先将服务已容器的形式进行发布,然后调度、控制整个容器。容器编排和微服务是紧密结合到一起的,微服务的最终呈现必然是容器化。 边缘计算 边缘计算是云厂商喜欢提及的一个概念,例如cloudflare 推出的cf workers服务。所谓的边缘指的是区别于传统的物理机、虚拟机等服务器设备,转而使用一些计算能力较低的设备,例如手机、平板、物联网设备等,这类设备的单机计算能力低,但是数量众多。考虑到部分程序所需要的计算能力并不是很大,这些设备的计算能力足以达到需求的。 kubernetes的缺陷与kubeedge的改进 k8s是容器编排的事实标准,可以以副本集为最小单元进行容器服务的编排。

利用cloudflare workers自建的几个镜像站点

Git clone加速站点: clone.linjinbao.tk github镜像: github.linjinbao.tk gist镜像: gist.linjinbao.tk ariang面板托管: ariang.linjinbao.tk gfw站点: https://gfw.linjinbao66.workers.dev taobao镜像: taobao.linjinbao.tk 附上相关git项目源码 [email protected]:linjinbao666/gfw-proxy.git

cloudflare worker使用

部署ariang到cloudflare workers mkdir -p ariang/public cd ariang/public wget https://github.com/mayswind/AriaNg/releases/download/1.1.7/AriaNg-1.1.7.zip unzip AriaNg-1.1.7.zip rm -f AriaNg-1.1.7.zip cd .. wrangler init --site ariang wrangler config wrangler publish wrangler.

golang交叉编译

Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能。 1、Mac下编译Linux, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 2、Linux下编译Mac, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.

关于镜像oci规范

早就知道镜像存在OCI规范,就是在镜像的元数据中加入一些表明镜像信息的标签,不知道如何,一次偶然就会在github的流水线中看到了,记录下来: { "target": { "docker-metadata-action": { "tags": [ "ghcr.io/linjinbao666/conda-base:main" ], "labels": { "org.opencontainers.image.title": "conda-base", "org.opencontainers.image.description": "conda-base", "org.opencontainers.image.url": "https://github.com/linjinbao666/conda-base", "org.opencontainers.image.source": "https://github.com/linjinbao666/conda-base", "org.

一个gitlab ci文件

一个golang项目典型的gitlab ci文件 image: golang:latest before_script: - export GOPROXY=https://goproxy.io,direct stages: - build - release - note build: stage: build script: - go build -o dt-release artifacts: paths: - .

一个shell程序

一个简单的shell程序: app.sh #!/bin/bash action=$1 version=$2 app_name=shuqi-public-${version} load() { file_name=shuqi-public-${version}.tar docker load -i data/${file_name} } clean() { old_container=`docker container ls | grep ${app_name}` if [ -n "${old_container}" ]; then echo "程序运行中,请先停止程序" exit; fi docker rm ${app_name} } start() { old_container=`docker container ls | grep ${app_name}` if [ -n "${old_container}" ]; then echo "程序已经在运行,请先停止" exit; fi ip=`ip a | grep -v docker0 |grep inet|grep -v 127.

zookeeper笔记

简介 ZooKeeper 为我们提供了高可用、高性能、稳定的分布式数据一致性解决方案,通常被用于实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。 另外,ZooKeeper 将数据保存在内存中,性能是非常棒的。 在“读”多于“写”的应用程序中尤其地高性能,因为“写”会导致所有的服务器间同步状态。(“读”多于“写”是协调服务的典型场景)。 权限控制 ZooKeeper 采用 ACL(AccessControlLists)策略来进行权限控制,类似于 UNIX 文件系统的权限控制。 对于 znode 操作的权限,ZooKeeper 提供了以下 5 种: CREATE : 能创建子节点 READ :能获取节点数据和列出其子节点 WRITE : 能设置/更新节点数据 DELETE : 能删除子节点 ADMIN : 能设置节点 ACL 的权限 对于身份认证,提供了以下几种方式:

华为云sdk踩坑

简介 工作中用到了华为云,想使用华为云的sdk实现批量启动流水线,分发代码等任务,简单试用了下,发现问题太多。 问题 api区域开放问题 华为云的api调用大致有3种方式,apiexplorer在线调用、hcloud命令行调用,以及通过sdk调用。而同时华为云有区域的区分,比如华东-上海二,华东-北京一这种。api在有些区域开放了调用,但是在另一区域则不开放。举例说明:CloudPipeline(流水线)api开放区域为:上海二、上海一、北京一、北京四、广州,一共5个区域,但是CloudBuild(编译构建)api开放区域则缺少了上海一。要知道CloudBuild会依赖CloudPipeline使用,前一步的api开放了,后一步却不开放,导致根本无法使用。 文档没有示例或者示例是错误的 CloudPipeline的一个接口,ListPipelineSimpleInfo,官方给出的请求示例为: "POST https://{endpoint}/v3/pipelines/list" 文档中根本没给出这个endpoint是什么样式的,后续经过尝试发现hcloud也会配置这个endpoint,其为cn-east-3,但是sdk调用时,其格式变成了:cloudpipeline-ext.cn-east-3.myhuaweicloud.com。样例的缺失,导致了调试成本巨大。 api混乱,缺少 举例来说,CloudPipeline流水线api,没有查看单条流水线详情的api等等 收获 经过不断的踩坑,实验出来了几个api的调用示例,贴出来以后备用。

冒号端口

Linux程序监听网卡端口的时候会有各种缩写,其中有一种叫做冒号端口的写法。 现象 首先,我们看一段netstat的输出: [email protected]:~# netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.

maven打包方案设计

简介 为了满足审计需要,将二方包和三方包纳入审计。该方案计划做以下工作:1. maven deploy 到独立仓库;2. 打包时候,作替换 操作步骤 第一步 建立私有仓库 http://*.*.*.*:8081/repository/maven-releases/ 该仓库开启allow redeploy,即允许覆盖更新包 第二步 配置maven全局settings.xml文件,增加server <servers> <server> <id>maven-releases</id> <username>admin</username> <password>2222</password> </server> <server> <id>maven-snapshots</id> <username>admin</username> <password>1111</password> </server> </servers> 第三步 调整deploy命令

一条复杂的sql

USE zentao; SELECT zt_task.id AS '编号', zt_projectproduct.product AS '所属产品', zt_product.`name` AS '产品名称', zt_project.NAME AS '所属项目', zt_story.title AS '相关需求', zt_task.NAME AS '任务名称', CASE zt_task.

kubernetes多用户切换

k8s中多用户使用,主要命令在kubectl config命令下,执行kubectl config可以看到提示: [[email protected] ansible]# kubectl config Modify kubeconfig files using subcommands like "kubectl config set current-context my-context" The loading order follows these rules: 1.

GitOps入门

GitOps概念 GitOps是一种实现持续交付的模型,利用Git开发工具对云原生应用程序进行操作和管理。当将应用程序部署到Kubernetes时,Git应该是唯一的事实来源。当开发人员更改应用程序时,Git将自动把它们push到Kubernetes进行部署。而且,如果Kubernetes内的运行状态发生变化但与Git内的状态不一致,则它们会从Git内恢复到已知状态。 参考:https://about.gitlab.com/topics/gitops/ GitOps与CI/CD GitOps和CI/CD是十分重要的工作伙伴。CI/CD可以让开发人员持续迭代、开发和部署应用程序。而迭代通常通过一个Git配置仓库进行(尽管也会有其他配置仓库)。在部署/交付阶段,构建的基于容器的应用程序被“push”到Kubernetes进行部署。GitOps会通过Kubernetes使用“pull”的方法来增强CI/CD模型,从而将运维层面带入部署/交付中。 但是,如果有人更改了Kubernetes集群中运行的某些内容,会发生什么?我们将使用Git作为声明性部署工具的主要事实来源,并利用其他工具在出现差异时向我们发出警报。此外,通过利用可以识别运行状态和声明状态之间差异的工具,Kubernetes可以修复为已知/声明的运行状态。 注意:持续集成和持续开发是互补但独立的过程。在理想状态下,GitOps会将批处理规模拆分为单件流程,每次只处理一个单元。但是,由于CI和CD流程发生在不同的组中,因此组织之间的流程可能会有所不同。 GitOps和应用程序生命周期 让我们从应用程序生命周期的视角来看一下GitOps的作用。在典型的生命周期中,应用程序会经历多个状态,包括: 代码 构建 创建镜像 测试

kubernetes源码学习01-cobra学习

Cobra是一个著名的CLI应用程序库,有很多知名的 Go 项目使用 Cobra 进行构建,比如:Kubernetes、Docker、Hugo 等等。 概念解释 Cobra 是构建在命令、参数和标识符之上的: Commands 表示执行动作 Args 就是执行参数 Flags 是这些动作的标识符 基本的执行命令如下所示: $ APPNAME Command Args --Flags # 或者 $ APPNAME Command --Flags Args 比如我们平时使用的一些命令行工具:

golang fallthrough用法

fallthrough:Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。 示例:切割字符串输出格式 func main() { const text = `Galaksinin Batı Sarmal Kolu'nun bir ucunda, haritası bile çıkarılmamış ücra bir köşede, gözlerden uzak, küçük ve sarı bir güneş vardır.

DevOps概念理解(转载)

原文地址:https://github.com/lcomplete/TechShare/blob/master/docs/engineering/devops.md 万字长文带你彻底搞懂什么是 DevOps DevOps 日渐成为研发人员耳熟能详的一个组合词,但什么是 DevOps,为什么 DevOps 对于互联网企业如此重要,真正将其思考透彻的人却不多,带着这些困惑,本文将带你一探 DevOps 的起源、原则和实践,让你搞清楚到底何为 DevOps。 DevOps 的起源可以追溯到 2008 年,在一次敏捷大会的敏捷基础设施话题组被提及,从起源我们可以了解到 DevOps 的发展跟敏捷软件开发是密不可分的。 DevOps 定义 DevOps 经过这些年的发展,其定义也在不断变化,先来看三段 DevOps 的 wiki 定义。

golang label

在Golang中能使用Label的有goto, break, continue.,这篇文章就介绍下Golang中Label使用和注意点. 注意点: Label在continue, break中是可选的, 但是在goto中是必须的 作用范围: 定义Label的函数体内. Label可以声明在函数体的任何位置, 不管Label声明在调用点的前面还是后面. 示例: import ( "fmt" "math/rand" "time" ) func main() { rand.

云原生时代日志采集方案浅谈

引言 本文基于kubernetes容器平台,分析容器日志采集的前因后果,通过比对EFK和Loki的方案,讨论云原生时代容器日志收集与分析的重点所在。 当服务从裸机部署进入容器时代,容器的强大隔离性与封装性,使得服务的日志变得不稳定。原本裸机运行的程序使用容器运行时,极易由于自动重启,或者自动重建等特性而丢失日志,即便采用了持久化挂载,依然无法根本问题:日志易丢失。对于一个大规模集群而言,完善的日志收集变得越来越重要。 需要采集日志的场景 可以说,基本上所有的程序的日志都应该采集,即使是那些一次性的job等。日志的采集不仅仅是提供给排查bug人员,而且应当作为系统审计的角色存在。收集整个容器平台的所有日志看起来是件多余的事情,毕竟大多数的日志并无用处,但是对于严谨的业务而言,日志是发现问题的最佳途径。 方案一 EFK 就kubernetes平台而言,日志的采集方案比较流行的有EFK,其中E是指elasticsearch,K是指kibana,但是F,有两种说法,一种是指fluentd,另一种是指filebeat;一般分析认为,fluentd相比较于filebeat属于重量级程序。本文任务此处为fluentd。EFK方案的架构很明确,fluentd以DaemonSet形式运行在集群所有节点上,在即指定路径的宿主机日志,例如:/var/log/pods;fluentd采集到日志后,传输到elasticsearch存储,elastic作为一个强大的全文检索引擎,具备良好的并发存储于查询的能力;kibana作为日志的展示工具。 EFK方案实现起来比较成熟,目前多数的方案都是用的是这种,包括k8s官方提供的插件中就有此种方案。但是该方案存在明显的缺陷: Elastic Search 的编写语言是Java,其运行时非常占用内存,有时需要把elastic移除到集群外部部署。 Elastic Search存储的内容虽然比较多,但是大多数并不需要采集。 方案二 Loki Loki是近期比较流行的k8s日志采集方案。博主认为,说Loki是日志采集方案其实是不准确的。先来看Loki采集的原理: Loki也采用了代理程序与服务端结合的设计:

frp反向代理的实际应用

frp介绍 frp是一个实现内网穿透的程序,通过客户端(内网)与服务端(外网)建立的持续信道,实现内网程序映射到外网。其原理大致为:服务端坚挺固定的几个端口;流量到达服务端端口;流量交给客户端处理,客户端转发流量到指定服务。 示例 服务端 /etc/systemd/system/frps.service [Unit] Description=Frp Server Service After=network.target [Service] Type=simple User=root Restart=on-failure RestartSec=600s ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini [Install] WantedBy=multi-user.

helm minio

minio部署 helm repo add minio https://helm.min.io/ helm install minio \ --namespace minio --create-namespace \ --set accessKey=minio,secretKey=minio123 \ --set mode=standalone \ --set service.

什么是DevOps

什么是DevOps: 维基百科的解释:https://en.wikipedia.org/wiki/DevOps DevOps is a set of practices that combines software development (Dev) and IT operations (Ops). It aims to shorten the systems development life cycle and provide continuous delivery with high software quality.

maven插件禁用

一个maven打包错误: [ERROR] Failed to execute goal pl.project13.maven:git-commit-id-plugin:2.2.5:revision (default) on project scheduler-server-dao: Could not complete Mojo execution...: Unable to find commits until some tag: Walk failure.

CKA考试准备

准备CKA证书考试: k8s官网文档翻译 k8s官网实践 reddit社区交流

k8s整合glusterfs做后端存储

安装glusterfs和heketi #所有存储服务器下载安装glusterfs yum install centos-release-gluster -y yum install glusterfs-server -y #启动 systemctl start glusterd #安装heketi yum install -y heketi heketi-client 部署gluster集群

tar打包现有的系统

选择一个系统,在根目录下将已有系统打包成tar文件: tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot --exclude=/opt/software . 导入方式一: cat system.tar | docker import - redhat:6.5 导入方式二:

git单独忽略一个文件的历史提交

使用场景: 将一个重要文件,勿加入git的版本管理中了,后续又更新了好多版本,此时想要去除该文件的所有历史提交。 方案一:删除所有git记录 方案二:单独删除该文件的历史记录 方案二操作如下: git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch visitor-consumer/src/main/java/com/fline/util/SMSUtil.java' --prune-empty --tag-name-filter cat -- --all git push origin --force --all git push origin --force --tags git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin git reflog expire --expire=now --all git gc --prune=now

hortonworks-鲲鹏

安装方式:磁盘安装 安装版本:0.5.4 参考文档:https://registry-project.readthedocs.io/en/latest/install.html#centos-redhat 下载压缩包并解压 wget https://github.com/hortonworks/registry/releases/download/0.5.4/hortonworks-registry-0.5.4.tar.gz [[email protected] local]# ls -al hortonworks/ total 36 drwx------ 8 root root 140 Mar 18 16:12 .

es-鲲鹏

安装版本:6.4.2 安装方式:磁盘安装 下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.2.tar.gz 解压 tar -zxvf elasticsearch-6.4.2.tar.gz mkdir /usr/local/es mv elasticsearch-6.4.2 elasticsearch cp elasticsearch /usr/local/es/ 修改配置

jdk-鲲鹏

安装版本:1.8.0_191 安装方式:磁盘安装 参考链接: http://www.cloud-onlinelab.cn/ 下载编译好的openjdk包 wget wget https://obs-mirror-ftp4.obs.cn-north-4.myhuaweicloud.com/systemreliable/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz 解压 tar -zxvf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz mv jdk8u191-b12 /opt/ 配置环境变量

mysql-鲲鹏

安装版本:5.7.27 安装方式: 二进制安装 准备编译好的包 wget https://obs.cn-north-4.myhuaweicloud.com/obs-mirror-ftp4/database/mysql-5.7.27-aarch64.tar.gz 增加用户和用户组 groupadd -r mysql && useradd -r -g mysql -s /sbin/nologin -M mysql 解压安装

nginx arm64编译安装

安装方式:编译安装 编译环境 yum install gcc gcc-c++ make unzip pcre pcre-devel zlib zlib-devel libxml2 libxml2-devel readline readline-devel ncurses ncurses-devel perl-devel perl-ExtUtils-Embed openssl-devel -y 获取源码

prometheus-node-exporter-grafana-鲲鹏

安装版本:prometheus-2.16.0 node-exporter-1.0.1 grafana-7.3.4 安装方式:磁盘安装 程序管理:systemd 程序包下载 https://github.com/prometheus/prometheus/releases/download/v2.16.0/prometheus-2.16.0.freebsd-amd64.tar.gz https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-arm64.tar.gz https://dl.grafana.com/oss/release/grafana-7.3.4.linux-arm64.tar.gz prometheus安装 上传并解压压缩包到/usr/local目录下 [[email protected] local]# ls -al prometheus/ total 134924 drwxr-xr-x 5 3434 3434 156 Mar 18 11:46 .

redis-鲲鹏

安装版本:4.0.3 部署方式:单机部署 安装方式:磁盘安装 下载组件依赖 yum install -y jemalloc jemalloc-devel 下载安装包 wget https://obs-mirror-ftp4.obs.cn-north-4.myhuaweicloud.com:443/database/redis-4.0.3-aarch64.tar.gz 解压安装 tar -xvf redis-4.

zookeeper-鲲鹏

安装版本:3.4.11 部署方式:单机版 安装方式:磁盘安装 下载安装包 wget https://obs-mirror-ftp4.obs.cn-north-4.myhuaweicloud.com/middleware/zookeeper-3.4.11.tar.gz 解压 tar -zxvf zookeeper-3.4.11.tar.gz cd zookeeper-3.4.11 mkdir data log mv zookeeper-3.

国产软件组件适配

docker arm64安装 版本:19.03 下载软件包 wget -c https://download.docker.com/linux/static/stable/aarch64/docker-19.03.6.tgz 解压二进制文件 tar -xf docker-19.03.06.tgz mv docker/* /usr/bin/ 配置systemd服务

空镜像

如何将当前宿主机制作成镜像? 答案:借助scratch 镜像 scratch 是一个空镜像,只能用于构建其他镜像,比如你要运行一个包含所有依赖的二进制文件,如Golang 程序,可以直接使用 scratch 作为基础镜像。例如busybox的Dockerfile写法: FROM scratch ADD busybox.tar.xz / CMD ["sh"] 将当前机器制作成OS镜像,使用docker build即可。

租到房子

早上在公司门口见到一块钱硬币 上午租到房子,在昌源清苑,租金1400每个月,押一付一,合同半年,房东顾国强 下午采购生活用品,花销68.4 开销: 早上地铁3.6元 中午吃饭20.8元 房租2800 采购生活用品68.4

面试题总结

MySQL数据库慢查询问题排查方法 查询慢查询数量 一般来说一个正常运行的MySQL服务器,每分钟的慢查询在个位数是正常的,偶尔飙升到两位数也不是不能接受,接近100系统可能就有问题了,但是还能勉强用。这几次出问题慢查询的数量已经到了1000多。 慢查询的数量保存在mysql库里面的slow_log表。 SELECT * FROM slow_log where start_time > '2019/05/19 00:00:00'; 这样就能查出一天以来的慢查询了。 查看当前进行的查询状态 大家应该都比较常用show processlist来查看当前系统中正在执行的查询,其实这些数据也保存在information_schema库里面的processlist表,因此如果要做条件查询,直接查询这张表更方便。 比如查看当前所有的process select * from information_schema.

八股文笔记

redis知识 简介 简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。 另外,Redis 除了做缓存之外,Redis 也经常用来做分布式锁,甚至是消息队列。 Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案

面试题

git合并指定的一次commit 答案: git cherry-pick commitid git rebase --onto branch commitid git撤销已经推送的提交 答案: git reset --soft id Java线程间通信 答案:利用线程同步来实现通信,通过while轮询方式,wait/notify机制

pod获取自身参数

简介 很多场景下,我们想要在容器运行的时候获取该副本本身的一些信息,例如副本的名称(名称由rc自动分配),当前运行的节点名,当前副本的IP等等信息,k8s为这类场景提供了解决方案。 示例: downward-api-env.yaml apiVersion: v1 kind: Pod metadata: name: downward spec: containers: - name: main image: busybox imagePullPolicy: IfNotPresent command: ["sleep", "9999999"] resources: requests: cpu: 15m memory: 5Mi limits: cpu: 100m memory: 200Mi env: - name: POD_NAME ##副本名称 valueFrom: fieldRef: fieldPath: metadata.

gitlab部署全流程记录

术语解释: 1. Gitlab GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。 2. Gitlab-CI Gitlab-CI是GitLab Continuous Integration(Gitlab持续集成)的简称。 从Gitlab的8.0版本开始,gitlab就全面集成了Gitlab-CI,并且对所有项目默认开启。 只要在项目仓库的根目录添加.gitlab-ci.yml文件,并且配置了Runner(运行器),那么每一次合并请求(MR)或者push都会触发CI pipeline。 3. Gitlab-runner Gitlab-runner是.gitlab-ci.yml脚本的运行器,Gitlab-runner是基于Gitlab-CI的API进行构建的相互隔离的机器(或虚拟机)。GitLab Runner 不需要和Gitlab安装在同一台机器上,但是考虑到GitLab Runner的资源消耗问题和安全问题,也不建议这两者安装在同一台机器上。

k8s修改dns解析

K8S 使用的 DNS 是 Core DNS,可以在这里添加新的域名、IP kubectl get cm -n kube-system NAME DATA AGE coredns 2 33d extension-apiserver-authentication 6 33d kube-proxy 2 33d kubeadm-config 2 33d kubelet-config-1.

PromQL语法学习

直接指标查询 表达式:node_load1表示查询当前1分钟的负载,仅使用指标查询。 函数查询 表达式:rate(node_cpu[2m]),表示查询单位时间(2分钟)内样本数据的增长率。 表达式:rate(node_load1[2m]),表示每2分钟内指标node_load1表示的指标的增长率。 结果: {container="kube-rbac-proxy", endpoint="https", instance="docker-desktop", job="node-exporter", namespace="monitoring", pod="node-exporter-sd26w", service="node-exporter"} 0.02933333333333333 排除指定标签影响 以上表达式查询出来的结果中都会由多个标签表示,例如上述的结果由container,endpoint,instance,job,namespace,pod,service,标签共同表示以上标签如果有任何不同,则认为属于两条记录。如果要忽略某一标签的印象,则需要使用without排除:

子网掩码表示

示例: 192.168.2.0/24 表示 固定前24位,后8位可以任意变动,所以表示的ip段为192.168.2.0-192.168.2.255。 192.168.2.0/24 表示 固定前26位,后6位可以任意变动,所以表示的ip共有2^6-2个。

spring boot 切换到postgress数据库-jpa版

适用范围 基于spring boot 2.0 orm框架使用jpa 无法修改原先的任何代码。 操作步骤 修改pom文件加入依赖 pom.xml <!--https://mvnrepository.com/artifact/org.postgresql/postgresql --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.18</version> </dependency> 修改pom文件,新增profile环境 pom.

k8s in action 阅读笔记

如何保证多次请求命中同一个pod? If you execute the same command a few more times, you should hit a different pod with every invocation, because the service proxy normally forwards each connection to a randomly selected backing pod, even if the connections are coming from the same client.

外部服务创建

简介 k8s中的资源类型Service用作代理Pod,一般来说需要在Service中定义selector才可以绑定到对应pod上。存在一种特殊的service,即不指定selector的service。这种类型的service一般用作代理外部服务。例如集群外存在mysql服务,这时想要映射到集群内部地址使用,此时即可使用这种service。 要点 service不指定selector 创建endpoints与service同名 此时即可完成绑定 示例: external-service.yaml --- apiVersion: v1 kind: Service metadata: name: external-service spec: type: NodePort ports: - port: 80 --- apiVersion: v1 kind: Endpoints metadata: name: external-service subsets: - addresses: - ip: 172.

k8s部署的实用命令

使用kubeadm部署的时候。 containerd生成默认配置 containerd config default > /etc/containerd/config.toml 修改后最终文件: config.toml version = 2 root = "/var/lib/containerd" state = "/run/containerd" plugin_dir = "" disabled_plugins = [] required_plugins = [] oom_score = 0 [grpc] address = "/run/containerd/containerd.

jdk1.15编译

github下载项目 https://github.com/openjdk/jdk 安装依赖 yum -y install build-essential gawk m4 libasound2-print-dev binutils libmotif3 libmotif-dev ant yum install libX* yum install fontconfig-devel yum install autoconf yum install -y centos-release-scl yum install -y devtoolset-7 yum install libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel -y yum install cups-devel yum install fontconfig-devel yum install alsa-lib-devel -y 编译 make images

k8s 1.19 部署脚本

1. 概述 采用裸机部署的方式,主要组件版本如下: 组件 版本 发布时间 kubernetes 1.19.6 2020-12-18 etcd v3.4.3 crictl v1.

哈希函数

哈希函数又称散列函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。[1]好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。 如今,散列算法也被用来加密存在数据库中的密码(password)字符串,由于散列算法所计算出来的散列值(Hash Value)具有不可逆(无法逆向演算回原本的数值)的性质,因此可有效的保护密码。 散列函数的性质 所有散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。但另一方面,散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同,这种情况称为“散列碰撞(collision)”,这通常是两个不同长度的输入值,刻意计算出相同的输出值。输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。 典型的散列函数都有非常大的定义域,比如SHA-2最高接受(264-1)/8长度的字节字符串。同时散列函数一定有着有限的值域,比如固定长度的比特串。在某些情况下,散列函数可以设计成具有相同大小的定义域和值域间的单射。在密码学中,散列函数必须具有不可逆性。 散列函数的应用 由于散列函数的应用的多样性,它们经常是专为某一应用而设计的。例如,加密散列函数假设存在一个要找到具有相同散列值的原始输入的敌人。一个设计优秀的加密散列函数是一个“单向”操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。为加密散列为目的设计的函数,如SHA-2,被广泛的用作检验散列函数。这样软件下载的时候,就会对照验证代码之后才下载正确的文件部分。此代码不会因为环境因素的变化,如机器配置或者IP地址的改变而有变动。以保证源文件的安全性。 错误监测和修复函数主要用于辨别数据被随机的过程所扰乱的事例。当散列函数被用于校验和的时候,可以用相对较短(但不能短于某个安全参数, 通常不能短于160位)的散列值来验证任意长度的数据是否被更改过。 冲突解决 开放地址法: 以发生冲突的哈希地址为输入,通过某种哈希冲突函数得到一个新的空闲的哈希地址的方法 。有以下几种方式: 线性探查法:从发生冲突的地址开始,依次探查下一个地址,直到找到一个空闲单元。 平方探查法:设冲突地址为d0,则探查序列为:d0+1^2,d0-1^2,d0+2^2… 拉链法:

v2ray全步骤记录

背景介绍 由于不可描述的原因,国内的网络长期针对谷歌等网站进行屏蔽,导致国内网络与世界脱轨,形成局域网,并且,时有民众因为“私自搭建非法网络信道”罪名被处罚。但是,作为程序员,本身非常依赖信息的获取,由此产生了搭建VPN的需求。注意,由于国情限制,此操作只可以私下小规模使用,并伴随牢狱风险。 条件准备 国外VPS,建议vultr,国内的VPS由于处在大环境下,不会提供访问境外网络的服务,并有记录流量日志的行为。 VPN选择,在v2ray和trojan中进行选择,建议v2ray。 域名准备(可选),使用域名方便配合CDN代理进行源站伪装,避免IP被直接墙掉。 操作步骤 第一步:注册vultr账号: https://www.vultr.com; 第二步:充值金额,新账号,一般会有$100的额度,所以一般无需充值,用完再充值; 第三步:部署一台机器 ![截屏2020-12-10 下午1.02.19](/Users/linjinbao/Desktop/截屏2020-12-10 下午1.02.19.png) 选择Deploy New Server 机器位置选择美国,(亚洲的很多机器IP无法使用,如果能找到可用的亚洲最好)

git上传大文件

github默认文件限制阿紫50M内,超出50M会报警告,超出100M无法上传。如果仍然想上传,可以使用git large file system,上限1GB。 brew install git-lfs git lfs install git rm --cached bin/bin/kubelet. ##清除已经加入本地的记录 git lfs track "bin/kubelet" cat .

ingress部署文档

deploy.yaml apiVersion: v1 kind: Namespace metadata: name: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/instance: ingress-nginx --- # Source: ingress-nginx/templates/controller-serviceaccount.yaml apiVersion: v1 kind: ServiceAccount metadata: labels: helm.

sonar代码检查工具使用说明-研发人员

**! 注意此文档为测试文档,让大家提前使用并熟悉下代码检查的工作原理,后续会集成到jenkins中 ** 1. 背景说明 代码检查是项目开发过程中的重要组成,及时的代码检查可以帮助规避掉多数的简单漏洞和潜在bug。本文旨在讲解如何使用sonar的代码检查工具进行代码检查。支持语言:html js java 等 2. maven操作演示 2.1 在maven的settings.xml中做如下配置, pluginGroups在settings标签下: <pluginGroups> <pluginGroup>org.sonarsource.scanner.maven</pluginGroup> </pluginGroups> 2.2 profile中加入sonar的环境配置: <profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <sonar.

整合sonar代码检查

内容概要: postgres部署 sonar部署 插件安装 整合sonar和maven 整合和sonar和idea 整合sonar和eclipse 整合sonar和jenkins 1. postgress部署 采用k8s持久化部署 postgress.yaml --- apiVersion: v1 kind: ConfigMap metadata: name: postgres-config labels: app: postgres data: POSTGRES_DB: postgresdb POSTGRES_USER: postgresadmin POSTGRES_PASSWORD: admin123 kind: PersistentVolume --- apiVersion: v1 metadata: name: postgres-pv-volume labels: type: local app: postgres spec: storageClassName: manual capacity: storage: 5Gi accessModes: - ReadWriteMany hostPath: path: "/mnt/data" --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: postgres-pv-claim labels: app: postgres spec: storageClassName: manual accessModes: - ReadWriteMany resources: requests: storage: 5Gi apiVersion: apps/v1 kind: Deployment metadata: name: postgres spec: replicas: 1 selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres:10.

containerd手动导入镜像

众所周知,k8s.gcr.io 长期被墙,导致 k8s 的基础容器 pause 经常无法获取。k8s docker 可使用代理服拉取,再利用 docker tag 解决问题 docker pull mirrorgooglecontainers/pause:3.1 docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1 我在 k8s 集群中尝试使用 containerd 作为 CRI,发现镜像下载和导入与 docker 存在一些区别,大致如下:

linux常用命令

原文地址: https://github.com/xjh22222228/linux-manual 目录 文件操作 head tail ls pwd wc find mkdir mktemp chattr more paste stat grep touch cd rm rmdir cp cat mv locate open source tree ln file 系统管理 nohup watch ping which shutdown reboot uptime crontab uname ifconfig whereis chmod lsof chown systemctl service free type alias time jobs & 系统进程 ps pstree top netstat kill killall 用户管理 useradd userdel passwd chpasswd chsh chfn usermod users who w last su whoami 环境变量 printenv set export unset 压缩、解压 zip unzip gzip bzip2 tar 加解密 md5sum base64 网络 ssh wget curl scp rsync 磁盘 df du 包管理 yum apt-get 其他 目录名称含义 重定向输入和输出 管道 echo date man sleep history xargs cal expr bc timeout exit vim basename read tee clear 文件操作 head 显示文件的头部内容,如果不指定参数默认显示10行

nginx拦截空reffer

背景解释 web系统出现垂直越权的现象,具体表现为,低权限账户登录后,直接请求高权限的接口可以获取数据,原因在于后台并没有实现对接口的权限校验,只是在菜单上简单隐藏。 解决方案 方案一:引入完善的权限框架,例如shiro 方案二:nginx控制reffer,禁止直接访问 配置实例: location /login.html { root D:\code2\fdmp-pages; autoindex on; index index.html; } location / { valid_referers server_names ~.

关于

Across the great wall, we can reach the world. 越过长城,走向世界。

k8s-1.16二进制部署

01. 初始化系统和全局变量 设置主机名 hostnamectl set-hostname node2 # 将 node2 替换为当前主机名 如果 DNS 不支持主机名称解析,还需要在每台机器的 /etc/hosts 文件中添加主机名和 IP 的对应关系: cat >> /etc/hosts <<EOF 10.

k8s的rbac权限控制

简介 rbac权限控制是role based access control的简写,中文名基于角色的权限控制。 RBAC API 对象 Kubernetes有一个很基本的特性就是它的所有资源对象都是模型化的 API 对象,允许执行 CRUD(Create、Read、Update、Delete)操作(也就是我们常说的增、删、改、查操作),比如下面的这下资源: Pods ConfigMaps Deployments Nodes Secrets Namespaces 上面这些资源对象的可能存在的操作有:

k8s 映射外部服务

简介 集群内的应用有时候需要调用外部的服务,我们知道集群内部服务调用都是通过 Service 互相访问,那么针对外部的服务是否也可以保持统一使用 Service 呢?答案是肯定的,通过 Service 访问外部服务,除了方式统一以外,还能带来其他好处。如配置统一,不同环境(空间)相同应用访问外部不同环境的数据库,可以通过 Service 映射保持两边配置统一,达到不同空间应用通过相同 Service Name 访问不同的外部数据库。 配置文件 mysql-180.yaml apiVersion: v1 kind: Service metadata: name: mysql spec: type: LoadBalancer ports: - port: 40010 targetPort: 40010 --- apiVersion: v1 kind: Endpoints metadata: name: mysql subsets: - addresses: - ip: 45.

kubeadm部署1.13.1

1. 配置阿里云yum源 /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes Repo baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg enabled=1 ##添加gpg验证 wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg rpm --import rpm-package-key.gpg 2. 安装基本工具 yum install kubectl-1.

k8s部署traefik2.2

简介 步骤列表: 创建命名空间 创建CRD资源 创建RBAC权限 创建traefik配置文件 给节点打标签 部署traefik 部署dashboard 1. 创建命名空间 kubectl create ns ingress-traefik traefik相关的资源都部署在ingress-traefik名称空间下 2. 创建CRD资源 Traefik 2.

linux cgroups简单使用

简介 cgroups 是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制,目前越来越火的轻量级容器 Docker 就使用了 cgroups 提供的资源限制能力来完成cpu,内存等部分的资源控制。另外,开发者也可以使用 cgroups 提供的精细化控制能力,限制某一个或者某一组进程的资源使用。比如在一个既部署了前端 web 服务,也部署了后端计算模块的八核服务器上,可以使用 cgroups 限制 web server 仅可以使用其中的六个核,把剩下的两个核留给后端计算模块。 简单理解:cgroups可以实现cpu和内存的机器资源的精细化控制,比如限制使用10%的cpu资源,使用100M内存等功能。Docker容器运行时通过参数指定内存和cpu占用功能就是基于这个实现的。 主要作用 实现 cgroups 的主要目的是为不同用户层面的资源管理提供一个统一化的接口。从单个任务的资源控制到操作系统层面的虚拟化,cgroups 提供了四大功能:

mvn一个打包错误

错误描述 [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.271 s [INFO] Finished at: 2020-10-14T17:06:23+08:00 [INFO] Final Memory: 41M/358M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.

acme.sh申请证书

简介 acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书. 主要步骤: 安装 acme.sh 生成证书 安装证书 配置nginx 更新 出错怎么办, 如何调试 吊销,移除证书 1.

私有集群支持loadbalancer

k8s 使本地集群支持 LoadBalancer 服务 为了使本地集群支持 LoadBalancer 服务,可以参考以下两种实现方案: keepalived-cloud-provider metalLB 这里我们选择使用 metalLB。 metalLB 的部署很简单,直接使用 yaml 文件部署: kubectl apply -f https://raw.

maven 打包多环境配置

前言 在开发中,我们经常会遇到环境问题。例如,开发环境和测试环境和线上环境,其数据库配置等各不相同。针对这种情况,一般我们采用的方式有一下几种:1. 打包后手动替换配置文件;2. 打包后使用CI工具解压-替换-压缩;3. 使用maven profile功能,打包时候就完成环境的分发。初级(菜鸟)一般使用方式1比较多,方式2则是运维喜欢做的事情,而方式3才是最为优雅的方式。本文采用maven profile的方式,结合spring profile,实现打包后即可运行,无需修改文件的效果。 操作步骤 配置pom.xml <profiles> <profile> <id>dev</id> <!--dev为唯一名称,用于标识区分--> <properties> <!--profile.active可以换成别的,是一个环境变量值,用于整合srping profile--> <profile.active>dev</profile.active> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <profile.

kubernetes自定义资源PrometheusRule的使用

第一步 部署prometheus operator环境 git地址:https://github.com/prometheus-operator/kube-prometheus.git 选用适用自己k8s版本的release,例如我k8s是1.13的,所以我选择了release-o.1。 部署文件都在manifests/文件夹下,直接一键部署就行。 第二步 修改alertmanager告警配置 由于内置的告警方式不符合需求,所以需要修改下,加入邮箱和webhook配置。 alertmanager.yaml global: resolve_timeout: 5m smtp_smarthost: 'smtp.163.com:25' smtp_from: '***@163.com' smtp_auth_username: '***@163.com' smtp_auth_password: '***' smtp_hello: '163.

spring 使用websocket主动推送日志到页面展示

简介 Java程序运行的时候会产生大量的日志,有的是自己主动打印的,有些的第三方包中打印的日志,一些场景下需要将程序执行过程中的日志主动推送出去,例如使用docker-java制作镜像的时候,我需要将制作过程大日志输出到页面,用来判断制作过程。 相关流程 logback日志切割 阻塞队列/环形队列处理并发读写 websocket推送 方案一实现 很明显,日志需要通过log4j等日志框架收集。我们需要自定义一个过滤器,处理需要的日志信息,在过滤器中将日志存到阻塞队列或者环形队列。配置如下: logback.xml <?xml version="1.0" encoding="UTF-8" ?> <configuration scan="true" scanPeriod="3 seconds"> <!--设置日志输出为控制台--> <include resource="org/springframework/boot/logging/logback/defaults.

踩坑spring boot打jar包

问题描述 一般来说使用spring 默认的打包,java -jar,会无法运行,出现目标属性中没有清单的提示,此时需要修改写pom的打包插件。 解决 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.version}</version> <configuration> <mainClass>ecs.Application</mainClass> //启动类 <layout>JAR</layout> <executable>true</executable> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> 使用如上配置会将所有以来全部打包的jar中,可以直接运行。

helm使用笔记

安装仓库 helm repo add stable https://kubernetes-charts.storage.googleapis.com/ helm repo add bitnami https://charts.bitnami.com/bitnami helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/ helm repo update # Make sure we get the latest list of charts helm repo list 搜索 helm search repo stable ##在stable仓库中搜索所有可用的charts helm search hub tomcat ## 安装 helm install stable/mysql --generate-name ## 安装MySQL并自动生成名称 helm show all stable/mysql ##显示charts内容 hem pull stable/mysql 下载远程仓库的charts到本地,下载下来的是mysql-1.

apm技术选型与实践

apm 简介 APM应用性能管理(Application Performance Management)主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总成本。 从实际的应用场景上,APM可以在以下方面为我们提供帮助: 最终用户体验评估和优化,提升用户体验,提高应用DAU和留存 链路监控,线路优化 机房选型,第三方服务(CDN、云服务、推送等)选型 竞品性能对标 劫持分析和优化 实时告警和通知 业务流程代码级的监控和优化 业务压测和性能剖析 快速发现和定位性能问题,减少业务故障恢复时间 目前主流的apm产品,Pinpoint,SkyWalking, zipkin。 其中,SkyWalking原生支持es存储,所以此次选择SkyWalking技术方案。

新的开始

新的开始 面试了两次 端点 腾讯 感觉,能力还是不够,研究不够深入的全当做会的写在简历上了。 面试题整理 [mysql] 联合索引字段顺序会产生影响吗? 什么情况下需要建索引?什么情况下不建? mysql 查看连接数和进程数? 慢查询是什么? [linux] Linux 端口数一共多少,怎么确定的? sh 和 bash 的区别 脚本首行的#!

默认PATH

Linux 默认PATH变量: export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

中文域名浏览器解码问题

2020-03-10-中文域名浏览器解码问题 测试域名 https://985保研群.linjinbao66.tk/ 二级域名是中文,已经设置过dns服务商的解析。 问题发现 从浏览器复制出来 可以发现复制的东西变了: https://xn--985-bm0el25p5qj.linjinbao66.tk/ 域名中的中文被,xn–985-bm0el25p5qj替换了 原因解释 早期的DNS(Domain Name System)是只支持英文域名解析。在IDNs(国际化域名Internationalized Domain Names)推出以后,为了保证兼容以前的DNS,所以,对IDNs进行punycode转码,转码后的punycode就由26个字母+10个数字,还有“-”组成。 Punycode是一个根据RFC 3492标准而制定的编码系统,主要用於把域名从地方语言所采用的Unicode编码转换成为可用於DNS系统的编码。Punycode可以防止IDN欺骗。 浏览器对punycode的支持 目前,因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS服务器上并不支持直接的中文域名解析,所有中文域名的解析都需要转成punycode码,然后由DNS解析punycode码。其实目前所说和各种浏览器完美支持中文域名,只是浏览器软里面主动加入了中文域名自动转码,不需要原来的再次安装中文域名转码控件来完成整个流程。

golang 读取流操作

2020-03-09-golang-读取流操作 读取控制台输入 使用fmt.Sscanf 示例代码: package main import "fmt" var ( firstName string lastName string s string i int f float32 input = "56.

服务器内存优化

2020-03-09-服务器内存优化 释放缓存 sync echo 3 > /proc/sys/vm/drop_caches 排序 ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | less 查看启动的服务 systemctl list-unit-files --type=service --state=enabled

git 问题

2020-03-08-git-问题 问题描述 git 合并的时候无法合并,提示: fatal: refusing to merge unrelated histories 原因解释 出现这个问题的最主要原因还是在于本地仓库和远程仓库实际上是独立的两个仓库。假如我之前是直接clone的方式在本地建立起远程github仓库的克隆本地仓库就不会有这问题了。 查阅了一下资料,发现可以在pull命令后紧接着使用–allow-unrelated-history选项来解决问题(该选项可以合并两个独立启动仓库的历史)。 解决方案 git merge --squash fline --allow-unrelated-histories

JS回调的理解

代码示例 /** * 模块引入 */ var fs = require('fs'), path = require('path'), http = require('http'); var MIME = { '.css':'text/css', '.

Spring Boot教程第24篇:整合docker

Spring Boot教程第24篇:整合docker 在idea中使用docker插件,使用远程docker服务器打包。 在远程机器,linux上安装docker并开启docker远程访问。 /usr/lib/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=http://docs.docker.com After=network.target Wants=docker-storage-setup.service Requires=docker-cleanup.timer [Service] Type=notify NotifyAccess=main EnvironmentFile=-/run/containers/registries.conf EnvironmentFile=-/etc/sysconfig/docker EnvironmentFile=-/etc/sysconfig/docker-storage EnvironmentFile=-/etc/sysconfig/docker-network Environment=GOTRACEBACK=crash Environment=DOCKER_HTTP_HOST_COMPAT=1 Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin ExecStart=/usr/bin/dockerd-current \ --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \ --default-runtime=docker-runc \ --exec-opt native.

apidoc 写法

apidoc 写法 简介 apidoc通过在你代码的注释来生成api文档的。它对代码没有侵入性,只需要你写好相关的注释即可,并且它仅通过写简单的配置就可以生成高颜值的api接口页面。它基于node.js,所以你需要安装node.js环境。node.js安装,点击这里。这里就不介绍。 安装 npm install apidoc -g 配置写法 apidoc.json作为apidoc配置文件 { "name": "example", "version": "0.1.0", "description": "A basic apiDoc example" } 注释写法 /** * @api {POST} /register 注册用户 * @apiGroup Users * @apiVersion 0.

Spring Boot教程第11篇:swagger2

swagger2学习 swagger,中文“拽”的意思。它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试。另外swagger很容易构建restful风格的api,简单优雅帅气,正如它的名字。 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>learnboot</artifactId> <groupId>tk.amrom</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>learnswagger2</artifactId> <dependencies> <dependency> <groupId>org.

Spring Boot教程第10篇:restdoc

Spring Boot教程第10篇:restdoc Spring REST Docs的目标是帮助您为您的RESTful服务生成准确可读的文档。 编写高质量的文档很困难。减轻这种困难的一种方法是使用非常适合工作的工具。为此,Spring REST Docs 默认使用Asciidoctor。Asciidoctor处理纯文本并生成HTML,进行样式化和布局以满足您的需求。如果您愿意,还可以将Spring REST Docs配置为使用Markdown。 Spring REST Docs利用Spring MVC的测试框架 Spring WebFlux WebTestClient或 REST Assured 3编写的测试生成的代码片段。这种测试驱动的方法有助于保证服务文档的准确性。如果代码片段不正确,则生成它的测试将失败。

github webhooks配置

webhooks 自动部署 原理 利用Github在仓库进行操作时,可以通过配置webhook向服务器发送请求,在服务器端接到请求后,使用脚本来自动进行git pull操作。即,当我在本地机器A进行一个push操作到github,github会在这个操作结束后,发起一个POST请求到机器B,机器B收到这个请求后,执行同步操作,git fetch等等,因为使用的web服务,交换的数据格式为json等,所以叫webhooks,web钩子。 准备工作 VPS (独立IP),或者能请求到的http服务网址就行,服务受自己控制 nodeJS 第一步 在机器B编写webhooks服务 webhooks服务可以使用Java Web,也可以使用Node,只要可以监听端口,并接收响应web请求就可以。 我这里使用的Node的简易的Web服务。 webhook.js var http=require('http') var createHandler = require('github-webhook-handler') var handler = createHandler({ path: '/', secret: '****' }) // 上面的 secret 保持和 GitHub 后台设置的一致 function run_cmd(cmd, args, callback) { var spawn = require('child_process').

自建DNS配置记录

自建DNS解析服务器 安装软件 yum -y install bind bind-chroot bind-utils systemctl start named systemctl enable named 端口开放:53 和 953 netstat -antup | grep named 配置:/etc/named.

Spring Boot教程第6篇:springboot 整合mybatis

Spring Boot教程第6篇:springboot 整合mybatis 前言:spring boot 与mybatis整合严格要求版本,即 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> mybatis的坐标依赖的spring版本需要在maven仓库查看,如当前版本需要使用springboot 2.1.9.RELEASE版本 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.

Spring-Boot教程第7篇:springboot-tx 事务

Spring-Boot教程第7篇:springboot-tx 事务 基于mybatis整合开启事务很简单,注解 @Transactional,该注解放在service层,可以注解在类上,也可以放在方法上 示例: @Service @Transactional public class AccountService { @Autowired private AccountMapper accountMapper; public int add(String name, double money) { return accountMapper.

Spring Boot教程第5篇:beatsql

Spring Boot教程第5篇:beatsql BeetSql是一个全功能DAO工具, 同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。 beatlsql 优点 开发效率 无需注解,自动使用大量内置SQL,轻易完成增删改查功能,节省50%的开发工作量 数据模型支持Pojo,也支持Map/List这种快速模型,也支持混合模型 SQL 模板基于Beetl实现,更容易写和调试,以及扩展 维护性 SQL 以更简洁的方式,Markdown方式集中管理,同时方便程序开发和数据库SQL调试。 可以自动将sql文件映射为dao接口类 灵活直观的支持支持一对一,一对多,多对多关系映射而不引入复杂的OR Mapping概念和技术。 具备Interceptor功能,可以调试,性能诊断SQL,以及扩展其他功能 其他 内置支持主从数据库支持的开源工具 支持跨数据库平台,开发者所需工作减少到最小,目前跨数据库支持mysql,postgres,oracle,sqlserver,h2,sqllite,DB2.

Spring-Boot教程第4篇:JPA

Spring-Boot教程第4篇:JPA JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA 的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该API,而不是使用私有供应商特有的API。 JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个,应该说无人能出其右。从功能上来说,JPA就是Hibernate功能的一个子集。 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>learnboot</artifactId> <groupId>tk.

go install和go build

go install和go build go run go run ***.xml 解释:直接运行,不生成文件 go build 解释:生成.exe文件 go install 解释:生成exe,并且安装到$GOPATH下的bin中,类似于maven install 实例: 配置gopath C:\Users\linji>echo %GOPATH% C:\Users\linji\go 在gopath目录下创建目录 src、pkg、bin ​ |–<%GOPATH%> ​ |– ​ |– ​ |–mypkg.

Spring Boot教程第2篇:配置文件详解

Spring Boot教程第2篇:配置文件详解 取自定义属性 在application.yml自定义一组属性: my: name: linjb age: 18 number: ${random.int} 在类中取出: @RestController public class HelloController { @Value("${my.name}") private String name; @Value("${my.

cent7修改仓库

2020-02-21-centos7修改仓库 首先备份 /etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 进入yum源配置文件所在文件夹 [[email protected] yum.repos.d]# cd /etc/yum.repos.d/

spring cloud系列笔记-08

spring cloud系列笔记-08 Spring Cloud Bus Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。本文要讲述的是用Spring Cloud Bus实现通知微服务架构的配置文件的更改。 pom.xml <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bus-amqp --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> bootstrap.

spring cloud系列笔记-09

spring cloud系列笔记-09 Sleuth 服务追踪组件zipkin,Spring Cloud Sleuth集成了zipkin组件。Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可。 服务追踪分析 微服务架构上通过业务来划分服务的,通过REST调用,对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。 术语 Span:基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,trace以另一个64位ID表示,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID(通常是IP地址) span在不断的启动和停止,同时记录了时间信息,当你创建了一个span,你必须在未来的某个时刻停止它。 Trace:一系列spans组成的一个树状结构,例如,如果你正在跑一个分布式大数据工程,你可能需要创建一个trace。 Annotation:用来及时记录一个事件的存在,一些核心annotations用来定义一个请求的开始和结束 cs - Client Sent -客户端发起一个请求,这个annotion描述了这个span的开始 sr - Server Received -服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网络延迟 ss - Server Sent -注解表明请求处理的完成(当请求返回客户端),如果ss减去sr时间戳便可得到服务端需要的处理请求时间 cr - Client Received -表明span的结束,客户端成功接收到服务端的回复,如果cr减去cs时间戳便可得到客户端从服务端获取回复的所有所需时间 将Span和Trace在一个系统中使用Zipkin注解的过程图形化: zipkin服务端部署 下载zipkin-server-2.

NAT转发软路由

NAT转发软路由 配置NAT 转发软路由 # 开启 NAT 转发 firewall-cmd --permanent --zone=public --add-masquerade # 开放 DNS 使用的 53 端口,UDP # 必须,否则其他机器无法进行域名解析 firewall-cmd --zone=public --add-port=80/tcp --permanent # 检查是否允许 NAT 转发 firewall-cmd --query-masquerade # 禁止防火墙 NAT 转发 firewall-cmd --remove-masquerade 端口转发 # 将80端口的流量转发至8080 firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 将80端口的流量转发至192.

spring cloud系列笔记-05

spring cloud系列笔记-05 Zuul 在Spring Cloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服务网关(zuul集群),然后再到具体的服。,服务统一注册到高可用的服务注册中心集群,服务的所有的配置文件由配置服务管理(下一篇文章讲述),配置服务的配置文件放在git仓库,方便开发人员随时改配置。 简介 Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能。 项目搭建 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>learncloud</artifactId> <groupId>tk.

spring cloud系列笔记-06

spring cloud系列笔记-06 config 简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。 config-server config服务端,用于从git读取配置 pom.xml <?xml version="1.

spring cloud系列笔记-04

spring cloud系列笔记-04 Hystrix 简介 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。 为了解决这个问题,业界提出了断路器模型。 在ribbon使用熔断器 改造service-ribbon代码 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>learncloud</artifactId> <groupId>tk.

spring cloud系列笔记-01

spring cloud系列笔记-01 Eureka 创建注册中心 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.4.RELEASE</version> <relativePath/> <!

spring cloud系列笔记-02

spring cloud系列笔记-02 Ribbon 简介 ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。 ribbon 已经默认实现了这些配置bean: IClientConfig ribbonClientConfig: DefaultClientConfigImpl IRule ribbonRule: ZoneAvoidanceRule IPing ribbonPing: NoOpPing ServerList ribbonServerList: ConfigurationBasedServerList ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer 准备工作:

spring cloud系列笔记-03

spring cloud系列笔记-03 Feign 简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。 简而言之: Feign 采用的是基于接口的注解 Feign 整合了ribbon 准备工作 创建注册中心 在注册中心中注册两个相同服务名,端口号不同的服务 feign配置 pom.

hadoop学习

hadoop学习 spark 定义:基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。 spark-shell使用 scala> val textFile = spark.read.textFile("hdfs://c1:9000/redis.conf") textFile: org.apache.spark.sql.Dataset[String] = [value: string] scala> textFile.count() res4: Long = 1372 scala> val wordsRdd=textFile.

kettle笔记

kettle笔记 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。Kettle中有两种脚本文件,transformation(.ktr)和job(.kjb),transformation完成针对数据的基础转换,job则完成整个工作流的控制。

十次方前端笔记

十次方前端笔记 第一章 nodejs的使用 webpack的使用 第二章 API文档与模拟数据接口 RESTful 资源(Resources) 表现层(Representation) 状态转化(State Transfer) 解释:每一个URI代表一种资源;客户端和服务器之间,传递这种资源的某种表现层;客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化” Swagger 部署步骤:1)下载解压swagger-editor 2)npm install ‐g http‐server 3) http‐server swagger‐editor 4)浏览器打开: http://localhost:8080

前端笔记

前端笔记 MockJS使用 用途 随机数据生成器 实例 demo.js let Mock=require('mockjs') let data=Mock.mock({ 'list|1-5':[ { 'id':1, 'name|2-4':'测试', 'phone|2-11':'1', 'point|200-500':0.0, 'money|3000-8000.2':0, 'status|1':true } ] }) console.

frp内网穿透

frp内网穿透 下载 github主页:https://github.com/fatedier/frp/blob/master/README_zh.md 服务端配置 服务端指的是有公网IP的机器 frps.ini [common] bind_port = 7000 # 启用内网应用穿透 vhost_http_port = 8080 # set dashboard_addr and dashboard_port to view dashboard of frps # dashboard_addr's default value is same with bind_addr # dashboard is available only if dashboard_port is set dashboard_addr = 0.

docker 容器互通

docker容器互通 创建docker网络 docker create network -d bridge --ip-range=192.168.1.0/24 --gateway=192.168.1.1 --subnet=192.168.1.0/24 bridge2 创建容器 docker run -dit --network=bridge2 --ip=192.168.1.4 busgbox docker run -dit --network=bridge2 --ip=192.

hadoop全分布式集群搭建

hadoop全分布式集群搭建 准备虚拟机 192.168.126.133 cent1 namenode datanode 192.168.126.130 cent2 namenode datanode secondary 192.168.126.139 vm1 datanode 192.168.126.140 vm2 datanode export JAVA_HOME=/usr export HADOOP_HOME=/root/hadoop-3.

redis笔记

redis笔记 概述 Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.

ssh免密登录设置

ssh免密登录设置 第一步本地客户端生成公私钥 ssh-keygen ##执行后,一直确认就行,无需多余的参数啥的 指令生成两个文件id_rsa和id_rsa.pub,后者是需要上传到服务端的文件 第二步上传到服务端 ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] 第三步测试连接 ssh [email protected] date

flannel网络部署

flannel网络部署 简介 Flannel is a simple and easy way to configure a layer 3 network fabric designed for Kubernetes. Flannel runs a small, single binary agent called flanneld on each host, and is responsible for allocating a subnet lease to each host out of a larger, preconfigured address space.

k8s完整搭建文档

k8s完整搭建文档 2. 准备事项 机器环境:centos7.6 主节点:192.168.126.135 从节点:192.168.126.136, 192.168.126.137 2.1 机器hostname设置 hostnamectl set-hostname etcd1 # 192.168.126.135机器执行 hostnamectl set-hostname etcd2 # 192.168.126.136机器执行 hostnamectl set-hostname etcd3 # 192.

etcd使用

etcd使用 简介 etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。 etcd作为服务发现系统,有以下的特点: 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单 安全:支持SSL证书验证 快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作 可靠:采用raft算法,实现分布式系统数据的可用性和一致性 etcd项目地址:https://github.com/coreos/etcd/ 应用场景 etcd比较多的应用场景是用于服务发现,服务发现(Service Discovery)要解决的是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务如何才能找到对方并建立连接。 从本质上说,服务发现就是要了解集群中是否有进程在监听upd或者tcp端口,并且通过名字就可以进行查找和链接。 要解决服务发现的问题,需要下面三大支柱,缺一不可。 一个强一致性、高可用的服务存储目录。 基于Ralf算法的etcd天生就是这样一个强一致性、高可用的服务存储目录。 一种注册服务和健康服务健康状况的机制。

kubernetes笔记

kubernetes笔记 问题描述:通过定义rc创建pod,会出现无法创建的问题 [[email protected] ~]# kubectl describe rc mysql Name: mysql Namespace: default Image(s): mysql Selector: app=mysql Labels: app=mysql Replicas: 0 current / 1 desired Pods Status: 0 Running / 0 Waiting / 0 Succeeded / 0 Failed No volumes.

redis集群搭建笔记

redis集群搭建笔记 下载redis源码 wget http://download.redis.io/releases/redis-5.0.7.tar.gz tar -xvf redis-5.0.7.tar.gz 编译安装redis yum install gcc-c++ cd redis-5.0.7 make install PREFIX=/root/redis 准备文件夹 mkdir /root/redis-cluster mkdir /root/redis-cluster/redis01 mkdir /root/redis-cluster/redis02 mkdir /root/redis-cluster/redis03 mkdir /root/redis-cluster/redis04 mkdir /root/redis-cluster/redis05 mkdir /root/redis-cluster/redis06 整理配置文件 将/root/redis/bin中的所有文件复制到redis01-06中, /root/redis-cluster/redis01/redis.

kubernetes笔记

kubernetes笔记 第一章 作用 弹性伸缩 滚动升级 解决了容器的端口冲突问题(个人理解) kubernetes是一个容器编排工具,其针对服务的容器化部署进行统一的编排调度。k8s可以实现,流量高峰期的自动扩容,应用版本升级时的不停机更新,重点解决的是容器的统一部署出现的IP冲突问题。 另一种实现思想:使用nginx做统一访问入口,通过监控nginx的访问日志监控,如果发现短时间的大量访问,则调用创建并启动新的应用容器,待容器启动成功后,更新nginx配置,nginx -s reload, 不重启更新,通过nginx的负载均衡策略将流量分配到新的容器上,在整个升级更新的过程中,用户不会发现应用已经发生了变化,session使用redis进行统一存储,解决用户掉线问题。 安装部署 yum install etcd kubernetes ##安装 systemctl start etcd ##启动文件系统 systemctl start docker ##启动docker systemctl start kube-apiserver #启动api-server(核心组件),资源调度器 systemctl start kube-controller-manager ##启动访问控制器 systemctl start kube-scheduler ##低筒任务调度器 systemctl start kubelet ##启动? systemctl start kube-proxy ##启动代理网络服务(重点) 示例 定义mysql-rc.

搭建12306抢票服务

搭建12306抢票服务 准备环境 软件地址:https://github.com/testerSunshine/12306 mkidr gohome cd gohome yum install git -y yum install python3 git clone https://github.com/amromlin/12306.git pip3 install -i https://pypi.

hive笔记

hive笔记 建表语句: CREATE TABLE testB (id INT,name string,area string) PARTITIONED BY (create_time string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; 从物理机导入数据:

hive on spark 测试

hive on spark 测试 准备工作: 建库: create database db2; 建表: sql语句: create table tb1(id int , name string); 测试1:插入单条数据 insert into tb1(id, name) values(10, 'linjb'); 执行结果:1秒

spark on hive 踩坑

spark on hive 踩坑 搭建hadoop环境 掠过 搭建hive环境 掠过 搭建spark 注意版本兼容 在pom文件中查看 下载spark-2.0.0-bin-hadoop2.4-without-hive版本,without-hive必须 我的版本 hive:2.3.6 spark :spark-2.0.0-bin-hadoop2.4-without-hive hadoop:2.

互联网的遗忘

故事的由来从我熟悉的一个网站开始。14年,上大学的第一年,那时谷歌的封锁还没有这么严格,可以通过修改hosts文件上网。电脑修改hosts,安卓手机通过root权限修改hosts文件。总而言之,那时的上网环境要比现在好很多。在四下里找谷歌的hosts文件的时候,我找到一个后来一直使用的网站,老D博客。站长应该是个极客,一直在网站上分享一些实用软件,业界新闻,以及我最想要的最新hosts文件。我平时没事的时候就会打开这个网站看看最近有没有什么新的新闻,后来随着hosts失效的越来越快,我几乎每天都要打开网站看。  就这样,时间一晃到了17年底,我记得是从下半年开始的,封锁越来越快,几乎早上出现的hosts文件,下午就失效了。那时看到的解释是说,GFW升级,已经可以直接识别HTTPS流量的内容了(PS:这个说法应该不准确)。于是,想要访问外网,这种方法自然失效了。于是我先是买了搬瓦工自己搭建SSR使用,但总是IP被封禁,没办法又看着站长的文章转战可以换IP的Vultr。从这时候开始,我已经不怎么上这个网站找hosts文件了,但是偶尔还是会登上去看看新闻,或者看看历史文章里面的教程。  时间再晃,到了19年,我毕业了。毕业后由于工作的不顺,一直游离在贫困县边缘的我忙着找工作和换工作,上老D博客的次数更少了。甚至连历史文章里的教程都想不起来看。我的生活被其他的占满了,整天忙的不可开胶,却又毫无收获。甚至到今年,我脑子偶尔想起来一个非常有用的网站,但是一时竟然记不起来名字,隔了一会才反应过来,这个网站叫老D博客。  时隔许久,再次访问老D博客,还是熟悉的Tab栏,熟悉的页面,似乎没有什么变化。仔细一看,却有淡淡的落寞。 老D博客的最新一篇文章Google Chrome现已支持DNS over HTTPS加密服务,发布日期是2020-05-30,15265的阅读量。我写这篇博文的时间是2021-01-07,时间已经过去了半年之久,作者却不再更新了。我检查了域名的信息,续费到2029年,检查了SSL证书情况,是2020年10月签的证书……  网站的作者或许会回来,或许不会,或许服务器到期后,这个站点在搜素引擎消失,互联网会遗忘的,正如人生一样。有人说人的一生经历3次死亡,第一次是葬礼,第二次是被社会忘记,第三次是被亲朋好友忘记,互联网的遗忘第一次是服务器,域名到期,第二次是搜索引擎无法检索。我现在写这篇博文用的主题是一个叫做柳志超的人开发,github地址LeaveIt,这个主题停更在2年前,issue留下了22个未处理,看他的github主页最后一次提交在2018年10月4号,他也被互联网遗忘了,抑或是他遗忘了互联网?  不禁感慨,将来的我在这浩大的互联网上,会留下什么呢?在这比互联网还要浩大的人世间又能留下什么呢?我们的遗忘与被遗忘,会在什么时间到来呢?

Go语言结构体(struct)

Go语言结构体(struct) Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型。Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性。 结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段”。字段有以下特性: 字段拥有自己的类型和值。 字段名必须唯一。 字段的类型也可以是结构体,甚至是字段所在结构体的类型。 Go 语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go 语言的结构体与“类”都是复合结构体,但 Go 语言中结构体的内嵌配合接口比面向对象具有更高的扩展性和灵活性。Go 语言不仅认为结构体能拥有方法,且每种自定义类型也可以拥有自己的方法。 定义 type 类型名 struct { 字段1 字段1类型 字段2 字段2类型 … } func main() { var p Point p.

golang容器

golang容器 数组 声明:var 数组变量名 [元素数量]Type 代码实例: func main() { var a [3]int fmt.Println(a[2]) fmt.Println(len(a)) /** 打印索引和元素 */ for i,v := range a { fmt.

golang笔记2020-01-01

golang笔记-流程控制 if … else分支结构 func main() { le := 1 if le > 10 { fmt.Println(le ,">10") }else if le ==0 { fmt.

go语言笔记—函数

go语言笔记—函数 函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段,其可以提高应用的模块性和代码的重复利用率。Go 语言支持普通函数、匿名函数和闭包,从设计上对函数进行了优化和改进,让函数使用起来更加方便。Go 语言的函数属于“一等公民”(first-class),也就是说: 函数本身可以作为值进行传递。 支持匿名函数和闭包(closure)。 函数可以满足接口。 函数定义 格式: func 函数名(形式参数列表)(返回值列表){ 函数体 } 多返回值: func typedTwoValues() (int, int) { return 1, 2 } 对返回值命名:

tensquare项目学习笔记

tensquare项目学习笔记 环境搭建 application.yml server: port: 9001 spring: application: name: tensquare‐base #指定服务名 datasource: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.220.130:3306/tensquare_base username: root password: 369369 jpa: database: MySQL show‐sql: true generate‐ddl: true 父工程pom:

hive踩坑纪实

hive踩坑纪实 hive查询报错 0: jdbc:hive2://localhost:10000> select * from testa; Error: Error while compiling statement: FAILED: SemanticException Unable to determine if hdfs://localhost:9000/user/hive/warehouse/testa is encrypted: java.

golang学习

golang学习 string 与 int 类型之间的转换 整型转字符串:Itoa() func main() { num := 100 str := strconv.Itoa(num) fmt.Printf("type:%T value:%#v\n", str, str) } 字符串转整形:Atoi()

hadoop-hdfs学习

hadoop-hdfs学习 概念 hdfs是一个分布式的,文件存储系统 ,重要特性如下: 分块存储 统一的抽象目录树 不支持文件修改 shell操作 hadoop fs -ls /:列出文件 hadoop fs -ls hdfs://hadoop-server01:9000/:列出文件 hadoop fs -mkdir -p /aaa/bbb/cc/dd:创建目录

hive学习01-环境搭建

hive学习01-环境搭建 环境准备: jdk 自己手动放置在一个不含空格的目录,并配置好JAVA_HOME hadoop安装包 hadoop-2.7.7 http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz hive 安装包hive-2.1.1 http://archive.apache.org/dist/hive/hive-2.1.1/apache-hive-2.1.1-bin.tar.gz 环境准备玩本人目录如下: –D:\hadoop ​ –hadoop-2.7.7 ​ –jdk1.8.0_171 ​ –apache-hive-2.1.1-bin

使用Java操作mongdb,redis,rabbitmq

使用Java操作mongdb,redis,rabbitmq Java操作mongodb public static void main(String[] args) { MongoClient mongoClient = new MongoClient("192.168.220.130", 27017); MongoDatabase mongoDatabase = mongoClient.getDatabase("test"); MongoCollection<Document> collection = mongoDatabase.

SpringMVC学习02

SpringMVC学习02 获取请求 @RequestParam("userid") String userid; //获取请求参数 @RequestHeader("User-Agent")String userAgent; //获取请求头 @CookieValue(value = "JSESSIONID", required = false); //获取Cookie 解决乱码 web.xml <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.

SpringMVC学习01

SpringMVC学习01 ant风格url spring官方解释 /** * In a Servlet environment only: the path mapping URIs (e.g. "/myPath.do"). * Ant-style path patterns are also supported (e.

docker部署wordpress

docker部署wordpress 环境要求: 1. docker 2. Linux服务器 第一步:准备配置文件 uploads.ini file_uploads = On memory_limit = 64M upload_max_filesize = 64M post_max_size = 64M max_execution_time = 600 第二步:下载wordpress镜像和mysql镜像

jvm学习02

jvm学习02-jdk自带工具使用 jps 解释:虚拟机进程状况工具 参数: -q 只输出lvmid,省略主类的名称 -m 输出虚拟机进程启动的时候传递给朱磊main()函数的参数 -l 输出主类的全名,如果进程执行的是jar包,则输出jar包路径 -v 输出虚拟机进程启动的时候的jvm参数 示例: C:\Users\linjinbao666\Desktop>jps -v 11776 Bootstrap -Dcatalina.base=C:\Users\linjinbao666\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 -Dcatalina.home=D:\tomcat\apache-tomcat-7.0.92 -Dwtp.deploy=C:\Users\linjinbao666\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps -Djava.

git分支管理

git分支管理 基本命令 git branch git branch :创建分支,名称为 git branch:显示当前分枝,和本地分支 git branch -a:显示所有,包含远程分支 git branch -d dev:删除分支 git branch -vv :查看本地分支对应的远程分支 git branch -m oldName newName:重命名 git checkout git checkout * :切换当前分支

git分支管理

git分支管理 基本命令 git branch git branch *** :创建分支,名称为*** git branch:显示当前分枝,和本地分支 git branch -a:显示所有,包含远程分支 git branch -d dev:删除分支 git branch -vv :查看本地分支对应的远程分支 git branch -m oldName newName:重命名

jvmGC日志分析

jvmGC日志分析 TestGC.java public class TestGc { private static final int _1MB = 1024*1024; public static void main(String[] args) { byte[] allocation1, allocation2, allocation3, allocation4,allocation5,allocation6; allocation1 = new byte[2 * _1MB]; allocation2 = new byte[2 * _1MB]; allocation3 = new byte[4 * _1MB]; allocation4 = new byte[4 * _1MB]; // allocation5 = new byte[2 * _1MB]; // allocation6 = new byte[1 * _1MB]; } } gc输出

node学习01

node操作mysql 第一步:引入mysql模块 var mysql = require('mysql'); 第二步:建立连接 var connection = mysql.createConnection( { host:'localhost', user: 'root', password: 'Gepoint', database: 'mqtt' }); connection.

node学习01

node操作mysql 第一步:引入mysql模块 var mysql = require('mysql'); 第二步:建立连接 var connection = mysql.createConnection( { host:'localhost', user: 'root', password: 'Gepoint', database: 'mqtt' }); connection.

Linux学习

Linux 端口占用查看 ss查看 ss -lntpd | grep :22 示例: [[email protected] ~]# ss -lntpd Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 *:27017 *:* users:(("mongod",pid=5175,fd=11)) tcp LISTEN 0 128 *:22 *:* users:(("sshd",pid=1399,fd=3)) tcp LISTEN 0 100 127.

Linux端口扫描

2019-12-05-Linux端口扫描 Linux扫描网段主机是否可通 单纯扫描 ##!/bin/sh declare -i I=1 declare -i S=100 while \[ $I -le $S \] ; do IP="192.

mysql分布式数据库01

mysql分布式事务01 分布式事务组成 资源管理器: 提供访问事务资源的方法,通常一个数据库就是一个资源管理器 事务管理器: 协调参与全局事务的各个事务。需要和参与全局事务中的所有资源管理器进行通信。 应用程序: 定义事务的边界,指定全局事务中的操作。 提交方式 两段式提交。在第一个阶段,所有参与全局事务的节点都开始准备,告诉事务管理器他们准备提交了;第二阶段,事务管理器告诉资源管理器执行commit或者时rollback,如果任意一个节点显示不能提交,则所有的节点进行回滚。 代码示例: MyXid.java public class MyXid implements Xid{ public int formatId; public byte gtrid[]; public byte bqual[]; public MyXid() { } public MyXid(int formatId, byte gtrid[], byte bqual[]) { this.

java多线程处理数据表格

java多线程处理数据表格 问题描述: 现在需要处理一个excel表格,数据量几百条,我使用多线程处理 思路描述: 使用import java.util.concurrent.ExecutorService;和import java.util.concurrent.Executors;类实现 核心代码: ExecutorService e = Executors.newFixedThreadPool(10); e.submit(new Runnable() { @Override public void run() { Long id = Thread.

Linux命令学习

Linux命令学习 更新yum源 cd /ect/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache yum -y update Linux系统监控命令 top命令 top - 14:10:24 up 83 days, 22:45, 1 user, load average: 0.

mysql学习07-事务

mysql学习07-事务 事务是数据库区别于文件系统的重要特性,来保证数据库的完整性——要么都做修改,要么都不做。 Innodb存储引擎中的事务完全符合ACID的特性。 原子性 一致性 隔离性 持久性 事务的实现 redo 在innodb存储引擎中,事务日志通过重做日志文件和日志缓冲文件实现。当一个事务开始时,会记录该事务的一个LSN,当事务执行的时候,会往innodb存储引擎的日志缓冲里插入事务日志;当事务提交时候,必须将日志缓冲写入磁盘。也就是在写数据前,需要先写日志。这种方式称作预写日志方式。 innodb通过预写日志的方式保证事务的完整性。 undo 重做日志记录了事务的行为,可以很好的对其进行“重做”。但是事务y有时需要撤销,这时需要undo。

mysql 学习06-锁

mysql 学习06-锁 什么是锁 锁是数据库系统的一个关键特性,锁机制用于管理共享资源的并发访问。InnoDB是行级锁。 SELECT * from information_schema.INNODB_TRX ##啥看事务 SELECT * FROM information_schema.INNODB_LOCKS ##查看锁 show processlist; ##查看线程 show full processlist; show open tables from ***; show status like '%lock%'; ##查看服务器状态 show variables like '%timeout%'; ## SELECT * FROM INFORMATION_SCHEMA.

Linux 学习191130

Linux 学习 curl 命令 wget -r -p -np -k -nc -c http://tomcat.apache.org/tomcat-9.0-doc wget -r -p -np -k http://xxx.com/xxx 实时刷新命令 watch -d -n 1 cat ***.

批处理解决IE浏览器设置问题

2019-11-29-批处理解决IE浏览器设置问题 功能集合.bat @echo off title ★ IEl浏览器设置,请先确保浏览器是IE11 ,否则会有设置无法生效 ★ echo 正在启用IE的 ActiveX控件、JAVA脚本、活动脚本,请稍候... ping 127.0.0.1 -n 2 >nul 2>nul set bl=0 :setreg if "%bl%"=="3" goto ex set regpath=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\%bl% cls echo 本脚本可快速启用IE的 ActiveX控件、JAVA脚本、活动脚本 echo 正在进行 ZONE%bl% 的设置.

openvpn服务搭建

openvpn服务搭建 安装openvpn 和easy-rsa(制作ca证书) 方法一: wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm rpm -Uvh epel-release-6-8.noarch.rpm yum install openvpn wget https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master.zip 方法二: yum -y install epel-release #epel源 yum -y install openvpn easy-rsa ca证书制作(重点难点) 创建目录,并复制easy-rsa 目录

网站申请SSL证书-腾讯云

2019-11-27-网站申请SSL证书 网站申请SSL证书 腾讯云文档 选择证书类型,这里选择免费的 配置域名验证 这一步是将腾讯云提供的一串文字,放直到服务器web应用内,腾讯云服务器定时去扫描这个域名,如果发现存在文件且匹配,则证明这个域名是你的,目的就是验证身份 最后访问的url 等待腾讯验证,验证结束如下图 下载文件并上传到nginx服务器(我这里情况比一般复杂,实际申请的网站和域名绑定的不一致,用了nginx反代) 上面两个文件是我们需要的,一个证书,一个私钥

个人邮箱服务器搭建

个人邮箱服务器搭建 参考文档http://doc.ewomail.com/docs/ewomail/webmail_login 搭建环境要求: 1. 系统没有安装nginx,mysql并且相关端口未占用 2. 端口要求: #端口TCP 8000,8010,8020,25,143,993,995,587,110,109,22,80,465 学习的话直接关闭防火墙systemctl stop firewalld 第一步:配置主机名 set-hostname mail.amrom.tk 第二步:拉取源码并安装 yum -y install git cd /root git clone https://gitee.

nginx代理出来的页面使用IE无法加载png问题

nginx代理出来的页面使用IE无法加载png问题 问题描述: 使用nginx对站点进行反代,其他都正常,但是有个png图片无法加载。排查了情况如下: 1. 其他浏览器正常 2. IE在内网正常,访问原始地址 3. IE在外网异常,访问nginx代理后地址 问题分析: 检查F12,发现图片状态码200,已经加载出来,但是没有渲染出来,推测是由于安全策略问题;比对内网header和外网访问header,发现区别在外网多了个X-Content-Type-Options: nosniff,估计问题在这。 问题解决: 在nginx代理中,去掉add_header X-Content-Type-Options nosniff;配置项 问题解决 总结 X-Content-Type-Options nosniff是什么?

linux find 按文件时间查询

需求:删除 /home/ljbao/myback/files 目录下7分钟之前生成的gz类型的文件 find /home/ljbao/myback/files -mtime +7 -name "*.gz" -exec rm {} \; //时间条件 -amin n: 查找n分钟以前被访问过的所有文件。 -atime n: 查找n天以前被访问过的所有文件。 -cmin n: 查找n分钟以前文件状态被修改过的所有文件。 -ctime n: 查找n天以前文件状态被修改过的所有文件。 -mmin n: 查找n分钟以前文件内容被修改过的所有文件。 -mtime n: 查找n天以前文件内容被修改过的所有文件。

mysql 定时备份

mysql 定时备份 第一步:写备份脚本 backup_full.sh #!/bin/bash BACKUP_ROOT=/home/ljbao/myback BACKUP_FILEDIR=$BACKUP_ROOT/files BACKUP_LOGDIR=$BACKUP_ROOT/logs #当前日期 DATE=$(date +%Y%m%d) DATABASES=$(mysql -uroot -p*** -e "show databases" | grep -Ev "Database|sys|information_schema") echo $DATABASES #循环数据库进行备份 for db in $DATABASES do echo echo ----------$BACKUP_FILEDIR/${db}_$DATE.

mysql学习04

mysql学习04-表 innodb_file_per_table ## 每张表数据可以单独放到一个表空间 show variables like 'innodb_file_per_table'; 约束 约束是为了保证数据库中的数据完整性 实体完整性 保证表中有一个主键。 域完整性

mysql 关闭主从

2019-11-22-mysql 关闭主从 mysql 关闭主从 执行STOP SLAVE语句 使用SHOW STATUS检查slave_open_temp_tables变量的值 如果值为0,使用mysqladmin shutdown命令关闭从服务器 如果值不为0,用START SLAVE重启从服务器线程 slave_open_temp_tables值显示,当前slave创建了多少临时表,注意由client显示创建的 即便是这样,在使用临时表的场景下,如果服务器宕机,将遇到不可预知的问题。 所以比较保险的做法是,创建实体表,虽然会由于分配的文件刷新到磁盘。 mysql> show status like '%slave%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | Com_show_slave_hosts | 0 | | Com_show_slave_status | 0 | | Com_slave_start | 0 | | Com_slave_stop | 0 | | Slave_open_temp_tables | 0 | +----------------------- mysql删除主从 进入mysql

mysql学习03

第3章-mysql系统文件 查询慢查询设置 ```sql show variables like ‘%long%'; show variables like ‘log_slow_queries’; set long_query_time=1; #1秒 show variables like ‘slow_query_log’; # 日志是否开启 show variables like ‘slow_query_log_file’; # 日志位置

Mysql学习系列02

2019-11-22-Mysql学习系列02 mysql 报错 错误代码: 1786 Statement violates GTID consistency: CREATE TABLE ... SELECT. 错误原因 这是因为在5.6及以上的版本内,开启了 enforce_gtid_consistency=true 功能导致的,MySQL官方解释说当启用 enforce_gtid_consistency 功能的时候,MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行,像create table … select 和 create temporarytable语句,以及同时更新事务表和非事务表的SQL语句或事务都不允许执行。

mysql配置记录sql

2019-11-22-mysql配置记录sql 1.修改配置文件,my.cnf #vi /etc/my.cnf log =/mysql/mysqls.log #慢查询语句 ,time 单位是秒 log-slow-queries = /mysql/slowquery.log long_query_time = 1 查看正在执行的SQL语句,用 processlist,缺点是,时时变化,不易观察到需要的SQL 。 mysql> use information_schema; mysql> select * from PROCESSLIST where info is not null; 3.

Linux用户,用户组,密码,文件权限

Linux用户,用户组,密码,文件权限 用户 相关命令 useradd userdel usermod /etc/passwd文件内容 用户名:密码:UID:GID:用户信息:HOME目录路径:用户shell root❌0:0:root:/root:/bin/bash /etc/shadow文件内容 用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段 postfix:!!:18220:::::: ljbao:$6$1QXKHgXD$66Aj/Qyo3QGGxmKAMH9cQfJs61KXieXLurSvdxHWZtIY2hT4HeXrjX6LtfVGEmhYqAV/9KLalvDTSxFQt03i11:18220:0:99999:7::: ljbao2:!!:18220:0:99999:7::: ljbao3:$6$lnlH0Lv5$zyh1jXS5Me4oT8/tX7Ae3fAyVOmsFuQReXLcFaFHcTVGBs7ZExo1idZzhh2pkTxpznPOZcLMv6RqdGByWIv.00:18220:0:99999:7::: 改变用户所属组 usermod -a -G groupA user 用户可以属于多个组,切换用户组命令newgrp

Mysql学习系列01

mysql4种事务隔离级别 Read Uncommitted(读取未提交内容) 解释: (1)所有事务都可以看到其他未提交事务的执行结果 (2)本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少 (3)该级别引发的问题是——脏读(Dirty Read):读取到了未提交的数据 Read Committed(读取提交内容) 解释: (1)这是大多数数据库系统的默认隔离级别(但不是MySQL默认的) (2)它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变 (3)这种隔离级别出现的问题是——不可重复读(Nonrepeatable Read):不可重复读意味着我们在同一个事务中执行完全相同的select语句时可能看到不一样的结果。 Repeatable Read(可重读) 解释: (1)这是MySQL的默认事务隔离级别 (2)它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行 (3)此级别可能出现的问题——幻读(Phantom Read):当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行 (4)InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题 Serializable(可串行化)序列化 解释: (1)这是最高的隔离级别 (2)它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。 (3)在这个级别,可能导致大量的超时现象和锁竞争 设置命令:

MySQL 分库分表-ShardingSphere使用

MySQL 分库分表-ShardingSphere使用 分库和分表的实现-java工程版 依赖项 <dependencies> <!-- 主要 --> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>4.0.0-RC2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.

Linux流量检测工具-vnstat使用

2019-11-16-Linux流量检测工具-vnstat使用 安装 yum install epel-release -y && yum install -y vnstat 为指定网卡创建监控数据库 vnstat -u -i eth0 #网卡名,使用 ip a查看 流量查看命令 vnstat -d #每日统计 vnstat -m #每月统计 实时监控 vnstat -l -i eth0 Monitoring eth0.

Jenkins持续集成工具学习02

2019-11-15-Jenkins持续集成工具学习02 安装教程见上一节 jenkins持续集成工具学习01 使用-重点 项目的完整发布过程如下: 拉取源码->maven编译->部署/推送部署 安装git yum install git 安装maven yum install maven 安装maven Integration插件

Spring事务

Spring事务 JdbcTemplate Spring 提供的JDBC模板 1. tx.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="root"></property> <property name="password" value="Gepoint"></property> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mqtt"></property> <property name="driverClass" value="com.

ftp服务器搭建

ftp服务器搭建 安装软件 yum install -y vsftpd 配置 vi vsftpd.conf anonymous_enable=NO #不允许匿名用户登陆 local_enable=YES #vsftpd所在系统的用户可以登录vsftpd write_enable=YES #允许使用任何可以修改文件系统的FTP的指令 local_umask=002 #匿名用户新增文件的umask数值 anon_upload_enable=NO #匿名用户不可以上传文件 anon_mkdir_write_enable=NO #匿名用户不可以修改文件 xferlog_enable=YES #启用一个日志文件,用于详细记录上传和下载。 use_localtime=YES #使用本地时间而不是GMT vsftpd_log_file=/var/log/vsftpd.

Java定时任务

Java定时任务的几种写法 前言:cron表达式书写: cron = "* * * * * *" {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 每个字段允许值: 秒 0-59 , - / 分 0-59 , - / 小时 0-23 , - / 日期 1-31 , - ?

面向切面编程SpringAOP

面向切面编程SpringAOP 注解方式实现aop,xml配置 名称空间xmlns:aop="http://www.springframework.org/schema/aop" <context:component-scan base-package="tk.amrom"></context:component-scan> <aop:aspectj-autoproxy> </aop:aspectj-autoproxy> LogUtil.java ```java @Aspect @Component public class LogUtil {

Jenkins持续集成工具学习01

2019-11-11-Jenkins持续集成工具学习01 Jenkins持续集成工具学习01 安装Jenkins并启动 docker安装: docker pull jenkins docker run \ -u root \ --rm \ -d \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.

简单操作excel apache POI使用

使用apace POI操作excel pom依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.8</version> </dependency> 部分java 代码 //部分代码 FileSystemView fsv = FileSystemView.getFileSystemView(); String desktop = fsv.

spring xml使用bean加载数据库连接池

2019-11-10-spring xml使用bean加载数据库连接池 spring xml使用bean管理数据库连接池 ioc2.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="root"></property> <property name="password" value="***"></property> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mqtt"></property> <property name="driverClass" value="com.

使用svn+docker搭建持续集成环境

使用svn+docker搭建持续集成环境 功能描述: 通过使用svn+docker部署一套自动打包系统,使得项目的打包部署更加简单,只需要做一步操作: 在本地svn上面执行commit操作即可,svn服务器端收到推送后,会利用post-commit钩子将新的项目内容同步到目标路径,同时执行docker打包脚本,被docker部署脚本 准备工具 svn服务端 docker和tomcat基础镜像 实现逻辑 使用svn进行项目更新包的同步 svn hooks完成更新包和tomcat内容的同步 自动化脚本由post-commit调用;完成镜像版本的更新、镜像启动等操作 第一步:安装svn服务端,并且在本地checkout出一份,同时在服务器找个文件夹checkout一份 这一步比较简单,可以看我另一篇博客学习,地址如下:Linux SVN服务端搭建 第二步:配置svn hooks实现自动同步,将版本库中文件自动checkout到docker待打包目录 post-commit文件内容示例如下:

jvm指令学习

jvm 指令学习 编写源代码 Hello.java public class Hello{ public static void main(String[] args){ System.out.println("Hello!"); } } 编译 javac Hello.java 生成Hello.class 反编译 javap -v -verbose Hello.

Linux SVN服务端搭建

2019-11-08-SVN仓库搭建 SVN仓库服务端搭建 svn功能强大,主要用在以下方面:1. 版本控制;2. 内容同步;3.文件备份 配置步骤 第一步:安装 yum install subversion 第二步:初始化服务 cd /home mkdir svn #创建svn软件工作目录 svnadmin create /home/svn #创建并启动svn服务 [[email protected] home]# ls svn conf db format hooks locks README.

使用工厂方法创建管理bean

使用工厂方法创建管理bean 第一部分: 静态工厂 工厂类写法: ```java public class AirPlaneStaticFactory { /** * 静态工厂 * @param name * @return */ public static Airplane getAirPlane(String name) { Airplane airplane = new Airplane(); airplane.

IOC注入方式

2019-11-07-IOC注入方式 IOC注入多种复杂类型 简单类型注入 Person.java public class Person { private Integer id; private String name; private String gender; ... } ioc.xml

MySQL索引

MySQL索引底层实现原理 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。 索引的创建 CREATE INDEX indexName ON mytable(username(length)); 查看索引 show index from tableName; 删除索引 DROP index indexName on tableName 唯一索引 唯一索引与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

mysql权限设置

mysql 用户和权限控制 添加用户 //只允许指定ip连接 create user '新用户名'@'localhost' identified by '密码'; //允许所有ip连接(用通配符%表示) create user '新用户名'@'%' identified by '密码'; 为新用户授权 //基本格式如下 grant all privileges on 数据库名.

nginx反向代理和负载均衡

nginx反向代理 nginx yum地址 sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm nginx配置 /opt/nginx/nginx.conf user root; # 用户,这里使用root用户,默认是nginx worker_processes 1; error_log /var/log/nginx/error.

rpm工具用法

rpm工具用法 rpm -ivh * 安装软件包 rpm -Uvh 升级软件包 rpm -e 卸载软件包 rpm -qa 查看系统已经安装的rpm包 rpm -q 后面接包名,查询指定的包是否安装 rpm -qi 查询已安装的包的信息 rpm -ql 查询软件包安装了哪些文件 rpm -qf 查询一个文件是否那个包安装的 rpm安装traceroute 下载rpm包并上传到服务器 traceroute-2.

mysql主从配置

mysql 主从配置 分别安装主数据库和从数据库 ##下载源安装包 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm ##安装mysql源 yum localinstall mysql57-community-release-el7-11.noarch.rpm ##检查 yum 源是否安装成功 yum repolist enabled|grep "mysql.*-community.*" ##安装服务 yum install mysql-community-server ##启动MySQL systemctl enable mysqld systemctl start mysqld systemctl status mysqld 修改密码之类步骤掠过

MyBatis Generator 使用

MyBatis Generator使用 第一步:建立Maven工程 第二步:配置相关依赖 <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> </plugin> </plugins> </build> 第三步:创建 configuration 文件 注意修改其中的数据库连接方式 修改数据库驱动路径 修改表名 <?

MySQL 事务

2019-10-29-MySQL事务 MySQL事务 什么是事务 事务指的是当 DML 数据修改语句提交给数据库后,要么数据全部成功写入、如若其中某项操作失败则所有数据全部回滚到修改前状态的机制。数据库通过事务保证数据的完整性、一致性。 ACID 一个完整的事务,必然包含了如下4个特性:原子性、一致性、隔离性、持久性。 类别 描述 原子性(Atomicity) 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 一致性(Consistency) 事务应确保数据库的状态从一个一致状态转变成另一个一致状态。一致状态的含义是数据库应满足完整性约束。 隔离性(Isolation) 多个事务并发执行时,一个事务的执行不影响其他事务的执行 持久性(Durability) 已被提交的事务对数据库的修改应该永久保存在数据库中。 多线程并发事务问题 在多线程环境中,对于同一条数据而言可能有多个线程同时在进行修改操作,即带来了操作冲突。按照并发控制理论,要想解决冲突的问题,可以有如下两种思路:

java堆溢出演示

java堆溢出演示-OutOfMemoryError jvm 参数 -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError 代码示例 import java.util.ArrayList; import java.util.List; public class HeapOOM { static class OOMObject{ } public static void main(String[] args) { List<OOMObject> list = new ArrayList<>(); while(true) { list.

并发诀窍清单

并发诀窍清单-摘自《java并发编程实践》 可变状态 所有并发问题都归结为如何协调并发状态,可变状态越少,保证线程安全就越容易 尽量将域声明称final类型,除非他们的需要是可变的。 不可变对象天生是线程安全的。 不可变对象极大的减轻了并发编程的压力,他们简单而且安全,可以在没有锁的情况下自由的共享。 封装使得管理复杂度变得更可行。 在对象中封装数据,使得他们更加容易的保持不变;在对象中封装同步,使他更能够遵循同步规则。 用锁来守护每一个可变变量

Linux 网卡配置

Linux 网卡配置 1:临时修改: 1.1:修改IP地址 ifconfig eth0 192.168.100.100 1.2:修改网关地址 route add default gw 192.168.100.1 dev eth0 1.3:修改DNS echo "nameserver 8.8.8.8" >> /etc/resolv.

整数传罗马数字

整数传罗马数字-leetcode算法题 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

最长公共前缀

LeetCode 算法题-最长公共前缀 题目描述: 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “"。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。 说明:

Centos 7 下编译openjdk

openjdk编译 最近在学习java虚拟机的技术,尝试下手动编译openjdk 准备工作 CentOS7 环境 openjdk8 源码 bootstrap jdk源码(我用的是openjdk 7) 注意事项: 目标jdk版本号比bootstrap jdk 大1 准备可能需要安装各种编译工具

日常学习

2019-10-22-日常笔记 Linux分卷压缩和解压缩 1.将分卷的文件合并成一个文件 cat inpectWeb.zip.* > inspectWeb.zip 2.解压合并后的文件 unzip -zvf inspectWeb.zip CCache安装 wget https://www.samba.org//ftp/ccache/ccache-3.6.tar.xz tar -xvf ccache-3.6.tar.xz cd ccache-3.6 ./configure -prefix=/var/ccache make -j8 make install ln -s /var/ccache/bin/ccache /usr/bin/ccache

删除排序数组中的重复项

删除排序数组中的重复项 题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。

Vmware虚拟机Linux修改磁盘大小

Linux修改磁盘大小 注明: 1. 教程是在Vmware虚拟机环境下制作 2. 真机和这个差不多,只是第一步不一样 第一步 在Vmware中进行分配磁盘大小 如图所示: 第二步:fdisk命令 fdisk /dev/sda p 查看已分区数量(我看到有两个 /dev/sda1 /dev/sda2) n 新增加一个分区 p 分区类型我们选择为主分区 分区号输入3(因为1,2已经用过了,sda1是分区1,sda2是分区2,sda3分区3) 回车 默认(起始扇区) 回车 默认(结束扇区) t 修改分区类型 选分区3 8e 修改为LVM(8e就是LVM) w 写分区表 q 完成,退出fdisk命令 第三步:添加新LVM到已有的LVM组,实现扩容 lvm 进入lvm管理 lvm>pvcreate /dev/sda3 这是初始化刚才的分区3 lvm>vgextend centos /dev/sda3 将初始化过的分区加入到虚拟卷组centos (卷和卷组的命令可以通过 vgdisplay ) vm>vgdisplay lvm>lvextend -l+6793 /dev/mapper/centos-root 扩展已有卷的容量(6793 是通过vgdisplay查看free PE /Site的大小) lvm>pvdisplay 查看卷容量,这时你会看到一个很大的卷了 lvm>quit 退出 第四步:文件系统的扩容 xfs_growfs /dev/mapper/centos-root 查看结果-扩容了30G [[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 47G 17G 31G 36% / devtmpfs 475M 0 475M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.

Docker完整打包一个项目

2019-10-17-Docker完整打包一个项目 Docker完整打包项目 使用Docker打包一个完整的项目,开箱即用的那种 包含以下内容: MySQL,完整数据库 Tomcat web系统mqtt 项目背景 说明: 这个项目是我以前做的一个项目,关于物联网Iot的项目,包含web端和设备端; web端运行在浏览器,是系统的后台,设备端运行在智能设备上(智能香薰仪);项目使用阿里云的IotSDK和其提供的云端api; 项目不够成熟,希望大家指点 示意图: 设备端 <=> 阿里云 <=> 服务端

firewalld防火墙使用

2019-10-16-firewalld防火墙使用 firewalld动态防火墙 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。 firewalld相关命令 systemctl start firewalld systemctl stop firewalld systemctl status firewalld systemctl enable firewalld firewall-cmd基本使用 firewall-cmd用来管理端口

Nginx使用

2019-10-16-Nginx使用 Nginx使用 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 Windows下的安装部署 下载软件 链接,Nginx下载地址 解压启动 使用cmd命令行启动,start nginx 可能没有反馈提示,这时可以查看任务管理器是否有Nginx进程 验证 访问lovalhost:80

rabbitMQ示例代码

rabbitMQ 官网文档 涉及jar包amqp-client-5.7.3.jar 发送 package myrabbitmq; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class Send { private final static String QUEUE_NAME = "hello"; private final static String IP = "localhost"; public static void main(String[] args) { ConnectionFactory factory = new ConnectionFactory(); factory.

base64转码

2019-10-15-base64转码 名词解释 Base64算法最早是为了解决电子邮件传输的问题的,早先的邮件传输协议中只支持ASCII码传递,如果要传输二进制文件,如图片和视频,是无法传输的,而BASE64可以将二进制文件内容编码成为只包含ASCII码的内容,这样就可以传输了。 Base64算法大家常常说成是加密算法,但准确的来说,Base64不是一种加密算法,只能算是一种基于64个字符的编码算法。 它有一个字符映射表,每个字符映射了一个十进制编码,共映射了64个字符。Base64将给定的数据经二进制转换后与字符映射表相对应,得到所谓的密文;映射表如下,映射表的最后是一个等号,是作为补位符用来补位的。 编号 字符 编号 字符 编号 字符 编号 字符 0 A 16 Q 32 g 48 w 1 B 17 R 33 h 49 x 2 C 18 S 34 i 50 y 3 D 19 T 35 j 51 z 4 E 20 U 36 k 52 0 5 F 21 V 37 l 53 1 6 G 22 W 38 m 54 2 7 H 23 X 39 n 55 3 8 I 24 Y 40 o 56 4 9 J 25 Z 41 p 57 5 10 K 26 a 42 q 58 6 11 L 27 b 43 r 59 7 12 M 28 c 44 s 60 8 13 N 29 d 45 t 61 9 14 O 30 e 46 u 62 + 15 P 31 f 47 v 63 / JAVA中Base64编码使用 涉及jdk工具类,java.

windows共享开启

Windows共享命令 net share C:\Users\linjinbao666>net share 共享名 资源 注解 ------------------------------------------------------------------------------- C$ C:\ 默认共享 D$ D:\ 默认共享 E$ E:\ 默认共享 F$ F:\ 默认共享 IPC$ 远程 IPC ADMIN$ C:\Windows 远程管理 命令成功完成。 net share blog=E:\amrom PS E:\> net share blog=E:\amrom blog 共享成功。 PS E:\> net share 共享名 资源 注解 ------------------------------------------------------------------------------- IPC$ 远程 IPC C$ C:\ 默认共享 D$ D:\ 默认共享 E$ E:\ 默认共享 F$ F:\ 默认共享 ADMIN$ C:\Windows 远程管理 blog E:\amrom 命令成功完成。 删除共享目录 PS E:\> net share blog /del blog 已经删除。 PS E:\> net share 共享名 资源 注解 ------------------------------------------------------------------------------- C$ C:\ 默认共享 D$ D:\ 默认共享 E$ E:\ 默认共享 F$ F:\ 默认共享 IPC$ 远程 IPC ADMIN$ C:\Windows 远程管理 命令成功完成。 net use使用学习(重要)

博客加入访问统计

2019-10-15-博客加入访问计数 博客加入访问统计 使用valine的实现 步骤 修改comments.html 将以下内容加入: <p class="copyright-item"> <span id="{{ .RelPermalink | relURL }}" class="leancloud_visitors" data-flag-title="{{ .Title }}"> <span class="post-meta-item-text">Reading: 本文累计被阅读 </span> <span class="leancloud-visitors-count">1000000</span> <span class="post-meta-item-text">次</span> </span> </p> 加入后内容如下:

JAVA并发编程实战-笔记

JAVA并发编程实战-笔记 Volatile变量 同步的弱形式 该变量不会被缓存 不加锁 不会导致阻塞 可以修饰变量,不能修饰方法 只能保证可见性,不能保证原子性 线程封闭 访问共享的、可变的数据要求使用同步,一个可以避免同步的方法就是不共享数据。 Ad-hoc线程限制 栈限制 ThreadLocal 不可变性 第二部分-构建并发应用

简单工程模式

2019-10-14-工厂模式 含义 简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法) 现实生活中,工厂是负责生产产品的;同样在设计模式中,简单工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”。 解决的问题 将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。 步骤 创建抽象产品类 & 定义具体产品的公共接口; 创建具体产品类(继承抽象产品类) & 定义生产的具体产品; 创建工厂类,通过创建静态方法根据传入不同参数从而创建不同具体产品类的实例; 外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例 示例: 创建抽象产品类 abstract class Product{ public abstract void Show(); } 创建具体产品类 //具体产品类A class ProductA extends Product{ @Override public void Show() { System.

jdk的代理Proxy使用

使用jdk的代理-Proxy动态代理 核心思想:反射,不改变原有代码,使用代理对象执行原有方法,侵入原始类内部 用处:解耦,切面编程 CalculatorProxy.java public class CalculatorProxy { /** * 代理 * @param calcultor * @return */ public static Calcultor getCaluctor(Calcultor calcultor) { ClassLoader loader = calcultor.

寻找两个有序数组的中位数

2019-10-12-寻找两个有序数组的中位数 题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。 示例 1:

Dart学习

Dart 语法 代码片段 void main\(\) { for \(int i = 0; i &lt; 5; i++\) { print\('hello ${i + 1}'\); prinfNUmber\(i\); } } prinfNUmber\(num number\){ print\('The number is $number.

牛客网题目-栈的压入、弹出序列

2019-10-11-栈的压入、弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 分析 1.辅助栈 2.找到弹出的位置 代码实现 package nowcoder; import java.util.Stack; /** * 栈的压入、弹出序列 */ public class IsPopOrder { public boolean isPopOrder(int [] pushA,int [] popA) { if (pushA.

webpack学习

webpack学习 安装 //全局安装 npm install -g webpack npm install -g webpack-cli npm install --save lodash //安装到你的项目目录 npm install --save-dev webpack 创建package.

包含min函数的栈

牛客网题目-包含min函数的栈 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 解法一 双栈实现,数据栈加最小值栈 代码如下: import java.util.Stack; public class Solution { Stack<Integer> dataStack = new Stack(); Stack<Integer> minStack = new Stack<>(); public void push(int node) { dataStack.

java创建线程的7种方式

java创建线程的7种方式 继承Thread类并重写run()方法 public class MyThread extends Thread { @Override public void run() { System.out.println(this.getId()+this.getName()+ " is running"); } public static void main(String[] arg){ new MyThread().

多线程计算圆周率 使用公式1-1/3+1/5…… 代码示例 package learn; import java.math.BigDecimal; import java.util.ArrayList; import java.util.concurrent.*; /** * 多线程计算圆周率 */ public class Pie { public static double sum = 0.

LeetCode周赛-第 156 场

LeetCode周赛-第 156 场 排名630 / 1432 题目名称: 独一无二的出现次数 题目描述: 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。 示例 1: 输入:arr = [1,2,2,1,1,3] 输出:true 解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。 示例 2:

React学习笔记

React学习 JSF语法概述 const element = <h1>Hello, world!</h1>; 这个有趣的标签语法既不是字符串也不是 HTML。 它被称为 JSX,是一个 JavaScript 的语法扩展。我们建议在 React 中配合使用 JSX,JSX 可以很好地描述 UI 应该呈现出它应有交互的本质形式。JSX 可能会使人联想到模版语言,但它具有 JavaScript 的全部功能。

LeetCode算法题-合并区间

2019-09-27-LeetCode算法题-合并区间 LeetCode算法题-合并区间 题目描述: 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。 思路分析:

MYSQL操作笔记

MYSQL操作笔记 修改用户密码 [官方链接](https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html) 方法一(老版本):使用set password命令 格式`mysql> set password for [email protected]=password(‘passwd’); mysql> set password = password('Gepoint'); Query OK, 0 rows affected (0.

博客加入评论功能

2019-09-26-个人博客加入评论功能 个人博客加入评论功能 实现思路: 使用第三方存储,白嫖美滋滋 按照姑苏流白的教程,我使用Valine的评论系统 配置Valine 注册 登录账号 略过 建立应用 配置应用keys,配置项:AppID, AppKey 修改博客配置 修改config.toml配置 加入以下内容: # Valine.

牛客网-二叉树的镜像

二叉树镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 分析: 想到递归,对每一个节点有4种情况: 当前节点为空 当前节点不为空,左子树为空 当前节点不为空,右子树为空 当前节点不为空,左右子树都为空 很显然2,3两点可以重合 那么递归退出条件就是1和4 代码 代码如下,测试通过 public static void mirror(TreeNode root) { if (root==null)return; if (root.

RabbitMq安装部署

RabbitMq-Windows版本部署 软件下载 otp_win64_R16B03-1.exe rabbitmq-server-3.6.9.exe 软件安装一路下一步,全部使用默认地址 启动服务 进入C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.4.1\sbin目录,运行cmd,输入命令rabbitmq-plugins enable rabbitmq_management: C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.9\sbin> rabbitmq-plugins enable rabbitmq_management The following plugins have been enabled: amqp_client cowlib cowboy rabbitmq_web_dispatch rabbitmq_management_agent rabbitmq_management Applying plugin configuration to [email protected]

牛客网题目-树的子结构

2019-09-25-树的子结构 题目名称:树的子结构 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 分析: 第一想法是递归,只要是树,我就上递归。分析情况有以下3种: 当前root1节点=当前root2节点 当前root1节点!=当前root2节点,但是root1.left和root2节点相等 当前root1节点!=当前root2节点,但是root1.right和root2节点相等 所以需要一个辅助函数helper public static boolean hasSubtree(TreeNode root1, TreeNode root2) { if (root1==null || root2==null) return false; //三种情况 return helper(root1,root2) || hasSubtree(root1.

Mongodb安装与使用

Mongodb安装与使用 背景知识 最近在项目实施过程中遇到一个问题:由于客户提供的Linux机器没有最下滑化安装,导致使用公司的bin包方式安装Mongodb失败。本着能自己解决就自己解决的态度,我开始了Mongodb的研究。 安装和启动 下载 因为centos的官放的yum源中没有提供Mongodb的安装包,此时我们需要自己下载下来(也可以修改yum源,不推荐) 执行命令wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz 下载安装包 解压 执行解压命令tar zxvf mongodb-linux-x86_64-4.0.0.tgz,如果为了统一的化,可以把解压出来的文件夹重命名,以及移动到/opt/下去。这个不重要,可以不用看。 添加启动配置

MySQL一键备份脚本

MySQL一键备份脚本 备份脚本-Windows版本 脚本下载 @echo off pause set year=%Date:~0,4% set month=%Date:~5,2% set day=%Date:~8,2% set address=f:\ set host=localhost set user=root set password=123321 set mysqlpath=D:\epoint_mysql_5.

GitHub博客教程

GitHub博客 作为一名程序员,每天的学习必不可少,但是,如果只是乱糟糟的学习,而不懂得如何去记笔记,那效率可想而知。一个技术博客,是大多数程序员的必须品。漂亮的博客,让工作顺心,让学习更有效率,更有动力。今天,我来教大家如何利用GitHub提供的免费服务,打造自己的专属博客,白嫖美滋滋。 前期准备; GitHub账号 Hugo 软件 Git客户端 掌握Markdown语法 需要准备的东西就是这么多,账号去官网注册就行,几个软件下载安装就可以,具体怎么安装,以及如何跨平台啥的,这里不作阐述。需要注意的是Markdown语法一定要会,起码简单的语法懂得,因为写文章都要用Markdown来写,.md是他的标志。 第一篇文章 准备好以上条件后,我们来写一篇博客

windows常用批处理命令

Windows批处理 常用dos命令 echo 打印 dir 列文件名 cd 改变当前目录 ren 改变文件名 copy 拷贝文件 del 删除文件 md 建立子目录 rd 删除目录 deltree 删除目录树 format 格式化磁盘 edit 文本编辑 type 显示文件内容 mem 查看内存状况 ## 以下是新增加的命令 help 显示帮助提示 cls 清屏 move 移动文件,改目录名 more 分屏显示 xcopy 拷贝目录和文件 显示篇 echo @ 和 pause 在DOS命令提示符中使用 echo /?

合并两个排序的链表

牛客网-合并两个排序的链表 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则 解答: package nowcoder; /** * 合并两个排序的链表 */ public class Merge { public static ListNode merge(ListNode list1,ListNode list2) { ListNode head = new ListNode(-1); head.

第155场周赛--LeetCode

第 155 场周赛–LeetCode 第一题:最小绝对差 题目描述: 给你个整数数组 arr,其中每个元素都 不相同。 请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。 示例 1: 输入:arr = [4,2,1,3] 输出:[[1,2],[2,3],[3,4]] 示例 2: 输入:arr = [1,3,6,10,15] 输出:[[1,3]] 示例 3:

netcat使用教程

netcat使用教程 @author [email protected] fork me on github netcat简介 netcat 一般简称为 nc,直译为中文就是“网猫”,被誉为——【网络上的瑞士军刀】。它诞生于1995年,在网络安全社区的名气很大(就如同 AK47 在军事领域的名气)。长期在安全圈内混的人,应该都知道它。想当年,insecure.org 网站在本世纪初搞过几次“年度投票”,评选优秀的安全工具。每次投票,netcat 都能排进前几名。参考链接 nc命令行简介 形式: nc 命令选项 主机 端口 命令选项 这部分可能包含 0~N 个选项 (注:这部分最复杂,下一个小节单独聊) 主机 这部分可能没有,可能以“点分十进制”形式表示,也可能以“域名”形式表示。 端口 这部分可能没有,可能是单个端口,可能是端口范围(以减号分隔) 举例:

排序算法总结

排序总结 冒泡排序 原理:每次比较两个相邻的元素,将较大元素交换至右端 特点:每次循环结束,会出现一个排序好的元素,右侧 理解:大的数右移,重复此过程 代码: public static void bubbleSort(int[] nums){ for (int i=0; i<nums.length-1; i++){ //第i次循环找出第i小的元素0<=i<=length-1 for (int j=0; j<nums.

Redis笔记

Redis笔记 key-value结构 Redis目前有5种数据类型,分别是: String(字符串) List(列表) Hash(字典) Set(集合) Sorted Set(有序集合) 不同的数据类型,有不同的命令方式 String 操作 set google http://www.google append google .com get google set visitors 0 incr visitors incr visitors get visitors incrby visitors 100 get visitors type google type visitors ttl google rename google google-site get google get google-site String 手册

MYSQL笔记

MYSQL笔记 UUID select uuid(); 存储过程 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 创建存储过程 DELIMITER // CREATE PROCEDURE getAllUsers() BEGIN SELECT * FROM `user`; END // DELIMITER ; CALL getAllUsers(); 调用存储过程

ssm整合

ssm整合 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>tk.amrom</groupId> <artifactId>crms</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>crms Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.

vue

vue学习 模板语法 v-html用于输出html代码; v-bind用于设置html属性中的值; 指令 指令是带有v-前缀的特殊属性,指令用于在表达式的值改变时,将某些行为应用到 DOM 上; 参数,参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性;

Android学习笔记

Android学习 ListView package com.amrom.linjinbao.listviewtest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import java.util.ArrayList; import java.

修复Office文件默认图标

修复office文件默认图标 rem 修复office文件默认图标.bat :: office图标文件路径,请根据自己电脑上的安装目录设置 set officepath=C:\Program Files\Microsoft Office\root\vfs\Windows\Installer\{90160000-000F-0000-1000-0000000FF1CE}\ :: 修复word图标 reg add "HKCR\Word.Document.8\DefaultIcon" /ve /t REG_SZ /d "%officepath%WORDICON.EXE,1" reg delete "HKCR\Word.