自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 收藏
  • 关注

原创 mac环境 IDEA Cannot resolve symbol ‘junit‘ or Cannot resolve symbol ‘Test‘ junit 无法导入

导入的junit包因为版本问题,自带 bug。将junit 版本修改为。

2024-05-15 15:34:42 196

原创 mac 环境下 goframe安装GF开发工具 gf-cli(安装包方式安装)

但是产生如下报错,无法安装。之后自己选择一条安装路径。使用一下命令给安装权限。终端输入命令进行安装。

2023-12-12 15:59:28 883

原创 深度学习代码 报错Cannot find reference ‘core‘ in ‘__init__.py‘ Activation, Flatten, Dense, Dropout 无法导入

tensorflow 版本: 2.15.0。自己尝试复现实验代码时,显示此错误。keras 版本: 2.15.0。编辑器: PyCharm。

2023-12-09 14:59:07 525

原创 mac 深度学习模型代码 报错 Cannot find reference ‘np_utils‘ in ‘__init__.py‘

tensorflow 版本: 2.15.0。自己尝试复现实验代码时,显示此错误。keras 版本: 2.15.0。编辑器: PyCharm。

2023-12-09 14:47:53 694

原创 mac 无法 push 代码到 github 报错:Couldn‘t connect to server 或者 无法克隆 github 仓库 ,克隆进度卡住

开启配置 http、https 全局代理。成功 push 到 github上!在 网络 设置里查看代理端口号。例如按照上面我所查询得到的。

2023-11-11 11:17:02 382

原创 current file is not included in a workspace moduleg 存在多个 main函数的 Go项目 无法成功导包

注: gopro 作为程序的根目录,hystrix 作为子目录,并且均使用 go mod init 命令对 gopro, hystrix 做了项目的初始化。go get “github.com/afex/hystrix-go/hystrix” 进行导入包,(一开始仅对 hystrix 子目录进行了 go get 的导入)导入成功后,在代码里利用 import 导入,但遇到了以下报错。在项目的根目录利用 go get 命令进行所需包的导入。学习 hystria, 尝试自测案例,使用了。

2023-10-25 17:15:07 946

原创 Go 报错 error obtaining VCS status: exit status 128 Use -buildvcs=false to disable VCS stamping.

新建一个 Go 项目打算利用 air 进行热重载时,使用。之后重新启动 air, 启动成功。启动 air ,发现报错。

2023-09-10 20:38:57 812

原创 Visual Studio Code 终端配置使用 MySQL

接着输入密码,成功在终端使用 MySQL 数据库。在导航栏中搜索–》服务。找到MySQL–>双击。

2023-09-01 19:49:15 1046

原创 Golang之路---04 并发编程——信道死锁经典错误案例

每个缓冲信道,都有容量,当信道里的数据量等于信道的容量后,此时再往信道里发送数据,就失造成阻塞,必须等到有人从信道中消费数据后,程序才会往下进行。,虽然保证了接收者代码在发送者之前执行,但是由于前面接收者一直在等待数据 而处于阻塞状态,所以无法执行到后面的发送数据。所以这个问题,解决方法很简单,只要在发送完数据后,手动关闭信道,告诉 range 信道已经关闭,无需等待就行。回顾前面的基础,我们知道使用 make 创建信道的时候,若不传递第二个参数,则你定义的是无缓冲信道,使用缓冲信道,而不使用无缓冲信道。

2023-08-08 20:00:00 165

原创 Golang之路---04 并发编程——互斥锁和读写锁

面对并发问题,我们始终应该优先考虑使用信道,如果通过信道解决不了的,不得不使用共享内存来实现并发编程的,那 Golang 中的锁机制,就是你绕不过的知识点了。举个例子,就像下面这段代码,我开启了三个协程,每个协程分别往 count 这个变量加1000次 1,理论上看,最终的 count 值应试为 3000。RWMutex 里提供了两种锁,每种锁分别对应两个方法,为了避免死锁,两个方法应成对出现,必要时请使用 defer。而写锁则是互斥锁,不允许多个线程同时获得写锁,并且写操作和读操作也是互斥的。

2023-08-07 14:00:00 217 1

原创 Golang之路---04 并发编程——WaitGroup

但在实际开发中,开发人员是无法预知,所有的 goroutine 需要多长的时间才能执行完毕,sleep 多了,主程序就阻塞了, sleep 少了,有的子协程的任务就没法完成。学习了信道后,我们知道,信道可以实现多个协程间的通信,那么我们只要定义一个信道,在任务完成后,往信道中写入true,然后在主协程中获取到true,就认为子协程已经执行完毕。上面使用信道的方法,在单个协程或者协程数少的时候,并不会有什么问题,但在协程数多的时候,代码就会显得非常复杂。Wait:阻塞当前协程,直到实例里的计数器归零。

2023-08-06 08:50:46 617

原创 Golang之路---04 并发编程——信道/通道

每个信道都只能传递一种数据类型的数据,所以在你声明的时候,你得指定数据类型(string int 等等)var 信道实例 chan 信道类型声明后的信道,其零值是nil,无法直接使用,必须配合make函进行初始化。信道实例 = make(chan 信道类型)上面两行可以合并成一句,即信道实例 := make(chan 信道类型)eg:创建一个可以传输int类型的信道,可以这样子写。// 定义信道 pipline := make(chan int)信道的数据操作,无非就两种:发送数据与读取数据。

2023-08-05 22:00:00 223 1

原创 Golang之路---04 项目管理——编码规范

文件若具有平台特性,应以 文件名_平台.go 命名,比如 utils_ windows.go,utils_linux.go,可用的平台有:windows, unix, posix, plan9, darwin, bsd, linux, freebsd, nacl, netbsd, openbsd, solaris, dragonfly, bsd, notbsd, android,stubs。若变量中有特有名词(以下列出),且变量为私有,则首单词还是使用全小写,如 apiClient。

2023-08-05 12:30:00 119

原创 Golang之路---04 并发编程——协程:goroutine

因为你没得选,也不需要选,它原生提供的 goroutine (也即协程)已经足够优秀,能够自动帮你处理好所有的事情,而你要做的只是执行它,就这么简单。对于刚学习Go的协程同学来说,可以使用 time.Sleep 来使 main 阻塞,使其他协程能够有机会运行完全,但你要注意的是,这并不是推荐的方式(后续我们会学习其他更优雅的方式)。main 的地位相当于主线程,当 main 函数执行完成后,这个线程也就终结了,其下的运行着的所有协程也不管代码是不是还在跑,也得乖乖退出。

2023-08-05 11:30:00 111

原创 Golang中空结构体的使用

事实上,对于集合来说,只需要 map 的键,而不需要值。即使是将值设置为 bool 类型,也会多占据 1 个字节,那假设 map 中有一百万条数据,就会浪费 1MB 的空间。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符。但无论是 int 还是 bool 都会浪费额外的内存,因此呢,这种情况下,声明为空结构体是最合适的。因此呢,将map作为集合(Set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。空结构体,和正常的结构体一样,可以接收方法函数。

2023-08-04 22:00:00 196

原创 Golang make和new的区别

目前来看new函数不常用,因为大家更喜欢用短语句声明的方式。

2023-08-04 10:00:00 104

原创 Golang之路---03 面向对象——类型断言

和上面一样,这个表达式也是可以断言一个接口对象(i)里不是 nil,并且接口对象(i)存储的值的类型是 T,如果断言成功,就会返回其值给 t,并且此时 ok 的值 为 true,表示断言成功。,如果断言成功,就会返回值给 t,如果断言失败,就会触发 panic。如果接口值的类型,并不是我们所断言的 T,就会断言失败,但和第一种表达式不同的事,这个。,而是将 ok 的值设为 false ,表示断言失败,此时t 为 T 的零值。静态类型为你断言的类型的对象,而要清楚。类型断言完成后,实际上会。

2023-08-03 23:00:00 168

原创 Golang之路---03 面向对象——反射

回到反射上来,当你使用 reflect.Typeof 和 reflect.Valueof 的时候,如果传递的不是接口变量的指针,反射世界里的变量值始终将只是真实世界里的一个拷贝,你对该反射对象进行修改,并不能反映到真实世界里。从以上,可以知道,不管是 i=18 ,还是 i=“Golang”,都是当程序运行到这里时,变量的类型,才发生了改变,这就是我们最开始所说的动态类型是程序运行时系统才能看见的类型。在这里,要注意的是,Kind 和 Type 是有区别的,Kind 表示更基础,范围更广的分类。

2023-08-03 21:30:00 176

原创 Golang之路---03 面向对象——空接口

空接口是特殊形式的接口类型,普通的接口都有方法,而空接口没有定义任何方法口,也因此,我们可以说所有类型都至少实现了空接口。每一个接口都包含两个属性,一个是值,一个是类型。而对于空接口来说,这两者都是 nil。package main import("fmt") //定义一个接口 type order interface {

2023-08-03 16:00:00 148

原创 Golang之路---03 面向对象——接口与多态

使用type关键字来定义接口如下所示,定义了一个叫order的接口,接口要求必须实现printName方法。

2023-08-02 23:30:00 824

原创 Golang之路---02 基础语法——异常机制:panic 和 recover

当然能触发程序宕机退出的,也可以是我们自己,比如经过检查判断,当前环境无法达到我们程序进行的预期条件时(比如一个服务指定监听端口被其他程序占用),可以手动触发 panic,让程序退出停止运行。在 Golang 中,有不少常规错误,在编译阶段就能提前告警,比如语法错误或类型错误等,但是有些错误仅能在程序运行后才能发生,比如数组访问越界、空指针引用等,这些运行时错误会引起程序退出。但是 recover 的使用,有一个条件,就是它必须在 defer 函数中才能生效,其他作用域下,它是不工作的。

2023-08-02 20:30:00 273

原创 Golang之路---02 基础语法——函数

函数体 }func:函数由 func 开始声明function_name:函数名称,函数名和参数列表一起构成了函数签名。[parameter list]:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。

2023-08-01 23:00:00 284

原创 Golang之路---03 面向对象——结构体

在之前学过的数据类型中,数组与切片,只能存储同一类型的变量。若要存储多个类型的变量,就需要用到结构体,它是将多个任意类型的变量组合在一起的聚合数据类型。每个变量都成为该结构体的成员变量。可以理解为 Go语言 的结构体struct和其他语言的class有相等的地位,但是Go语言放弃大量面向对象的特性,所有的Go语言类型除了指针类型外,都可以有自己的方法,提高了可扩展性。在 Go 语言中没有没有 class 类的概念,只有 struct 结构体的概念,因此也没有继承。

2023-08-01 21:30:00 534

原创 Golang之路---02 基础语法——流程控制(if-else , switch-case , for-range , defer)

defer 的用法很简单,只要在后面跟一个函数的调用,就能实现将这个 xxx 函数的调用延迟到当前函数执行完后再执行。使用了 defer 后,代码就显得简单直接,不管你在何处 return,都会执行 defer 后的函数。使用 defer 只是延时调用函数,此时传递给函数里的变量,不应该受到后续程序的影响。多个defer 是反序调用的,有点类似栈一样,后进先出。若是没有 defer,你可以写出这样的代码。for 后可接三种类型表达式。

2023-07-31 20:15:00 427

原创 Golang之路---01 Golang VS Code创建项目

Golang使用包和模块来组织代码,包对应到文件系统就是文件夹,模块就是xxx.go的go源文件。一个包中会有多个模块,或者多个子包。早期使用的是gopath来管理项目,不方便,比较麻烦,现在我们使用gomod来管理项目。Visual Studio Code 首先打开你新创建的项目的文件夹,打开一个新终端。成功初始化后,会产生一个go.mod文件。创建文件,编写代码!

2023-07-31 15:48:56 446

原创 Golang之路---02 基础语法——数组与切片(slice)

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的。切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。切片是可索引的,并且可以由 len() 方法获取长度。注:一个切片在未初始化之前默认为 nil,长度为 0。len() 和 cap() 函数。

2023-07-30 20:00:00 247

原创 Golang之路---02 基础语法——常量 (包括特殊常量iota)

iota在const关键字出现时将被重置为0,const中每新增一行常量声明将使iota计数一次。iota是Golang语言的常量计数器,只能在常量表达式中使用。

2023-07-29 20:45:00 395

原创 Golang之路---02 基础语法——字典

字典(Map 类型),是由若干个 key:value 这样的键值对映射组合在一起的数据结构。key 不能是切片,不能是字典,不能是函数。

2023-07-29 20:28:20 429

原创 Golang之路---02 基础语法——变量

使用 var , Go 会对其进行隐式初始化,比如 string 类型就初始化为空字符串,int 类型就初始化为0,float 就初始化为 0.0,bool类型就初始化为false,指针类型就初始化为 nil。若你的右值带有小数点,在不指定类型的情况下,编译器会将你的这个变量声明为 float64,但是很多情况下,我们并不需要这么高的精度.Go 语言是静态类型语言,编译时,编译器会检查变量的类型,所以要求所有的变量都要有明确的类型。var是关键字,name为变量名,type是类型。又称占位符,空白标识符。

2023-07-29 20:00:00 271

原创 Golang之路---01 Golang的安装与配置

再新建一个GOPATH的变量,变量值为go的工作目录(之前新建的文件夹的位置)在系统变量下选择新建,添加一个GOROOT的变量,变量值为当前go的安装目录。管理扩展,在搜索框中输入Go ,选中结果列表第一项,点击install安装。双击下载后的文件进行安装,可根据需要自定义选择解压后的文件位置。在src目录下创建一个新的文件夹,这里我命名为initial。点击新建,加入下面两项,值为之前两个目录的bin目录。接着打开终端(cmd)输入以下配置。找到---->编辑系统环境变量。输入以下命令查看是否配置成功。

2023-07-28 18:05:05 771

原创 线索二叉树的画法

在二叉树的结点上加上线索的二叉树称为线索二叉树,对二叉树以某种遍历方式(如先序、中序、后序或层次等)进行遍历,使其变为线索二叉树的过程称为对二叉树进行线索化。

2023-04-05 17:05:10 3431 1

原创 广义表的head与tail的基本用法

tail() 取表尾:除去表头之外,由其余元素构成的表,表尾一定是一个广义表,最外层要加()head()取表头:非空广义表的第一个元素,它可以是一个原子,也可以是一个子表。例:LS=(a,(b,c,d))

2023-04-03 21:45:17 3615

原创 Python 处理文件 报错:PermissionError: Permission denied: XXXXXXXXX

PermissionError: [Errno 13] Permission denied:

2023-03-08 20:13:45 1628 1

原创 Python读取文本出现报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x93 in...

Python读取文本出现错误。

2023-03-08 19:59:28 1049

原创 剑指 Offer 38. 字符串的排列

剑指 Offer 38. 字符串的排列class Solution { Set<String> set=new HashSet<>(); public String[] permutation(String s) { StringBuilder sb=new StringBuilder(); boolean[] used=new boolean[s.length()]; backtracking(s,"",used)

2022-02-03 16:10:21 156

原创 剑指 Offer 59 - II. 队列的最大值

class MaxQueue { //使用双向队列原因:维护递减列表需要元素队首弹出、队尾插入、队尾弹出操作皆为 O(1) 时间复杂度。 Queue<Integer> queue; Deque<Integer> queue2; public MaxQueue() { queue=new LinkedList<>(); queue2=new LinkedList<>(); }

2022-02-02 17:08:38 59

原创 剑指 Offer 57 - II. 和为s的连续正数序列 剑指 Offer 62. 圆圈中最后剩下的数字 剑指 Offer 14- I. 剪绳子

剑指 Offer 57 - II. 和为s的连续正数序列class Solution { public int[][] findContinuousSequence(int target){ //返回格式出错 // List<List<Integer>> res=new ArrayList<>(); List<int[]> res=new ArrayList<>(); //滑动

2022-02-01 20:57:18 276

原创 剑指 Offer 39. 数组中出现次数超过一半的数字 剑指 Offer 66. 构建乘积数组

剑指 Offer 39. 数组中出现次数超过一半的数字class Solution { public int majorityElement(int[] nums) { if(nums.length==1) return nums[0]; Arrays.sort(nums); int n=nums.length; int res=nums[0]; // 2 3 3 for(int i=0;i<=n

2022-01-29 16:48:23 432

原创 剑指 Offer 56 - I. 数组中数字出现的次数 剑指 Offer 56 - II. 数组中数字出现的次数 II

剑指 Offer 56 - I. 数组中数字出现的次数方法一:纯纯为了正确,此做法不符合题目的要求class Solution { public int[] singleNumbers(int[] nums) { Set<Integer> set=new HashSet<>(); for(int i=0;i<nums.length;i++){ if(set.contains(nums[i])){

2022-01-28 17:41:18 282

原创 剑指 Offer 07. 重建二叉树 剑指 Offer 15. 二进制中1的个数 剑指 Offer 65. 不用加减乘除做加法

剑指 Offer 07. 重建二叉树/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { HashMap<Integer,Integer> map=new H

2022-01-27 17:01:15 246

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除