Kafka快速入门
基本概念AR:分区的所有副本集合,AR=ISR+OSR
ISR:与leader副本一定程度同步的所有副本(包括leader副本)
OSR:与leader副本同步滞后过多的副本集合
HW:高水位,所有副本都同步到的offset,消费者只能拉取HW之前的消息
LEO:Log End Offset,待写入消息的offset,即最后一条消息的offset+1
安装JDK安装123456789101112131415# 解压jdk压缩包至/opttar zxvf jdk-8u181-linux-x64.tar.gz# 配置jdk环境变量vim /etc/profile# 添加如下配置export JAVA_HOME=/opt/jdk1.8.0_181 export JRE_HOME=$JAVA_HOME/jreexport PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib# 使配置生效source /etc/profilejava -version
ZooKeeper安装12345678910111 ...
Redis五种数据类型
String键值对
12345678910> set name codehole OK > get name "codehole"> exists name (integer) 1 > del name (integer) 1 > get name (nil)
批量键值对
12345678910111213> set name1 codehole OK > set name2 holycoder OK > mget name1 name2 name3 # 返回一个列表1) "codehole" 2) "holycoder" 3) (nil) > mset name1 boy name2 girl name3 unknown > mget name1 name2 name3 1) "boy" 2) "girl" 3) "unknown"
过期时间
12345678910111213> set name c ...
Typora激活方法
前言Typora自正式版1.0.0发布后,需要付费获取激活码才能使用,beta版仍可继续免费使用。
以下方法采用非常规方法在1.0.4版本亲测激活成功,特别声明:该方法仅供学习交流,切勿用于任何商业用途。
准备首先需要获得asar的解包和打包工具,工具的使用依赖于以下环境:
python环境
node环境(可选)
源码地址:https://github.com/Mas0nShi/typoraCracker
步骤1.获取工具源代码,进入到工具的根目录。
2.安装工具所需依赖环境:
1pip install -r requirements.txt
该命令需要本机安装有Visual Studio C++ Build Tools,否则安装过程会报错。
3.找到Typora安装目录下的app.asar文件,例如:C:\Program Files\Typora\resources\app.asar。
4.执行工具解包命令:
1python typora.py "C:\Program Files\Typora\resources\app.asar" workstation ...
JUC内置锁
ReentrantReadWriteLock读锁和写锁互斥,相互阻塞写锁和写锁互斥,相互阻塞读锁和读锁不互斥,不阻塞
持有读锁的情况下去获取写锁,会导致获取写锁永久等待(重入时升级不支持)即持有写锁的情况下去获取读锁,不阻塞(重入时降级支持)
示例
12345678910111213141516171819202122232425262728293031323334353637383940414243444546@Slf4j(topic = "c.TestReadWriteLock")public class TestReadWriteLock { public static void main(String[] args) throws InterruptedException { DataContainer dataContainer = new DataContainer(); new Thread(() -> { dataContainer.read(); ...
JUC内置线程池
ThreadPoolExecutorThreadPoolExecutor是最基础的线程池类:
12345678public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
corePoolSize 核心线程数目 (最多保留的线程数)
maximumPoolSize 最大线程数目
keepAliveTime 生存时间 - 针对救急线程
unit 时间单位 - 针对救急线程
workQueue 阻塞队列
threadFactory 线程工厂 - 可以为线程创建时起个好名字
handler 拒绝策略
工作原理
线程池中刚开始没有线程,当一个任务提交给线程池后,线程池会创建一个新线程来执行任务。
当线程数达 ...
基于ubuntu系统的k8s集群安装
主机准备
主机名
操作系统
CPU
内存
硬盘
master1
ubuntu18.04
1*2核
2G
20G
node1
ubuntu18.04
1*2核
2G
20G
node2
ubuntu18.04
1*2核
2G
20G
集群安装运行时安装(docker)切换root账号sudo su -
12345678910111213sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg2curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key --keyring /etc/apt/trusted.gpg.d/docker.gpg add -sudo add-apt-repository ...
使用Docker部署常用中间件
docker安装方法一:一键安装1curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
方法二:常规安装1.安装yum-utils,yum-utils提供了yum-config-manager管理工具
1yum install -y yum-utils
2.配置国内镜像源
1yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装Docker Engine-Community 和 containerd :
1yum install docker-ce docker-ce-cli containerd.io
方法三:本地安装1.查看操作系统内核,从官网下载对应版本
1uname -r
官网下载地址:https://download.docker.com/linux/static/stable ...
k8s集群客户端工具kubectl
子命令使用分类
NameSpace(命名空间)
作用:多租户情况下,实现资源隔离
属于逻辑隔离
属于管理边界
不属于网络边界
可以针对每个namespace做资源配额
查看NameSpace123kubectl get namespace#或者kubectl get ns
名字
说明
default
用户创建的pod默认在此命名空间
kube-public
所有用户均可以访问,包括未认证用户
kube-node-lease
集群节点租约状态,v1.13加入
kube-system
kubernetes集群系统内部使用的命名空间
创建NameSpace通过kubectl命令行创建
1kubectl create namespace test #创建test命名空间
通过应用资源清单文件创建:
准备资源清单文件01-create-ns.yaml
1234apiVersion: v1kind: Namespacemetadata: name: test2
应用资源清单文件
1kubectl apply -f 01-create-ns.yaml
...
快速搭建k8s集群
主机准备VMware安装三台CentOS7虚拟机,一台作为master节点,2台作为worker节点。
主机名
操作系统
CPU核数
内存
角色
master1
CentOS7最小化
2
2G
master
worker1
CentOS7最小化
2
2G
worker
worker2
CentOS7最小化
2
2G
worker
主机网络配置设置主机名1hostnamectl set-hostname XXX
设置IP编辑配置文件
1vi /etc/sysconfig/network-scripts/ifcfg-ens33
添加如下设置:
12345BOOTPROTO="none" #获取ip方式,把dhcp改为noneIPADDR="192.168.216.XXX"PREFIX="24" #设置子网掩码 或者"NETMASK=255.255.255.0"GATEWAY="192.168.xxx.xxx" ...
前缀和配合哈希表的常规解法
问题给定一个数组,求和等于目标值的连续子数组的个数。
力扣中等题:560. 和为K的子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
示例 1 :
输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
解法比较容易想到的是暴力解法,循环遍历得到所有的子数组的和,如果正好等于目标值则让计数加一,最后返回计数值。一般是用2个指针i,j分别指向指向子数组的开头和结尾,内外两层循环,时间复杂度为O(n^2)。
12345678910def subarraySum(self, nums: List[int], target: int) -> int: n=len(nums) res=0 for i in range(n): s=0 for j in range(i,n): s+=nums[j] if s==target: res+=1 return res
暴力法 ...