Java面试题自我总结
1..Spring是什么
Spring是一个轻量级的loc和aop容器框架;
2..Spring的优点
Spring属于低侵入式设计,代码污染极低;
Spring提供了AOP技术,从而提供更好的复用;
3..Spring的Ioc理解
Ioc就是控制反转,指创建对象的控制权交给Spring框架管理;
Spring的Ioc有三种注入方式:构造注入,setter注入,根据注解注入;
4..Spring的AOP的理解
AOP面向切面编程;
AOP实现的关键在于代理模式,主要分为动态代理和静态代理;
5..Spring的通知类型有哪些
前置通知,后置通知,环绕通知,返回后通知,抛出异常后通知;
6..Spring Bean的生命周期
实例化--->属性赋值-->初始化-->销毁;
7.vue的生命周期
八个:创建前后-->载入前后-->更新前后-->销毁前后;
8.ArrayList和LinkedList的区别
ArrayList底层是动态数组,查询速度很快,但是插入数据慢;
LinkedList底层是链表结构,插入数据快,但是查询速度慢;
9.如何实现一个IOC容器
配置文件配置包扫描路径;
递归包扫描获取.class文件;
反射,确定需要交给IOC管理的类;
对需要注入的类进行依赖注入;
10.Spring Cloud
底层协议:Http协议
注册中心:eureka
Java基础
1.JDK和JRE有什么区别
JDK是Java开发工具包,提供了Java的开发环境和运行环境。
JRE运行环境,为Java的运行提供了所需环境
2.==和equals的区别是什么
==比较的的是地址值
equals比较的是值是否相等
3.两个对象的hashCode()相同,则equals()也一定为true,对吗?
不对,两个对象的hashCode()相同,equals不一定为true;
4.final在Java中有什么作用
final修饰的类叫做最终类,该类不能被继承;
final修饰的方法不能被重写;
final修饰的变量叫常量,常量必须初始化,初始化之后的值就不能被修改;
5.Spring属于基础的数据类型吗
Spring不属于基础类型,基础类型有8种,byte,boolean,char,short,int,float,long,double;
6.Java中操作字符串都有哪些类:Spring,SpringBuffer,SpringBuilder
Spring生成的对象是不可变的对象,每次操作都会生成新的Spring对象,而SpringBuffer,SpringBuilder可以在原有对象的基础上进行操作;
SpringBuffer和SpringBuilder最大的区别在于,SpringBuffer是线程安全的,而SpringBuilder是非线程安全的,但SpringBuilder的性能却高于SpringBuffer的,
所以在单线程环境下推荐使用SpringBuilder,多线程的环境下推荐使用SpringBuffer;
7.Spring a = "i"与String a = new String("i")一样吗?
不一样,因为内存的分配方式不一样.String a = "i" 的方式,Java虚拟机会将其分配到常量池中;而String a = new String("i") 则会被分到堆内存中;
8.如何将字符串反转
使用StringBuilder或者StringBuffer的reverse()方法;
9.Spring类的常用方法都有哪些
indexOf():返回指定字符的索引
charAt():返回指定索引处的字符
replace():字符串替换
trim():去除字符串两端空白
split():分割字符串,返回一个分割后字符串数组
getBytes():返回字符串的byte类型数组
length():返回字符串的长度
toLowerCase():将字符串转成小写字母
toUpperCase():将字符串转成大写字符
substring():截取字符串
equals():字符串比较
10.抽象类必须要有抽象方法吗
不需要,抽象类不一定非要有抽象方法
11.普通类和抽象类有哪些区别
普通类不能包含抽象方法,抽象类可以包含抽象方法;
抽象类不能直接实例化,普通类可以直接实例化;
12.抽象类能用final修饰吗
不能,定义抽象类就是让其他类继承的,如果定义为final该类就不能被继承,这样就会产生矛盾,所以final不能修饰抽象类;
13.接口和抽象类有什么区别
实现:抽象类的子类使用extends来继承;接口必须使用implents来实现接口;
构造函数:抽象类可以有构造函数;接口不能有;
main:抽象类可以有main方法,并且我们能运行它;接口不能有main方法;
实现数量:类可以实现很多接口;但是只能继承一个抽象类;
访问修饰符:接口中的方法默认实现public修饰;抽象类的方法可以是任意访问修饰符;
14.Java中IO流分为几种
按功能来分:输入流,输出流;
按类型来分:字节流和字符流;
字节流和字符流的区别是:字节流可以传输图片,视频;而字符流只能传输文本文档;
15.files的常用方法都有哪些
Files.exists():检测文件路径是否存在;
Files.createFile():创建文件;
Files.createDirectory():创建文件夹;
Files.delete():删除一个文件或目录;
Files.copy():复制文件;
Files.move():移动文件;
Files.size():查看文件个数;
Files.read():读取文件;
files.write():写入文件;
16.Spring中Bean的注入方式
基于XML的配置
基于注解的配置
基于Spring config的配置;
容器
16.Java容器都有哪些
List容器,Set容器,Map容器;
17.Collection的作用
java.util.Collection是一个接口集合;它提供了对集合对象进行基本操作的通用接口方法;其直接继承接口有List与Set;
18.List,Set,Map之间的区别是什么
List是有序的,Set是无序的;List元素可以重复,Set元素是不可重复的
Map线程安全,Set线程不安全;
19.HashMap的实现原理
HashMap的基本结构就是两种,一个是数组,另外一个是模拟指针,HashMap实际上是链表的数据结构,即数组和链表的结合体;
20.HashSet的实现原理
HashSet底层由HashMap实现
HashSet的值存放与HashMap的key上
HashMap的value统一为PRESENT
21.如何实现数组和List之间的转换
List转换成数组:调用ArrayList的toArray方法
数组转换成List:调用Arrays的asList方法;
22.Array和ArrayList有何区别
Array可以容纳基本类型和对象,而ArrayList只能容纳对象
Array是指定大小的,而ArrayList大小是固定的
Array没有提供ArrayList那么多功能,比如addAll,removeAll和iterator等
23.迭代器Iterator是什么
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,迭代器通常被称为"轻量级"对象,因为它创建代价小;
24.Iterator和ListIterator有什么区别
Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List;
Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向;
多线程
25.并行和并发有什么区别
并行是只两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生;
并行是在不同实体上的多个事件,并发是在同一实体上的多个事件;
一台处理器对应一个线程叫并行,一台处理器对应多个线程叫并发;
26.线程和进程的区别
进程是程序员运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程;
27.守护线程是什么
是个服务线程,就是服务其他线程的
28.创建线程有哪几种方式
继承Thread类创建线程类;
通过Runnable接口创建线程类;
通过Callable和Future创建线程;
29.线程有哪些状态
线程通常都有五种状态,创建,就绪,运行,阻塞和死亡;
30.线程池都有哪些状态
线程池有五种状态:Running,ShutDown,Stop,Tiding,Terminated;
31.在Java程序中怎么保证多线程的运行安全
线程安全在三个方面体现:原子性,可见性,有序性;
反射
32.什么是反射
通过反射可以获取任意类的名称,package信息,所有属性,方法,注解,类型,类加载器等;
获取任意对象的属性,并且能改变对象的属性
调用任意对象的方法;
反射的方式:
Class.forName(“类的全路径”);
类名.class
对象.getClass();
33.什么是Java序列化
序列化:将Java对象转换成字节流的过程;
反序列化:将字节流转换成Java对象的过程;
34.怎么实现动态代理
首先必须定义一个接口,还要有一个InvocationHandler处理类.
对象拷贝
35.为什么要使用克隆
想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要克隆了,Java语言中克隆针对的是类的实例;
36.如何实现对象克隆
两种方式:1.实现Cloneable接口重写Object类中的clone()方法;
2.实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆;
37.深拷贝和浅拷贝区别是什么
浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝;
深拷贝是将对象及值复制过来,两个对象修改其中任意的值不会改变,这就是深拷贝;
Java Web
38.session 和 cookie 有什么区别
1.存储位置不同,Cookie在浏览器端存储,Session在服务器端存储;
2.存储容量不同,Cookie存储容量很小,Session存储容量可以很大;
3.安全性不同,Cookie安全性较低,Session安全性很高;
39.Session的工作原理
session的工作原理是客户端登录完成之后,服务器会创建对应的session,session创建完之后,会把session的id发送到客户端,客户端再存储到浏览器中;
这样客户端每次访问服务器时,都会带着sessionid,服务器拿到sessionid之后,在内存找到与之对象的session这样就可以正常工作了;
40.如何避免sql注入
PreparedStatement接口(简单又有效的方法);
使用正则表达式过滤传入的参数
字符串过滤
异常
41.throw和throws的区别
throws是用来声明一个方法可能抛出所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理;
而throw则是指抛出的一个具体的异常类型;
42.final,finally,finalize的区别
final是最终
finally是在try--catch代码块中,处理异常时使用,就是出现异常了,也会执行此代码,通常用来关闭资源;
finalize是一个方法 , 该方法一般由GC垃圾回收器来调用
43.try-cathch-finally中那个部分可以省略
catch可以省略;
44.常见的异常类有哪些
NullPointerException:当应用程序试图访问空对象时,则抛出该异常;
SQLException:提供关于数据库访问错误或其他错误信息的异常;
IndexOutBoundsException:指示某排序索引超出范围时抛出;
网络
45.get和post请求有哪些区别
GET能被缓存,POST不能缓存;
GET在浏览器回退时是无害的,而POST会再次提交请求;
GET请求只能进行url编码,而POST支持多种编码方式;
46.如何解决跨域
在京淘项目中用到了注解@Cross Origin来解决跨域
设计模式
47.说一下你熟悉的设计模式
设计模式一共有23种,我们常用的有单例模式,工厂模式;
单例模式中有懒汉式写法和饿汉式写法,懒汉写法线程不安全,饿汉线程安全;
饿汉式:获取实例前他自己就先创建了实例,不等人,自己做;
懒汉式:等到获取实例的时候才去创建,等你来我在做;
Spring/Spring MVC
48.为什么要使用spring
Spring是一个轻量级的控制反转(Ioc)和面向切面(Aop)的容器框架;
轻量:从大小与开销两方面而言Spring都是轻量的;完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布;并且Spring所需的处理开销也是微不足道的;
此外,Spring是非入侵式的;代码污染极低;提供了AOP技术,有很好的复用性;
控制反转:Spring通过一种称控制反转的技术促进了松耦合
aop面向切面编程:
封装重复的代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性;
利用AOP可以对业务逻辑的各个部分进行隔离,
从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高开发的效率。
IOC:
IOC容器只要是用来管理对象之间的关联,降低对象的耦合性;
借助于"第三方"实现具有依赖的对象之间的解耦;
49.Spring常用的注入方式有哪些
Spring通过DI依赖注入实现IOC控制反转,常用的注入方式主要有三种
构造方法注入 , setter注入 , 基于注解注入;
50.Spring MVC的工作流程
DispatcherServlet(前端控制器)
HandlerMapping(处理器映射器)
HandlerAdapter(处理器适配器)
controller(处理器)
ViewReslover(视图解析器)
View(视图)
1.用户发送出请求到前端控制器
2.前端控制器收到请求调用处理器映射器
3.处理器映射器找到具体的控制器,生成处理器对象,返回给前端控制器
4.前端控制器调用处理器适配器
5.处理器适配器调用具体的处理器
6.处理器执行完返回执行完的对象
7.处理器适配器将处理器执行结果对象返回给前端控制器
8.前端控制器将接受到的对象传给视图解析器
9.视图解析器解析后返回具体的视图
10.前端控制器进行渲染响应给用户
51.正向代理和反向代理
正向代理可以屏蔽或隐藏客户端的信息(了解),保护了客户端的信息;
反向代理:客户端发来请求先由反向代理服务器拦截,然后反向代理服务器把请求转发给其他服务器,这样客户端就不知道访问的那台服务器,保护了服务器的信息;通常用Nginx做反向代理;可以对客户端隐藏服务器的IP地址
Spring Boot
52.什么是Spring Boot
主要是简化了Spring的难度,省略了繁重的配置,提供了各种启动器;
SpringBoot整合了SSM三大框架;
53.Spring Boot有哪些优点
容易上手,提升开发效率,开箱即用,远离繁琐配置;避免大量的Maven导入和版本冲突;
Spring Boot的核心注解是很什么
@SpringBootApplication,加载启动类上面的;
@ComponentScan:Spring组件扫描;
Redis 数据类型
五种类型与类比java的模型
- string --> String
- hash --> Hashmap
- list --> LinkList
- set --> HashSet
- sorted_set --> TreeSet
第二阶段面试题
1.数据库里索引的作用
主要是为了增加数据查询的速度,而且一张表里添加索引不能超过6个;
创建普通索引:create ind ex 索引名 on 表名(字段名)
查看索引:show index from 表名
2.什么是数据库的事物
事物就是为了保证原有事物完整性和一致性;
3.事物的四大特征
原子性,一致性,持久性,隔离性;
4.数据库里的字段有哪些,各有什么用
主键约束:保证了值得唯一,不能为空,且可以自动递增;
外键约束:两表之间的关联用外键约束;
非空约束:保证了该字段的内容 不能为空;
唯一约束:保证了值得唯一;
默认约束:给指定的字段设置默认值,不输入值时就是设定的默认值;
5.数据库的优化方案有哪些
查询时,能不用*就不用,尽量写全字段名称;
添加索引;每张表控制在6个索引以内;
尽量避免使用order by;
查看慢查询日志,找出执行时间长的SQL进行优化
6.什么是Spring IOC
IOC是Spring的控制反转;把一个类放到Spring容器中,有Spring容器控制对象的生命周期;
7.多表联查的方式
笛卡尔积方式,join方式,子查询;
8.条件查询
满足了条件的才查 distinct(去重) / where(过滤条件) / like(模糊查询) / limit(分页) /order by(排序) / between...and[在..之间]
9.聚合函数
概述 指把一列的值,聚合在一起,统一做分析 max() / min() / sum() / avg() / count()
使用聚合函数一定要分组;
10.MySQL中都有哪些触发器?
- Before Insert
- After Insert
- Before Update
- After Update
- Before Delete
- After Delete
11.MySQL的隔离级别
读取未提交;
读取已提交;
可重复读;(默认是可重复读)
可串行化;
Java面试题自我总结相关推荐
- java后台面试自我介绍_java腾讯远程面试后台研发岗面试题分享
分享一个腾讯远程面试java后台研发岗位的面试经过,简单来说,自我介绍.经历分享.问题解答以及敲代码. 1. 上来先自我介绍. 2. 讲讲自己的项目经验. 3. ArrayList和LinkedLis ...
- Java后端面试题自我总结
文章目录 前言 一.Java基础篇 ==final和static的区别== ==String a = "123"; String b = "123"; a=== ...
- java写测试小工具,java试题自我测试小工具
java试题自我测试小工具 北京石油化工学院 数理系 科 072 071616 刘红育 1 Java 语言综合设计实验报告 --GUI 编程设计题目: Java 试题自我测试小工具 班级: 学号: 姓 ...
- CentOS部署Harbor镜像仓库(1),java技术栈自我理解面试题通俗解说
[]( )环境信息 今天要部署的Harbor版本是1.9.0,本次部署用的机器信息如下: 操作系统:CentOS Linux release 7.7.1908 Docker:19.03.2 docke ...
- 46 道阿里巴巴 Java 面试题,你会几道?
做技术的有一种资历,叫做通过了阿里的面试. 这些阿里Java相关问题,都是之前通过不断优秀人才的铺垫总结的,先自己弄懂了再去阿里面试,不然就是去丢脸,被虐. 希望对大家帮助,祝面试成功,有个更好的职业 ...
- Java面试题:kafka幂等性+事务
一面: hashmap,怎么扩容,怎么处理数据冲突?怎么高效率的实现数据迁移? Linux的共享内存如何实现,大概说了一下. Linux 中的用户模式和内核模式是什么含意? 在 Java 中 Lock ...
- java builder pool_每周10道Java面试题:String, String Pool, StringBuilder
每周10道 Java 面试题由 ImportNew 整理编译自网络. 1. 写出下面代码的运行结果. int src = 65536; Integer dst = new Integer(65536) ...
- 最强京东Java面试题(共现场4面)
一面(基础面:约1个小时) 自我介绍,主要讲讲做了什么和擅长什么 springmvc和spring-boot区别 @Autowired的实现原理 Bean的默认作用范围是什么?其他的作用范围? 索引是 ...
- 最新蚂蚁金服Java面试题:Docker+秒杀设计+RocketMQ+亿级数据设计
蚂蚁金服一面: 1 自我介绍 2 讲一下ArrayList和linkedlist的区别,ArrayList的扩容方式,扩容时机. 3 hashmap的实现,以及hashmap扩容底层实现. 4 NIO ...
最新文章
- jsp 特殊字符转义
- express ajax分页实例,element+express+mongoose实现分页查询
- php join a.id b.id,mysql,sql_MySQL A left join B on B.cid=A.id 左链接查询失败,求解,mysql,sql - phpStudy...
- Vue框架之条件与循环的使用
- 【学习笔记】一:JavaScript简介
- 【优化求解】基于matlab粒子群算法求解干扰受限无人机辅助网络优化问题【含Matlab源码 230期】
- 安装与配置OCS服务器时可能会出现的问题
- NumPy库---介绍
- c语言程序设计题题库,c语言程序设计试题题库含答案
- 电子元器件封装知识大全(内含AD封装库下载资料)
- visio教程仓库流程图_完整的VISIO教程(绝对干货)
- linux编译webengine,am3352请问如何在linux3.8上移植带有webengine的qt5?
- 阿里云消息服务(MNS)简单介绍
- 同一个服务器装oracle,windows下同一台服务器上装有两个ORACLE数据库实例,通过命令启停数据库...
- FBreader问题记录及多端同步心得开篇
- 【ShareSDK社会化分享】新浪微博分享网络图片问题
- raspberry pi系统配置
- 李峋的爱心表白代码来了
- Win10问题篇:解决电脑连不上网的问题。
- 2022-4-28作业
热门文章
- 设计UI的语言——XAML
- 【正点原子Linux连载】第三章 RV1126开发环境搭建 摘自【正点原子】ATK-DLRV1126系统开发手册
- 计算机选择题7,计算机选择题7.doc
- delegation机制
- Java 12 来了,我们应该采用嘛?
- Kafka 使用SASL接入点PLAIN机制收发消息(集成Spring Boot)
- ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker
- win11 22H2 连接共享打印机失败
- java中什么叫引用
- 媒体报道 | 《数据安全治理自动化技术框架(DSAG)》白皮书诞生,探索数据安全治理技术“最优解”