Go安装&环境配置
Go 安装&环境配置安装 https://go.dev/dl/ 进入go官网,下载自己系统对应的安装包 安装完成后在终端输入go version 确认是否安装成功 相关配置GOPATH配置GOPATH 是 Go 语言中的一个环境变量,它指向一个工作空间(Workspace)目录,包含了许多 Go 项目和它们的相关源代码、二进制文件和第三方依赖包等内容。同时,该目录也是 Go 工具链(如 go、go build、go install)默认搜索的目录。 通常情况下,我们在设置 GOPATH 时会将其设置为一个目录,例如:**/Users/username/go,并在该目录下创建三个子目录:src、pkg** 和 **bin**。其中, src 目录用于保存 Go 项目的源代码; pkg 目录用于保存 Go 项目的依赖包; bin 目录用于保存 Go 项目的二进制可执行文件。 Go 项目需要放在 GOPATH/src 目录下,通常的组织方式是在 src 目录下为每个项目创建一个独立的目录,然后将项目的源代码放在该目录下。在项目中使用的第三方依赖包也会被安装在...
Go实现堆
Go 实现 堆在 Go 语言中,可以使用标准库 container/heap 来实现最小堆,它提供了一个 heap.Interface 接口,需要实现三个方法: **Len() int**:返回堆的元素个数 **Less(i, j int) bool**:返回第 i 个元素是否比第 j 个元素小 **Swap(i, j int)**:交换第 i 个元素和第 j 个元素 然后,可以使用 container/heap 提供的堆操作函数: **heap.Push(heap Interface, x interface{})**:将元素 x 插入堆中 **heap.Pop(heap Interface) interface{}**:从堆中取出并删除堆顶元素 **heap.Init(heap Interface)**:将切片转换为堆 **heap.Remove(heap Interface, i int) interface{}**:删除第 i 个元素 下面是一个使用 container/heap...
Arthas基本使用
Arthas基本使用 官方文档 下载Arthas 1curl -O https://arthas.aliyun.com/arthas-boot.jar 1wget http://tosv.byted.org/obj/tos-team/toscli/toscli -O toscli && chmod a+x toscli && ./toscli -accessKey 2SCHBOIB1OW4AIW0MYJG -bucket dmpfile get -filename arthas-bin.zip arthas-bin.zip && unzip arthas-bin.zip [2.ps](http://2.ps) aux | grep java找到java进程 12345ps aux | grep javae.g.下面的进程id就是322root 322 15.8 0.8 58852208 4711440 ? Sl 18:27 9:29 java -server -Xms10g...
java进程cpu占用高排查
java进程cpu占用高排查java进程cpu占用高如何排查_停5s的博客-CSDN博客 步骤java线程视角1.ps aux 查看进程PID 1ps aux 2.使用top -H -p [java进程id],找到cpu占用较高的线程id 1top -H -p pid 3.计算java线程id的16进制值,因为后续用jstack看到的线程快照中,线程id为小写十六进制值 在线进制转换 12printf "%x" 1227 4.使用命令 jstack [java进程pid] | grep [线程id十六进制值] -A 30 1jstack pid | grep threadId -A 30 GC视角1.使用top命令查看内存利用率 2.确认gc次数,使用命令 jstat -gc [java进程ID] 1jstat -gc pid YGC,表示 Young GC,也就是Minor...
UML类图知识入门
UML类图知识入门UML类图知识入门 UML简介 UML图有很多种,我们不用也没必要掌握所有的UML图,一般说来,只要掌握类图、用例图、时序图的使用,就能完成大部分的工作(经典的28原则,只要掌握20%的UML图,就能完成80%的工作)。类图是我们技术评审中最常见的UML图,本篇也就针对此来做些介绍。 类图有哪些 类是面向对象的概念,类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种模型。类图中最基本的元素是类、接口、包。技术设计文档里面一般会把整个模块或者系统的类图画出来,只要遵循了UML的基本原则那么所有程序猿就都能看懂。 类的表示法 具体类 具体类在类图中用矩形框表示,矩形框分为三层:第一层是类名字;第二层是类的成员变量;第三层是类的方法。 成员变量以及方法前的访问修饰符用符号来表示: “+”表示 public “-”表示 private “#”表示 protected 不带符号表示 default 抽象类 抽象类在UML类图中同样用矩形框表示,但是抽象类的类名以及抽象方法的名字都用...
GO确保类型符合接口
GO校验实现接口 https://go.dev/doc/faq#implements_interfacehttps://www.reddit.com/r/golang/comments/m1hfl7/what_does_this_syntax_mean_tnil/ How can I guarantee my type satisfies an interface?You can ask the compiler to check that the type T implements the interface I by attempting an assignment using the zero value for T or pointer to T, as appropriate: 1234type T struct{}var _ I = T{} // Verify that T implements I.var _ I = (*T)(nil) // Verify that *T implements...
Java异常体系
Java异常体系Understanding Java ExceptionsIntroductionIn Java programming language, an exception is an event that occurs during the execution of a program, which disrupts the normal flow of the program’s instructions. When an exception occurs, the normal flow of the program is terminated, and the program execution is transferred to the exception handler. In this blog post, we will discuss the different types of Java exceptions, what causes them, and how to handle them effectively. Types of Java...
一文看懂双亲委派
一文带你看懂双亲委派机制类的加载首先需要了解一下类的加载过程,类的加载过程可以分为加载、连接、初始化三步走。其中加载就是将java字节码转化为JVM中的java.lang.Class类的对象,而转化的”工具“就是类加载器(ClassLoader)。类加载器可以分为: 启动类加载器 Bootstrap ClassLoader 扩展类加载器 Extention ClassLoader 应用类加载器 Application ClassLoader 自定义类加载器 User ClassLoader 这四种类加载器的层级关系如下图所示: 上层的加载器为下层的父加载器,每一种类加载器都是”各司其职“的: 启动类加载器负责加载Java的核心类库,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。 扩展类加载器负责加载%JRE_HOME%\lib\ext目录下的jar包和class文件 应用类加载器负责加载当前应用classpath下的所有类 AppClassLoader 是直接面向我们用户的加载器,它会加载...
Spring常用设计模式
Spring中常用的设计模式工厂模式在平时编程中,构建对象最常用的方式是 new 一个对象。乍一看这种做法没什么不好,而实际上这也属于一种硬编码。每 new 一个对象,相当于调用者多知道了一个类,增加了类与类之间的联系,不利于程序的松耦合。我们可以利用工厂模式封装对象的生产过程。 简单工厂模式 指定一个工厂对象来创建产品实例,只需要传给工厂参数,不需要关系对象是怎样产生的 好处:如果业务扩展客户端会依赖 “一坨”对象,耦合度高,通过简单工厂模式改造后只依赖工厂类,耦合度降低 缺点:不符合开闭原则,如果增加新的参数则需要修改创建对象的代码 JDK中简单工厂的例子 下面是Calendar类中的createCalendar方法: 1234567891011121314151617181920212223242526272829303132333435363738394041424344private static Calendar createCalendar(TimeZone zone, ...
软件架构设计原则
第一章 软件架构设计原则开闭原则 对扩展开放,对修改关闭,强调用抽象构建框架,用实现扩展细节 💡 例如版本更新尽量不修改源码,但是可以新增功能 举例: 依赖倒置原则 高层模块不应该依赖低层模块,两者都因依赖抽象 举例: 💡 资料 [六大设计原则之依赖倒置原则(DIP) - 简书](https://www.notion.so/DIP-e7635a3468a54f36908ecf58f4507f5b) 单一职责原则 一个类不要存在多个导致其改变的原因,需求发生变更时,修改其中一个职责的代码就有可能导致另一个职责的功能发生故障 接口隔离原则 用多个专门的接口,而不是使用单一的总接口 设计接口时需要注意: 一个类对另一个类的依赖应建立在最小的接口之上 建立单一的接口,不要建立庞大臃肿的接口 尽量细化接口,接口中的方法尽量少 迪米特原则也叫最少知道原则,尽量降低类与类之间的耦合度。 只和朋友交流,不和陌生人说话 💡...