先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:xhs1999xhs (备注Java)
正文
目录
String补充用法
上一篇文章我们详细比较了 String 的内存,但是我们大部分使用 String 都是比较内容,那么我们应该怎么做呢?其实很简单,比较内容我们只需要比较哈希值就行啦,或者用 equals方法比较字面值。
equals
用法:比较字面值
public static void main(String[] args) { String str1="12"; String str2="12"; System.out.println(str1.equals(str2)); } //true
注意: 比较前后关系
public static void main(String[] args) { String str1="12"; String str3=null; System.out.println(str3.equals(str1)); } //Exception in thread "main" java.lang.NullPointerException
这样写就歇菜了,引用值不能为null,接着互换位置
public static void main(String[] args) { String str1="12"; String str3=null; System.out.println(str1.equals(str2)); } //false
这样就没问题了!
null 与 " "
再来说一个大家容易忽略的问题
public static void main(String[] args) { String str1="";//str1这个引用指向的字符串是空的 String str2=null;//str2这个引用不指向任何对象 System.out.println(str1.equals(str2)); } //false
结合上面的 equals 例子我们可以知道这样的写法不会报错,因为 str1 的指向是空不是null;
对参数为空判断,大家有没有注意过这种写法
public static void func(String s) { //正确 if(s == null || s.length()==0){ System.out.println("参数不能为空!"); } }
现在做一个更改
public static void func(String s) { //错误 if(s.length()==0 || s==null){ System.out.println("参数不能为空!"); }
这样就不对了,如果 **s** 为null,那么它是没有长度的,妥妥的给你报空指针异常!
字符串不可变?(反射)
String可以重新定义吗?
我们先来看一个案例,更改int[] 的值
public static void main(String[] args) { //数组的整体赋值只有一次机会,就是在定义的时候 final int[] array = {1,2,3,4,5}; array = new int[]{4,5,6,7,8}; }
答案很显然不行,因为被 final 修饰了
再来看这个例子,我们做到吗?改变value值
public static void main(String[] args) { String s1="12"; String s1="11"; } //这种写法不可以,这是改变指向
那么我可以通过 对象.value 来修改呢?也不可以,因为源码中是私有的,图片上一篇里有。
那么也做不到吗?其实可以做到,用反射!
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { String s1="12"; Class<?> c1 = String.class; // 获取 String 类中的 value 字段,这个 value 和 String 源码中的 value 是匹配的 Field valueField = c1.getDeclaredField("value"); // 将这个字段访问权限设为 true valueField.setAccessible(true); // 把 str 中的 value 属性获取到 char[] value = (char[]) valueField.get(s1); //修改value[0]的值 value[0] = 'h'; System.out.println(s1); }
对于这块内容的话 Nick 会在Java进阶中详细的讲,这里稍作了解哈~
为什么 String 要不可变?(不可变对象的好处是什么?)
- 方便实现字符串对象池. 如果 String 可变, 那么对象池就需要考虑何时深拷贝字符串的问题了.
- 不可变对象是线程安全的.
- 不可变对象更方便缓存 hash code, 作为 key 时可以更高效的保存到 HashMap 中.
Kafka实战笔记
关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图
- Kafka入门
- 为什么选择Kafka
- Karka的安装、管理和配置
- Kafka的集群
- 第一个Kafka程序
afka的生产者
- Kafka的消费者
- 深入理解Kafka
- 可靠的数据传递
- Spring和Kalka的整合
- Sprinboot和Kafka的整合
- Kafka实战之削峰填谷
- 数据管道和流式处理(了解即可)
- Kafka实战之削峰填谷
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:xhs1999xhs (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
削峰填谷**
[外链图片转存中…(img-pTSLDM5d-1713695720128)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:xhs1999xhs (备注Java)
[外链图片转存中…(img-ohQuINTl-1713695720128)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!