栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面试题~持续更新

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试题~持续更新

面试题总览 1.数据库关键字执行顺序

答:
1、from
2、on
3、join
4、where
5、group by
6、having
7、select
8、distinct
9、order by
10、limit

2.mysql与oracle的区别

答:
1.mysql默认端口:3306,oracle默认端口:1521
2.mysql:默认用户是root,用户下可以创建好多数据库,oracle:创建一个数据库,
数据库下有好多用户
3.mysql主键自增,oracle没有自动增长类型,主键一般使用的序列
4.mysql默认是自动提交,可以修改为手动提交,oracle默认不自动提交,需要手动提交
5.都支持serializable串行化事务隔离级别,可以实现最高级别的读一致性

3.事务的四大特性 与隔离级别

答:
1.原子性、一致性、隔离性、持久性
2.脏读,读未提交,读已提交,可重复读,可串行化

3.索引的创建 什么时候失效 索引的分类

答:
1.索引就是为了提高查询效率的一种机制
2.① 数据量庞大
② 该字段经常出现在where子句的后面作为筛选条件出现
③ 该字段很少进行DML操作(insert、delete、update)(DML操作后,索引需要重新排序。)
3.主键索引。唯一索引。复合索引。单列索引。
4.使用模糊查询时,以”%“开头索引会失效。where筛选条件中,or语句中前后字段没有同时都为索引。使用复合索引时,未使用左侧的列查找。where筛选条件中索引使用了函数

4.jdbc的步骤

答:
1.注册驱动–通过反射 class.forName
2.获取数据库的连接–通过url(“jdbc(这是协议以jdbc开头):mysql(这是子协议,数据库管理系统称)/localhost(数据库来源地址):3306(目标端口)/test(要查询的表)?”)与用户账号密码 利用向上转型获取Connection接口类对象连接到数据库
3.获取传输器-- 传输器一:Statement()传输器,有sql注入风险。
传输器二:prepareStatement(sql); 是先把SQL骨架发给数据库执行,使用占位符?设置参数
4.执行sql语句,获取结果集
5.处理查询结果集
6.释放资源

5.spring的创建方式

答:
1.映射文件 xml方式创建–加载完就创建
2.注解方式创建 --单例多例 单例 --多例懒加载

6.依赖注入的方式

答:
1.Set方法注入–注解Autowired和配置文件bean name 和class全路径
2.构造器注入–构造方法注入是指带有参数的构造函数注入
3.静态工厂的方法注入–通过静态工厂类注入
4.实例工厂的方法注入–首先new工厂类,再调用普通的实例方法

6.springmvc执行流程

答: 1.前端发送请求到前端控制器。2.前端控制器把请求委托给控制器处理器。3.调用业务对象,实现业务方法。4.返回结果给控制器处理器。5.控制器处理器返回modelAndView给前端控制器。6.但是前端控制器不能解析,交给视图渲染,解析 返回结果给前端控制器。7前端控制器把结果响应给用户。#

7.mybatis ${} #{} 区别

答:
1.可以获取map中的值或者pojo对象属性的值。
2.#{}:是以预编译的形式,将参数设置到sql语句中;PreparedStatement;防止sql注入
3.${}:取出的值直接拼装在sql语句中;会有安全问题。

8.mybatis 怎么解决字段名与属性名不一致 为什么要一致

答:
1.为什么一致:mybatis会根据这些查询的列名(会将列名转化为小写,数据库不区分大小写) , 去对应的实体类中查找相应列名的set方法设值 , 如果找不到setxxx() , 就会返回null ;
2.解决1.使用结果集映射->ResultMap 【推荐】
3.2.解决2.为列名指定别名

9. 一级缓存,二级缓存,三级缓存

答:
1.如果有大量相同的请求查询数据库,则数据库需要执行多次重复的sql,那么并发压力高,查询效率低. 如果使用缓存机制,则可以极大的提升用户的查询的效率
2.使用同一个SqlSession时,进行多次数据库的查询,数据库只查询一次。一级缓存Mybatis默认开启
3.缓存失效 当在一个缓存作用域中发生了update、insert、delete 动作后,将会触发缓存失效,下一次查询将命中数据库,从而保证不会查到脏数据。
4.userMapper.xml中使用cache标签,使二级缓存生效
5.在多线程条件下.数据如果需要共享,必须序列化
6.生产环境中(集群:多个服务器)使用二级缓存可能存在问题,使用Redis高级缓存服务器代替

10.重写与重载

答:
1.重载:多个同名函数同时存在,具有不同的参数个数/类型。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
2.重写:遵循”两同两小一大“原则。即方法名与参数列表相同,子类返回值类型与抛出异常必须小于或者相等父类,子类修饰符权限大于等于父类修饰符权限。

11.抽象类与接口的区别

答:
1.接口是一种用interface定义的类型
抽象类是一种用class定义的类型
2.接口中的方法都是抽象方法
抽象类中的方法不做限制
3.接口中的都是静态常量
抽象类中可以写普通的成员变量
4.接口中没有构造方法,不可以实例化
抽象类中有构造方法,但是也不可以实例化
5.接口可以多继承,抽象类只能单继承

12.静态方法能否调用非静态方法

答:
1.不能,静态方法无法调用非静态方法。即等同于已存在的对象调用暂且不存在的对象
2.静态方法开始加载的时候就在内存中分配了区域,非静态方法只有在这个方法的对象被调用时才会去内存中分配区域。

13.面向对象的三大特征:封装继承多态

答:
1.封装。将一些属性和相关方法封装在一个对象中,对外隐藏内部具体实现细节。内部实现,外界不需要关心,外界只需要根据”内部提供的接口“去使用就可以。使用起来更加方便,保证数据的安全,利于代码维护。
2.继承。一个类”拥有“另外一个类的”资源“的方式之一。方便资源重用
3.多态。在继承的前提下;使用不同的子类,调用父类的同一个方法,产生不同的功能

14.String、StringBuffer与StringBuilder之间区别

答:
1.String Stringbuffer Stringbuilder 都是底层封装char数组 ,用来储存字符串,操作字符串
2.string :源码是用final修饰和private私有,不可更改,之所以可以重新赋值是因为,生成了新的对象(final修饰保持的是地址值不变,内容可变,所以可以修改值),所以string操作字符串会生成很多垃圾对象,占用大量内存尤其是放到循环体中,会严重拖慢程序效率
3.stringbuffer 和stringbuilder这两个操作字符串时不会产生新的对象,能直接在原对象上增删改查,因为Stringbuffer 加了同步锁,效率慢,但是在多线程环境下就很安全
5.Stringbulider可变类,效率快,但单线程环境下不安全
三者应用环境不同
6.string:适合字符串更改少量的一般环境下
7.stringbuilder:适合用于 单线程字符串 增删改查多的环境下
8.stringbuffer:适合用于 多线程字符串 增删改查多的环境

15.int和Integer的区别

答:
1.int 是基本类型,8字节,取值正负21亿多
2.Integet 是包装类型,属于引用类型,默认值是null。Integer默认常量池取值范围-127~128 常量池内取值高效 多个数据可以取同一个值。

16.什么事自动装箱与自动拆箱

答:
1.自动装箱其实就是将基本数据类型转换为引用数据类型(对象)
2.自动拆箱其实就是将引用数据类型转化为基本数据类型

17.线程创建四种方式

答:
1.继承Thread类创建线程
2.实现Runnable接口创建线程
3.使用Callable和Future创建线程
4.使用线程池例如用Executor框架

18.什么是io流

答:
1.I/O流是指Input/Output:输入输出机制,输入机制:允许java程序获取外部设备的数据(磁盘,光盘,网络等)。输出机制:保留java程序中的数据,输出到外部设备上(磁盘,光盘等)
2.文件字节输入流读取文件内容的步骤:

1.创建流对象2.创建一个缓存字节的容器数组3.定义一个变量,保存实际读取的字节数4.循环读取数据5.操作保存数据的数组6.关闭流

3.文件字节输出流写入文件内容的步骤:

1.选择流:创建流对象2.准备数据源,把数据源转换成字节数组类型3.通过流向文件当中写入数据4.刷新流5.关闭流

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/708491.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号