欢迎进入皮皮猫的博客
针对很多学Java的小伙伴来说,面试总会遇到很多问题,那么我就凭着以前的经验简单说一下面试官都会问什么吧! -------北京广深面试风格,
Java基础面试题
1.JDK 和 JRE 有什么区别?
*JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。
*JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。
*具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多
*Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。
2.== 和的equals的区别?
基本类型:比较的是值是否相同。
引用类型:比较的是引用是否相同。
equals 的作用:比较的都是值是否相同。
3.final 在 Java 中有什么作用?
*final 修饰的类叫最终类,该类不能被继承。
*final 修饰的方法不能被重写。
*final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
4.String 类的常用方法都有那些?
*indexOf():返回指定字符的索引。
*charAt():返回指定索引处的字符。
*replace():字符串替换。
*trim():去除字符串两端空白。
*split():分割字符串,返回一个分割后的字符串数组。
*getBytes():返回字符串的 byte 类型数组。
*length():返回字符串长度。
*toLowerCase():将字符串转成小写字母。
*toUpperCase():将字符串转成大写字符。
*substring():截取字符串。
*equals():字符串比较。
5.接口和抽象类有什么区别?
*默认方法实现:抽象类可以有默认的方法实现;接口不能有默认的方法实现。
*实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
*构造函数:抽象类可以有构造函数;接口不能有。
*main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
*实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
*访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。
6.List、Set、Map 之间的区别是什么?
List、Set、Map 的区别主要体现在两个方面:元素是否有序、是否允许元素重复。
三者之间的区别,如下表:
7. HashMap 和 Hashtable 有什么区别?
*存储:HashMap 运行 key 和 value 为 null,而 Hashtable 不允许。
*线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。
*推荐使用:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使用,
推荐在单线程环境下使用 HashMap 替代,如果需要多线程使用则用 ConcurrentHashMap 替代。
8.ArrayList 和 LinkedList 的区别是什么?
*数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。
*随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。
*增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。
综合来说,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。
9.什么是反射?
反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,
都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。
10.什么是 Java 序列化?什么情况下需要序列化?
Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出来。
以下情况需要使用 Java 序列化:
*想把的内存中的对象状态保存到一个文件中或者数据库中时候;
*想用套接字在网络上传送对象的时候;
*想通过RMI(远程方法调用)传输对象的时候。
数据库方面
Linux方面
Spring全家桶
自己总结:
java的反射是什么?
就是程序运行时能够获取自身的信息,只要给定类的名字,就可以通过反射机制来获取所有信息
官方:在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的反射机制。通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以。
如何创建一个对象,有哪几种方式?
1.使用new关键字:
2.使用Clone的方法:无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去
3.使用反序列化:当我们序列化和反序列化一个对象,JVM会给我们创建一个单独的对象
序列化:
1.实现序列化:
1)让类实现Serializable接口,该接口是一个标志性接口,标注该类对象是可被序列
2)然后使用一个输出流来构造一个对象输出流并通过writeObect(Obejct)方法就可以将实现对象写出
3)如果需要反序列化,则可以用一个输入流建立对象输入流,然后通过readObeject方法从流中读取对象
2.作用:
1)序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,可以对流化后的对象进行读写操作,也可以将流化后的对象传输与网络之间;
2)为了解决对象流读写操作时可能引发的问题(如果不进行序列化,可能会存在数据乱序的问题)
3)序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆
request.getparameter(String key);
返回由前台传过来的一个指定的参数的属性值;
request.getAttribute(String name);
返回由name指定的属性值
getAttribute() 方法返回指定属性名的属性值
JDBC连接数据库步骤
确定连接的数据库类型《mysql,oracle,db2,moangdb,sqlservlet》
下载数据库的驱动(http://mvnrepository.org),并把jar包添加到项目中
把数据库连接的驱动类加载到java虚拟机中
通过DriverManager类中getConnection方法获取到对应数据库连接对象
通过连接对象创建编译对象
通过编译对象想sql发出指令
接受并处理返回的结果
**
环境部署
**
pro环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境。
pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样。
test环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定。
dev环境:开发环境,外部用户无法访问,开发人员使用,版本变动很大。