java面试题

java面试题

1.java面向对象有什么特征

封装 继承 多态 抽象四个方面

封装:隐藏该隐藏的,展示该展示的。隐藏类的内部实现,向外展示调用它的接口(提供的getter,setter方法)。

继承:继承是对基类的一种扩展,子类具有父类的所有属性和方法,可以把子类相同的共性抽象成父类,然后让子类去继承它。 继承可以防止类的冗余。

多态:父类的引用指向子类的对象。它实现了程序的动态性,。在程序编译时看的是父类的应用,而运行是就看的是程序的父类指向那个子类的对象。它是在运行是菜决定要执行那个方法

抽象:把一切事物都抽象成类,和对象。

2.arrayList和LinkedLIst的不同

arrayList是数组,而LinkedList是双向链表

arrayList 因为内存连续,查找快,更新慢

LinkedList 每个节点前后都有指针,所以更新快,但是查找慢

3.高并发中的集合类有哪些问题

第一代(使用synchronized)

vector和HashTable是线程安全的,但是效率十分低下

第二代

arrayList和HashMap是线程不安全的 但效率高

第三代(使用lock)

ConcurrentHashMap 线程安全的

copyOnWriteArraryList 线程安全

4.JDk1.8的新特性

增加了lambda表达式,函数式接口(只含有一个抽象方法的接口)streamAPI用于操作(数据源)集合数组所生成的序列

optional类 减少了空指针异常。方法引用和构造器引用

5.java中接口和抽象类的区别

抽象类 中有构造器 抽象方法 非抽象方法 属性值 修饰符是protect public 默认 不能实例化,抽象类用来捕捉子类的通用特性 抽象类 单继承 。抽象类描述的是一个具体东西的抽象

接口中有抽象方法没有非抽象方法,常量 他的修饰符是public 接口多实现 。接口描述的是一种功能

6.java中代理有几种实现方式(三种)

静态代理 动态代理 cgLib代理

7.java中==和equals的区别

==是数值判断则判断两数的值是否相等,若是应用类型的判断,则判断两者的地址值是否相等

equals没有复写则相当于==,若复写则判断两者的内容是否相等

8.java中异常处理机制是什么

异常的结构

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1gkbKIfe-1630756824762)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210709214156956.png)]

处理机制

try{
    
}catch(exception){
    
}finally{
    
}

使用throw 由程序抛出异常。使用throws表示当前方法无法处理异常,有当前方法,类抛出异常

9.java中重写和重载的区别

重写 发生在子类当中,当子类不想继承父类原有的方法,则发生重写。方法名 参数完全相同,具体实现不同。子类修饰符的可见性不能少于父类

重载 是让类同一方式处理不同数据的一种手段。 发生在当前类中,方法名相同,参数不同(多态性的体现,传参的时候才确定使用按个方法)

10.string,stringbuffer,stringbuild的区别

string的不可变性,导致修改字符串,会重新创建空间。会占用许多的内存

stringbuffer 可变字符串,线程安全,效率低

stringbuild 可变字符串线程不安全,效率高

11.自定义异常在生产中如何运用

继承runtimeException ,java提供的异常在某些情况下不能满足我i们的需求。我们可以使用它来使程序发生错误是更好的处理。 在某些错误是符合java的语法,但不符合业务要求则需要自定义异常。

12.sleep和wait的区别

sleep是让线程休眠一定时间,时间到了自动唤醒。不会让步资源。

wait是线程挂起,需要其他其他线程的notify和notifyAll方法才能才能重新激活。会让出资源。

14.redis中的rdb和aof持久化

rdb 持久化是 将指定时间间隔内存中的数据写入磁盘。redis在rdb持久化的时候新建一个子进程,来讲数据写入一个临时文件,待持久化结束后,在用这个文件替换上次的文件。在持久化期间,父进程不进行任何io操作。

15min 1次

5min 10次

1 10000次 1分钟 有10000次数据更新则进行rdb持久化

在进行大规划数据恢复的时候,rdb会比aof好用。

aof redis 以日志的形式记录整个redis的写操作,只会追加不会改写,在redis重启的时候就会读取此文件。完成数据恢复工作。aof文件过大的时候,redis会对aof文件进行重写。

aof数据保存的完整性较好

15.redis的事物是如何实现的

redis的事物,一组命令的集合,所有命令都会序列化,串行化的进行执行,中间不允许加塞。

mutil开启事务 exec执行事务。在mutil和exec中间的命令被称为入队。exec执行后队列中的命令才会依次执行。事物中的命令语法出现错误,在去执行,就会取消事物。

用watch对key进行监控,一旦 key键的值出现变化,则放弃事物

3个阶段 开启 mutil 入队(queue) 执行exec

三大特性,隔离性,每个命令单独执行,没有隔离级别,mutil开启事物,exec执行事物。不保证原子性,redis中有一个命令执行失败了(语法正确),其后的命令依然执行。

16.redis的主从复制

redis的主从复制 是 主机数据更新后自动备份到从机,主机以写为主,从机以读为主

读写分离 容灾恢复

一主二仆 一个主机两个从机 主机写 从机读 主机挂了后,从机还是从机,原地等待。

薪火相传 一个主机 下面有一个从机 从机下面还有一个从机 第二个从机 既是主机又是从机

反客为主 一主二仆 主机挂了 让一个从机变成主机,让后让另一个从机挂在新主机的下面

哨兵模式 反客为主的自动版 有一个哨兵监视着3台主机,主机挂了后 哨兵会让salve 进行投票 ,决定谁是主机,旧的主机恢复后 会变成从机。

复制的缺点,主机负责写 完了后复制到从机 具有一定的延迟性

复制有完全复制 和 增量复制

完全复制 新增一台从机 主机就进行完全复制 把所有的数据都同步到从机

增量复制 主机进行新写操作 同步到从机

17.为什么使用redis(做缓存)

若有许多信息,它不常常变化,每次把它都存到mysql,每次都查询,mysql每次都要编译对应的查询语句,效率低下。把它们存到缓存中去,每次都去缓存判断,缓存没有在请求数据库 这样效率就高了。

18.微服务遵循什么原则

  • 单一职责原则:每个服务都有自己的职责,只关注与自己的业务,有界限的工作,高内聚
  • 服务自治原则:每个服务 能够 自主开发,自主测试。独立构建,独立部署,独立运行。
  • 要轻量级 使用restful风格 能够在跨平台,跨语言使用

19.activeMQ

利用可靠的消息传递机制,与平台无关的数据交流。基于数据通信来进行微服务分布式集成。

冗余存储,异步通讯,流量削峰

20.activeMQ的架构设计

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BFbaPVTz-1630756824765)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210710104308527.png)]

21.activeMQ如何保证消息的接收和发送

发送者 发送消息 ,消息被存储到queue 或者topic中 接受者 接收到消息,消息处理,消息确认,然后从queue和topic中删除消息。

调用message.acknowladge()方法确认消息

rabbitMQ保证消息可靠性

confirmCallback在生产者到交换机的时候回调).

returnCallback 消息从交换机到达队列的时候回调

开启手动ack机制

  • RabbitMQ幂等性

    消息设置唯一标识来区分,来判断消息是否被消费,若被消费则则ack

22.activeMQ事务消息处理

创建session的transacted设置为true 开启事务

session.commit()方法提交事务。

不管何种消息机制,只要提交事务,则消息就会被确认为接收。消息将被删除。

23.activeMQ死信队列

当消息被重发超过六次后,就会进入死信队列DLQ当中,以便后续处理。

24.springMVC的工作流程

1 .用户发送请求到前端控制器dispatchServlet,

dispatchServlet调用handlerMapping(处理映射器),找到合适的处理映射器,然后返回给dispatchServlet,dispatchServlet在调用handlerAdapter(处理器适配器)找到相应的controller,返回一个modelAndView给dispatchServlet,

然后dispatchServlet在调用viewResolver找到合适的view,然后dispatchServlet根据view进行视图渲染(将model中的数据填充到view),然后返回给浏览器

25.spring的事务传播机制

  • required(默认) 若一个方法开启事务,调用另一个方法,则这个方法加入到当前事务中去
  • requireds_new 每次调用都开启一个新的事务
  • support 支持事务,若当前有事务就执行事务,若没有事务则也不开启是诶
  • mandatory(强制性) 支持事务,若没有事务则抛出异常
  • not_support 不支持事务 若存在一个事务 ,则挂起
  • never 不支持事务,若在存在事务则抛出异常

26.spring的单例bean是否线程安全

单例的有多线程访问,存在安全问题,但是spring中的bean是无状态(controller service dao)不会进行查询以外的操作,所以是线程安全的。而对于spring官方提供的有状态的bean ,也用threadLocal进行了处理 所以他是线程安全的。

27.spring框架运用了那些设计模式

  • 工厂模式 beanfactory
  • 代理模式 aop
  • 单例模式 bean就是单例的
  • 适配器模式 dispatcherServlet的handlerAdapter
  • 装饰着模式 源码中带wrapper .

28.spring的隔离级别有哪些

read uncommitted

read committed

repeatable committed

serializeble

以spring的配置为准(大多数情况 两者配置一样)

29.myisam和innodb的区别

innodb支持事务,支持外键,支持行锁

30.如何理解springboot的start

start就是一个jar包,在上面添加上@configuration注解,springboot在开始是会扫描这个注解的类,就会包这些bean就加载进spring容器,从而达到自动配置的效果,不需要人为的去配置。

31.mysql的四大特性

ACID

原子性,一致性 ,隔离性,永久性

四个隔离级别

read uncommitted 导致 脏读

read committed 导致 不可重复读

repeatable reda(默认) 导致幻读

serializable

脏读 (读到了别人未提交的事务的结果)

不可重复读 (在两次查询的期间别人进行了事务提交 读取的值不一样)

幻读(两次查询的过程中 查找的行数不一样)

32.数据库的三大范式

第一范式 (1NF) 每一列不可再分

第二范式(2NF) 属性完全依赖于主键(每张表值描述一件事情)【列与主键有关】

第三范式(3NF) 每一列都直接依赖于主键 【列与主键之间相关,不能间接相关】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值