1、说一下SpringBoot的启动类?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它是SpringBoot的核心注解,
主要组合包含了以下3个注解:
@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功
能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的
选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude=
{DataSourceAutoConfiguration.class})。
@ComponentScan:Spring组件扫描。

Springcloud与springboot的区别?

1、springboot专注于快捷、方便的开发单个个体微服务
2、SpringCloud关注全局的微服务协调治理框架,他将springboot开发的一
个个单体微服务整合管理起来,为各个服务之间提供、配置管理、服务发现、断
路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务。
3、springboot可以离开springcloud独立的进行开发项目,反之springcloud
是离不开springboot的,属于依赖的关系
(service)spring业务层(IOC和AOP容器,可以通过事务操作)
(controller)springmvc表现层
(dao)mybatis持久层(操作数据库)

传参注解@requestBody和@requestParam的区别

1、@requestBody主要用来接收前端传递给后台的jsion
字符串中的数据的,最多只能有一个,get方法无请求体所以前端不能用get方
法提交
2、@requestParam可以有多个,用于接收url中的
K-v参数的传递
javase:

一、八种基本数据类型

1、int
2、short
3、byte
4、long
5、float
6、double
7、boolean
8、char

二、list、map、set集合的区别?

1、list集合中对象按照索引位置排序,可以有重复对象,允许按照对象在集合
中的索引位置检索对象
2、map中是以键值对的方式出现的,键不可以重复,值可以重复
3、set集合中对象不按照特定的方式排序,且没有重复对象,它的实现类能对
集合中的对象按照特定的方式排序。例如TreeSet

SSM框架

是springMVC,spring和mybatis框架的整合,是标
准的MVC模式,将整个系统划分为表现层,controller层,service
层,DAO层四层使用springMVC负责请求的转发和视图管理spring
实现业务对象管理,mybatis作为数据对象的持久化引擎

四、springmvc的工作原理?

0、用户发送请求到前端控制器、前端控制器对请求url进行解析,得到相应的
处理器映射器、
1、调用处理器映射器获得该处理器的Handdler配置的所有相关对象,最后以
HandlerExecutionchain对象的形式返回到前端控制器
2、前端控制器选择到一个合适的处理器适配器来调用处理器、处理器返回一个
modelAndview对象返回到前端控制器、此时的modelAndview只是一个逻辑视图
并不是一个真正的视图
3、前端控制器通过视图解析器将modelAndview分别解析为模型对象model和视
图对象view,并返回到前端控制器
5、视图渲染将model数据填充到request域,request根据view响应客户端
Mybatis:mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis
的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关
联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的
sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个
sqlSession,再执行sql命令。

五、Hashmap底层

Jdk1.8以后Hashmap的底层由数组+链表+红黑树组成,当链表的长度超过阈值(8)时链表
会转换为红黑树。
是map的一个子接口,不允许键值重复,允许空键和空值,线程不安全,效率高

什么是红黑树?

红黑树是一种自平衡的二叉查找树,
1、左子树上的所有结点的值均小于或等于根结点的值,右子树与之相反;
2、结点是红色或者黑色,根节点是黑色的,每个叶子的结点都是黑色的空结点;
3、从每个叶子到根的所有路径上都不能有两个连续的红色结点;
4、从任一结点到其每个叶子的所有路径都包含相同数目的黑色节点。
当插入或者删除节点时打破了规则后,应该做出一些调整(变色和旋转(左旋和
右旋))

六、创建线程有哪些方式?

1、继承Thread类创建线程
2、通过Runnable接口创建线程类
3、通过Callable和Future创建线程
4、通过线程池创建

八、synchronized和Lock有什么区别

①synchronized是java内置关键字,
在jvm层面,Lock是个java接口;
②synchronized无法判断是否获取锁的状态,
Lock可以判断是否获取到锁;
③synchronized会自动释放锁,
Lock需在finally中手工释放锁(unlock()方法释放锁)
④synchronized线程A占用锁后,线程B会一直等待;
而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可
以不用一直等待就结束了。
⑤synchronized的锁可重入、不可中断、非公平,
而Lock锁可重入、可判断、可公平(两者皆可);
⑥Lock锁适合大量同步的代码的同步问题,
synchronized锁适合代码少量的同步问题。

九、synchronized和volatile的区别是什么

①volatile本质是在告诉jvm当前变量在寄存器(工作内存)
中的值是不确定的,需要从主存中读取;
synchronized则是锁定当前变量,只有当前线程可以访问该变
量,其他线程被阻塞住。
②volatile仅能使用在变量级别;
synchronized则可以使用在变量、方法、和类级别的。
③volatile仅能实现变量的修改可见性,不能保证原子性;
而synchronized则可以保证变量的修改可见性和原子性。
④volatile不会造成线程的阻塞;
synchronized可能会造成线程的阻塞。
⑤volatile标记的变量不会被编译器优化;
synchronized标记的变量可以被编译器优化。

网络编程

一、什么是网络:将不同区域的计算机连接在一起(区域:局域网、城域网)
二、地址的概念:IP地址,确定网络上,一个绝对的地址或位置(例如房子的
地址)
三、端口:区分计算机软件的(房子的门牌号,2个字节,0-65535,工65536
个)在同一个协议下端口号不能重复,不同协议下可以重复(协议是用来传输数
据的)
四、资源定位:URL统一资源定位符,URI统一资源
五、数据的传输
1、协议:TCP、UDP协议(前者先连接后通信)
IO流四大类:InputStream(字节输入流),OutputStream(字节输出流),
Reader(字符输入流),Writer(字符输出流)
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的
所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这
种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射就是把java类中的各种成分映射成一个个的Java对象

四、什么是多线程?

一个程序被运行,就开启了一个进程,一个进程可以开启多条线程(cpu调
度的最小单位),多条线程可以并发(同时)执行不同的任务。
创建线程有哪些方式?
1、继承Thread类创建线程
2、通过Runnable接口创建线程类
3、通过Callable和Future创建线程
4、通过线程池创建

七、怎么保证多线程的运行安全【并发编程三要素】

1、原子性(一个或多个操作,要么全部执行并执行的过程不被打断,要么
都不执行)
2、可见性(多个线程操作一个共享变量时,其中一个线程对线程变量进行
修改后,其他线程可以立即看到修改的结果)
3、有序性(程序执行的顺序按照代码的先后顺序执行)

一、线程和进程的区别?

进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,
一个进程至少有一个线程。
进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,
减少切换次数,从而效率更高。
线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更
小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执
行。

九、死锁是什么?怎么防止死锁

死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互
相等待的现象,若无外力作用,它们都将无法推进下去。
死锁的四个必要条件:
互斥条件:一个资源每次只能被一个进程使用
请求和保持条件:一个进程因请求资源而阻塞时,对已获得的资源保
持不放
不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺
环路等待条件:若干进程之间形成一种头尾相接的循环等待资源关系
避免死锁最简单的方法就是阻止循环等待条件,将系统中所有的资源设置
标志位、排序,规定所有的进程申请资源必须以一定的顺序(升序或降序)
做操作来避免死锁。

三、说一下runnable和callable有什么区别

Runnable接口中的run()方法的返回值是void
Callable接口中的call()方法是有返回值的,是一个泛型,和Future、
FutureTask配合可以用来获取异步执行的结果。

五、sleep()和wait()有什么区别

最大的不同是在等待时wait会释放锁,而sleep一直持有锁。wait通常被用于线程间交
互,sleep通常被用于暂停执行。
1.sleep()方法是Thread类的静态方法,是线程用来控制自身流程的。
而wait()方法是Object类的方法,用于线程间的通信。
1.调用wait()的时候方法会释放当前持有的锁,而sleep方法不会释放
锁。
1.①sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线
程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复
运行状态。
②调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等
待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定
池准备

六、创建线程池有哪几种方式

①.newFixedThreadPool(intnThreads)
创建一个固定长度的线程池,每当提交一个任务就创建一个线程,直
到达到线程池的最大数量,这时线程规模将不再变化,当线程发生未
预期的错误而结束时,线程池会补充一个新的线程。
②.newCachedThreadPool()
创建一个可缓存的线程池,如果线程池的规模超过了处理需求,将自
动回收空闲线程,而当需求增加时,则可以自动添加新线程,线程池
的规模不存在任何限制。
③.newSingleThreadExecutor()
这是一个单线程的Executor,它创建单个工作线程来执行任务,如果
这个线程异常结束,会创建一个新的来替代它;它的特点是能确保依
照任务在队列中的顺序来串行执行。
④.newScheduledThreadPool(intcorePoolSize)
创建了一个固定长度的线程池,而且以延迟或定时的方式来执行任务,
类似于Timer。

八、多线程锁的升级原理是什么

在Java中,锁共有4种状态,级别从低到高依次为:无状态锁,偏向锁,
轻量级锁和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升
级但不能降级。
1.无锁:没有对资源进行锁定,所有的线程都能访问并修改同一个资源,
但同时只有一个线程能修改成功,其他修改失败的线程会不断重试直
到修改成功。
2.偏向锁:对象的代码一直被同一线程执行,不存在多个线程竞争,该
线程在后续的执行中自动获取锁,降低获取锁带来的性能开销。偏向
锁,指的就是偏向第一个加锁线程,该线程是不会主动释放偏向锁的,
只有当其他线程尝试竞争偏向锁才会被释放。偏向锁的撤销,需要在
某个时间点上没有字节码正在执行时,先暂停拥有偏向锁的线程,然
后判断锁对象是否处于被锁定状态。如果线程不处于活动状态,则将
对象头设置成无锁状态,并撤销偏向锁;如果线程处于活动状态,升
级为轻量级锁的状态。
3.轻量级锁:轻量级锁是指当锁是偏向锁的时候,被第二个线程B所访
问,此时偏向锁就会升级为轻量级锁,线程B会通过自旋的形式尝试
获取锁,线程不会阻塞,从而提高性能。当前只有一个等待线程,则
该线程将通过自旋进行等待。但是当自旋超过一定的次数时,轻量级
锁便会升级为重量级锁;当一个线程已持有锁,另一个线程在自旋,
而此时又有第三个线程来访时,轻量级锁也会升级为重量级锁。
4.重量级锁:指当有一个线程获取锁之后,其余所有等待获取该锁的线
程都会处于阻塞状态。重量级锁通过对象内部的监视器(monitor)实
现,而其中monitor的本质是依赖于底层操作系统的MutexLock
实现,操作系统实现线程之间的切换需要从用户态切换到内核态,切
换成本非常高。

十、ThreadLocal是什么?有哪些使用场景

线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线
程间共享。
Java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方
式。

十一、说一下synchronized底层实现原理

synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方
法可以进入到临界区,同时它还可以保证共享变量的内存可见性。
Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:
普通同步方法,锁是当前实例对象
静态同步方法,锁是当前类的class对象
同步方法块,锁是括号里面的对象

十二、synchronized和volatile的区别是什么

volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不
确定的,需要从主存中读取;synchronized则是锁定当前变量,只有
当前线程可以访问该变量,其他线程被阻塞住。
volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、
和类级别的。
volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized
则可以保证变量的修改可见性和原子性。
volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
volatile标记的变量不会被编译器优化;synchronized标记的变量可以
被编译器优化。

十三、synchronized和Lock有什么区别

①synchronized是java内置关键字,在jvm层面,Lock是个java接
口;
②synchronized无法判断是否获取锁的状态,Lock可以判断是否获取
到锁;
③synchronized会自动释放锁,Lock需在finally中手工释放锁(unlock()
方法释放锁)
④synchronized线程A占用锁后,线程B会一直等待;而Lock锁就
不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就
结束了。
⑤synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、
可判断、可公平(两者皆可);
⑥Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码
少量的同步问题。

十四、synchronized和ReentrantLock区别是什么

1.synchronized是关键字,ReentrantLock是类,这是二者的本质区别。
2.ReentrantLock是类,那么它就提供了比synchronized更多更灵活的特
性,可以被继承、可以有方法、可以有各种各样的类变量
ReentrantLock扩展性体现在几点上:
ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁
ReentrantLock可以获取各种锁的信息
ReentrantLock可以灵活地实现多路通知
1.二者的锁机制其实也是不一样的:ReentrantLock底层调用的是Unsafe的
park方法加锁,synchronized操作的应该是对象头中markword。

十五、synchronized和Lock底层实现

synchronized用的锁是存在java对象里的,通过对代码反编译,可以看
出被synchronized修饰的代码块,在执行之前先使用monitorenter指令加
锁,然后在执行结束之后再使用monitorexit指令释放锁资源,在整个执行
期间此代码都是锁定的状态,这就是典型悲观锁的实现流程。
lock锁使用的是CAS和volatile来实现同步的,CAS使用硬件命令实现
缓存一致性保证了原子性,volatile保证了可见性,多线程环境下所有的线
程通过CAS进行竞争资源,只能有一个成功,其它的都会自旋。

十六、在多线程中,什么是上下文切换

上下文切换是存储和恢复CPU状态的过程,它使得线程执行能够从中断
点恢复执行。是多任务操作系统和多线程环境的基本特征。

Java面试手册(全)相关推荐

  1. 美团架构师开源5万字的《Java面试手册》PDF免费下载!

    美团一位架构师利用空余时间在github整理了一份<Java面试手册>,现整理成PDF,初衷也很简单,就是希望在面试的时候能够帮助到大家,减轻大家的负担和节省时间. 前两天,朋友圈分享了这 ...

  2. 太强了!阿里大牛撸出来32W字Java面试手册,GitHub已标星72

    我国的八股文确实是独树一帜.以美国为例,北美工程师面试比较重视算法(Coding),近几年也会加入Design轮(系统设计和面向对象设计OOD)和BQ轮(Behavioral question,行为面 ...

  3. 阿里P8熬了一个月肝出这份32W字Java面试手册,Github标星31K+,持续涨星中

    2022年的互联网行业竞争越来越严峻,面试也是越来越难,一直以来我都想整理一套完美的面试宝典,奈何难抽出时间,这套1000+道的Java面试手册我整理了整整1个月,上传到Git上目前star数达到了3 ...

  4. 字节首出32W字Java面试手册:Linux+Springboot+SpringCloud+Java+Spring等技术栈,直接标星32k

    2022年的互联网行业竞争越来越严峻,面试也是越来越难,一直以来我都想整理一套完美的面试宝典,奈何难抽出时间,这套1000+道的Java面试手册我整理了整整1个月,上传到Git上目前star数达到了3 ...

  5. 阿里 P8 熬了两个月肝出这份 32W 字 Java 面试手册,在 Github 标星 31K+

    2022 年的互联网行业竞争越来越严峻,面试也是越来越难,一直以来我都想整理一套完美的面试宝典,奈何难抽出时间,这套 1000+道的 Java 面试手册我整理了整整 1 个月,上传到 Git 上目前 ...

  6. 这份32W字Java面试手册,Share给需要的小伙伴哦~

    22年金三银四真的是开局就不利,各种大厂裁员,跳个槽都异常的艰难,最近发现好多小伙伴都在偷偷的储备技术等机会面试,我也不甘示弱,熬了一个月肝完了这份32W字Java面试手册,成功斩获阿里offer 这 ...

  7. 阿里 P8 熬了一个月肝出这份 32W 字 Java 面试手册,在 Github 标星 31K+

    2022 年的互联网行业竞争越来越严峻,面试也是越来越难,一直以来我都想整理一套完美的面试宝典,奈何难抽出时间,这套 1000+道的 Java 面试手册我整理了整整 1 个月,上传到 Git 上目前 ...

  8. 阿里P8熬了一个月肝出这份32W字Java面试手册,让32人成功进大厂

    2021年的互联网行业竞争越来越严峻,面试也是越来越难,一直以来我都想整理一套完美的面试宝典,奈何难抽出时间,这套1000+道的Java面试手册我整理了整整1个月,上传到Git上目前star数达到了3 ...

  9. Github 一夜爆火:这份金九银十 Java 面试手册我给跪了

    这几天给筒子们整理了一份<Java面试手册>,106页,目前大约6万字左右,初衷也很简单,就是希望在面试的时候能够帮助到大家,减轻大家的负担和节省时间. 废话不多说,本手册目前为第一版,后 ...

  10. 5万字的《Java面试手册》V1.0版本,高清PDF免费获取

    利用空余时间整理了一份<Java面试手册>,初衷也很简单,就是希望在面试的时候能够帮助到大家,减轻大家的负担和节省时间. 前两天,朋友圈分享了这份这份面试手册的初稿,再几位同学的提议下,对 ...

最新文章

  1. 2022-2028年中国中密度纤维板市场投资分析及前景预测报告
  2. pythonflask configlist.py_flask源码阅读系列一config模块
  3. java中二进制怎么说_面试:说说Java中的 volatile 关键词?
  4. golang中的variable和data types
  5. mnist手写数字识别python_Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】...
  6. python内置函数分类_注意 Python 内置函数并不是万能的!
  7. 计算机网络综合实践任务书,计算机网络综合实任务书2012-11.doc
  8. 99乘法表c语言竖坐标,99乘法表c语言(c语言九九乘法表原理)
  9. 软件测试计划模板--云闪付平台
  10. 10行代码玩转弹性调度的小把戏
  11. 51单片机PID算法控制无刷直流电机proteus仿真
  12. 导出数据库表信息生成Word文档(数据字典)
  13. 【对时间日期的加减操作】
  14. Float32Array基础用法
  15. html初学者对相对地址,绝对地址的理解
  16. loopback接口的应用:远程连接、Router ID
  17. 如何查看对方发邮件的ip地址
  18. java 素数求和,100-200之间所有素数求和程序代码(二个版本)
  19. SOPA对CIO来说是好是坏?
  20. linux中安装mysql步骤,Linux中安装MySql 5.7.21的详细操作步骤

热门文章

  1. redis实现session共享
  2. Excel2010中连续的破折号怎么打出,如图
  3. 过程化考核管理系统实现(1) - 需求功能分析
  4. PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现
  5. Centos 7搭建、配置ftp(匿名用户)
  6. CLKing31----------------------------CRect类用法介绍
  7. PowerMockup一个产品原型设计PPT插件
  8. 【Hive】FROM_UNIXTIME() 和 UNIX_TIMESTAMP()时间戳函数用法
  9. 二叉树的性质与推导及常见习题整理
  10. 计算机专业的双证在职研究生,计算机双证在职研究生可以拿到双证吗招生专业多吗...