面试题1(28道)

1.Redis的基础数据类型有哪些?并简单的描述

- String:字符串

- list:有序集合,一键多值,值可以重复。

- set:无序,一键多值,值不可以重复。

- zset:有序不可重复的集合。一键多值。

- hash:键值对

2.JWT鉴权的流程

- 1、用户登录

- 2、服务的认证,通过后根据secret生成token

- 3、将生成的token返回给用户

- 4、用户每次请求携带token

- 5、服务端利解读jwt签名,判断签名有效后,从Payload中获取用户信息

- 6、处理请求,返回响应结果

3.简述geteway网关的功能

- 1.动态路由

- 2.负载均衡

- 3.鉴权

4.简述nacos注册中心的作用

- 1。通过服务名获得服务位置

5.写出四种以上的RabbitMQ的工作模式

- 1.简单模式

- 2.工作者模式

- 3.通配符模式

- 4.订阅模式

6.简述事务的特性

1.原子性:操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态

2. 一致性:事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳

3. 隔离性:隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离

4.持久性:当事务正确完成后,它对于数据的改变是永久性的。

7.Git的常用命令(命令+中文解释)至少六个

- 1.git init 初始化

- 2.git status 添加暂存区

- 3.git commit -m "日志信息" 文件名 提交本地库

- 4.git branch 分支名 创建分支

- 5.git branch -v 查看分支

- 6.git checkout 分支名 切换分支

8.Linux的常用命令(命令+中文解释)至少六个

- 1.ip addr 查看ip地址

- 2.cat 文件名 查看文件内容

- 3.rm -f 删除

- 4.tar -zcvf 压缩

- 5.tar -zxvf 解压

- 6.mkdir 创建文件

9.接口的抽象类的区别

- 1.一个接口只能继承一个抽象类

- 2.一个抽象类可以实现多个接口

10.Java的三大特性

- 1.封装:隐藏对象的属性和实现细节

- 2.继承:每个类只能有一个父类

- 3.多态:一个类可以有多种表现形态

11.Java基本数据类型(整型的取值范围)

- 1.整型byte(-128~127)

- 2.整型short(-32768~32767)

- 3.整型int(-2的31次方~2的31次方-1)

- 4.整型long(-2的63次方~2的63次方-1)

- 5.浮点型float

- 6.浮点型double

- 7.布尔型boolean

- 8.文本型char

12.==和equals()的区别

“==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值

equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值

13.ArrayList和LinkedList的区别(底层的数据结构分别是什么)

- 1.ArrayList是查询快底层是数组

- 2.LinkedList是增删快底层是链表

14.简述事务的隔离级别

- 1.安全:读未提交<读已提交<可重复读<串行化

- 2.性能:读未提交>读已提交>可重复读>串行化

15.简述break和continue的区别

- 1.break用于强制退出不执行循环内剩余的代码

- 2.continue用于终止某次循环跳过循环中剩余代码,判断是否进行下次循环

16.简述什么是redis的缓存穿透,缓存雪崩,缓存击穿。

- 1.缓存穿透:查询一个数据库不一定存在的数据,数据查询先进行缓存查询,如果key不存在或过期,再对数据库进行查询,放到缓存,如果对象为空,不放缓存

- 2.缓存雪崩:缓存中大量数据过期,查询数据量大,引起数据库压力过大,和缓存击穿不同的是,缓存雪崩是不同数据过期,很多数据查不到从而查数据库

- 3.缓存击穿:是指缓存中没有数据库中有的数据,对某个key不停的访问,当缓存时间到期,就会穿破缓存,直接请求数据库

17.Object类中的常用

- 1.getClass

- 2.toString

- 3.hashCode

- 4.clone

- 5.equals()

- 6.wait

18.String中统计某个字符出现的次数,String字符串的反转

- 1.记录字符串总长度将想要修改的字符在字符串中改为空字符,再用总长度减去替换后的长度等于出现次数

- 2.将String字符串转化为字符数组,再反转字符数组

19.String经常使用的方法有哪些?转int?分割,截取的方法?

- 1.length长度

- 2.subString截取

- 3.split分割

- 4.parseint转int

20.JDK和JRE的区别

- 1.JRE是java运行时环境而JDK是java开发工具包,JDK包含JR

21.重写与重载的区别

重写:发生在父子类中 方法名,参数列表必须相同 返回值范围小于等于父类 抛出的异常返回小于等于父类 访问修饰符大于等于父类 如果父类访问修饰符为private 则子类不能重写改方法

重载:发生在同一个类中 方法名相同 参数类型不同 个数不同 顺序不同 方法和返回值可以不同 发生在编译时

22.java的集合体系

java集合可分为collection和Map两种体系

collection下面有两个接口list和set

list下面有三个实现类 ArrayList LinkedList Vector

set下面有两个个实现类HashSet TreeSet

map下面有三个实现类 HashMap TreeM ap LinkedHashMap  

23.字节流和字符流的区别

1, 字节流和字符流是根据处理类型区分的

2, 字节流何以处理任何对象 包括二进制对象 而字符流只能处理字符或者字符串

3, 字节流不能直接处理unicode字符 而字符流可以处理

24.session和cookie的区别

1, cookie 只能存储英文字符串,session可以存储任意数据

2, cookie 只能存储少量数,session可以存储大量数据

3, cookie 默认生命周期是当前会话,关闭浏览器自动销毁,如果设置了setMaxAge则到期就销毁,session默认生命周期是30分钟

25.什么是java序列化,如何实现java序列化

序列化:把java对象转换为字符序列的过程

反序列化:把字符序列恢复为java对象的过程

26.hashMap的常用遍历方式

使用迭代器(iterator)EntrySet的方式进行遍历

使用迭代器(iterator)KeySet的方式进行遍历

使用For Each EntrySet的方式进行遍历

使用For Each KeySet的方式进行遍历

使用Lambda表达式的方式进行遍历

使用Streams API单线程的方式进行遍历

使用Streams API多线程的方式进行便历

27.HashMap中的put方法执行过程大体如下:

1、判断键值对数组table[i]是否为空(null)或者length=0,是的话就执行resize()方法进行扩容。

2、不是就根据键值key计算hash值得到插入的数组索引i。

3、判断table[i]==null,如果是true,直接新建节点进行添加,如果是false,判断table[i]的首个元素是否和key一样,一样就直接覆盖。

4、判断table[i]是否为treenode,即判断是否是红黑树,如果是红黑树,直接在树中插入键值对。

5、如果不是treenode,开始遍历链表,判断链表长度是否大于8,如果大于8就转成红黑树,在树中执行插入操作,如果不是大于8,就在链表中执行插入;在遍历过程中判断key是否存在,存在就直接覆盖对应的value值。

6、插入成功后,就需要判断实际存在的键值对数量size是否超过了最大容量threshold,如果超过了,执行resize方法进行扩容。

28. String、StringBuilder、StringBuffer的区别

String是不可变的,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。

StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。StringBuffer对象是一个字符序列可变的字符串,它没有重新生成一个对象,而且在原来的对象中可以连接新的字符串

StringBuilder类也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员爱摸鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值