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

day04-面向对象-常用API时间Arrays

一、常用API

1.1 StringBuilder类

StringBuilder类代表可变的字符串对象,理解为一个操作字符串的容器相对于String来说,比本来的操作效率更高
​
StringBuilder常用方法public StringBuilder(): 构建一个空的可变字符串对象public StringBuilder(String str): 构建一个指定内容的可变字符串对象
​public StringBuilder append(任意对象): 拼接数据并返回本身(向后添加)public void reverse(): 翻转内容public int length(): 返回长度public String toString(): 将StringBuilder转为String对象并返回
​
StringBuffer跟StringBuilder类功能一样,但是线程安全, 性能较低
public class Demo1 {public static void main(String[] args) {//1. 创建StringBuilderStringBuilder stringBuilder1 = new StringBuilder();//2. 字符拼接stringBuilder1.append("貂蝉");stringBuilder1.append("妲己");stringBuilder1.append("张飞");stringBuilder1.append("李飞");System.out.println(stringBuilder1);//貂蝉妲己张飞李飞//3. 反转内容stringBuilder1.reverse();System.out.println(stringBuilder1);//飞李飞张己妲蝉貂//4. 返回长度System.out.println(stringBuilder1.length());//8//5. 转为字符串String string = stringBuilder1.toString();System.out.println(string);//飞李飞张己妲蝉貂}
​
}

练习

设计一个方法,用于返回任意整型数组的内容,要求返回的数组内容格式如:[11,22,33]
public class Demo2 {
​public static void main(String[] args) {//定义数组int[] arr = {11, 22, 33};System.out.println(getArray(arr));System.out.println(getArray2(arr));
​}
​//需求1: 使用String搞public static String getArray(int[] arr) {//创建一个字符串String s = "[";//循环遍历for (int i = 0; i < arr.length; i++) {//获取每个元素,拼接到字符串中s += arr[i];s = i == arr.length - 1 ? s : s + ",";}s += "]";//返回sreturn s;}//需求2: 使用StringBuilder搞public static String getArray2(int[] arr) {//创建一个StringBuilder对象,并设置初始值为"[",StringBuilder stringBuilder = new StringBuilder("[");//循环遍历for (int i = 0; i < arr.length; i++) {//获取每个元素,拼接到StringBuilder中stringBuilder.append(arr[i]);//判断是否是最后一个元素,不是最后一个元素,则拼接","if(i != arr.length - 1){stringBuilder.append(",");}}//拼接"]"stringBuilder.append("]");//转换为StringString string = stringBuilder.toString();//返回字符串return string;}
​
​
}

String和StringBuilder的区别是什么,分别适合什么场景?

答:String:是不可变字符串、频繁操作字符串会产生很多无用的对象,性能差

适合字符串内容不变的场景。

StringBuilder:是内容可变的字符串、拼接字符串性能好、代码优雅

适合字符串内容频繁变化的场景。

1.2 StringBuffer类

    StringBuffer的用法与StringBuilder是一模一样的但StringBuilder是线程不安全的  StringBuffer是线程安全的

StringBuilder和StringBuffer的区别是什么,分别适合什么场景?

答:StringBuilder和StringBuffer都是可变字符串

StringBuffer线程安全,性能销差

StringBuilder线程不安全,性能更高

1.3 StringJoiner类

StringJoiner类JDK8提供的一个类,和StringBuilder用法类似,但是代码更简洁
​
好处:使用它拼接字符串的时候,不仅高效,而且代码的编写更加的方便。场景:拼接字符串想指定拼接时的间隔符号,开始符号和结束符号
​
常用方法public StringJoiner("间隔符号")  构建一个可变字符串对象,指定拼接时的间隔符号public StringJoiner("间隔符号","开始符号","结束符号") 构建一个可变字符串对象,指定拼接时的间隔符号,开始符号和结束符号
​public StringJoiner add(String str)   按照格式拼接数据并返回本身public int length()  返回长度public String toString()  将StringJoiner转为String对象并返回
public class Demo4 {public static void main(String[] args) {int[] arr = {11, 22, 33};System.out.println(getArray(arr));
​}
​//需求: 设计一个方法,按照格式要求,返回任意类型数组内容:[11,22,33]public static String getArray(int[] arr) {//创建一个StringJoiner对象,指定间隔符号,开始符号,结束符号StringJoiner stringJoiner = new StringJoiner(",", "[", "]");//遍历数组,拼接数据for (int i = 0; i < arr.length; i++) {//拼接数据(add参数为String类型)stringJoiner.add(arr[i] + "");}//返回字符串return stringJoiner.toString();}
}

1.4 Math类

Math类一个专门用于数学运算的工具类
Math类常用方法int abs(int a) 返回参数的绝对值double ceil(double a) 向上取整(不是四舍五入)double floor(double a) 向下取整(不是四舍五入)long round(double a) 四舍五入int max(int a,int b) 返回两个参数中的较大值int min(int a,int b) 返回两个参数中的较小值double pow(double a,double b) 返回a的b次幂double random() 返回[0.0,1.0)之间的随机正数(0-1不包含1的小数)
public class Demo1 {public static void main(String[] args) {// int abs(int a) 返回参数的绝对值System.out.println(Math.abs(-10));// 10// double ceil(double a) 向上取整(不是四舍五入)System.out.println(Math.ceil(10.1));// 11.0// double floor(double a) 向下取整(不是四舍五入)System.out.println(Math.floor(10.9));// 10.0// long round(double a) 四舍五入System.out.println(Math.round(10.5));// 11// int max(int a,int b) 返回两个参数中的较大值System.out.println(Math.max(10,20));// 20// int min(int a,int b) 返回两个参数中的较小值System.out.println(Math.min(10,20));// 10// double pow(double a,double b) 返回a的b次幂System.out.println(Math.pow(10,3));// 1000.0// double random() 返回[0.0,1.0)之间的随机正数(0-1不包含1的小数)System.out.println(Math.random());//生成[0-10)之间的整数System.out.println((int)(Math.random()*10));}
}

1.5 System类

System代表程序所在系统的一个工具类
​
System类常用方法void exit(int status) 终止虚拟机,非0参数表示异常停止long currentTimeMillis() 返回当前系统时间的毫秒值 (从1970年1月1日  00:00:00走到此刻的总的毫秒数(1s = 1000ms)。(一般用于计算程序的执行时间(执行后-执行前))

1.6 BigDecimal

BigDecimal用于解决浮点型运算时,出现结果失真的问题
​
BigDecimal常用方法BigDecimal(double val)     将double转换为BigDecimal (注意:不推荐使用这个,无法总精确运算)BigDecimal(String val)     把String转成BigDecimalstatic BigDecimal valueOf(数值型数据)
​BigDecimal add(另一BigDecimal对象)  加法BigDecimal subtract(另一个BigDecimal对象)  减法BigDecimal multiply(另一BigDecimal对象)   乘法BigDecimal divide(另一BigDecimal对象)   除法(除不尽报错)double doubleValue()   将BigDecimal转换为double
​BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式)  除法、可以控制精确到小数几位舍入模式RoundingMode.UP         进一RoundingMode.FLOOR      去尾RoundingMode.HALF_UP    四舍五入
public class Demo3 {public static void main(String[] args) {//0. 浮点型运算时, 直接+ - * / 可能会出现运算结果失真System.out.println(0.1 + 0.2);System.out.println(1.0 - 0.32);System.out.println(1.015 * 100);System.out.println(1.301 / 100);System.out.println("=============================");
​
​//创建一个BigDecimal对象//构造方法BigDecimal bigDecimal1 = new BigDecimal("10");//静态方法BigDecimal bigDecimal2 = BigDecimal.valueOf(3);//加减乘除BigDecimal add = bigDecimal1.add(bigDecimal2);System.out.println(add);//13
​BigDecimal subtract = bigDecimal1.subtract(bigDecimal2);System.out.println(subtract);//7
​BigDecimal multiply = bigDecimal1.multiply(bigDecimal2);System.out.println(multiply);//30//除法:默认情况只支持整除,否则会抛出异常
//        BigDecimal divide = bigDecimal1.divide(bigDecimal2);
//        System.out.println(divide);//除不尽会报错BigDecimal divide = bigDecimal1.divide(bigDecimal2, 2, RoundingMode.HALF_UP);//2位小数,四舍五入System.out.println(divide);//3.33System.out.println("=============================");//将BigDecimal对象转换为double类型double value = divide.doubleValue();System.out.println(value);}
}

二、JDK8之前传统的日期、时间

2.1 Date

Date代表的是日期和时间,目前使用java.util包下的Date
​
Date常用方法Date()  封装当前系统的时间日期对象(当前)Date(long time)  封装指定毫秒值的时间日期对象(指定)
​long getTime()  返回从时间原点到此刻经过的毫秒值void setTime(long time)  设置时间日期对象的毫秒值
public class Demo1 {public static void main(String[] args) {//创建一个当前时间的Date对象Date date = new Date();System.out.println("当前时间为:"+date);//当前时间
​//获取当前时间日期对象的毫秒值long time = date.getTime();System.out.println(time);
​//创建一个Date对象,设置时间是当前时间的1小时之前Date date1 = new Date(time - 60 * 60 * 1000);System.out.println("1小时之前时间为:"+ date1);//当前时间1小时之前
​//重新设置时间日期对象的毫秒值date1.setTime(time + 60 * 60 * 1000);System.out.println("1小时之后1时间为:"+ date1);//当前时间1小时之后}
}

 

2.2 SimpleDateFormat

SimpleDateFormat类日期时间格式化类,可以对Date对象进行格式化和解析操作
​
SimpleDateFormat常用方法public SimpleDateFormat() 空参构造,代表默认格式   2023/9/30 上午2:38public SimpleDateFormat("指定格式") 带参构造,指定日期时间格式
​public final String format(Date date/long time) 将date日期对象转换为指定格式的字符public Date parse(String source) 将字符串转换为date日期对象步骤:1.将date日期对象转换为指定格式的字符串先new SimpleDateFormat,然后调用format(date)方法2.将字符串转换为date日期对象先new SimpleDateFormat,然后调用parse("字符串str")方法(字符串str格式和SimpleDateFormat对象的格式必须一致)
​
格式代表符号y    年M    月d    日H    时m    分s    秒EEE  星期几a    上午/下午

 

public class Demo2 {public static void main(String[] args) throws ParseException {//1.将date日期对象转换为指定格式的字符串Date date = new Date();//1.1 创建一个SimpleDateFormat对象,指定日期时间格式SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//1.2 调用SimpleDateFormat对象的format方法,将date日期对象转换为指定格式的字符串String format = simpleDateFormat.format(date);System.out.println(format);
​System.out.println("------------------------------------------------");
​//2.将字符串转换为date日期对象//2.1 创建一个SimpleDateFormat对象,指定日期时间格式SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//2.2 调用SimpleDateFormat对象的parse方法,将字符串转换为date日期对象Date parse = simpleDateFormat1.parse("2024年8月30日 11:58:45");//字符串格式和SimpleDateFormat对象的格式必须一致System.out.println(parse);
​
​}
}
​

2.3 Calendar

Calender类代表的是系统此刻时间对应的日历,通过它可以单独获取、修改时间中的年、月、日、时、分、秒等。
​
常见方法static Calendar getInstance()  获取当前日历对象
​int get(int field) 获职日历中指定信息final Date getTime() 获取日期对象Long getTimeInMillis() 获取时间毫秒值
​void set(int field,int value) 修改个信息void add(int field,int amount) 为某个信息增加/减少指定的值
public class Demo3 {public static void main(String[] args) {//1. 创建日历对象   static Calendar getInstance()Calendar calendar = Calendar.getInstance();//2. 获取: 年 月 日  时 分 秒   int get(int field) 获职日历中指定信息int year = calendar.get(Calendar.YEAR);//获取年System.out.println(year);int month = calendar.get(Calendar.MONTH);//获取月System.out.println(month+1);int day = calendar.get(Calendar.DAY_OF_MONTH);System.out.println(day);//3. 获取日期对象 final Date getTime()Date date = calendar.getTime();System.out.println(date);//4. 获取时间毫秒值 Long getTimeInMillis()long timeInMillis = calendar.getTimeInMillis();System.out.println(timeInMillis);//5. 修改日期中的某个项 void set(int field,int value)calendar.set(Calendar.YEAR,2003);calendar.set(Calendar.HOUR_OF_DAY,15);Date date1 = calendar.getTime();System.out.println(date1);//6. 为某个信息增加/减少指定的值 void add(int field,int amount)calendar.add(Calendar.MONTH,-1);//月份减一Date date2 = calendar.getTime();System.out.println(date2);}
}

三、JDK8开始新增的日期、时间

3.1 LocalDate、 LocalTime、LocalDateTime

三个类LocalDate:代表本地日期(年、月、日、星期)LocalTime:代表本地时间(时、分、秒、纳秒)LocalDateTime:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)
​
创建方式Xxx.now() 获取时间信息Xxx.of(2025, 11, 16, 14, 30, 01)  设置时间信息
​
LocalDateTime转换为LocalDate和LocalTimepublic LocalDate toLocalDate() 转换成一个LocalDate对象public LocalTime toLocalTime() 转换成一个LocalTime对象
​
以LocalDate为例子演示常用方法获取细节: getYear、getMonthValue、getDayOfMonth、getDayOfYear、getDayOfWeek直接修改某个信息,返回新日期对象: withYear、withMonth、withDayOfMonth、withDayOfYear把某个信息加多少,返回新日期对象: plusYears、plusMonths、plusDays、plusWeeks把某个信息减多少,返回新日期对象: minusYears、minusMonths、minusDays,minusWeeks判断两个日期对象,是否相等,在前还是在后:equals isBefore isAfter

 

public class Demo1 {public static void main(String[] args) {//1. 两种方式创建LocalDateTimeLocalDateTime now = LocalDateTime.now();System.out.println("当前时间为:" + now);LocalDateTime time = LocalDateTime.of(2025, 5, 20, 13, 14);System.out.println("指定时间为:" + time);
​//2. 使用LocalDateTime获取LocalDate和LocalTimeLocalDate localDate = now.toLocalDate();System.out.println("当前日期:" + localDate);
​LocalTime localTime = now.toLocalTime();System.out.println("当前时间:" + localTime);
​//3. 获取细节: getYear、getMonthValue、getDayOfMonth、getDayOfYear、getDayOfWeekint year = now.getYear();Month month = now.getMonth();int dayOfMonth = now.getDayOfMonth();System.out.println("当前日期为: " + year + "年" + month.getValue() + "月" + dayOfMonth + "日");
​//4. 直接修改某个信息,返回新日期对象: withYear、withMonth、withDayOfMonth、withDayOfYearLocalDateTime localDateTime = now.withYear(2029).withMonth(1).withDayOfMonth(1);System.out.println("修改后的日期:" + localDateTime);
​//5. 把某个信息加多少,返回新日期对象: plusYears、plusMonths、plusDays、plusWeeksLocalDateTime localDateTime1 = now.plusYears(1).plusMonths(1).plusDays(1);System.out.println("加1年1月1日后的日期:" + localDateTime1);
​//6. 把某个信息减多少,返回新日期对象: minusYears、minusMonths、minusDays,minusWeeksLocalDateTime localDateTime2 = now.minusYears(1).minusMonths(1).minusDays(1);System.out.println("减1年1月1日前的日期:" + localDateTime2);
​//7. 判断两个日期对象,是否相等,在前还是在后:equals isBefore isAfterboolean equals = localDateTime1.equals(localDateTime2);System.out.println("两个日期是否相等:" + equals);
​System.out.println((localDateTime1.isBefore(localDateTime2) ? "在前面的日期是 " + localDateTime1 : "在前面的日期是 " + localDateTime2));}
}

 

3.2 ZoneId、ZonedDateTime

时区和带时区的时间时区(ZoneId)public static Set<String> getAvailableZoneIds()    获取Java中支持的所有时区public static ZoneId systemDefault()   获取系统默认时区public static ZoneId of(String zoneId) 获取一个指定时区带时区的时间(ZonedDateTime)public static ZonedDateTime now()  获取当前时区的ZonedDateTime对象public static ZonedDateTime now(ZoneId zone)   获取指定时区的ZonedDateTime对象
public class Demo2 {public static void main(String[] args) {//获取Java中支持的所有时区Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();System.out.println(availableZoneIds);System.out.println("------------------------------------------------");//获取系统默认时区ZoneId zoneId = ZoneId.systemDefault();System.out.println(zoneId);//获取一个指定时区ZoneId zoneId1 = zoneId.of("Asia/Aden");System.out.println(zoneId1);
​//获取当前时区的ZonedDateTime对象ZonedDateTime now = ZonedDateTime.now();System.out.println(now);System.out.println("------------------------------------------------");//获取指定时区的ZonedDateTime对象ZonedDateTime now1 = ZonedDateTime.now(zoneId1);System.out.println(now1);}
}

 

3.3 DateTimeFormatter(对新版时间做格式化)

DateTimeFormatter:定义格式化时间的格式public static DateTimeFormatter ofPattern(时间格式)     获取格式化器对象
​
LocalDateTime的方法public String format(DateTimeFormatter formatter)   时间转字符串public static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)   字符串转时间
public class Demo3 {public static void main(String[] args) {// 对日期进行格式化处理,获取字符串   LocalDateTime -----> String//1.设置一个当前时间的对象 LocalDateTimeLocalDateTime now = LocalDateTime.now();//2.设置一个时间格式化对象 DateTimeFormatterDateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");//3.调用LocalDateTime对象的format方法,把时间格式化String format = now.format(pattern);System.out.println("格式化后的时间:" + format);//格式化后的时间:2024年08月30日 16:15:33
​// 2.将字符串转成时间  String -----> LocalDateTimeLocalDateTime parse = LocalDateTime.parse("2024年08月30日 16:15:33", pattern);System.out.println("字符串转时间:" + parse);//字符串转时间:2024-08-30T16:15:33
​}
}

四、Arrays

4.1 数组工具类

Arrays数组工具类
​
Arrays常用方法public static String toString(类型[] arr)  返回数组内容的字符串表示形式public static int[] copyOfRange(类[]arr,起始索引,结束索引) 拷贝数组,元素为索引的指定范围,左包含右不包含public static copyOf(类型[] arr,int newLength)  拷贝数组,指定新数组的长度public static void setAll(double[] array, IntToDoubleFunction generator)  将数组中的数据改为新数据,重新存入数public static void sort(类型[ arr); 对数组元素进行升序排列(存储自定义对象下节讲)
public class Demo1 {public static void main(String[] args) {int[] arr = {1,3,2,5,4};
​//public static String toString(类型[] arr)  返回数组内容的字符串表示形式String string = Arrays.toString(arr);System.out.println(string);//[1, 3, 2, 5, 4]
​//public static int[] copyOfRange(类[]arr,起始索引,结束索引) 拷贝数组,元素为索引的指定范围,左包含右不包含int[] ints = Arrays.copyOfRange(arr, 0, 2);System.out.println(Arrays.toString(ints));//[1, 3]
​//public static copyOf(类型[] arr,int newLength)  拷贝数组,指定新数组的长度(长度不足补0)int[] ints1 = Arrays.copyOf(arr, 3);System.out.println(Arrays.toString(ints1));//[1, 3, 2]int[] ints2 = Arrays.copyOf(arr, 5);System.out.println(Arrays.toString(ints2));//[1, 3, 2, 5, 4]int[] ints3 = Arrays.copyOf(arr, 8);System.out.println(Arrays.toString(ints3));//[1, 3, 2, 5, 4, 0, 0, 0]
​//public static void setAll(double[] array, IntToDoubleFunction generator)  将数组中的数据改为新数据,重新存入数//批量对double类型的数组的每个元素进行相同的处理double[] arr1 = {1.0,2.0,3.0,4.0,5.0};Arrays.setAll(arr1, new IntToDoubleFunction() {@Overridepublic double applyAsDouble(int value) {System.out.println(value);//value为索引return arr1[value] * 2;}});System.out.println(Arrays.toString(arr1));//[2.0, 4.0, 6.0, 8.0, 10.0]
​
​//public static void sort(类型[ arr); 对数组元素进行升序排列(存储自定义对象下节讲)Arrays.sort(arr);System.out.println(Arrays.toString(arr));//[1, 2, 3, 4, 5]}
}

4.2 使用Arrays对对象进行排序

使用Arrays对对象进行排序方式1: 自然排序(本案例)1、对象实现comparabLe接口,指定泛型2、重写compareTo方法、指定排序规则正序(由小到大):当前对象的属性)参数对应的属性,返回正数(1),否则返回负数(-1)倒序(由大到小):当前对象的属性)参数对应的属性,返回正数(-1),否则返回负数(1)3、调用Arrays.sort(arr)方法,完成排序排序规则返回正数,表示当前元素较大返回负数,表示当前元素较小返回0,表示相同
public class Demo2 {public static void main(String[] args) {//1. 定义学生数组对象,保存四个学生进行测试Student[] students = new Student[4];students[0] = new Student("蜘蛛精", 169.5, 23);students[1] = new Student("紫霞1", 163.8, 26);students[2] = new Student("紫霞2", 164.8, 26);students[3] = new Student("至尊宝", 167.5, 24);System.out.println(Arrays.toString(students));//2. 指定排序的规则(插入排序:成对插入)Arrays.sort(students);//3. 打印结果System.out.println(Arrays.toString(students));}
}
​
class Student implements Comparable<Student> {private String name;private double height;private int age;
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public int getAge() {return age;}
​public void setAge(int age) {this.age = age;}
​public double getHeight() {return height;}
​public void setHeight(double height) {this.height = height;}
​public Student(String name, double height, int age) {this.name = name;this.height = height;this.age = age;}
​@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", height=" + height +", age=" + age +'}';}
​
​@Overridepublic int compareTo(Student o) {//正序(由小到大):当前对象的属性 > 传入参数o对象的属性,返回正数(1),否则返回负数(-1)//倒序(由大到小):当前对象的属性 > 传入参数o对象的属性,返回正数(-1),否则返回负数(1)return this.height > o.height ? -1 : 1;//倒序}
}
使用Arrays对对象进行排序方式2: 比较器排序1、调用sort排序方法,参数二传递Comparator按口的实现类对象(匿名内部类实现)2、重写compare方法3、指定排序规则排序规则返回正数,表示当前元素较大返回负数,表示当前元素较小返回0,表示相同
public class  Demo3 {public static void main(String[] args) {//1. 定义学生数组对象,保存四个学生进行测试Teacher[] teachers = new Teacher[4];teachers[0] = new Teacher("蜘蛛精", 169.5, 23);teachers[1] = new Teacher("紫霞1", 163.8, 26);teachers[2] = new Teacher("紫霞2", 164.8, 26);teachers[3] = new Teacher("至尊宝", 167.5, 24);
​//2. 指定排序的规则(两个参数(数组,比较器(指定排序的规则)))Arrays.sort(teachers, new Comparator<Teacher>() {@Overridepublic int compare(Teacher o1, Teacher o2) {//正序:o1属性大于o2属性,返回正数,否则返回负数//倒序:o1属性小于o2属性,返回正数,否则返回负数return o1.getHeight() > o2.getHeight() ? 1 : -1;//正序}});//3. 打印结果System.out.println(Arrays.toString(teachers));}
}
​
class Teacher{private String name;private double height;private int age;
​public Teacher(String name, double height, int age) {this.name = name;this.height = height;this.age = age;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public double getHeight() {return height;}
​public void setHeight(double height) {this.height = height;}
​public int getAge() {return age;}
​public void setAge(int age) {this.age = age;}
​@Overridepublic String toString() {return "Teacher{" +"name='" + name + '\'' +", height=" + height +", age=" + age +'}';}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Django+Vue音乐推荐系统的设计与实现
  • 如何在C语言中使用pthread库实现多线程编程
  • kafak集群搭建-基于kRaft方式
  • 【MySQL-24】万字全面解析<索引>——【介绍&语法&性能分析&使用规则】
  • USER_CLOCK_ROOT
  • 解构赋值的理解
  • python办公自动化:使用`Python-PPTX`创建和操作表格
  • 数学建模学习(121):Python实现模糊AHP(Fuzzy AHP)——从原理到实践
  • JAVA_12
  • 一文搞懂Window、PhoneWindow、DercorView、WindowManage
  • C#计算模数转换器(ADC)的参数DNL、INL、SNR等
  • SQL Server Service Broker故障排除
  • InternVL 多模态模型部署微调实践
  • 骁龙CPU简介
  • Java-数据结构-时间和空间复杂度 (ಥ_ಥ)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java Agent 学习笔记
  • Java读取Properties文件的六种方法
  • Java应用性能调优
  • Joomla 2.x, 3.x useful code cheatsheet
  • js学习笔记
  • Mithril.js 入门介绍
  • Mybatis初体验
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • springboot_database项目介绍
  • SQL 难点解决:记录的引用
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • WePY 在小程序性能调优上做出的探究
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 动态魔术使用DBMS_SQL
  • 前端js -- this指向总结。
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 一个SAP顾问在美国的这些年
  • 移动端唤起键盘时取消position:fixed定位
  • 正则表达式小结
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 阿里云ACE认证学习知识点梳理
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​ssh免密码登录设置及问题总结
  • #mysql 8.0 踩坑日记
  • (2)MFC+openGL单文档框架glFrame
  • (2)nginx 安装、启停
  • (3)选择元素——(17)练习(Exercises)
  • (33)STM32——485实验笔记
  • (C语言)字符分类函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (杂交版)植物大战僵尸
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (轉貼) UML中文FAQ (OO) (UML)
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件