spring面试题
1.你对spring的理解?与springmvc和springboot的区别?(经常被问到)
2.spring 的优缺点
Spring 的核心概念是IOC和AOP,这两个核心服务的对象算是bean(POJO),定位是一个轻量级的框架
3.spring的核心技术(IOC、DI、AOP)
AOP主要包括通知(Advice)切点(PointCut)连接点(JoinPoint)
springboot 中使用AOP的代码实例:
<!-- aop -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
@Aspect
@Component
public class ControllerInterceptor { private final Logger logger = LogManager.getLogger(this.getClass());
@Pointcut("execution(public * com.example.homework.controller..*(..))")
public void controllerMethodPointcut(){} @Before("controllerMethodPointcut()") //指定拦截器规则
public Object interceptor(JoinPoint jp){
MethodSignature signature = (MethodSignature) jp.getSignature();
Method method = signature.getMethod(); //获取被拦截的方法
String methodName = method.getName(); //获取被拦截的方法名
logger.info("interceptor ***************************");
logger.info("methodName: "+methodName);
return null;
}
}
4.spring中Bean的作用域
5.Spring JDBC API 中存在哪些类?
JdbcTemplate
SimpleJdbcTemplate
NamedParameterJdbcTemplate
SimpleJdbcInsert
SimpleJdbcCall
6.Spring 支持的事务管理类型
程序化事务管理:在此过程中,在编程的帮助下管理事务。它为您提供极大的灵活性,但维护起来非常困难。
声明式事务管理:在此,事务管理与业务代码分离。仅使用注解或基于 XML 的配置来管理事务。
springmvc面试题
1.什么是Spring MVC ?简单介绍下你对springMVC的理解?
2.SpringMVC的流程?
3.Springmvc的优点
4.Spring MVC的主要组件?
6.SpringMVC怎么样设定重定向和转发的?
7.GET和POST区别?
注解配置:@RequestMapping注解里面加上method=RequestMethod.GET
8.cookie和session的区别?
9.spring mvc中的mvc指的是什么?
10.spring MVC中拦截器与过滤器的用处?加载顺序?
springboot面试题
1.为什么要用springboot?
2.Spring Boot有哪些优点
3.Spring Boot有哪些核心配置文件
4.Spring Boot 的配置文件有哪几种格式
5.Spring Boot 实现热部署有哪几种方式
6.运行SpringBoot有几种方式?
7.springboot四大特性
8.什么是Swagger?你用Spring Boot实现了吗?
9.什么是FreeMarker模板?
10.springboot常用注解?
mybatis面试题
1.MyBatis 的好处是什么,为什么用mybatis等?(多次被问到)
2.mybatis与hibernate的区别在哪里?(多次被问到)
3.#{}和${}的区别是什么?
4.Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?
5.Mybatis是如何进行分页的?分页插件的原理是什么?
mybatis的两种分页方式:RowBounds和PageHelper
6.Mybatis执行批量插入,能返回数据库主键列表吗?
7.mybatis传递参数的方式(4种)?
8.mybatis中模糊查询(mysql)
数据库面试题(必问)
1.索引
1.1 什么时候用索引?
1.2 索引的分类?
1.3 索引作用和优缺点?
1.4 什么情况下索引不会命中?
2.两种存储引擎
3.数据库优化
4.数据库事务
5.存储过程
6.DDL和DML
7.内连接、左外连接和右外连接的区别?
8.数据库的三大范式?
9.防止sql注入的方法?
线程面试题(必问)
1.创建线程有哪些方法(4种)?
2.线程的生命周期
线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁。
完整的生命周期图如下:
3.Runnable和Callable的区别?
4.start()和run()方法有什么区别?
5.线程池有哪些参数
最常用的三个参数:
三个参数的作用:
6.线程池有几种(5种)?拒绝策略有几种(4种)?阻塞队列有几种(3种)?
五种线程池:
四种拒绝策略:
三种阻塞队列:
7.死锁
什么叫死锁?
产生死锁的原因?
死锁产生的4个必要条件?
预防和处理死锁的方法?
解除死锁的方法?
如何检测死锁?
8.volatile底层是怎么实现的?
当一个变量定义为volatile后,它将具备两种特性:1. 可见性,2. 禁止指令重排序。
9.volatile与synchronized有什么区别?
10.wait()和sleep()的区别?
11.乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
12.什么是可重入锁(ReentrantLock)?
事务面试题
1.事务的7种传播级别
2.数据隔离级别
3.Java有几种类型的事务?
Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。
设计模式
1.设计模式分类
常见的设计模式:
单例模式、工厂模式、建造模式、观察者模式、适配器模式、代理模式、装饰模式.
2.设计模式的优点
3.设计模式的六大原则及其含义
4.常见的单例模式以及各种实现方式的优缺点,哪一种最好,手写常见的单利模式
5.设计模式在实际场景的应用
6.Spring中用到了哪些设计模式
7.MyBatis中用到了哪些设计模式
8.动态代理
消息队列
1.为什么使用消息队列?(解耦、异步、削峰)
主要解决应用耦合,异步消息,流量削锋等问题。
可实现高性能,高可用,可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。
解耦
传统模式:系统间耦合性太强
中间件模式:
中间件模式的优点:
将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。
异步
传统模式:一些非必要的业务逻辑以同步的方式运行,太耗费时间;
中间件模式:
将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快相应速度
削峰
传统模式:并发量大的时间,所有的请求直接怼到数据库,造成数据库连接异常
中间件模式:
2.使用了消息队列会有什么缺点
3.消息队列如何选型?
开发语言 | java | erlang | java | scala |
单机吞吐量 | 万级 | 万级 | 10万级 | 10万级 |
时效性 | ms级 | us级 | ms级 | ms级以内 |
可用性 | 高(主从架构) | 高(主从架构) | 非常高(分布式架构) | 非常高(分布式架构) |
功能特性 | 成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好 | 基于erlang开发,所以并发能力很强,性能极其好,延时很低;管理界面较丰富 | MQ功能比较完备,扩展性佳 | 只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。 |
4.消息队列由哪些角色组成?
5.消息队列有哪些使用场景?
数据结构
1.排序算法有哪些?
2.以下算法的时间复杂度
3.数组和链表的区别
4.解决哈希冲突的方法
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。
集合面试题(常见)
1.常见的集合有哪些?
Map接口和Collection接口是所有集合框架的父接口:
2.HashMap与HashTable的区别?
3.hashmap的底层原理,会不会产生哈希冲突?
4.HashMap遍历?
5.Set 遍历方法?
6.Vector和ArrayList以及LinkedList区别和联系,以及分别的应用场景
7.如果要保证ArraList线程安全,有几种方式?
8.ArrayList扩容机制是怎么样的
9.HashSet和TreeSet的区别?
10.底层
JVM面试题
1.内存模型以及分区,需要详细到每个区放什么。
2.简述 java 垃圾回收机制?
3.java 类加载过程?
JavaSE基础
1. 谈谈对OOP的理解
2.String底层使用什么实现的?为什么不可变?
3.重写和重载
4.==与equals()的区别
5.接口与抽象类
Java接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成,是一种规范。
servlet面试题
1.Servlet的生命周期?
加载和实例化、初始化、处理请求以及服务结束
2.forward() 与redirect()的区别
3.四种会话跟踪技术
4.Request对象的主要方法
setAttribute(String name,Object):设置名字为name的request的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的Body的长度
getHeader(String name):获得HTTP协议定义的文件头信息
getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParameterValues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session
getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性
5.Servlet执行时一般实现哪几个方法?
6.GenericServlet和HttpServlet有什么区别?
GenericServlet是一个通用的协议无关的Servlet,它实现了Servlet和ServletConfig接口。
继承自GenericServlet的Servlet应该要覆盖service()方法。
最后,为了开发一个能用在网页上服务于使用HTTP协议请求的Servlet,你的Servlet必须要继承自HttpServlet。
7.九大内置对象
• application
• page
• request
• response
• session
• exception
• out
• config
• pageContext
Linux常用命令(被问到比较少)
查看进程命令
ps命令
-a,查看所有
-u,以用户(user)的格式显示
-x, 显示后台进程运行参数
-ef,以全格式显示进程所有信息,包括父进程Pid,创建人,创建时间,进程号。等等
一般项目中,我们首先要查询一个进程,并对其进行删除会用一下命令
ps -a | grep helloworld 或
ps -ef |grep helloworld 或者其他
查询到helloworld相关的进程,我们通过kill命令来操作该进程号删除该进程,kill -9 13492
显示目录和文件的命令
Ls:用于查看所有文件夹的命令。
Dir:用于显示指定文件夹和目录的命令 Tree: 以树状图列出目录内容
Du:显示目录或文件大小
修改目录,文件权限和属主及数组命令
Chmod:用于改变指定目录或文件的权限命令。
Chown:用于改变文件拥有属性的命令。
Chgrp:用于改变文件群组的命令。
Chattr:用于设置文件具有不可删除和修改权限。
Lsattr:用于显示文件或目录的隐藏属性。
创建和删除目录的命令
Mkdir:用于创建目录
Rmdir:用于删除空的目录
Rm -f:用于删除不为空的目录
创建和删除,重命名,复制文件的命令
Touch:创建一个新的文件
Vi:创建一个新的文件
Rm:删除文件或目录
Mv:重命名或移动文件的命令
Cp:复制命令
Scp:用于将本地的文件或目录复制到远程服务器
Wget:用于下载ftp或http服务器文件到本地。
显示文件内容的命令
Cat:用于显示指定文件的全部内容
More:用分页的形式显示指定文件的内容
Less:用分页的形式显示指定文件的内容,区别是more和less翻页使用的操作键不同。
Head:用于显示文件的前n行内容。
Tail:用于显示文件的后n行内容。
Tail -f:用于自动刷新的显示文件后n行数据内容。
查找命令
Find:查找指定目录或文件的命令。
Whereis:查找指定的文件源和二进制文件和手册等
Which:用于查询命令或别名的位置。
Locate:快速查找系统数据库中指定的内容。
Grep:在指定的文件或标准输出,标准输入内,查找满足条件的内容。
关机和重启计算机的命令
Shutdown:-r 关机后立即重启
-k 并不真正的关机,而只是发出警告信息给所有用户
-h 关机后不重新启动
Poweroff:用于关机和关闭电源
Init:改变系统运行级别
0级用于关闭系统
1 级用于单一使用者模式
2级用来进行多用户使用模式(但不带网络功能)
3级用来进行多用户使用模式(带网络全功能)
4级用来进行用户自定义使用模式
5级表示进入x windows时的模式
6级用来重启系统
Reboot: 用于计算机重启 Halt:用于关闭计算机系统
压缩和打包命令
Tar:用于多个文件或目录进行打包,但不压缩,同时也用命令进行解包
Gzip:用于文件进行压缩和解压缩命令,文件扩展名为.gz结尾。
Gunzip:用于对gzip压缩文档进行解压缩。
Bzip2:用于对文件或目录进行压缩和解压缩
Bzcat:用于显示压缩文件的内容。
ComPRess/un compress: 压缩/解压缩.Z文件
Zcat:查看z或gz结尾的压缩文件内容。
Gzexe:压缩可执行的文件
Unarg:解压缩.arj文件
Zip/unzip:压缩解压缩.zip文件
用户操作命令
Su:切换用户命令
Sudo:一系统管理员的身份执行命令
Passwd:用于修改用户的密码
改变目录和查看当前目录命令
Cd:进入工作目录
Cd ..:会退到上一级命令
Pwd:显示当前用户所在工作目录位置
文件连接命令
Ln:为源文件创建一个连接,并不将源文件复制一份,即占用的空间很小。
可以分为软件连接和硬链接:
软连接:也称为符号连接,即为文件或目录创建一个快捷方式。
硬链接:给一个文件取多于一个名字,放在不同目录中,方便用户使用。
Ln命令参数如下:
-f:在创建连接时,先将与目的对象同名的文件或目录删除。
-d:允许系统管理者硬链接自己的目录。
-i:在删除与目的对象同名文件或目录时先询问用户。
-n:在创建软连接时,将目的对象视为一般的文件。
-s:创建软连接,即符号连接。
-v:在连接之前显示文件或目录名。
-b:将在连接时会被覆盖或删除的文件进行备份。
其他命令
Who:显示系统中有那些用户在使用。
-ami 显示当前用户
-u:显示使用者的动作/工作
-s:使用简短的格式来显示
-v:显示程序版本
Free:查看当前系统的内存使用情况
Uptime:显示系统运行了多长时间
Ps:显示瞬间进程的动态
Pstree:以树状方式显示系统中所有的进程
Date:显示或设定系统的日期与时间。
Last:显示每月登陆系统的用户信息
Kill: 杀死一些特定的进程
Logout:退出系统
Useradd/userdel:添加用户/删除用户
Clear:清屏
Passwd:设置用户密码
vi编辑器
首先用vi命令打开一个文件
末行模式命令:
:n,m w path/filename 保存指定范围文档( n表开始行,m表结束行)
:q! 对文件做过修改后,强制退出
:q 没有对文件做过修改退出
Wq或x 保存退出
dd 删除光标所在行
: set number 显示行号
:n 跳转到n行
:s 替换字符串 :s/test/test2/g /g全局替换 /也可以用%代替
/ 查找字符串
网络通信常用的命令
Arp:网络地址显示及控制
ftp:文件传输
Lftp:文件传输
Mail:发送/接收电子邮件
Mesg:允许或拒绝其他用户向自己所用的终端发送信息
Mutt E-mail 管理程序
Ncftp :文件传输
Netstat:显示网络连接.路由表和网络接口信息
Pine:收发电子邮件,浏览新闻组
Ping:用于查看网络是否连接通畅
Ssh:安全模式下远程登陆
Telnet:远程登录
Talk:与另一用户对话
Traceroute:显示到达某一主机所经由的路径及所使用的时间。
Wget:从网路上自动下载文件
Write:向其它用户终端写信息 Rlogin:远程登录