吊打面试官(三)--9000字讲透Java基础类型知识
yund56 2025-07-28 23:30 4 浏览
问:Java中基本数据类型的默认值是什么?
以下是Java中基本数据类型的默认值:byte:0short:0int:0long:0Lfloat:0.0fdouble:0.0dchar: \u0000 (空字符)boolean:false
问:说说对Java中原码、补码、反码的了解
在 Java 中,原码、反码和补码主要用于表示有符号整数(byte,short,int,long)。
1. 原码:原码就是符号位加上真值的二进制表示。例如,对于一个 8 位的有符号整数,+5 的原码是 0000 0101,-5 的原码是 1000 0101。
2. 反码:正数的反码与其原码相同,负数的反码是将其原码除符号位外的所有位取反(0 变 1,1 变 0)。例如,+5 的反码是 0000 0101,-5 的反码是 1111 1010。
3. 补码:正数的补码与其原码相同,负数的补码是其反码加 1。例如,+5 的补码是 0000 0101,-5 的补码是 1111 1011。
在 Java 中,有符号整数(如 byte、short、int 和 long 类型)使用补码表示。当使用 Java 进行算术运算时,它会自动考虑溢出和借位等问题,并确保结果正确。
然而,在某些情况下,你可能需要处理二进制数据或进行位操作。在这种情况下,可以使用 Java 的位操作符(如按位与 &、按位或 |、按位异或 ^、按位非 ~、左移 <<、右移 >> 和无符号右移 >>>)来操作整数的二进制表示。这些操作符允许在底层处理整数的二进制形式,包括原码、反码和补码。
问:说说Java为何要使用补码?
简化了加减运算:
在补码系统中,加法和减法可以使用相同的硬件电路,因为减去一个数等同于加上它的补码。
没有+0和-0的问题:
在补码中,+0和-0有唯一的表示,分别是00000000和11111111(对于8位系统)。
溢出检测:
补码表示允许检测溢出,当一个运算的结果超出了该数据类型能表示的范围时,可以通过检查符号位是否变化来判断是否发生了溢出。
问:Java中float和double如何表示浮点数?
Java中使用 IEEE 754 浮点数标准来表示浮点数:
1. 符号位(S):1 位,0 表示正数,1 表示负数。
2. 指数位(E):8 位(对于单精度浮点数float)或 11 位(对于双精度浮点数double),表示 2 的指数。
3. 尾数位(M):23 位(对于单精度浮点数float)或 52 位(对于双精度浮点数double),表示小数部分。
浮点数可以表示为:
(-1)^S * (1 + M) * 2^(E-127)(对于单精度浮点数float)
或
(-1)^S * (1 + M) * 2^(E-1023)(对于双精度浮点数double)。
注意:
由于计算机使用二进制表示浮点数,某些十进制小数无法用有限位数的二进制小数精确表示。
例如,0.1 在二进制中是一个无限循环小数。因此,在将 0.1 存储为浮点数时,计算机需要对其进行截断和舍入,这会导致精度损失。
问:浮点数类型中有哪些特殊值,如何处理这些特殊值?
正负无穷大
当指数位全为1,尾数位全为0时,根据符号位的不同,表示正无穷大或负无穷大。具体来说,符号位为0表示正无穷大( Infinity ),符号位为1表示负无穷大( -Infinity )。
NaN(Not a Number)
当指数位全为1,尾数位不全为0时,表示非数值。NaN通常用于表示无效或未定义的运算结果,例如0除以0或负数的平方根。
判断一个浮点数是否为NaN
在Java中,判断一个浮点数是否为NaN(Not a Number)是一个常见的需求,尤其是在进行数学运算时。由于NaN的特殊性质,即它不等于任何值,包括它自己,因此不能使用普通的比较运算符(如 == )来检测NaN。
相反,应该使用
Double.isNaN() 或 Float.isNaN() 方法。以下是具体的方法介绍:
使用 Double.isNaN() 或 Float.isNaN() 方法
Double.isNaN(value) :如果参数是NaN,则返回 true ,否则返回 false 。
Float.isNaN(value) :如果参数是NaN,则返回 true ,否则返回 false 。
NaN的特殊性质
示例代码:
public class NaNExample {
public static void main(String[] args) {
// 创建一个NaN值
double NaN = Double.NaN;
// NaN与任何数相加都等于NaN
double result1 = 10 + NaN;
System.out.println("10 + NaN = " + result1); // 输出:10.0 + NaN = NaN
// NaN与自身相等比较永远返回false
boolean isEqual = NaN == NaN;
System.out.println("NaN == NaN = " + isEqual); // 输出:NaN == NaN = false
// 使用Double.isNaN()方法检查一个值是否为NaN
boolean isNotANan = Double.isNaN(NaN);
System.out.println("Double.isNaN(NaN) = " + isNotANan); // 输出:Double.isNaN(NaN) = true
// NaN与任何数相乘都等于NaN
double result2 = 5 * NaN;
System.out.println("5 * NaN = " + result2); // 输出:5 * NaN = NaN
// NaN与任何数相除都等于NaN
double result3 = 2 / NaN;
System.out.println("2 / NaN = " + result3); // 输出:2 / NaN = NaN
}
}
注意:
NaN与任何数的比较结果都是 false :包括它自己。
因此,不能使用 == 或 != 来检测NaN。
数学运算中的传播:
任何涉及NaN的数学运算结果也是NaN。
NaN处理注意事项
避免使用 == 比较NaN:因为NaN与任何值(包括它自己)的比较结果都是 false 。
使用 Double.isNaN() 或 Float.isNaN() 进行检测:这是判断浮点数是否为NaN的正确方法。
通过上述方法,可以有效地判断一个浮点数是否为NaN,并避免在编程中遇到与NaN相关的错误。
零
IEEE 754标准允许表示正零(所有位都为0,符号位为1)和负零(所有位都为0,符号位为0)。在比较时,负零和正零被视为相等。
问:说一下浮点数的舍入规则和精度问题
舍入规则
舍入到最接近:IEEE 754标准定义了四种舍入规则,默认采用舍入到最接近的方式,且在一样接近的情况下偶数优先(Ties To Even)。
其他舍入方式:还包括朝+∞方向舍入、朝-∞方向舍入和朝0方向舍入,但这些方式在实际应用中较少使用。
精度问题
由于浮点数的二进制表示有限,某些十进制小数无法精确表示为二进制浮点数。这导致在进行浮点数运算时可能出现舍入误差,进而导致预期的结果和实际的二进制浮点数表示的结果不完全相等。
IEEE 754标准定义了四种舍入规则,默认采用舍入到最接近的方式。
这些问题可能导致精度损失、累积误差甚至运算结果异常:
精度丢失:
例如, 0.1 + 0.2 的结果可能不等于 0.3 ,而是 0.30000000000000004 。
累积误差:
在循环计算中,每次运算的微小误差会累积,导致最终结果与预期值有较大偏差。
比较问题:
直接使用 == 比较两个浮点数可能不可靠,因为它们可能包含微小的误差。
精度问题解决方法
使用BigDecimal:对于需要高精度的场景,可以使用 BigDecimal 类,它能以任意精度表示和运算十进制数。
例如:避免直接比较浮点数:由于浮点数可能包含微小误差,直接使用 == 比较两个浮点数是不可靠的。应采用“误差容忍”的方式比较,
例如:优化算法,减少误差累积:在涉及大量计算的场景中,选择合适的算法能显著降低误差累积。
例如,避免将多个小值直接相加,而是采用分治法累加。
问:Java中如何设置浮点数的舍入模式
在Java中,设置浮点数的舍入模式通常涉及到使用 BigDecimal 类,因为它提供了精确的数值计算和灵活的舍入模式设置。
使用BigDecimal设置舍入模式
创建BigDecimal对象:使用字符串构造函数创建 BigDecimal 对象,以避免精度损失。
设置舍入模式:使用 setScale 方法设置小数位数和舍入模式。
执行运算:使用 BigDecimal 提供的方法进行数学运算。
舍入模式
ROUND_UP:远离零方向舍入。
ROUND_DOWN:趋向零方向舍入。
ROUND_CEILING:向正无穷方向舍入。
ROUND_FLOOR:向负无穷方向舍入。
ROUND_HALF_UP:向最近的数值舍入,如果两个数值距离相等,则向上舍入。
ROUND_HALF_DOWN:向最近的数值舍入,如果两个数值距离相等,则向下舍入。
ROUND_HALF_EVEN:向最近的偶数舍入,也称为银行家舍入法。
ROUND_UNNECESSARY:断言请求的操作具有精确的结果,因此不需要舍入。
通过使用 BigDecimal 类和适当的舍入模式,可以确保浮点数运算的精确性和可靠性。
问:byte类型使用有哪些经验和注意点
在Java中, byte 是一种基本数据类型,用于存储8位有符号整数,其取值范围为-128到127。在使用 byte 类型时,一些特殊问题和需要注意的地方如下:
类型提升问题
在Java中,当 byte 类型参与运算时,会自动提升为 int 类型,这可能导致结果无法直接赋值给 byte 变量,需要使用强制类型转换。
类型提升是Java语言的一个特性,虽然这可以避免数据丢失,但在处理大量数据时可能会增加计算复杂度和内存使用。因此,在进行运算时,应尽量避免使用 byte 类型,或者在使用后及时进行类型转换。
无符号字节处理
Java中的 byte 类型是有符号的,但在某些场景下(如网络通信、文件读写)可能需要处理无符号字节。这可能导致数据解析错误,需要通过类型转换或使用 ByteBuffer 类来处理。
无符号字节的处理在嵌入式系统和高精度计算中尤为重要。通过使用 ByteBuffer 类或进行位运算,可以有效地处理无符号字节,避免数据解析错误。
字节溢出问题
当处理十六进制数值或进行类型转换时,如果数值超出 byte 的取值范围,会发生字节溢出,导致结果以负数形式呈现。
字节溢出是编程中常见的问题,特别是在处理二进制数据和进行数值计算时。了解补码的概念和如何进行类型转换可以有效避免字节溢出问题。
比较好的使用经验
节省内存空间
在处理大量数据时,使用 byte 数组可以显著减少内存的使用,特别是在存储图像、音频等二进制数据时。 byte 类型占用的内存空间小,适合存储小范围的整数。在处理大量数据时,使用 byte 数组可以有效地节省内存空间,提高程序的性能。
位操作
byte 类型适用于进行位操作,如设置或清除特定位,这在处理网络协议或硬件接口时非常有用。位操作在底层编程中非常重要,特别是在处理硬件接口和网络协议时。使用 byte 类型进行位操作可以提高程序的效率和性能。
自动装箱与缓存
在需要将 byte 类型转换为 Byte 对象时,推荐使用 Byte.valueOf() 方法,因为它可以利用缓存机制提高性能。
Byte.valueOf() 方法可以缓存 byte 到 Byte 的转换结果,避免重复创建对象,从而提高程序的性能。
问:short类型使用有哪些经验和注意点
在Java中, short 是一种基本数据类型,用于表示16位有符号整数。 short 类型使用中的特殊问题和一些比较好的使用经验如下:
自动类型提升
在进行算术运算时, short 类型会被自动提升为 int 类型。
例如, short a = 10; short b = 20; short c = a + b;
实际上会被提升为 int 类型,结果存储在 c 中。
这种自动类型提升虽然简化了代码,但也可能导致意外的结果,特别是当结果需要赋值回 short 类型时,需要进行显式类型转换。
溢出问题
由于 short 的取值范围是-32,768到32,767,超出这个范围的运算会导致溢出。例如, short a = 32767; short b = 1; a + b; 结果会是0,而不是32,768。
溢出问题在处理大量数据时尤为明显,开发者应确保运算结果在 short 的取值范围内,或者在运算前进行范围检查。使用无符号右移操作符( >>> )或将结果显式转换回 short 类型可以避免溢出问题。
包装类与自动装箱/拆箱
使用 Short 包装类时,自动装箱和拆箱会带来性能开销。例如, List<Short> list = new ArrayList<>(); list.add(10); 会自动将 int 类型的10装箱为 Short 对象。
在循环或频繁操作的场景中,频繁的自动装箱和拆箱会导致性能下降。开发中尽量避免在循环中频繁使用包装类,或者使用基本数据类型数组来替代。
比较好的使用经验
节省内存
short 类型占用的内存空间较小,通常为2个字节,相比 int 类型(4个字节)可以显著减少内存占用。在处理大量数据时,使用 short 可以有效地节省内存空间,特别是在嵌入式系统或移动设备等资源有限的平台上。
位操作
short 适用于需要进行位操作的场景,如设置或清除特定位。Java提供了丰富的位操作支持,如按位与( & )、按位或( | )、按位异或( ^ )等。位操作在处理大量布尔值或需要高效数据存储的场景中非常有用。使用 short 进行位操作可以提高程序的性能和灵活性。
避免不必要的类型转换
在进行数学运算时,尽量减少自动类型提升带来的性能影响,必要时使用强制类型转换。
例如, short a = 10; short b = 20; short c = (short) (a + b); 。频繁的类型转换会增加额外的开销,特别是在循环或性能敏感的应用程序中。开发者应尽量减少不必要的类型转换,以提高程序的性能。short 类型在节省内存、位操作和高效数据处理方面具有显著优势,但在使用时需注意自动类型提升、溢出问题以及包装类带来的性能开销。
short类型在处理网络数据包时常见的使用场景在处理网络数据包时, short 类型因其较小的内存占用和高效的处理能力,常被用于特定的场景:端口号表示:
在网络编程中,端口号通常使用 short 类型表示,因为端口号的范围是0到65535,正好适合 short 类型的取值范围。数据包头部字段:
网络数据包的头部包含多个字段,如协议类型、长度等,这些字段的值通常较小,适合使用 short 类型表示,以节省内存空间。性能计数器和统计信息:
在性能测试、计数器或统计信息的收集中, short 类型可以用来存储较小范围内的计数值,如统计页面访问次数、用户点击次数等。图像处理:
在图像处理领域, unsigned short 类型可以表示16位灰度图像,每个像素值的范围从0到65535,足以表示从完全黑色到完全白色的各种灰度级别。其他如int,long,比较类似,不再赘述。
浮点型使用前文已包含详细描述,不再赘述。
问:char类型使用有哪些经验和注意点
在Java中,`char`类型用于表示单个16位的Unicode字符,范围从`\u0000`(即0)到`\uffff`(即65535)。
`char`类型使用中的特殊问题和一些比较好的使用经验如下:
字符编码问题: Java中的`char`类型使用UTF-16编码,但UTF-16并不能表示所有的Unicode字符(特别是那些超出基本多文种平面的字符)。这可能导致在处理某些特殊字符时出现问题。
比较好的使用经验
1. 处理Unicode字符: 如果需要处理超出基本多文种平面的Unicode字符,可以使用`String`类或`Character`类的相关方法,而不是直接使用`char`类型。
2. 字符比较: 在比较字符时,应使用`==`运算符(对于单个`char`字符),而不是使用`equals()`方法(`equals()`方法用于`String`对象)。对于字符串比较,应使用`String`类的`equals()`方法。
3. 避免字符溢出: 在进行字符加减运算时,应注意结果可能超出`char`类型的取值范围,导致溢出。如果需要进行此类运算,可以考虑使用`int`类型来存储中间结果。
4. 使用字符常量池: 对于常用的字符,可以使用字符常量池来提高性能和减少内存占用。例如,使用`'A'`而不是`new Character('A')`。
5. 使用`Character`类: Java提供了`Character`类来处理`char`类型的相关操作,如判断字符是否为字母、数字等。使用`Character`类的方法可以使代码更加清晰和易于维护。
6. 字符转义序列: 在Java字符串中,有些字符需要使用转义序列来表示,如换行符`\n`、制表符`\t`等。在使用`char`类型时,也需要注意这些转义序列的正确使用。
7. 字符与整数的转换: 由于`char`类型实际上是一个16位的无符号整数,因此可以将其与整数进行转换。但在进行这种转换时,需要注意可能的溢出和数据丢失问题。
示例代码:
public class CharExample {
public static void main(String[] args) {
// 字符常量
char a = 'A';
char b = 65; // ASCII码
// 字符比较
if (a == b) {
System.out.println("字符相等");
}
// 字符运算
char c = (char) (a + 1); // 结果为'B'
System.out.println("字符运算结果: " + c);
// 使用Character类
if (Character.isLetter(a)) {
System.out.println("字符是字母");
}
// 处理Unicode字符
String unicodeChar = "\uD83D\uDE00"; // 笑脸表情
System.out.println("Unicode字符: " + unicodeChar);
}
}
通过了解并遵循这些最佳实践,开发者可以更有效地使用`char`类型,并避免潜在的问题和陷阱。
问:boolean类型使用有哪些经验和注意点
在Java中,`boolean`是一种基本数据类型,用于表示逻辑值,只有两个可能的值:`true`和`false`。
`boolean`类型相对简单,但在使用过程中也有一些特殊问题和最佳实践需要注意。
可能的问题
1. 默认值: 在Java中,`boolean`类型的默认值是`false`。如果在声明变量时没有显式初始化,变量将被赋予默认值`false`。
2. 布尔表达式: 布尔表达式的结果必须是`true`或`false`。在复杂的逻辑判断中,确保所有分支都返回布尔值,以避免编译错误。
3. 布尔运算符短路特性: 使用布尔运算符(`&&`和`||`)时,注意短路特性。`&&`在左侧为`false`时不会计算右侧,`||`在左侧为`true`时不会计算右侧。
比较好的使用经验
1. 明确意图: 使用布尔变量时,确保变量名清晰地表达其意图。例如,使用`isValid`而不是`flag`,以提高代码的可读性。
2. 避免不必要的布尔包装: 在不需要对象的情况下,尽量使用基本类型`boolean`而不是`Boolean`对象,以减少内存占用和提高性能。
3. 使用三元运算符: - 在需要进行简单条件赋值时,可以使用三元运算符(`?:`)来简化代码。例如: ```java boolean isActive = (user != null) ? user.isActive() : false; ```
4. 避免在循环中使用布尔变量: 在循环条件中使用布尔变量时,确保变量的状态在每次迭代中都能正确更新,以避免无限循环。
5. 使用布尔方法: - 将复杂的逻辑判断封装在布尔方法中,可以提高代码的可读性和可维护性。例如: ```java public boolean isEligible(User user) { return user != null && user.isActive() && user.getAge() >= 18; } ```
6. 注意布尔表达式的复杂性: - 避免在布尔表达式中嵌套过多的逻辑运算符,以提高代码的可读性。可以将复杂的条件分解为多个简单的布尔表达式。
同学们,以上是Java基础类型中较为困难的知识点,掌握了这些,可以在面试官问问题给他一顿鞭挞了。
(^O^)
相关推荐
- 在这款15年老端游的手机版中,正在上演着“萌新拯救计划”
-
以往我们判断一款刚公测的新手游到底火不火,不是瞅苹果的免费榜畅销榜,就是看各家数据网站的预估流水。不过如今这个法子放在《剑网3无界》身上似乎就不那么适用了。作为一款与原端游完全数据互通的手游,点卡制收...
- 708090后集体回忆!88款经典街机游戏,你通关过几部?
-
街机厅的霓虹灯在夜色中闪烁,投币口“叮当”的声响此起彼伏,摇杆与按键的碰撞声混合着玩家的欢呼与叹息,构成了那个年代独有的电子交响乐。对于70后、80后、90后来说,街机不仅是游戏,更是一段无法复制的...
- 爷青回!这10款童年小游戏,玩过5个以上的都当爸妈了吧?
-
当手机游戏被3A画质与开放世界统治的今天,那些藏在像素点阵里的童年记忆,才是真正刻进DNA的快乐密码!我们翻遍全网玩家回忆录,结合抖音、Steam等平台数据,为你揭开这代人的集体记忆封印一、经典益智三...
- 怀旧时刻:PS2十大经典动作游戏盘点,老玩家不可错过的青春回忆
-
说起PS2,那可是游戏史上最火的主机之一,上面好游戏多得数不清,给咱们带来过不少欢乐时光。今天,小核桃就带大家回忆一下PS2上那些超经典的动作游戏,一起重温那些热血沸腾的日子吧!当年在电玩店看到《战神...
- 又是一年仲夏,三十年前的暑假,你还记得在玩什么游戏吗?
-
今年山东的夏天似乎比往年都热,夜晚繁星点点,本该轻柔的晚风却没有丝毫凉意,伴随着远处草丛里此起彼伏的虫鸣声,听的让人心里愈加烦躁,翻来覆去睡不着的笔者,无聊且乏困地坐在院子里的老槐树下,思绪却不由自主...
- 十六年前的首款安卓1.0手机,内置物理全键盘,如今二手45元
-
周末聊点轻松的话题,说起智能手机系统之争,安卓和iOS绝对是两大“宿敌”。2007年苹果在乔布斯带领下发布了初代iPhone,也凭借iOS系统掀起了智能手机的新时代。短短一年后,谷歌联合HTC推出了...
- HTC巅峰时期的安卓手机,自带全键盘,居然很多人用过
-
上次写三部最经典的侧滑盖全键盘手机,居然很多人报出了DesireZ的大名,这让我很吃惊。因为这部手机没有行货只有水货,你们咋都用过?那今天好好聊聊它。十多年前,HTC是安卓手机领域绝对的霸主,当年只...
- 十年前的 iPhone 6s 还在 “服役”:一部手机的 “超长待机” 启示录
-
当iPhone16系列已经开始预热,有人却还握着2015年发布的iPhone6s刷着微信、看视频——这部诞生已近十年的手机,至今仍在不少人的生活里扮演着重要角色。它的“超长寿命”...
- SFC黄金时代10款动作RPG神作,每一款都是回忆满满的经典游戏!
-
任天堂的16位主机SFC可是游戏史上的一个高峰,它用像素画面打造出无数经典作品,其中结合动作和冒险的ARPG特别受欢迎。最近几年复古风又火起来,大厂们忙着移植或重制老游戏,模拟器也让玩家轻松重温旧梦。...
- 揭秘十年前真正的游戏手机:索尼爱立信R800魔改系统超乎想象!
-
对于游戏手机的起源,众说纷纭,有人认为是黑鲨问世,有人说是红魔领路,还有人坚称自从iPhone问世起,游戏手机就已然存在。然而,如果从更宏观的角度审视,这些所谓的游戏手机,其本质上仍旧是多功能的智能手...
- 专属于八零,九零后的插卡游戏,你还记得吗
-
1.魂斗罗这是我玩过的第一款插卡游戏,永远记得上上下下左左右右,BABA开始,这个可以有三十条命的“魔法。”也是第一次体验双打游戏的那行配合的责任感使命感。2.忍者神龟四只神龟的名字都是意大利著名的画...
- Java编程的那些屎山代码分析之二(java编程神器)
-
以下是个人总结的一些代码习惯问题和优化,单独一个也许不起眼,但堆积起来,就让一个项目代码变成一座屎山。1.滥用`public`修饰符o重要性:滥用`public`修饰符可能导致类的成员变量或方法被不...
- 六种java的多线程设计模式详解和代码举例
-
java的多线程处理,有哪些模式可以使用呢,如何使用呢。本文列举了六种多线程设计模式供大家参考。1.生产者-消费者模式设计理念:生产者-消费者模式通过协调两个线程(生产者和消费者)来处理数据,生产者生...
- java的四种引用(java 中都有哪些引用类型)
-
java中的引用分为4种1.强引用引用存在就不会被GC*2.软引用heapmemory(堆内存)满了就会被GC掉*3.弱引用每次GC就会回收掉(应用有:ThreadLocal)*4....
- @程序员 2020了看不懂这些动图,你可能是个假的程序员
-
点击上方Java编程技术乐园,轻松关注!及时获取有趣有料的技术文章文章很有趣,开心一下,如果有收获,记得点赞和关注哦~「1」外包产品交付,给客户演示时「2」与领导斗智斗勇,躲猫猫「3」领导总是能识破程...
- 一周热门
- 最近发表
-
- 在这款15年老端游的手机版中,正在上演着“萌新拯救计划”
- 708090后集体回忆!88款经典街机游戏,你通关过几部?
- 爷青回!这10款童年小游戏,玩过5个以上的都当爸妈了吧?
- 怀旧时刻:PS2十大经典动作游戏盘点,老玩家不可错过的青春回忆
- 又是一年仲夏,三十年前的暑假,你还记得在玩什么游戏吗?
- 十六年前的首款安卓1.0手机,内置物理全键盘,如今二手45元
- HTC巅峰时期的安卓手机,自带全键盘,居然很多人用过
- 十年前的 iPhone 6s 还在 “服役”:一部手机的 “超长待机” 启示录
- SFC黄金时代10款动作RPG神作,每一款都是回忆满满的经典游戏!
- 揭秘十年前真正的游戏手机:索尼爱立信R800魔改系统超乎想象!
- 标签列表
-
- filter函数js (37)
- filter函数excel用不了 (73)
- 商城开发 (40)
- 影视网站免费源码最新版 (57)
- 影视资源api接口 (46)
- 网站留言板代码大全 (56)
- java版软件下载 (52)
- java教材电子课本下载 (48)
- 0基础编程从什么开始学 (50)
- java是用来干嘛的 (51)
- it入门应该学什么 (55)
- java线上课程 (55)
- 学java的软件叫什么软件 (38)
- 程序开发软件有哪些 (53)
- 软件培训 (59)
- 机器人编程代码大全 (50)
- 少儿编程教程免费 (45)
- 新代系统编程教学 (61)
- 共创世界编程网站 (38)
- 亲测源码 (36)
- 三角函数积分公式表 (35)
- 函数的表示方法 (34)
- 表格乘法的公式怎么设置 (34)
- sumif函数的例子 (34)
- 图片素材 (36)