1.什么是java? 2.JDK1.5之后的3个版本? 3.JVM,JRE,JDK的关系? 4.什么是跨平台?原理是什么? 5.JAVA语言有哪些特点? 6.什么是字节码?采用字节码的好处是什么? Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中解释器----->机器可执行的二进制机器码---->程序运行。 7.什么是JAVA程序的主类?应用程序和小程序的主类有何不用? 8.JAVA应用程序和小程序之间有哪些差别? 9.JAVA和C++的区别? 都是面向对象的语言,封装,继承,多态,/// JAVA不提供指针采访问内存,程序安全./// JAVA类单继承,接口多继承.C++支持多继承/// JAVA有自动内存管理机制,不需要手动释放无用内存. 10.Oracle JDK与Open JDK的对比 11.JAVA有哪些数据类型? 基本数据类型(数值型(整型.浮点型),字符型,布尔型), 引用类型(类class,接口interface.数组[]) 12.switch是否可以作用在byte上,是否可以作用在long上.是否能作用在String上? JAVA5之前byte,short,int.char ///5之后,enum引入枚举类型, 7引入String,但是长整型long目前不可以 枚举enum是用来定义一组数量确定的常量的类, 和普通类一样可以有构造方法,也可以有属性和普通方法,可以实现接口。 13.用最有效率的方法计算 2 乘以8? 14.Math.round(11.5) 等于多少?Math.round(-11.5)等于多少 ? 四舍五入原理.在参数上加0.5,向下取整 15.float f=3.4 是否正确? 向下转型,双精度—>浮点型,精度丢失,强转 16.short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗 ? 17.Java语言采用何种编码方案?有何特点? Unicode(标准码),它为每个字符制订了一个唯一的数值,因此在任何的语言,平台,程序都可以放心的使用。 18.访问修饰符 public,private,protected,以及不写(默认)时的区别? 使用修饰符可以保护类,变量,方法,构造方法的访问,支持4种不同的访问权限 private 私有的,仅在本类能够访问 default 本类,同包类中访问 protected 受保护的,可以在本类,派生类,同包类中访问 public 公共的,任何类都可以访问 19.&和&&有什么区别? &按位与,逻辑与 && 短路与 20.JAVA中有没有goto? ---->没有.是java中的保留字 21.final有什么用? 类,方法,变量(不可变的是变量的引用,而不是变量的内容),是个常量,不能被重新赋值 22.final,finalize,finally区别? finalize是一个Object的方法,垃圾回收器调用 当我们调用System.gc() 方法的时候,由垃圾回收器调用finalize(),回收垃圾, 23.this关键字的用法? 3个作用,普通的直接引用(当前对象本身),//形参与成员变量重名.///引用本类的构造方法 24.super关键字的用法? 也是3种,普通引用,子类的成员变量或方法与父类的重名,区分.///引用父类的构造方法 25.this和super的区别? this()和super()都指的是对象,均不可以在static环境中使用。包括:static变量,static方法,static语句块。 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。 26.static存在的主要意义? 没有创建对象,也能使用属性和调用方法! 用来形成静态代码块以优化程序性能。类加载的时候,只执行一次 27.static的应用场景?注意事项? 1、修饰成员变量 2、修饰成员方法 3、静态代码块 4、修饰类【只能修饰内部类也就是静态内部类】 5、静态导包 28.break ,continue ,return 的区别及作用 break 跳出总的上一次循环,不再执行循环(结束当前循环体) continue 跳出本次循环.继续执行下次循环 return 程序退出.不再执行下面的代码 29.面向对象与面向过程的区别? 30.面向对象的特征有哪些方面? 抽象: 抽象是将一个类的共同特征总结构造类的过程,包括数据抽象和行为抽象,抽象只关注属性和行为,并不关系行为什么细节. 封装派生类所共有的属性和行为—代码复用 为所有派生类提供统一的类型—向上造型 可以包含抽象方法,为所有派生类提供统一的接口 封装: 隐藏对象的属性和实现细节,仅对外提供公共访问方式 封装的是对象的属性和行为,封装属性私有化.并提供一个对外访问它的方法 继承 子类拥有父类非private的属性和方法,继承是多态的前提 多态: 父类或接口指向定义的引用变量指向不同的子类或实现类的实例对象,提高程序扩展 方法重载,向上造型 31.重载overload和重写override的区别? 重载:编译时的多态,.也称为前绑定. 重写:运行时的多态,也称为后绑定. 32.什么是多态机制?Java语言是如何实现多态的? 不修改程序代码,让引用变量绑定到不同的类上,调用具体的方法实现 33.多态的实现条件? 继承,重写,向上转型 34.面向对象的五大基本原则是什么? 单一职责原则 SRP 类的功能要单一 开放封闭原则 OCP 一个模块对于扩展是开放的, 对于修改是封闭的 里式替换原则 LSP 子类可以替换父类出现在父类能够出现的任何地方,—干活 依赖倒置原则 DIP 高层次的模块不应依赖于低层次模式,他们都应该依赖于抽象,抽象不应该依赖于具体实现.具体实现应该依赖于抽象---->出国 接口分离原则 ISP 采用多个接口 35.抽象类和接口对比? 抽象类:用来捕捉子类通用特性,接口是抽象方法的集合. 设计层面讲:抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范 JAVA8接口引入默认方法,和静态方法,减少抽象类和接口之间的差异. 默认方法:方法前面加上”default”关键字 静态方法:方法前面加上”static”关键字 36.普通类和抽象类的区别? 37.抽象类能使用final吗? 38.内存管理? 堆: 存放new对象实例,存放成员变量,存放字符串常量池,String hashCode()的默认行为是堆上的对象产生的特有值,如果没有重写hashCode,则该class的两个对象,无论如何都不会相等,. 栈; 存放对象引用,存放局部变量 方法区: 39.创建一个对象用什么关键字? 对象引用与对象实例有何不同? 对象引用指向对象实例, 一个引用可以指向0或1个对象实例.一个对象可以被多个引用指向它 40.成员变量与局部变量的区别? 成员变量随着对象的创建而存在,随着对象的消失而消失 局部变量:方法被调用时存在,调用完释放 41.在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?—>帮助子类做初始化操作 42.静态变量与实例变量的区别? 43.静态变量与普通变量的区别? 44.静态方法和实例方法的区别? 45.在一个静态方法内调用一个非静态成员为什么是非法的? 静态方法不可以通过对象调用 46.内部类的分类有哪些? 4种 成员内部类, 定义在类内部,成员位置上的非静态类,就是成员内部类。 创建方式 外部类实例.new 内部类(), 局部内部类, 定义在方法中的内部类,就是局部内部类 创建方式,在对应方法内,new 内部类() 匿名内部类, 匿名内部类就是没有名字的内部类 静态内部类 定义在类内部的静态类,就是静态内部类。创建方式,new 外部类.静态内部类(), 47.内部类的优点? 访问外部类数据,包括私有,///不能被包中的其他类所见,封装性.,/可以方便的回调.,/有效实现多重继承,优化单继承缺陷 48.内部类有哪些应用场景? 49.局部内部类和匿名内部类访问局部变量的时候,为什么变量必须加上final? —生命周期,栈,局部内部类对变量的引用还在 50.构造器constructor是否可以被重写override? 51.重载与重写的区别?重载的方法能否根据返回值类型区分? 重载同一类, 重写父子类,方法名,参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(lsp) 52.==和equals()的区别? String的equals是重写过的.Object的equals是比较对象的内存地址,String的equals比较对象的值 当创建String对象时,虚拟机会在常量池中,查找有没有已存在的值和要创建值相同的对象,如果有就把它赋给当前引用,如果没有,就在常量池创建一个String对象 53.hashCode和equals()关系 54.hashset如何检查重复?来说明为什么有hashCode? 当你把对象加入 HashSet 时,HashSet 会先计算对象的 hashcode 值来判断对象加入的位置,同时也会与其他已经加入的对象的 hashcode 值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同 hashcode 值的对象,这时会调用 equals()方法来检查 hashcode 相等的对象是否真的相同。如果两者相同, HashSet 就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置.。这样我们就大大减少了 equals 的次数,相应就大大提高了执行速度。
55.两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗? 56.hashCode和equals方法的关系面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” 57.hashCode()介绍? 作用:获取哈希码,也叫散列码,返回int整数,确定该对象在散列表中的索引位置.hashCode()定义在JDK的Object.java中…任何类都包含hashCode方法,散列表KV,根据键快速检索对应的值,(散列码:快速查找所需要的对象) 58.hashCode与equals的相关约定 2个对象相等,则equals一定相等.为true. hashCode相等则equals不一定相等 59.对象的相等与指向他们的引用相等,两者有什么不同? 对象相等,比的是内存存放的内容是否相等,而引用相等,比的是他们指向的内存地址 60.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果, 那么这里到底是值传递还是引用传递? 是值传递。Java 语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是 对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的 61.为什么JAVA中只有值传递? 按值传递 call by value 方法接收调用者提供的值 按引用调用 call by reference 方法接收调用者提供的变量地址 java设计语言,只能是值传递.方法得到所有参数值的一个拷贝 方法并没有改变存储在变量s1和s2中对象引用,只是2个对象引用的拷贝 62.值传递和引用传递有什么区别? 值传递:指的是在方法调用时,传递的参数是按值的拷贝传递,传递的是值的拷贝,也就是说传递后就互不相关了。 引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间) 63.JDK常用的包有哪些? java.lang:这个是系统的基础类; java.io:这里面是所有输入输出有关的类,比如文件操作等; java.nio:为了完善 io 包中的功能,提高 io 包中性能而写的一个新包; java.net:这里面是与网络有关的类; java.util:这个是系统辅助类,特别是集合类; java.sql:这个是数据库操作的类。 64.import java和javax有什么区别? 65.JAVA这个的IO流分为几种? 按流的方向分: 输入流,输出流 按操作单元分: 字节流,字符流 按流的角色分:节点流,处理流 IO流共涉及40多个流,都是从4个抽象类基类派生出来的 InputStream/ Reader OutputStream/Writer 66.BIO,NIO,AIO有什么区别? BIO 同步阻塞.平时使用的传统IO,使用简单,并发处理能力弱,Socket,ServerSocket 数据读取写入必须阻塞在一个线程内等待其完成,在活动连接数不是很高的情况下,这种模型很不错的.不用过多考虑系统过载,限流 NIO 同步非阻塞,传统IO升级,客户端和服务端通过Channel通道通信,实现多路复用 JAVA1.4 NIO框架,java.nio包,提供了Channel,Selector,Buffer等抽象,支持面向缓冲,基于通道的IO操作方法, SocketChannel,ServerSocketChannel,低负载,低并发BIO, 高负载高并发NIO AIO 异步非阻塞,NIO升级,NIO2,基于事件和回调机制 JAVA7引入,应用操作之后,会直接返回,IO操作本身就是同步的 67. Files的常用方法都有哪些? Files. exists():检测文件路径是否存在。 Files. createFile():创建文件。 Files. createDirectory():创建文件夹。 Files. delete():删除一个文件或目录。 Files. copy():复制文件。 Files. move():移动文件。 Files. size():查看文件个数。 Files. read():读取文件。 Files. write():写入文件。 68.什么是反射机制? 运行状态中,对于任意一个类,.都能知道这个类的所有属性和方法.对于任意一个对象,都能调用它的属性和方法; 这种动态获取信息以及动态调用对象的方法的功能称之为JAVA语言的反射机制. 69.反射机制的应用场景? JDBC连接数据库时,反射加载数据库驱动./Spring框架,xml配置,装入Bean的过程,将程序中所有xml配置或properties配置文件加载到内存中,通过xml,[roperties获取实体类的字节码字符串以及相关属性信息//通过反射机制,根据字符串获取某个类的Class实例///动态代理设计模式 70.JAVA获取反射的3钟方法? 通过new对象 new Obj.getClass().getName() 通过路径 Class.forName(); 相对路径 通过类名 Obj.class 71.字符型常量和字符串常量有什么区别? 形式上看:字符型常量就是单引号引起的一个字符,字符串常量就是双引号引起的多个字符 含义上: 字符常量相当于一个整形值(ASCII值),可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存 中存放位置) 占内存大小 字符常量只占一个字节 字符串常量占若干个字节 72.什么是字符串常量池? 提高内存使用效率,避免开辟多块内存空间存储字符串,在创建字符串时,JVM首先会检查字符串常量池,在池中则返回它的引用. 如果不存在,则实例化一个字符串到常量池中.返回引用. 73.String是基本数据类型吗? java5引用的枚举类型.也是一种引用类型 74.String有哪些特性? —>不变性(一个对象被多线程共享并频繁访问时保证数据一致性).字符串常量池.final(安全性) 75.String为什么是不可变的? String类利用了 final修饰的char类型数组存储字符 private final char value[]; String内容不可变.不代表引用不可变,多开辟了一块内存区域 76.String str=“i"与 String str=new String(“i”)一样吗? 77.String s = new String(“xyz”);创建了几个字符串对象? 两个对象,一个是静态区的"xyz”,一个是用new创建在堆上的对象。 78.如何将字符串反转? 79.数组有没有 length()方法?String 有没有 length()方法? 数组没有 length()方法 ,有 length 的属性。String 有 length()方法。JavaScript中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java 混淆。 80.String 类的常用方法都有那些? 81.在使用 HashMap 的时候,用 String 做 key 有什么好处? 通过key计算hashCode存放value的存储位置,字符串不可变,它的hashCode被缓存起来.不需要再次计算,相比其他对象快 82.String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? StringBuilder,StringBuffer都继承AbstractStringBuilder,AbstractStringBuilder也是使用字符数组保存字符串 可变形,线程安全性,性能. 单线程字符串缓冲区 StringBuilder比buffer性能提高10-15%,对象本身进行操作,. 83.自动装箱和自动拆箱 84.int和Integer的区别? 将基本类型当做对象进行操作 Wrapper class ,JAVA5引入拆装箱 85.Integer a= 127 与 Integer b = 127相等吗? 如果整型字面量的值在-128到127之间,那么自动装箱时不会new新的Integer对象,而是直接引用常量池中的Integer 对象,超过范围 a1==b1的结果是false 86.网络编程 包括TCP/IP协议和三次握手四次挥手的知识, 还包括计算机网络体系结构,HTTP协议,get请求和post请求区别,session和cookie 网址: https://blog.csdn.net/ThinkWon/article/details/104903925 87.
|