欢迎大家来到IT世界,在知识的湖畔探索吧!
# 1、原始jdbc使用流程
A:(1)加载JDBC驱动程序:
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),
这通过java.lang.Class类的静态方法forName(String className)实现。
(2)创建数据库的连接
要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,
该对象就代表一个数据库的连接。
(3)创建一个preparedStatement要执行SQL语句,必须获得java.sql.Statement
实例,Statement实例分为以下3 种类型:
1)执行静态SQL语句。通常通过Statement实例实现。
2)执行动态SQL语句。通常通过PreparedStatement实例实现。
3)执行数据库存储过程。通常通过CallableStatement实例实现。
(4)执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和
execute
1)ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,
返回一个结果集(ResultSet)对象。
2)int executeUpdate(String sqlString):用于执行INSERT、UPDATE或
DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3)execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
(5)遍历结果集
两种情况:
1)执行更新返回的是本次操作影响到的记录数。
2)执行查询返回的结果是一个ResultSet对象。
(6)处理异常,关闭JDBC对象资源
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声
明顺序相反:
1)先关闭requestSet
2)再关闭preparedStatement
3)最后关闭连接对象connection
## 2、statement和preparedstatement的区别
A:
区别:
1、PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高
2、使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement
对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作
并不会带来额外的好处。
3、statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement
预编译得, preparedstatement支持批处理 。
4、执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象。
通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参
数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL
语句,这样在随后的运行中可以节省时间并增加代码的可读性。
5、PreparedStatement 可以规避 Statement弊端:①拼串 ②sql注入问题
6、PreparedStatement 可以实现操作Blob类型、Clob类型的数据
## 3、三大集合的区别
A:
一、Set集合
其主要实现类有HashSet、TreeSet。存放对象的引用,不允许有重复对象
二、List集合
其主要实现类有LinkedList、ArrayList,前者实现了链表结构,
后者可代表大小可变的数组。List的特点是能够以线性方式储蓄对象,
并允许存放重复对象。
三、Map集合
其主要实现类有HashMap、TreeMap。Map对值没有唯一性要求,对健要求唯一,
如果加入已有的健,原有的值对象将被覆盖。
## 4、hashmap底层
A:
JDK1.7及之前:数组+链表
JDK1.8:数组+链表+红黑树
## 5、arraylist和linkedlist使用场景
A:
使用场景:
(1)如果应用程序对数据有较多的随机访问,ArrayList对象要优于LinkedList对象;
(2) 如果应用程序有更多的插入或者删除操作,较少的数据读取,
LinkedList对象要优于ArrayList对象;
(3)不过ArrayList的插入,删除操作也不一定比LinkedList慢,
如果在List靠近末尾的地方插入,那么ArrayList只需要移动较少的数据,
而LinkedList则需要一直查找到列表尾部,反而耗费较多时间,
这时ArrayList就比LinkedList要快。
## 6、面向对象的特性
A:
面向对象三特性:封装、继承、多态(向上转型,向下转型)
## 7、重写和重载的区别
A:
1、目的不同
overload用于增加程序的可读性(做法不同,但是做的同一事情)。
override用于提供其超类已经提供的方法的特定实现。
2、范围不同
overload 在相同的类范围内内执行。
override发生在两类具有继承(继承)的关系。
3、参数不同
overload参数必须不同。
override参数必须相同。
4、多态性不同
overload 静态多态,调用的函数在编译时被选中。
override 是运行时多态性的。
5、返回类型不同
overload中可以相同或不同。但你必须改变参数。
override必须是相同的或协变的。
## 8、Java8新特性
A:
Lambda表达式
函数式接口
方法引用
Stream API
## 9、Java中的io方式
A:
一、首先,传统的 java.io 包,它基于流模型实现,提供了基本的IO功能,
比如 File 抽象、输入输出流等。交互方式是同步、阻塞的方式
二、在 Java 1.4 中引入了 NIO 框架(java.nio 包),提供了
Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、
同步非阻塞 IO 程序,同时提供了更接近操作系统底层的高性能数据操作方式
三、在Java 7中,NIO 有了进一步的改进,引入了异步非阻塞 IO 方式,
也有很多人叫它 AIO(Asynchronous IO)。异步 IO 操作基于事件和回调机制,
可以简单理解为,应用操作直接返回,而不会阻塞在那里,当后台处理完成,
操作系统会通知相应线程进行后续工作
## 10、io输入与输出的分别相对于谁来说
A:
java中的IO操作,比如InputStream OutputStream是相对自己的程序而言的,
程序需要读取别的地方的数据文件等,用到的就是InputStream 流,来对外部文件
进行读取。相反,如果是输出流,就是相对程序而言,需要将程序中的数据保存(传递)
到本地或别的地方。
## 11、数据库事务4大特性
A:
原子性(Atomicity):事物是指作为一个单元的一组有序的数据库操作,
单元是不可分割的,如果一组数据的所有操作都执行成功,事物完成,
进行事物提交(commit),其修改作用于所有数据库进程。有一个操作执行失败,
事务执行失败进行回滚(rollback),该事务所有操作的影响被取消;
一致性(Consistency):事物的操作要么全部执行成功提交,要么全部失败进行
事物回滚,执行成功,对数据的改变将作用于其它数据库,执行失败,将不对其
它数据库产生影响;
持久性(Osolation):事务执行成功,对数据库数据的修改是永久性的,
即使服务器宕机,也不会丢失已提交事务的操作;
隔离性(durability):
多个线程并行对表执行事务,每个事务对其它事务都是隔离互不影响的,
比如有两个线程A和B对同一数据S进行事务执行,线程A在获取数据S时,
线程B的事务要么已经提交结束,要么还未执行
## 12、什么时候要建立数据库索引
A:
主键自动建立唯一索引
频繁作为查询条件的字段
外键关系字段
参与排序的字段
分组依据的字段
组合查询的字段
## 13、数据库 全/左外/右外/内 链接简单说明
A:
内连接:内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者
自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,
所以内连接可能会丢失信息。
左连接(左外连接):将返回右表的所有行。如果左表的某行在右表中没有
匹配行,则将为右表返回空值
右连接(右外连接):将返回右表的所有行。如果右表的某行在左表中没有
匹配行,则将为左表返回空值
全外连接(FULL JOIN 或 FULL OUTER JOIN):完整外部联接返回左表
和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择
列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值
以右表为主表,左表中没数据的为null
## 14、数据库中用过那些聚合函数
A:
聚合函数能够对列进行计算,对于分析和统计是很用的;
我们常用的聚合函数有:sum(), max(), min(), avg(),count()等。
## 15、jvm的基本结构
A:
堆:java堆在虚拟机启动的时候建立,它是java程序最主要的内存工作区域。
几乎所有的java对象实例都存放在java堆中。堆空间是所有线程共享的,
这是一块与java应用密切相关的内存空间
java栈:每一个java虚拟机线程都有一个私有的java栈,一个线程的java栈
在线程创建的时候被创建,java栈中保存着帧信息,java栈中保存着局部变量、
方法参数,同时和java方法的调用、返回密切相关
本地方法栈:本地方法栈和java栈非常类似,最大的不同在于java栈用于方法的调用,
而本地方法栈则用于本地方法(native方法)的调用,作为对java虚拟机的重要扩展,
java虚拟机
允许java直接调用本地方法(通常使用C编写)
方法区:类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于
一块称为方法区的内存空间。除了类的信息外,方法区中可能还会存放运行时常量池信息,
包括字符串字面量和数字常量
## 16、jvm中那些结构是线程独有和共有的
A:
栈、本地方法栈、程序计数器这三个部分都是线程独占的。
堆、方法区是线程共有的。
## 17、jsp有没有用过
A:
有空可以了解下,没怎么用过
## 18、spring mvc的基本结构和程序流程
A:
大体结构:
①控制器(Controller)
②模型(Model)
③视图(View)
流程图:
①发送请求到DispatcherServlet控制器。
②控制器根据请求路径到映射器查询具体的Handler处理器。
③映射器根据用户请求查找与之对应的处理器执行链再回传给控制器。
④控制器根据映射器返回的结果调用HandlerAdapter适配器。
⑤适配器调用具体的处理器处理业务并返回ModelAndView到控制器。
⑥控制器将ModelAndView传递到ViewResolver视图解析器。
⑦视图解析器返回具体的视图到控制器。
⑧控制器渲染视图后响应给用户。
## 19、spring mvc用过那些注解
A:
@Controller,@PathVariable,@RequestMapping,@RequestParam
@Component
@ResponseBody,@RequestBody
## 20、spring的特性
A:
三大特征:AOP、IOC、DI
具体可参考上一篇博客:https://blog.51cto.com/baorant24/5262843
## 21、spring和springboot的关系,为什么要有springboot
A:
Spring Boot基本是Spring框架的扩展,它消除了设置Spring应用程序所需的
复杂配置。它的目标和Spring的目标是一致的,为更快,更高效的开发生态系统
铺平了道路
## 22、项目中如何去暴露controller中的接口
A:
(1)在对应的SERVICE层编写提供别人使用的方法
(2)再指定的地方 提供对应的接口给别人使用(映射的URL是在WEB层对应的URL)
(3)在WEB层创建个文件夹编写调用接口的实现类 可以等同看作编写CONTROLLER层
## 23、cookie和session的区别
A:
cookie是保存在客户端的;
cookie有大小限制;
session是保存在服务器端;
session更加安全;
session会比较占用服务器性能,当访问增多时应用cookie.
## 24、mybatis用过什么标签
A:
1.<resultMap> 通常用于做实体类和数据库表之间的映射
2.<sql id=”findList”>当需要查询的字段经常用到,就可以用sql标签来包装
3.trim标签的使用
4.if 标签使用
5. foreach标签的使用
6. choose标签的使用
## 25、mybatis#和$的区别
A:
1、#和$两者含义不同
#会把传入的数据都当成一个字符串来处理,会在传入的数据上面加一个双引号来处理。
而$则是把传入的数据直接显示在sql语句中,不会添加双引号。
2、两者的实现方式不同
(1)$作用相等于是字符串拼接
(2)#作用相当于变量值替换
3、#和$使用场景不同
(1)在sql语句中,如果要接收传递过来的变量的值的话,必须使用#。因为使用#是通
过PreparedStement接口来操作,可以防止sql注入,并且在多次执行sql语句时可以提高效率。
(2)$只是简单的字符串拼接而已,所以要特别小心sql注入问题。对于sql语句中非变量部分,
那就可以使用$,比如$方式一般用于传入数据库对象(如传入表名)。
(3)如果在sql语句中能同时使用#和$的时候,最好使用#。
## 26、为什么要使用mybatis,而不是jdbc
A:
1、使用JDBC连接数据库没有办法实现java代码和SQL语句之间的解耦!
2、使用JDBC连接数据库在接受查询的数据的时候非常费劲,特别影响开发效率
3、JDBC连接数据库的效率比较低,我们需要自己使用连接池连接
## 27、spring事务的了解
A:
Spring的事务分为,声明式事务管理、编程式事务管理两种类型.由三大接口组成:PlatformTransactionManager(事务管理器)、TransactionDefinition(事务定义)、TransactionStatus(事务状态)。不同的事务管理器会对其进行不同的实现。
声明式事物五大特性:
1.事务传播机制
2.事务隔离机制
3.只读
4.事务超时
5.回滚规则
## 28、git分布式版本控制能干什么
A:
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上
2、在自己的机器上根据不同的开发目的,创建分支,修改代码
3、在单机上自己创建的分支上提交代码
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
## 29、git分支合并的命令
A:比如
git checkout master
git merge dev
## 30、linux你使用过吗,用到了那些命令
A:
mkdir 创建目录
cp 拷贝文件
mv 移动文件
rm 删除文件
cat 查看文件内容
grep用来对内容进行过滤
## 31、Maven的理解
A:
Maven是一个构建工具,这个构建工具能够帮助你更好的管理包的依赖、
还能够为你实现项目的热部署、还能为你运行所有的测试用例、
还能够为你项目的打包、发布、还能够实现项目的多模块构建
## 32、springboot使用那些设计模式
A:
简单工厂:
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。
单例模式:
从FactoryBean中获取Bean的时候使用单例模式
观察者模式:
观察者模式是一种对象行为型模式。它表示的是一种对象与对象之间具有依赖关系,
当一个对象发生改变的时候,这个对象所依赖的对象也会做出反应。
代理模式:
Spring Aop 的动态代理
策略模式:
Resource接口是具体资源访问策略的抽象,也是所有资源访问类所实现的接口。
## 33、springboot中bean的生命周期
A:
Bean的定义
Bean的初始化
Bean的生存期
Bean的销毁
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/22520.html