我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。
扫描二维码或搜索下图红色VX号,加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。
推荐文章:Java 面试知识点解析;Mysql优化技巧(数据库设计、命名规范、索引优化
C/S(Client/Server),客户端/服务端,桌面应用程序
HTTP:超文本传输协议
FTP:文件传输协议
SMPT:简单邮件协议
TELNET:远程终端协议
POP3:邮件读取协议
JAVA SE:主要用在客户端开发 JAVA EE:主要用在web应用程序开发 JAVA ME:主要用在嵌入式应用程序开发
JVM:java虚拟机,运用硬件或软件手段实现的虚拟的计算机,Java虚拟机包括:寄存器,堆栈,处理器
大多情况下是不需要的。Java提供了一个系统级的线程来跟踪内存分配,不再使用的内存区将会自动回收
JDK:java development kit:java开发工具包,是开发人员所需要安装的环境
JRE:java runtime environment:java运行环境,java程序运行所需要安装的环境
计算机保存,组织数据的方式
线性表(ArrayList) 链表(LinkedList) 栈(Stack) 队列(Queue) 图(Map) 树(Tree)
面向对象编程
世间万物都可以看成一个对象。每个物体包括动态的行为和静态的属性,这些就构成了一个对象。
类是对象的抽象,对象是类的具体,类是对象的模板,对象是类的实例
整形:byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean
显示转换就是类型强转,把一个大类型的数据强制赋值给小类型的数据;隐式转换就是大范围的变量能够接受小范围的数据;隐式转换和显式转换其实就是自动类型转换和强制类型转换。
Char在java中也是比较特殊的类型,它的int值从1开始,一共有2的16次方个数据;Char 属性、方法、内部类、构造方法、代码块。 不好,因为计算机在浮点型数据运算的时候,会有误差,尽量在布尔表达式中不使用浮点型数据(if,while,switch中判断条件不使用浮点型) 使用Bigdecimal类进行浮点型数据的运算 静态实例化:创建数组的时候已经指定数组中的元素, ? 1 动态实例化:实例化数组的时候,只指定了数组程度,数组中所有元素都是数组类型的默认值 Object 有指针,但是隐藏了,开发人员无法直接操作指针,由jvm来操作指针 理论上说,java都是引用传递,对于基本数据类型,传递是值的副本,而不是值本身。对于对象类型,传递是对象的引用,当在一个方法操作操作参数的时候,其实操作的是引用所指向的对象。 改变了,因为传递是对象的引用,操作的是引用所指向的对象 不能,数组一旦实例化,它的长度就是固定的 创建一个新数组,从后到前循环遍历每个元素,将取出的元素依次顺序放入新数组中 形参:全称为“形式参数”,是在定义方法名和方法体的时候使用的参数,用于接收调用该方法时传入的实际值;实参:全称为“实际参数”,是在调用方法时传递给该方法的实际值。 不能构造方法当成普通方法调用,只有在创建对象的时候它才会被系统调用 不可以重写,可以重载 方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或者类型不同即可。在这种情况下,该方法就叫被重载了,这个过程称为方法的重载(override) 静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中变量、方法。如果要访问的话,必须要new一个外部类的对象,使用new出来的对象来访问。但是可以直接访问静态的变量、调用静态的方法; 普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。 如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象,使用该对象访问属性或者调用方法。 如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个普通内部类的对象作为一个属性,外同类可以通过该属性调用普通内部类的方法或者访问普通内部类的属性 如果其他的类要访问静态内部类的属性或者调用静态内部类的方法,直接创建一个静态内部类对象即可。 Static可以修饰内部类、方法、变量、代码块 Static修饰的类是静态内部类 Static修饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,可以直接使用类名来调用。在static方法中不能使用this或者super关键字。 Static修饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象。静态变量在内存中只有一份拷贝,在JVM加载类的时候,只为静态分配一次内存。 Static修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次。静态代码块可以有多个,如果有多个,按照先后顺序依次执行。 String,StringBuffer,StringBuilder StringBuffer与StringBuilder都继承了AbstractStringBulder类,而AbtractStringBuilder又实现了CharSequence接口,两个类都是用来进行字符串操作的。 在做字符串拼接修改删除替换时,效率比string更高。 StringBuffer是线程安全的,Stringbuilder是非线程安全的。所以Stringbuilder比stringbuffer效率更高,StringBuffer的方法大多都加了synchronized关键字 一共有两个引用,三个对象。因为”aa”与”bb”都是常量,常量的值不能改变,当执行字符串拼接时候,会创建一个新的常量是” aabbb”,有将其存到常量池中。 不能。Equlas大多用来做字符串比较,要判断基本数据类型或者对象类型,需要使用== ==可以判断基本数据类型值是否相等,也可以判断两个对象指向的内存地址是否相同,也就是说判断两个对象是否是同一个对象,Equlas通常用来做字符串比较。 Stringbuilder或者stringbuffer的reverse方法 封装、继承、多态 Java中既有单继承,又有多继承。对于java类来说只能有一个父类,对于接口来说可以同时继承多个接口 重载和重写都是java多态的表现。 重载叫override,在同一个类中多态的表现。当一个类中出现了多个相同名称的方法,但参数个数和参数类型不同,方法重载与返回值无关 重写叫overwrite,是字符类中多态的表现。当子类出现与父类相同的方法,那么这就是方法重写。方法重写时,子类的返回值必须与父类的一致。如果父类方法抛出一个异常,子类重写的方法抛出的异常类型不能小于父类抛出的异常类型。 可以重载,必须重写 必须重写 会执行。当创建一个子类对象,调用子类构造方法的时候,子类构造方法会默认调用父类的构造方法。 是java多态一种特殊的表现形式。创建父类引用,让该引用指向一个子类的对象 子类重写了父类方法和属性,访问的是父类的属性,调用的是子类的方法 Abstract 不是必须。抽象类可以没有抽象方法。 包含抽象方法的类一定是抽象类 不可以。定义抽象类就是让其他继承的,而final修饰类表示该类不能被继承,与抽象类的理念违背了 接口就是某个事物对外提供的一些功能的声明,是一种特殊的java类 接口弥补了java单继承的缺点 异常捕捉:try…catch…finally,异常抛出:throws。 继承一个异常类,通常是RumtimeException或者Exception 会执行,如果有finally,在finally之后被执行,如果没有finally,在catch之后被执行 Try块必须存在,catch和finally可以不存在,但不能同时不存在 Error和Exception都是java错误处理机制的一部分,都继承了Throwable类。 Exception表示的异常,异常可以通过程序来捕捉,或者优化程序来避免。 Error表示的是系统错误,不能通过程序来进行错误处理。 有,log4j是用来日志记录的,记录一些关键敏感的信息,通常会将日志记录到本地文件或者数据库中。记录在本地文件中,会有频繁的io操作,会耗费一些系统资源。记录在数据库中,会频繁地操作数据库表,对系统性能也有一定的影响。但是为了程序安全以及数据的恢复或者bug的跟踪,这点资源消耗是可以承受的。 由低到高:debug、info、wran、error Java反射 通过new创建对象的效率比较高。通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低 Coillection、Map。 List:线性表、Set:无序集合。 顺序存储、可以有重复值。 无须存储、不能有重复值。 Array与ArrayList都是用来存储数据的集合。ArrayList底层是使用数组实现的,但是arrayList对数组进行了封装和功能扩展,拥有许多原生数组没有的一些功能。我们可以理解成ArrayList是Array的一个升级版。 使用PreparedStatement类,而不是使用Statement类 使用CallableStatement 数据库连接是非常消耗资源的,影响到程序的性能指标。连接池是用来分配、管理、释放数据库连接的,可以使应用程序重复使用同一个数据库连接,而不是每次都创建一个新的数据库连接。通过释放空闲时间较长的数据库连接避免数据库因为创建太多的连接而造成的连接遗漏问题,提高了程序性能。 Dbcp,c3p0等,用的最多还是c3p0,因为c3p0比dbcp更加稳定,安全;通过配置文件的形式来维护数据库信息,而不是通过硬编码。当连接的数据库信息发生改变时,不需要再更改程序代码就实现了数据库信息的更新。 按功能来分 按类型来分 抽象类: 接口: 进程是系统进行资源分配和调度的一个独立单位,线程是CPU调度和分派的基本单位 进程和线程的关系: 线程与进程的区别: &是位运算符。&&是布尔逻辑运算符,在进行逻辑判断时用&处理的前面为false后面的内容仍需处理,用&&处理的前面为false不再处理后面的内容。 不会,在下一个垃圾回收周期中,这个对象将是可被回收的。 吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序。而串行收集器对大多数的小应用(在现代处理器上需要大概100M左右的内存)就足够了。 15.什么是拆装箱?
拆箱:把包装类型转成基本数据类型
装箱:把基本数据类型转成包装类型
16.Java中的包装类都是那些?
byte:Byte short:Short int:Integer long:Long float:Float double:Double char:Character boolean:Boolean
17.一个java类中包含那些内容?
18.例如: if(a+1.0=4.0),这样做好吗?
19.那针对浮点型数据运算出现的误差的问题,你怎么解决?
20.++i与i++的区别
++i:先赋值,后计算
i++:先计算,后赋值
21.程序的结构有那些?
顺序结构
选择结构
循环结构
22.数组实例化有几种方式?
int
[] a=
new
int
[]{
1
,
3
,
3
}
23.Java中各种数据默认值
Byte,short,int,long默认是都是0
Boolean默认值是false
Char类型的默认值是’’
Float与double类型的默认是0.0
对象类型的默认值是null
24.Java常用包有那些?
Java.lang
Java.io
Java.sql
Java.util
Java.awt
Java.net
Java.math
25.Java最顶级的父类是哪个?
26.Object类常用方法有那些?
Equals
Hashcode
toString
wait
notify
clone
getClass
27.java中有没有指针?
28.java中是值传递引用传递?
29.假设把实例化的数组的变量当成方法参数,当方法执行的时候改变了数组内的元素,那么在方法外,数组元素有发生改变吗?
30.实例化数组后,能不能改变数组长度呢?
31.假设数组内有5个元素,如果对数组进行反序,该如何做?
32.形参与实参
33.构造方法能不能显式调用?
34.构造方法能不能重写?能不能重载?
35.什么是方法重载?
36.内部类与静态内部类的区别?
37.Static关键字有什么作用?
38.Final在java中的作用
Final可以修饰类,修饰方法,修饰变量。
修饰的类叫最终类。该类不能被继承。
修饰的方法不能被重写。
修饰的变量叫常量,常量必须初始化,一旦初始化后,常量的值不能发生改变。
39.Java中操作字符串使用哪个类?
40.StringBuffer,Stringbuilder有什么区别?
41.String str=”aaa”,与String str=new String(“aaa”)一样吗?
不一样的。因为内存分配的方式不一样。
第一种,创建的”aaa”是常量,jvm都将其分配在常量池中。
第二种创建的是一个对象,jvm将其值分配在堆内存中。
42.String str=”aa”,String s=”bb”,String aa=aa+s;一种创建了几个对象?
43.将下java中的math类有那些常用方法?
Pow():幂运算
Sqrt():平方根
Round():四舍五入
Abs():求绝对值
Random():生成一个0-1的随机数,包括0不包括1
44.String类的常用方法有那些?
charAt:返回指定索引处的字符
indexOf():返回指定字符的索引
replace():字符串替换
trim():去除字符串两端空白
split():分割字符串,返回一个分割后的字符串数组
getBytes():返回字符串的byte类型数组
length():返回字符串长度
toLowerCase():将字符串转成小写字母
toUpperCase():将字符串转成大写字符
substring():截取字符串
format():格式化字符串
equals():字符串比较
45.判断两个对象是否相同,能使用equlas比较吗?
46.==与equlas有什么区别?
47.如何将字符串反转?
48.面向对象的语言有那些特征?
49.Java中的继承是单继承还是多继承
50.什么是重写?什么是重载?
51.构造方法能不能重载?能不能重写?
52.如果父类只有有参构造方法,那么子类必须要重写父类的构造方法吗?
53.创建一个子类对象的时候,那么父类的构造方法会执行吗?
54.什么是父类引用指向子类对象?
55.当父类引用指向子类对象的时候,子类重写了父类方法和属性,那么当访问属性的时候,访问是谁的属性?调用方法时,调用的是谁的方法?
56.Super与this表示什么?
Super表示当前类的父类对象
This表示当前类的对象
57.抽象的关键字是什么?
58.抽象类必须要有抽象方法吗
59.如果一个类中有抽象方法,那么这个一定是抽象类?
60.抽象类可以使用final修饰吗?
61.普通类与抽象类有什么区别?
普通类不能包含抽象方法,抽象类可以包含抽象方法
抽象类不能直接实例化,普通类可以直接实例化
62.什么是接口?
63.JAVA为什么需要接口?
64.接口有什么特点?
接口中声明全是public static final修饰的常量
接口中所有方法都是抽象方法
接口是没有构造方法的
接口也不能直接实例化
接口可以多继承
65.接口与抽象类有什么区别?
抽象类有构造方法,接口没有构造方法
抽象类只能单继承,接口可以多继承
抽象类可以有普通方法,接口中的所有方法都是抽象方法
接口的属性都是public static final修饰的,而抽象的不是
66.Java中异常分为哪两种?
编译时异常
运行时异常
67.说几个常见的编译时异常类?
NullPointerException:空指针异常
ArrayIndexOutOfBoundsException:数组下标越界
NumberFormatException:数字转换异常
IllegalArgumentException:参数不匹配异常
InstantiationException:对象初始化异常
ArithmeticException:算术异常
68.异常的处理机制有几种?
69.如何自定义一个异常
70.在异常捕捉时,如果发生异常,那么try.catch.finally块外的return语句会执行吗?
71.Try.catch.finally是必须要存在的吗?
72.Thow与thorws区别
Throw写在代码块内,throw后面跟的是一个具体的异常实例
Throw写在方法前面后面,throws后面跟的是异常类,异常类可以出现多个
73.Error与Exception区别?
74.使用Log4j对程序有影响吗?
75.Log4j日志有几个级别?
76.除了使用new创建对象之外,还可以用什么方法创建对象?
77.Java反射创建对象效率高还是通过new创建对象的效率高?
78.Java中集合框架的有几个?
79.Collection接口下有那些集合框架?
80.List接口有什么特点?
81.Set接口有什么特点
82.ArrayList与LinkedList有什么区别?
ArrayList与LinkedList都实现了List接口。
ArrayList是线性表,底层是使用数组实现的,它在尾端插入和访问数据时效率较高,
Linked是双向链表,他在中间插入或者头部插入时效率较高,在访问数据时效率较低
83.Array与ArrayList有什么不一样?
84.Map有什么特点
以键值对存储数据
元素存储循序是无须的
不允许出现重复键
85.JDBC操作的步骤
加载数据库驱动类
打开数据库连接
执行sql语句
处理返回结果
关闭资源
86.在使用jdbc的时候,如何防止出现sql注入的问题。
87.怎么在JDBC内调用一个存储过程
88.是否了解连接池,使用连接池有什么好处?
89.你所了解的数据源技术有那些?使用数据源有什么好处?
90.Java的io流分为哪两种?
输入流(input),输出流(output)
字节流,字符流
91.常用io类有那些?
File
FileInputSteam,FileOutputStream
BufferInputStream,BufferedOutputSream
PrintWrite
FileReader,FileWriter
BufferReader,BufferedWriter
ObjectInputStream,ObjectOutputSream
92.字节流与字符流的区别
以字节为单位输入输出数据,字节流按照8位传输
以字符为单位输入输出数据,字符流按照16位传输
93.final、finalize()、finally
性质不同
作用
94.抽象类和接口的区别?
95.线程同步的方法
96.线程与进程的区别
97.&和&&的区别
98.重载与重写
重载的方法是可以改变返回值的类型。
99.如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?
100.串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
转载:https://www.cnblogs.com/lenglangjin/p/10499482.html
推荐内容:
Java 学习路线之四个阶段
java面试题
如何写一份优秀的java程序员简历
30 个 Java 集合面试问题及答案
Java 面试题 四
JAVA反射调用方法
Java多线程基础(面试向)
Java数据结构和算法(十四)——堆
C++和java的区别和联系
大白话说Java泛型:入门、使用、原理