小皇帝 詹姆斯的JAVA面试总结(詹姆斯还在面试中)

java中的几种基本类型

1)四种整数类型(byte、short、int、long): byte:8 位,用于表示最小数据单位,如文件中数据,-128~127 short:16 位,很少用,-32768 ~ 32767 int:32 位、最常用,-231-1~231 (21 亿) long:64 位、次常用 注意事项: int i=5; // 5 叫直接量(或字面量),即 直接写出的常数。 整数字面量默认都为 int 类型,所以在定义的 long 型数据后面加 L或 l。 小于 32 位数的变量,都按 int 结果计算。 强转符比数学运算符优先级高。见常量与变量中的例子。

2)两种浮点数类型(float、double): float:32 位,后缀 F 或 f,1 位符号位,8 位指数,23 位有效尾数。 double:64 位,最常用,后缀 D 或 d,1 位符号位,11 位指数,52 位有效尾 注意事项: 二 进 制 浮 点 数 : 1010100010=101010001.02=10101000.10210(2次方)=1010100.010*211(3次方)= . 1010100010*2^1010(10次方) 尾数: . 1010100010 指数:1010 基数:2 浮点数字面量默认都为 double 类型,所以在定义的 float 型数据后面加F 或 f;double 类型可不写后缀,但在小数计算中一定要写 D 或 X.X float 的精度没有 long 高,有效位数(尾数)短。 float 的范围大于 long 指数可以很大。 浮点数是不精确的,不能对浮点数进行精确比较。

3)一种字符类型(char): char:16 位,是整数类型,用单引号括起来的 1 个字符(可以是一个中文字符),使用 Unicode 码代表字符,0~2^16-1(65535) 。 注意事项: 不能为 0个字符。 转义字符:\n 换行 \r 回车 \t Tab 字符 " 双引号 \ 表示一个\ 两字符 char 中间用“+”连接,内部先把字符转成 int 类型,再进行加法运算,char 本质就是个数!二进制的,显示的时候,经过“处理”显示为字符。

4)一种布尔类型(boolean):true 真 和 false 假。

5)类型转换: char–> 自动转换:byte–>short–>int–>long–>float–>double 强制转换:①会损失精度,产生误差,小数点以后的数字全部舍弃。②容易超过取值范围。

6)记忆:8位:Byte(字节型) 16位:short(短整型)、char(字符型) 32位:int(整型)、float(单精度型/浮点型) 64位:long(长整型)、double(双精度型) 最后一个:boolean(布尔类型
arraylist与linkedlist有什么区别?*
ArrayList和LinkedList都实现了List接口,有以下的不同点:
1、ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
2、相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
3、LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。

接口和抽象类的区别是什么?
java提供和支持创建抽象类和接口。他们的实现有共同点,不同点在于:
接口中所有的方法隐藏的都是抽象的,儿抽象类则可以包含抽象和非抽象的方法。
类可以实现很多接口,但是只能继承一个抽象类
抽象类中可以包含静态方法,接口中不能包含静态方法
抽象类中可以包含普通的成员变量,接口中不能包含普通成员变量
接口和抽象类的相同点:
(1) 都可以被继承
(2) 都不能被实例化
(3) 都可以包含方法声明
(4) 派生类必须实现未实现的方法

手写单利模式
饿汉模式

//饿汉式单例类.在类初始化时,已经自行实例化

public class Singleton1 {
//私有的默认构造子
private Singleton1() {}
//已经自行实例化
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}

懒汉模式

//懒汉式单例类.在第一次调用的时候实例化

public class Singleton2 {
//私有的默认构造子
private Singleton2() {}
//注意,这里没有final
private static Singleton2 single=null;
//静态工厂方法
public synchronized static Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
}

重载和重写的区别?
方法的重载和重写都是实现多态的方式。区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。

web.xml文件中可以配置哪些内容?
web.xml用于配置Web应用的相关信息,如:监听器(listener)、过滤器(filter)、 Servlet、相关参数、会话超时时间、安全验证方式、错误页面等

int和Integer有什么区别?
Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer
class AutoUnboxingTest {

public static void main(String[] args) {
Integer a = new Integer(3);
Integer b = 3; // 将3自动装箱成Integer类型
int c = 3;
System.out.println(a == b); // false 两个引用没有引用同一对象
System.out.println(a == c); // true a自动拆箱成int类型再和c比较
}

}
最近还遇到一个面试题,也是和自动装箱和拆箱有点关系的,代码如下所示:

public class Test03 {

public static void main(String[] args) {
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;

System.out.println(f1 == f2);
System.out.println(f3 == f4);

}

}
首先需要注意的是f1、f2、f3、f4四个变量都是Integer对象引用,所以下面的运算比较的不是值而是引用。
简单的说,如果整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,所以上面的面试题中f1f2的结果是true,而f3==f4的结果是false。

&和&&的区别?
虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&

String和StringBuilder、StringBuffer的区别?
Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。

List、Map、Set三个接口存取元素时,各有什么特点?
List以特定索引来存取元素,可以有重复元素。Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。Map保存键值对(key-value pair)映射,映射关系可以是一对一或多对一

DML与DDL的区别?
DML(data manipulation language): 数据库操作语言。就是我们经常用到的 SELECT 、UPDATE 、INSERT 、DELETE 等;
DDL (data definition language): 数据库定义语言。就是我们经常用到的 CREATE 、ALTER 、DROP 等。DDL 主要是用在定义或改变表的结构、数据类型、表之间的链接和约束等初始化工作上;

说几种常见的sql优化
减少查询字段数;
表关联尽量用主键;
查询条件尽量避免模糊查询;
避免使用排序字段,排序字段尽量使用主键;
尽量使用限制查询条件;
查询条件使用有效索引。

JDBC 编程的步骤?
(1) 注册驱动;

(2) 获取连接对象 Connection;

(3) 创建 Statement 对象;

(4) 运行 SQL 语句;

(5) 处理结果;

(6) 关闭连接释放资源。

数据库性能优化有哪些方式?
SQL 优化:
尽量避免使用 SELECT *;
只查询一条记录时使用 limit 1;
使用连接查询代替子查询;
尽量使用一些能通过索引查询的关键字。
表结构优化:

尽量使用数字类型字段,提高比对效率;
长度不变且对查询速度要求高的数据可以考虑使用 char,否则使用 varchar;表中字段过多时可以适当的进行垂直分割,将部分字段移动到另外一张表;表中数据量过大可以适当的进行水平分割,将部分数据移动到另外一张表。

其它优化:

对查询频率高的字段适当的建立索引,提高效率;根据表的用途使用合适的数据库引擎;读写分离。	

Dubbo 开发流程
第一步:要在系统中使用 dubbo 应该先搭建一个注册中心,一般推荐使用 zookeeper;第二步:有了注册中心然后是发布服务,发布服务需要使用 spring 容器和 dubbo 标签来发布服务。并且发布服务时需要指定注册中心的位置;

第三步:服务发布之后就是调用服务。一般调用服务也是使用 spring 容器和 dubbo 标签来引用服务,这样就可以在客户端的容器中生成一个服务的代理对象,在 action 或者 Controller 中直接调用 service 的方法即可。

Zookeeper 注册中心的作用主要就是注册和发现服务的作用。类似于房产中介的作用,在系统中并不参与服务的调用及数据的传输。

阐述静态变量和实例变量的区别。
静态变量是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。

事务,什么是事务,为何用事务 ?
事物就是逻辑上的一组操作,组成这组操作的单元要么全部成功,要么全部失败。
事物的4个特性:
原子性:不可分割
一致性:事物发生后要保证数据的一致
隔离性:一个事物执行过程中,不应该受到其它食物的干扰
持久性:事物一旦结束,数据持久化到数据库
不考虑隔离性 会产生什么问题?
脏读:一个事物读取到另一个事物未提交到的数据。 虚读:一个事物读取到另一个事物提交的数据
设置事物的隔离级别来解决。

两个项目之间如何实现通信?
webservice接口
http接口实现resultful风格
消息中间件,apache kafka,rabbitmq

一个java类包含哪些内容?
属性,方法,内部类,构造方法,代码块

java中多态的实现原理
所谓多态,指的就是父类引用指向子类对象,调用方法事会调用子类的实现而不是父类的实现。多态的实现关键在于动态绑定

构造器(constructor)是否可被重写(override)?
构造器不能被继承,因此不能被重写,但可以被重载

接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以实现实体类?
接口可以继承接口
抽象类里可以有普通方法,因此抽象类可以实现接口,只需要实现接口内的所有方法
抽象类可以有普通方法,变量也不需要是常量。因此抽象类可以实现实体类

java中方法参数传递方式是按值传递。
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。

谈谈你对MVC的理解
MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。
MVC中的模型、视图、控制器它们分别担负着不同的任务。
视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。
模型: 模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提供数据。这提高了应用程序的重用性
控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。
然后根据处理的结果调用相应的视图来显示处理的结果。
mvc的处理过程:首先控制接受用户的请求,调用相应的模型来处理业务,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户

手写一个冒泡排序
/**

  • 冒泡排序

  • 基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,

  • 让较大的数往下沉,较小的往上冒。

  • 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

  • @author james
    */

    public class paixu {

    public static void main(String[] args) {
    int a[] = {23,45,64,34,25,53,34,56,43,54,24};
    int temp = 0;
    for (int i = 0; i < a.length-1; i++) {
    for (int j = 0; j < a.length-1-i; j++) {
    if (a[j]>a[j+1]) {
    temp = a[j];
    a[j] = a[j+1];
    a[j+1] = temp;
    }
    }
    }
    for (int i = 0; i < a.length; i++) {
    System.out.println(a[i]);
    }
    }

    }

wait()与sleep()的区别
sleep()来自Thread类,和wait()来自Object类。调用sleep()方法的过程中,线程不会释放对象锁。而调用wait方法线程会释放对象锁。

sleep(milliseconds)需要指定一个睡眠时间,时间一到会自动唤醒.而wait()需要配合notify()或者notifyAll()使用。

HashMap和HashTable的区别?
都是使用key-value的形式来存储数据,区别是HashTable基于Dictionary类,而HshMap是基于AbstractMap。
HashMap是单线程安全的,HashTable是多线程安全的。
HashMap允许存在一个为null的key和多个weinull的value,但是hashtable中的key和value都不允许为空。

说出几个Lilux常用命令
Cd跳转到目录
Pwd 获取当前路径
Su 切换用户
Ll 查看当前目录下文件和目录
Tail 查看文件
Rm –rf 删除文件
Vi 修改文件
Mv 移动/重命名 文件或文件夹
Mkdir 创建文件夹
Rm –f 删除文件夹
Tar 打包/解压
Grep 查找想要的信息

什么是java序列化,如何实现java序列化?或请解释Serializable接口的作用
无论何种类型的数据,都是以二进制的形式在网络上传送,为了由一个进程把Java对象发送给另一个进程,需要把其转换为字节序列才能在网络上传送,把JAVA对象转换为字节序列的过程就称为对象的序列化,将字节序列恢复成Java对象的过程称为对象的反序列化,(然后java.io.ObjectOutPutStream的writeObject(Object obj)的方法就可以 将参数指定的对象进行序列化 并且把得到的字节流写到一个目标输出流上去)

只有实现了 serializable和Externalizable接口的类的对象才能被序列化 后者是前者的子类 实现这个借口的类完全由自身来控制序列化的行为,而仅仅实现前者的类可以采用默认的序列化方式。实现这两个接口 标志着对象可以被序列化了。。。

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

简述一下springmvc的工作原理
1.用户向前端控制器(DispatherServlet)发起请求

2.前端控制器(DispatherServlet)解析URL,请求处理映射器(HandlerMapping)。

3.处理映射器(HandlerMapping)返回Handler配置的所有相关对象。

4.前端控制器(DispatherServlet)根据获得的Handler,选择一个合适的HandlerAdapter。

(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法)。

5.开始执行Handler(Controller),业务逻辑处理。

6.Handler处理完业务逻辑,返回ModelAndView对象给前端控制器(DispatherServlet)。

7.视图解析器(ViewResolver)返回真正的视图对象(View),前端控制器根据模型数据和视图对象,进行

视图渲染。

8.最后将渲染的试图以(html/json/xml)的形式响应用户。

array和arraylist的区别?
array可以存储基本数据类型和对象,arraylist只能存储对象。
array是指固定大小的,而arraylist是大小自动扩展的
array的内置方法没有arraylist多

List、Set、Map 之间的区别是什么?

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页