前言
现如今的互联网应用大都是采用 分布式系统架构 设计的,所以 消息队列 已经逐渐成为企业的应用系统 内部通信 的核心手段,
它具有 低耦合、可靠投递、广播、流量控制、最终一致性 等一系列功能。
当前使用较多的 消息队列 有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ 等,而部分数据库 如 Redis、MySQL 以及 phxsql ,如果硬搞的话,其实也可实现消息队列的功能。
可能有人觉得,各种开源的 MQ 已经足够使用了,为什么需要用 Redis 实现 MQ 呢?
- 有些简单的业务场景,可能不需要重量级的 MQ 组件(相比 Redis 来说,Kafka 和 RabbitMQ 都算是重量级的消息队列)
那你有考虑过用 Redis 做消息队列吗?
这一章,我会结合消息队列的特点和 Redis 做消息队列的使用方式,以及实际项目中的使用,来和大家探讨下 Redis 消息队列的方案。
- pow 方法
在 java 中没有幂运算,需要借助 Math 类的 pow 方法,如
double y=Math.pow(x,a);
- floorMod 方法
floorMod 其方法实就是求余,不同于 % 符号来求余数,它还可以对负数求余(正符合“欧几里得”规则:余数总是要 ≥ 0),如
double y=Math.floorMod(m,n);
//求 m 除 n 的余数
但是如果除数是负数,即 n 是负数,则 floorMod 会得到负数结果
- 常用三角函数
Math.sin
/Math.cos
/Math.tan
/Math.atan
/Math.atan2
- 指数函数以及反函数
Math.exp
/Math.log
/Math.log10
- 常量 Π 和 e 的近似值
Math.PI
/Math.E
不必在数学方法名和常量前名前加 “Math”,只要在源文件顶部加上
import static java.lang.Math.*;
- 数值类型之间的转换
- 直接附书中一张图片吧!图里面实心箭头表示无信息丢失的转换,虚线箭头表示可能有精度损失的转换。
但是问题来了,我开始疑惑为什么 int 转 float 是虚线箭头,按理说 float 表示的数值范围要比 int 多呀!后来经过思考我发现,如果int类型的值在 224 以内,float 是可以精确表示的,但是当超过这个数的时候就不一定能精确表示了。如果想要搞清楚的话,大家可以先去我之前写的 [剖析C语言数据在内存中的存储](() 这篇文章里了解浮点型在内存中的存储。
- 两个数值进行计算时,如果都是 int 类型一下的就都要先转换为 int 类型,其他的都要先转换为这个数中数值范围更大的那个类型。
- 强制类型转换
强制类型转换有两种方法
- (要转换类型)+ 待转换变量名,如
double x=9.997;
int ly=(int)x;
ly 的结果是9,这种转换通过截断小数部分将浮点值转换为整型。如果你想对浮点数进行舍入运算,就要用到下面的方法。
- Math.round 方法,如
double x=9.997;
int ly=(int)Math.round(x);
ly 的结果是10,但是为什么前面还是加了(int)呢?因为 round 方法返回的结果为 long 类型,防止信息丢失的可能,需要强制转换
注意:如果强制转换的类型的值超过了该类型的范围,则结果就会被截断为完全不同的值
- 关系运算符
和 C 语言一样,&& 表示逻辑“与”,|| 表示逻辑“或”。但是要注意它们会按照“短路”方法求值,如
exp1 && exp2
只要 exp1 是假,那么第二个表达式则不进行计算。再如
exp1 || exp2
只要 exp1 是真,那么第二个表达式则不进行计算。
- 位运算符
- 和 C 语言一样,java 有 & 和 | 和 ^ 和 ~。但是位运算符与关系运算符的 && 和 ||不同的是,它们不采用“短路”方法求值,即计算结果之前两个数都要计算
- 应用在布尔值上时,& 和 | 和 ^ 运算符也会得到一个布尔值,而 ~ 会报错
- 与 C 语言不一样的是,Java 还有 >>> 位移运算符,该运算符会用 0 填充高位,并且 >> 位移运算符明确用符号位填充高位不同
[](()2. 字符串
==========================================================================
Java 字符串就是 Unicode 字符串序列。如,串 “java\u” 就是由5个 Unicode 字符 j、a v、a 和 TM 组成的。
接下来稍微介绍一下 String 类的一些方法
- 提取字串
String 类的 substring 方法可以从一个较大的字符串提取出一个字串,如
String str = “helloworld”;
String s = str.substring(0,5);
// s 就会为 “hello”
在 substring 中,是从0开始计数的,并且第二个参数是不想复制的第一个位置(就是左闭右开啦)
- 拼接
- Java 语言使用 + 号连接两个字符串,如
String str1 = "hello";
String str2 = "world";
String s = str1 + str2;
// 上述代码将 "helloworld" 赋值给变量 message
- 将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串,如
int age = 18;
String str = "i am";
String s = str + age;
只不过如果有几个非字符串的值相加再加一个字符串,就先进行运算,再进行拼接
- 可以使用静态 join 方法,把多个字符串放在一起,用一个界定符分隔开,如
String all = String.join(" / ","s","M","L","XL");
// 结果 all 为 "S / M / L / XL"
- 不可变字符串
由于 String 类没有提供用于修改字符串的方法,所以在 Java 文档中将 String 类对象称为不可变字符串。而如果要将一个字符修改时,Java 中可以这样做
String str = “helloworld”;
str = str.substring(0,5) + “java”;
// 这样就可以将 “helloworld” 修改成 “hellojava” 了
并且不可变字符串有一个优点:编译器可以让字符串共享
- 检测字符串是否相等
使用 equals 方法检测两个字符串是否相等,如
s.equals(t);
// 如果字符串 s 和 t 相等,则返回 true,否则返回 false
《一线大厂Java面试真题解析+Java核心总结学习笔记+最新全套讲解视频+实战项目源码》开源
Java优秀开源项目:
- ali1024.coding.net/public/P7/Java/git
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
s.equals(t);
// 如果字符串 s 和 t 相等,则返回 true,否则返回 false
《一线大厂Java面试真题解析+Java核心总结学习笔记+最新全套讲解视频+实战项目源码》开源
Java优秀开源项目:
- ali1024.coding.net/public/P7/Java/git
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
[外链图片转存中…(img-YS1V2MYC-1649570915775)]