自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(165)
  • 收藏
  • 关注

原创 动态规划经典例题:不同路径

力扣上比较简答的一道动态规划题目。 方程:class Solution {public: int uniquePaths(int m, int n) { const int M = m; const int N = n; int dp[M][N]; memset(dp, 0, sizeof(dp)); for (int i = 0; i < ...

2020-09-30 21:19:21 11455 4

原创 动态规划面试常考:最短路径和

题目:给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。先看下dp方程,方程出来了,直接用代码实现方程就可以了。func minPathSum(grid [][]int) int { if len(grid) == 0 || ...

2020-09-30 21:18:17 11837 4

原创 贪心算法很简单:跳跃游戏

题目描述:定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一...

2020-09-30 21:17:19 11620 4

原创 超经典动态规划题:最大子序和

给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释:连续子数组[4,-1,2,1] 的和最大,为6 解决思路:动态规划 动态规划方程:dp[i]=max(dp[i-1]+nums[i],nums[i]) 动态规划:定义dp[i]表示为nums[i]为结尾的[连续子数组的最大和] ...

2020-09-30 21:16:35 11778 4

原创 面试碰到这个算法:字母异位词分组

题目:输入: ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ]方法1:先将每个字符串进行排序,然后判断是否相等class Solution {public: vector<vector<string>> groupAnagra...

2020-09-30 21:14:55 11601 4

原创 you-get工具

you-get可以用来解析视频网页的播放地址。 you-get -u http:// 就能获取视频相关信息。 go get 下载下来的包,只要src这个目录的代码就能执行you-get命名。 该命令返回的数据不是一个json,则需要用正则就解析。 ...

2020-09-30 21:13:54 11788 4

原创 restful规范

客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作: GET用来获取资源, POST用来新建资源(也可以用于更新资源), PUT用来更新资源, DELETE用来删除资源 restful规范就4个操作...

2020-09-28 22:54:32 11574 5

原创 后台开发真的不需要看《tcpip详解》吗

说起TCP协议真的一大堆东西,TCP很复杂和网络编程息息相关,网络编程离不开TCP。虽然数据通过协议自己就发出去了,但是在排查网络问题时,我们都是通过抓包看协议本身。更好的学习tcp协议才能了解网络编程的数据传输,一般人tcpip详解1已足够。好书经常读...

2020-09-28 22:50:32 12659 4

原创 网编编程必看书籍:unix网络编程

unix网络编程被誉为圣经,该书主要讲socket套接字相关,socket API,从底层剖析网络编程。网络编程中需要用到的一些经典函数,多路复用函数,这些都值得去反复学习研究。目录:录Part 1 Introduction and TCP/IP简介和TCP/IPChapter 1 Introduction简介1.1 Introduction概述1.2 A Simple Daytime Client一个简单的时间获取客户程序1.3 Protocol ...

2020-09-28 22:42:28 12934 3

原创 最容易看懂的汇编语言书籍:汇编语言 王爽

关于底层知识的学习,汇编当然是绕不过,当你需要调优一小段代码时,你需要看的汇编语言。通过学习汇编语言,你能更清楚明白的了解整个计算机的计算过程,指令相关知识,对学习计算机帮助甚大。目录:第1章 基础知识1.1 机器语言1.2 汇编语言的产生1.3 汇编语言的组成1.4 存储器1.5 指令和数据1.6 存储单元1.7 CPU对存储器的读写1.8 地址总线1.9 数据总线1.10 控制总线1.11 内存地址空间(概述)1.12 主板1.1...

2020-09-28 22:32:31 12478 3

原创 腾讯朋友力荐书籍:程序员的自我修养:链接、装载与库

后台开发需要学习底层知识,只有底层知识掌握了,学一些中间件是信手捏来,中间件也是跑在底层的操作系统上。<<程序员的自我修养:链接、装载与库>>对学习底层知识非常有帮助,腾讯的朋友都是学习这本书。目录:第1部分 简介第1章 温故而知新1.1 从HELLO WORLD 说起1.2 万变不离其宗1.3 站得高,望得远1.4 操作系统做什么1.5 内存不够怎么办1.6 众人拾柴火焰高1.7 本章小结第2部分 静态链接第2章 编...

2020-09-28 22:26:29 11774 3

原创 面试真题:搜索旋转数组

假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O(log n) 级别。 示例 1: 输入: nums = [4,5,6,7,0,1,2], target = 0 ...

2020-09-28 22:05:17 11520 3

原创 面试高频题:在数组中查找元素第一个和最后一个出现的位置

给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是O(logn)级别。 如果数组中不存在目标值,返回[-1,-1]。 示例1: 输入:nums=[5,7,7,8,8,10],target=8 输出:[3,4] 示例2: 输入:nums=[5,7,7,8,8,10],target=6 输出:...

2020-09-28 22:03:38 13670 4

原创 面试腾讯算法:组合总和

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入: candidates = [2,3,5], t...

2020-09-28 22:03:06 11464 3

原创 面试腾讯我遇到了这题:数组全排列

给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]搜索回溯的思想//求出数组中所有可能的排列class Solution {public: void backtrack(vector<vector<int>>& res, vector<int>...

2020-09-28 22:01:59 11563 5

原创 算法--下一个排列

实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。 1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1看一下代码:func nextPermutation(nums []int) ...

2020-09-22 23:23:25 13181 3

原创 合并K个排序链表

合并两个有序链表前面已经说了,有迭代和递归二种方式,那如果合并K个呢,力扣说了3中方式,下面我们来看一下。 1.顺序合并,看下代码class Solution {public: //合并两个链表 ListNode* mergeTwoLists(ListNode *a, ListNode *b) { if ((!a) || (!b)) return a ? a : b; ListNode head, *tail = &head...

2020-09-22 22:37:47 12960 3

原创 索引的好处

通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性 可以大大加快数据的检索速度 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能...

2020-09-22 22:11:04 13145 3

原创 golang常见内存泄漏

1.有goroutine泄漏,goroutine“飞”了,zombie goroutine没有结束,这个时候在这个goroutine上分配的内存对象将一直被这个僵尸goroutine引用着,进而导致gc无法回收这类对象,内存泄漏。 2.有一些全局(或者生命周期和程序本身运行周期一样长的)的数据结构意外的挂住了本该释放的对象,虽然goroutine已经退出了,但是这些对象并没有从这类数据结构中删除,导致对象一直被引用,无法被回收...

2020-09-22 22:10:26 13921 6

原创 go语言的goconvey

goconvey是一个支持golang的单元测试框架 goconvey能够自动监控文件修改并启动测试,并可以将测试结果实时输出到web界面 goconvey提供了丰富的断言简化测试用例的编写

2020-09-22 22:10:03 13621 4

原创 关于弹性上班

很多公司弹性上班,对员工来说很方便,但弹性工作就是意味一般存在着加班的情况。 一般的弹性到10点,就是10点上班;弹性到11点就是11点上班。 工作时要注意到上班的时间,注意自己的生物钟是否适合公司最晚的弹性时间,会有很多员工会选择最迟的时间。大多数员工想早点去也不一定早点下班,所以都是晚去然后晚点下班,然后自己的生物钟就会被调整。...

2020-09-18 22:04:01 14450 10

原创 算法-电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].这道题利用了回溯的思想,由于是不存在不可行的情况,直接穷举所有情况不需要剪枝操作。package mainimport "fmt"var phoneMap map[string]strin...

2020-09-18 22:00:29 13349 4

原创 算法--删除链表的倒数第N个节点

思路:双指针法(链表带头结点) 指针p1和p2都指向链表头部,这时p2先向前移动N部,这时p2和p1相差N部。然后p2和p1一起移动,当p2移动到最后一个节点时,p1指向倒数第N个节点。 很容易,代码略...

2020-09-18 22:00:18 9515 4

原创 算法--合并两个有序链表

有两种方法,迭代和递归。 迭代://不带头结点Node * Merge(Node *head1 , Node *head2){ //判空 if ( head1 == NULL) return head2 ; if ( head2 == NULL) return head1 ; //头结点 Node *head = NULL ; //分别指向两个链表 Node *p1 = NULL; Node *p2 = NULL; //head指向较小值的那...

2020-09-18 22:00:06 9560 4

原创 ctrl+f5 强刷新

某次同学上线了一个服务 ,怎么刷新都不管用,但是又不想清楚浏览器缓存。 F5通常只是刷新本地缓存; Ctrl+F5可以把INTERNET临时文件夹的文件删除再重新从服务器下载,也就是彻底刷新页面了...

2020-09-18 21:59:54 10519 5

原创 工作中的沟通

工作中的沟通方式,想想其实也知道,就是有时候会忘记,所有需要强制自己执行,习惯了就成自然了,好习惯的养成也很重要。 工作中同事都很忙,所以有事去找别人时先问别人有空没,然后在继续讨论问题,这也是出于礼貌行为,强制自己执行吧。 如果是微信沟通,还是先问有空吗?后面再补充你要说的整个事,用一条消息发出去。不要等到别人回复你有空,你在说事。...

2020-09-18 21:59:43 9539 4

原创 写给刚进公司的你

刚进入公司,一切都很陌生,需要快速熟悉公司的的一切,包括公司的制度和业务,你进入公司都有一个所谓的“老大”负责引导你。 刚进入公司有很多不熟悉的地方,业务和知识不熟悉的地方要勤做笔记,给你说过简单事情不要再去麻烦别人。 中午或晚上吃饭也需要和你同组的同事或"老大"一起去吃饭,相互了解对方,关系较融洽了沟通上也更为高效和容易,这是很重要的一点,特别是你刚进入公司,团队的融入感很重要。互相熟悉了,在平时的沟通中就会少一些误会。刚进入公司不熟悉才要去主动熟悉。 ...

2020-09-17 21:30:49 11601 8

原创 go语言的channel特性

给一个 nil channel 发送数据,造成永远阻塞 从一个 nil channel 接收数据,造成永远阻塞 给一个已经关闭的 channel 发送数据,引起 panic 从一个已经关闭的 channel 接收数据,如果缓冲区中为空,则返回一个零值 无缓冲的channel是同步的,而有缓冲的channel是非同步的...

2020-09-17 21:30:30 11016 4

原创 go语言触发异常的场景

空指针解析 下标越界 除数为0 调用panic函数

2020-09-17 21:30:19 10771 6

原创 go语言的同步锁

当一个goroutine获得了Mutex后,其他goroutine就只能乖乖的等待,除非该goroutine释放这个Mutex RWMutex在读锁占用的情况下,会阻止写,但不阻止读 RWMutex在写锁占用情况下,会阻止任何其他goroutine(无论读和写)进来,整个锁相当于由该goroutine独占...

2020-09-17 21:29:25 10916 4

原创 go语言的main函数

main函数不能带参数 main函数不能定义返回值 main函数所在的包必须为main包 main函数中可以使用flag包来获取和解析命令行参数

2020-09-17 21:28:45 11897 4

原创 go语言中的引用类型

数组切片 字典(map) 通道(channel) 接口(interface)

2020-09-17 21:28:31 11044 4

原创 go语言中没有隐藏的this指针

方法施加的对象显式传递,没有被隐藏起来 golang的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达 方法施加的对象不需要非得是指针,也不用非得叫this

2020-09-17 21:28:17 12180 4

原创 new和make的区别

new 的作用是初始化一个指向类型的指针(*T) 使用new函数来分配空间。传递给new函数的是一个类型,不是一个值。返回值是 指向这个新分配的零值的指针 make 的作用是为 slice,map 或 chan 初始化并返回引用(T) 第一个参数是一个类型,第二个参数是长度 返回值是一个类型...

2020-09-17 21:28:03 10765 4

原创 http keep-alive

client发出的HTTP请求头需要增加Connection:keep-alive字段 Web-Server端要能识别Connection:keep-alive字段,并且在http的response里指定Connection:keep-alive字段, 告诉client,我能提供keep-alive服务,并且"应允"client我暂时不会关闭socket连接...

2020-09-17 21:27:17 10643 5

原创 map如何顺序读取

map不能顺序读取,是因为他是无序的,想要有序读取, 首先的解决的问题就是,把key变为有序,所以可以把key放入切片,对切片进行排序,遍历切片,通过key取值

2020-09-17 21:26:56 13448 4

原创 golang select

golang 的 select 就是监听 IO 操作, 当 IO 操作发生时,触发相应的动作 每个case语句里必须是一个IO操作, 确切的说,应该是一个面向channel的IO操作

2020-09-16 23:24:13 13143 3

原创 go defer

判断打印顺序func b() { for i := 0; i < 4; i++ { defer fmt.Print(i) }}先进后出,后进先出

2020-09-16 22:28:03 10741 4

原创 Channel的几种状态

Channel是异步进行的。 channel存在3种状态: nil,未初始化的状态,只进行了声明,或者手动赋值为nil active,正常的channel,可读或者可写 closed,已关闭,千万不要误认为关闭channel后,channel的值是nil...

2020-09-16 22:22:51 54909 4

原创 为啥channel能做到线程安全

Golang的Channel,发送一个数据到Channel 和 从Channel接收一个数据 都是 原子性的。 而且Go的设计思想就是:不要通过共享内存来通信,而是通过通信来共享内存,前者就是传统的加锁,后者就是Channel。 也就是说,设计Channel的主要目的就是在多任务间传递数据的,这当然是安全的...

2020-09-16 22:21:00 13945 8

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除