
sf
能力说明:
了解变量作用域、Java类的结构,能够创建带main方法可执行的java应用,从命令行运行java程序;能够使用Java基本数据类型、运算符和控制结构、数组、循环结构书写和运行简单的Java程序。
暂时未有相关云产品技术能力~
阿里云技能认证
详细说明CompletableFuture的join和get对比get()方法public class CompeltableFutureBuildDemo { public static void main(String[] args) throws ExecutionException, InterruptedException { CompletableFuture<String> voidCompletableFuture = CompletableFuture.supplyAsync(() -> { System.out.println(Thread.currentThread().getName()); try {TimeUnit.MILLISECONDS.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} return "hello supplyAsync"; }); System.out.println(voidCompletableFuture.get()); } }join方法public class CompeltableFutureBuildDemo { public static void main(String[] args) { CompletableFuture<String> voidCompletableFuture = CompletableFuture.supplyAsync(() -> { System.out.println(Thread.currentThread().getName()); try {TimeUnit.MILLISECONDS.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} return "hello supplyAsync"; }); System.out.println(voidCompletableFuture.join()); } }get方法和join方法功能一样,就是没有编译验证,不需要抛出异常。
有的时候网络不好maven下载jar包,总是有问题会产生很多.lastUpdate结尾的文件我们需要删除这些文件。1、删除所有以.lastUpdate结尾的文件 1、切换到maven的本地仓库 2、在当前目录打开cmd命令行 3、执行命令:for /r %i in (*.lastUpdated) do del %i后台运行nohup java -jar babyshark-0.0.1-SNAPSHOT.jar > log.file 2>&1 &离线安装一下jar包mvn install:install-file -Dfile=D:\ojdbc7-12.1.0.1.0.jar -DgroupId=oracle.ojdbc7 -DartifactId=ojdbc7 -Dversion=12.1.0.1.0 -Dpackaging=jar删除maven本地仓库jar包目录下的 .lastUpdated 和 .repositories 文件,即可解决
1.使用 ssh 方式登录到 VRM(用户名:gandalf 密码:IaaS@OS-CLOUD9!)2、切换到 root 用户(密码:IaaS@OS-CLOUD8!#su - root3、输入以下命令重置 admin 密码,提示输入 galax用户的密码(密码为: SingleLOUD!1)psql -U galax vrm -c "update sm.tbl_user set password='75832dd7fb530fc7f574d61d49cadf20rF86+JEaDx02' where username='admin' and usertype='0';"4、在 web 界面登录(密码已被重置为:Huawei@123!)
案例一:Comparator多属性排序: 先按名字不分大小写排,再按GID倒序排,最后按年龄正序排@AllArgsConstructor @Data public class Person { private String name; private String gid; private Integer age; }import com.google.common.collect.Lists; import com.ultra.cmp.report.dto.Person; import java.util.Comparator; import java.util.List; /** * @author ygf * @date 2022/9/2 9:26 */ public class TestPer { public static void main(String[] args) { List<Person> personList = getTestList(); personList.sort(Comparator.comparing(Person::getName, String.CASE_INSENSITIVE_ORDER) .thenComparing(Person::getGid, (a, b) -> b.compareTo(a)) .thenComparingInt(Person::getAge)); personList.stream().forEach(System.out::println); } public static List<Person> getTestList() { return Lists.newArrayList(new Person("dai", "301", 10), new Person("dai", "303", 10), new Person("dai", "303", 8), new Person("dai", "303", 6), new Person("dai", "303", 11), new Person("dai", "302", 9), new Person("zhang", "302", 9), new Person("zhang", "301", 9), new Person("Li", "301", 8)); } }输出结果:Person(name=dai, gid=303, age=6) Person(name=dai, gid=303, age=8) Person(name=dai, gid=303, age=10) Person(name=dai, gid=303, age=11) Person(name=dai, gid=302, age=9) Person(name=dai, gid=301, age=10) Person(name=Li, gid=301, age=8) Person(name=zhang, gid=302, age=9) Person(name=zhang, gid=301, age=9)对Stream中的元素进行排序:reversed():倒序String[] array = { "c", "c", "a", "b", "b", "e", "e", "d", "d"}; List<String> newList = Arrays.stream(array).sorted().collect(Collectors.toList()); List<Student> students = new ArrayList<>(); students.add(new Student("Mike", 10, "male", 88)); students.add(new Student("Jack", 13,"male", 90)); students.add(new Student("Lucy", 15,"female", 100)); students.add(new Student("Jessie", 12,"female", 78)); students.add(new Student("Allon", 16,"female", 92)); students.add(new Student("Alis", 22,"female", 50)); //正序 List<String> nameList = students.stream() .sorted(Comparator.comparing(Student::getScore)) .map(Student::getName) .collect(Collectors.toList()); System.out.println("按成绩排序输出学生姓名:" + nameList); //倒序 List<String> nameList2 = students.stream() .sorted(Comparator.comparing(Student::getScore).reversed()) .map(Student::getName) .collect(Collectors.toList()); System.out.println("按成绩排序输出学生姓名:" + nameList2); //按成绩排序输出学生姓名:[Alis, Jessie, Mike, Jack, Allon, Lucy] //按成绩排序输出学生姓名:[Lucy, Allon, Jack, Mike, Jessie, Alis] 正序: list=list.stream().sorted().collect(Collectors.toList()); 或者 list.stream().sorted(Comparator.comparing(Student::getAge)) ; 倒序: list.stream().sorted(Comparator.comparing(Student::getAge)) ; list.stream().sorted(Comparator.comparing(Student::getAge).reversed()); //含空值的正序(升序)排序(按创建时间排序) nullsFirst:空值放第一位 list=list.stream().sorted(Comparator.comparing(l -> l.getCreateTime(), Comparator.nullsFirst(Date::compareTo))).collect(Collectors.toList()); //nullsLast:空值放最后 list=list.stream().sorted(Comparator.comparing(l -> l.getCreateTime(), Comparator.nullsLast(Date::compareTo).reversed())).collect(Collectors.toList());
语雀的markdown常用语法如下图:语雀的文档编辑器使用方法地址:https://www.yuque.com/yuque/gpvawt/lnobo9
为了平时写SQL语句更方便,Dbeaver提供了“模板功能”,该功能可以实现自动生成一些常用的SQL语句块,配置好之后输入名称然后按tab键就可以呼出SQL模板:窗口->首选项->编辑器->sql编辑器->模版 :如下图:可以新建,编辑,移除,导入,导出sql模版等等使用:再sql输入框中输入sf,然后Tab键就会有select * from 'table';的弹出,自己选择要查询的表就可以了。
mysql为我们提供了两个类型转换函数:CAST和CONVERTMySQL CAST()函数的语法如下:CAST(expression AS TYPE);CAST()函数将任何类型的值转换为具有指定类型的值。目标类型可以是以下类型之一:BINARY,CHAR,DATE,DATETIME,TIME,DECIMAL,SIGNED,UNSIGNED。--使用CAST将varchar转换成int类型排序select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc limit 10;CONVERT()MySQL CONVERT()提供一个在不同字符集之间转换数据的方法。语法是:CONVERT(expr USING transcoding_name)--使用CONVERT将varchar转换成int类型排序select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED) desc limit 10
什么是JUCJUC简介在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC:就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包,JDK1.5 开始出现的进程与线程进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流, 一个进程中可以并发多个线程,每条线程并行执行不同的任务。总结来说:进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程— —资源分配的最小单位线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。线程的状态线程状态枚举类NEW, 新建 RUNNABLE, 准备就绪 BLOCKED, 阻塞 WAITING, 不见不散 TIMED_WAITING, 过时不候 TERMINATED; 终结wait/sleep的区别1.sleep 是 Thread 的静态方法,wait 是 Object 的方法,任何对象实例都能调用。2.sleep 不会释放锁,它也不需要占用锁。wait 会释放锁,但调用它的前提是当前线程占有锁(即代码要在 synchronized 中)3. 它们都可以被 interrupted 方法中断。并发与并行串行模式串行表示所有任务都一一按先后顺序进行。串行意味着必须先装完一车柴才能运送这车柴,只有运送到了,才能卸下这车柴,并且只有完成了这整个三个步骤,才能进行下一个步骤。串行是一次只能取得一个任务,并执行这个任务。并行模式并行意味着可以同时取得多个任务,并同时去执行所取得的这些任务。并行模式相当于将长长的一条队列,划分成了多条短队列,所以并行缩短了任务队列的长度。并行的效率从代码层次上强依赖于多进程/多线程代码,从硬件角度上则依赖于多核 CPU。并发并发(concurrent)指的是多个程序可以同时运行的现象,更细化的是多进程可以同时运行或者多指令可以同时运行。但这不是重点,在描述并发的时候也不会去扣这种字眼是否精确,==并发的重点在于它是一种现象==, ==并发描述的是多进程同时运行的现象==。但实际上,对于单核心 CPU 来说,同一时刻只能运行一个线程。所以,这里的"同时运行"表示的不是真的同一时刻有多个线程运行的现象,这是并行的概念,而是提供一种功能让用户看来多个程序同时运行起来了,但实际上这些程序中的进程不是一直霸占 CPU 的,而是执行一会停一会。要解决大并发问题,通常是将大任务分解成多个小任务, 由于操作系统对进程的调度是随机的,所以切分成多个小任务后,可能会从任一小任务处执行。这可能会出现一些现象:• 可能出现一个小任务执行了多次,还没开始下个任务的情况。这时一般会采用队列或类似的数据结构来存放各个小任务的成果• 可能出现还没准备好第一步就执行第二步的可能。这时,一般采用多路复用或 异步的方式,比如只有准备好产生了事件通知才执行某个任务。 • 可以多进程/多线程的方式并行执行这些小任务。也可以单进程/单线程执行这 些小任务,这时很可能要配合多路复用才能达到较高的效率并发:同一时刻多个线程在访问同一个资源,多个线程对一个点例子:春运抢票 电商秒杀...并行:多项工作一起执行,之后再汇总例子:泡方便面,电水壶烧水,一边撕调料倒入桶中管程管程(monitor)是保证了同一时刻只有一个进程在管程内活动,即管程内定义的操作在同一时刻只被一个进程调用(由编译器实现).但是这样并不能保证进程以设计的顺序执行JVM 中同步是基于进入和退出管程(monitor)对象实现的,每个对象都会有一个管程(monitor)对象,管程(monitor)会随着java 对象一同创建和销毁执行线程首先要持有管程对象,然后才能执行方法,当方法完成之后会释放管程,方法在执行时候会持有管程,其他线程无法再获取同一个管程用户线程和守护线程用户线程:平时用到的普通线程,自定义线程守护线程:运行在后台,是一种特殊的线程,比如垃圾回收当主线程结束后,用户线程还在运行,JVM 存活如果没有用户线程,都是守护线程,JVM 结束
dbeaver的快捷键的使用ctrl + enter 执行sql ctrl + \ 执行sql,保留之前窗口结果 ctrl + shift + ↑ 向上复制一行 ctrl + shift + ↓ 向下复制一行 ctrl + shift + F 对sql语句进行格式化,对于很长的sql语句很有用 ctrl + d 删除当前行 alt + ↑ 向上选定一条sql语句 alt + ↓ 向下选定一条sql语句 ctrl + / 行注释 ctrl + shift+ / 块注释 ctrl + f 查找、替换 ctrl + space sql提示(如果写了from table后也会自动提示field) ctrl + shift + E 执行计划 ctrl + shift + x 将选定的sql转换成大写字母 ctrl + shift + y 将选定的sql转换成小写字母运行单个sql,选择sql然后右键执行——>执行sql语句执行多个sql,选中多个sql 按住alt+x这些快捷键有时候会和别的软件的快捷键冲突,需要关闭别的软件的快捷建可能版本不通快捷键也会有不同的情况存在,到时候可以自己测试一下。
#1、删除所有以.lastUpdate结尾的文件 ##1、切换到maven的本地仓库 ##2、在当前目录打开cmd命令行 ##3、执行命令:for /r %i in (*.lastUpdated) do del %i#后台运行``` nohup java -jar babyshark-0.0.1-SNAPSHOT.jar > log.file 2>&1 &``````mvn install:install-file -Dfile=D:\ojdbc7-12.1.0.1.0.jar -DgroupId=oracle.ojdbc7 -DartifactId=ojdbc7 -Dversion=12.1.0.1.0 -Dpackaging=jar```# 删除maven本地仓库jar包目录下的 .lastUpdated 和 .repositories 文件,即可解决
import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; public class IpUtil { /** * 在main方法里面可以测试下 * 主要功能都在main方法里,需要什么自己找 */ public static void main(String[] args) { String ip="172.31.0.4";//ip String mask="24";//位数,如果只知道子网掩码不知道位数的话在参考getMaskMap()方法 String submark = getMaskMap(mask); System.out.println("子网掩码为:"+submark); //获得起始IP和终止IP的方法(包含网络地址和广播地址) String startIp=getBeginIpStr(ip, mask); String endIp=getEndIpStr(ip, mask); System.out.println("起始IP:" + startIp + "终止IP:" + endIp); //根据位数查询IP数量 int ipCount = getIpCount("24"); System.out.println("ip个数:"+ipCount); //获得起始IP和终止IP的方法(不包含网络地址和广播地址) String subStart=startIp.split("\\.")[0]+"."+startIp.split("\\.")[1]+"."+startIp.split("\\.")[2]+"."; String subEnd=endIp.split("\\.")[0]+"."+endIp.split("\\.")[1]+"."+endIp.split("\\.")[2]+"."; startIp=subStart+(Integer.parseInt(startIp.split("\\.")[3])+1); endIp=subEnd+(Integer.parseInt(endIp.split("\\.")[3])-1); System.out.println("起始IP:" + startIp + "终止IP:" + endIp); //判断一个IP是否属于某个网段 boolean flag = isInRange("10.2.0.0", "10.3.0.0/17"); System.out.println(flag); //判断是否是一个IP System.out.println(isIP("192.168.1.0")); //把ip转换为数字(mysql中inet_aton()的实现) System.out.println(ipToDouble("192.168.1.1")); //打印IP段所有IP(IP过多会内存溢出) // List<String> list = parseIpMaskRange(ip, mask); // for (String s : list){ // System.out.println(s); // } } /** * 功能:判断一个IP是不是在一个网段下的 * 格式:isInRange("192.168.8.3", "192.168.9.10/22"); */ public static boolean isInRange(String ip, String cidr) { String[] ips = ip.split("\\."); int ipAddr = (Integer.parseInt(ips[0]) << 24) | (Integer.parseInt(ips[1]) << 16) | (Integer.parseInt(ips[2]) << 8) | Integer.parseInt(ips[3]); int type = Integer.parseInt(cidr.replaceAll(".*/", "")); int mask = 0xFFFFFFFF << (32 - type); String cidrIp = cidr.replaceAll("/.*", ""); String[] cidrIps = cidrIp.split("\\."); int cidrIpAddr = (Integer.parseInt(cidrIps[0]) << 24) | (Integer.parseInt(cidrIps[1]) << 16) | (Integer.parseInt(cidrIps[2]) << 8) | Integer.parseInt(cidrIps[3]); return (ipAddr & mask) == (cidrIpAddr & mask); } /** * 功能:根据IP和位数返回该IP网段的所有IP * 格式:parseIpMaskRange("192.192.192.1.", "23") */ public static List<String> parseIpMaskRange(String ip,String mask){ List<String> list=new ArrayList<>(); if ("32".equals(mask)) { list.add(ip); }else{ String startIp=getBeginIpStr(ip, mask); String endIp=getEndIpStr(ip, mask); if (!"31".equals(mask)) { String subStart=startIp.split("\\.")[0]+"."+startIp.split("\\.")[1]+"."+startIp.split("\\.")[2]+"."; String subEnd=endIp.split("\\.")[0]+"."+endIp.split("\\.")[1]+"."+endIp.split("\\.")[2]+"."; startIp=subStart+(Integer.parseInt(startIp.split("\\.")[3])+1); endIp=subEnd+(Integer.parseInt(endIp.split("\\.")[3])-1); } list=parseIpRange(startIp, endIp); } return list; } /** * 功能:根据位数返回IP总数 * 格式:parseIpMaskRange("192.192.192.1", "23") */ public static int getIpCount(String mask) { return BigDecimal.valueOf(Math.pow(2, 32 - Integer.parseInt(mask))).setScale(0, BigDecimal.ROUND_DOWN).intValue();//IP总数,去小数点 } /** * 功能:根据位数返回IP总数 * 格式:isIP("192.192.192.1") */ public static boolean isIP(String str) { String regex = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"; Pattern pattern = Pattern.compile(regex); return pattern.matcher(str).matches(); } public static List<String> parseIpRange(String ipfrom, String ipto) { List<String> ips = new ArrayList<String>(); String[] ipfromd = ipfrom.split("\\."); String[] iptod = ipto.split("\\."); int[] int_ipf = new int[4]; int[] int_ipt = new int[4]; for (int i = 0; i < 4; i++) { int_ipf[i] = Integer.parseInt(ipfromd[i]); int_ipt[i] = Integer.parseInt(iptod[i]); } for (int A = int_ipf[0]; A <= int_ipt[0]; A++) { for (int B = (A == int_ipf[0] ? int_ipf[1] : 0); B <= (A == int_ipt[0] ? int_ipt[1] : 255); B++) { for (int C = (B == int_ipf[1] ? int_ipf[2] : 0); C <= (B == int_ipt[1] ? int_ipt[2] : 255); C++) { for (int D = (C == int_ipf[2] ? int_ipf[3] : 0); D <= (C == int_ipt[2] ? int_ipt[3] : 255); D++) { ips.add(A + "." + B + "." + C + "." + D); } } } } return ips; } /** * 把long类型的Ip转为一般Ip类型:xx.xx.xx.xx * * @param ip * @return */ public static String getIpFromLong(Long ip) { String s1 = String.valueOf((ip & 4278190080L) / 16777216L); String s2 = String.valueOf((ip & 16711680L) / 65536L); String s3 = String.valueOf((ip & 65280L) / 256L); String s4 = String.valueOf(ip & 255L); return s1 + "." + s2 + "." + s3 + "." + s4; } /** * 把xx.xx.xx.xx类型的转为long类型的 * * @param ip * @return */ public static Long getIpFromString(String ip) { Long ipLong = 0L; String ipTemp = ip; ipLong = ipLong * 256 + Long.parseLong(ipTemp.substring(0, ipTemp.indexOf('.'))); ipTemp = ipTemp.substring(ipTemp.indexOf('.') + 1, ipTemp.length()); ipLong = ipLong * 256 + Long.parseLong(ipTemp.substring(0, ipTemp.indexOf('.'))); ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length()); ipLong = ipLong * 256 + Long.parseLong(ipTemp.substring(0, ipTemp.indexOf('.'))); ipTemp = ipTemp.substring(ipTemp.indexOf('.') + 1, ipTemp.length()); ipLong = ipLong * 256 + Long.parseLong(ipTemp); return ipLong; } /** * 根据掩码位获取掩码 * * @param maskBit * 掩码位数,如"28"、"30" * @return */ public static String getMaskByMaskBit(String maskBit) { return "".equals(maskBit) ? "error, maskBit is null !" : getMaskMap(maskBit); } /** * 根据 ip/掩码位 计算IP段的起始IP 如 IP串 218.240.38.69/30 * * @param ip * 给定的IP,如218.240.38.69 * @param maskBit * 给定的掩码位,如30 * @return 起始IP的字符串表示 */ public static String getBeginIpStr(String ip, String maskBit) { return getIpFromLong(getBeginIpLong(ip, maskBit)); } /** * 根据 ip/掩码位 计算IP段的起始IP 如 IP串 218.240.38.69/30 * * @param ip * 给定的IP,如218.240.38.69 * @param maskBit * 给定的掩码位,如30 * @return 起始IP的长整型表示 */ public static Long getBeginIpLong(String ip, String maskBit) { return getIpFromString(ip) & getIpFromString(getMaskByMaskBit(maskBit)); } /** * 根据 ip/掩码位 计算IP段的终止IP 如 IP串 218.240.38.69/30 * * @param ip * 给定的IP,如218.240.38.69 * @param maskBit * 给定的掩码位,如30 * @return 终止IP的字符串表示 */ public static String getEndIpStr(String ip, String maskBit) { return getIpFromLong(getEndIpLong(ip, maskBit)); } /** * 根据 ip/掩码位 计算IP段的终止IP 如 IP串 218.240.38.69/30 * * @param ip * 给定的IP,如218.240.38.69 * @param maskBit * 给定的掩码位,如30 * @return 终止IP的长整型表示 */ public static Long getEndIpLong(String ip, String maskBit) { return getBeginIpLong(ip, maskBit) + ~getIpFromString(getMaskByMaskBit(maskBit)); } /** * 根据子网掩码转换为掩码位 如 255.255.255.252转换为掩码位 为 30 * * @param netmarks * @return */ public static int getNetMask(String netmarks) { StringBuilder sbf; String str; int inetmask = 0; int count = 0; String[] ipList = netmarks.split("\\."); for (int n = 0; n < ipList.length; n++) { sbf = toBin(Integer.parseInt(ipList[n])); str = sbf.reverse().toString(); count = 0; for (int i = 0; i < str.length(); i++) { i = str.indexOf('1', i); if (i == -1) { break; } count++; } inetmask += count; } return inetmask; } /** * 计算子网大小 * * @param maskBit * 掩码位 * @return */ public static int getPoolMax(int maskBit) { if (maskBit <= 0 || maskBit >= 32) { return 0; } return (int) Math.pow(2, 32 - maskBit) - 2; } private static StringBuilder toBin(int x) { StringBuilder result = new StringBuilder(); result.append(x % 2); x /= 2; while (x > 0) { result.append(x % 2); x /= 2; } return result; } public static String getMaskMap(String maskBit) { if ("1".equals(maskBit)) { return "128.0.0.0"; } if ("2".equals(maskBit)) { return "192.0.0.0"; } if ("3".equals(maskBit)) { return "224.0.0.0"; } if ("4".equals(maskBit)) { return "240.0.0.0"; } if ("5".equals(maskBit)) { return "248.0.0.0"; } if ("6".equals(maskBit)) { return "252.0.0.0"; } if ("7".equals(maskBit)) { return "254.0.0.0"; } if ("8".equals(maskBit)) {return "255.0.0.0";} if ("9".equals(maskBit)) {return "255.128.0.0";} if ("10".equals(maskBit)) {return "255.192.0.0";} if ("11".equals(maskBit)) {return "255.224.0.0";} if ("12".equals(maskBit)) {return "255.240.0.0";} if ("13".equals(maskBit)) {return "255.248.0.0";} if ("14".equals(maskBit)) {return "255.252.0.0";} if ("15".equals(maskBit)) {return "255.254.0.0";} if ("16".equals(maskBit)) {return "255.255.0.0";} if ("17".equals(maskBit)) {return "255.255.128.0";} if ("18".equals(maskBit)) {return "255.255.192.0";} if ("19".equals(maskBit)) {return "255.255.224.0";} if ("20".equals(maskBit)) {return "255.255.240.0";} if ("21".equals(maskBit)) {return "255.255.248.0";} if ("22".equals(maskBit)) {return "255.255.252.0";} if ("23".equals(maskBit)) {return "255.255.254.0";} if ("24".equals(maskBit)) {return "255.255.255.0";} if ("25".equals(maskBit)) {return "255.255.255.128";} if ("26".equals(maskBit)) {return "255.255.255.192";} if ("27".equals(maskBit)) {return "255.255.255.224";} if ("28".equals(maskBit)) {return "255.255.255.240";} if ("29".equals(maskBit)) {return "255.255.255.248";} if ("30".equals(maskBit)) {return "255.255.255.252";} if ("31".equals(maskBit)) {return "255.255.255.254";} if ("32".equals(maskBit)) {return "255.255.255.255";} return "-1"; } public static double ipToDouble(String ip) { String[] arr = ip.split("\\."); double d1 = Double.parseDouble(arr[0]); double d2 = Double.parseDouble(arr[1]); double d3 = Double.parseDouble(arr[2]); double d4 = Double.parseDouble(arr[3]); return d1 * Math.pow(256, 3) + d2 * Math.pow(256, 2) + d3 * 256 + d4; } }
2022年11月
2022年10月
2022年09月
公有云,私有云,混合云。
可以设置分区策略来进行分区,可以自定义分区策略。 可以参考:https://blog.csdn.net/bwt1989/article/details/93425790 这个看看
那就下载下来看啊
hive的数据仓缺点非常明显,就是效率比较低,比如一些场景自动生成MapReduce时候,通常情况下是不够智能化的;其次hive的调优比较困难、粒度较粗、在数据挖掘时不擅长以及迭代式算法的表达都是不太好的。
你要监控什么东西呢,可以去看看Prometheus和Zabbix了解一下
由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用, kubernetes引入PV和PVC两种资源对象。 1、PersistentVolume(PV)是集群中已由管理员配置的一段网络存储。 集群中的资源就像一个节点是一个集群资源。 PV是诸如卷之类的卷插件,但是具有独立于使用PV的任何单个pod的生命周期。 该API对象捕获存储的实现细节,即NFS,iSCSI或云提供商特定的存储系统。 2.PVC的使用逻辑:在pod中定义一个存储卷(该存储卷类型为PVC),定义的时候直接指定大小,pvc必须与对应的pv建立关系,pvc会根据定义去pv申请,而pv是由存储空间创建出来的。pv和pvc是kubernetes抽象出来的一种存储资源。 PV : 持久化卷的意思,是对底层的共享存储的一种抽象 PVC(Persistent Volume Claim)是持久卷请求于存储需求的一种声明(PVC其实就是用户向kubernetes系统发出的一种资源需求申请。)
你所的utils 是指什么utils呢
在哪里抽啊
不会影响,镜像只是模版,你用模版copy出一个系统,把模版删除也没有什么影响
仪表板->设置—>语言
Pod的liveness和readiness与startup探针。 Kubelet使用liveness probe(存活探针)来确定何时重启容器。例如,当应用程序处于运行状态但无法做进一步操作,liveness探针将捕获到deadlock,重启处于该状态下的容器,使应用程序在存在bug的情况下依然能够继续运行下去(谁的程序还没几个bug呢)。
Kubelet使用readiness probe(就绪探针)来确定容器是否已经就绪可以接受流量。只有当Pod中的容器都处于就绪状态时kubelet才会认定该Pod处于就绪状态。该信号的作用是控制哪些Pod应该作为service的后端。如果Pod处于非就绪状态,那么它们将会被从service的load balancer中移除。 有时候,会有一些现有的应用程序在启动时需要较多的初始化时间。 要不影响对引起探测死锁的快速响应,这
Kubelet使用startup probe(启动探针)来确定容器是否已经启动。在种情况下,设置存活探测参数是要技巧的。 技巧就是使用一个命令来设置启动探测,针对HTTP 或者 TCP 检测,可以通过设置 failureThreshold * periodSeconds 参数来保证有足够长的时间应对糟糕情况下的启动时间。