Java常用类:7000字一次性帮你总结好啦!

4a0b5b238d03ac61f65e8b1962d34603.png

来源:cnblogs.com/lwtyyds/p/15678152.html

  • 常用类概述

  • 内部类

    • 内部类的分类:

    • 1.成员内部类(非静态内部类)

    • 2.局部内部类

    • 4.匿名内部类

  • Object类

    • Object类常用方法:

    • 1.equals方法

    • 2.hashCode方法

    • 3.toString方法

    • 4.finzlize方法

  • 包装类

    • 「1.基本数据类型以及对应的包装类:」

    • 「2.包装类的意义:」

    • 3.包装类常用方法:

  • 数学类

  • 时间类

    • Java常用时间类:

    • 1.Date 日期

    • 2.Calendar 日历

    • 3.SimpleDateFormat格式化时间

    • 4.计算时间差

  • String类

    • 字符串类常用方法

  • String Builder和StringBuffer

  • DecimalFormat

  • 总结


常用类概述

  1. 内部类

  2. Object类

  3. 包装类

  4. 数学类

  5. 时间类

  6. 字符串

  7. String Builder和StringBuffer

  8. DecimalFormat

内部类

「概念」 :在一个类内部再定义一个完整的类。

一般情况下类与类之间是相互独立的,内部类的意思就是打破这种独立思想,让一个类成为另一个类的内部信息,和成员变量、成员方法同等级别。

「内部类的好处:」

把一个类写在外面和写在里面最终达到的结果都一样,那我们为什么还要使用内部类,岂不是多此一举吗?

「采用内部类这种技术,可以隐藏细节和内部结构,封装性更好,让程序的结构更加合理!如果类很多且都暴露在外面,那么类与类之间的调用就会十分繁琐!」

内部类的分类:

1.成员内部类(非静态内部类)

参考代码如下:

package NeiBuLei;
public class OuterClass {//成员变量private String OuterName;//成员方法public void display(){System.out.println("这是外部类方法!");System.out.println(OuterName);}//内部类public class InnerClass{//成员变量private String InnerNme;//构造方法public InnerClass() {InnerNme = "Inner Class";}//成员方法public void display(){System.out.println("这是内部类方法!");System.out.println(InnerNme);}}// 主方法public static void main(String[] args) {OuterClass outerClass = new OuterClass();outerClass.display();//这是外部类方法!null// 这个类是内部类,已经不是独立的类了,因此不能像外部类一样直接创建!//InnerClass innerClass = new InnerClass(); 行不通OuterClass.InnerClass innerClass = outerClass.new InnerClass();// 同成员方法/变量 只是加了个前缀innerClass.display();// 这是内部类方法!}
}

输出结果:

这是外部类方法!null 这是内部类方法!Inner Class

「总结:成员内部类(非静态内部类)的使用就是将内部类作为外部类的的一个成员变量/成员方法来使用,所以必须依赖于外部类的对象才能调用,用法和成员变量/成员方法一致!」

2.局部内部类

局部内部类:基本的内部类还可以在一个方法体中定义。

package NeiBuLei;
public class OuterClass {//成员变量private String OuterName;//成员方法public void display(){class InnerClass {public void print(){System.out.println("这是一个局部内部类方法!");}}InnerClass innerClass = new InnerClass();innerClass.print();}// 主方法public static void main(String[] args) {OuterClass outerClass = new OuterClass();outerClass.display();}
}
  1. 静态内部类

静态内部类的构造不需要依赖于外部类对象,类中的静态组件都不需要依赖于任何对象,可以直接通过「类本身」 进行构造。

package NeiBuLei;
public class OuterClass {//成员变量private String OuterName;//成员方法public void display(){System.out.println("这是外部类方法!");System.out.println(OuterName);}//静态内部类public static class InnerClass{private String InnerName;public InnerClass() {InnerName = "Inner Class";}//成员方法public void display(){System.out.println("这是静态内部类方法!");System.out.println(InnerName);}}// 主方法public static void main(String[] args) {OuterClass outerClass = new OuterClass();outerClass.display();// 静态内部类的构造不依赖与外部类,可以直接通过类本身进行构造!InnerClass innerClass = new InnerClass();innerClass.display();}
}

输出结果:

这是外部类方法!null 这是静态内部类方法!Inner Class

4.匿名内部类

匿名内部类:没有名字的内部类。

匿名内部类「主要应用与接口的实现!」

接口:

package NeiBuLei;
public interface MyInterface {public void test();
}

实现类:

package NeiBuLei;
public class MyImplement implements MyInterface{@Overridepublic void test() {System.out.println("test");}
}

匿名内部类的使用:

package NeiBuLei;
public class MyImplement implements MyInterface{@Overridepublic void test() {System.out.println("test");}
}

「匿名内部类的好处:」

我们定义接口之后,「它的实现类不需要去单独创建一个文件去写它的实现」 ,我们可以把这个实现类的操作写到我们调用的地方就可以了!写起来更加简洁、方便。

「匿名内部类的缺点:」

耦合度太高了!

Object类

ccb82ee0332d3c6cbdcf181b94007a91.png匿名内部类的缺点

Object类常用方法:

1.equals方法

==equals的对比【面试题】+ jdk查看原码」

==是一个比较运算符

  1. ==:既可以判断基本类型,又可以判断引用类型

  2. ==:如果判断的是「基本类型」「判断的是值是否相等」

//==: 如果判断的是基本类型,判断的是 值 是否相等
int x1 = 10;
int x2 = 10;
double x3 = 10.0;
System.out.println(x1 == x2);//true
System.out.println(x1 == x3);//true
  1. ==:如果判断的是「引用类型」「判断的是地址是否相等,即判断是不是同一个对象」

package Equals;
public class Test01 {public static void main(String[] args) {//==: 如果判断的是引用类型,判断的是地址是否相等,即判断是不是同一个对象A a = new A();A b = a;A c = b;System.out.println(a==c);// ? trueSystem.out.println(b==c);// trueB obj = a;System.out.println(obj==c);// true}
}class B{}
class A extends B{}
bbb0cf3cb485da1a0f1adeeca9272a3b.png
图片
  1. equals方法是Object类中的方法,「只能判断引用类型」

idea查看Jdk原码:鼠标光标放在要查看的方法上,直接输入ctrl + b

查看某个类所有方法:ctrl + F12

  1. 默认判断的是地址是否相等,「子类(Object类是所有类的父类)往往重写该方法,用于判断内容是否相等」

/*
Object类 equals()方法原码//默认判断地址是否一样public boolean equals(Object obj) {return (this == obj);}子类往往重写该方法,用于判断内容是否相等  String类中的equals()方法原码(重写了父类equals()方法)public boolean equals(Object anObject) {if (this == anObject) { // 如果是同一个对象(地址相同)return true; // 返回true}if (anObject instanceof String) { // 判断类型String anotherString = (String)anObject; // 向下转型int n = value.length;if (n == anotherString.value.length) { // 如果长度相同char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) { // 比较每一个字符if (v1[i] != v2[i])return false;i++;}return true; // 如果两个字符串每一个字符都相同,则返回true}}return false;}*/

在看个例子

d7f42a1f515c07c47a937313bf34d561.png
图片

【小练习】

写出输出结果:

package Equals;
public class EqualsTest01 {public static void main(String[] args) {Person p1 = new Person();p1.name = "tom";Person p2 = new Person();p2.name = "tom";System.out.println(p1 == p2);// 引用类型——判断是否为同一个对象(地址)System.out.println(p1.name.equals(p2.name));// p.name是String类型,重写了equals()方法——判断内容是否一样System.out.println(p1.equals(p2));//p1,p2属于Person类,该类并没有重写equals()方法(继承父类equals()方法,即判断地址)String s1 = new String("abc");String s2 = new String("abc");System.out.println(s1.equals(s2));System.out.println(s1 == s2);}
}class Person{public String name;
}

输出结果:

false true false true false

2.hashCode方法

4b49d1677f30c109927951b7790630a6.png
图片

小结:(可以当作地址来看但它本质上不是地址)

  1. 提高具有哈希结构的容器的效率

  2. 两个引用,如果指向的是同一个对象,则哈希值肯定一样

  3. 两个引用,如果指向的是不同对象,则哈希值是不一样的

  4. 哈希值主要根据地址号来!不能将哈希值完全等价于地址

  5. 在后面的集合中hashCode如果需要的话,也会重写

package hashCode;
public class HashCode {public static void main(String[] args) {AA aa = new AA();AA aa2 = new AA();AA aa3 = aa;System.out.println("aa.hashCode()="+ aa.hashCode());System.out.println("aa2.hashCode()="+ aa2.hashCode());System.out.println("aa3.hashCode()="+ aa3.hashCode());}
}class AA{}

输出结果:

aa.hashCode()=460141958 aa2.hashCode()=1163157884 aa3.hashCode()=460141958

3.toString方法

d83b82bbca24992e26c30f67324c6c79.pngtoString方法

基本介绍:

默认返回:全类名 + @ + 哈希值的十六进制

/*Object toString()原码//(1)getClass().getName() 类的全类名(包名+类名)//(2)Integer.toHexString(hashCode()) 将hashCode的值转成16进制字符串public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}*/
9952851c2d759fedaff63d83371889d5.png
图片

「子类往往重写toString方法,用于返回对象的属性信息(快捷键:alt + insert),当然我们也可以自己定制。」

a587c755c4d692aef876227b4eaf2584.png
图片

当我们输出一个对象时,toString()方法会被默认调用

ca3d6149f0cc55025b546205dabe3c5e.png
图片

4.finzlize方法

3ddaad2474e12e356bd03722aa08e007.png
图片

finzlize方法:当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。

  1. 当对象被回收时,系统自动调用该对象的finzlize方法。子类可以重写该方法,做一些释放资源的操作

  2. 什么时候被回收:当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会时候垃圾回收机制来销毁该对象,在销毁该对象前,会先调用finzlize方法。

a699357b6d7e37c7169d3f2fe3d5b539.png
图片
  1. 垃圾回收机制的调用,是由系统来决定(即有自己的GC算法),也可以通过System.gc()主动触发垃圾回收机制。

注:在实际开发中,几乎不会用finzlize方法,更多的是为了应付面试

包装类

「1.基本数据类型以及对应的包装类:」

byte -> Byte
short -> Short
int -> Integer
long -> Long
float -> Float
double -> Double
char -> Character
boolean -> Boolean

这些类都在java.lang包

「2.包装类的意义:」

  1. 让基本数据类型有面向对象的特征

  2. 「封装了字符串转化成基本数据类型的方法(重点)」

3.包装类常用方法:

  1. Integer.parseInt()

  2. Long.paseLong()

  3. Double.parseDouble()

【参考代码】

public class Test {public static void main(String[] args) {//        Integer i = new Integer(10);// 创建包装类对象
//        Integer ii = 10; // 自动打包
//        System.out.println(i+10); // 在使用上,int 和Integer 其实没有区别,可以互相使用
//        System.out.println(ii+10);
//        int j = ii;// 自动解包
//        System.out.println(j+100);String a = "12";String b = "34";System.out.println(a+b); // 1234// 转型:// 字符串转成int的唯一方案int c = Integer.parseInt(a);int d = Integer.parseInt(b);System.out.println(c+d); // 46// 字符串转成double类型String e = "1.25";double f = Double.parseDouble(e);System.out.println(f*6); // 7.5// 转成long类型long l = Long.parseLong("1234567");System.out.println(l);}
}

数学类

数学类的方法都是静态方法,可以直接引用——Math.方法();

「常用数学类方法:」

  1. abs():获取绝对值

  2. max():求最大值

  3. min():求最小值

  4. pow():求次幂

  5. round():四舍五入

  6. sqrt():求平方根

时间类

Java常用时间类:

  1. Date 日期类

  2. Calendar 日历类

  3. SimpleDateFormat 格式化时间类

Date和Calendar类 在java.util包中, SimpleDateFormat类 在java.text包

1.Date 日期

【1】new Date() 可以获取到系统时间

【2】getTime() 能获取到时间的long形式,可以用来计算时间差

getTime()——获取计算机底层存储的数字,返回一个数字用来表示时间,这个数字的类型long,单位为毫秒。

【参考代码】

import java.util.Date;
public class Test {public static void main(String[] args) {Date d = new Date();System.out.println(d); // 系统时间//get...()——获取年月日.....System.out.println(d.getYear()+1900); // 从1900年开始算的System.out.println(d.getMonth()+1); // 月份从0开始计算System.out.println(d.getDate()); // 天数System.out.println(d.getHours());// 小时//getTime()——获取到时间的毫秒形式 返回的是longSystem.out.println(d.getTime());}
}

2.Calendar 日历

【1】get() 获取到时间的某一部分

【2】set() 设置时间 - -> 计算时间:系统已经帮我们设置好了,不用担心二月有多少天等问题,计算时间十分方便

注:Calendar 日历类是抽象类,因此不可以去new对象。虽然抽象类不能创建对象,但是jdk官方提供了一个实例对象的操作:

Calendar rightNow = Calendar.getInstance();

我们通过这条代码就是直接造了一个Calender的对象

【参考代码】:get() 获取到时间的某一部分:

package date;
import java.util.Calendar;
public class TestCalendar {public static void main(String[] args) {Calendar cal = Calendar.getInstance();
//        System.out.println(cal);/*假设当天:2021810*/cal.set(Calendar.DATE,cal.get(Calendar.DATE)+31); // 计算时间(这里用天数计算的) // 获取Calendar创建的对象里的所有内容System.out.println(cal.get(Calendar.YEAR)); // 2021 年System.out.println(cal.get(Calendar.MONTH)+1); // 月份:从0开始的  结果:为10月System.out.println(cal.get(Calendar.DATE)); // 日System.out.println(cal.get(Calendar.HOUR_OF_DAY));// 小时System.out.println(cal.get(Calendar.MINUTE));System.out.println(cal.get(Calendar.SECOND));}
}

【参考代码】:set() 设置时间 - -> 计算时间:

注:cal.setTime(d); 把Date转化成Calendar

package date;
import java.util.Calendar;
import java.util.Date;
public class TestCalendar {public static void main(String[] args) {Date d = new Date();Calendar cal = Calendar.getInstance();cal.setTime(d);// 把Date转化成CalendarSystem.out.println(cal);System.out.println(cal.get(Calendar.YEAR)); //  年System.out.println(cal.get(Calendar.MONTH)+1); // 月份:从0开始的System.out.println(cal.get(Calendar.DATE)); // 日        }
}

3.SimpleDateFormat格式化时间

Date,Calendar通过引用也可以进行时间的格式化,但比较繁琐,而SimpleDateFormat类是专门帮我们格式化时间的工具类,它在java.text包中。

【时间格式】:yyyy-MM-dd HH:mm:ss

SimpleDateFormat类有两大常用方法:

【1】format(Date):

format(Date) 帮我们把时间转成字符串,字符串的格式为SimpleDateFormat类定义对象时设置的时间格式

【参考代码】

package Simple;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;
public class Test {public static void main(String[] args) {Date d = new Date();System.out.println(d); //Thu Aug 12 08:40:08 CST 2021  不美观//                  设置格式化时间的模式,我们常用yyyy-MM-dd HH:mm:ss这个模式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 时间格式String s = sdf.format(d); // 格式化时间System.out.println(s); // 2021-08-12 08:45:09}
}

【2】parse(String):

parse(String) 帮我们把字符串转化成时间

【参考代码】

package Simple;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;public class Test2 {public static void main(String[] args) throws ParseException {Scanner sc = new Scanner(System.in);System.out.println("请输入一个时间(yyyy-MM-dd HH:mm:ss):");String s = sc.nextLine();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d =  sdf.parse(s); // 把字符串转成时间System.out.println(d);        /*请输入一个时间(yyyy-MM-dd HH:mm:ss):2021-08-12 12:25:21Thu Aug 12 12:25:21 CST 2021*/}
}

注:由于用户输入的字符串不一定是我们要求的格式,可能是任何东西,想把它们转成时间是不可能的,你不可能把一个人转成时间 对吧,因此存在着很大的风险未处理(异常: java.text.ParseException),为此我们需要处理异常。

4.计算时间差

计算思路:

  1. 格式化时间

  2. 先将字符串转化成long类型时间

  3. 计算毫秒级别时间差,取绝对值

  4. 毫秒级别时间差转成秒级别

  5. 秒级别时间差转成分钟级别

  6. 分钟级别时间差转化显示成xx小时xx分钟

【参考代码】

package Simple;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDiff {public static void main(String[] args) throws ParseException {String s1 = "2021-08-12 12:00:00"; // 开始时间String s2 = "2021-08-12 14:35:00"; // 结束时间//格式化时间SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");//将字符串转成时间形式Date d1 = sdf.parse(s1);Date d2 = sdf.parse(s2);//计算时间差:先要获取时间毫秒形式(long类型) 再做差long long1 = d1.getTime();long long2 = d2.getTime();long diffTime = Math.abs(long1 - long2);// 秒级别时间差long diffSec = diffTime / 1000;// 分级别时间差long diffMin = diffSec / 60;//显示 xx小时xx分钟long displayHours = diffMin / 60; // 小时long displayMin = diffMin % 60; //分钟System.out.println("您学习的时长为:"+displayHours+"小时"+displayMin+"分钟");}
}

String类

字符串类常用方法

「方法汇总:」

b097aeee0c32278949e19c06a602abe5.png

「注:字符串是一个不可变的类型(final类),几乎所有的字符串操作都会返回一个新字符串而不是在原有基础上进行修改。」

【示例代码】

public class Test {public static void main(String[] args) {String s = "我的名字叫李华";        s.concat("hhh"); // 在字符串s上拼接,拼接hhhSystem.out.println(s);// 我的名字叫李华//字符串是不可变的数据类型//几乎所有的字符串操作都会返回一个新字符串String s1 = s.concat("hhh"); // 在字符串s上拼接,拼接hhhSystem.out.println(s1);//我的名字叫李华hhh        String str1 = "李华喜欢看罗老师的视频";str1.replace("李华","张三");System.out.println(str3); //李华喜欢看罗老师的视频  并没有替换 字符串是不变的str1还是str1String str2 = str1.replace("李华","张三");//几乎所有的字符串操作都会返回一个新字符串 新串要用新变量接System.out.println(str2);//张三喜欢看罗老师的视频         }
}
package String;
import java.util.Scanner;
public class Test {public static void main(String[] args) {String s = "我的名字叫李华";System.out.println(s.charAt(0)); // 获取第0个位置的字符s.concat("hhh");System.out.println(s);// 我的名字叫李华//字符串是不可变的数据类型//几乎所有的字符串操作都会返回一个新字符串String s1 = s.concat("hhh"); // 在字符串s上拼接,拼接hhhSystem.out.println(s1);//我的名字叫李华hhhSystem.out.println(s.contains("李华")); //trueSystem.out.println(s.contains("牛津")); //falseSystem.out.println("邀请李华来参加英语沙龙活动".endsWith("活动"));//true 判断是否以xxx为结尾System.out.println("邀请李华来参加英语沙龙活动".startsWith("李华"));//false 判断是否以xxx开头// equals字符串内容是否相同// 接受邀请参加活动的李华到现场后要输入验证码
//        String yanZhengMa = "AAkm";
//
//        Scanner sc = new Scanner(System.in);
//
//        System.out.println("请输入验证码("+yanZhengMa+")");
//
//        String userInput = sc.nextLine();
//
//        if(yanZhengMa.equalsIgnoreCase("aakm")){  // 忽略大小写判断两边的内容是否一样
//            System.out.println("欢迎参加英语沙龙活动!");
//        }else{
//            System.out.println("您未受到邀请,请现场报名!");
//        }//        String str = "李华玩得很开心!";
//        System.out.println(str.indexOf("开心"));// 5 计算给出字符串第一个出现的位置String str2 = "李华成绩很好";System.out.println(str2.length()); // 6 计算字符串的长度String str3 = "李华喜欢看罗老师的视频";str3.replace("李华","张三");System.out.println(str3); //李华喜欢看罗老师的视频  并没有替换 字符串是不变的str3还是str3String str4 = str3.replace("李华","张三");//几乎所有的字符串操作都会返回一个新字符串 新串要用新变量接System.out.println(str4);//张三喜欢看罗老师的视频String str5 = "哈哈_呵呵_嘻嘻_噢no";String[] ss = str5.split("_");//切割System.out.println(ss[0]);//哈哈System.out.println(ss[1]);//哈哈System.out.println(ss[2]);//嘻嘻System.out.println(ss[3]);//噢noString str6 = "今天天气不错";System.out.println(str6.substring(2,4));//天气 字符串截取 [ ) 左闭右开,右边取不到String str7 ="     哈    哈      ";System.out.println(str7.trim());// 去掉左右两边的空格int i = 10;System.out.println(String.valueOf(i)); // 基本数据类型转为字符串System.out.println(i+""); // 野路子}
}

String Builder和StringBuffer

「String类的缺点:」

String 是一个不可变的数据类型,每每拼接都会产生一个新的字符串,那么内存迟早会被这些拼接的字符串塞满。

「String类和StringBuilder和StringBuffer类的区别:」

StringBuilder和StringBuffer:「可变的字符串,不产生新对象,比较省内存」 ,当进行大量的字符串拼接时建议使用StringBuffer和StringBuilder,但它们两个一些方法的实现几乎跟String一样。

「StringBuffer和StringBuilder类:」

【相似点】

两者用法一模一样,可以认为是一个类

【区别】

  1. StringBuffer线程安全,StringBuilder非线程安全。

  2. StringBuilder相比于StringBuffer有速度优势,「多数情况下建议使用StringBuilder类,但当被要求线程安全时必须使用StringBuilder类」

字符串拼接方法:append()方法

StringBuffer和StringBuilder 转成String类 :

StringBuilder sb = new StringBuilder("猫喜欢吃鱼"); String s = sb.toString();

【参考代码】

package String;
public class TestStringBuilder {public static void main(String[] args) {StringBuilder sb = new StringBuilder();// 一个空的字符串""StringBuilder sb2 = new StringBuilder("猫喜欢吃鱼");System.out.println(sb2);// 猫喜欢吃鱼sb2.append(",狗也喜欢吃鱼");System.out.println(sb2);// 追加  猫喜欢吃鱼,狗也喜欢吃鱼sb2.insert(1,"哈哈哈");System.out.println(sb2); //猫哈哈哈喜欢吃鱼,狗也喜欢吃鱼// 上述的操作huan'c// 把StringBuilder转化成StringString s = sb2.toString();System.out.println(s); //猫哈哈哈喜欢吃鱼,狗也喜欢吃鱼// 上述操作都可以将StringBuilder换成StringBuffer,结果一样}
}

DecimalFormat

DecimalFormat:对小数进行格式化,保留几位小数。与格式化时间联想记。

. 表示小数点

0和# 表示数位,保留几位就几个0或者#

【参考代码】

import java.text.DecimalFormat;
import java.util.Scanner;
public class Test {public static void main(String[] args) {double d= 10/3.0;System.out.println(d);//3.3333333333333335// . 表示小数点// 0和#表示数字// 保留两位小数                        格式DecimalFormat df = new DecimalFormat(".00"); // 或者.##String s = df.format(d); // 把 d 转成上面设置的格式System.out.println(s);//3.33}
}

总结

万变不离其宗,Java 的其他类和功能,都离不开这些基础。牢记基础,成长的更稳!

bad408e1b0e6d346015748153b9e1eb3.gif

往期推荐

98445ce1a0c890470dc8bd097b5392aa.png

最简单的6种防止数据重复提交的方法!(干货)


e1975120c6a5cb3099053703f782a5b1.png

Spring Cloud OpenFeign 的 5 个优化小技巧!


dcd06fae15b091279e2a0c28b258e824.png

下个十年高性能 JSON 库来了:fastjson2!


dda33aff748230bfe6cc0e771e79e1f2.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS6.4系统启动失败故障排查

转:http://www.centoscn.com/CentosBug/osbug/2014/1028/4011.html 操作系统启动失败如下图报错: 故障现象: 从图中可以看到,操作系统启动的过程中,fsck在执行文件系统检测时出现了错误,并且是在检查/dev/m…

Linux内存管理--物理内存分配【转】

转自:http://blog.csdn.net/myarrow/article/details/8682819 1. First Fit分配器 First Fit分配器是最基本的内存分配器,它使用bitmap而不是空闲块列表来表示内存。在bitmap中,如果page对应位为1,则表示此page已经被分配&#xf…

JDK的一个Bug,监听文件变更要小心了

背景 在某些业务场景下,我们需要自己实现文件内容变更监听的功能,比如:监听某个文件是否发生变更,当变更时重新加载文件的内容。看似比较简单的一个功能,但如果在某些JDK版本下,可能会出现意想不到的Bug。本…

推荐 17 个压箱底的常用类库

前言在java的庞大体系中,其实有很多不错的小工具,也就是我们平常说的:轮子。如果在我们的日常工作当中,能够将这些轮子用户,再配合一下idea的快捷键,可以极大得提升我们的开发效率。今天我决定把一些压箱底…

02、django中的上下文

2019独角兽企业重金招聘Python工程师标准>>> 1、譬如设置网站的名称,setting中设置变量: # setting.py SITE_NAME "我的小站"2、在view中写函数将该变量转换成字典,做返回值 from django.conf import settings def site_key(request):# 这里使…

实战:10 种实现延迟任务的方法,附代码!

作者 | 磊哥来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)这篇文章的诞生要感谢一位读者,是他让这篇优秀的文章有了和大家见面的机会,重点是优秀文章&#xff…

面渣逆袭:Redis连环五十二问!三万字+八十图详解!

基础1.说说什么是Redis?Redis图标Redis是一种基于键值对(key-value)的NoSQL数据库。比一般键值对数据库强大的地方,Redis中的value支持string(字符串)、hash(哈希)、 list(列表&…

EasyExcel太方便易用了,强烈推荐!

背景 系统中经常要导出大量的数据,格式基本上都是Excel,然而每次导表都是对系统内存的一次挑战。在Java领域,生成或解析Excel的框架比较有名的当属Apache的poi和jxl了。但使用它们,会面临着严重的内存损耗问题。如果系统的并发量还…

【端午】送3本书!

白天在公司搬砖,晚上到家赶紧给小伙伴们安排一波福利,这次送的书是 H 大新出的《深入理解Java核心技术:写给Java工程师的干货笔记(基础篇)》。书中介绍了普通Java工程师必须要学习的相关知识点,包括面向对象…

面试突击51:为什么单例一定要加 volatile?

.作者 | 磊哥来源 | Java面试真题解析(ID:aimianshi666)转载请联系授权(微信ID:GG_Stone)单例模式的实现方法有很多种,如饿汉模式、懒汉模式、静态内部类和枚举等,当面试官问到“为什…

聊聊保证线程安全的10个小技巧

前言对于从事后端开发的同学来说,线程安全问题是我们每天都需要考虑的问题。线程安全问题通俗的讲:主要是在多线程的环境下,不同线程同时读和写公共资源(临界资源),导致的数据异常问题。比如:变…

Raid控制器

转载于:https://blog.51cto.com/xuepengdou/1699799

并行计算机架构_计算机科学组织| 并行处理

并行计算机架构并行处理 (Parallel Processing) Parallel processing is processing of the data concurrently. We process the data concurrently to fulfill the demands of the increasingly high performance so that to achieve better throughput instead of processing…

15个必知的Mysql索引失效场景,别再踩坑了!

背景 无论你是技术大佬,还是刚入行的小白,时不时都会踩到Mysql数据库不走索引的坑。常见的现象就是:明明在字段上添加了索引,但却并未生效。前些天就遇到一个稍微特殊的场景,同一条SQL语句,在某些参数下生效…

干掉 Swagger UI,这款神器更好用、更高效!

事情是这样的:今天我们公司的后端说他接口写完了,并分享了一个接口文档给我。用的就是 Swagger UI 自动生成的那种接口文档,就像这种:这种 Swagger UI文档我每次看着就头大,毛病多多查看多级模型时要一级级点开在接口数…

Android UI ActionBar功能-ActionBarProvider的使用

分享功能是很多App都有一个功能,ActionBarProvider可以实现分享功能: 3.0以前的版 本和3.0以后的版 本的区别: public class MainActivity extends Activity {private ShareActionProvider provider;Overrideprotected void onCreate(Bundle …

面渣逆袭:MyBatis连环20问,这谁顶得住?

大家好,今天我们的主角是MyBatis,作为当前国内最流行的ORM框架,是我们这些crud选手最趁手的工具,赶紧来看看面试都会问哪些问题吧。基础1.说说什么是MyBatis?MyBatis logo先吹一下:Mybatis 是一个半 ORM(对…

高并发下如何防重?

前言最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。追查原因之后发现,这个事情没想象中简单,可以说一波多折。1. 需求产品有个需求:用户选择一些品牌,点击确定按钮…

面试突击55:delete、drop、truncate有什么区别?

作者 | 磊哥来源 | Java面试真题解析(ID:aimianshi666)转载请联系授权(微信ID:GG_Stone)在 MySQL 中,删除的方法总共有 3 种:delete、truncate、drop,而三者的用法和使用…

大厂也在用的 6种 数据脱敏方案,别做泄密内鬼

最近连着几天晚上在家总是接到一些奇奇怪怪的电话,“哥,你是 xxx 吧,我们这里是 xxx 高端男士私人会所...”,握草,我先是一愣,然后狠狠的骂了回去。一脸傲娇的转过头,面带微笑稍显谄媚&#xff…