2018java程序员面试题整理

article/2025/9/21 8:44:06

1.@PathVariable注解和@RequestParam注解的区别。

@RequestParam注解是获取静态URL传入的参数

@PathVariable是获取请求路径中的变量作为参数

/需要和@RequestMapping("item/{itemId}") 配合使用

2.@Param注解和@RequestParam注解的区别。

@Parm  指定request中必须包含某些参数值是,才让该方法处理。

 注意@RequestMapping(value = "test", params = { "username","age!=10" })

@param一般标注在xxxmapper.Java文件中的 参数位置,代表给传入的参数别名,一般用在传入多个参数的时候,在xml文件中使用sql语句通过占#{}  ${}占位符来获取

#{}防止sql注入 

@RequestParam  value 请求的参数  defaultvalue

1.request.getParameter(“参数名”) 

2.@RequestParam注解获取

3.Servlet标准中的过滤器:FilterSpringMVC中的拦截器:Interceptor有什么异同?

Filter

HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest

根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。

HttpServletResponse到达客户端之前,拦截HttpServletResponse

根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

两者的本质区别:

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器依赖spring容器 
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能 
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 

 
执行顺序 :过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。

 

拦截器有前置/后置/完成三个方法,在没有执行到处理器(controller)时不会只执行任何拦截器 比如我controller没有/user路径

多个执行顺序 123321 3 2 1

2 return false 1 2 1  

(拦截了没有到达处理器,都不会触发后置)

前置方法为true时必定有完成方法

4. Mybatis环境中如何在SQL语句中引用接口方法传入的参数?

一. Map,在方法体里,我们把多个参数存放在map里,然后在前面获得它

二. ibatis中的@Param

5. Mybatis环境中如何在SQL语句中引用接口方法传入的参数?

一. Map,在方法体里,我们把多个参数存放在map里,然后在前面获得它

二. ibatis中的@Param

6.请介绍一下Maven依赖关系中的传递性现象。有什么限制。

  依赖是可以往下传递的;A依赖BB工程依赖的其他模块,A都可以使用;

  调整依赖的传递规则:

  1)、调整jar的依赖范围:

       默认:compile,依赖是传递的;非compile范围的依赖不能传递;

  2)、设置这个jar是可选的;

       <!-- 这个依赖是可选的;默认不传递下来 -->

       <optional>true</optional>

3)、排除依赖:

 <exclusions>

     <!-- 排除依赖 -->

     <exclusion>

        <artifactId>log4j</artifactId>

         <groupId>log4j</groupId>

     </exclusion>

  </exclusions>

7.请介绍一下Maven依赖范围中compiletestprovided这三种情况。

<!--compile:指:在编译运行测试期间都可以使用这个jar,打包的时候会带上这个jar  -->

<!--test:主程序编译的时候不通过,测试可以使用,打包不带这个jar  -->

<!--provided:(已提供) :基本和compile是一样的,只是打包的时候不带 -->

8.请介绍一下 Quartz 石英调度技术的使用方法,你在项目中是如何使用的?

Job:任务(我们需要完成的事情);【要炸大本营】

JobDetail:任务详情(任务怎么做,谁来做);

        【执行任务需要的对象,数据信息等】【张三,50TNT

    quartz:为了并发执行;

    Job(定义任务怎么执行的类)---JobDetail(当次执行的实例);

 

Trigger:触发器;用来执行任务的;【炸药的引信】

Scheduler:调度器;调度任务;【帮我们在指定时间触发trigger】【中控台】

                scheduler.scheduleJob(job, trigger);

        <dependency>

            <groupId>org.quartz-scheduler</groupId>

            <artifactId>quartz</artifactId>

        </dependency>

有配置版和注解版 建议使用注解版

9请介绍一下事务的并发问题和隔离级别。

    在关系型数据库中,事务的隔离性分为四个隔离级别,在解读这四个级别前先介绍几个关于读数据的概念。

1)脏读(Dirty Reads):所谓脏读就是对脏数据(Drity Data)的读取,而脏数据所指的就是未提交的数据。也就是说,一个事务正在对一条记录做修改,在这个事务完成并提交之前,这条数据是处于待定状态的(可能提交也可能回滚),这时,第二个事务来读取这条没有提交的数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被称为脏读。

2)不可重复读(Non-Repeatable Reads):一个事务先后读取同一条记录,但两次读取的数据不同,我们称之为不可重复读。也就是说,这个事务在两次读取之间该数据被其它事务所修改。

3)幻读(Phantom Reads):一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读。

事务四个隔离级别对比: 隔离级别低,查询效率高

1)读未提交(Read Uncommitted):SELECT语句以非锁定方式被执行,所以有可能读到脏数据,隔离级别最低。 

2)读提交(Read Committed):只能读取到已经提交的数据。即解决了脏读,但未解决不可重复读。

3)可重复读(Repeated Read):在同一个事务内的查询都是事务开始时刻一致的,InnoDB的默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻读。

4)串行Serializable):完全的串行化读,所有SELECT语句都被隐式的转换成SELECT ... LOCK IN SHARE MODE,即读取使用表级共享锁,读写相互都会阻塞。隔离级别最高。 

Mysql  四种都支持 默认可重复读

Oracle 支持串行化和读已提交


10.请说说你对事务传播行为的理解。


1PROPAGATION_REQUIRED    默认的

假如当前正要执行的事务不在另外一个事务里,那么就起一个新的事务

比如说,ServiceB.methodB的事务级别定义为PROPAGATION_REQUIRED, 那么由于执行ServiceA.methodA的时候,ServiceA.methodA已经起了事务,这时调用ServiceB.methodBServiceB.methodB看到自己已经运行在ServiceA.methodA的事务内部,就不再起新的事务。 而假如ServiceA.methodA运行的时候发现自己没有在事务中,他就会为自己分配一个事务。这样,在ServiceA.methodA或者在ServiceB.methodB内的任何地方出现异常,事务都会被回滚。即使ServiceB.methodB的事务已经被提交,但是ServiceA.methodA在接下来fail要回滚,ServiceB.methodB也要回滚

 2:   PROPAGATION_SUPPORTS

如果当前在事务中,即以事务的形式运行,如果当前不再一个事务中,那么就以非事务的形式运行这就跟平常用的普通非事务的代码只有一点点区别了。不理这个,因为我也没有觉得有什么区别

3:   PROPAGATION_REQUIRES_NEW

这个就比较绕口了。比如我们设计ServiceA.methodA的事务级别为PROPAGATION_REQUIREDServiceB.methodB的事务级别为PROPAGATION_REQUIRES_NEW,那么当执行到ServiceB.methodB的时候,ServiceA.methodA所在的事务就会挂起,ServiceB.methodB会起一个新的事务,等待ServiceB.methodB的事务完成以后,他才继续执行。

他与PROPAGATION_REQUIRED 的事务区别在于事务的回滚程度了。因为ServiceB.methodB是新起一个事务,那么就是存在两个不同的事务。如果ServiceB.methodB已经提交,那么ServiceA.methodA失败回滚,ServiceB.methodB是不会回滚的。如果ServiceB.methodB失败回滚,如果他抛出的异常被ServiceA.methodA捕获,ServiceA.methodA事务仍然可能提交。

其余的事务一百年可能遇见一次




http://chatgpt.dhexx.cn/article/3l0kgO07.shtml

相关文章

Java程序员不得不会的面试题(含答案)

每个技术人都有个大厂梦&#xff0c;我觉得这很正常&#xff0c;并不是饭后的谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司&#xff0c;如果说能够在这样的公司锻炼几年&#xff0c;相信对自己…

Java程序员面试题集(1-50)

一、Java基础部分 1、面向对象的特征有哪些方面? 答&#xff1a;面向对象的特征主要有以下几个方面&#xff1a; 1)抽象&#xff1a;抽象是将一类对象的共同特征总结出来构造类的过程&#xff0c;包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为&#xff0c…

Java程序员面试题

下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案&#xff0c;原来的题目中有很多重复题目和无价值的题目&#xff0c;还有不少的参考答案也是错误的&#xff0c;修改后的Java面试题集参照了JDK最新版本&#xff0c;去掉了EJB 2.x等无用…

Java程序员不得不会的124道面试题(含答案)

专注于编程、互联网动态。最终将总结的技术、心得、经验&#xff08;数据结构与算法、源码分析等&#xff09;享给大家&#xff0c;这里不只限于技术&#xff01;还有职场心得、生活感悟、以及面经。 点击上方 关注按钮&#xff0c;第一时间送达&#xff01; 多线程、并发及线…

Java常见面试题

Java面试题 java基础 spring & springMVC mybatis、mybatisplus springboot & springcloudAlibaba redis & mongodb & mysql rabbitmq & kafka docker & linux 一&#xff1a;java基础 1.1&#xff1a;java 面向对象三大特性&#xff08;封装…

Java程序员面试常见试题汇总

下面是Java程序员相关的热门面试题&#xff0c;你可以用它来好好准备面试。 什么是线程&#xff1f;   线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。程序员可以通过它进行多处理器编程&#xff0c;你可以使…

10万字208道Java经典面试题总结(附答案)

&#x1f345; 作者简介&#xff1a;哪吒&#xff0c;CSDN2021博客之星亚军&#x1f3c6;、新星计划导师✌、博客专家&#x1f4aa; &#x1f345; 哪吒多年工作总结&#xff1a;Java学习路线总结&#xff0c;搬砖工逆袭Java架构师 &#x1f345; 技术交流&#xff1a;定期更新…

2021最新社招面试真题385题,解决你所有面试不懂的问题【Java社招篇】

金九银十已经过去了很久&#xff0c;大家应该都在为明年的求职或者跳槽做准备了&#xff0c;现在给大家总结了一下今年社招都有哪些面试题&#xff0c;包含了全年最全的面试真题&#xff0c;所有面试真题的答案就不在这里一一给大家总结出来&#xff0c;有需要答案的同学&#…

Java实习生面试题(一)

面临金九银十的黄金跳槽季&#xff0c;不光是很多在职人员跃跃欲试&#xff0c;也有很多大学生积极地加入到应聘行列。作为技术出身的我们&#xff0c;找工作的一大前提就是技术是否能过关。而对于java程序员来说&#xff0c;至少是两关的面试&#xff0c;这首个关卡就是笔试&a…

阿里最新Java面试题,摘选最具代表性49题,看了答案也不过如此

本文转载自:阿里最新Java面试题,摘选最具代表性49题,看了答案也不过如此 不想当将军的士兵不是好士兵,不想成为架构师的Java程序员不是好程序员!为什么要成为架构师,为什么要进大厂? 那年十八 母校舞会 站着如喽啰 那时候 我含泪 发誓各位 必须看到我 1. 面向对象的特征…

Ubuntu安装MySQL并配置远程连接(适用于Ubuntu 20.04和MySQL 8.0)

下载安装MySQL sudo apt-get update #更新软件源 sudo apt-get install mysql-server #安装mysql启动Mysql-servers service mysql start修改root密码 Ubuntu在安装MySQL的时候会自动生成一个账号密码&#xff0c;因此我们先获取mysql随机账号用户名和初始密码&#xff08…

ubuntu安装mysql(tar.gz)

准备 0. 获取 mysql-5.5.15-linux2.6-i686.tar.gz 二进制安装文件 mysql 官网下载页面 选择 Linux-Generic 下的 Linux - Generic 2.6 (x86, 32-bit), Compressed (位数适你的linux的位数而定。我这里用的是32位的&#xff0c;所以我选择32位版本的mysql) 你可以在ubuntu 中…

WSL中ubuntu安装mysql数据库

安装主要分为下面的几个步骤 wsl与普通ubuntu安装的主要区别就是会在启动mysql时报错。普通ubuntu的mysql在安装完成后也会自动运行。 一、删除之前安装的mysql 没有安装可以跳过 sudo apt-get remove --purge *mysql* sudo rm -rf /etc/mysql /var/lib/mysql sudo apt-get re…

Ubuntu安装mysql(终端安装)

文章目录 1.更新源2.安装MySql服务器和客户端3.Ubuntu18.04安装过程中没有设置密码的环节(如果有让你设置密码就下面的不需要做了)4.重置用户和密码5.启动和关闭mysql启动mysql&#xff1a;停止mysql&#xff1a;重启mysql&#xff1a; 1.更新源 sudo apt update2.安装MySql服…

Linux Deploy Ubuntu安装MySQL

一、在Android手机安装Linux 参考https://blog.csdn.net/weixin_38235758/article/details/79219050 Github下载&#xff1a;https://github.com/meefik/linuxdeploy/releases&#xff0c; https://github.com/meefik/busybox/releases Linux Deploy配置说明&#xff1a;htt…

ubuntu安装mysql配置

前言&#xff1a; 此处使用的是ubuntu 20 &#xff08;如何在windows上安装ubuntu&#xff0c;请参考上一篇文章&#xff09; 打开命令行终端 cmd终端分别输入&#xff08;以下黑色背景部分命令&#xff09; &#xff08;1&#xff09;获取root权限 sudo su输入 apt-get up…

在Ubuntu下安装mysql数据库

在Ubuntu下安装 MySQL 数据库 一、安装MySQL 1、使用以下命令即可进行mysql安装&#xff0c;注意安装前先更新一下软件源以获得最新版本&#xff1a; $ sudo apt-get update #更新软件源$ sudo apt-get install mysql-server #安装mysql 2、启动和关闭mysql服务器&#x…

Ubuntu安装Mysql启用远程连接

1、用apt-get安装mysql #更新一下apt 仓库 sudo apt-get update#安装mysql-service sudo apt-get install mysql-server -y#也可以指定版本 &#xff08;可选&#xff09; sudo apt install mysql-server-5.7 2、查看Mysql的状态是否安装成功 sudo service mysql status 3…

Ubuntu安装Mysql数据库

1、首先查看Ubuntu中是否安装过mysql,使用如下命令。 dpkg -l | grep mysql 若没有安装则不会出现任何提示&#xff0c;如下图是安装过的。 2、安装mysql-server sudo apt install mysql-server 3、 再次验证是否安装mysql,上面有截图 dpkg -l | grep mysql rootEth002:/ho…

Ubuntu安装MySQL及常用操作

文章目录 Ubuntu安装MySQL及常用操作1、安装MySQL1.1 更新软件源1.2 下载并安装MySQL1.3 启动和关闭mysql服务器1.4 确认是否启动成功1.5 进入mysql shell界面1.6 解决中文乱码问题 2、MySQL常用操作2.1 显示数据库2.2 显示数据库中的表2.3 显示表的结构2.4 显示表中的记录2.5 …