某信息公司java面经(三)

某信息公司java面经(三)A:加载JDBC驱动程序:在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM,这通过java.lang.Class类的静态方法forNa

欢迎大家来到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

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信