某信息公司面经java

Posted baorant24

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了某信息公司面经java相关的知识,希望对你有一定的参考价值。

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:br/>@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 标签使用

  1. foreach标签的使用
  2. 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的销毁

以上是关于某信息公司面经java的主要内容,如果未能解决你的问题,请参考以下文章

面经|阿里巴巴Java研发工程师

解决针对MySQL中对于某一个区间段范围的数据更新的情况

解决针对MySQL中对于某一个区间段范围的数据更新的情况

别慌,在Java面试的时候,面试官会这样问关于框架的问题?

在半径范围内查找位置

6年老Java面经总结,太香了