面试题总结(1)

目录

 

1. java基本数据类型

2. hashmap hashtable的区别

hashtable怎么实现线程安全的?

获取map的key和value?

3. java数组的长度可以改变吗?

4. java调用函数中传参是值传递 还是是引用传递

5. a=a+b a+=b的区别

6. arraylist linkedlist的区别

7. java抽象类和接口的区别

8. 什么是java常量 static静态变量

9. 什么是映射

10. 子类继承父类的执行循序

11. sql数据库优化

12. springboot配置

13. java比较两个对象


1. java基本数据类型

整数类型:byte 8位 short 16位 int 32位 long 64位

浮点类型:float 32位 double 64位

字符类型:char 16位

布尔类型:boolean

类型转换:byte->short->int->long->float->double

强制转换:①会损失精度,产生误差,小数点以后的数字全部丢失②容易超过取值范围

2. hashmap hashtable的区别

hashmap不是线程安全的 hashtable是线程安全

hashmap可以存储null键和null值 不保证元素的顺序不变 而hashtable不允许 且两者的的key值均不能重复

hashtable怎么实现线程安全的?

Hashtable是通过使用了 synchronized 关键字来保证其线程安全

获取map的key和value?

map.keySet():先获取map的key,然后根据key获取对应的value

3. java数组的长度可以改变吗?

不可以

①在初始化的时候申请足够大的空间

②用java几个的方式存储,如list set map

4. java调用函数中传参是值传递 还是是引用传递

在java中,当对象作为参数传递时,实际上传递的是一份“引用的拷贝”,参数的值就是该对象的引用一个副本,但还是是值传递,Java编程语言只有值传递参数

java8个基本类型由于是不可变的,所以在作为参数传递时,是值传递

引用传递是针对一个object对象作为参数传递

string是值传递 相当于new一个新的string的过程

即①基本数据类型传值,对形参的修改不会影响实参②引用类型传引用,形参和实参指向同一个地址(同一个对象),所以对参数的修改会影响到实际的对象③string integer double等immutablle的类型特殊处理 可以理解为传值 最后的操作不会修改实际对象

5. a=a+b a+=b的区别

主要区别是是否进行数据类型的转换 当两个操作同类型的时候 这两种形式的结果是没有差别的 当两个操作数据类型不同时 且左操作数的数据精度低 这是这两种形式有区别

6. arraylist linkedlist的区别

①都是list接口的实现 arraylist时动态数组 linkedlist是双向链表结构

②当随机访问(get set)操作时 arraylist比linkedlist效率要高 因为linkedlist是线性的数据存储形式 需要移动指针从前往后依次寻找

③当对数据进行增加和删除的操作时 linkedlist比arraylist效率高 因为arraylist是数组 在进行增加和删除时 会对操作之后的数据下标索引造成影响 需要进行数据的移动

7. java抽象类和接口的区别

①抽象类是包含抽象方法的类 关键字abstract

抽象类中有变量和方法 方法必须为public或protected

如果一个类继承一个抽象类 则子类必须实现父类的抽象方法 如果没有实现父类的抽象方法则子类必须定义为abstract

②接口在软件工程中指别人调用的方法或函数 java中是对行为的抽象 关键字interface

接口中可以有变量和方法 变量是public static final类型 方法不能有具体的实现即必须是抽象方法

借口是一种极度抽象的类型 比抽象更抽象 一般不在接口中定义变量

一个类遵循多个接口 如果一个非抽象类遵循了某个接口 则必须实现接口的所有方法 而抽象类不用

8. 什么是java常量 static静态变量

常量是指在程序运行过程中其值不能改变的量 关键字final

static静态变量 方法 在没有创建对象的前提下 直接通过类本身调用

9. 什么是映射

即map 用于存储一个由关键字和值组成的集合

put get remove keySet

10. 子类继承父类的执行循序

--父类的静态代码块--

--子类的静态代码块--

--子类主程序--

--父类的非静态代码块--

--父类的有参构造函数--

--父类的方法--

--父类的非静态代码块--

--父类的无参构造函数--

--子类的非静态代码块--

--子类的有参构造函数--

--子类Override了父类的方法--

静态代码块—主程序—非静态代码块—构造函数—一般方法

11. sql数据库优化

①sql语句大写 因为所有sql语句执行时都会转换成大写

②避免使用* 用具体字段

③尽量在where子句中进行null值判断 最好不要给数据库留null

④尽量在where子句中使用!= <> in not in操作符

⑤能用between 不用in 用exists代替in

⑥模糊查询like尽量少用%

⑦建立索引 较频繁座位查询条件的字段 是优化见效最快的解决方案

⑧分库分表分区

分库:按照业务分库

分表:历史表或归档表 用来存放历史数据 保证实时数据效率

12. springboot配置

①启动类spplication入口类 main入口方法

②springbootapplication核心注解

③springboot配置文件

④全局配置文件 application.properties或application.yml

⑤日志配置

13. java比较两个对象

重写equals()实现

重写equals()必须重写hashcode()

因为如果两个对象相同 那么hashcode值一定相同 而两个对象的hashcode值相同 对象不一定相同

猜你喜欢

转载自blog.csdn.net/damei2017/article/details/87903888