java面试题&笔记


说明:此文为本人学习笔记,记录简单,如有错误,还望指出。


操作系统的线程有哪些??

1、内核支持线程
2、用户级线程

创建线程的方式有哪些??

1、继承Thread类
2、实现Runable接口
3、实现Callable接口
4、使用Lambda表达式
5、使用线程池

Java的线程有几种状态??6种

1、New新建
2、Runnable运行
3、Waiting等待
4、Timed_waiting超时等待
5、Bolcked阻塞
6、Terminated销毁终止

并发和并行有什么区别??

并发:两辆车在同一条道行驶(过收费站的过程)
并行:两辆车分别在两条道行驶(在高速上行驶的过程)

sleep()和wait()的区别??

1、sleep是Thread的方法,wait是Object的方法。
2、sleep不会释放锁,wait会释放。
3、Sleep不依赖synchronized,wait会。
4、sleep不需要被唤醒(会被推入阻塞),wait需要被唤醒(会被中断)
4、Sleep一般用于当前线程休眠,wait用于多线程。

HashMap

1、结构上:
jdk1.7:数组+链表
jdk1.8:数组+链表+红黑树

hashmap与hashtable的区别

1、hashtable线程安全的,hashmap线程不安全
2、hashtable允许key为null,hashmap不允许key为null
2、两者的负载因子都是0.75,hashmap扩容是2倍,hashtable是2倍再加一。

mysql的优化

主要是:sql优化和索引优化
1、加索引(数据量多的时候,加在数据重复较少上面)
2、分库分表
3、读写分离(写操作可能会重建索引)
4、避免使用select * ,返回不必要的字段
5、避免使用通配符在字段前,防止全表扫描
索引失效:
1、索引上使用函数。
2、使用or
3、where时不用引号括起来(如果条件类型是不匹配,mysql会进行隐式转换)
4、不满足最左匹配原则(联合索引默认最左开始组合,innodb中b+树结构)
5、使用!=或<>
分页:
1、order by+索引(id分组分页)
2、返回最大偏移量(上次的最大条数)
3、根据义务需求,有时数据量过大,用户翻不到后面几页,就没必要查询后面的分页了
可用explain查看执行计划,并进行相应的优化。

mybatis里的分页是怎么实现的?

1、直接在sql里写limit关键字,然后传入当前页和每一页的页数
2、使用mybatis提供的rowbounds对象,实现内存级别的分页
3、基于mybatis里的interceptor拦截器,在select之前去动态的拼接分页的关键字

final、finalize和finally的不同之处

1、final是一个修饰符,可以修饰变量、方法、类。修饰变量,说明这个值是一个常量,不能被修改;修饰方法,不能被重写;修饰类,这个类不能被继承。
2、finally是一个关键字,常与try-catch一起用于异常处理,无论try块中是否有发生异常,finally块一定会被执行。
3、finalize是Object类的方法,是在对象被gc回收之前调用的,我们可以通过重写这个finalize方法给对象一次复活的机会,只能复活一次,但不能保证finalize方法立即执行,具体什么时候执行由虚拟机决定。

Mybatis中#{}和${}的区别是什么??

1、#是预编译处理,是占位符,$是字符串替换,是拼接符。
2、Mybatis在处理#时,会将sql中#替换为?号,调用preparedstatement来赋值。
3、Mybatis在处理$时,会将sql中$替换为变量的值,调用statement来赋值。
4、使用#可以有效的防止SQL注入,提高系统的安全性。

Spring的核心是什么??

1、IOC:控制反转
当需要一个对象时,我们往往需要去new一个对象,然而spring容器已经为我们创建了,我们只需调用即可。
2、AOP:面向切面编程
我们把事务纵向抽成一个一个对象,然后对这些一个一个的对象某些类似方面进行横向抽成一个切面,对这个切面进行一些如权限管理,事务管理等公用操作处理的过程。

重载和重写的区别??

1、重载:发生在一个类中,方法名相同,参数类型不同,个数不同,顺序不同。
2、重写:子类重写父类,方法名、参数列表必须相同,返回值范围、抛出异常的范围都要小于等于父类。如果父类使用修饰符private那么子类就不能重写父类。

接口和抽象类的区别??

1、抽象类单继承,接口多实现。抽象类只能继承一个,接口可以实现多个。
2、抽象类中的成员变量可以是各种类型,而接口中的成员变量只能是常量(public static final)。
3、抽象类中可以存在普通成员函数,接口只能存在public abstract方法。

List、set、map区别

List:有序,可重复,允许多个null,取元素可用迭代器(iterator)取出所有元素,再逐一遍历,也可用get(int index)下标方式取元素。
Set:无序,不可重复的集合,最多允许一个null,取元素只能用迭代器iterator。
Map:键值对,键唯一,值不唯一。

Redis的数据类型

1、String
2、Hash
3、List
4、Set
5、Sortset

双向链表的插入操作过程(a与b之间插入c)

1、c的前驱结点指向a
2、a的后驱结点指向c
3、c的后驱结点指向b
4、b的前驱结点指向c

==与equals的区别

1、== 如果是基本数据类型比较的是值,如果是引用数据类型,比较的是所指对象的地址。
2、Equals比较的是对象的值。
其实Object中equals本质也是==,只是在某些情况下我们重写了它,比如string里面。

Java的泛型??

1、保证类型的安全性
2、消除强制转换
3、避免了不必要的装箱和拆箱
4、提高代码的重用性

Java的基本数据类型? 8种

1、byte
2、short
3、int
4、long
5、float
6、double
7、char
8、boolean

事务的四个特性

1、原子性(一个整体,要么都做,要么都不做)
2、一致性(执行的结果数据库应该保持一致)
3、隔离性(一个事务执行不能被其他事务干扰)
4、持久性(事务提交,数据库中数据的改变是永久的)

springMVC的重定向(redirect)和转发(forward)

1、servlet+jsp(sendRedirect方法)
2、mvc提供string类型,配置文件添加前缀和后缀,mvc默认转发
3、可再return时,添加redirect
4、Controller层,在return时添加redirect和forward
5、跳转页面传递数据可用model和session

GetMapping和requestMapping的区别

1、requestMapping可以指定get和post请求方式
2、getMapping等价于requestMapping的get请求方式

操作系统基础知识

1、操作系统就是控制和管理计算机硬件和软件资源(硬件就像cpu、硬盘)。
2、进程:表示一个程序的执行过程。执行前需要将程序放在内存中,才能被cpu处理。
3、操作系统实现/提供了哪些功能??文件管理(放在哪个文件夹)、存储器管理(放在内存的位置)、处理机管理(cpu处理)、设备管理(摄像头之类的)。
4、用户接口:命令接口和程序接口
5、命令接口:联机命令接口和脱机命令接口
6、联机命令接口:用户说一句,系统做一句(例如:cmd命令;也叫做交互式命令接口)
7、脱机命令接口:用户说一堆,系统做一堆。(c盘中打开.bat文件(指令清单),也叫做批处理命令接口)

Error和Exception的区别??

1、Error和Exception的父类都是Throuable类。
2、Error一般是指与虚拟机相关的问题。如系统奔溃、虚拟机错误,解决方案让程序中断,仅靠程序本身无法恢复和预防。
3、Exception是表示程序可以处理的异常,可以捕捉且可能恢复,应尽可能处理异常,使程序恢复运行,不应该随意终止。
4、Exception类又分为运行时异常(Runtime)和受检查的异常(Checked)
5、运行时异常:编译能通过,运行就终止
6、受检查的异常:可用try…catch捕获或者用throws抛出,交给它的父类处理,否则编译不会通过。

TCP的三次握手和四次挥手??

1、三次握手:客户端发送SYN给服务器,服务器收到SYN返回SYN+ACK给客户端,客户端收到SYN+ACK返回ACK给服务器。
2、四次挥手:主动方发送一个FIN给被动方,被动方收到FIN发送(确认)ACK给主动方,被动方发送FIN给主动方,主动方收到FIN发送(确认)ACK给被动方。

JAVA创建对象的方式??四种

1、使用new关键字
2、使用newInstance()方法。Class.forName()
3、使用clone()方法。必须实现Cloneable接口
4、使用反序列化的readObject()方法

SpringBoot的工作原理

RabbitMQ的工作流程

生产者发送消息流程
1、生产者和Broker建立TCP连接
2、生产者和Broker建立通道
3、生产者通过通道将消息发送给Broker,由Exchange将消息进行转发。
4、Exchange将消息转发给指定的Queue
消费者接受消息流程
1、消费者与Broker建立TCP连接
2、消费者与Broker建立通道
3、消费者监听指定Queue
4、当消息到达Queue时,Broker默认将消息推送给消费者
5、消费者接受到消息
6、ACK回复

RabbitMQ的工作模式

1、Simple(简单模式)
2、Work Queues(工作队列模式)
3、Publish/Subscribe(发布/订阅模式)
4、Routing(路由模式)
5、Topics(主题模式)
6、RPC

Java中static关键字的作用

static在类初次加载时会被初始化,只会执行一次,存在一个副本
1、修饰成员变量:静态变量被所有对象共享,内存中只有一个副本。
2、修饰成员方法:静态成员方法不依赖于任何对象就可以访问(就是不用去new对象再调用,直接用类名调用),静态成员方法不可以访问非静态成员方法和非静态成员变量。
3、修饰代码块:类一加载就会被执行。(适用于一些只需要进行一次的初始化操作代码块)

SpringCloud八大组件

1、Nacos:服务的注册与发现
2、ribbon:负载均衡
3、Openfeign: 服务调用
4、Nacos:配置管理
5、Sentinel:流控管理
6、Getway:网关
7、Sleuth:链路追踪
8、Seata:分布式事务

Bean的生命周期

1、实例化
2、属性赋值
3、初始化
4、销毁


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值