2026/3/27 3:35:58
网站建设
项目流程
商品价格网,seo工作,wordpress 百度插件,网站开发发展趋势1.lowerbound深层理解 1.不要立即返回mid#xff0c;而是统一返回left 比如if nums[mid] target: return mid x 完整逻辑之后返回left就是lowerbound#xff0c;第一个满足target的坐标 2.为什么 if nums[mid] target:的逻辑是对的 if nums[mid] tar…1.lowerbound深层理解1.不要立即返回mid而是统一返回left比如if nums[mid] target:return midx完整逻辑之后返回left就是lowerbound第一个满足target的坐标2.为什么 if nums[mid] target:的逻辑是对的if nums[mid] target的逻辑是错的因为我们是lowerbound我们要找第一个≥target 的下标所以判断条件是 然后不断向大于靠近如果 nums [mid] ≥ target→mid 位置的元素「满足≥target」但可能不是「第一个」左边可能还有更小的下标也满足意思就是如果判断那找到的不一定是第一个所以无法直接排除要找第一个≥target 的下标 → 先把所有 target 的元素都筛到左边lowerbound就是找第一个≥target 的下标所以我们要排除所有targetclass Solution: def searchInsert(self, nums: List[int], target: int) - int: left 0 right (len(nums)) - 1 while leftright: mid (leftright)//2 if nums[mid]target: left mid1 else: right mid-1 return left2.搜索旋转排序数组当初放弃的题现在在看轻舟已过1.先找出旋转排序的最小值2.再使用lowerbound参数是left和right3.核心判断条件使用target和nums[-1]划分找到target存在的区间如果targetnums[-1],可以确定在绿色区间这段如何表示那就是 0到min-1如果不是绿色区间统一都可以用min到n-1妙哉class Solution: def search(self, nums: List[int], target: int) - int: def findmin(nums): left 0 right len(nums)-1 while leftright: mid (leftright)//2 if nums[mid]nums[-1]: left mid 1 else: right mid return left def lowerbound(left,right): while leftright: mid (leftright)//2 if nums[mid]target: left mid 1 else: right mid -1 return left n len(nums) ans n min findmin(nums) if targetnums[-1]: ans lowerbound(0,min-1) else: ans lowerbound(min,n-1) if ans n or nums[ans]!target: return -1 else: return ans黑马点评学习了分布式锁基础以setnx实现整体思路解决了如何解决集群服务器引入锁问题死锁怎么办设定过期时间删错锁怎么办每个锁对应的线程做好标识先上锁查锁删锁查锁删锁不能达到原子引入lua脚本还是不够还是有问题1.不可重入---redissionn改用hash数据结构key存锁名field存线程唯一标识value存可重入次数2.不可重试---tryLock的结构参数包括waitTime和leasetime第一次失败不会立即返回失败进入等待每隔一段时间进行重试直到waittime不会阻塞因为等待期间休眠3.超时释放---看门狗如果没设定leasetime启动看门狗看门狗有锁过期时间可以自己设定过期时间的1/3会续期一次提供容错续期一次过期时间如果最终还是没有续期则释放4.主从一致---联锁解决不同业务的主从一致问题比如支付双方存在主从一致把不同业务的锁联结在一起要么都成功要么都失败保持原子性---红锁解决统一业务不是解决主从一致而是解除主从一致不能使用这个结构统一业务的独立锁半数以上完成写操作则认为成功