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.消息队列如何选型?

开发语言javaerlangjavascala
单机吞吐量万级万级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:远程登录

05-28 22:50