请问哪位好友有Java的学习心得分享一下,谢谢?

杨欢64252


题主你好,作为一个自学过来的Java开发希望以下一些个人的学习经验可以帮到你。

学习路径

在学习Java的相关知识时,必须先确立一条学习路径,这方面可以参考国内互联网公司的Java相关职位的技术要求。个人是一名纯Java后端,我建议的学习路径是Java基础->Mysql->mybatis->Spring Boot->SpringCloud->Redis,这些都是目前国内大部分互联网公司都会使用的技术栈。当对这些都有一定了解后个人建议可以去了解一些中间件或扩展知识,如消息中心(RocketMQ、Kafka)、Nginx、ELK(ElasticSearch+Logtash+Kibana)、Docker+Kubernetes+Rancher等。

学习方法

在学习期间一定要多敲代码操作,个人建议再简单的知识点最好到敲码验证一下,并在敲的过程中要思考清楚这个类/方法的主要作用是什么,并在此之上思考在实际开发中可以用到什么地方。

Java基础

Java基础类中常见的函数式接口Function、Predicate、Consumer、BiConsumer等,对这些接口有所了解的都知道Java的Stream、Map、Optional等类中有不少方法的参数都是这些函数式接口的,最常见的用法就是Map的foreach(BiConsumer)、List的foreach(Consumer)、List.stream()转Stream后的一系列函数式操作,但从书籍/网站上了解到这些知识以一回事,有没有实际测试过放到项目中又是另一回事。每次我自己去编码验证知识点成功后都会感到成就感,然后会思索能不能再扩展到其它地方使用。


以从List中提取属性转Map为例,最原生的做法就是将List转Stream再函数式提取,如下:

Map<long> idNameMap = list.stream() .collect(Collectors.toMap(Classify::getId, Classify::getName));/<long>

后来觉得这样需要两行且需要转Stream(每调用stream方法后进行换行可以提高流程转换的可读性),可不可以通过函数式编程简化为一行并保证可读性,于是我写了一个工具类去完成这件事:

public static Map collectToMap(Collection list, Function keyGetter) { Map propertiesMap = new HashMap<>(list.size()); list.forEach(e -> propertiesMap.put(keyGetter.apply(e), e)); return propertiesMap; }

当时在这过程中用到的Function函数式接口也提高了我对函数式编程的理解,转换的代码也成了以下这个样子:

Map<long> idMap = ListUtils.collectToMap(list,Classify::getId,Classify::getName);/<long>

虽然这不是什么了不起的知识点与编码,但实践过程中带来的提升远非仅仅观看带来的提升高的。

框架/工具学习

所谓的框架只是基于基础搭建达到某些功能的工具集合,使用合适的框架可以很好的避免重复造轮子耗费的成本,但对于框架的核心流程还是需要理解的,这样才可以再实际开发中灵活去使用与扩展,所以个人推荐框架学习的方式是:了解其功能->功能的核心加载流程->尝试根据自己的想法进行扩展。

以SpringBoot为例,SpringBoot为我们大大的缩减了项目搭建所需要的实际,其为大部分开发者都默认设置好了常用的配置值,当默认配置不是我们想要的时候我们只需在配置文件中更改即可。SpringBoot的自动化配置虽然可以省去不少麻烦,但如果我们有些想要的自动化配置SpringBoot没有提供怎么办?那这时我们就需要了解SpringBoot自动化配置的加载流程,并据此方式自定义一套我们自己的自动化配置,所以在学习每个框架前我都会先了解该框架的核心是哪。个人当初在了解了SpringBoot的加载流程后也写了全局参数校验、Swagger自动化配置、自己使用的SpringBoot common框架,当自己想搭点功能测试时也可以快速的添加自己所需要的脚架依赖。

tips:SpringBoot的自动化配置流程是读取classpath:META-INF/

spring.factories

(即resources/

spring.factories)文件中的配置类,然后再生成该配置类容器bean,并根据该类的扫描配置生成所需bean,配置文件的提示是根据META-INF/

spring-configuration-

metadata.json

中的内容进行提示的,可以在spring boot的各种集成框架下找到这些文件,spring-boot-autoconfigure依赖包中存放了自动化配置加载流程的功能类。

知识总结

当学习完一套技术知识点后,个人建议可以做一下总结,因为总结的过程是一个知识梳理的过程,可以加深对知识的理解,如我之前在使用RocketMQ作为消息中心编码测试并项目发布后也写了一篇Spring Boot RocketMQ的使用方式与消息中心的架构设计及作用,在总结完后我是可以感到自己在这方面知识理解的提升的。

知识总结个人建议可以总结到笔记软件(如目前个人的笔记用的是Boostnote)上或者博客上,既能方便日后回顾,又可添加自己的潜在价值(大公司是有一套根据博客点赞与浏览量筛选候选人的方式的,即使学历不足,但只要你的博客展示出你强硬的技术水平,不用担心找不到想要的面试机会)。

学习编程需要多加思考与编码验证,执行合一方可融会贯通,希望以上内容能对题主有用。


Wilson1995


思路决定出路人的学习是无止境的,只有不断的学习,才能给自己更丰富,更开阔的思路,经过两天的学习,让我感悟到很多事情,都是有两面性的,穷则变,变则通,出路在于变通,当目前的想法不能成功,说明你的想法有可能是错的,或者是由于没有改变自己的思路或者是懒于改变自己的思路或者是根本不想改变自己的思路,成功总有方法,想成功就要找方法,而思考是一切正确策略和方法的起源,思考其实就是问与答的过程,当你做一件事情没有达到目标时,问自己一个为什么?问自己问题出在了哪里,然后自己给出答案,学会反思学会换位思考。“没有不好的孩子,只有不好的教育”,例如,在课堂中,在一日生活中孩子没有如我们所预想的那样做一些正确的事情,不能达到我们所要求的目标时,我们只能对孩子着急吗?与其对孩子发脾气,不如改变自己的教育观点理念,反思自己为什么,不能懒于改变自己的思路,就要求别人去适应自己的思路,我们何不反思自己从事情的另一个角度开始着手,可能会有意外收获,就像我们经常说的,给孩子机会孩子就会给你惊喜。从中,我还深刻的理解到一个道理,大凡世界上能做大事的人,都能把小事做细,做好,做好了每件小事逐渐积累就会发生质变,小事就会变成大事,任何一件小事只要你把它做规范了,做到位了,做透了,你就会从中发现机会,找到规律,从而成就大事,也就是说,一件事情我会做了,但做好了吗,做精了吗,一个人无论从事何种职业,都应该尽心尽责


在行走的骆驼


你好,我是胡子哥,结合我的经验给你回答这个问题。

Java是面向对象的一门语言,目前也是在各大互联网行业和公司主要运用的一门语言。如何学习好,给你一下几点建议:

  • 制定职业和学习目标
  • 加强基础知识,熟读和深入学习源码
  • 架构思维设计与运用
  • 多向牛人请教,坚持写技术Blog

一、制定职业和学习目标

你可能会问题为什么只要制定职业目标和学习目标?有了目标就有了方向,有了航行的路线。在你走向远方的路上不至于迷茫和焦虑,就像你现在提这个问题一样,我猜你已经迷茫了。有了目标你会进步很快,走的很充实。制定个人的职业目标和企业的战略规划是一样的,企业在大市场中如果没有方向或者战略制定失误,想在市场上占领一席之地是很艰难的。到了一定年龄你会失去了核心竞争力,得不偿失,后悔莫及。

在前行的路上你要停下来进行深度思考,光靠努力勤奋是不行的为什么要深度思考那?深度思考是为了保障你向正确的方向发展。努力勤奋是保障你在正确的方向上执行到位。建议你想清楚,避免瞎子摸象,在这个行业的职业路线还是比较成熟的,有迹可循。你可以按照下面的方法去想象自己的目标,如下:

1.未来三年我要在什么行业达到什么样的目标?

2.达到这个目标需要具备什么样的能力?

3.目前我处于什么样的情况?差距在哪里?

4.我应该如何做。

为什么要提行业那,因为每个行业的业务有很大的不同,从垂直行业来说你更有核心竞争力。

二、加强基础知识,熟读和深入学习源码

Java的基础知识点博大精深,有了良好的底蕴基础,你在解决一些复杂性的问题上会游刃有余。比如说性能优化。为什么让你熟读和深入学习源代码?源码涉及的知识要点还是非常广泛深入的。源码当中的架构设计理念和实现非常优美,也覆盖了很多设计模式。比如有类是线程安全的,也有线程不安全的,哪些适用于并发设计,哪些不适合,如果你不熟悉,你的代码可能会一团糟。在Java里面最重要的一块是多线程并发编程,一定要重点掌握。熟读和深度学习源码的相关知识对于未来实现中间件架构、业务架构、代码优化、原有组件扩展都会有很大的帮助,这也是未来发展的基础。

需要读哪些框架的代码哪?比如Javasdk,Spring,SpringBoot,Mybatis等,Javasdk是最基础也是最重要的.

三、架构思维设计与运用

架构设计思维和你的职业规划也是一个道理,没有掌握架构设计思维的人会永远停留初级阶段。架构设计为业务服务,是为了让服务扩展性、稳定性、可靠性等有良好的支撑,服务走的更远,支持更多业务的开展。整个系统得不到合理的架构设计规划,随着业务的增长,在不远的将来系统就会变的臃肿,维护性差,冗余不可复用,Bug多,运行过程可能会导致系统崩溃。
如何掌握架构设计的思维,给你推荐几本书,架构之美、UML和模式应用、面向模式的软件架构 (一共5卷,每卷都值得读,分别是模式系统(卷1),并发和联网对象模式(卷2),资源管理模式(卷3),分布式计算的模式语言(卷4),模式与模式语言(卷5))、重构、设计模式、代码大全。以下是分布式架构、微服务架构、性能优化的相关知识点汇总希望能给你带来更多方向和收获,如图。

四、多向牛人请教,坚持写技术Blog

在工作中和平常的生活中多和牛人交流,他们的经验可以说让胜读十年书。一定要保持求知若渴虚心若愚的心态。这样人家才会教你。另外你可以到一些技术网站上去学习,一般他们都会有Blog,可以去参考学习。学习的网站有Github,CDSN,Stackoverflow,iteye(javaeye),infoq,ifeve(并发编程)等向你推荐下。也可以去多参加一些技术论坛,在技术论坛上,一些大公司的人会针对成熟的解决方案进行分享,同时也可以交朋友。

另外作为一个理工科的程序员来讲,可能不愿意去写作。建议养成写作的习惯,真的很好,知识的沉淀需要有一个承载的地方,它可以帮助你进一步思考和总结,对于代码实现、架构、技术问题的解决能力都会有一个质的飞跃。当你回头看的时候,你发现写Blog真是一件好事情,非常有价值。

就回答到这里吧,希望能帮到你,觉得不错的话请给个赞或评论。另外还请您点击关注,我会保持更多的内容分享,您的助力都是激励我前行的动力,感谢🙏!


产品胡子哥


我个人觉得吧,还是上海的java培训课程比较好,

才能给自己更丰富,更开阔的思路,经过两天的学习,让我感悟到很多事情,都是有两面性的,穷则变,变则通,出路在于变通,当目前的想法不能成功,说明你的想法有可能是错的,或者是由于没有改变自己的思路或者是懒于改变自己的思路或者是根本不想改变自己的思路,成功总有方法,想成功就要找方法,而思考是一切正确策略和方法的起源,思考其实就是问与答的过程,当你做一件事情没有达到目标时,问自己一个为什么?问自己问题出在了哪里,然后自己给出答案,学会反思学会换位思考


分享到:


相關文章: