首页 > 编程语言 >程序人生——Java开发持续进阶,拥抱开源世界以思想为源泉

程序人生——Java开发持续进阶,拥抱开源世界以思想为源泉

时间:2024-03-18 22:05:52浏览次数:29  
标签:建议 Java 进阶 代码 开源 线程 JVM

在这里插入图片描述

目录

引出

程序人生——Java开发持续进阶,拥抱开源世界以思想为源泉


开源世界

建议139:大胆采用开源工具

  • 选择开源工具和框架时要遵循一定的规则:
    • 1、普适性原则;
    • 2、唯一性原则;
    • 3、“大树纳凉”原则;
    • 4、精而专原则;
    • 5、高热度原则

建议140:推荐使用Guava扩展工具包

  • Guava(石榴)是Google发布的,其中包含了collections、caching、primitives support、concurrency libraries、common annotations、I/O等

建议141:Apache扩展包

Apache Commons通用扩展包基本上是每个项目都会使用的,一般情况下lang包用作JDK的基础语言扩展。Apache Commons项目包含非常好用的工具,如DBCP、net、Math等

建议142:推荐使用Joda日期时间扩展包

  • Joda可以很好地与现有的日期类保持兼容,在需要复杂的日期计算时使用Joda。日期工具类也可以选择date4j

建议143:可以选择多种Collections扩展

  • 三个比较有个性的Collections扩展工具包:1、FastUtil,主要提供两种功能:一种是限定键值类型的Map、List、Set等,另一种是大容量的集合;2、Trove,提供了一个快速、高效、低内存消耗的Collection集合,并且还提供了过滤和拦截功能,同时还提供了基本类型的集合;3、lambdaj,是一个纯净的集合操作工具,它不会提供任何的集合扩展,只会提供对集合的操作,比如查询、过滤、统一初始化等

思想为源

建议144:提倡良好的代码风格

  • 良好的编码风格包括:
    • 1、整洁;
    • 2、统一;
    • 3、流行;
    • 4、便捷,推荐使用Checkstyle检测代码是否遵循规范

建议145:不要完全依靠单元测试来发现问题

  • 单元测试的目的是保证各个独立分隔的程序单元的正确性,虽然它能够发现程序中存在的问题(或缺陷、或错误),但是单元测试只是排查程序错误的一种方式,不能保证代码中的所有错误都能被单元测试挖掘出来,原因:1、单元测试不可能测试所有的场景(路径);2、代码整合错误是不可避免的;3、部分代码无法(或很难)测试;4、单元测试验证的是编码人员的假设

建议146:让注释正确、清晰、简洁

  • 注释不是美化剂,而是催化剂,或为优秀加分,或为拙略减分

建议147:让接口的职责保持单一

  • 接口职责一定要单一,实现类职责尽量单一)(单一职责原则(Single Responsibility Principle,简称SRP)有以下三个优点:1、类的复杂性降低;2、可读性和可维护性提高;3、降低变更风险

建议148:增强类的可替换性

  • Java的三大特征:封装、继承、多态;说说多态,一个接口可以有多种实现方式,一个父类可以有多个子类,并且可以把不同的实现或子类赋给不同的接口或父类。多态的好处非常多,其中一点就是增强了类的可替换性,但是单单一个多态特性,很难保证我们的类是完全可以替换的,幸好还有一个里氏替换原则来约束。里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象。通俗点讲,只要父类型能出现的地方子类型就可以出现,而且将父类型替换为子类型还不会产生任何错误或异常,使用者可能根本就不需要知道是父类型还是子类型。为了增强类的可替换性,在设计类时需要考虑以下三点:1、子类型必须完全实现父类型的方法;2、前置条件可以被放大;3、后置条件可以被缩小

建议149:依赖抽象而不是实现

  • 此处的抽象是指物体的抽象,比如出行,依赖的是抽象的运输能力,而不是具体的运输交通工具。**依赖倒置原则(Dependence Inversion Principle,简称DIP)**要求实现解耦,保持代码间的松耦合,提高代码的复用率。DIP的原始定义包含三层含义:1、高层模块不应该依赖底层模块,两者都应该依赖其抽象;2、抽象不应该依赖细节;3、细节应该依赖抽象;DIP在Java语言中的表现就是:1、模块间的依赖是通过抽象发生的,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;2、接口或抽象类不依赖于实现类;3、实现类依赖接口或抽象类;更加精简的定义就是:面向接口编程。实现模块间的松耦合遵循规则:1、尽量抽象;2、表面类型必须是抽象的;3、任何类都不应该从具体类派生;4、尽量不要覆写基类的方法;5、抽象不关注细节

建议150:抛弃7条不良的编码习惯

  • 1、自由格式的代码;
  • 2、不使用抽象的代码;
  • 3、彰显个性的代码;
  • 4、死代码;
  • 5、冗余代码;
  • 6、拒绝变化的代码;
  • 7、自以为是的代码;

建议151:以技术人员自律而不是工人

  • 20条建议:
    • 1、熟悉工具;
    • 2、使用IDE;
    • 3、坚持编码;
    • 4、编码前思考;
    • 5、坚持重构;
    • 6、多写文档;
    • 7、保持程序版本的简单性;
    • 8、做好备份;
    • 9、做单元测试;
    • 10、不要重复发明轮子;
    • 11、不要拷贝;
    • 12、让代码充满灵性;
    • 13、测试自动化;
    • 14、做压力测试;
    • 15、“剽窃”不可耻;
    • 16、坚持向敏捷学习;
    • 17、重里更重面;
    • 18、分享;
    • 19、刨根问底;
    • 20、横向扩展

深入认识JVM

JVM内存分配,类加载

Java进阶(1)——JVM的内存分配 & 反射Class类的类对象 & 创建对象的几种方式 & 类加载(何时进入内存JVM)& 注解 & 反射+注解的案例

在这里插入图片描述

创建对象的4种方法总结

Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化

在这里插入图片描述

垃圾回收GC

在这里插入图片描述

Java进阶(垃圾回收GC)——理论篇:JVM内存模型 & 垃圾回收定位清除算法 & JVM中的垃圾回收器

简介:本篇博客介绍JVM的内存模型,对比了1.7和1.8的内存模型的变化;介绍了垃圾回收的语言发展;阐述了定位垃圾的方法,引用计数法和可达性分析发以及垃圾清除算法;然后介绍了Java中的垃圾回收器,由串行、到并行再到并发,最后到G1的演变;最后给出了垃圾回收器的对比和使用指引。

JVM调优,Arthas使用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

认识多线程

创建多线程方法+了解线程池

Java进阶(5)——创建多线程的方法extends Thread和implements Runnable的对比 & 线程池及常用的线程池

在这里插入图片描述

多线程下-1非原子性问题即解决

Java进阶(6)——抢购问题中的数据不安全(非原子性问题)& Java中的synchronize和ReentrantLock锁使用 & 死锁及其产生的条件

在这里插入图片描述

再论线程,创建、生命周期

Java进阶(再论线程)——线程的4种创建方式 & 线程的生命周期 & 线程的3大特性 & 集合中的线程安全问题

主要内容:
1.线程创建的方式,继承Thread类,实现Runable接口,实现Callable接口,采用线程池;
2.线程生命周期: join():运行结束再下一个, yield():暂时让出cpu的使用权,deamon():守护线程,最后结束,sleep():如果有锁,不会让出;
3.线程3大特性,原子性,可见性,有序性;
4.list集合中线程安全问题,hash算法问题;


总结

程序人生——Java开发持续进阶,拥抱开源世界以思想为源泉

标签:建议,Java,进阶,代码,开源,线程,JVM
From: https://blog.csdn.net/Pireley/article/details/136822972

相关文章

  • 程序人生——Java使用关于性能和效率的建议
    目录引出性能和效率建议132:提升Java性能的基本方法建议133:若非必要,不要克隆对象建议134:推荐使用“望闻问切”的方式诊断性能建议135:必须定义性能衡量标准建议136:枪打出头鸟—解决首要系统性能问题建议137:调整JVM参数以提升性能建议138:性能是个大“咕咚”深入认识JVM......
  • 史上最全Java核心面试题(带全部答案)2024年最新版
    今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次。对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦。在跳槽季来临之前,特地做这个系列的文章,一方面帮助自己巩固下基础,另一方面也希望帮助想要换工......
  • 从20w到50w测试进阶之路
    我应该怎么自己走向更好的生活。我的依靠是什么,什么可以作为我奋斗的目标,让我成功的从上海回到成都并且在成都拿到一个1w+以上的Offer,解决我的实际问题。我没有其他的方向,我把眼光放到了我的本职工作-测试上面。虽然经历了几年重心倾斜到我的生活上导致我的工作的毫无精进,但是我对......
  • 前端基础之HTML进阶
    表格标签只要是展示数据,一般都可以使用表格标签<body><tableborder="1"cellpadding="5"cellspacing="5>#border:为表格添加外边框#cellpadding:调整字体离边框距离#cellspacing:调整内边框离外边框的距离<thead>表头(字段信息)......
  • Java 基础语法(2)
    一、流程控制结构1.分支结构if语句if(条件){语句;}elseif(条件){语句;}else{语句;}switch语句switch(变量){case"":语句;break;case"":case"":case"":……语句;break;default:语句;}2.循环结构for循环for(初始化语句......
  • 为 java 开发者设计的性能测试框架,用于压测+测试报告生成
    拓展阅读junit5系列教程基于junit5实现junitperf源码分析Autogeneratemockdataforjavatest.(便于Java测试自动生成对象信息)Junitperformancerelyonjunit5andjdk8+.(java性能测试框架。压测+测试报告生成。)junitperfjunitperf是一款为java开发者设......
  • Java 入门 - 常用的dos命令
    切换盘符盘符名:->回车查看当前路径下的文件或者文件夹dir进入指定文件夹下cd文件夹名字进入到多级文件夹下cd文件夹名字\文件夹名字退到上一级目录cd..或者cd..直接退到磁盘位置(退至根目录)cd\或者cd\清屏cls 退出黑窗口 exit......
  • java软考网络工程师在线练习平台(ssm框架毕业设计)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在当今信息化社会,网络技术已经渗透到了我们生活和工作的方方面面。随着互联网的普及和发展,网络工程师成为了企业、政府及各类组织不可或缺的重要岗位。为......
  • java睿道教育平台在线考试子系统(ssm框架毕业设计)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在信息技术日新月异的今天,传统的考试方式正逐渐被在线考试系统所取代。随着互联网技术的不断发展和普及,越来越多的教育机构开始采用在线考试子系统来进行......
  • java三方融资租赁线上管理(ssm框架毕业设计)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的不断发展和普及,各行各业都开始逐渐转向线上运营,以提高效率并降低成本。在金融领域,特别是融资租赁行业,线上管理已经成为一种趋势。三方融......