自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 去大连发展还是去苏州

公司要搬到苏州,你是跟随公司去苏州发展,还是留在大连另寻出路?

2023-11-23 15:29:30 130

原创 Go通过reflect.Value修改值

最后,如果我们知道变量的类型,我们可以使用类型的断言机制将得到的interface{}类型的接口强制转为普通的类型指针。每当我们通过指针间接地获取的reflect.Value都是可取地址的,即使开始的是一个不可取地址的Value。在反射机制中,所有关于是否支持取地址的规则都是类似的。以此类推,reflect.ValueOf(e).Index(i)对应的值也是可取地址的,即使原始的reflect.ValueOf(e)不支持也没有关系。但是对于d,它是c的解引用方式生成的,指向另一个变量,因此是可取地址的。

2023-10-07 09:06:02 384 3

原创 Go解码S表达式

现在让我们为S表达式编码实现一个简易的Unmarshal,类似于前面的json.Unmarshal标准库函数,对应我们之前实现的sexpr.Marshal函数的逆操作。我们只支持S表达式有限的子集,同时处理错误的方式也比较粗暴,代码的目的是为了演示反射的用法,而不是构造一个实用的S表达式的解码器。对于map,key可能是任意类型,对元素的处理方式和slice类似,我们创建一个新的变量,然后递归填充它,最后将新解析到的key/value对添加到map。后面的readList函数将处理结构体的成员名。

2023-09-28 12:01:07 461

原创 Go通过cgo调用C代码

特别是如何将Go语言的指针传入C函数的规则也是异常复杂的(译注:简单来说,要传入C函数的Go指针指向的数据本身不能包含指针或其他引用类型;并且在C函数返回之前,Go指针是被锁定的,不能导致对应指针数据被移动或栈的调整),部分的原因在13.2节有讨论到,但是在Go1.5中还没有被明确(译注:Go1.6将会明确cgo中的指针使用规则)。Go程序可能会遇到要访问C语言的某些硬件驱动函数的场景,或者是从一个C++语言实现的嵌入式数据库查询记录的场景,或者是使用Fortran语言实现的一些线性代数库的场景。

2023-09-26 09:57:29 220

原创 Go的unsafe.Pointer

产生错误的原因很微妙。(第三章内容,uintptr是一个无符号的整型数,足以保存一个地址)这种转换虽然也是可逆的,但是将uintptr转为unsafe.Pointer指针可能会破坏类型系统,因为并不是所有的数字都是有效的内存地址。下面例子是reflect包的函数,reflect包和unsafe包一样都是采用特殊技术实现的,编译器可能给它们开了后门),比如下面反射包中的相关函数,返回的结果应该立即转换为unsafe.Pointer以确保指针指向的是相同的变量。类型的指针),它可以包含任意类型变量的地址。

2023-09-25 10:42:18 324

原创 Go并发的非阻塞缓存

相应的动词、过去分词、ing形式有memoiz、memoized、memoizing),也就是说,我们需要缓存函数的返回结果,这样在对函数进行调用的时候,我们就只需要一次计算,之后只要返回计算的结果就可以了。ReadAll会返回两个结果,一个[]byte数组和一个错误,不过这两个对象可以被赋值给httpGetBody的返回声明里的interface{}和error类型,所以我们也就可以这样返回结果并且不需要额外的工作了。我们本章的目的是完成一个无锁缓存,而不是现在这样的将所有请求串行化的函数的缓存。

2023-09-21 09:10:59 906 1

原创 Go的sync.Mutex互斥锁

不变性的一层含义是“没有goroutine访问共享变量”,但实际上这里对于mutex保护的变量来说,不变性还包含更深层含义:当一个goroutine获得了一个互斥锁时,它能断定被互斥锁保护的变量正处于不变状态(译注:即没有其他代码块正在读写共享变量),在其获取并保持锁期间,可能会去更新共享变量,这样不变性只是短暂地被破坏,然而当其释放锁之后,锁必须保证共享变量重获不变性并且多个goroutine按顺序访问共享变量。封装(§6.6),用限制一个程序中的意外交互的方式,可以使我们获得数据结构的不变性。

2023-09-20 09:44:12 556

原创 Go的error接口

可能是最简单的错误类型,但远非只有它一个。Errno是一个系统调用错误的高效表示方式,它通过一个有限的集合进行描述,并且它满足标准的错误接口。创建一个error最简单的方法就是调用errors.New函数,它会根据传入的错误信息返回一个新的error。调用errors.New函数是非常稀少的,因为有一个方便的封装函数fmt.Errorf,它还会处理字符串格式化。承载errorString的类型是一个结构体而非一个字符串,这是为了保护它表示的错误避免粗心(或有意)的更新。err的值图形化的呈现在图7.6中。

2023-09-19 12:36:49 494 1

原创 Go并发的竞争条件

在有两个或更多goroutine的程序中,每一个goroutine内的语句也是按照既定的顺序去执行的,但是一般情况下我们没法去知道分别位于两个goroutine的事件x和y的执行顺序,x是在y之前还是之后还是同时发生是没法判断的。在一个程序中有非并发安全的类型的情况下,我们依然可以使这个程序并发安全。竞争条件是很恶劣的一种场景,因为这种问题会一直潜伏在你的程序里,然后在非常少见的时候蹦出来,或许只是会在很大的负载时才会发生,又或许是会在使用了某一个编译器、某一种平台或者某一种架构的时候才会出现。

2023-09-18 09:08:46 265

原创 Go的并发的退出

为了能够达到我们退出goroutine的目的,我们需要更靠谱的策略,来通过一个channel把消息广播出去,这样goroutine们能够看到这条事件消息,并且在事件完成之后,可以知道这件事已经发生过了。在8.7节中的rocket launch程序中,我们往名字叫abort的channel里发送了一个简单的值,在countdown的goroutine中会把这个值理解为自己的退出信号。首先,我们创建一个退出的channel,不需要向这个channel发送任何值,但其所在的闭包内要写明程序需要退出。

2023-09-15 17:59:43 144

原创 Golang并发的循环

上面这个单独的变量f是被所有的匿名函数值所共享,且会被连续的循环迭代所更新的。当新的goroutine开始执行字面函数时,for循环可能已经更新了f并且开始了另一轮的迭代或者(更有可能的)已经结束了整个循环,所以当这些goroutine开始读取f的值时,它们所看到的值已经是slice的最后一个元素了。没有什么直接的办法能够等待goroutine完成,但是我们可以改变goroutine里的代码让其能够将完成情况报告给外部的goroutine知晓,使用的方式是向一个共享的channel中发送事件。

2023-09-15 09:29:40 265

原创 并发的Clock服务

网络编程是并发大显身手的一个领域,由于服务器是最典型的需要同时处理很多连接的程序,这些连接一般来自于彼此独立的客户端。客户端将服务器发来的时间显示了出来,我们用Control+C来中断客户端的执行,在Unix系统上,你会看到^C这样的响应。Listen函数创建了一个net.Listener的对象,这个对象会监听一个网络端口上到来的连接,在这个例子里我们用的是TCP的localhost:8000端口。这个程序会从连接中读取数据,并将读到的内容写到标准输出中,直到遇到end of file的条件或者发生错误。

2023-09-14 09:13:47 115

原创 Golang语言圣经

以法令方式规定标准的代码格式可以避免无尽的无意义的琐碎争执(译注:也导致了 Go 语言的 TIOBE 排名较低,因为缺少撕逼的话题)。实际上,编译器会主动把特定符号后的换行符转换为分号,因此换行符添加的位置会影响 Go 代码的正确解析(译注:比如行末是标识符、整数、浮点数、虚数、字符或字符串文字、关键字。必须恰当导入需要的包,缺少了必要的包或者导入了不需要的包,程序都无法编译通过。,表示该文件属于哪个包,紧跟着一系列导入(import)的包,之后是存储在这个文件里的程序语句。(本书使用$表示命令行提示符。

2023-09-13 16:56:42 250

原创 golang的多并发

Goroutine(协程):Golang的轻量级线程,可以在同一进程中并发执行,不需要像传统线程那样昂贵的上下文切换和内存开销。Channel(通道):Golang的通信机制,可以在不同Goroutine之间传递数据,避免共享内存带来的竞争问题。使用这些特性,Golang可以轻松实现高效的并发编程,例如并发地处理I/O操作、并发地爬取网页、并发地计算数值等等。sync包:提供了一些同步原语,如互斥锁、读写锁、条件变量等,用于协调Goroutine之间的访问。

2023-09-13 11:53:47 144

原创 go的学习路线

学习并发编程:Go 的并发编程是其最重要的特性之一,需要学习 goroutine、channel、mutex 等并发编程相关的知识。学习 Web 编程:Go 适合用于 Web 编程,学习 HTTP 协议、Web 框架、数据库、模板引擎等相关知识。掌握标准库和常用工具:学习标准库和常用工具的使用,如字符串处理、IO操作、时间日期处理、命令行参数解析等。总之,学习 Go 语言需要有系统的学习计划,同时需要多动手实践,加深对语言的理解和掌握。实战项目开发:通过实战项目的开发来加深对 Go 语言的理解和掌握。

2023-09-12 10:51:42 659

原创 在gin框架项目中使用redis

注意:redis的数据类型不仅仅是字符串类型,还包括列表,哈希表,集合和有序集合,可以根据需要使用相应的api操作相应的数据类型。在gin框架项目中使用redis,需要先安装redis和相应的go语言redis库,可以使用go-redis库来连接redis。

2023-09-11 10:37:08 226

原创 Golang服务器

在这些服务器程序中,通常会使用标准库中的net/http包来实现HTTP协议的支持。此外,Go语言还提供了一些第三方库,如Gin、Echo等,可以帮助开发人员更方便地构建RESTful API等高性能的网络应用。Go语言具有简洁的语法、高效的编译速度、内置的并发支持、垃圾回收机制和轻量级的线程模型等优点,使其成为构建高性能网络应用的理想选择。使用Go语言编写的服务器程序通常可以运行在各种操作系统和硬件平台上,支持高并发、高可靠性、高性能等特点,因此在网络应用开发领域有着广泛的应用。

2023-09-08 12:16:46 78

原创 Golang以后的就业

综上所述,学习Golang可以有很多就业方向,但需要具备坚实的编程基础和深入的技术理解,同时需要不断学习和实践,才能在职场上取得更好的发展。后端开发工程师:Golang在后端服务器开发领域有着广泛应用,可以开发高性能、高并发的Web应用、API、微服务等。分布式系统工程师:Golang天生支持并发编程,适合开发分布式系统,比如分布式计算、分布式存储、分布式消息队列等。区块链开发工程师:Golang具有高效、安全、简单等特性,适合开发区块链底层、智能合约等。

2023-09-06 09:42:32 511

原创 Go Runtime

对于很多需要重复分配、回收内存的地方,sync.Pool是一个很好的选择。频繁地分配、回收内存会给 GC 带来一定的负担,严重的时候会引起 CPU 的毛刺。而sync.Pool可以将暂时将不用的对象缓存起来,待下次需要的时候直接使用, 不用再次经过内存分配,复用对象的内存,减轻 GC 的压力,提升系统的性能。Golang 在语言级别支持协程,称之为 Goroutine。Golang 标准库提供的所有系统。

2023-09-01 13:50:31 142

原创 Go 并发编程

l Once 可以用来执行且仅仅执行一次动作,常常用于单例对象的初始化场 景。l Once 常常用来初始化单例资源,或者并发访问只需初始化一次的共享资 源,或者在测试的时候初始化一次测试资源。l sync.Once 只暴露了一个方法 Do,你可以多次调用 Do 方法,但是只有第一 次调用 Do 方法时 f 参数才会执行,这里的 f 是一个无参数无返回值的函 数。

2023-09-01 13:46:08 53

原创 Go 基础类

一个 Goroutine 是一个函数或方法执行同时旁边其他任何够程采用了特殊的 Goroutine 线程。Goroutine 线程比标准线程更轻量级,大多数 Golang 程 序 同时使 用数千个 Goroutine。要创建 Goroutine,请go在函数声明之前添加关键字。您可以通过向 Goroutine 发送一个信号通道来停止它。Goroutines 只能在被告知 检查时响应信号,因此您需要在逻辑位置(例如for循环顶部)包含检查。

2023-09-01 13:42:38 30

原创 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。

Docker 是一种开源的容器化平台,可以帮助开发人员轻松创建、部署和运行应用程序,同时保持应用程序的一致性和可重复性。

2023-09-01 10:34:08 22

原创 学习Golang的前途

开源社区:Golang拥有庞大的开源社区,这意味着开发人员可以通过分享、学习和解决问题等方式与其他Golang开发人员沟通交流,加快学习进程。增长潜力:Golang在近年来增长迅速,越来越多的企业正在采用Golang构建其核心业务,这意味着Golang的需求正在不断增加。高薪职位:因为Golang具有高效性、并发性和可靠性等优点,企业倾向于雇用具有Golang技能的开发人员,并为他们提供高薪职位。广泛应用:Golang是一种适用于不同领域的编程语言,例如网络和服务器编程、云计算、人工智能、区块链等。

2023-09-01 10:33:32 139

原创 Java有前途还是Go有前途

Go是一门年轻、快速、高效的语言,它支持并发、高并发、分布式和网络编程,适用于Web服务、云计算、容器化部署、区块链、人工智能等领域。在大数据和高并发场景下,Go表现出色,而且它的语言设计简洁,易于学习和使用,因此受到越来越多开发者的关注。Java是一门成熟稳定的语言,应用广泛,拥有大量的工具和框架,开发人员数量众多。Java在企业级应用开发、Web开发、移动端开发、大数据处理、人工智能等领域都有很好的表现,仍然是许多公司的首选编程语言。

2023-08-31 16:26:07 1101 3

原创 Redis实现的过程

在实现过程中,需要考虑如何实现高效的网络通信和协议解析。在实现过程中,需要深入理解每种数据结构的内部逻辑和实现方式,并根据实际需求进行选择和使用。总的来说,Redis实现的过程需要深入理解计算机系统和编程语言的底层原理,同时需要综合考虑系统设计的各个方面,才能实现高效、稳定、可扩展的Redis系统。在实现过程中,需要考虑如何有效地利用内存和磁盘资源,并实现高效的数据读写操作。线程模型的设计:Redis使用单线程模型,所有操作都是原子性的,这样可以避免多线程并发带来的复杂性和线程切换带来的开销。

2023-08-29 14:29:41 48

原创 JAVA基础面试题

创建File实例管理源文件,将file装入到FileInputStream中,将输入流对象装入到BufferedInputStream中,创建File实例管理目标文件,将file装入到FileOutputStream中,将输入流对象装入到BufferedOutputStream中,定义byte[1024]数组,用循环遍BufferedInputStream,调用read(byte[])判断每次读取的长度大于-1,并接收每次读取的长度。

2023-08-25 10:36:53 46 1

原创 Redis面试题

Redis的主从复制是指将一个Redis服务器的数据复制到另一个服务器上,从而实现数据的备份和读写分离。主从复制可以提高系统的可靠性和性能,主服务器负责写操作,而从服务器负责读操作,从而减轻主服务器的负载。Redis的使用场景包括缓存,消息队列,分布式锁,计数器,排行榜和实时应用程序等。RDB是Redis自带的一种快照持久化方式,它将Redis数据库的快照保存到硬盘上,以便在服务器重启后恢复数据。惰性删除是指当键过期时,不立即删除该键的值,而是将该键标记为“可删除”,等到该键被访问时,再将其删除。

2023-08-24 15:32:19 22 1

原创 git面试题

例如,要将 new-branch 合并到主分支中,可以运行 git checkout main 和 git merge new-branch。例如,要比较当前工作目录中的文件 foo.txt 和其最新版本之间的差异,可以运行 git diff HEAD foo.txt。例如,要创建一个名为 new-branch 的分支,可以运行 git branch new-branch。例如,要查看文件 foo.txt 的提交历史,可以运行 git log foo.txt。可以使用 git log 命令来查看提交历史。

2023-08-24 12:27:15 137 1

原创 postgresql面试题

答:可以使用CREATE INDEX命令来创建一个索引,如下所示: CREATE INDEX index_name ON table_name (column1, column2, ...);答:PostgreSQL是一种开源的关系型数据库管理系统(RDBMS),其特点是稳定性、可扩展性、安全性和丰富的功能。答:MVCC是多版本并发控制的缩写,是 PostgreSQL使用的一种事务隔离技术。在 PostgreSQL中,常用的索引类型包括B树索引、哈希索引、GIN索引和GiST索引等。

2023-08-24 12:20:54 385 1

原创 gorm面试题

GORM 是基于 Golang 的 ORM 框架,它提供了一种简单而强大的方式来处理数据库操作。其中,User 和 Email 之间是一对多的关系,通过在 Email 模型中添加 UserID 字段来映射到 User 模型的 ID 字段。GORM 的工作原理是基于 Golang 的反射机制,通过将结构体映射到数据库表,并将结构体的字段映射到表的列,从而实现对数据库的操作。GORM 支持多种查询方式,包括 Where、Order、Limit、Offset、Joins 等。

2023-08-24 12:14:44 204 1

原创 go面试题

goroutine是Go语言的一种轻量级线程,它是由Go语言的运行时系统管理的,因此创建和销毁goroutine的代价很小。channel是Go语言中的一种通信机制,可以用于在不同的goroutine之间传递数据。通过channel,我们可以实现对共享数据的安全访问,以及控制goroutine的执行顺序。通过select语句,我们可以等待多个channel中的任意一个可读或可写,从而实现高效的并发编程。通过接口,我们可以实现多态性,让不同的类型实现同一接口,从而达到代码复用的目的。

2023-08-24 12:12:56 87 1

原创 gin框架面试题

请解释一下 Gin 的上下文(Context)是什么 Gin 的上下文(Context)是每个请求的实例。它包含了有关该请求的信息,例如请求和响应的头信息、请求参数、路径参数、cookie 等信息,还包括一些 GIN 框架的上下文信息,例如当前请求的路由和中间件。请解释一下什么是 Gin 中间件 Gin 的中间件是可以在请求到达处理程序之前和之后执行的一段代码。路由组则是一组路由的集合,可以共享相同的中间件或路由参数。Gin 的路由参数是将变量包含在路由路径中,以处理动态路由。Gin 框架的优势是什么?

2023-08-24 12:11:42 445 1

原创 Java八股文

Iterator只能向前遍历集合,只能删除当前元素,ListIterator既可以向前遍历也可以向后遍历,还可以增加、修改、删除元素。Java中的双亲委派机制指的是在类加载时,先将请求委派给父类加载器进行加载,只有当父类加载器无法加载时,才会由当前类加载器进行加载。Java的基本数据类型包括byte、short、int、long、float、double、char和boolean。Java的内存结构包括方法区、虚拟机栈、本地方法栈、堆和程序计数器。Java的三大特性是面向对象、可移植性和安全性。

2023-08-24 12:10:02 24 1

原创 SpringBoot篇

扩展:面试可能接着问,properties和yml与xml文件有什么区别?扩展:面试可能接着问,两者有什么区别?

2023-08-23 10:18:04 23

原创 Maven篇

什么是Maven?是否使用Maven工具?(☆☆) Maven是一个自动化构建并管理Java项目的工具 Maven中的POM是什么?(☆☆☆☆) POM全称为Project Object Model,在Maven所有操作单元都是基于项目的,并且Maven中通过pom.xml核心配置文件来配置当前项目所有的依赖信息 Maven项目的约定目录结构有哪些?(☆☆) . Project/pom.xml . Project/src/main/java:开发根目录 . Projec

2023-08-23 10:17:10 18

原创 SSM框架篇

扩展:面试可能会问,Spring管理对象的范围singleton和prototype有什么区别?扩展:面试可能会问,@Autowired注解和@Resource注解有什么区别?调用close方法关闭SqlSession,会自动清空一级缓存。扩展:面试可能会问,Spring实现DI相关的注解有哪些?扩展:面试可能会问,一级缓存失效的方式有几种?扩展:面试还有可能直接问,和IOC相关的注解有哪些?调用clearCache方法手动清空一级缓存。执行DML操作时会自动清空一级缓存。

2023-08-23 10:15:55 21

原创 JavaWeb篇

扩展:每次客户端发送请求至服务端时,服务端都会检查Cookie中是否包含SessionId,如果不包含,则服务端创建会话,并将当前会话Id存储到Cookie中,如果包含,则根据Cookie中存放的SessionId自动匹配服务端会话对象,SessionId在客户端关闭浏览器后即失效。

2023-08-23 10:13:35 19

原创 JS&JQ篇

JavaScript和Java有什么关联?(☆) JavaScript和Java没有任何联系,只不过JavaScript开发过程中引入了很多Java语法而已,JS是前端编程语言,Java是后台编程语言 JavaScript中常用的数据类型有哪些?(☆☆☆☆) 基本类型:number、string、boolean、null、undefined 引用类型:object、function 什么是DOM思想?DOM节点分类有哪些?(☆☆☆☆☆) DOM全程Document Ob

2023-08-23 10:11:19 19

原创 CSS3篇

设置CSS样式的方式有几种?(☆☆☆☆☆) . 行内样式/内联样式:在标签内部通过style属性声明CSS样式 . 内部样式/内嵌样式:在HTML页面内,title标签下方定义style标签声明CSS样式 . 外部样式:通过CSS文件定义CSS样式,并通过link标签引入CSS文件 CSS中常用的选择器有哪些?(☆☆☆☆☆)(建议背5种以上) . id选择器:#id . class选择器:.class . 全局选择器:* . 标签选择器:标签名 . 属性选择器:[属性名]

2023-08-23 10:09:40 24

原创 HTML5篇

说出几种常见的HTML标签?(☆☆☆☆) 只需记住关键的标签即可:input、br、hr、table、tr、td、textarea等等 rowspan属性和colspan属性的区别?(☆☆) 两者都是在合并单元格时使用的属性,定义在td标签内部 rowspan:表示单元格所占行数 colspan:单元格所占列数 行内元素和块元素的区别?(☆☆☆☆) 行内元素:不独占一行,不可以设置宽高,例如:span、a、b标签等.. 块元素:独占一行,可以设置宽高,例如:div、h

2023-08-23 10:08:32 19

空空如也

空空如也

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

TA关注的人

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