03 2022 档案
摘要:/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func constructFromPrePost(preord
阅读全文
摘要:/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func buildTree(inorder []int, po
阅读全文
摘要:/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func buildTree(preorder []int, i
阅读全文
摘要:1、为什么会出现黏包? 主要原因就是tcp数据传递模式是流模式,在保持长连接的时候可以进行多次的收和发。 2、如何解决黏包? 出现”粘包”的关键在于接收方不确定将要传输的数据包的大小,因此我们可以对数据包进行封包和拆包的操作。 封包:封包就是给一段数据加上包头,这样一来数据包就分为包头和包体两部分内
阅读全文
摘要:服务端 package main import ( "fmt" "net" ) func main() { listen, err := net.ListenUDP("udp", &net.UDPAddr{ IP: net.IPv4(0, 0, 0, 0), Port: 30000, }) if e
阅读全文
摘要:服务端 package main import ( "bufio" "fmt" "net" ) // 处理函数 func process(conn net.Conn) { defer conn.Close() // 关闭连接 for { reader := bufio.NewReader(conn)
阅读全文
摘要:1、导入相关包 go get -u gorm.io/gorm go get -u gorm.io/driver/mysql 2、连接Mysql数据库 //配置MySQL连接参数 //username := "root" //账号 //password := "123456" //密码 //host
阅读全文
摘要:针对整数数据类型(int32、uint32、int64、uint64)我们还可以使用原子操作来保证并发安全,通常直接使用原子操作比使用锁操作效率更高。Go语言中原子操作由内置的标准库sync/atomic提供。 atomic包 方法解释 func LoadInt32(addr *int32) (va
阅读全文
摘要:1、sync.WaitGroup Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法: 方法名功能 func (wg * WaitGroup) Add(delta int) 计数器+delta (wg *WaitGroup) Done()
阅读全文
摘要:1、竞态问题 多个 goroutine 同时操作一个资源(临界区)的情况,这种情况下就会发生竞态问题。 2、互斥锁 互斥锁是一种常用的控制共享资源访问的方法,它能够保证同一时间只有一个 goroutine 可以访问共享资源。Go 语言中使用sync包中提供的Mutex类型来实现互斥锁。 sync.M
阅读全文
摘要:1、select的使用方法 Select 的使用方式类似于之前学到的 switch 语句,它也有一系列 case 分支和一个默认的分支。每个 case 分支会对应一个通道的通信(接收或发送)过程。select 会一直等待,直到其中的某个 case 的通信操作完成时,就会执行该 case 分支对应的语
阅读全文
摘要:1、通道的发送、接收以及关闭 ch := make(chan int) //发送 ch <- 10 // 把10发送到ch中 //接收 x := <- ch // 从ch中接收值并赋值给变量x <-ch // 从ch中接收值,忽略结果 //关闭 close(ch) 2、无缓冲通道和有缓冲通道 无缓冲
阅读全文
摘要:type MyStack struct { queue []int } /** Initialize your data structure here. */ func Constructor() (s MyStack) { return } /** Push element x onto stac
阅读全文
摘要:type MyQueue struct { inStack, outStack []int } func Constructor() MyQueue { return MyQueue{} } func (q *MyQueue) Push(x int) { q.inStack = append(q.i
阅读全文
摘要:反转整个链表 /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func reverseList(head *ListNode) *ListNode
阅读全文
摘要:func getIntersectionNode(headA, headB *ListNode) *ListNode { if headA==nil||headB==nil{ return nil } p1,p2:=headA,headB for p1!=p2{ if p1==nil{ p1=hea
阅读全文
摘要:func detectCycle(head *ListNode) *ListNode { if head==nil||head.Next==nil{ return nil } p1,p2:=head,head for p2!=nil{ p1=p1.Next p2=p2.Next if p2!=nil
阅读全文
摘要:func hasCycle(head *ListNode) bool { if head==nil||head.Next==nil{ return false } p1,p2:=head,head.Next for p2!=nil{ p1=p1.Next p2=p2.Next if p2!=nil{
阅读全文
摘要:// 返回链表的倒数第 k 个节点 ListNode findFromEnd(ListNode head, int k) { ListNode p1 = head; // p1 先⾛ k 步 for (int i = 0; i < k; i++) { p1 = p1.next; } ListNode
阅读全文
摘要:合并两个有序链表: 法一:迭代 package main func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode { dummyHead := &ListNode{} cursor := dummyHead for list1 !
阅读全文
摘要:type minHeap []*ListNode func (h minHeap) Len() int { return len(h) } func (h minHeap) Less(i, j int) bool { return h[i].Val < h[j].Val } func (h minH
阅读全文
摘要:将⻬王和⽥忌的⻢按照战⽃⼒排序,然后按照排名⼀⼀对⽐。如果⽥忌的⻢能赢,那就⽐赛,如果赢不了, 那就换个垫底的来送⼈头,保存实⼒。 int n = nums1.length; sort(nums1); // ⽥忌的⻢ sort(nums2); // ⻬王的⻢ // 从最快的⻢开始⽐ for (int
阅读全文
摘要:查找一个数 int binarySearch(int[] nums, int target) { int left = 0; int right = nums.length - 1; // 注意 while(left <= right) { int mid = left + (right - lef
阅读全文
摘要:func SlideWindow(s, t string){ mp:=map[byte]int{} window:=map[byte]int{}//window是[left,right)区间内的的哈希表 //根据目标串构建哈希表 for i:=0;i<len(t);i++{ mp[t[i]]++ }
阅读全文
摘要:前缀和的适用场景是:原始数组不会被修改的情况下,频繁查询某个区间的累加和。 //第一步:根据数组构建前缀和 func PreSum(nums []int)[]int{ m:=len(nums) if m==0{ return[]int{} } preSum:=make([]int,m) for i:
阅读全文
摘要:差分数组的适用场景是:频繁对原始数组的某个区间的元素进⾏增减。 //第一步:构建差分数组 func Diff(nums []int)[]int{ m:=len(nums) if m==0{ return []int{} } diff:=make([]int,m) diff[0]=nums[0] fo
阅读全文