java面试题

1、ArrayList和LinkedList的区别

ArrayList:底层是数组,查询快增删慢

LinkedList:底层是链表,查询慢增删快

2、ConcurrentHashMap是什么?

concurrentHashMap是线程安全的HashMap,内部采用了分段锁的策略,主干是一个segment数组,通过继承ReentrantLock来进行 加锁,所以每次锁住的都是一个segment,这样只要保证每个sagment是线程安全的,也就实现了全局的线程安全,一个sagment就是一个子哈希表,默认有16个segment,所以理论上,只要它们的操作分布在不同的sagment上,最后可以同时支持16个线程并发写

3、说说你对Redis的理解

1、redis是基于c语言开发的键值形式的nosql数据库,数据存储在内存中,有String hash list set zset 五种数据类型

2、由于数据存储在内存中,为防止服务器宕机数据丢失,支持ROB和AOF两种持久化方式

ROB:默认开启,把内存快照的形式把内存中的数据持久化到本地磁盘文件

AOF:默认不开启,需要手动开启,设置appendonly,值为yes aof是把写或删除的操作日志以追加的方式,保存磁盘文件

4、maven的jar包冲突,如何解决

maven自带两种方式:
路径就近原则:依赖传递过来的路径近的优先。
优先声明原则:在 pom 文件定义依赖,先声明的依赖为准。

手动配置两种方式:
排除法:通过exclusion标签排除依赖
锁定版本:通过dependencyManagement 直接锁定版本

5、maven是什么及其生命周期

maven是一个项目管理工具,可以对项目的整个生命周期进行管理,并且可以对项目的依赖jar包进行管理。
Maven的生命周期包括:清理、编译、测试、打包、安装、部署,对应命令如下:
清理 mvn clean 将会删除 target 目录及内容
编译 mvn compile 将java文件编译为 class 文件输出到 target 目录下
测试 mvn test 执行单元测试类
打包 mvn package 把项目打包到项目的target目录
安装 mvn install 包含package,且将项目打包安装到本地仓库
部署 mvn deploy 包含install,且将项目上传到远程仓库

6、在项目中怎么使用Spring如何整合Redis

Spring Data Redis简化了Redis编程,直接在Spring环境中使用即可。它提供了操作Redis的抽象层(RedisTemplate),拿来即用,使用户摆脱了基础设施的困扰
使用步骤:
创建Maven项目
添加依赖:spring-data-redis
添加连接池依赖:commons-pool2
在spring-redis.xml中配置连接信息
在service层通过@Autowired注入RedisTemplate依赖

7、RabbitMQ的五种工作模式

简单模式,工作模式,发布订阅模式,路由模式,主题模式

8、如何保证MQ消息不丢失?如何解决数据丢失的问题

1、持久化设置、 设置交换机持久化、队列持久化、 消息持久化
2、ACK确认机制、是消费端消费完成要通知服务端,服务端才把消息从内存删除。
3、设置集群镜像模式
4、消息补偿机制、根据状态字段进行补偿,发送完成和接收完成都要对状态做出变更,定时任务检超时没有接收的或者接收失败的,重新发送

9、如何避免消息重复投递或重复消费

1、在消息生产时,MQ 内部针对每条生产者发送的消息生成一个 消息id,作为去重的依据,避免重复的消息进入队列;
2、在消息消费时,要求消息体中必须要有一个业务id作为去重的依据,避免同一条消息被重复消费。

10、说下Linux常用命令

cd:进入某个目录 
pwd:查看当前目录
ls:查看当前目录下有哪些文件
mkdir:创建一个目录 
cp:复制文件     
mv: 文件移动 
rm -rf:递归强制删除  
tar -xzvf:解压缩 
tail -200f 文件名:动态输出日志最后200行
kill -9 进程pid:强制杀死进程
ps -ef|grep tomcat:查看tomcat进程pid

11、通用mapper的特点有哪些

1、mapper.xml基本没有内容,避免了原生mybatis中的大量SQL
2、可移植性好,不惧数据库软件的切换
3、通用mapper使用代码生成插件生成代码,生成的代码量比原生mybatis少很多
4、通用mapper中的批量操作可以直接设置条件,无需自己手写代码

12、mybatis的运行原理

1.加载核心配置文件
2.创建 sqlSessionFactory 
3.创建 sqlSession
4.由 sqlSession 调执行器
5.输入参数
6.执行 sql
7.返回结果

 13、简述mybatis中 #{}和${}的区别

#{}:占位符,使用 #{} 格式的语法会导致 MyBatis 创建 PreparedStatement 参数并安全地设置参数(就像使用 ? 一样);   
${}:连接符,不对参数做任何解析,直接拼接 sql 语句,相当于 statment,有 sql 注入风险,一般需要使用 group by ,order by 必须使用列名时才使用;

14、String 和 StringBuffer,StringBuilder 的区别是什么

相同点:三个类都是处理字符串的类;
不同点:
String 中的对象是不可变的,也就可以理解为常量
StringBuffer 对方法加了同步锁,所以是线程安全的,效率比较低,适合多线程。
StringBuilder 并没有对方法进行加同步锁,线程不安全的,效率高适合单线程。

15、文件上传三要素

1、表单提交方式:post
2、表单的enctype属性:multipart/form-data
3、表单必须有文件上传项:file

 16、Spring中有哪些设计模式

工厂模式:用来创建对象的实例;
单例模式:Bean 默认为单例模式。
代理模式:Spring 的 AOP 功能用到了 JDK 和 CGLIB 动态代理技术
模板方法模式:用来解决代码重复的问题
适配器模式:使用在AOP中

17、什么是IOC?什么是DI?二者有什么关系

1、IOC: 控制反转,把对象创建交给spring进行配置
2、DI: 依赖注入,向类里面的属性中设置值
3、关系:依赖注入不能单独存在,需要在ioc基础之上完成操作

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘猫_A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值