当前位置: 首页 > news >正文

第七章:Java常用类

第七章:Java常用类

7.1:字符串相关的类

  1. String的特性

    • String表示是字符串,使用一对""引起来表示。

    • String声明为final的,不可被继承。

    • String实现了Serializable、Comparable接口,表示字符是支持序列化和比较大小。

    • String内部定义了final char[] value用于存储字符串数据。

    • String代表不可变的字符串序列。简称:不可变性。

    • 通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。

    • 字符串常量池中是不会存储相同内容的字符串的。

    • 通过new String()的方式创建一个字符串,是数据在堆空间中开辟空间以后对应的地址值。

      //字面量的定义方式
      String s1 = "abc"; 
      String s2 = "abc";
      System.out.println(s1 == s2); //trueString s3 = "abc";
      s3 += "def";
      System.out.println(s3); //abcdef
      System.out.println(s2); //abc
      
    • 常量与常量的拼接结果在常量池。

    • 只要其中有一个是变量,结果就在堆中。

    • 如果拼接的结果调用intern()方法,返回值就在常量池中。

      String s1 = "javaEE";
      String s2 = "hadoop";
      String s3 = "javaEEhadoop";String s4 = "javaEE" + "hadoop";
      String s5 = s1 + "hadoop";System.out.println(s3 == s4);//true
      System.out.println(s3 == s5);//falseString s6 = s5.intern();
      System.out.println(s3 == s6);//true
      
  2. 字符串常用方法

    • int length():返回字符串的长度。

    • char cahrAt(int index):返回某索引出的字符。

    • boolean isEmpty():判断是否是空字符串。

    • String toLowerCase():使用默认语言环境,将String中的所有字符转换为小写。

    • String toUpperCase():使用默认语言环境,将String中的所有字符转换为大写。

    • String trim():返回字符串的副本,忽略前导空白和尾部空白。

      String s1 = "HelloWorld";
      System.out.println(s1.length()); //10
      System.out.println(s1.charAt(9)); //d
      System.out.println(s1.isEmpty()); // falseString s2 = s1.toLowerCase();
      System.out.println(s2); //helloworldString s3 = "   he  llo   world   ";
      String s4 = s3.trim();
      System.out.println("-----" + s4 + "-----"); //----he   llo    world----
      
    • boolean equals(Object obj):比较字符串的内容是否相同。

    • boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写。

    • String concat(String str):将指定字符串连接到此字符串的结尾。

    • int compareTo(String anotherString):比较两个字符串的大小。

    • String substring(int beginIndex):返回一个新的字符串,从beginIndex开始截取到最后的一个子字符串。

    • String substring(int beginIndex, int endIndex):从beginIndex开始截取到endIndex(不包含)的一个字符串

      String s1 = "HelloWorld";
      String s2 = "helloworld";
      System.out.println(s1.equals(s2)); // false
      System.out.println(s1.equalsIgnoreCase(s2)); // trueString s3 = "abc";
      String s4 = s3.concat("def");
      System.out.println(s4); //abcdefString s5 = "abc";
      String s6 = new String("abe");
      System.out.println(s5.compareTo(s6)); //-2String s7 = "小王同学要加油";
      String s8 = s7.substring(2);
      System.out.println(s8); //同学要加油
      String s9 = s7.substring(2, 5);
      System.out.println(s9); //同学要
      
    • boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。

    • boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始。

    • boolean startWith(String prefix, int toffset):测试此字符串从指定索引开始的字符串是否以指定前缀开始

      String str1 = "hellowworld";
      boolean b1 = str1.endsWith("rld");
      System.out.println(b1); //trueboolean b2 = str1.startsWith("He");
      System.out.println(b2); //falseboolean b3 = str1.startsWith("ll",2);
      System.out.println(b3); //true
      
    • boolean contains(CharSequence s):当且仅当此字符串包含指定的char值序列时,返回true

    • int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。

    • int indexOf(String str, int fromIndex)

      返回指定字符串在此字符串中第一次出现的索引,从指定的索引开始

    • int lastIndexOf(String str):返回指定字符串在此字符串中最右边出现的索引。

    • int lastIndexOf(String str, int fromIndex)

      返回指定字符串在此字符串中最后一次出现的索引,从指定的索引开始反向搜索。

      String str1 = "hellowworld";
      String str2 = "wor";
      System.out.println(str1.contains(str2)); //true System.out.println(str1.indexOf("lol")); //-1(表示没有找到)
      System.out.println(str1.indexOf("lo",5)); //-1String str3 = "hellorworld";
      System.out.println(str3.lastIndexOf("or")); //6
      System.out.println(str3.lastIndexOf("or",6)); //6
      
    • String replace(char oldChar, char newChar):返回一个新的字符串,它是通过newChar替换此字符串中出现的所有orlChar得到的。

    • String replace(CharSequence target, CharSequence reqlacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的字符串。

    • String replaceAll(String regex, String replacement):使用给定的reqlacement替换此字符串所有匹配给定的正则表达式的字符串。

    • String replaceFirst(String regex, String replacement):使用给定的replacement替换此字符串匹配给定的正则表达式的第一个字符串。

      String str1 = "小王同学要加油小王";
      String str2 = str1.replace('王', '胡');
      System.out.println(str2); //小胡同学要加油小胡String str3 = str1.replace("小王", "小胡");
      System.out.println(str3); //小胡同学要加油小胡String str = "12hello34world5java7891mysql456";
      String string = str.replaceAll("\\d+", ",").replaceAll("^,|,$", "");
      System.out.println(string); //hello,world,java,mysql
      
    • boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。

    • String[] split(String regex):根据给定正则表达式的匹配拆分此字符串

    • String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中

      String str = "12345";
      boolean matches = str.matches("\\d+");
      System.out.println(matches); //truestr = "hello|world|java";
      String[] strs = str.split("\\|");
      for (int i = 0; i < strs.length; i++) {System.out.print(strs[i] + "\t"); //hello	world	java
      }
      
  3. String与基本数据类型转换

    • 字符串 ———— 基本数据类型、包装类

      String str1 = "123";
      // 字符串 转 基本数据类型、包装类
      int num = Integer.parseInt(str1);
      // 基本数据类型、包装类 转 字符串
      String str2 = String.valueOf(num);
      
    • 字符数组 ———— 字符串

      String str1 = "abc123";  
      // 字符串  转  字符数组
      char[] charArray = str1.toCharArray();
      // 字符数组  转  字符串
      char[] arr = new char[]{'h','e','l','l','o'};
      String str2 = new String(arr);
      
    • 字节数组 ———— 字符串

      String str1 = "abc123中国";
      // 字符串  转  字节数组
      byte[] bytes = str1.getBytes(); //使用默认字符集将字符串转字节数组
      byte[] gbks = str1.getBytes("gbk"); //使用gbk格式的字符集将字符串转字符数组,此处会有异常
      // 字符数组  转  字符串
      String str2 = new String(bytes);//使用默认字符集将字符数组转字节串
      String str4 = new String(gbks, "gbk");//使用gbk格式的字符集将字符数组转字符串
      
  4. StringBufferStringBuilder

    • StringBuffer、StringBuilder代表可变的字符序列,可以对字符串内容进行增删,此时不会产生新的对象。

    • StringBuffer、StringBuilder底层使用char[]存储。

    • StringBufferJDK 1.0中声明的,是线程安全的可变字符序列。

    • StringBuilderJDK 5.0中声明的,是线程不安全的可变字符序列。

    • StringBuffer、StringBuilder使用空参构造器时,底层创建了一个长度是16的数组。

      public StringBuffer() {super(16);
      }
      
    • 如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的元素复制到新数组中。

      // StringBuffer类的append方法
      public synchronized StringBuffer append(String str) {toStringCache = null;super.append(str);return this;
      }
      // StringBuffer类父类AbstractStringBuilder类的append方法
      public AbstractStringBuilder append(String str) {if (str == null)return appendNull();int len = str.length();ensureCapacityInternal(count + len);str.getChars(0, len, value, count);count += len;return this;
      }
      // AbstractStringBuilder类的ensureCapacityInternal方法
      private void ensureCapacityInternal(int minimumCapacity) {if (minimumCapacity - value.length > 0) {value = Arrays.copyOf(value, newCapacity(minimumCapacity));}
      }
      // AbstractStringBuilder类的newCapacity方法
      private int newCapacity(int minCapacity) {int newCapacity = (value.length << 1) + 2;if (newCapacity - minCapacity < 0) {newCapacity = minCapacity;}return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)? hugeCapacity(minCapacity): newCapacity;
      }
      
    • 开发中建议使用StringBuffer(int capacity)StringBuilder(int capacity)指定数组的长度。

  5. StringBufferStringBulider常用方法

    • StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接。
    • StringBuffer delete(int start, int end):删除指定位置的内容。
    • StringBuffer replace(int start, int end, String str):把[start, end)位置替换为str
    • StringBuffer insert(int offset, xxx):在指定位置插入xxx。
    • StringBuffer reverse():把当前字符序列逆转。

7.2:JDK8之前日期时间API

  1. java.lang.System

    • public static long currentTimeMillis():返回当前时间与1970年1月1日0时之间以毫秒为单位的时间差。

      long time = System.currentTimeMillis();
      System.out.println(time);
      
  2. java.util.Date

    • 构造器
      1. Date():使用无参构造器创建的对象可以获取本地当前时间。
      2. Date(long date):创建指定毫秒数的Date对象。
    • 方法
      1. toString():显示当前的年、月、日、时、分、秒。
      2. getTime():获取当前Date对象对应的毫秒数
    //构造器一:Date():创建一个对应当前时间的Date对象
    Date date1 = new Date();
    System.out.println(date1.toString());
    System.out.println(date1.getTime());
    //构造器二:创建指定毫秒数的Date对象
    Date date2 = new Date(155030620410L);
    System.out.println(date2.toString());
    // 将java.util.Date对象转换为java.sql.Date对象
    Date date6 = new Date();
    java.sql.Date date7 = new java.sql.Date(date6.getTime());
    
  3. java.text.SimpleDateFormat

    Date类的API不易于国际化,大部分被废弃了。java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。

    • 构造器

      1. SimpleDateFormat():默认的模式和语言环境创建对象。
      2. SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建对象
    • 格式化

      1. public String format(Date date):格式化时间对象date
    • 解析

      1. public Date parse(String source):给定字符串的开始解析文本,以生成一个日期。
    • 按照指定的方式格式化和解析
      在这里插入图片描述

    //实例化SimpleDateFormat:使用默认的构造器
    SimpleDateFormat sdf = new SimpleDateFormat();
    //格式化:日期 --->字符串
    Date date = new Date();
    String format = sdf.format(date);
    System.out.println(format);
    //解析:格式化的逆过程,字符串 ---> 日期
    //要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现)。否则,抛异常。
    String str = "22-12-18 上午11:43";
    Date date1 = sdf.parse(str);
    System.out.println(date1);
    //按照指定的方式格式化和解析:调用带参的构造器
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    //格式化
    String format1 = sdf1.format(date);
    System.out.println(format1);
    //解析
    Date date2 = sdf1.parse("2020-02-18 11:48:27");
    System.out.println(date2);
    
  4. java.util.Calendar(日历)

    • Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
    • 获取Calendar实例
      1. 使用Calendar.getInstance()方法。
      2. 调用它的子类GregorianCalendar的构造器。
    • 常用方法
      1. public int get(int field):获取想要的时间信息。
      2. public void set(int field, int amount):设置想要的时间信息。
      3. public void add(int field, int amount):在现在的时间增加到想要的时间。
      4. public final Date getTime():日期转为时间。
      5. public final void setTime(Date date):时间转为日期。
    • 注意
      1. 获取月份时:一月是0,二月是1,以此类推,12月是11。
      2. 获取星期时:周日是1,周二是2,以此类推,周六是7。
    //实例化
    Calendar calendar = Calendar.getInstance();//get()
    int days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days);//set()
    calendar.set(Calendar.DAY_OF_MONTH,22);
    days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days);//add()
    calendar.add(Calendar.DAY_OF_MONTH,-3);
    days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days);//getTime():日历类---> Date
    Date date = calendar.getTime();
    System.out.println(date);//setTime():Date ---> 日历类
    Date date1 = new Date();
    calendar.setTime(date1);
    days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days);
    

7.3:JDK8中新日期时间API

  1. LocalDate、LocalTime、LocalDateTime

    LocalDate、LocalTime、LocalDateTime类的实例对象是不可变对象。

    • LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储生日、纪念日等日期。

    • LocalTime表示一个时间,而不是日期。

    • LocalDateTime是用来表示日期和时间的。

    • 相关方法
      在这里插入图片描述

    //now():获取当前的日期、时间、日期+时间
    LocalDate localDate = LocalDate.now();
    LocalTime localTime = LocalTime.now();
    LocalDateTime localDateTime = LocalDateTime.now();System.out.println(localDate);
    System.out.println(localTime);
    System.out.println(localDateTime);
    //of():设置指定的年、月、日、时、分、秒。没有偏移量
    LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 13, 23, 43);
    System.out.println(localDateTime1);
    //getXxx():获取相关的属性
    System.out.println(localDateTime.getDayOfMonth());
    System.out.println(localDateTime.getDayOfWeek());
    System.out.println(localDateTime.getMonth());
    System.out.println(localDateTime.getMonthValue());
    System.out.println(localDateTime.getMinute());
    //体现不可变性
    //withXxx():设置相关的属性
    LocalDate localDate1 = localDate.withDayOfMonth(22);
    System.out.println(localDate);
    System.out.println(localDate1);LocalDateTime localDateTime2 = localDateTime.withHour(4);
    System.out.println(localDateTime2);
    //plusXxx():增加相关属性
    LocalDateTime localDateTime3 = localDateTime.plusMonths(3);
    System.out.println(localDateTime3);
    //minuXxx():减少相关属性
    LocalDateTime localDateTime4 = localDateTime.minusDays(6);
    System.out.println(localDateTime4);
    
  2. 瞬时Instant

    • Instant时间线上的一个瞬时点。这可能被用来记录应用程序中的事件时间戳。

    • 时间线中的一个点表示一个很大的数,这有利于计算机处理。在java中,也是从1970年开始,但以毫秒为单位

    • 因为java.time包是基于纳秒计算的,所以Instant的精度可以达到纳秒级。

    • 1秒 = 1000毫秒 = 10−6^{-6}6微秒 = 10−910^{-9}109纳秒

    • 相关方法
      在这里插入图片描述

    //now()
    Instant instant = Instant.now();
    System.out.println(instant);
    //添加时间的偏移量
    OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
    System.out.println(offsetDateTime);
    //toEpochMilli()
    long milli = instant.toEpochMilli();
    System.out.println(milli);
    //ofEpochMilli()
    Instant instant1 = Instant.ofEpochMilli(1550475314878L);
    System.out.println(instant1);
    
  3. 格式化与解析日期或时间

    java.time.format.DateTimeFormatter类:该类提供了三种格式化方法

    • 预定义的标准格式:ISO_LOCAL_DATE_TIME、ISO_LOCAL_DATE、ISO_LOCAL_TIME

    • 本地化相关格式:ofLocalizedDateTime()、ofLocalizedDate()

    • 自定义格式

    • 相关方法
      在这里插入图片描述

    // 方式一:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
    DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
    //格式化:日期-->字符串
    LocalDateTime localDateTime = LocalDateTime.now();
    String str1 = formatter.format(localDateTime);
    System.out.println(str1);
    //解析:字符串 -->日期
    TemporalAccessor parse = formatter.parse("2019-02-18T15:42:18.797");
    System.out.println(parse);//方式二:
    //FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT :适用于LocalDateTime
    DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
    //格式化
    String str2 = formatter1.format(localDateTime);
    System.out.println(str2);
    //FormatStyle.FULL / FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT : 适用于LocalDate
    DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
    //格式化
    String str3 = formatter2.format(LocalDate.now());
    System.out.println(str3);//2019-2-18//方式三:自定义的格式
    DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
    //格式化
    String str4 = formatter3.format(LocalDateTime.now());
    System.out.println(str4);
    //解析
    TemporalAccessor accessor = formatter3.parse("2019-02-18 03:52:09");
    System.out.println(accessor);
    
  4. 其他API

    • Zoneld:该类中包含了所有的时区信息,一个时区的ID

    • ZonedDateTime:一个在ISO-8601日历系统时区的日期时间。

    • Clock:使用时区提供对当前即时、日期和时间的访问的时钟。

    • Duration:持续时间,用于计算两个时间间隔。

    • Period:日期间隔,用于计算两个日期间隔。

    • TemporalAdjuster:时间校正器。

    • TemporalAdjusters

      该类通过静态方法firstDayOfXxx()/lastDayOfXxx()/nextXxx()提供了大量的常用TemporalAdjuster的实现。

  5. 与传统日期处理的转换
    在这里插入图片描述

7.4:java比较器

Java中经常会设计到对象数组的排序问题,那么就涉及到对象之间的比较问题。

  1. 自然排序:java.lang.Comparable

    • Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。
    • 实现Comparable的类必须实现compareTo(Object obj)方法,两个对象即通过compareTo()方法的返回值来比较大小。
      1. 如果当前对象this大于形参对象obj,则返回正整数。
      2. 如果当前对象this小于形参对象obj,则返回负整数。
      3. 如果当前对象this等于形参对象obj,则返回0。
    • Comparable默认都是从小到大排列的。
  2. 定制排序:java.util.Comparator

    • 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现java.lang.Comparable接口的排序规则不适合当前的操作。那么可以考虑使用Comparator的对象来排序,强行对多个对象进行整体排序的比较
    • 重写compare(Object o1, Object o2)方法比较o1o2的大小。
      1. 如果方法返回正整数,则表示o1大于o1
      2. 如果方法返回0,则表示相等。
      3. 如果方法返回负整数,则表示o1小于o2
  3. 自然排序和定值排序的对比

    • Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小。

    • Comparator接口属于临时性的比较。

7.5:System类

System类代表系统,系统级的很多属性和控制方法都防止在该类的内部。该类位于java.lang包。

​ 由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部成员变量和成员方法都是static的,所以也可以很方便的进行调用。

  1. 成员变量
    • in:标准输入流(键盘输入)。
    • out:标准输出流(显示器)。
    • orr:标准错误输出流(显示器)。
  2. 成员方法
    • native long currentTimeMillis():返回当前计算机时间和1970年1月1日0时所差的毫秒数。
    • void exit(int status):退出程序。其中status的值为0代表正常退出,非零代表异常退出。
    • void gc():是请求系统进行垃圾回收。
    • String getProperty(String key):获取系统中属性名为key的属性对应的值。
      1. java.version:java运行时环境版本。
      2. java.homejava安装目录。
      3. os.name:操作系统的名称。
      4. os.version:操作系统的版本。
      5. user.name:用户的账户名称。
      6. user.home:用户的主目录。
      7. user.dir:用户的当前工作目录。

7.6:Math类

java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型。

  1. abs:绝对值
  2. acos、asin、atan、cos、sin、tan:三角函数
  3. sqrt:平方根
  4. pow(double a, double b):a的b次幂
  5. log:自然对数
  6. exp:e为底指数
  7. max(double a, double b):两个数中找较大的数
  8. min(double a, double b):两个数中找较小的数
  9. random():返回0.0到1.0的随机数
  10. long round(double a)doubel型数据a转换为long型。(四舍五入)
  11. toDegrees(double angrad):弧度转角度
  12. toRadians(double angdeg):角度转弧度

7.7:BigInteger和BigDecimal

  1. BigInteger
    • java.math包的BigInteger可以表示不可变的任意精度的整数。
    • BigInteger提供所有java基本整数操作符的对应物,并提供java.lang.Math的所有相关方法。
    • BigInteger还提供模算术、GCD计算、质数测试、素数生成、位操作以及一些其他操作。
    • 构造器
      1. BigInteger(String val):根据字符串构建BigInteger对象。
    • 常用方法
      1. public BigInteger abs():返回此BigInteger的绝对值的BigInteger
      2. BigInteger add(BigInteger val):返回其值为this + valBigInteger
      3. BigInteger subtract(BigInteger val):返回其值为this - valBigInteger
      4. BigInteger multiply(BigInteger val):返回其值为this * valBigInteger
      5. BigInteger divide(BigInteger val):返回其值为this / valBigInteger。整数相除只保留整数部分。
      6. BigInteger remainder(BigInteger val):返回其值为this % valBigInteger
      7. BigInteger[] divideAndRemainder(BigInteger val):返回包含this / val后跟this % val的两个BigInteger的数组。
      8. BigInteger pow(int exponent):返回其值为this 的 exponent次幂BigInteger
  2. BigDecimal
    • 一般的Float类和Double类可以用来做科学计算或工程计算,但是在商业计算中,要求数字精度比较高,故用到java.math.BigDecimal类。
    • BigDecimal类支持不可变的、任意精度的有符号十进制定点数。
    • 构造器
      1. public BigDecimal(double val)
      2. public BigDecimal(String val)
    • 常用方法
      1. public BigDecimal add(BigDecimal augend)
      2. public BigDecimal subtract(BigDecimal subtrahend)
      3. public BigDecimal multiply(BigDecimal multiplicand)
      4. public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

相关文章:

第七章:Java常用类

第七章&#xff1a;Java常用类 7.1&#xff1a;字符串相关的类 String的特性 String表示是字符串&#xff0c;使用一对""引起来表示。 String声明为final的&#xff0c;不可被继承。 String实现了Serializable、Comparable接口&#xff0c;表示字符是支持序列化和…...

Apk加固后多渠道打包

之前一直使用360加固宝进行apk的加固打包&#xff0c;可以一键加固并打多渠道打包。但是&#xff0c;现在360加固宝收费了&#xff0c;在进行加固&#xff0c;多渠道打包&#xff0c;就得一步一步自己操作了&#xff0c;会很繁琐。所以&#xff0c;本文使用 360加固美团Wallet …...

K8S + ISTIO 金丝雀部署的例子

金丝雀发布&#xff08;Canary&#xff09;&#xff1a;也是一种发布策略&#xff0c;和国内常说的灰度发布是同一类策略。蓝绿部署是准备两套系统&#xff0c;在两套系统之间进行切换&#xff0c;金丝雀策略是只有一套系统&#xff0c;逐渐替换这套系统。 Istio 提供一种简单的…...

python自带数据的模型合集

鸢尾花----聚类 Python鸢尾花数据集通常用于分类问题&#xff0c; 这些模型都可以通过Python中的Scikit-learn库进行实现。同时&#xff0c;也可以对这些模型进行参数调优以提高模型的准确性。 Logistic Regression&#xff08;逻辑回归&#xff09;&#xff1a; 逻辑回归是一…...

女生学习大数据怎么样~有前景么

当前大数据发展前景非常不错&#xff0c;且大数据领域对于人才类型的需求比较多元化&#xff0c;女生学习大数据也会有比较多的工作机会。大数据是一个交叉学科涉及到的知识量比较大学习有一定的难度&#xff0c;女生则有女生的优势&#xff0c;只要认真学习了都是可以做大数据…...

统计代码量

一 windows 在 Windows 系统上&#xff0c;您可以使用 PowerShell 命令行工具来统计项目的代码量。下面是使用 PowerShell 统计项目代码量的步骤&#xff1a; 打开 PowerShell 终端&#xff1a;按下 Win X 键&#xff0c;选择「Windows PowerShell&#xff08;管理员&#xf…...

uniapp在线升级关联云空间

升级中心 uni-upgrade-center - App&#xff1a; https://ext.dcloud.net.cn/plugin?id4542 App升级中心 uni-upgrade-center文档&#xff1a; https://uniapp.dcloud.net.cn/uniCloud/upgrade-center.html#uni-upgrade-center-app 升级中心 uni-upgrade-center - Admin&#…...

学习streamlit-2

首先视频快速预览下今天的学习内容&#xff1a; Streamlit Shorts&#xff1a; How to make a button今天继续学习streamlit&#xff0c;首先激活之前建立的虚拟环境&#xff1a; ❯ conda activate streamlit-env (streamlit-env) ~ via &#x1f40d; v3.9.16 via &#x1f…...

Vscode中Vue文件保存格式化、 ElementUI、Font Awesome俩大插件使用

Vscode中Vue文件老一片红色出现格式错误&#xff1f;&#xff1f;如何运行别人的项目&#xff08;没有node_modules文件&#xff09;&#xff1f;&#xff1f;选用组件与图标&#xff1f;&#xff1f; 解决问题一 前提有&#xff1a;Prettier ESLint插件、ESLint插件 1.打开s…...

汽车标定知识整理(三):CCP报文可选命令介绍

目录 一、可选命令 CRO命令报文的可选命令表&#xff1a; 二、可选命令帧格式介绍 1、GET_SEED——获取被请求资源的种子&#xff08;0x12&#xff09; 2、UNLOCK——解锁保护&#xff08;0x13&#xff09; 3、SET_S_STATUS——设置Session状态&#xff08;0x0C&#xff0…...

kubeadm安装K8S(集群)

前言市面上很多k8s的安装工具&#xff0c;作为产品的设计者和推广者&#xff0c;K8S组织也知道自己的产品部署起来十分的困难&#xff0c;于是把开源爱好者写的工具kubeadmn收编为正规军&#xff0c;纳入到了自己的麾下。为什么我们要用kubeadmn来部署&#xff1f;因为kubeadm不…...

Baumer工业相机堡盟相机如何使用PnPEventHandler实现相机掉线自动重连(C++新)

项目场景&#xff1a; Baumer工业相机堡盟相机传统开发包BGAPI SDK进行工业视觉软件整合时&#xff0c;常常需要将SDK中一些功能整合到图像处理软件中&#xff0c;方便项目的推进使用&#xff1b; 在项目的图像处理任务中&#xff0c;可能会因为一些硬件比如线缆网卡的原因导…...

Windows 命令行基础

1. 引言&#xff1a;为什么要使用命令行在 DOS 时代&#xff0c;人们只能依靠输入命令同计算机互交。而现在&#xff0c;微软的 Windows 操作系统已得到了广泛使用&#xff0c;我们处理日常事务也大多使用基于图形用户界面&#xff08;GUI&#xff0c;Graphics User Interface&…...

面试官: 谈下音视频同步原理,音频和视频能绝对同步吗?

作者&#xff1a;波哥 心理分析&#xff1a;音视频同步本身比较难&#xff0c;一般使用ijkplayer 第三方做音视频同步。不排除有视频直播 视频通话需要用音视频同步&#xff0c;可以从三种 音频为准 视频为准 自定义时钟为准三种方式实现音视频同步 求职者:如果被问到 放正心态…...

CFS三层靶机安装与配置

CFS三层靶机安装与配置 环境下载 百度网盘 提取码&#xff1a;Chen 环境安装 下载完成后&#xff0c;有三个文件夹&#xff0c;每个文件夹对应一个靶机 进入三个文件夹&#xff0c;双击打开后缀为.ovf的文件&#xff0c;按提示安装虚拟机 环境配置 网段划分 target1&#…...

爬虫入门教程-Spider

Spider 爬虫是定义如何抓取某个网站&#xff08;或一组网站&#xff09;的类&#xff0c;包括如何执行抓取&#xff08;即关注链接&#xff09;以及如何从其网页中提取结构化数据&#xff08;即抓取项目&#xff09;。换句话说&#xff0c;Spider是您定义用于为特定网站&#x…...

Python|蓝桥杯进阶第二卷——贪心

欢迎交流学习~~ 专栏&#xff1a; 蓝桥杯Python组刷题日寄 蓝桥杯进阶系列&#xff1a; &#x1f3c6; Python | 蓝桥杯进阶第一卷——字符串 &#x1f50e; Python | 蓝桥杯进阶第二卷——贪心 &#x1f49d; Python | 蓝桥杯进阶第三卷——动态规划&#xff08;待续&#xf…...

Chrome开发使用技巧总结

Chrome一个程序员开发神器&#xff0c;但是好多猿子们不会或者没有正确使用。今天教大家如何利用它快速高效的开发调试工作。代码格式化有很多css/js的代码都会被 minify 掉&#xff0c;你可以点击代码窗口左下角的那个 { } 标签&#xff0c;chrome会帮你给格式化掉。强制DOM状…...

你真的会在阳光下拍照片么?

你好&#xff0c;我是小麥。 上节课我们讲了如何通过影子判断光的质量&#xff0c;也就是光的软硬&#xff0c;这节课我们来接着说一说光的方向和环境光的实际运用。 虽然在现实生活里&#xff0c;我们可能没有从软硬的角度观察过光线&#xff0c;但我相信你在拍照片的时候一…...

量化择时——均线策略及改进方法(第1部分—因子测算)

文章目录道氏理论个股股价走势阶段板块、行业股价走势均线策略交易逻辑均线策略效果测算改进一&#xff1a;设置策略信号偏移量改进二&#xff1a;生成止盈止损信号道氏理论 使用盘面数据&#xff0c;根据计算出的一条或多条均线&#xff0c;判断入场与离场的时机&#xff0c;…...

封装几个有用的 Vue3 组合式API

本文将介绍如何使用Vue3来封装一些比较有用的组合API,主要包括背景、实现思路以及一些思考。 就我自己的感觉而言,Hook与Composition API概念是很类似的,事实上在React大部分可用的Hook都可以使用Vue3再实现一遍。 为了拼写方便,下文内容均使用Hook代替Composition API。相…...

MyBatisPlus中的条件构造器Wrapper

引言为什么要了解Wrapper&#xff1f;Wrapper解决的了什么问题&#xff1f;一、Wrapper&#xff1a;条件构造抽象类&#xff0c;用来解决单表操作出现的一些复杂问题,例如排序&#xff0c;和模糊查询等等结构图文字解释AbstractWrapper &#xff1a; 用于查询条件封装&#xff…...

类和对象及其构造方法

类和对象 现实世界的事物由什么组成&#xff1f; 属性 行为 类也可以包含属性和行为&#xff0c;所以使用类描述现实世界事物是非常合适的类和对象的关系是什么&#xff1f; 类是程序中的“设计图纸” 对象是基于图纸生产的具体实体什么是面向对象编程&#xff1f; 面向对象编…...

HStream Console、HStreamDB 0.14 发布

近两个月&#xff0c;HStreamDB 相继发布了 0.13 和 0.14 版本&#xff0c;包含多项已知问题修复。同时&#xff0c;我们也发布了全新的 HStream Console 组件&#xff0c;为 HStreamDB 带来了简洁友好的图形化管理界面&#xff0c;将帮助用户更轻松地使用和管理 HStreamDB. H…...

参考文献怎么查找,去哪里查找?一篇文章讲明白这些问题

在我们撰写论文查找参考文献时&#xff0c;往往不知道从哪里入手&#xff0c;本文小编就针对下面这三个方面给大家详细讲解下&#xff1a; 一、查找参考文献方法 二、参考文献资料查找网站 三、参考文献格式规范 一、查找参考文献方法&#xff1a; 1、知网全球最大的中文数据…...

docker-compose+HAProxy+Keepalived搭建高可用 RabbitMQ 集群

基础环境准备 系统环境&#xff1a;Centos7.6 Docker version&#xff1a; 1.13.1, build 7d71120/1.13.1 Docker Compose version&#xff1a; v2.2.2 三个节点&#xff1a; 10.10.11.79 &#xff08;这一台做rabbitmq集群根节点&#xff09; 10.10.11.80 (这台做haproxyke…...

自动化框架如何搭建?让10年阿里自动化测试老司机帮你搞定!自动化测试脚本怎么写?

一、何为框架&#xff1f;何为自动化测试框架&#xff1f; 无论是日常技术交流&#xff0c;还是在自动化测试实践中&#xff0c;经常会听到一个词叫&#xff1a;框架。之前对“框架”这个词知其然不知其所以然。现在看过一些资料以及加上我自己的一些实践有了我自己的一些看法…...

剑指 Offer 15. 二进制中1的个数

剑指 Offer 15. 二进制中1的个数 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为 汉明重量).…...

CHAPTER 3 磁盘管理

磁盘管理1 磁盘管理1.1 块设备信息(lsblk)1.2 挂载硬盘1.2.1 挂载单个硬盘(mkfs、mount)1.2.2 磁盘分区工具(fdisk)1.2.3 创建分区1.2.4 相关命令1. df2. partprobe3. mkfs1.3 逻辑卷管理器(LVM)1. 涉及概念2. 使用LVM流程1.4 磁盘检测及修复&#xff08;fsck&#xff09;1 磁盘…...

MS python学习(7)

Managing Keys - dotenv Managing keys usage of .env module 项目地址&#xff1a;https://github.com/theskumar/python-dotenv Reads the key,value pair from .env and adds them to environment variable. 将key明文&#xff08;hard code&#xff09;形式写在script里…...

wordpress设置固定链接/百度地图的精准定位功能

一、硬件材料 1*ESP8266 NodeMcu开发板 1*0.91寸OLED液晶显示模块 二、硬件接线图...

东莞网站se/seo网络推广什么意思

处理过线上问题的同学基本上都会遇到系统突然运行缓慢&#xff0c;CPU 100%&#xff0c;以及 Full GC 次数过多的问题。 当然&#xff0c;这些问题最终导致的直观现象就是系统运行缓慢&#xff0c;并且有大量的报警。 本文主要针对系统运行缓慢这一问题&#xff0c;提供该问题…...

axsure建设网站/cpa广告联盟平台

SharedPreferences是Android平台上一个轻量级的存储类,提供了Android平台常规的Long、Int、String等等类型的保存&#xff0c;可以设置权限来限定使用起来很简单。存储的数据会以XML文件的形式保存在/data/data/工程名/shared_prefs/ 目录下。 Application是用来保存全局变量的…...

wordpress多用户商城/数据分析师要学什么

本文收集整理关于python如何解一元二次方程的相关议题&#xff0c;使用内容导航快速到达。 内容导航&#xff1a; Q1&#xff1a;python 使用try except解一元二次方程问题 12345678910111213141516171819报错UnboundLocalError:localvariableareferencedbeforeassignment这个报…...

网站推广费用ihanshi/什么软件可以排名次

当你需要将DWG或者DXF格式的CAD图纸转为BMP图片格式的时候&#xff0c;你会怎么做呢&#xff1f;在网上找格式转换的软件&#xff1f;先截图再修改格式&#xff1f;......其实&#xff0c;并不需要那么麻烦&#xff0c;因为轻量级CAD绘图软件——浩辰CAD看图王电脑版中直接就有…...

网站面试通知表格怎么做/360建站和凡科哪个好

Percona Server 刚在 2013 DeveloperWeek Best of Tech award 中赢得最具创新的 SQL 技术奖。 我们很骄傲的接受了这个奖项&#xff0c;该奖项的评选是由独立的评审小组选出&#xff0c;非常感谢你们对 Percona Server 的投票。 Percona 为 MySQL 数据库服务器进行了改进&#…...