【Java 核心技术卷 I,阿里巴巴发布“限量版”Java零基础宝典

本文探讨了在分布式系统中,消息队列如RabbitMQ、Kafka等的重要作用,提到了在某些简单场景下,Redis也可作为轻量级消息队列的解决方案。同时,文章深入介绍了Java中的数值运算,包括幂运算、求余、三角函数、类型转换及关系运算符等,并强调了字符串操作在Java中的应用和特性。此外,还分享了Java面试中关于Redis的知识点和学习资源。
摘要由CSDN通过智能技术生成

前言

现如今的互联网应用大都是采用 分布式系统架构 设计的,所以 消息队列 已经逐渐成为企业的应用系统 内部通信 的核心手段,

它具有 低耦合可靠投递广播流量控制最终一致性 等一系列功能。

当前使用较多的 消息队列 有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ 等,而部分数据库 如 Redis、MySQL 以及 phxsql ,如果硬搞的话,其实也可实现消息队列的功能。

可能有人觉得,各种开源的 MQ 已经足够使用了,为什么需要用 Redis 实现 MQ 呢?

  • 有些简单的业务场景,可能不需要重量级的 MQ 组件(相比 Redis 来说,Kafka 和 RabbitMQ 都算是重量级的消息队列)

那你有考虑过用 Redis 做消息队列吗?

这一章,我会结合消息队列的特点和 Redis 做消息队列的使用方式,以及实际项目中的使用,来和大家探讨下 Redis 消息队列的方案。

  1. pow 方法

在 java 中没有幂运算,需要借助 Math 类的 pow 方法,如

double y=Math.pow(x,a);

  1. floorMod 方法

floorMod 其方法实就是求余,不同于 % 符号来求余数,它还可以对负数求余(正符合“欧几里得”规则:余数总是要 ≥ 0),如

double y=Math.floorMod(m,n);

//求 m 除 n 的余数

但是如果除数是负数,即 n 是负数,则 floorMod 会得到负数结果

  1. 常用三角函数

Math.sin / Math.cos/ Math.tan / Math.atan/ Math.atan2

  1. 指数函数以及反函数

Math.exp / Math.log / Math.log10

  1. 常量 Π 和 e 的近似值

Math.PI / Math.E

不必在数学方法名和常量前名前加 “Math”,只要在源文件顶部加上

import static java.lang.Math.*;

  1. 数值类型之间的转换
  1. 直接附书中一张图片吧!图里面实心箭头表示无信息丢失的转换,虚线箭头表示可能有精度损失的转换。在这里插入图片描述
但是问题来了,我开始疑惑为什么 int 转 float 是虚线箭头,按理说 float 表示的数值范围要比 int 多呀!后来经过思考我发现,如果int类型的值在 224 以内,float 是可以精确表示的,但是当超过这个数的时候就不一定能精确表示了。如果想要搞清楚的话,大家可以先去我之前写的 [剖析C语言数据在内存中的存储](() 这篇文章里了解浮点型在内存中的存储。
  1. 两个数值进行计算时,如果都是 int 类型一下的就都要先转换为 int 类型,其他的都要先转换为这个数中数值范围更大的那个类型。
  1. 强制类型转换

强制类型转换有两种方法

  1. (要转换类型)+ 待转换变量名,如
double x=9.997;
int ly=(int)x;
ly 的结果是9,这种转换通过截断小数部分将浮点值转换为整型。如果你想对浮点数进行舍入运算,就要用到下面的方法。
  1. Math.round 方法,如
double x=9.997;
int ly=(int)Math.round(x);
ly 的结果是10,但是为什么前面还是加了(int)呢?因为 round 方法返回的结果为 long 类型,防止信息丢失的可能,需要强制转换

注意:如果强制转换的类型的值超过了该类型的范围,则结果就会被截断为完全不同的值

  1. 关系运算符

和 C 语言一样,&& 表示逻辑“与”,|| 表示逻辑“或”。但是要注意它们会按照“短路”方法求值,如

exp1 && exp2

只要 exp1 是假,那么第二个表达式则不进行计算。再如

exp1 || exp2

只要 exp1 是真,那么第二个表达式则不进行计算。

  1. 位运算符
  1. 和 C 语言一样,java 有 & 和 | 和 ^ 和 ~。但是位运算符与关系运算符的 && 和 ||不同的是,它们不采用“短路”方法求值,即计算结果之前两个数都要计算
  1. 应用在布尔值上时,& 和 | 和 ^ 运算符也会得到一个布尔值,而 ~ 会报错
  1. 与 C 语言不一样的是,Java 还有 >>> 位移运算符,该运算符会用 0 填充高位,并且 >> 位移运算符明确用符号位填充高位不同

[](()2. 字符串

==========================================================================

Java 字符串就是 Unicode 字符串序列。如,串 “java\u” 就是由5个 Unicode 字符 j、a v、a 和 TM 组成的。

接下来稍微介绍一下 String 类的一些方法

  1. 提取字串

String 类的 substring 方法可以从一个较大的字符串提取出一个字串,如

String str = “helloworld”;

String s = str.substring(0,5);

// s 就会为 “hello”

在 substring 中,是从0开始计数的,并且第二个参数是不想复制的第一个位置(就是左闭右开啦)

  1. 拼接
  • 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"
  1. 不可变字符串

由于 String 类没有提供用于修改字符串的方法,所以在 Java 文档中将 String 类对象称为不可变字符串。而如果要将一个字符修改时,Java 中可以这样做

String str = “helloworld”;

str = str.substring(0,5) + “java”;

// 这样就可以将 “helloworld” 修改成 “hellojava” 了

并且不可变字符串有一个优点:编译器可以让字符串共享

  1. 检测字符串是否相等

使用 equals 方法检测两个字符串是否相等,如

s.equals(t);

// 如果字符串 s 和 t 相等,则返回 true,否则返回 false

《一线大厂Java面试真题解析+Java核心总结学习笔记+最新全套讲解视频+实战项目源码》开源

Java优秀开源项目:

  • ali1024.coding.net/public/P7/Java/git

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

都是“Redis惹的祸”,害我差点挂在美团三面,真是“虚惊一场”

s.equals(t);

// 如果字符串 s 和 t 相等,则返回 true,否则返回 false

《一线大厂Java面试真题解析+Java核心总结学习笔记+最新全套讲解视频+实战项目源码》开源

Java优秀开源项目:

  • ali1024.coding.net/public/P7/Java/git

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

[外链图片转存中…(img-YS1V2MYC-1649570915775)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值