03 2022 档案

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

点击右上角即可分享
微信分享提示