读前必读
关于我(作者)
关于这本书
阅读顺序
代码实现
在线阅读Github
学算法(经验分享)
作为一个小白,算法该如何学习?
切勿盲目刷题:刷题前的知识积累
AC不是目的,我们要追求完美
挑战自己,跳出舒适区
一定要学会分类总结
推荐一些刷题网站
学习一些解题技巧
再说数据结构发重要性
最最重要
总结一下吧
程序员必须掌握的算法有哪些?
一、算法最最基础
二、基础数据结构
三、各种常见算法
总结
leetcode 刷 500 题笔试稳吗?
一、先说说笔试题
二、应该如何刷题?如何学习?
1、分类归纳/总结
2、多思考/动手,提高自己的思维完整性/灵敏性
三、我看过的一些资料
四、总结
学递归
为什么你学不会递归?告别递归,谈谈我的一些经验
递归的三大要素
案例1:斐波那契数列
案例2:小青蛙跳台阶
案例3:反转单链表。
有关递归的一些优化思路
最后总结
递归训练1:在两个长度相等的排序数组中找到上中位数
【题目】
【举例】
【难度】
解答
递归训练2:求两个有序数组的第K小数
【题目】
【举例】
【难度】
解答
递归训练3:求两个有序数组的中位数(论思维转换的重要性)
【题目】
【举例】
【难度】
解答
学动态规划
动态规划很难?DP连刷 40 道题,我总结出了这些套路!
一、动态规划的三大步骤
二、案例详解
案例一、简单的一维 DP
案例二:二维数组的 DP
问题描述
步骤一、定义数组元素的含义
步骤二:找出关系数组元素间的关系式
步骤三、找出初始值
撸代码
案例三、二维数组 DP
问题描述
步骤一、定义数组元素的含义
步骤二:找出关系数组元素间的关系式
步骤三、找出初始值
代码如下
案例 4:编辑距离
步骤一、定义数组元素的含义
步骤二:找出关系数组元素间的关系式
步骤三、找出初始值
代码如下
三、总结
动态规划该如何优化?
优化核心:画图!画图!画图
O(n*m) 空间复杂度优化成 O(n)
案例1:最多路径数
问题描述
案例2:编辑距离
总结
动规训练1:详解三道一维的动态规划算法题
例1: 打家劫舍
例2:最大子段和
例3:找零钱
总结
动规训练2:详解 leetcode 221题:最大正方形
题目描述
解法一:暴力法
解法二:动态规划
解法三:动态规划优化
额外话
学二分查找
二分查找你确定真的会?生活中还能用来设计骗局?
一道简单的算法题
神速的二分查找
二分查找的本质
90% 的人都会犯的错误
二分查找在生活中的骗局
二分查找?没有你想的那么简单
总结
二分应用:两道看似简单的算法题
1、求 x 的 n 次方
2、搜索旋转排序数组
最后
二分法题型小结
一、搜索和目标值相等的数
二、 查找第一个不小于目标值的数
三、查找第一个大于目标值的数
总结
再现校招算法面试(亲身体验)
记一道字节跳动的算法面试题:变形的链表反转
题目
解答
先做一道类似的反转题
回到本题
总结
记一次手撕算法面试:字节跳动的面试官把我四连击了
一、小牛试刀:有效括号
二、优化
三、最长有效括号
4、最后一击
总结
记一道阿里笔试题:我是如何用一行代码解决约瑟夫环问题的
1、方法一:数组
2、方法二:环形链表
方法三:递归
总结
记一次阿里面试:面试挂在了 LRU 缓存算法设计上
题目描述
基础版:单链表来解决
空间换时间
双向链表+哈希表
【被虐了】记一次shopee算法面试题:最小栈的最优解
解答
一、时间 O(1) + 空间 O(n)
二、被怼
三、最优解
四、总结
前缀和的应用,从一道网易笔试题说起
问题描述
解答
前缀和
【面试被虐】说说游戏中的敏感词过滤是如何实现的?
面试官开怼
trie 树
trie 树来实现敏感词过滤
复杂度分析
总结
只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数
20亿级别
40亿级别
80亿级别
总结
学字符串匹配算法
图解字符串匹配KMP算法
前言
二、图解KMP算法
三、部分匹配值
四、几点说明
图解字符串匹配Boyer-Moore算法:文本编辑器中的查找功能是如何实现的?
坏字符
好后缀
选择坏字符的规则还是好后缀?
总结
搞定二叉树
二叉树的先序遍历(非递归版)
【题目】
【难度】
解答
二叉树的中序遍历(非递归版)
【题目】
【难度】
解答
二叉树的后序遍历(非递归版)
【题目】
【难度】
解答
从上往下打印二叉树
【题目】
【难度】
解答
二叉树的构建
前序 + 中序
后序+中序
二叉树的镜像
题目描述
解答思路
二叉树的子结构
题目描述
解答思路
二叉搜索树的后序遍历序列
【题目】
【难度】
解答
重建二叉树
题目描述
解答思路
搞定链表
训练1:将搜索二叉树转换成双向链表
【题目描述】
【要求】
【难度】
【解答】
训练2:删除单链表的第 K个节点
题目描述
要求
难度
解答
训练3:删除单链表的中间节点
【题目描述】
【要求】
【难度】
【解答】
问题拓展
【题目描述】
【要求】
【难度】
【解答】
训练4:如何优雅着反转单链表
【题目描述】
【要求】
【难度】
【解答】
问题拓展
【题目描述】
【要求】
【难度】
【解答】
训练5:环形单链表约瑟夫问题
【题目描述】
【要求】
【难度】
【解答】
问题拓展
解答
训练6:三种方法带你优雅判断回文链表
【题目描述】
【要求】
【难度】
【解答】
问题拓展
【题目描述】
【要求】
【难度】
【解答】
训练7:将单向链表按某值划分成左边小,中间相等,右边大的形式
【题目描述】
【要求】
【难度】
【解答】
问题拓展
训练8:复制含有随机指针节点的链表
【题目描述】
【要求】
【难度】
【解答】
问题拓展
训练9:将单链表的每K个节点之间逆序
【题目描述】
【要求】
【难度】
【解答】
问题拓展
必学排序算法
【漫画】面试官,求求你不要再问我快速排序了
快速排序
分割操作:单向调整
分割操作:双向调整
时间复杂度
稳定性
【漫画】为什么说O(n)复杂度的基数排序没有快速排序快?
【漫画】外部排序:如果用2GB内存给20亿个整数排序?(其实这也是一个常考面试题)
优化策略
多路归并
置换选择
十大排序,看这篇就够了
说明
术语铺垫
十大排序讲解顺序
一、选择排序
二、插入排序
三、冒泡排序
四、希尔排序
六、归并排序
六、快速排序
七、堆排序
八、计数排序
九、桶排序
十、基数排序
总结
必学算法思维/技巧
【最求极致】我是如何把easy级别的算法题做成hard级别的
案例1:构建乘积数组
案例2:数组中重复的数字
总结
帅地给你总结了这份高频地算法解题技巧,助你更快速着解题!
1、多思考能否使用位运算
1、利用 n & (n - 1)消去 n 最后的一位 1
(1)、判断一个正整数 n 是否为 2 的幂次方
(2)、判断 正整数 n 的二进制表示中有多少个 1
2、异或(^)运算的妙用
案例1:只出现一次是数
2、考虑是否可以使用数组下标
3、考虑能否使用双指针
4、从递归到备忘录到递推或者动态规划
(1).对于可以递归的问题务必考虑是否有重复计算的
(2).考虑自底向上
5、考虑是否可以设置哨兵位来处理临届问题
总结
分享一道解法巧妙的算法题
题目描述
解法一:巧用数组下标
解法二:巧用哈希表
解法三:巧用位运算
问题拓展
总结
阶乘很简单?说实话,这几道阶乘相关面试题你还真不一定懂!
案例一
案例2
案例三
总结
面试官,求求你不要问我这么简单但又刁难的算法题了
案例1
案例 2
案例3
总结
牛逼!一行代码居然能解决这么多曾经困扰我半天的算法题
一、2 的幂次方
二、一行代码搞定经典的约瑟夫环
只出现一次是数
四、n 的阶乘
总结
算法数据结构中有哪些奇技淫巧?
1、用 n & (n - 1)消去 n 最后的一位 1
2、双指针的应用
3、a ^ b ^ b = a 的应用
总结
位运算装逼指南
判断奇偶数
2、交换两个数
3、找出没有重复的数
4、m的n次方
5、找出不大于N的最大的2的幂指数
总结
寻找缺失的整数
问题描述
解答
方法一:采用集合
采用 bitmap
方法3:最终版本
学数据结构
二叉堆是什么鬼?
什么是二叉堆?
插入一个节点。
删除节点。
构建二叉堆
代码实现
堆排序是什么鬼?
用辅助数组来实现堆排序算法
其实无需辅助数组
什么是 AVL 树?
右旋
左旋
例子讲解
总结一下
代码实现
高频面试:什么是B树?为啥文件索引要用B树而不用二叉查找树?
一、面试被怼
二、为啥不用二叉查找树呢?
三、什么是 B 树?
四、小秋的疑惑
五、解决疑惑
总结
腾讯面试题:有了二查找找树、平衡树为啥还需要红黑树?
1、二叉查找树的缺点
2、平衡二叉树
为什么有了平衡树还需要红黑树?
总结
计算机网络
必读!一文读懂一台计算机是如何把数据发送给另一台计算机
前言
1. 物理层
2. 数据链路层
3. 网络层
4. 传输层
5. 应用层
总结
【漫话】两台完全陌生的主机是如何办到『数据的正确交付』的?
情况一:分组出差错时的处理
情况二:分组丢失时的问题处理
回退N步协议(GBN)
选择重传(SR)
最后一点感想
什么是拥塞控制?
一、为何要进行拥塞控制?
二、如何知道网络的拥塞情况?
三、到了瓶颈值之后怎么办?
四、超时事件就一定是网络拥塞?
最后
什么是TCP流量控制
一、为什么需要流量控制?
二、如何控制?
三、发送方何时再继续发送数据?
四、一些术语及其注意点说明
什么是广播路由算法?如何解决广播风暴?
解决方法
广播风暴
控制广播风暴
生成树广播
漫话:什么是 https ?
一、对称加密
二、非对称加密
数字证书登场
什么是数字签名?
案例
电脑的 ip 是怎么来的?
客户端请求 ip
DHCP响应
客户端挑选 ip 地址
几点说明
租期
最后
分组和电路交换有什么区别?
分组
电路交换
分组交换
生活中的通信选择
关于三次握手与四次挥手面试官想考我们什么?
三次握手
四次挥手
写给在校生的经验总结
【核心整理】那些让你起飞的计算机基础知识:学什么,怎么学?
一、计算机网络
二、操作系统
三、数据库(这里我用 MySQL)
四、数据结构与算法
五、汇编
六、编译原理
总结
这是一份适合普通大众的学习路线
一、选择一门语言入门编程的世界
二、数据结构与算法
三、选择一门语言深入学习
四、以Java为主的后端开发学习路线
五、计算机基础的学习
六、总结
学了四年编程,这些优质的学习工具/网站/资料,推荐给你们
一、PDF搜索网站推荐
二、实用工具
三、在线教学视频网站
四、在线非视频学习网站
五、程序员面试/求职网站
六、软件下载
总结
春招两次腾讯面试都挂二面,分享下我失败+傻傻的面试经历
提前批笔试
提前批一面
提前提二面
常规网申一面
想杀了自己的二面
总结
历经两个月的秋招,结束了,谈谈春秋招中一些重要的知识点吧
一、最后去的公司
二、关于我
三、基础 + 算法 + 项目
四、关注我,助你搞懂面试必考点
有必要说一说即将到来的春招(经历+重要性+如何准备)
一、春招面向的群体
二、我当时没啥经验的春招
三、春招投递渠道以及时间
四、春招核心知识准备
总结
讲一讲当时春秋招时做过的项目以及推荐几个项目+面试视频
项目一:高并发秒杀系统
项目二、 问答平台
找项目不难
几个项目推荐
总结
学习MySQL
腾讯面试:一条SQL语句执行得很慢的原因有哪些?
开始装逼:分类讨论
针对偶尔很慢的情况
数据库在刷新脏页我也无奈啊
拿不到锁我能怎么办
针对一直都这么慢的情况
扎心了,没用到索引
呵呵,数据库自己选错索引了
总结
我去,这两个小技巧,让我的SQL语句不仅躲了坑,还提升了 1000 倍
1、允许字段的值为 null,往往会引发灾难
2、尽可能用 union 来代替 or
3、总结
面试小知识:MySQL索引相关
1. 什么是最左前缀原则?
2. 为什么用 B+ 树做索引而不用哈希表做索引?
3. 主键索引和非主键索引有什么区别?
4. 为什么建议使用主键自增的索引?
Git
从 0 学习Git,总结了这份 Git 命令宝典
一、Git 配置相关
Git 最小配置
二、本地基本操作
1、基本操作
2、比较差异
3、暂存区与工作区之间回滚
4、其他
三、加塞临时任务处理
四、修改个人分支历史
五、查看变更日志等
六、分支与标签
1、创建新分支
2、列出分支
3、删除分支
4、打标签
七、两分支之间的集成
八、和远端交互
总结
Java
一句话撸完重量级锁、自旋锁、轻量级锁、偏向锁、悲观、乐观锁等各种锁
重量级锁
自旋锁
自适应自旋锁
轻量级锁
偏向锁
悲观锁和乐观锁
总结
线程安全(上)--彻底搞懂volatile关键字
计算机中为什么会出现线程不安全的问题
Java中的线程安全问题
volatile关键字
可见性
什么是可见性?
volatile保证变量可见性的原理
缓存一致性协议
有序性
volatile真的能完全保证一个变量的线程安全吗?
原子操作
证明volatile无法保证线程安全的例子
什么情况下volatile能够保证线程安全
线程安全(下)--彻底搞懂synchronized(从偏向锁到重量级锁)
锁对象
偏向锁
那么,什么是偏向锁?
锁膨胀
锁撤销
轻量级锁
自旋锁
自旋锁的一些问题
自适应自旋锁
重量级锁
为什么说重量级锁开销大呢
总结
并发的核心:CAS 是什么?Java8是如何优化 CAS 的?
synchronized:大材小用
CAS :这种小事交给我
CAS:谁偷偷更改了我的值
来个版本控制吧
Java8 对 CAS 的优化。
总结
Java并发包中最重要的几个同步类,你敢不学??
1、ReenTrantLock
2、CountDownLatch
3、CyclicBarrier 同步类
4、 semaphore
总结
求求你规范下你的代码风格
1. 类名
2. 包名
3. 变量
4. 空格
5. 控制语句
6. 关于缩进与空格
操作系统
记N次面试:进程之间究竟有哪些通信方式?如何通信?
1、管道
2、消息队列
3、共享内存
4、信号量
5、Socket
总结
个人经历与感想
普普通通,我的三年大学
一、非计算机专业的大一
二、入坑数据结构与算法
三、选择不玩 ACM
四、瞎搞的暑假
五、步入正轨
六、开始有目标着学习
七、微信公众号的开通
八、烂尾
九、最后的最后
写公众号15个月以来,这一路上的学习与收获
一、写公众号的目的
二、困难重重(排版篇)
三、我放弃了
四、重拾笔墨
五、开始真正发育
六、这一年来的收获
最后
玩公众号写文章一年多以来,我经历了被喷被拉黑被赞美,我酸了
一、我在V2EX被怼上网站首页了
二、我在知乎饱受抨击与赞美
三、CSDN 的小伙伴相对友好
四、我在微信经历了多种苦恼
五、我要感谢微信上的这些人
六、最后
我的 2019
工作
运营公众号
挣到了人生的第一个 10 w
总结
我是如何让自己变的更加优秀的
0、多接触优秀的人,真的可以影响你
1、正能量的圈子,真的可以大大的激励你
2、我比以前更加敢于尝试了
3、那么如何找到这样的圈子?
4、想删文的总结
说一说我最近的日常 | 学习 | 思考
专业知识
阅读与写作
英语
总结
看过的优质书籍推荐
计算机基础必看
计算机基础
1、程序是怎样跑起来的
2、网络是怎样连接的
3、计算机是怎样跑起来的
4、计算机网络:自顶向下
5、汇编语言(王爽著)
算法
1、程序员的算法趣题
2、编程之美
3、算法(第四版)
总结
小白成长,大学看过的一些优质书籍
数据结构与算法
计算机基础
MySQL
Java 相关
Java编程思想
Java 并发编程艺术
深入理解 Java 虚拟机
其他
最后
后续
赞赏