java
文章平均质量分 67
静香是个程序媛
越努力越幸运,用程序改变世界。
展开
-
面试攻略,Java 基础面试 100 问(十八)
此外,它不能前后移动流中的数据。NIO 的非阻塞模式, 使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可 用时,就什么都不会获取。只不过 Stream 是单向的,譬如:InputStream, OutputStream,而 Channel 是双向 的,既可以用来进行读操作,又可以用来进行写操作。传统 IO 基于字节流和字 符流进行操作,而 NIO 基于 Channel 和 Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区 中,或者从缓冲区写入到通道中。原创 2023-02-23 10:02:01 · 373 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十七)
另外多路复用 IO 为何比非阻塞 IO 模型的效率高是因为在非阻塞 IO 中,不断地询问 socket 状态 时通过用户线程去进行的,而在多路复用 IO 中,轮询每个 socket 状态是内核在进行的,这个效 率要比用户线程要高的多。在信号驱动 IO 模型中,当用户线程发起一个 IO 请求操作,会给对应的 socket 注册一个信号函 数,然后用户线程会继续执行,当内核数据就绪时会发送一个信号给用户线程,用户线程接收到 信号之后,便在信号函数中调用 IO 读写操作来进行实际的 IO 请求操作。原创 2023-02-22 10:00:06 · 227 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十六)
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。什么情况下需要序列化a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;b)当你想用套接字在网络上传送对象的时候;c)当你想通过RMI传输对象的时候;原创 2023-02-22 09:59:57 · 75 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十五)
在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法Java反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类。在运行时构造任意一个类的对象。在运行时判断任意一个类所具有的成员变量和方法。在运行时调用任意一个对象的方法。反射机制的优缺点优点:能够运行时动态获取类的实例,提高灵活性;与动态编译结合Class.forName('com.mysql.jdbc.Driver.class');原创 2023-02-21 09:36:08 · 81 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十四)
一般情况下是用 try 来执行一段程序,如果出现异常,系统会抛出(throw)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理;throws 用来标明一个成员函数可能抛出的各种“异常”;如果下一级的 try 语句没有对某种“异常”进行处理,栈就会展开,直到遇到有处理这种“异常”的 try 语句。异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。原创 2023-02-21 09:35:40 · 88 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十三)
不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。Java 允许在 finally 中改变返回值的做法是不好的,因为如果存在 finally 代码块,try 中的 return 语句不会立马返回调用者,而是记录下返回值待 finally 代码块执行完毕之后再向调用者返回其值,然后如果在 finally 中修改了返回值,这会对程序造成很大的困扰,C#中就从语法上规定不能做这样的事。原创 2023-02-20 09:38:30 · 247 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十二)
利用 java.text.DataFormat 的子类(如 SimpleDateFormat 类)中的 forma t(Date)方法可将日期格式化。原创 2023-02-20 09:39:32 · 250 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十一)
抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是 private、默认、protected、public 的,而接口中的成员全都是 public 的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。原创 2023-02-19 07:59:12 · 578 阅读 · 1 评论 -
面试攻略,Java 基础面试 100 问(十)
String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。StringBuffer:线程安全,StringBuilder:线程不安全。原创 2023-02-19 07:58:58 · 1469 阅读 · 1 评论 -
面试攻略,Java 基础面试 100 问(九)
char 类型可以存储一个中文汉字,因为 Java 中使用的编码是 Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个 char 类型占 2 个字节(16bit),所以放一个中文是没问题的。不对,如果两个对象 x 和 y 满足 x.equals(y) == true,它们的哈希码(hash code)应当相同。补充:继承 String 本身就是一个错误的行为,对 String 类型最好的重用方式是关联(HAS-A)而不是继承(IS-A)。原创 2023-02-18 16:08:32 · 725 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(八)
逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是 true 整个表达式的值才是 true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。补充:我们为编写的类重写 hashCode 方法时,可能会看到如下所示的代码,其实我们不太理解为什么要使用这样的乘法运算来产生哈希码(散列码),而且为什么这个数是个素数,为什么通常选择 31 这个数?注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。原创 2023-02-18 16:06:57 · 1954 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(七)
可以正确编译,因为 s1+= 1;简单的说,如果字面量的值在-128 到 127 之间,那么不会 new 新的 Integer对象,而是直接引用常量池中的 Integer 对象,所以上面的面试题中 f1==f2 的结果是 true,而 f3==f4 的结果是 false。包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double。原始类型: boolean,char,byte,short,int,long,float,double。原创 2023-02-17 09:35:37 · 278 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(六)
样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。类型擦除的基本过程也比较简单,首先是找到用来替换类型参数的具体类。表示该通配符所代表的类型是 T 类型的子类。表示该通配符所代表的类型是 T 类型的父类。这些类被称为参数化的类或参数化的类型。原创 2023-02-17 09:36:30 · 288 阅读 · 1 评论 -
面试攻略,Java 基础面试 100 问(五)
除了在持久化对象时会用到对象序列化之外,当使用 RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。使用 Java 对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装。必须注意地是,对象序列化保存的是对象的”状态”,即它的成员变量。等,希望对该密码字段在序列化时,进行加密,而客户端如果拥有解密的密钥,只有在。原创 2023-02-16 09:39:21 · 209 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(四)
按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。注意:基于序列化和反序列化实现的克隆不仅仅是深度克隆,更重要的是通过泛型限定,可以检查出要克隆的对象是否支持序列化,这项检查是编译器完成的,不是在运行时抛出异常,这种是方案明显优于使用 Object 类的 clone 方法克隆对象。被传递到方法中时,参数的值就是对该对象的引用。Java对对象采用的不是引用调用,实际上,对象引用是按值传递的。原创 2023-02-16 09:38:04 · 198 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(三)
静态变量是被 static 修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”;一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”;二者均是Object类里的方法。原创 2023-02-15 09:34:52 · 288 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(二)
假设B是较A低的模块,但B需要使用到A的功能,这个时候,B不应当直接使用A中的具体类:而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。局部变量:随着方法的调用而存在,随着方法的调用完毕而消失。原创 2023-02-15 09:33:37 · 298 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(一)
继承(Inherit):继承实际上也是为了提高代码的复用性和可扩展性,在定义不同类的时候存在一些相同属性,为了方便使用可以将这些共同属性抽象成一个父类,在定义其他子类时可以继承自该父类,减少代码的重复定义,子类可以使用父类中非私有的成员。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。只有private构造方法。原创 2023-02-14 10:37:47 · 248 阅读 · 0 评论 -
50条必背JAVA知识点(三)
31.面向对象中两个重要的概念:类:对一类事物的描述,是抽象的、概念上的定义对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)32.虚拟机栈,即为平时提到的栈结构。局部变量存储在栈结构中;new出来的结构(比如:数组、对象)加载在堆空间中。补充:对象的属性(非static的成员变量)也是加载在堆空间中。int arr [ ] = new arr [ ],以等号“=”为界,左边是局部变量存放在栈,右边是new 的机构,存放在堆中。方法区:类的加载信息、常量池、静态域正在上传…重新上传取消原创 2023-02-03 09:26:58 · 450 阅读 · 0 评论 -
50条必背JAVA知识点(二)
20.赋值运算符:= += -= *= /= %=,运算的结果不会改变变量本身的数据类型。由于常量“1”默认是int型的,所以编译会报错,使用short i += 1,则做到了+1的作用,也没有改变数据类型。21.&与&&、| 与 | | 的区别:&&、| | 具备短路功能,左边的条件成立或者不成立,右边的条件不用再判断,&、| 不管什么情况,都要把所有条件判断完。28.数组元素的默认初始化值:整型:0浮点型:0.0字符型:0或者’\u0000’,而非’0’布尔类型:false引用数据类型:null。原创 2023-02-03 09:26:48 · 235 阅读 · 0 评论 -
50条必背JAVA知识点(一)
6.Java中的名称命名规范:包名:多单词组成时所有字母都小写:xxxyyyzzz 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个 单词首字母大写:xxxYyyZzz常量名:所有字母都大写。Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达所操作的 boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false 用0表示。格式:java 类名。原创 2023-02-02 11:15:43 · 5349 阅读 · 0 评论