原创
文章平均质量分 71
luyaran
像永远快乐的阳光,追求那至高无上的完美乐园。
展开
-
Linux基础命令总结一下~(一)
原文地址:Linux基础命令总结一下~(一)先来看看关机和重启相关内容: shutdown -h now:表示立刻关机。 shutdown -h 5:表示5分钟后关机。 poweroff:表示立刻关机。 shutdown -r now:表示立刻重启。 shutdown -r 5:表示5分钟后重启。 reboot:表示立刻重启。 之后是cd进入目录相关内容: cd /:表示切换到根目录。 cd /usr:表示切换到根目录下的usr原创 2022-01-07 10:15:54 · 817 阅读 · 1 评论 -
vim常用命令汇总~
原文地址:vim常用命令汇总~罗列汇总一下vim这边常用的命令。首先是光标移动这边: Ctrl+f表示光标移动到上一页。 Ctrl+b表示光标移动到下一页。 ^表示光标移动到当前行的开始位置。 $表示光标移动到当前行的结束位置。 gg表示光标移动到当前文档的第一行。 [N]G表示光标移动到当前文档的第N行或者最后一行。 之后是插入编辑内容这边: i表示插入到光标前面。 I表示插入到行的开始位置。 a表示插入到光标的原创 2022-01-07 10:14:16 · 1206 阅读 · 1 评论 -
Go-每日面试题目~(四)
原文地址:Go-每日面试题目~(四)1、说说以下代码会输出什么内容? func main() { defer_call() }func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { fmt.Println("打印后") }() panic("触发异常")}上述代码会先输出【打印前】原创 2022-01-07 10:12:07 · 798 阅读 · 0 评论 -
Go-每日面试题目~(三)
原文地址:Go-每日面试题目~(三)1、以下代码有什么问题?func get() []byte { raw := make([]byte, 10000) fmt.Println(len(raw), cap(raw), &raw[0]) return raw[:3]}func main() { data := get() fmt.Println(len(data), cap(data), &data[0])}上述代码中的get()函原创 2022-01-04 13:48:45 · 356 阅读 · 0 评论 -
Go-每日面试题目~(二)
原文地址:Go-每日面试题目~(二)1、以下代码会输出什么?请简要说明。type Foo struct { val int}func (f Foo) Inc(inc int) { f.val += inc}func main() { var f Foo f.Inc(100) fmt.Println(f.val)}以上代码会输出0,因为Inc()是使用值类型接收者定义的方法,在我们进行调用的时候,使用的其实是值的副本,而对副本操作不会影响的.原创 2022-01-04 13:43:26 · 345 阅读 · 0 评论 -
Go-每日面试题目~(一)
原文地址:Go-每日面试题目~(一)1、ch:=make(chan interface{})和ch:=make(chan interface{},1)有什么区别?第一个是声明无缓存channel,第二个是声明缓冲为1的channel,无缓存channel需要一直有接收者接收数据,写操作才会继续,否则一直阻塞,而缓冲为1的channel即使没有接收者也不会阻塞,因为其缓冲大小是1,只有放第二个值时,第一个还没被取出时候才会阻塞,这两者还是有区别的。2、以下代码会输出什么?请简要说明。var原创 2022-01-04 13:39:10 · 382 阅读 · 0 评论 -
Go面试题目
原文地址:元旦快乐~(Go面试题目)1、以下代码会输出什么?请简要说明。func main() { var wg sync.WaitGroup wg.Add(1) go func() { time.Sleep(time.Millisecond) wg.Done() wg.Add(1) }() wg.Wait()}上述代码会发生panic恐慌,因为WaitGroup在调用Wait()之后是不能再调原创 2022-01-04 10:09:52 · 380 阅读 · 0 评论 -
Go-翻过的一些面试题目
原文地址:Go-翻过的一些面试题目1、以下代码会输出什么?请简要说明。var c = make(chan int)var a intfunc f() { a = 1 <-c}func main() { go f() c <- 0 print(a)}能正确输出1,不过主协程会阻塞 f() 函数的执行。2、以下代码会输出什么?请简要说明。type MyMutex struct { count int syn原创 2021-12-31 10:07:34 · 158 阅读 · 0 评论 -
Go-Leecode-最接近的三数之和(刷题记录)
原文地址:Go-Leecode-最接近的三数之和(刷题记录)题目:给定包含n个整数的数组nums和一个目标值target,需找出整数数组nums中的三个整数,使得它们的和与target最接近,之后返回这三个数的和,可以假定每组输入只存在唯一答案。示例内容如下:输入:nums = [-1,2,1,-4], target = 1输出:2从上面的示例中给出的nums直接来看的话,与target最接近的和是2,也就是-1+2+1=2,这么来看的话,整个题目也就不是很没有思路了。提示内容如下:原创 2021-12-31 10:04:48 · 366 阅读 · 0 评论 -
Go-Leecode-三数之和(刷题记录)
原文地址:Go-Leecode-盛最多水的容器(刷题记录)公众号标题写错了,在这里更改一下。。。 给定包含n个整数的数组nums,需验证出数组nums中是否存在三个元素 a、b、c,使得a+b+c=0,需找出所有和为0且不重复的三元组。提示内容如下: 0 <= nums.length <= 3000。 -105 <= nums[i] <= 105。 示例一:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0原创 2021-12-29 10:05:21 · 420 阅读 · 0 评论 -
Go-Leecode-盛最多水的容器(刷题记录)
原文地址:Go-Leecode-盛最多水的容器(刷题记录)给定n个非负整数a1、a2、a3...an,没个数代表坐标中的一个点(i,ai),在坐标轴x上作n条垂线,垂直线i的两个端点分别为(i,ai)和(i,0),找出其中的两条线,使得其与x轴共同构成的容器在不倾斜的情况下可以容纳最多的水。示例一:输入:[1,8,6,2,5,4,8,3,7]输出:49示例二:输入:height = [1,1]输出:1示例三:输入:height = [4,3,2,1,4]输出:16示例四原创 2021-12-28 10:06:05 · 429 阅读 · 0 评论 -
Go-Leecode-寻找两个正序数组的中位数(刷题记录)
原文地址:Go-Leecode-寻找两个正序数组的中位数(刷题记录)给定两个长度分别为m、n的正序(从小到大)数组num1和num2,需找出两个正序数组的中位数。示例一:输入:nums1 = [1,3], nums2 = [2]输出:2.00000示例二:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000示例三:输入:nums1 = [0,0], nums2 = [0,0]输出:0.00000示例四:输入:nums1 = [], n原创 2021-12-27 10:30:34 · 451 阅读 · 0 评论 -
Go-Leecode-两数之和(刷题记录)
原文地址:Go-Leecode-两数之和(刷题记录)给定整数数组nums及整数目标值target,需在nums中找到两数和为target值的下标,数组中同一元素不能重复出现且只有一组元素和为target值,可按任意顺序返回结果,以下为三个示例:示例一:输入:nums = [2,7,11,15], target = 9输出:[0,1]这里稍微解释一下哈,因为nums的第一个元素加上第二个元素为target值,所以需返回这两个元素的下标值,以下同理哈。示例二:输入:nums = [3原创 2021-12-27 10:27:43 · 2894 阅读 · 1 评论 -
Go小优化之Gin框架的ShouldBind绑定的struct字段bind设置为required时验证零值失败问题处理~
原文地址:Go小优化之Gin框架的ShouldBind绑定的struct字段bind设置为required时验证零值失败问题处理~废话不多说,先来看下通常情况下咱们定义的结构体的类型:type GetInferenceTaskRule struct { Page int `form:"page" binding:"required"` Size int `form:"size" binding:"required"` IsOnMyself int原创 2021-12-25 09:57:47 · 3379 阅读 · 2 评论 -
Go面试看这里了~(三十)
原文地址:Go面试看这里了~(三十)1、内存对齐?内存是按照成员的定义顺序来依次分配内存,第一个成员偏移量是0,其余每个成员的偏移量为指定数的整数倍数,如此进行内存分配叫做内存对齐。2、内存对齐原因?原因有两点,首先就是平台原因,因为并不是所有硬件平台都能访问任意地址上的任意数据,有的会直接报错的,像有的cpu读取4个字节数据,要是没有内存对齐,从1开始,那内存就需要把0-7字节的全部取出来,再剔除掉1/5/6/7,增加了额外的操作,cpu不一定能这么搞,自然就报错,第二个就是性能原因,访问原创 2021-12-24 10:04:34 · 554 阅读 · 0 评论 -
Go面试看这里了~(二十九)
原文地址:Go面试看这里了~(二十九)1、常见垃圾回收机制?常见垃圾回收机制一:引用计数。意思是对每个对象维护一个引用计数,当引用对象的对象被销毁时,引用计数减去1,如引用计数为0则进行垃圾回收,此方式的优点是对象可以很快被回收,不会出现内存耗尽或达到阀值时才回收的情况,缺点是不能很好的处理循环引用,且实时维护引用计数也有一定的代价,在Python、PHP、Swift中有使用。常见垃圾回收机制二:标记-清除。从根变量开始遍历所有引用的对象,引用的对象标记为【被引用】,没有被标记的进行回收原创 2021-12-23 10:02:39 · 548 阅读 · 0 评论 -
Go面试看这里了~(二十八)
原文地址:Go面试看这里了~(二十八)1、channel数据结构?channel管道类型,可在goroutine间发送/接收消息,是Go在语言层面提供的goroutine间的通信方式,主要用于进程内各goroutine间通信,如需跨进程通信,建议使用分布式系统的方式来解决。来看src/runtime/chan.go文件下hchan的源码,如下: type hchan struct { qcount uint // total data in the原创 2021-12-22 10:06:06 · 342 阅读 · 0 评论 -
Go面试看这里了~(二十七)
原文地址:Go面试看这里了~(二十七)1、Redis的watch?Redis Watch命令用于监视一个(或多个) key ,如在事务执行之前这个(或这些) key 被其它命令改动,那么事务将被打断。2、Redis的SETNX和SETEX?SETNX:SET if Not eXists(如果不存在,则 SET)的简写,语法为【SETNX key value】。SETEX:将值value关联到key,并将key的生存时间设为seconds (以秒为单位),如key已存在,SETEX将覆写旧原创 2021-12-21 10:03:44 · 288 阅读 · 0 评论 -
Go面试看这里了~(二十六)
原文地址:Go面试看这里了~(二十六)1、降低Redis内存使用? 使用正确的数据结构。 key长度越小占用内存越小(积少成多)。 value的值是否可以进行处理。 部分数据结构在长度较小、个数较少的情况下会采用节省空间的算法存储,可以与sharding结合减少总内存使用。 sharding:减少单机可使用内存量(虽然不会减少总内存量)。 2、减少请求Redis的延迟? 使用正确的数据结构。 分层结构可减少只读命令的latency。原创 2021-12-20 10:00:02 · 144 阅读 · 0 评论 -
Go面试看这里了~(二十五)
原文地址:Go面试看这里了~(二十五)1、PostgreSQL优点?Postgresql比MysqL更加庞大,因为其是用来替代Oracle而设计,优点如下: 继承表-解决实际中的主子表各类问题。 并发创建索引。 数组类型。 JSONB类型。 瞬间添加无默认值新列。 2、topK问题?在海量数据中找出出现频率最高的前K个数,或从海量数据中找出最大的前K个数,此类问题通常被称为topK问题,像在搜索引擎中统计搜索最热门的10个查询词、在歌曲库中统..原创 2021-12-19 20:17:51 · 821 阅读 · 0 评论 -
Go面试看这里了~(二十四)
原文地址:Go面试看这里了~(二十四)1、循环调用包?常规解决方案如下: 新建公共组合包(子包),在组合包中组合调用。 全局存储需要相互依赖的函数,通过关键字进行调用。 新建公共接口包(父包),将需要循环调用的函数或方法抽象为接口。 不需要回调结果的可以通过事件总线(eventBus)解耦。 2、ping执行流程?以机器A、B为例。同一网段ping执行流程如下: ping通知系统建立一个固定格式的ICMP请求数据包。 ICMP协议打包这原创 2021-12-18 13:19:09 · 419 阅读 · 0 评论 -
Go面试看这里了~(二十三)
原文地址:Go面试看这里了~(二十三)1、有异常类型么?Go没有异常类型,只有错误类型(Error),函数要想返回错误,通常用返回值表示异常状态,像C错误码,可逐层返回,直到被处理。Go虽无异常概念,但却有更为恐怖的panic,由于有recover,在一定程度上, panic 可以类比做异常,Go错误和异常(panic)是可以互相转换的,方式如下: 错误转异常:如程序逻辑上尝试请求某URL,最多尝试三次,尝试三次的过程中请求失败是错误,尝试完第三次还不成功的话,失败就被提升为异常。原创 2021-12-17 10:01:25 · 1515 阅读 · 0 评论 -
Go面试看这里了~(二十二)
原文地址:Go面试看这里了~(二十二)1、有缓冲和无缓冲channel的区别?无缓冲:当向channel中存值后,需其它goroutine取值,否则一直阻塞。有缓冲:不会阻塞,如缓冲为1,只有当放第2个值时,第1个还没被取走才会阻塞。2、函数返回局部变量的指针是否安全?函数返回指针不能指向函数内的局部变量,如需返回函数局部变量,需将该变量声明为静态变量。3、格式化打印时%v 和 %+v 的区别?`%v` 和 `%+v` 都可以用来打印 struct 的值,区别在于 `%v` 仅打原创 2021-12-16 10:02:57 · 389 阅读 · 0 评论 -
Go面试看这里了~(二十一)
原文地址:Go面试看这里了~(二十一)1、sync.Map的实现原理?先看下src/sync/map.go文件中几个相关结构体的数据结构:type Map struct { // 当涉及到脏数据(dirty)操作时候,需要使用这个锁 mu Mutex // read是一个只读数据结构,包含一个map结构, // 读不需要加锁,只需要通过 atomic 加载最新的值即可 read atomic.Value // readOnly原创 2021-12-15 10:00:34 · 1052 阅读 · 0 评论 -
Go面试看这里了~(二十)
原文地址:Go面试看这里了~(二十)1、cgo了解么?Go提供的标准库,支持Go程序与C的类库交互操作,Go代码中加入【import “C”】语句就可以启动CGO特性。2、make为什么不能返回指针?make只支持slice、map、channel三种类型,某种意义上也可算作引用类型,返回引用类型的指针相较于直接使用引用本身并无优势可言,还需多使用一块儿内存保存指针,就好像使用整型变量,只会直接定义使用,而不是使用new创建。指针能减少函数参数和返回的变量拷贝,slice、map、cha原创 2021-12-14 09:59:22 · 1279 阅读 · 0 评论 -
Go面试看这里了~(十九)
原文地址:Go面试看这里了~(十九)1、退出程序时怎么防止channel没有消费完?不要在消费端关闭channel,不要在有多个并行的生产者时对channel执行关闭操作,应只在唯一或最后唯一剩下的生产者协程中关闭channel,来通知消费者已经无值可读。对无缓冲channel来说,程序退出时将生产者关闭就不会产生多余数据给消费者。对有缓冲channel最本质的原则只有一个,就是不要关闭或将值发送到已关闭通道。可使用sync.Once来确保只会关闭一次channel,使用sync.Mut原创 2021-12-13 09:50:53 · 1044 阅读 · 0 评论 -
Go面试看这里了~(十八)
原文地址:Go面试看这里了~(十八)1、HTTP是否可以一次连接多次请求?HTTP1.1可以支持多个请求,HTTP1.0只能支持单个请求。2、Linux常用命令相关?【lsof-i:端口号(如8080)】:查看该端口是否被占用。【netstat-ntlp】:查看当前所有tcp端口。【netstat-ntulp|grep80】:查看所有80端口使用情况。【netstat-an|grep3306】:查看所有3306端口使用情况。netstat参数说明如下:...原创 2021-12-12 18:02:18 · 2590 阅读 · 0 评论 -
Go面试看这里了~(十七)
原文地址:Go面试看这里了~(十七)1、time-wait?TIME_WAIT是TCP协议中断开连接所经历的一种状态,状态图如下:上图中作为主动关闭的一方(Client)出现了TIME_WAIT状态,目的是告诉Server端,己方没有需发送的数据,但是仍然保持了接收对方数据的能力。常见关闭连接过程如下: 当客户端无待发送数据时,会向服务端发送FIN消息,发送消息后进入FIN_WAIT_1状态。 服务端接收到客户端的FIN消息后,进入CLOSE_WAIT状态并向客户端发送A原创 2021-12-11 09:51:18 · 1107 阅读 · 0 评论 -
Go面试看这里了~(十六)
原文地址:Go面试看这里了~(十六)1、常用负载均衡算法?负载均衡建立在现有网络结构上,提供一种廉价、有效、透明的方法扩展网络设备和服务器带宽,增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性,本质上是将大批量的网络请求分摊到多个操作单元上进行执行,操作单元指的是像web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务,大白话来说就是请求太多,将其分摊到多台服务器处理,之后来看下实现负载均衡常用的几种算法,介绍如下: 轮询法:将请求按顺序轮流地分配原创 2021-12-10 09:49:11 · 648 阅读 · 0 评论 -
Go-GORM查询MySQL的一点儿心得~
刚开始用GORM,定义了一个struct结构体来定义需要访问的数据库字段,之后用Where设置了查询条件,最后用Find获取全部内容。总的来说呢,执行的很成功,数据也都搂出来了,因为涉及到公司机密,所以具体是哪个字段,咱这里就不赘述了。仔细看了一下呢,发现数据细节出现了问题,数据集中所有是int的字段的值全部为0。这着实让我挠头了。struct的tag按网上的一大堆资料改了半天,运行结果还是一样,不由得不怀疑这个tag没有生效。最后验证了下,不关人家tag的事儿。咱这里就只说了哈,出原创 2021-12-09 14:40:21 · 858 阅读 · 1 评论 -
Go面试看这里了~(十五)
原文地址:Go面试看这里了~(十五)1、map什么类型不能作为键?Go map的key可以是很多种类型,如 bool、数字、string、指针、channel , 还有只包含前面几个类型的interface、types、structs、arrays,但slice、map、function就不行,因为这几个类型不能用==来判断,来看下面这个例子感受下:type Key struct { Path, Country string}hits := make(map[Key]int)原创 2021-12-09 09:59:38 · 595 阅读 · 0 评论 -
Go面试看这里了~(十四)
原文地址:Go面试看这里了~(十四)1、main和init的区别?main和init的相同点:定义时不能有任何参数或返回值,且Go程序自动调用。main和init的不同点: init可应用于任意包中,且可重复定义多个。 main只能用于main包中,且只能定义一个。 main和init的执行顺序: 对同一Go文件的init调用顺序是从上到下。 对同一package中不同文件的init是按文件名称字符串大小从小到大顺序调用。 对不同package,如不原创 2021-12-08 09:52:18 · 444 阅读 · 0 评论 -
Go面试看这里了~(十三)
原文地址:Go面试看这里了~(十三)1、访问map中不存在的key?会返回空值,可用value,key := map[key]格式验证map的key是否存在。2、数组和切片的区别?数组是值拷贝而切片是引用,切片可认为是一种特殊的数组。3、函数闭包?Go支持匿名函数,可作为闭包,其优越性在于可直接使用函数内变量,来看实例:package mainimport "fmt"func getSequence() func() int { i := 0 return fu原创 2021-12-07 15:50:27 · 594 阅读 · 0 评论 -
Go面试看这里了~(十二)
原文地址:Go面试看这里了~(十二)1、struct是否可以比较?Go是强类型语言,不同类型的struct不可比较,同一类型的实例值可比较,但实例不可比较,因为是指针类型。2、godefer(fordefer)调用顺序?先进后出,后进先出。3、select语句可用于干什么?常用于goroutine的完美退出,监听IO操作。4、Go=和:=的区别?// 声明变量avar a int// 声明变量a并给变量a赋值a := 1//赋值a = 15、高效拼接字符串?...原创 2021-12-06 21:56:32 · 359 阅读 · 0 评论 -
Go面试看这里了~(十一)
原文地址:Go面试看这里了~(十一)1、读写锁或互斥锁读的时候可写么?读写锁包括读锁和写锁,多个读线程可同时访问共享数据,写线程需等到所有读线程释放锁之后才可取得锁,读线程也必须得等到写线程释放锁之后,才可获得锁,也就是说,读写锁要确保一定的互斥关系:可同时读,但读-写、写-写都是互斥的。2、Log包线程安全么?Golang标准库提供log机制,功能较为简单,在输出位置做了线程安全的保护。3、主协程如何等其余协程工作完成后再操作?使用channel通信,context、select。原创 2021-12-05 19:08:09 · 387 阅读 · 0 评论 -
Go面试看这里了~(十)
原文地址:Go面试看这里了~(十)1、关于govender? 将引用外部包的源代码放入当前工程的vender目录下。 编译器优先从vender目录寻找依赖包。 打包当前工程代码到其它机器的$GOPATH/src下,都可通过编译。 2、channel特性? 给nilchannel发送数据,造成永远阻塞。 从nilchannel读取数据,造成永远阻塞。 给已关闭的channel发送数据,引起panic。 从已关闭的channel接受数据...原创 2021-12-04 18:27:21 · 527 阅读 · 0 评论 -
Go面试看这里了~(九)
原文地址:Go面试看这里了~(九)1、main函数? 不能带参数。 不能定义返回值。 所在的包必须为main包。 可使用flag包来获取和解析命令行参数。 2、new和make的区别?new为内建函数,定义为:funcnew(Type)*Typemake为内建函数,定义为:func make(t Type, size ...IntegerType) Typenew的作用是初始化一个指向类型的指针(*Type),使用new来分配空间,传递..原创 2021-12-03 14:44:52 · 314 阅读 · 0 评论 -
网络和操作系统面试相关内容~(七)
原文地址:网络和操作系统面试相关内容~(七)1、TPC三次握手机制?TPC报文中两重要字段,一是序号字段,二是确认号字段,这俩字段将在握手阶段以及整个信息传输过程中起到重要作用。来看三次握手: 第一步:客户端TCP向服务端TPC发送一个不带额外数据的特殊TCP报文段,该报文段的SYN标志位会被置为1,所以将其称为SYN报文段,此时客户端会选取一个初始序列号(假设为client_num),并将此编号放在序号字段,该报文会被封装在一个IP数据报中发给服务器。 第二步:服务器收到SYN原创 2021-12-03 14:42:11 · 365 阅读 · 0 评论 -
网络和操作系统面试相关内容~(六)
原文地址:网络和操作系统面试相关内容~(六)1、虚拟内存是什么?虚拟内存指的是让物理内存扩充为更大的逻辑内存,从而让程序获得更多的可用内存,虚拟内存使用部分加载的技术,让一个进程或资源的某些页面加载进内存,从而能够加载更多的进程,甚至能加载比物理内存还大的进程,看起来像是内存变大了,实际上这部分内存还包含了磁盘或硬盘,所以叫做虚拟内存。2、I/O多路复用?I/O多路复用指的是内核一旦发现进程指定的一个或多个I/O条件准备读取,它就通知该进程,I/O多路复用适用场景如下: 客户端处理多个原创 2021-12-01 09:14:57 · 175 阅读 · 0 评论 -
网络和操作系统面试相关内容~(五)
原文地址:网络和操作系统面试相关内容~(五)1、分页和分段有什么区别? 分页对程序是透明的,分段就得程序显式划分每个段。 分页的地址空间是一维的,分段是二维的。 页的大小不可变,段的大小可动态改变。 分页主要用于实现虚拟内存,从而获得更大的地址空间,分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间且有助于共享和保护。 2、什么是交换空间?操作系统将物理内存(physicalRAM)分为一块一块的小内存,每块内存被称为页(page),当内存资源不足时.原创 2021-11-30 09:16:17 · 391 阅读 · 0 评论