- 博客(80)
- 资源 (3)
- 问答 (3)
- 收藏
- 关注
原创 Leetcode.315 计算右侧小于当前元素的个数【线段树】
给定一个整数数组 nums,按要求返回一个新数组counts。数组 counts 有该性质: counts[i] 的值是nums[i] 右侧小于nums[i] 的元素的数量。示例:输入:nums = [5,2,6,1]输出:[2,1,1,0]解释:5 的右侧有 2 个更小的元素 (2 和 1)2 的右侧仅有 1 个更小的元素 (1)6 的右侧有 1 个更小的元素 (1)1 的右侧有 0 个更小的元素提示:0 <= nums.length <= ...
2021-02-26 20:28:45 237
原创 Leetcode218.天际线问题【扫描线】
解法如图,假设有一条线从左往右扫描数组:1、遇到左端点,则记录当前x坐标下的最大高度2、遇到右端点,则记录当前x坐标下的最大高度很明显,我们可以采用大顶堆来存储坐标为x时,当前建筑的高度h[x].遇到左端点则把高度入堆,当前堆顶元素即为x处最大高度遇到右端点,则把对应建筑的左端点出堆,此时堆顶同样是x处最大高度代码func getSkyline(buildings [][]int) [][]int { heights := make([][]int, 0, ...
2021-02-24 17:25:58 289
原创 Leetcode.204 求质数【埃氏筛】
统计所有小于非负整数n的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0提示:0 <= n <= 5 *解法质数相关问题有个套路方法叫埃氏筛:如果x是质数,那么大于x的倍数2x,3x...一定不是质数。所以我们可以根据这个思路,搞一个数组,记录每个...
2021-02-22 17:02:11 178
原创 Leetcode.152 乘积最大子数组 【动态规划】
给你一个整数数组 nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释:子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释:结果不能为 2, 因为 [-2,-1] 不是子数组。解法1、暴力法:直接二重循环取最大,时间复杂度O(), 空间复杂度O(1)2、动态规划:我们假设dp[i]是以i为结尾的连续子数组的最大乘积,...
2021-02-12 21:37:11 160
原创 Leetcode 91.解码方法【动态规划】
一条包含字母A-Z 的消息通过以下映射进行了 编码 :'A' -> 1'B' -> 2...'Z' -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"111" 可以将 "1" 中的每个 "1" 映射为 "A" ,从而得到 "AAA" ,或者可以将 "11" 和 "1"(分别为 "K" 和 "A" )映射为 "KA" 。注意,"06" 不能映射为 "F" ,因为 "6" 和 "06" 不同。给你一个只含数字的 .
2021-02-06 18:01:37 197
原创 LeetCode 1631. 最小体力消耗路径【并查集】
1631. 最小体力消耗路径你准备参加一场远足活动。给你一个二维rows x columns的地图heights,其中heights[row][col]表示格子(row, col)的高度。一开始你在最左上角的格子(0, 0),且你希望去最右下角的格子(rows-1, columns-1)(注意下标从 0 开始编号)。你每次可以往 上,下,左,右四个方向之一移动,你想要找到耗费 体力 最小的一条路径。一条路径耗费的 体力值是路径上相邻格子之间 高度差绝对值的 最大值决定...
2021-01-29 20:49:17 324
原创 LeetCode 25. K 个一组翻转链表
这题难度是hard,但解法并没什么复杂度,主要是边界判定,所以直接上代码了func reverseKGroup(head *ListNode, k int) *ListNode { if k == 1 || head == nil { return head } var n int head = &ListNode{Next: head} pre := head for node := head.Next; node != nil; { n++ // 每次需要翻转..
2021-01-27 20:00:07 125
原创 最小生成树:Leetcode1135.最低成本联通所有城市
题目:如题,经典的最小生成树解法:1、什么是最小生成树现在假设有一个很实际的问题:我们要在n个城市中建立一个通信网络,则连通这n个城市需要布置n-1一条通信线路,这个时候我们需要考虑如何在成本最低的情况下建立这个通信网?于是我们就可以引入连通图来解决我们遇到的问题,n个城市就是图上的n个顶点,然后,边表示两个城市的通信线路,每条边上的权重就是我们搭建这条线路所需要的成本,所以现在我们有n个顶点的连通网可以建立不同的生成树,每一颗生成树都可以作为一个通信网,当我们构造这个连通网所花的成本最小
2021-01-15 17:41:40 1336
原创 Leetcode面试题 17.24. 最大子矩阵: 套用最大子序列和解法ac二维数组最大子矩阵和
53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。这一题大家应该都做过,基本思路是从左到右求数组和tmpSum += arr[i],一旦和tmpSum<0, 就重置tmpSum=0. 遍历一遍就能求最大和,具体证明略。那么进入正题,最大子矩阵是求一个矩阵中的和最大的子矩阵原题如下:给定一个正整数、负整数和 0 组成的 N × M矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组 [r1, c1, ...
2021-01-14 20:38:12 292
原创 Leetcode.735行星撞击或线上跑点追击问题
一条直线上有一些点,每个点有不同方向不同大小的速度,可用[][]int{[1, 3], [3, -1], [10, 2]...} 来表示,其中下标0表示点在直线上的位置,下标1表示点的速度大小(正数向右,负数向左)1、求第一次碰撞发生的时间?2、如果每两个点撞击后都会消失,求稳定后,直线上都剩下哪几个点?3、可能每个点都有自重,自重相同的点撞击后两两消失,自重不同的点撞击后,小的会消失,大的会保留,求稳定状态?最近看到前面这道题,发现leetcode上有个类似的题目,就拿出来做一下。.
2021-01-14 18:53:14 332
原创 单调栈:Leetcode面试题17.21直方图的水量
这题单调栈存数组下标遇arr[i] >=栈顶元素 arr[stack[len-1]] 则出栈stack[len-1]并和新栈顶计算存水量.持续循环直到栈为空或栈顶元素>arr[i],则入栈ifunc trap(height []int) int { if len(height) == 0 { return 0 } var res int var stack []int for i, h := range height { l := len(stack) // ..
2021-01-13 11:23:59 143
原创 拓扑排序:Leetcode207.课程表
对一个有向无环图进行拓扑排序,就是将这个图的某种依赖关系表现出来(排序结果可能不唯一)规则:图中每个顶点只出现一次。 A在B前面,则不存在B在A前面的路径。(不能成环!!!!) 顶点的顺序是保证所有指向它的下个节点在被指节点前面!(例如A—>B—>C那么A一定在B前面,B一定在C前面)。所以,这个核心规则下只要满足即可,所以拓扑排序序列不一定唯一!来看这道题:Leetcode207.课程表你这个学期必须选修 numCourse 门课程,记为0到numCours...
2021-01-12 15:14:32 175
原创 面试题 17.13. 恢复空格: dp+字典树
哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!"已经变成了"iresetthecomputeritstilldidntboot"。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未识别的字符数。注意:本题相对原题稍作改动,只需.
2021-01-08 22:04:19 137
翻译 系统设计面试题-实现Twitter时间线和搜索
设计Facebook feed和设计Facebook搜索都是类似的问题。步骤1:概述用例和约束收集需求并确定问题的范围。提出问题以澄清用例和约束。讨论假设。如果没有面试官来回答明确的问题,我们将定义一些用例和约束。用例我们将把问题的范围限定为只处理以下用例用户发布微博 该服务向关注者推送推送消息,发送推送通知和电子邮件 用户查看用户时间线(来自用户的活动) 用户查看主时间线(用户关注的人的活动) 用户搜索关键字 服务具有高可用性超出范围该服务将推特推送到Twit.
2021-01-02 17:25:36 894
原创 快速排序的递归及非递归实现
快速排序的递归写法func Quicksort(arr []int, i, j int) { if i >= j { return } m := partion(arr, i, j) Quicksort(arr, i, m-1) Quicksort(arr, m+1, j)}// 把s,e分为两段,并返回分割点idxfunc partion(arr []int, s, e int) int { prefix := arr[s] idx := s + 1 for i .
2020-12-23 14:54:56 367
原创 浅析raft一致性算法
raft怎么解决分布式数据一致性问题的?一句话就是:把分布式数据一致性问题转换为 单节点(Leader)日志持久化问题。只要保证Leader日志存储的持久化,靠leader做日志分发来保证集群中大多数节点的数据一致性。先介绍下用到的概念Leader: 主节点,每个term有且只有一个Candidate:候选主节点,选举未完成时,每个节点都可能宣城自己是候选人Follower:从节点,从主节点同步数据并应答、参与选举投票Term:任期,每个leader当选后会开启新的te...
2020-12-19 16:45:47 281 2
原创 golang源码分析:sync.Pool 如何从读写加锁到无锁
我们知道,早期的sync.Pool,底层是通过互斥锁实现对共享队列的并发访问的,这里会存在的问题是,尽管是分段锁,高并发场景下频繁进行G的wait和runable状态调度其实开销也不算小通过互斥锁保证并发安全的sync.Pool数据结构type Pool struct { noCopy noCopy local unsafe.Pointer // local,固定大小per-P池, 实际类型为 [P]poolLocal localSize uintptr // ..
2020-12-14 17:48:39 485
原创 golang源码分析:channel
首先说一些结论:只有发送端可以close chan,接收端不要搞1、重复 close,产生 panic2、close一个nil,产生 panic3、写未初始化chan永远阻塞4、写close会panic5、make chan返回的是* hchan,所以chan可以随意在函数和go间传递channel 的主要结构:一个环形数组实现的队列,用于存储消息元素;两个链表实现的 goroutine 等待队列,用于存储阻塞在 recv 和 send 操作上的 goroutine;.
2020-12-11 16:26:20 557 1
原创 golang内存逃逸分析
逃逸分析在编译阶段完成,目的是决定内存分配地址是栈还是堆:编译时通过 go build -gcflags=-m 可以查看逃逸对象1、关于堆和栈栈可以简单理解成一次函数调用内部申请到的内存,它们会随着函数的返回把内存还给系统。在栈上申请的内存 :函数返回直接释放,不会引起垃圾回收,对性能没有影响。在堆上申请的对象生命周期可以超出函数调用的作用域,需要gc进行回收。2、看几个demo1、申请临时变量不会逃逸func a() { t := make([]int, 10) //..
2020-12-09 18:49:00 462 1
原创 从“gorm建立mysql数据库连接,偶现tcp: i/o timeout问题”简单看gorm.DB源码
昨天被同事问到一个问题:go服务,gorm建立mysql数据库连接,偶现tcp: i/o timeout问题是怎么回事?说实话,我平时没怎么用过gorm,也只是简单了解它的用法。考虑到问题是连接mysql偶现tcp: i/o timeout, 第一反应是怀疑mysql的负载太高,比如连接数太高导致排队。于是看了下代码对gorm的调用代码:使用gorm建立连接的场景这里看起来没什么问题,连接池的参数也都有配上。// NewDB 连接dbfunc NewDB(dbKey st.
2020-12-08 11:55:51 4295 1
原创 golang内存对齐原理
内存对齐的现象:之前没接触过c艹的同学可以先看下面的例子:type A struct { a bool b string c bool}type B struct { a bool c bool b string}func main() { fmt.Printf("Size A:%d\n", unsafe.Sizeof(A{})) fmt.Printf("Size B:%d\n", unsafe.Sizeof(B{}))}输出结果是
2020-11-30 20:16:27 391
原创 从单测mock失败简单谈golang内联优化
简单说下最近遇到因为go函数内联导致的单测mock问题:假设我们现在有这样一个简单的求max函数:func max(a, b int) int { if a > b { return a } return b}然后我们使用gomonkey来mock掉这个函数(当然,这是为了演示,事实上我们mock掉的一般是rpc调用):// TestMaxfunc TestMax(t *testing.T) { // mock掉max方法 maxMock := ApplyFunc
2020-11-23 11:14:59 3556
原创 golang源码分析:sync.Map
先说结论:sync.Map适用于以下场景读多写少:读多写少的环境下,都是从read的map去读取,不需要加锁,而写多读少的情况下,需要加锁,其次,存在将read数据同步到dirty的操作的可能性,大量的拷贝操作会大大的降低性能 读写不同的key:sync.Map是针对key的值的原子操作,相当于加锁加载 key上,所以,多个key的读写是可以同时并发的// 封装的线程安全的maptype Map struct { // lock mu Mutex // 实际是readOnly这个结构
2020-11-17 17:54:10 181
原创 使用zookeeper进行无状态worker任务分发
无状态worker可以基于订阅redis或kafka消息来实现。不过我们这次用zk来搞一下,实现无状态、可容灾的任务分发系统。1.准备三个持久节点:/tasks // 任务list/workers // 可用进程 /distribute // 已分配任务2.划分角色职责sender: 负责发布向/tasks节点发布任务 worker:负责执行任务master:负责将任务分发给worker执行,并关注执行状态3.具体流程...
2020-11-12 20:19:18 923
原创 布隆过滤器原理及golang的快速实现
最近面临这样的场景:2亿+数据需要调用后端服务A,业务需要1min处理完成,那么A服务承载的tps达到惊人的300w......必须想办法降低tps。那么方案来了:1、把时间窗口拉长 2、降低待处理数据量。拉长时间业务肯定是接受不了的,但是按照以往的经验,这部分数据并不全部需要处理,可能仅有一半真正需要调用A服务,所以我们可以把1亿数据给过滤掉。这里我们维护一个布隆过滤器来进行数据的过滤。----------------以上都是导语----------------1. 布隆过滤器的概
2020-11-12 20:12:58 286
原创 file_get_contents("php://input")的使用方法
接口需要接受 py 传过来的 post 数据但是使用$HTTP_RAW_POST_DATA没办法接受,因为服务器没在 php.ini里面配置改变量的开启最后使用file_get_contents("php://input")得到了数据最后是区别: 1,Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form
2017-10-31 10:58:42 3342
转载 php使用curl的SSL和非SSL
三年前写过一篇《一个简陋的支持HTTPS的PHP CURL封装函数》,当时只是知其然不知其所以然,今天来详细梳理一下。 为方便说明,先上代码吧~ 这是今天重新封装的一个函数/** * curl POST * * @param string url * @param array 数据 * @param int 请求超时时间 * @param bo
2017-08-31 18:07:07 1127
转载 Linux scp复制文件,不需要输入密码的技巧
当两台LINUX主机之间要互传文件时可使用SCP命令来实现,建立信任关系之后可不输入密码。 把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中 假设本地主机linux100,远程主机linux200 一,在linux100主机里的用户 运行 #ssh-k当两台LINUX主机之间要互传文件时可使用SCP命令来实现,建立信任关系之后可不输入密码
2016-08-27 23:15:57 675
原创 shell读文件时无法读入tab的问题
最近要写一个脚本,遇到一个比较恶心的地方:cat rcv.date.log | while read linedo echo -e "$line"done 在执行的时候,总是会将每一行中的“\t“分隔符读入成一个空格,导致切分的时候怎么都切不开;后来发现,这样写的话,就可以读入文件中的制表符:cat rcv.date.log | while r
2016-08-27 18:28:31 1302
转载 zendopcache与apc同时使用
以前看优化php的时候知道是怎么弄的,时间一长了又忘记apc和opcache什么关系了后来自己也忘记为什么要同时这两个一起用了。。今天想起来了又翻了出来apc和zendopcache什么区别http://www.laruence.com/2013/03/18/2846.html点击(此处)折叠或打开在以前, 很多人都会选择使用APC, APC
2016-08-11 11:58:05 1962
转载 前端数据展示的评价标准
随着 web 技术的蓬勃发展,前端的展示、交互越来越复杂,在用户的访问、操作过程中产生了大量的数据。由此,前端的数据分析也变得尤为重要。当然,对于站长来说,你可以使用百度统计等各种已有的服务平台,但是,如果现有的统计平台不能满足你的需要,你想开发自己定制化的数据统计平台,或者你是一个纯粹的 geek,想了解背后隐藏的技术,又或者你对前端的数据统计感兴趣,本文就能满足你那颗好奇的心。下面就逐步描述前
2015-03-27 09:56:43 2000
转载 PHP大神的十大优良习惯
1、多阅读手册和源代码没什么比阅读手册更值得强调的事了–仅仅通过阅读手册你就可以学习到很多东西,特别是很多有关于字符串和数组的函数。就在这些函数里面包括许多有用的功能,如果你仔细阅读手册,你会经常发现在以往的项目开发过程中,很多时候你在“重复发明轮子”,而实际上你只需要一个核心函数就可以完成相应的功能。手册是你的朋友。另外,现在有很多使用PHP开发的开源程序。为什么不去学习和借鉴呢?下载一份开
2015-03-03 19:48:06 504
原创 php变量在内核中的存储方式
众所周知,php是使用c语言编写的,c语言是强类型的语言。而php是弱类型的语言,一个变量可以保存任何类型的值。那么这里就涉及到Zend引擎中的实现。在php文件目录下的Zend/zend.h头文件中,可以看到类似的定义:---------------------------------------------------------#define IS
2015-02-21 17:22:12 470
转载 启用ckeditor自带的图片上传功能
本人使用的CKEditor版本是3.6.3。CKEditor配置和部署我就不多说。CKEditor的编辑器工具栏中有一项“图片域”,该工具可以贴上图片地址来在文本编辑器中加入图片,但是没有图片上传。“预览”中有一大堆鸟语,看得很不爽。可以打开ckeditor/plugins/image/dialogs/image.js文件,搜索“b.config.image_previewText”就
2015-02-05 19:57:09 1076
转载 Git两分钟指南
能够从本指南有所收获的例子也许是这样的,一个高中生正在进行他(或是她)的第一个项目,而且并不需要和别人分享代码。(具体讲其实是我儿子,他已经写了很多代码,但是没有时间去学习一个版本控制工具。这份指南是为他写的,当然我觉得别人也能用的到。)对他来说,使用Git是很有意义的。和Subversion不同,他不需要一个服务器,就可以很容易地使用Git(只要他对硬盘进行定期备份,当然,他确实也在这么做)。正
2015-01-17 15:35:11 510
转载 PHP代码优化24条方案
echo比print快。使用echo的多重参数代替字符串连接。在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。对global变量,应该用完就unset()掉。用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。函数代替正则表达式完成相同功能。当执行变量$i的递增或递减时,$i++会比++$i慢一些。
2015-01-14 19:22:12 617
转载 国外程序员收集整理的PHP资源大全
doz在 Github发起维护的一个PHP资源列表,内容包括:库、框架、模板、安全、代码分析、日志、第三方库、配置工具、Web 工具、书籍、电子书、经典博文等等。伯乐在线对该资源列表进行了翻译,译文如下:依赖管理依赖和包管理库Composer/ Packagist:一个包和依赖管理器Composer Installers:一个多框架Composer库安装器Pickle:
2015-01-05 20:28:03 1204
转载 php empty()和isset()的区别
在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问题不再。顾名思义,empty() 判断一个变量是否为“空”,isset() 判断一个变量是否已经设置。正是这种所谓的“顾名思义”,令我开始时走了些弯路:当一个变量值等于0时,empty()也会成立
2015-01-02 17:32:52 511
转载 Hibernate---在Hibernate中获取数据方式与缓存使用
Hibernate获取数据的方式有不同的几种,其与缓存结合使用的效果也不尽相同,而Hibernate中具体怎么使用缓存其实是我们很关心的一个问题,直接涉及到性能方面。 缓存在Hibernate中主要有三个方面:一级缓存、二级缓存和查询缓存 ①一级缓存在Hibernate中对应的为session范围的缓存,也就是当session关闭时缓存即被清除,一级缓存在Hibernate中是不可配置的
2014-12-18 18:24:38 1090
转载 Spring定时任务的几种实现
Spring定时任务的几种实现近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合spring框架来介绍。一.分类从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):Java自带的java.util.Timer类,这个类允许你调度一个
2014-11-26 19:55:12 399
TA创建的收藏夹 TA关注的收藏夹
TA关注的人