<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hongqiangstring的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hongqiangstring</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hongqiangstring]]></copyright><item><title><![CDATA[待解决疑问]]></title><link>https://blog.youkuaiyun.com/hongqiangstring/article/details/134438421</link><guid>https://blog.youkuaiyun.com/hongqiangstring/article/details/134438421</guid><author>hongqiangstring</author><pubDate>Thu, 16 Nov 2023 11:48:25 +0800</pubDate><description><![CDATA[如果调用 Wait 之前不加锁的话，就有可能 Unlock 一个未加锁的 Locker。如果read的穿透次数一直达不到dirty map的长度, 那么一直不会讲dirty的数据更新到read中,（如果不释放锁，其他 Wait 的调用者就没有机会加入到 notify 队列中 了），然后一直等待；cond.Wait 方法的实现是，把当前调用者加入到 notify 队列之中后会释放锁。既然队列中有一个UnLock解锁动作, 那么自己代码中的Unlock动作还有必要写吗?多线程并发读取的k1一直是旧的数据?]]></description><category></category></item><item><title><![CDATA[go并发编程相关]]></title><link>https://blog.youkuaiyun.com/hongqiangstring/article/details/134348323</link><guid>https://blog.youkuaiyun.com/hongqiangstring/article/details/134348323</guid><author>hongqiangstring</author><pubDate>Tue, 14 Nov 2023 15:15:48 +0800</pubDate><description><![CDATA[缺点：不适用于大量写的场景，这样会导致 read map 读不到数据而进一步加锁读取，同时dirty map也会一直晋升为read map，整体性能较差，甚至没有单纯的 map+metux 高。sync.Map底层使用了两个原生map，一个叫read，仅用于读；当一个或者多个 reader 持有锁的时候，竞争锁的 writer 会等待这些 reader 释放完，才可能持有这把锁。如果 Cond 等待队列中有一个或者多个等待的 goroutine，则清空所有等待的 goroutine，并全部唤醒。]]></description><category></category></item><item><title><![CDATA[golang面试题]]></title><link>https://blog.youkuaiyun.com/hongqiangstring/article/details/134105573</link><guid>https://blog.youkuaiyun.com/hongqiangstring/article/details/134105573</guid><author>hongqiangstring</author><pubDate>Wed, 01 Nov 2023 08:07:57 +0800</pubDate><description><![CDATA[map默认为非线程安全的, 并发读写会直接报 panic.原因: 多个 goroutine操作同一个 map的场景并不多, 设置为并发安全的会损失性能。]]></description><category></category></item><item><title><![CDATA[Channel相关]]></title><link>https://blog.youkuaiyun.com/hongqiangstring/article/details/133964242</link><guid>https://blog.youkuaiyun.com/hongqiangstring/article/details/133964242</guid><author>hongqiangstring</author><pubDate>Sat, 21 Oct 2023 21:01:51 +0800</pubDate><description><![CDATA[数组, 切片, map的并发读写问题go语言中数组和切片支持并发读写,但是如果在不加任何锁的情况下,读写后的结果是无法预期的go语言中map是不支持并发读写的,如果多个协程并发读写同一个map的话,会直接报错go语言原生的map不支持并发读写的, 但是 sync.Map是支持并发读写的上面的代码, 输出结果有多种情况:可能输出不确定个myvalue。]]></description><category></category></item><item><title><![CDATA[Leetcode 160.相交链表]]></title><link>https://blog.youkuaiyun.com/hongqiangstring/article/details/133963764</link><guid>https://blog.youkuaiyun.com/hongqiangstring/article/details/133963764</guid><author>hongqiangstring</author><pubDate>Sat, 21 Oct 2023 17:12:26 +0800</pubDate><description><![CDATA[#原题链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/description/]]></description><category></category></item><item><title><![CDATA[Leetcode 152.乘积最大子数组]]></title><link>https://blog.youkuaiyun.com/hongqiangstring/article/details/133963599</link><guid>https://blog.youkuaiyun.com/hongqiangstring/article/details/133963599</guid><author>hongqiangstring</author><pubDate>Sat, 21 Oct 2023 17:02:18 +0800</pubDate><description><![CDATA[测试用例的答案是一个 32-位 整数。子数组 是数组的连续子序列。示例 1:输入: nums = [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: nums = [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。*/]]></description><category></category></item><item><title><![CDATA[剑指offer02 最小栈]]></title><link>https://blog.youkuaiyun.com/hongqiangstring/article/details/133917824</link><guid>https://blog.youkuaiyun.com/hongqiangstring/article/details/133917824</guid><author>hongqiangstring</author><pubDate>Thu, 19 Oct 2023 01:03:32 +0800</pubDate><description><![CDATA[设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。实现 MinStack 类MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。示例 1:输入：输出：解释：--> 返回 -3.--> 返回 0.--> 返回 -2.]]></description><category></category></item></channel></rss>