1.mybatis的分页,分页插件的原理
PageHelper本质上是一种拦截
PageHelper利用这一点通过拦截器获取到同一线程中的预编译好的SQL语句之后将SQL语句包装成具有分页功能的SQL语句,并将其再次赋值给下一步操作,所以实际执行的SQL语句就是有了分页功能的SQL语句
PageHelper可以适应不同的数据库
1 | # Oracle |
以上逻辑仅限于低数据量的分页查询(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.数据安全怎么做?
- 运行安全
- 数据安全
***17.如何解决session共享?
$18.GC原理
JVM、OOM、强、弱、软、虚
19.JVM内存模型
$20.重写与重载区别?
*21.Java集合框架中各个接口的区别
- 继承体系:
**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.接口和抽象类的区别?
- 语义
- 书写规范
- 使用场景