loading...
面试题精选
Published in:2022-01-31 | category: Java面试题集合
Words: 1.9k | Reading time: 6min | reading:

1.mybatis的分页,分页插件的原理

PageHelper本质上是一种拦截

PageHelper利用这一点通过拦截器获取到同一线程中的预编译好的SQL语句之后将SQL语句包装成具有分页功能的SQL语句,并将其再次赋值给下一步操作,所以实际执行的SQL语句就是有了分页功能的SQL语句

PageHelper可以适应不同的数据库

1
2
# Oracle
select * from (select rownum r , d.* from dept d) where r between a and b

以上逻辑仅限于低数据量的分页查询(MySQL 30w以下,oracle 100w以下)

大数据量分页,Oracle将使用 row_number()做分页

#2.二分查找

*3.单例模式

  • 概念: 程序只能有唯一一个对象;

  • 实现单例方法:构造私有,对外提供获取手段(静态方法)

  • 单例实现:七种实现单例的方式

  • 项目中的场景:开源框架的属性配置文件加载全部采用单例模式

    单例突破:

    枚举:造指定数量的对象;

***4.mybatis的mapper接口注意内容

​ mapper接口不能重载,因为(mybatis原理)

​ 参数传值、传值一致性问题,即:

  • 方法名称和Statementid一致
  • 参数和parameterType一致
  • 返回结果和resultType一致
  • mapper映射文件的namespace必须是接口的全限定类名

​ @Param 使用mybatis的注解

5.mybatis中配置mapper的方法

在Mybatis中定义Mapper信息有两种方式,一种是利用XML写一个对应的包含Mapper信息的配置文件;另一种就是定义一个Mapper接口,然后定义一些相应的操作方法,再辅以相应的操作注解。

6.maven的命令

  • maven clean:对项目进行清理,清理的过程中会删除target目录下编译的内容
  • maven complie:编译项目源代码
  • maven test:对项目的运行测试
  • maven package:可以打包后的文件存放到项目的target目录下,打包好的文件通常都是编译后生成的class文件。
    • 项目打包方式主要有三种:pom打包,jar包,war包。打包方式在pom.xml文件中进行指定。
    • pom工程一般指聚合工程,代表父工程,负责管理jar包的版本。maven插件的版本等,主要做统一的依赖管理。
    • jar包就是普通的打包方式,可以是pom工程的子工程。
    • war包都是web工程,是可以直接放在tomcat下运行的工程
  • maven install:在本地仓库生成仓库的安装包可以供其他项目引用,同时打包后的文件存放在项目的target目录下。

**7.maven怎么用,是什么

maven是基于项目对象模型,可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

maven也是一套强大的自动化管理工具,覆盖了编译、测试、运行、清理、打包和部署,整个项目构建周期。

它还提供了一个仓库的概念,统一的帮助开发人员管理项目所依赖的第三方架包,最大可能的避免环境配置不同所产生的问题。

8.springmvc的注解有哪些

  • @Controller:放在控制前面,告诉mvc这是一个控制器,每次请求访问时,每次返回的数据,一定是一个逻辑视图
  • @RestController:表示所有的Controller将不在返回逻辑视图,将返回Json对象
  • @RequestMapping:
  • @RequestParam

9.@ReqeustMapping可以接收的参数以及返回值类型

$10.jsp与Servlet原理及区别

  • 原理
  • 编写规范
  • 内容
  • 部署配置

$11. spring常用注解

$ 12.scoket编程模型

​ 输出流—-输入流

13.TCP/ip网络模型(OSI七层)

14.BIO与NIO区别AIO

Netty

无拷贝复制

**15.struts2与springmvc的区别?springmvc与springboot区别?

#16.数据安全怎么做?

  1. 运行安全
  2. 数据安全

***17.如何解决session共享?

$18.GC原理

JVM、OOM、强、弱、软、虚

19.JVM内存模型

$20.重写与重载区别?

*21.Java集合框架中各个接口的区别

  1. 继承体系:

**22.你知道的不可变类型有哪些?String是?

不可变类型:Java.lang包中的Boolean,Byte,Character,Double,Float,Integer,Long,Short,String

String是不可变类型,因为String类是被final修饰的,被final修饰的类不能被继承或重写,String类用final修饰是Java的设计人员不希望程序员继承String类,并有可能改写String类中的方法。

具体来说,String类被定义为final的主要原因是从安全和性能。String类的底层出现了两个final,一个final修饰了String类,而另一个final修饰了类中的char数组。String的本质实际上就是这个char数组,我们先说说final char[] 中的这个final。

在我们开发中,我们会用到大量的字符串对象,如果大量的字符串被轻易的创建出来,这就涉及到一个非常严重的问题,即性能的开销,如果不加节制的创建字符串对象,那么弊端显而易见:内存迅速被占满,程序执行缓慢!!!于是,String类中有一个共享字符串的概念,简单来说,就是将字符串对象存放到虚拟机中的方法区里面的常量池里,在使用时,可以使用同一个字符串对象,不需要再内存中开辟新的内存空间,从而极大降低了内存消耗,也提升了程序运行效率。

字符串共享是解决内存消耗以及庞大的性能开销的必然选择。但是,现在还是不能解释为什么char数组要用final修饰。用final修饰的原因来自于:安全性。我们刚刚说了字符串要共享,但是有一个问题,就是共享的字符串在多线程的情况下,不同的线程有可能会修改这个共享对象。比如:两个不同的线程,线程1在循环一个List,每个元素和“abc”进行比较,同时线程2也在使用这个“abc”这个对象,如果线程2改变了这个共享字符串,那么线程1的结果是不可预测的!!因此,解决共享变量安全性的最好的手段,就是禁止修改共享对象,所以char数组就必然要被final修饰了。

给String类本身加一个final的原因依然是性能和安全性两个方面。

首先来说性能,如果String可以被继承,在我们调用String类中的方法时,虚拟机会查找并判定究竟是调用哪个类子类中的方法,势必会极大的降低程序的运行效率。

其次就是安全性,这个安全性的解释为语义的安全性。String的各个方法都围绕着一个char数组及逆行,所有的方法的语义都是最直接、最有效的。重写String的方法意味着:不一样的语义或者错误的语义。这会导致String行为的不确定性,使用String对象的代码将会是不安全的代码。因此Java设计者定义 String对象的操作语义不被改变,确保使用String对象的代码是绝对安全的

$#23.接口和抽象类的区别?

  1. 语义
  2. 书写规范
  3. 使用场景
Prev:
Jwt验证
Next:
谈谈集合框架
catalog
catalog