一、java基础
1,Hashmap底层实现原理
HashMap基于hashing原理,通过put、get储存、获取对象。
当键值对传递给put方法时,它会调用键对象的hashCode方法来计算hashcode,然后找到bucket位置来储存值对象。
当获取对象时,通过键对象的equals方法找到正确的键值对,反回值对象。

2、如何终止一个正在运行的线程 
①,自然结束,当run方法完成后线程终止。
②,使用stop方法强行终止线程(不推荐)
③,使用interrupt方法中断线程

3、sleep()和wait()的区别
①,类的不同:sleep() 来自 Thread,wait() 来自 Object。
②,释放锁:sleep() 不释放锁;wait() 释放锁。
③,用法不同:sleep() 时间到会自动恢复;wait() 可以使用 notify()/notifyAll()直接唤醒。

4、run()和start()的区别
start() 方法用于启动线程,只能调用一次。
run() 方法用于执行线程的运行时代码,可以重复调用

5、java如何会造成内存溢出
①,内存中加载的数据量太大(如一次从数据库取出过多数据)
②,集合类中有对对象的引用,使用完后未清空,使得JVM不能回收
③,代码中存在死循环,或循环产生过多重复的对象实体
④,使用的第三方软件中的BUG
⑤,启动参数内存值设定的过小

6、内存溢出的解决方案:
①,修改JVM启动参数,直接增加内存
②,检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误
③,对代码进行走查和分析,找出可能发生内存溢出的位置

7、&和&&的区别
①,&和&&都是逻辑运算符号,&&又叫短路运算符
②,&不管前面条件是否正确,后面都执行。&&前面条件正确时后面才执行,不正确不执行

8、Error和Exception的区别
①,Error类和Exception类的父类都是throwable类,
②,Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等
③,Exception类表示程序可以处理的异常,可以捕获且可能恢复

7、异常捕获原理
异常发生原因: 用户输入了非法数据、要打开的文件不存在、网络通信时连接中断、JVM内存溢出

8、异常类型
语法错误、运行错误、逻辑错误

9、IO 流类型
按流向分:输入流(input)、输出流(output)
按类型分:
字节流(InputStream/OutputStream)
字符流(Reader/Writer)
节点流(低级 流:FileInputStream/FileOutputStream/FileReader/FileWriter/PrintStream/PrintWriter)

处理流(高级流)
转换流:InputStreamReader/OutputStreamWriter
缓冲流:BufferedInputStream/BufferedOutputStream/BufferedReader/BufferedReader

10、跨域问题
跨域:指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源(域名,协议,端口)策略造成的,是浏览器施加的安全限制。
解决跨域:jsonp
dataType: ‘jsonp’,jsonp:“callback”,

11、get与post区别

  1. Get是不安全的,在传输过程,数据被放在请求的URL中。Post的所有操作对用户不可见
  2. Get传送的数据量较小,主要原因是受URL长度限制。Post传送的数据量较大,一般默认不受限制。
  3. Get执行效率却比Post方法好。Get是form提交的默认方法

12、java泛型
泛型就是在定义类、接口、方法的时候不局限地指定某一种特型,而让调用者来决定用哪一种类型的参数。

13、java反射机制
反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为反射机制。

14、String str="i"与 String str=new String(“i”)区别?
String str=“i”,Java 虚拟机会将其分配到“常量池”中;
String str=new String(“i”) 会被分到“堆内存”中。

15、并行和并发有什么区别?
并行:多个处理器或多核处理器同时处理一个任务。
并发:多个任务在同一个 CPU 核上,按细分的时间片轮流执行,从逻辑上来看那些任务是同时执行。

16、线程和进程的区别?
一个程序下至少有一个进程,一个进程下至少有一个线程,一个进程下也可以有多个线程

17、什么是 java 序列化?什么情况下需要序列化?
Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出来。
以下情况需要使用 Java 序列化:
1),想把的内存中的对象状态保存到一个文件中或者数据库中时候;
2),想用套接字在网络上传送对象的时候;
3),想通过RMI(远程方法调用)传输对象的时候。

18、java 容器都有哪些?
两大类:
Collection :List、Set
Map :HashMap 、TreeMap、ConcurrentHashMap、Hashtable

19、session 和 cookie 有什么区别?
1),存储位置不同:session 存储在服务器端,cookie 存储在浏览器端
2),安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修改
3),容量和个数限制:cookie 有容量限制,每个站点下的 cookie 也有个数限制
4),存储的多样性:session 可以存储在 Redis 中、数据库中、应用程序中;而 cookie 只能存储在浏览器中。

20、常见的异常类有哪些?
NullPointerException 空指针异常
ClassNotFoundException 指定类不存在
NumberFormatException 字符串转换为数字异常
IndexOutOfBoundsException 数组下标越界异常
ClassCastException 数据类型转换异常
FileNotFoundException 文件未找到异常
NoSuchMethodException 方法不存在异常
IOException IO 异常
SocketException Socket 异常

21、在 Java 程序中怎么保证多线程的运行安全?
1),使用安全类,比如 Java. util. concurrent 下的类。
2),使用自动锁 synchronized。
3),使用手动锁 Lock。

22、String,Stringbuffer,StringBuilder区别
String:值不可改变
Stringbuffer:线程安全,速度慢
StringBuilder:线程不安全,速度快,

23、String 类的常用方法都有那些?
length():求字符串的长度
indexOf():求某个字符在字符串中的位置
charAt():求一个字符串中某个位置的值
equals():比较两个字符串是否相同
replace():替换字符串
split():拆分此字符串。
substring(1,5):字符串截取

24、ArrayList和LinkedList有什么区别?
ArrayList是Array(动态数组)的数据结构,而LinkedList是Link(链表)的数据结构。
随机访问(get和set)时,ArrayList优于LinkedList;新增和删除操作,LinedList比较占优势

25、JVM、JRE和JDK的区别:
JVM:java虚拟机,用于保证java的跨平台的特性。 java语言是跨平台,jvm不是跨平台的。
JRE:java的运行环境,包括jvm+java的核心类库。
JDK:java的开发工具,包括jre+开发工具

26、== 和 equals 的区别是什么?
"=="是判断两个变量或实例是不是指向同一个内存空间。
"equals"是判断两个变量或实例所指向的内存空间的值是不是相同。

27、final用处,用法
final修饰的变量:只能赋值一次,无法改变值
final修饰的方法变量:只能给它赋值一次,不能改变变量的值
final修饰的方法:无法被覆盖
final修饰的类:无法被继承

28、static用处,用法
被static修饰的成员变量和方法:可以用类直接调用

29、finally
在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)

30、抽象类必须要有抽象方法吗?
不是必须

31、普通类和抽象类有哪些区别?

  1. 抽象类声明要用abstract关键字
  2. 抽象类里的方法不能有main方法, 只能声明方法
  3. 抽象类被继承时,子类实现其所有抽象方法,普通方法不用实现
    4)抽象类可以应用多态,但是普通类不可以。
    5)抽象类不能直接实例化,普通类可以直接实例化。

32、抽象类能使用 final 修饰吗?
不能,抽象类是用来继承的

33、List、Set、Map 之间的区别是什么?
List:
①可以允许重复的对象。
②可以插入多个null元素。
③有序容器,保持每个元素插入顺序,输出顺序就是插入顺序。
④常用的实现类有:ArrayList(数组形式存储,线程不同步)、LinkedList(链表形式存储,线程不同步) 和 Vector(先进后出,线程安全)。
Set:
①、无序不重复,可用于去重,有一个null值
Map:
①、Map 里你可以拥有随意个 null 值,但最多只能有一个 null 键。

34、HashMap 和 Hashtable 有什么区别?
1) 历史原因: Hashtable继承Dictonary类, HashMap继承自abstractMap
2) HashMap允许空的键值对, 但最多允许一个空键,允许多个空值,而HashTable不允许。
3) HashTable同步,而HashMap非同步,效率上比HashTable要高
4)HashMap非线程同步,Hashtable 线程安全,TreeMap:按键顺序(升序)

35、如何决定使用 HashMap 还是 TreeMap
TreeMap:得到一个有序的结果
HashMap:HashMap有更好的性能,大多不需要排序的时候我们会使用HashMap

36、创建线程有哪几种方式?
1)继承Thread类,重写run()函数
2)实现Runnable接口,重写run()函数
3)实现Callable接口,重写call()函数

37、线程有哪些状态?
四种:就绪,执行,阻塞,挂起

38、java多少种设计模式
23种

39、java三大特征
java的三大特征是封装、继承、多态
封装:也被称为信息隐藏
继承:是一个类继承另一个类
多态:就是表现的行为不同

31,Java支持多继承吗?
Java不支持多继承,每个类只允许继承一个类,但可实现多个接口。

32,重写(Override)和重载(Overload)是什么?
重载:函数名相同,参数不同,可以改变返回值类型,参数的个数和类型
重写:和父类的的方法名称、参数完全相同。

33,Int和integer的区别?
Int是Java的8中基本数据类型之一,integer是int的封装类。
Int类型的默认值为0,integer默认值为null,区别在于,integer能区分出null值和0的区别。

34,冒泡排序
int a[] = {1,2,3,4,5};
for(int i=0;i<a.length-1;i++){
for(int j=i+1;j<a.length;j++){
if(a[i]>a[j]){
int k = a[i];
a[i] = a[j];
a[j] = k;
}
}
}

35、float与double的区别?
double精度高,有效数字16位,float精度7位。
double消耗内存是float的两倍。
double的运算速度比float慢。

36、如何将字符串反转?
使用 StringBuilder 或者 stringBuffer 的 reverse() 方法

37、java运算函数
①,Math.floor(num):向下取整
②,Math.round(num):四舍五入
③,Math.abs(num):求绝对值
④,幂函数:Math.pow(x,2)-平方,Math.pow(x,3)-立方
⑤,Math.sqrt(num):平方根

38、接口和抽象类有什么区别?
①,抽象类用 extends 继承,接口用 implements 实现
②,抽象类可以有构造函数,接口不能有
③,类可以实现很多个接口,但是只能继承一个抽象类
④,接口中方法默认使用 public 修饰,抽象类中方法可以用任意访问修饰符

39、说一下 HashSet 的实现原理?
HashSet 基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,HashSet 不允许重复的值

40、迭代器 Iterator 是什么?
Iterator 接口提供遍历任何 Collection 的接口,我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移除元素。

41、notify() 和 notifyAll() 有什么区别?
notifyAll() 会唤醒所有的线程,notify() 只会唤醒一个线程

42、throw 和 throws 的区别?
throw:是真实抛出一个异常
throws:是声明可能会抛出一个异常

43、说一下 JSONP 实现原理?
jsonp:它是利用script标签的 src 连接可以访问不同源的特性,加载远程返回的“JS 函数”来执行的

44、spring 事务实现方式有哪些?
声明式事务:声明式事务也有两种实现方式,基于 xml 配置文件的方式和注解方式(在类上添加 @Transaction 注解)。
编码方式:提供编码的形式管理和维护事务。

45、下列说法正确的有(C)
A. class中的constructor不可省略
B. constructor必须与class同名,但方法不能与class同名
C. constructor在一个对象被new时执行
D.一个class只能定义一个constructor

46、下面哪些是Thread类的方法(ABD)
A start() B run() C exit() D getPriority()

47、下列属于关系型数据库的是(AB)
A. Oracle B MySql C IMS D MongoDB

48、下列说法正确的是(AC)
A LinkedList继承自List
B AbstractSet继承自Set
C HashSet继承自AbstractSet
D WeakMap继承自HashMap

49、下面哪个流类属于面向字符的输入流( D)
A BufferedWriter B FileInputStream C ObjectInputStream D InputStreamReader

50、Java接口的修饰符可以为(CD)
A private B protected C final D abstract

51、下面哪些是对称加密算法(AB)
A DES B AES C DSA D RSA

52、下列哪种异常是检查型异常,需要在编写程序时声明 (C)
A,NullPointerException
B,ClassCastException
C,FileNotFoundException
D,IndexOutOfBoundsException

53、下列语句那一个正确(B)
A. java程序经编译后会产生machine code
B. java程序经编译后会产生 byte code
C. java程序经编译后会产生DLL
D. 以上都不正确

54、下列哪一种叙述是正确的(D)
A. abstract修饰符可修饰字段、方法和类
B. 抽象方法的body部分必须用一对大括号{}包住
C. 声明抽象方法,大括号可有可无
D. 声明抽象方法不可写出大括号

55、下列语句正确的是(A)
A. 形式参数可被视为local variable
B. 形式参数可被字段修饰符修饰
C. 形式参数为方法被调用时,真正被传递的参数
D. 形式参数不可以是对象

56、下列关于修饰符混用的说法,错误的是( D):
A.abstract不能与final并列修饰同一个类
B.abstract类中可以有private的成员
C.abstract方法必须在abstract类中
D.static方法中能处理非static的属性

57、 java中的两个保留字是什么(AC)
A. const
B. import
C. doto
D. implements

58、关于实例方法和类方法,以下描述正确的是:(D )
A. 实例方法只能访问实例变量
B. 类方法既可以访问类变量,也可以访问实例变量
C. 类方法只能通过类名来调用
D. 实例方法只能通过对象来调用

59、类方法(static修饰)和实例方法(无static修饰)区别
1、类方法是属于整个类,而不属于某个对象。
2、类方法只能访问类成员变量,不能访问实例变量,而实例方法可以访问类成员变量和实例变量。
3、类方法的调用可以通过类名.类方法和对象.类方法,而实例方法只能通过对象.实例方法访问。
4、类方法只能访问类方法,而实例方法可以访问类方法和实例方法。
5、类方法不能被覆盖,实例方法可以被覆盖

60、不能用来修饰interface的有(ACD)
A.private
B.public
C.protected
D.static

61,string通过空格分割
String [] arr = str.split("\s+");

62,string通过回车分割
String [] arr = str.split("\n");

二、·spring框架
1、什么是aop?
aop 是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
简单说:统一处理某一“切面”(类)的问题的编程思想,比如统一处理日志、异常等。

3,什么是ioc?
ioc:控制反转,是 spring 的核心,对于 spring 框架来说,就是由 spring 来负责控制对象生命周期和对象间的关系

3,spring注入方式
构造函数注入
set注入
p空间名称注入
spel表达式注入

三、SpringBoot框架
1、SpringBoot跨域请求
直接采用SpringBoot的注解@CrossOrigin,Controller层在需要跨域的类或者方法上加上该注解即可。

2、Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
@SpringBootApplication,启动类上的注解,它包含3 个注解:
.@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能
.@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置选项
.@ComponentScan:Spring组件扫描

3、Spring Boot 的配置文件有哪几种格式?它们有什么区别?
v.properties 和 .yml,它们的区别主要是书写格式不同。

4、Spring Boot 自动配置原理是什么?
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下能否有这个类去自动配置

四、SpringMvc框架
1、什么是SpringMVC
Spring MVC是MVC设计模式的轻量级Web框架,通过把Model,View,Controller分离,把复杂的web应用分成逻辑清晰的几部分,简化开发

2、 springmvc有哪些组件?
前端控制器 DispatcherServlet。
处理器映射器 HandlerMapping。
处理器适配器 HandlerAdater。
处理器 Handler。
模型和视图 ModelAndView。
视图解析器 ViewResolver。

3、SpringMVC流程
1)用户发送请求至前端控制器
2) 前端控制器收到请求后,调用处理器映射器,请求获取Handle
3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及拦截器,一并返回给前端控制器
4)前端控制器调用处理器适配器;
5)处理器适配器经过适配,调用具体处理器
6)处理器执行完成返回ModelAndView,处理器适配器将ModelAndView返回给前端控制器
8)前端控制器将ModelAndView传给视图解析器进行解析。视图解析器解析后返回具体View
10)前端控制器对View进行渲染视图,并响应用户

4、@RequestMapping的作用是什么?
将http请求,映射到相应的类、方法上。

5、@Autowired的作用是什么?
@Autowired 它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,通过@Autowired 的使用来消除 set/get 方法。

五、Mybatis框架
1、mybatis中#{}和KaTeX parse error: Expected 'EOF', got '#' at position 8: {}的区别? #̲{}是预编译处理,{}是字符替换
#相当于对数据 加上 双引号,$则是是什么就显示什么
如:id = #{id},如果传入的值是99,那么解析成sql时的值为 id =“99”
如:id = ${id},如果传入的值是99,那么解析成sql时的值为d = 99

2、mybatis缓存
1,一级缓存
同一个 SqlSession 对象, 在参数和 SQL 完全一样的情况先, 只执行一次 SQL 语句(如果缓存没有过期)

3、mybatis与hibernate区别?
①,简单逻辑:Hibernate和MyBatis都有相应的代码生成工具,可以生成简单基本的DAO层方法。
②,高级查询:Mybatis需手动编写SQL和ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可更专注于业务流程。
③,Hibernate的开发难度要大于Mybatis。主要由于Hibernate比较复杂,强大。而Mybatis则相对简单一些,并且Mybatis主要依赖于sql的书写。

六、数据库
1、数据库-索引类型
普通索引:它没有任何限制,用于加速查询
唯一索引:索引列的值必须唯一,允许有空值。
主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值,建表时创建
组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合。

2、数据库-内连接、外链接
内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件
外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行
左外连接:返回包括左表中的所有记录和右表中连接字段相等的记录
右外连接:返回包括右表中的所有记录和左表中连接字段相等的记录
全外连接:返回左右表中所有的记录和左右表中连接字段相等的记录

3、char和varchar区别
Char长度是固定的 Varchar是可变的

4、数据库引擎
①,InnoDB:事务型数据库的首选引擎,支持事务,支持行锁定和外键
②,MyISAM:默认数据库,常用,有较高的插入、查询速度,但不支持事务

5、mysql语句
①、创建表
CREATE TABLE Student
(
id INT(11) PRIMARY KEY,
name VARCHAR(25) NOT NULL,
age INT(11),
salary FLOAT
);
②,插入数据
insert into Student (id,name,age,salary) values (001,‘张三’,14,1000.00)
③,更新数据
update Student set age=15 where id=001
④ ,删除数据
delete from Student where id=001
⑤,删除表
drop table Student
⑥,创建索引
1),添加PRIMARY KEY(主键索引)
mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column )
2),添加UNIQUE(唯一索引)
mysql>ALTER TABLE table_name ADD UNIQUE ( column )
3),添加INDEX(普通索引)
mysql>ALTER TABLE table_name ADD INDEX index_name ( column )
4),添加多列索引
mysql>ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 )

6、数据库四大特性
原子性,一致性,隔离性,持久性

七、前端
1、React的生命周期
react的生命周期大概分为
组件装载:组件第一次渲染到Dom树
组件更新:组件state,props变化引发的重新渲染
组件卸载:组件从Dom树删除

2、Vue的生命周期
beforeCreate(创建前)、created(创建后)、beforeMount(载入前)、mounted(载入后)、beforeUpdate(更新前)、updated(更新后)、beforeDestroy(销毁前)、destroyed(销毁后)

更多推荐

java初级中级部分面试题