发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967
课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。
腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518
第二个视频发布 https://edu.csdn.net/course/detail/27109
腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518
介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。
第三个视频发布:https://edu.csdn.net/course/detail/27574
详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------
package com.data.struct;
import java.util.Random;
/**
*
* @author Administrator
*完全散列,两级散列
*/
public class CompeletHash {
private Object [][]slot;
private int a;//系数a
private int b;//系数b
private int p=101;//最大值范围,假设数据是0到100
private int firstSlot;//一级slot数
public CompeletHash(int slotSize){
firstSlot=slotSize;
slot=new Object[slotSize][];
a=new Random().nextInt(p);
b=new Random().nextInt(p);
for(int i=0;i<slotSize;i++){
Integer mi=p/firstSlot+1;
Object [] secondSlot=new Object[mi+3];
secondSlot[0]=mi;
Integer ai=new Random().nextInt(p);
Integer bi=new Random().nextInt(p);
secondSlot[1]=ai;
secondSlot[2]=bi;
slot[i]=secondSlot;
}
secondSize=new int[firstSlot];
System.out.println("a:"+a+" b:"+b);
}
private int hashFirst(int key){
return (a*key+b)%p%firstSlot;
}
private int hashSecond(int key){
return (((int)(slot[hashFirst(key)][1])*key+((int)slot[hashFirst(key)][2]))%p%((int)slot[hashFirst(key)][0]));
}
private int []secondSize;
public void put(int key,int value){
Entry entry=new Entry();
entry.setKey(key);
entry.setValue(value);
if(slot[hashFirst(key)][hashSecond(key)+3]!=null){
System.out.println("confict:"+key);
}
slot[hashFirst(key)][hashSecond(key)+3]=entry;
secondSize[hashFirst(key)]+=1;
}
public Object get(int key){
Entry entry=((Entry)slot[hashFirst(key)][hashSecond(key)+3]);
if(entry!=null){
return entry.getValue();
}else{
return null;
}
}
public int size(){
int size=0;
for(int i=0;i<firstSlot;i++){
for(int j=3;j<slot[i].length;j++){
if(slot[i][j]!=null){
size+=1;
}
}
}
return size;
}
public void print(){
for(int i=0;i<firstSlot;i++){
for(int j=3;j<slot[i].length;j++){
if(slot[i][j]!=null){
System.out.print("("+((Entry)slot[i][j]).getKey()+","+((Entry)slot[i][j]).getValue()+") ");
}
}
System.out.println();
}
System.out.println();
for(int i=0;i<firstSlot;i++){
System.out.print(secondSize[i]+" ");
}
System.out.println();
}
public void remove(int key){
slot[hashFirst(key)][hashSecond(key)+3]=null;
}
private static class Entry{
private int key;
private int value;
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public static void main(String[] args) {
CompeletHash myHash=new CompeletHash(10);
myHash.put(33, 33);
myHash.print();
myHash.put(44, 44);
myHash.put(36, 36);
myHash.print();
System.out.println(myHash.size());
for(int i=1;i<100;i++){
myHash.put(i, i);
}
myHash.print();
System.out.println(myHash.size());
}
}
第二级hash会出现冲突可能是二级a,b系数选择问题,有能解决的可以和我联系共同探讨