建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

Java程序员如何提升自己,有什么网站推荐GitHub够用吗?(java程序员如何提升解决问题的能力)

GG网络技术分享 2025-03-18 16:10 2


我是胡子哥,结合我的经验我从以下三个方面回答你

  • 确定自己的职业规划和未来发展方向
  • 如何提升自己
  • 网站推荐
一、确定自己的职业规划和未来发展方向为什么要确定自己的职业规划和未来发展方向?如果你没有明确的发展目标,对于未来需要掌握的技能也不会有明确的规划,就像瞎子走路一样,你会很迷茫,会产生焦虑感。虽然你可能可以到达一定程度的目标,但是这个过程的时间成本是巨大了,而且进步是最慢的。其实对于个人的定位发展和企业定位发展是类似的,从战略规划—目标分解—执行—结果反馈—优化每一个环节都不可少。一步错步步错,到了一定的年龄就失去核心竞争力,届时得不偿失。在我们走向远方的路上一定要停下了深度思考,如果你觉得你很勤奋努力,但是没有深度的思考,你的方向就会有缺失,从而迷失了方向。深度思考是保障你向正确的方向发展,勤奋努力是保障你把正确方向相关联的任务执行到位,从而达到你想要的预期目标。比如你是Java程序员,你未来可以是架构师、可以是研发总监、可以是CTO、可以是产品经理、可以是产品总监、可以产品VP等。你有了规划和目标,结合你自身目前的情况找差距,你会很清楚的了解自己如何到达目的地。二、如何提升自己上面我们说到要确定自己的职业规划和未来发展方向,希望你读到这里的时候已经有了大概的方向感。那首先祝贺你,你离你要实现目标的距离不远啦。做为一名Java程序员工,如何提升自己的技能,你可以从以下方面做起,希望能帮到你。
  • 熟读和深度学习源码的相关知识
你可能会问,我已经会用了为什么还要这么做。 源码涉及的知识要点还是非常广泛深入的。你会用很好,你还要学习的是里面如何实现,以及架构涉及的设计模式。里面的架构和实现是非常优美的,比如有线程安全的,也有线程不安全的,哪些适用于并发设计,哪些不适合,如果你不熟悉,你的代码可能会一团糟。熟读和深度学习源码的相关知识对于未来实现中间件架构、业务架构、代码优化、原有组件扩展都会有很大的帮助,这也是未来发展的基础。你可能会问要读哪些代码,比如JavaSdk,Spring,SpringBoot,Mybatis等,JavaSdk是最基础也是最重要的。
  • 掌握架构设计思维与应用
架构设计思维和你的职业规划也是一个道理,没有掌握架构设计思维的人会永远停留初级阶段。架构设计为业务服务,是为了让服务扩展性、稳定性、可靠性等有良好的支撑,服务走的更远,支持更多业务的开展。整个系统得不到合理的架构设计规划,随着业务的增长,在不远的将来系统就会变的臃肿,维护性差,冗余不可复用,Bug多,运行过程可能会导致系统崩溃。如何掌握架构设计的思维,给你推荐几本书,架构之美、UML和模式应用、面向模式的软件架构 (一共5卷,每卷都值得读,分别是模式系统(卷1),并发和联网对象模式(卷2),资源管理模式(卷3),分布式计算的模式语言(卷4),模式与模式语言(卷5))、重构、代码大全。以下是分布式架构、微服务架构、性能优化的相关知识点汇总希望能给你带来更多方向和收获,如图。

  • 掌握项目管理和开发工具
当你处于一个产品或者项目团队中,掌握项目管理的技能很有必要,产品或项目开发是一个相对复杂的过程,涉及产品需求对接、UI、架构设计、开发测试、发布等流程。对于如何建立沟通技能、优先级安排,开发进度安排、问题如何协调解决、激活战斗力也变的很重。可以推荐一本书人月神话。目前很多公司都采用敏捷开发,可以深入学习了解下。现在团队高效协作离不开工具的支持,需要掌握配置和使用技能。比如Maven、Gradle、Jenkins、Sonar、Git、Jira等
  • 建议坚持写技术Blog

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

三、网站推荐

Github有很多开源的好项目,作为拿来主义肯定省时省力,但对于你练好内功完全不适用。所以说只靠Github完全不够用。可以学习的网站还有CDSN,stackoverflow,iteye(javaeye),infoq,ifeve(并发编程)等向你推荐下。

就回答到这里吧,希望能帮到你,觉得不错的话请给个赞或评论,您的助力都是激励我前行的动力,感谢?!#####

对程序员来说,github确实是一个非常好的选择,很多优质项目都在github上托管,通过github确实可以阅读到大量的优秀代码,但是个人认为只依靠github还是远远不够的。推荐网站主要有两类,一类是各种交流平台,如:CSDN,Stack Overflow等;另一类是各优秀项目的官方文档。另外还可以结合GitHub和自己熟悉的IDE工具阅读项目的源码。

除网站之外,阅读和实践也是必不可少的,我自己阅读的书籍有:《深入理解Java虚拟机 JVM高级特性与最佳实践》、《Java并发编程的艺术》。

#####

本人10年开发培训经验,期间经历了Java Web,Android,H5,大数据,PHP等多个不同的方向的开发,也做过软件培训公司的金牌讲师,很有兴趣回答你这个问题。

IT行业是可以说是一个需要不停学习,不断充电的行业,如果不能够及时的更新自己的技能和知识储备,那么离淘汰也就为期不远了。

我说一下自己的学习充电的地方吧。

Android技能提升:Android开发者论坛,安卓巴士;

Java技能提升:csdn论坛,开源中国,github,还有各种框架自己的官方网站,比如Spring Boot与Spring cloud官网。


我从事互联网开发10年,主要的研究方向集中在Java web微服务架构领域,Android移动端研发,HTML5前端方向,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信你一定会有所收获。

如果有Java,Android,H5等开发方面的问题,或者是开发求职方面的问题,都可以在评论区留言,或者私信我。

#####

最好的的提升方式就是实战!
一直以来都想学Java,看了不少书,视频教程,但是真的要动手,就举步维艰!
今年年初刚好有个需求,ANDROID 的PDA 扫描二维码后,随即通过蓝牙的方式打印标签;当时不知哪来的勇气居然敢报价(2w+),竟然中单了[捂脸].
高兴半秒后,接着就是紧张?,之前没有任何实战经验,这个软件要求忙高,用在医疗行业. 接单之后一点也不敢怠慢.
第一步:把项目的技术难点找出来;
第二步:难度分类,先易后难。对于基本的增删改查都要网上找例子的新手,只能投入时间,不断找实例练手;
第三步:解决高难度问题:app 蓝牙连接sewoo 便携式蓝牙打印机(类似斑马便携式打印机),并且打印标签.
第四步:软件完善:经过前面几步的历炼,对java已经有了一定的功底,线程,消息这些都已经熟练了,但是软件的仅仅停留在能用的水平,真正交付给用户还需要打磨升华;
1.设备开机自动连接蓝牙打印机;
2: 获取蓝牙打印机的电量;获取打印机状态(就绪、缺纸、机盖是否合上);
3:扫描引擎参数设置(Mobydata,zebra 两款PDA测试;
4. 最高难度还是处理打印中文字体。PDA扫描二维码,此QR code特殊至极,把中文字体以二进制的形式存存储,PDA需要解码,参照24点阵的显示,之后把解码内容再转换为 打印机指令 CPCL,这一步真是呕心沥血,翻阅了无数前人资料,研究汉字点阵字体,24x24,12x12.... 历经无数次失败,当第一次终于打印出汉字时,那种喜悦是就像[爱慕].
要提升自己就要历炼.

{!-- PGC_VIDEO:{\\\"thumb_height\\\": 1440, \\\"vposter\\\": \\\"https://p3.toutiaoimg.com/tos-cn-p-0000/daf4f2fb858a446b873c3d23201ac8dc~noop.image?x-expires=1972448778&x-signature=1%2FZgUIVGQAvnkOZ%2BABVlTwD1FTE%3D\\\", \\\"thumb_width\\\": 808, \\\"vid\\\": \\\"v02016670000bpoomssps0srikirm4n0\\\", \\\"vu\\\": \\\"v02016670000bpoomssps0srikirm4n0\\\", \\\"duration\\\": 45.26, \\\"thumb_url\\\": \\\"tos-cn-p-0000/daf4f2fb858a446b873c3d23201ac8dc\\\", \\\"thumb_uri\\\": \\\"tos-cn-p-0000/daf4f2fb858a446b873c3d23201ac8dc\\\", \\\"video_size\\\": {\\\"high\\\": {\\\"duration\\\": 45.26, \\\"h\\\": 1440, \\\"w\\\": 808}, \\\"ultra\\\": {\\\"duration\\\": 45.26, \\\"h\\\": 1440, \\\"w\\\": 808}, \\\"normal\\\": {\\\"duration\\\": 45.26, \\\"h\\\": 1440, \\\"w\\\": 808}}} --}

#####

首先有提升自己的观点是非常棒的,根据我的实际情况简单说一下:

1. JDK源码

在会用的前提下,去学习原理。其中线程池、Future、并发包里的线程安全类、以及锁的根基AQS、volatile,synchronized的原理等等都要去看。源码部分能用到的就要去看下实现原理。

2. JVM层面

写程序一定要知道程序在内存中是如何存放已经管理的,各种回收机制,利弊,使用场景,如果优化,好好的去研究

3. 设计模式

业界有一句笑话“搞JAVA的人天天加班在想怎么设计”,足以看出设计模式在Java中的主要性。针对设计模式我也要多说几句,不要只看,要讲学到的东西应用到自己的实践中。

4. Java优秀的框架源码学习

spring,springmvc,mybatis,tomcat,netty,dubbo 任何一个就够自己研究几个月的。

5. 数据存储层Mysql相关的知识

一般对于Java程序员来说,DB的相关知识特别的薄弱。对于DB的索引、隔离级别、优化以及底层原理都需要搞懂

6. 中间件相关

分布式内存数据库-Redis,MQ-Kafka,RPC-dubbo,服务治理-Zookeeper。像redis是C++写的,可以去了解实现原理,Kafka很庞大也可以只学习原理。dubbo啃代码吧,写的很好。

7. IO方面的知识

Java最擅长的领域就是Web开发,与网络打交道IO只是是缺不了的。比如可以从《Netty权威指南入手》学习,Tomcat中除了容器也是与IO相关的知识。

可以看书,当然书一定不要只看一遍。我一般是一本书至少看两遍。第一遍粗略的读,知道有这个回事就可以。第二遍精读,钻牛角尖的读,碰到不了解的知识点就要去研究。(为什么要读两遍,我一直有一个观点就是,作者在写的时候整本书的知识点就已经都掌握了,先粗略看一遍对全局知识点有了大概的了解后再来看书肯定有不一样的见解)一段时间过后,再返回来读一遍,绝对会有不一样的收获(自己掌握知识水平不同,看书的理解也会不同)。

差不多先这些吧,够研究几年的了

#####

我觉得首先作为一名程序员不要局限于一门语言,至少我个人认为提升自己有两个方向,一个是技术流,技术流又有两种,一种是某领域深度技术研究,比如你对流媒体技术有所了解并且想对这一领域进行深入那你可以制定你的学习路线专攻这一块,另外一种技术流是掌握技术面多,比如说会多门语言,服务器知识,容器虚拟化等等,另外一种不想走技术流的那就走业务流,对业务分析需求提炼的把控分析,对项目的理解和运用到的技术进行妥协,说完方向,那就说下如何提升自己:

1.上自学网站学习(极客学院,慕课,51cto,github)

2.领会和揣摩现实工作中你上级童鞋的做事办法和思路

3.要相信自己可以改变自己

以上就是道和术的一个小范围解释,希望你以后会遇到真正口述这个哲理的人


#####

我觉得程序员写到最后拼的还是思想。

因为代码写来写去还是那样,倒是一个编程思想一个架构这就是个人想法问题。

为什么同样写代码你只能写业务逻辑,别人却能写出框架。这就是思想的不同。

所以我觉得程序员提升还是多看看别人先进的设计思维,github这个网站有很多优秀的开源项目足够提升了


#####

Do more

做的更多,做的比你主管安排给你的任务更多。我在HW的时候,负责一个版本的开发,这个版本的工作量大约是2000行左右,但是我除了做完这个功能,还将关联的功能全部掌握清楚了,代码(大约10000行)也全部看了一遍,做完这个版本后,我对这个版本相关的整套业务全部很熟悉了。经过一两次会议后,大家发现我对这块掌握最熟了,接下来就有趣了:产品讨论需求找我、测试有问题也找我、老大对外支撑也找我;后来,不是我负责的功能他们也找我,即使我当时不知道,我也会看代码或者找文档帮他们回答。。。。。。最后我就成了我这个系统的“专家”了。虽然这个时候我还是做业务的,还是写业务代码,但是我已经对整个业务都很熟悉了。以上只是一个简单的例子,其实就是想说:要想有机会,首先你得从人群中冒出来,要想冒出来,你就必须做到与众不同,要做到与众不同,你就要做得更多!怎么做得更多呢?可以从以下几个方面着手:1)熟悉更多业务,不管是不是你负责的;熟悉更多代码,不管是不是你写的这样做有很多好处,举几个简单的例子:需求分析的时候更加准确,能够在需求阶段就识别风险、影响、难点问题处理的时候更加快速,因为相关的业务和代码都熟悉,能够快速的判断问题可能的原因并进行排查处理方案设计的时候考虑更加周全,由于有对全局业务的理解,能够设计出更好的方案2)熟悉端到端比如说你负责web后台开发,但实际上用户发起一个http请求,要经过很多中间步骤才到你的服务器(例如浏览器缓存、DNS、nginx等),服务器一般又会经过很多处理才到你写的那部分代码(路由、权限等)这整个流程中的很多系统或者步骤,绝大部分人是不可能去参与写代码的,但掌握了这些知识对你的综合水平有很大作用,例如方案设计、线上故障处理这些更加有含金量的技术工作都需要综合技术水平。“系统性”、“全局性”、“综合性”这些字眼看起来比较虚,但其实都是技术大牛的必备的素质,要达到这样的境界,必须去熟悉更多系统、业务、代码。3)自学一般在比较成熟的团队,由于框架或者组件已经进行了大量的封装,写业务代码所用到的技术确实也比较少,但我们要明白“唯一不变的只有变化”,框架有可能要改进,组件可能要替换,或者你换了一家公司,新公司既没有组件也没有框架,要你从头开始来做。这些都是机会,也是挑战,而机会和挑战只会分配给有准备的人,所以这种情况下我们更加需要自学更多东西,因为真正等到要用的时候再来学已经没有时间了。以java为例,大部分业务代码就是if-else加个数据库操作,但我们完全可以自己学些更多java的知识,例如垃圾回收,调优,网络编程等,这些可能暂时没用,但真要用的时候,不是google一下就可以了,这个时候谁已经掌握了相关知识和技能,机会就是谁的。以垃圾回收为例,我自己平时就抽时间学习了这些知识,学了1年都没用上,但后来用上了几次,每次都解决了卡死的大问题,而有的同学,写了几年的java代码,对于stop-the-world是什么概念都不知道,更不用说去优化了。Do better要知道这个世界上没有完美的东西,你负责的系统和业务,总有不合理和可以改进的地方,这些“不合理”和“可改进”的地方,都是更高级别的怪物,打完后能够增加更多的经验值。识别出这些地方,并且给出解决方案,然后向主管提出,一次不行两次,多提几次,只要有一次落地了,这就是你的机会。例如: 重复代码太多,是否可以引入设计模式? 系统性能一般,可否进行优化? 目前是单机,如果做成双机是否更好? 版本开发质量不高,是否引入高效的单元测试和集成测试方案? 目前的系统太庞大,是否可以通过重构和解耦改为3个系统? 阿里中间件有一些系统感觉我们也可以用,是否可以引入 ?只要你去想,其实总能发现可以改进的地方的;如果你觉得系统哪里都没有改进的地方,那就说明你的水平还不够,可以多学习相关技术,多看看业界其它公司怎么做,BAT都怎么做。我2013年调配到九游,刚开始接手了一个简单的后台系统,每天就是配合前台做数据增删改查,看起来完全没意思,是吧?如果只做这些确实没意思,但我们接手后做了很多事情:解耦,将一个后台拆分为2个后台,提升可扩展性和稳定性;双机,将单机改为双机系统,提高可靠性;优化,将原来一个耗时5小时的接口优化为耗时5分钟还有其它很多优化,后来我们这个组承担了更多的系统,后来这个小组5个人,负责了6个系统。Do exercise在做职业等级沟通的时候,发现有很多同学确实也在尝试Do more、Do better,但在执行的过程中,几乎每个人都遇到同一个问题:光看不用效果很差,怎么办?例如:学习了jvm的垃圾回收,但是线上比较少出现FGC导致的卡顿问题,就算出现了,恢复业务也是第一位的,不太可能线上出现问题然后让每个同学都去练一下手,那怎么去实践这些jvm的知识和技能呢?Netty我也看了,也了解了Reactor的原理,但是我不可能参与Netty开发,怎么去让自己真正掌握Reactor异步模式呢?看了《高性能MySQL》,但是线上的数据库都是DBA管理的,测试环境的数据库感觉又是随便配置的,我怎么去验证这些技术呢?框架封装了DAL层,数据库的访问我们都不需要操心,我们怎么去了解分库分表实现?诸如此类问题还有很多,我这里分享一下个人的经验,其实就是3个词:learning、trying、teaching!1)Learning这个是第一阶段,看书、google、看视频、看别人的博客都可以,但要注意一点是“系统化”,特别是一些基础性的东西,例如JVM原理、Java编程、网络编程,HTTP协议。。。。。。等等,这些基础技术不能只通过google或者博客学习,我的做法一般是先完整的看完一本书全面的了解,然后再通过google、视频、博客去有针对性的查找一些有疑问的地方,或者一些技巧。2)Trying这个步骤就是解答前面提到的很多同学的疑惑的关键点,形象来说就是“自己动手丰衣足食”,也就是自己去尝试搭建一些模拟环境,自己写一些测试程序。例如:Jvm垃圾回收:可以自己写一个简单的测试程序,分配内存不释放,然后调整各种jvm启动参数,再运行的过程中使用jstack、jstat等命令查看jvm的堆内存分布和垃圾回收情况。这样的程序写起来很简单,简单一点的就几行,复杂一点的也就几十行。Reactor原理:自己真正去尝试写一个Reactor模式的Demo,不要以为这个很难,最简单的Reactor模式代码量(包括注释)不超过200行(可以参考Doug Lee的PPT)。自己写完后,再去看看netty怎么做,一对比理解就更加深刻了。MySQL:既然有线上的配置可以参考,那可以直接让DBA将线上配置发给我们(注意去掉敏感信息),直接学习;然后自己搭建一个MySQL环境,用线上的配置启动;要知道很多同学用了很多年MySQL,但是连个简单的MySQL环境都搭不起来。框架封装了DAL层:可以自己用JDBC尝试去写一个分库分表的简单实现,然后与框架的实现进行对比,看看差异在哪里。用浏览器的工具查看HTTP缓存实现,看看不同种类的网站,不同类型的资源,具体是如何控制缓存的;也可以自己用Python写一个简单的HTTP服务器,模拟返回各种HTTP Headers来观察浏览器的反应。还有很多方法,这里就不一一列举,简单来说,就是要将学到的东西真正试试,才能理解更加深刻,印第安人有一句谚语:I hear and I forget. I see and I remember. I do and I understand ,而且“试试”其实可以比较简单,很多时候我们都可以自己动手做。当然,如果能够在实际工作中使用,效果会更好,毕竟实际的线上环境和业务复杂度不是我们写个模拟程序就能够模拟的,但这样的机会可遇不可求,大部分情况我们还真的只能靠自己模拟,然后等到真正业务要用的时候,能够信手拈来。3)Teaching一般来说,经过Learning和Trying,能掌握70%左右,但要真正掌握,我觉得一定要做到能够跟别人讲清楚。因为在讲的时候,我们既需要将一个知识点系统化,也需要考虑各种细节,这会促使我们进一步思考和学习。同时,讲出来后看或者听的人可以有不同的理解,或者有新的补充,这相当于继续完善了整个知识技能体系。这样的例子很多,包括我自己写博客的时候经常遇到,本来我觉得自己已经掌握很全面了,但一写就发现很多点没考虑到;组内培训的时候也经常看到,有的同学写了PPT,但是讲的时候,大家一问,或者一讨论,就会发现很多点还没有讲清楚,或者有的点其实是理解错了。写PPT、讲PPT、讨论PPT,这个流程全部走一遍,基本上对一个知识点掌握就比较全面了。

#####

这个问题要看目前处于什么“段位”。

如果目前的段位属于初级,最缺的是知识的丰富程度和实战经验,那就通过多练习,多磨练来不断提升自己的水平。这个阶段可以通过CSDN等网站来多学习一些经验。同时还得多看一些框架性的书籍。

如果目前属于中级段位,说明基础知识都没问题了。这时需要对Spring全家桶、Hibernate等进行系统性学习。还得熟练掌握Redis、MQ等中间件软件的,不断提升自己架构级能力。

如果目前已经出于较高段位,那就可以通过GitHub等网站多多了解Java语言的底层原理、Java各类衍生产品的底层原理和实现方式。还可以自行设计或者参与到很多产品的设计和实现工作中。这样就会越来越牛了。

标签:

提交需求或反馈

Demand feedback