在深圳,一般面试会问到的内容,这些是根据我自己的理解写的面试, 和面试官当面聊的时候,可以如下简单的聊聊
2. ArrayList 和LinkedList 区别?
相同的地方就是他们都是继承自一个List类
使用get ,set方法的时候,ArrayList比linkedList要快,因为linkedList是链形结构,需要移动指针,由前往后对比。
使用删除,添加(add,remove)时候,LinkedList比ArrayList快, ArrayList是动态数组。 需要移动数据。
3.多线程,什么是生产者和消费者模式?
在多线程中,往往需要有一些方法提供数据,一些方法是获取数据, 我们把提供数据的一方,叫做生产者,把获取数据的一方称为消费者。
当生产者还未生产的时候, 消费则就应该等待。
4.为什么会有很多种Stream ,InputStream ,OutputStream ,fireInputStream ,dataInputStream,各自的作用是什么?
InputStream输入流,是一个父类,包括以下子类:
objectInputStream,objectOutputStream把一个对象写入数据源或者从一个数据源读出来
把包括基本数据类型在内的数字或者字符串按照一定的顺序写入或者输出到数据源,一般是使用 DataInputStream和DataOutputStream
4.1怎么样把输出字节流转换成输出字符流,说出它的步骤(简单写出代码):
使用outputStream (new OutputStream(new FileOutputStream(File file)))
IO 流在整体设计上涉及哪两种设计模式,举例说明?
分别使用到装饰者(Decorator)和适配器(Adapter)两种设计模式:
装饰者模式: BufferReader reader = new BufferReader(inputStream);//将inputStream 装饰成BufferReader,使其具有缓冲能力的Reader
适配器模式:将字节流 fireInputStream 适配成InputStreamReader字符流,操作字符串
FileInputStream fireInputStream = new FileInputStream(File file);
InputStreamReader inputStreamReader = new inputStreamReader(fireInputStream);
5.springBoot都学过什么?为什么直接用run就能执行?
在run方法的启动类上面,有springApplication 注解,该注解是一个组合注解,里面包含configraction,scanner等组合注解,而configraction注解里面,
有import注解,还有初始化方法等。 import注解 会把所有java的实体类转换为bean,类似spring ioc的bean一样,交给spring管理。
这样加载进来的实体以后,就可以通过run方法,直接运行加载到整个项目。
6.SpringData是怎么从数据库获取数据的?
@Query(select * from student where name ='?1')
List<student> getStudentByName(string name){}
7.怎么避免多线程死锁?
需要维护好每个线程的执行顺序,有序执行。比如调用相同的方法c()的时候,A线程执行完,B线程再执行。
8.什么是ioc? 什么是aop? 他们的区别是什么
ioc和 AOP,是属于spring的两大核心技术。
ioc是指依赖注入,也叫控制反转。在以往的开发模式,我们都是需要调用者直接new一个bean出来,再使用。 使用了spring的ioc以后,
不再需要调用者管理bean,spring会优先配置管理bean ,并使用set注入。 然后调用者只需要直接调用spring即可,提高了开发的效率。
aop: 即面向切面编程, 使用aop,利用切面技术,底层动态代理,当声明好切点以后 可以很好的记录软件的操作日志,数据监控等信息。 比如在执行一个update方法的时候,
我们可以在这个方法之前记录日志,这时候可以使用aop切面。就不需要每次都在执行之前方法下手动去写代码维护
9.什么是hibernate二级缓存?
10.为什么会有多线程死锁?
如果线程同时处于等待,线程之间都在互相等待。 就会造成死锁
11.string,stringbuffer,stringbuilder区别
是字符串常量,StringBuffer和StringBuilder是字符串变量。
由于String是final修饰,所以它是不可变的。 属于线程安全的
stringbuffer 也是线程安全的
StringBuilder 不是线程安全的。
总结: 在是用少量的字符串连接的时候,使用String即可
单线程环境下,应该使用Stringbulider,效率比较高
在多线程环境下,应该使用线程安全的StringBuffer
字节流与字符流有什么区别?
答:计算机中的一切最终都是以二进制字节形式存在的,对于我们经常操作的字符串,在写入时其实都是先得到了其对应的字节,
然后将字节写入到输出流,在读取时其实都是先读到的是字节,然后将字节直接使用或者转换为字符给我们使用。
由于对于字节和字符两种操作的需求比较广泛,所以 Java 专门提供了字符流与字节流相关IO类。
对于程序运行的底层设备来说永远都只接受字节数据,所以当我们往设备写数据时无论是字节还是字符最终都是写的字节流。
字符流是字节流的包装类,所以当我们将字符流向字节流转换时要注意编码问题(因为字符串转成字节数组的实质是转成该字符串的某种字节编码)。
12.什么是缓冲区?有什么作用?
答:缓冲区就是一段特殊的内存区域,很多情况下当程序需要频繁地操作一个资源(如文件或数据库)则性能会很低,
所以为了提升性能就可以将一部分数据暂时读写到缓存区,以后直接从此区域中读写数据即可,这样就显著提升了性能。
对于 Java 字符流的操作都是在缓冲区操作的,所以如果我们想在字符流操作中主动将缓冲区刷新到文件则可以使用 flush() 方法操作。
字节流和字符流哪个好?怎么选择?
在大部分情况下,如果只需要操作磁盘,使用字节流会更好。 因为大多数,io都是在磁盘操作。而这些操作基本上是以字节的形式在传输。
而如果对于操作需要通过 IO 在内存中频繁处理字符串的情况使用字符流会好些,因为字符流具备缓冲区,提高了性能。
什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作?
对象序列化: 把对象以二进制的形式存储到硬盘
反序列化: 把二进制对象转换成对象读取
需要实现serializable接口
数据库连接池的作用?
使用数据库连接池,当获取数据库连接使用的时候,不需要每次获取完就关闭连接。
只需要用完之后,又将连接放回到连接池。下次就可以直接到连接池获取连接。避免了创建和关闭连接所造成不必要的开销
进程和线程的区别:
进程,指的是一个程序。 而线程指的是程序在执行过程中的一个小片段。
例如:打开了QQ进行聊天,qq就是一个整体的进程, 而一个聊天窗口,则是一个线程
接口和抽象类的区别?
1.接口不可以定义里面的方法必须是public 抽象类里面可以有不是public方法
2.抽象类不能多继承, 接口可以实现多继承
hashMap的实现原理?
hashMap是以键值对的形势存储数据,当调用map的put方法,HashMap会计算该key的hash值,将对应的值存储到指定的索引,保存的时候,
会先判断该key对应的值是否已经存在,存在则会把旧的值替换成新的。 \
servlet 的生命周期?
当调用 init方法 , 开始加载servlet
调用 service 方法 ,servlet 会自动根据请求 调用doget、dopost方法
调用 destory方法 将结束生命周期生命周期
spring 是用来做什么的?
spring 是java的一个轻量级框架,利用spring的ioc 可以很好地管理者写bean
当有程序需要调用该bean的时候, 只需要从spring里获取就好,不再需要手动new出来 ,这是spring依赖注入的好处。
hibernate 和mybatis 的区别?
1.相同的地方是 两者都是作为持久层框架,实现的是jpa
2.不同的是 hibernate 属于全自动, 框架里面已经实现好开箱即用的方法, 只需要少量的sql就能对数据库经常操作,但是对于sql优化 hibernate不够灵活 因为方法已经封装好的
2.mybatis 相对hibernate来说 属于半自动, 它可以让程序员配置sql语句 , 好处是 如果程序员想要对sql进行优化, 可以自己手动配置优化 就比较灵活
3.两者都是通过sessionFactoryBuilder 由xml配置 , 生成sessionFactory , 再由sessonFactory 生成session ·, 由session 开启事务和sql
4.如果用于简单的增删改查 等 hibernate 的开发效率会更高 因为大部分的操作都已经封装好
谈谈Hibernate中inverse(相反的)的作用
可以举例学生 老师表
inverse 这个属性默认为false, 举个例子
假设有 学生表 和 老师表 ,然后 还有学生老师中间表, 如果在学生表这个 配置了 inverse= true ,
那就表示关系是由老师表维护, 当操作老师表 的时候, 中间表的数据才会被修改 。 操作学生表的时候 中间表的数据不会被修改
,当老师表和学生表 同时都 设置了 inverse= true 的时候 , 这时候操作 学生表和老师表 中间的数据都不会改
在数据库中条件查询速度很慢的时候,如何优化?
1.可以建立索引
2.减少数据库表关联
3.尽量少用全表查询
4.对建表的字段 选择适合的 字段长度
Hibernate工作原理及为什么要用?
1. 根据xml配置文件信息 获得sessionFactory
2.sessionFactory 获取session
3.session 获取连接 访问数据库
4.获取数据 创建事务
5.持久化操作
提交事务
5.关闭session
6.关闭sessionFactory
Hibernate是如何延迟加载?
hibernate 支持懒加载 Lazy,延迟加载机制 使用了java的 jdk动态代理 当查到某些数据的时候 ,并没有将对象储存在内存中, 所有 hibernate 只是返回该对象的代理 ,
当程序真正需要使用的时候, 才执行查询数据库, 使用 懒加载 可以大大减少 程序与数据库的交互 节约开销
Hibernate 的二级缓存是什么?
spring 的二级缓存 就是sessionFactory级别 的缓存, 当hibernate执行查询的时候 不再需要直接查询数据库 如果配置了二级缓存
会优先从缓存中获取数据, 找不到数据才会查询数据库
spring MVC 和 struts2的区别有哪些?
1. Spring mvc 和Struts2 的加载机制不同, 前者是 servlet 加载 后者是一个fitter
2. struts2 是基于类的拦截 , 每个请求 ,都会实例一个action对象,然后调用 get set 方法 将request方注入进去,一个action 对应一个应用上下文
Spring mvc 是基于方法的拦截 , 每个请求对应一个action 的方法, 一个方法相当于一个request上下文 。
3. spring mvc 可以与spring进行无缝对接(比如说一些数据的转换等, 就不需要再处理) 也比struts 安全
spring mvc 基于注解的使用 也比struts2 基于配置文件的使用更加方便
4.对于拦截器, spring 使用的默认是spring 的aop , 而struts2 则会有自己的intercter 拦截器, struts2 的配置会更加繁琐一点
5.对于读取存取数据, spring mvc是基于servlet , 是单一的实例 ,请求的时候只会实例化一次,属于单例
struts2 基于 file ,使用值栈的方式 存取, 每次请求的时候都会实例化一个对象, 前端通过ognl表达式获取数据, 效率会比spring mvc 低
spring mvc的工作原理?
1. 当用户在前段提交数据, 前端提交的url 会被spring mvc的 despacherServlet 进行拦截,
2. 寻找后台对应的controller , 然后spring 对 spring mvc 的 request请求 会进行一些处理,
比如 经常数据格式的转换,比如前端传递的时间类型进行转换, 对数据类型的转换, 比如String 转换成 double,int等 ,读安全的校验等
3. 接着会在控制器下, 对后台数据的处理
4.处理完, 会返回modoleAndView ,
5.spring mvc根据 返回的 view 找到指定路径下合适的页面 返回给前台渲染视图
6.前端展示页面, 显示渲染结果
struts2 的工作原理?
当客户端在页面发起请求, 会被web.xml配置的核心过滤器进行过滤。 一般使用的是 fitterDespacher 过滤器
过滤器 调用ActionMapper, 判断该请求需不需要调用 , 如果需要调用的话 就直接交给Action代理, action代理会读取配置文件信息
寻找到对应的控制器 。 根据配置文件的控制器信息 寻找到控制器下的类 , 当控制器处理完逻辑之后 , 将会获取配置文件的 result信息 ,
返回result指定的页面进行前端渲染
Cookie和Session的区别?
1. 两者存储的位置不一样, session 存储在服务器, cookies 存储在浏览器上
2. 存储数据的大小不一样, cookies 存储数据会有大小限制 , session 没限制 只要服务器支持
3 安全问题, cookies 有安全性的问题, cookies可以被拦截
4.因此 当进行登录的时候, 需要将比较重要的 信息 比如 用户名,密码等信息存储在session ,其他信息放在cookies
5.需要注意的是, 由于session需要一段时间以后才会被销毁, 如果需要考虑到服务器的内存问题
hashMap 和hashTable有什么区别?
1.两者实现的都是map接口
2.hashMap 可以允许空值, 但是hasTable不允许空值
3.在单线程环境下, 使用hashMap更快, 多线程下,使用hashTable更快
5.HashMap 的初始值 是16 HashTable的初始值是11
写出你经常遇到的异常?
IoException , ArrayIndexOfBundException , classCastException, numerFomaterException, fileNotFoundException , sqlException,
myBatis核心接口类是什么?
核心接口类是sqlSession , 类似hibernate session
springBoot 怎么集成myBatis?
1.在maven添加 myBatis-spring-boot依赖
2.在mabatis接口类添加@mapper注解
3.在application.yml 配置数据源信息
Linux 命令?
springBoot 核心是什么?
了解spring cloud吗? 原理是什么?
了解dubbo吗? 原理是什么?
mybatis $ 和# 的区别什么?
写一条sql 一个User 表(id,name,age,address)查询出前十个name重复的值和重复的个数,按照id大到小排序?
js前端 遍历前端以下数据
var person=
{
"张三":12,
"李四":,21,
"王五":32
}
显示成 以下数据
<p>12:张三</p>
<p>21:李四</p>
<p>32:王五</p>
redis 有什么数据结构?
Redis五种结构
1、String :String类型指的是 redis支持所有的数据, 最多能存储的数据能有1G字节
2、sorted set : 有序的 set, redis 存储的有序的集合, 每个最大的存储能支持 512 字节
3. list: 属于双向列表的String类型,list可以实现工作队列
4. hash: 设个是使用常用的键值对的方式存储数据, 最大能存储512字节的键值对
5. set: 无序的集合, 最大支持的 128个字节
数据库奔溃怎么处理?
高可用,集群,子从
java 有哪些集合类接口?
1. coliection: 提供一组对象, 没组对象都是他的子元素才,集合的父类
2.set : 值不能重复的coliection hashSet TreeSet
3.list : 值可以重复的coliection ArrayList 和 linkedList
4.map: 提供键值对储存的对象, key不能重复 HashMap 和HashTable
简单说下堆栈?
1. 使用new 出来是对象和数组等 都是放在堆里面。
2. 定义在类里面的对象或者方法, 就是放在栈里面
1.重载和重写的区别?
重写: 针对父类的方法重写, 返回值,参数列表,都要相同,修饰符 必须大于或者等于父类的
重载: 针对当前类的方法, 返回值类型, 参数, 可以不同, 方法名字要相同, 修饰符可以有不一样的
drop,TRUNCATE,delete 三者的作用?
1.drop指的是删除整个表 包括表名和字段结构;
2.TRUNCATE 指的是删除表的数据, 不删除字段结构
2.delete 指的也是删除表的数据, 不删除字段结构,但是删除速度比TRUNCATE 慢
mybatis 的 $和 # 的区别是什么?
1.当 sql传递参数进来的时候, mybatis会把$ 修饰的 字符当成变量 直接传入,没有进行参数的转换。
2.当 #{}是预编译处理,sql传递参数进来的时候, mybatis会把 # 修饰的 字符变成?号,然后将其转化为参数,还能有效的避免sql注入。
spring-boot + mybatis开发怎么整合?
io读写的操作,不知道文件格式,文件大小,怎么读,代码怎么写。? 把a文件读到b文件,代码怎么写?
aop有什么作用,怎么配置?
抽象类有写过吗,有什么作用?
js选择器有哪些,有什么区别吗?
id, , 标签, 元素, 类选择器等等,
比如$('#id') $('p'), $('.class'),$(':checked') $("input['name=aa']")
map可以存储对象吗?
可以储存对象?
Map<Student,String> = new HashMap<>();
spring 怎么接收前端传递的对象和字符串?
假如一个页面有 text ,date 等很多格式, 怎么指定检验输入的长度它, 输错了怎么自定义提示?
Java反射理解吗。 反射怎么获取类?
java 多态的表现
比如有多个子类都是继承一个父类, 这时候 ,通过一个父类就能够引用不同的子类,这就实现了多态。
比如,一个动物类, 猫,狗, 鸭 都是他的子类, 这时候, 只需要通过动物类 , 就能够引用他的子类
子类重写或者重载父类的方法, 执行顺序?
1. 子类重载(参数列表不同)父类的方法, 会先调用父类的同名方法, 再执行子类的
2. 子类重写(全部相同)父类的方法, 只会调用子类的同名方法, 不会再执行父类的
如果tomcat显示乱码,需要在哪里进行修改?
可以尝试两个方法,
1. server.xml 添加 URIEcoding='UTF-8'
2.在C:\apache-tomcat-8.5.30\bin\catalina.bat文件中加了如下:
set JAVA-OPTS=-Xms256m
-Xmx800m
-XX:PermSize=128m
-XX:MaxPermSize=256m
-Dflie.encoding=UTF-8

本文涵盖Java面试常见问题,包括集合类、多线程、数据库操作、框架应用等内容,解析技术细节,分享实战经验。
5632

被折叠的 条评论
为什么被折叠?



