- 博客(165)
- 收藏
- 关注
原创 一文了解Python数据结构
本文将详细介绍 Python 的六大数据结构,包括数值、字符串、列表、元组、集合、字典等。阅读本文预计需要 15 min。Python入门之Python数据结构全文框架数值字符串创建字符串下标和切片字符串的常用操作list-列表创建列表增加列表元素删除列表元素修改列表元素值查询列表元素列表的排序tuple-元组set-集合dict-字典创建字典增加字典元素删除字典元素修改字典元素查询字典元素...
2020-03-29 00:06:12
1755
原创 一文了解Python基础知识
本文主要介绍 Python 入门的基础知识,包括 Python 学习路径和心得、输入输出、注释、变量、数据类型、运算符、格式化输出等。阅读本文预计需要 15 min。Python入门之Python基础知识全文框架Python 简介Python 学习路径和心得Python 输入输出Python 注释Python 变量变量命名硬性规则常用变量命名方式Python 数据类型Python 常见数据类...
2020-03-27 23:34:08
1255
原创 编程小白安装Python开发环境及PyCharm的基本用法
本文主要记录编程小白如何利用 Anaconda 和 Pycharm 安装 Python 开发环境,以及 Pycharm 的基本用法。预计阅读时间 15min.编程小白安装Python开发环境及Pycharm的基本用法全文框架前言Anaconda 的安装Anaconda 下载安装为 Anaconda 添加环境变量Anaconda 测试Pycharm 的安装Pycharm 的使用开始你的第一个项...
2020-03-25 21:04:00
1364
原创 Day07 郝斌C语言自学视频之C语言的结构体
这篇笔记主要是介绍C语言中的结构体,还涉及补码、算法、链表等。阅读本文预计需要 12 分钟。Day07 郝斌C语言自学视频之C语言的结构体结构体为什么需要结构体什么叫结构体如何去定义结构体怎样使用结构体变量结构体变量和结构体指针作为函数参数传递的问题结构体变量的运算动态构造存放学生信息的结构体数组枚举什么是枚举怎样使用枚举枚举的优缺点其他原码反码移码补码二进制全部为0的含义算法链表位运算符期...
2020-02-29 10:52:12
762
原创 Day06 郝斌C语言自学视频之C语言的指针
这篇笔记主要是介绍C语言中的指针,包括指针的重要性、定义、使用等。阅读本文预计需要 10 分钟。Day06 郝斌C语言自学视频之C语言的指针指针的重要性指针的定义指针的使用基本类型指针如何通过被调函数修改主调函数普通变量的值指针和数组指针变量的运算一个指针变量到底占几个字节【非重点】多级指针动态内存分配【重点难点】传统数组的缺点为什么需要动态分配内存动态分配内存举例——动态数组的构造跨函数使...
2020-02-27 12:42:58
535
原创 Day05 郝斌C语言自学视频之C语言的函数
这篇笔记主要是介绍C语言中的函数,包括函数的功能和定义等。阅读本文预计需要 6 分钟。Day05 郝斌C语言自学视频之C语言的函数为什么需要函数什么是函数函数的分类如何定义使用函数定义函数如何在软件开发中合理的设计函数来解决实际问题变量的作用域和存储方式常用的系统函数后记为什么需要函数函数是C语言的基本单位,类是Java,C#,C++的基本单位。函数是继学习 C 语言流程控制之后的第二个...
2020-02-27 12:41:23
440
原创 Day05 郝斌C语言自学视频之C语言的数组
这篇笔记主要是介绍C语言中的数组,包括一维数组,二维数组和多维数组等。阅读本文预计需要 6 分钟。Day05 郝斌C语言自学视频之C语言的数组数组概述为什么需要数组数组的不足数组的分类一维数组一维数组的定义数组定义的本质有关一维数组的操作二维数组二维数组的定义二维数组的初始化二维数组的操作多维数组后记数组概述为什么需要数组为了解决大量同类型数据的存储问题。为了模拟现实世界。...
2020-02-27 12:39:28
332
原创 Day04 郝斌C语言自学视频之C语言的流程控制
这篇笔记主要是介绍C语言中的第一个重点知识,流程控制,包括顺序、选择、循环等。阅读本文预计需要 30 分钟。Day04 C 语言之流程控制流程控制概述流程控制定义流程控制的分类顺序执行选择执行选择定义选择分类if 的用法if...else...的用法if...else if...else...的用法if 的常见问题解析switch 的用法循环执行循环定义循环分类单个 for 循环的用法多个 ...
2020-02-27 12:30:36
734
原创 Day03 郝斌C语言自学视频之C语言基本输入输出&运算符
这篇笔记主要内容是简单介绍C语言的printf()、scanf()、运算符的知识。阅读本文大概需要 5 分钟。Day03 C语言基本输入输出&运算符1. 基本的输出函数printf()1.1 printf()四种用法:1.2 为什么需要输出控制符?2. 基本的输入函数scanf()2.1 scanf()基本用法2.2 如何使用scanf编写出高质量代码3. 运算符3.1 算术运算符3...
2020-02-27 12:28:14
578
原创 Day02 郝斌C语言自学视频之C语言编程预备知识
这篇笔记主要内容是简单介绍一些基本的计算机知识,包括基本硬件、数据类型、进制等。阅读本文大概需要 5 分钟。Day02 C语言编程预备知识1. CPU、内存条、硬盘、显卡、主板、显示器之间的关系2. HelloWorld是程序如何运行起来的3. 什么是数据类型3.1 基本类型数据整数浮点数(实数)字符3.2 复合类型数据4. 什么是变量5. CPU、内存条、操作系统之间的关系6. 变量为什么...
2020-02-27 12:25:49
1878
原创 Day01 郝斌C语言自学视频之 C 语言概述
这篇笔记主要内容是C语言概述,包括C语言特点、应用领域、学习方法等。阅读本文大概需要 5 分钟。1. 为什么学习C语言1.1 C语言的起源和发展机器语言–>汇编语言–>结构化语言–>面向对象语言。编程语言的发展是不断抽象,不断跟人类习惯相适应的过程。1.2 C语言的特点【优点】代码量小;速度快;功能强大。【缺点】危险性高;开发周期比较长;可移植...
2020-02-27 12:22:12
695
原创 C 语言和 Python 在取余操作上的异同
这篇文章主要介绍 C 语言和 Python 在取余操作上的异同。阅读本文预计需要 6 分钟。C 语言和 Python 在取余操作上的异同前言C 语言和 Python 中的取余算法向 0 取整 VS 向负无穷取整C 语言中的除法和取余测试Python 中的除法和取余测试小结后记参考资料前言最近在重新学习 C 语言时,发现C语言和 Python 在涉及负数%取余运算时,结果有所不同,意识到自...
2020-02-20 23:04:32
1363
2
原创 解决VMware虚拟机中CentOS 7 报错ping: www.xxx.com: Name or service not known
解决VMware虚拟机中CentOS 7 报错ping: www.xxx.com: Name or service not known1. 前言2. 问题描述3. 问题排查与解决3.1 检查网络连接设置3.2 检查网关问题3.3 VMware虚拟机网络配置有问题4. 参考文章1. 前言本来这篇文章不准备写出来了,因为网上关于这个报错的文章非常多。但是今天自己遇到了一种网上没有找到的情况,因而写...
2019-12-25 22:29:18
4504
原创 Windows10下利用Visual Studio Code搭建C语言开发环境
Windows10下利用Visual Studio Code搭建C语言开发环境1. 前言2. 下载安装VSCode以及MinGW2.1 下载安装VSCode2.2 下载安装MinGW-w643. 添加VSCode的C语言开发插件4. 配置C语言开发环境4.1 配置c_cpp_properties.json4.2 配置launch.json文件4.3 配置tasks.json文件5. 测试C语言开发...
2019-12-21 20:58:22
16139
4
原创 浅谈Linux软硬链接的联系和区别
浅谈Linux软硬链接的联系和区别1. 前言2. Linux文件系统中的文件、inode、文件名和目录3. 什么是硬链接和软链接?4. 建立软硬链接语法5. 软硬链接的区别和联系6. 软硬链接的作用及应用场景6.1 硬链接的作用6.2 软链接的作用7. 小结7.1 硬链接特性7.2 软链接特性8. 参考文献1. 前言前天因为在centOS7在命令行使用vim命令报错bash: vim: com...
2019-11-26 00:49:09
911
原创 《程序是怎样跑起来的》学习笔记
《程序是怎样跑起来的》学习笔记前言1. 对程序员来说CPU是什么1.1. CPU的内部结构解析1.2. CPU是寄存器的集合体1.3. 决定程序流程的程序计数器1.4. 条件分支和循环机制1.5. 函数的调用机制1.6. 通过地址和索引实现数组1.7. CPU的处理方式其实很简单2. 数据是二进制数表示的2.1. 用二进制数表示计算机信息的原因2.2. 什么是二进制数2.3. 移位运算和乘除运算的...
2019-11-21 21:37:55
1578
原创 《计算机是怎样跑起来的》学习笔记
一、前言《计算机是怎样跑起来的》是日本作者矢泽久雄的著作。这本书我已经是第3遍看了,每次看都会有些不同的感受。这本书浅显易懂,涉及计算机的底层、内存、CPU、汇编、编程语言、网络、数据库等方面,是一本用于科普的好书。每次看,对某一些章节会有新的体会。故记录下来,以后有新的感受再补充进来。1 计算机的三大原则计算机是执行输入、运算、输出的机器关注输入、计算和输出过程程序是指令和数据的集合...
2019-11-06 22:50:28
1683
原创 【21】 二叉查找树——红黑树
21 二叉查找树——红黑树1. 二叉查找树(Binary Search Tree)2. 有了如此高效的散列表,为什么还需要二叉树?3. 平衡二叉查找树4. 如何定义一棵“红黑树”?5. 为什么说红黑树是“近似平衡”的?6. 思考7. 参考资料8. 声明1. 二叉查找树(Binary Search Tree)概念二叉查找树是二叉树中最常用的一种类型,也叫二叉搜索树。顾名思义,二叉查找树是为了...
2019-10-07 22:08:04
444
原创 【19】 二叉树基础(上):什么样的二叉树适合用数组来存储?
19 二叉树基础(上):什么样的二叉树适合用数组来存储?1. 树的基本概念2. 二叉树的定义3. 二叉树的分类4. 二叉树的存储(或者表示)5. 二叉树的遍历6. 思考7. 参考资料8. 声明1. 树的基本概念节点:树中的每个元素称为节点父子关系:相邻两节点的连线,称为父子关系根节点:没有父节点的节点叶子节点:没有子节点的节点父节点:指向子节点的节点子节点:被父节点指向的节点兄弟...
2019-10-07 19:48:38
503
原创 【18】哈希算法
18 哈希算法1. 什么是哈希算法?2. 哈希算法的常见应用有哪些?3. 思考4. 参考资料5. 声明1. 什么是哈希算法?定义将任意长度的二进制值串映射成固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。如何设计一个优秀的哈希算法?1)单向哈希:从哈希值不能反向推导出哈希值(所以哈希算法也叫单向哈希算法)。2)篡改无效:对输入敏...
2019-10-07 18:56:24
1434
原创 【17】散列表(下):为什么散列表和链表经常会一起使用?
17 散列表(下):为什么散列表和链表经常会一起使用?1. 为什么散列表和链表经常放在一起使用?2. 散列表和链表如何组合起来使用的案例3. 课后思考4. 小结5. 参考资料6. 声明1. 为什么散列表和链表经常放在一起使用?散列表的优点:支持高效的数据插入、删除和查找操作散列表的缺点:不支持快速顺序遍历散列表中的数据如何按照顺序快速遍历散列表的数据?只能将数据转移到数组,然后排序,最后...
2019-10-07 16:41:04
649
原创 【16】 散列表(中):如何打造一个工业级水平的散列表?
16 散列表(中):如何打造一个工业级水平的散列表?1. 如何设计散列函数?2. 装载因子过大怎么办?(如何根据装载因子动态扩容?)3. 如何选择散列冲突解决方法?4. 如何设计一个工业级的散列函数?5. 思考6. 参考资料7. 声明1. 如何设计散列函数?散列函数的设计不能太复杂,太复杂会消耗更多时间,也会影响到散列表的性能。散列函数生成的值要尽可能随机并且均匀分布,尽可能减少散列冲突,...
2019-10-07 16:00:42
443
原创 【15】 散列表(上):Word文档中的单词拼写检查功能是如何实现的?
15 散列表(上):Word文档中的单词拼写检查功能是如何实现的?1. 散列表的由来?2. 如何设计散列函数?3. 散列冲突的解放方法?4. 思考5. 参考资料6. 声明1. 散列表的由来?散列表来源于数组,它借助散列函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性。需要存储在散列表中的数据我们称为键,将键转化为数组下标的方法称为散列函数,散列函数的计算结果称为散...
2019-10-07 14:20:34
627
原创 【14】 跳表:为什么Redis一定要用跳表来实现有序集合?
14 跳表:为什么Redis一定要用跳表来实现有序集合?1. 什么是跳表?2. 跳表的时间复杂度?3. 跳表的空间复杂度及如何优化?4. 高效的动态插入和删除?5. 跳表索引动态更新?6. 思考7. 参考资料8. 声明1. 什么是跳表?为一个值有序的链表建立多级索引,比如每2个节点提取一个节点到上一级,我们把抽出来的那一级叫做索引或索引层。对于节点数为n的链表,大约可以建立log2n - 1级...
2019-10-07 10:51:24
423
原创 【13】 二分查找(下):如何快速定位IP对应的省份地址?
13 二分查找(下):如何快速定位IP对应的省份地址?1. 四种常见的二分查找变形问题1.1. 查找第一个值等于给定值的元素1.2. 查找最后一个值等于给定值的元素1.3. 查找第一个大于等于给定值的元素1.4. 查找最后一个小于等于给定值的元素2. 适用性分析3. 思考4. 参考资料5. 声明1. 四种常见的二分查找变形问题1.1. 查找第一个值等于给定值的元素代码实现//方法一pub...
2019-10-07 09:58:46
906
原创 【12】 二分查找(上):如何用最省内存的方式实现快速查找功能?
12 二分查找(上):如何用最省内存的方式实现快速查找功能?1. 二分查找概念2. 时间复杂度分析3. 如何实现二分查找?3.1. 循环实现3.2. 递归实现4. 使用条件(应用场景的局限性)5. 思考6. 参考资料7. 声明1. 二分查找概念二分查找针对的是一个有序的数据集合,每次通过跟区间中间的元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为0。2. 时间复...
2019-10-07 00:25:54
350
原创 【11】 排序优化:如何实现一个通用的、高性能的排序函数?
11 排序优化:如何实现一个通用的、高性能的排序函数?1. 如何选择合适的排序算法?2. 如何优化快速排序?3. 通用排序函数实现技巧4. 思考5. 参考资料6. 声明1. 如何选择合适的排序算法?排序算法一览表排序算法时间复杂度是否稳定排序是否原地排序冒泡排序O(n^2)是是插入排序O(n^2)是是选择排序O(n^2)否是快速...
2019-10-06 23:21:15
574
原创 【10】 线性排序:如何根据年龄给100万用户数据排序?
【10】 线性排序:如何根据年龄给100万用户数据排序?1. 线性排序算法介绍2. 桶排序(Bucket sort)3. 计数排序(Counting sort)4. 基数排序(Radix sort)5. 思考6. 参考资料7. 声明1. 线性排序算法介绍线性排序算法包括桶排序、计数排序、基数排序。线性排序算法的时间复杂度为O(n)。此3种排序算法都不涉及元素之间的比较操作,是非基于比较的...
2019-10-06 22:20:02
761
原创 【09】排序(下):如何用快排思想在O(n)内查找第K大元素?
09 排序(下):如何用快排思想在O(n)内查找第K大元素?1. 分治思想2. 归并排序3. 快速排序4. 归并排序与快速排序的区别5. 思考6. 参考资料7. 声明1. 分治思想分治思想:分治,顾明思意,就是分而治之,将一个大问题分解成小的子问题来解决,小的子问题解决了,大问题也就解决了。分治与递归的区别:分治算法一般都用递归来实现的。分治是一种解决问题的处理思想,递归是一种编程技巧。...
2019-10-06 20:04:09
500
原创 【08】排序(上):为什么插入排序比冒泡排序更受欢迎?
08排序(上):为什么插入排序比冒泡排序更受欢迎?1. 排序方法与复杂度归类2. 如何分析一个“排序算法”?3. 冒泡排序3.1. 排序原理3.2. 代码实现(Python)3.3. 性能分析4. 有序度&无序度&满有序度5. 插入排序5.1. 插入排序原理5.2. 代码实现5.3. 性能分析6. 选择排序6.1. 选择排序原理6.2 代码实现6.3 选择排序性能分析7. 思考8....
2019-10-06 12:17:44
2148
1
原创 Python查看某个模块or方法的使用方法
Python查看某个模块or方法的使用方法1. dir()方法2. help()方法查看3. random.\__file__4. ?function5. 官网6. github源代码1. dir()方法dir(module or function_name)import randomdir(random)2. help()方法查看import randomhelp(random)...
2019-09-24 22:45:34
1520
原创 Python实现十进制和二进制、八进制、十六进制的相互转换
Python实现十进制和二进制、八进制、十六进制的相互转换1. 前言2. 实现思想2.1 十进制转换为其他进制2.2 其他进制转换为十进制3. 参考资料1. 前言此文方便后期的复习,如果有问题,欢迎批评指正。2. 实现思想2.1 十进制转换为其他进制原理:除以进制数(base)取余,逆序输出。举例:将16转换为2进制形式16除以2取余,得到余数0,存入结果(这个是最低位,将16/...
2019-09-24 22:43:08
3951
原创 【07】递归:如何用三行代码找到“最终推荐人”?
07 递归:如何用三行代码找到“最终推荐人”?1. 什么是递归?2. 为什么使用递归?递归的优缺点?3. 什么样的问题可以用递归解决呢?4. 如何实现递归?5. 递归常见问题及解决方案6. 如何将递归改写为非递归代码?7. 如何找到“最终推荐人”?8. 【思考】我们平时调试代码喜欢使用 IDE 的单步跟踪功能,像规模比较大、递归层次很深的递归代码,几乎无法使用这种调试方式。对于递归代码,你有什么好...
2019-09-12 23:17:47
468
原创 【06】队列:队列在线程池等有限资源池中的应用
【06】队列:队列在线程池等有限资源池中的应用1. 什么是队列(queue)?2. 如何实现队列?2.1 队列API2.2 数组实现(顺序队列):2.3 链表实现(链式队列):2.4 循环队列(基于数组):3. 队列有哪些常见的应用?4. 思考5. 参考资料6. 声明1. 什么是队列(queue)?先进者先出,这就是典型的“队列”结构。支持两个操作:入队enqueue(),放一个数据...
2019-09-07 22:37:55
359
原创 【05】栈:如何实现浏览器的前进和后退功能?
【05】栈:如何实现浏览器的前进和后退功能?1. 什么是栈?2. 为什么需要栈?3. 如何实现栈?4. 栈的应用5. 思考6. LeetCode练习题7. 参考资料8. 声明1. 什么是栈?典型的“栈”结构:后进者先出,先进者后出。从栈的操作特性来看,是一种“操作受限”的线性表,只允许在一端插入和删除数据,只支持入栈和出栈操作。2. 为什么需要栈?栈是一种操作受限的数据结构,其操作...
2019-09-07 20:26:21
331
原创 【04】 链表下:如何轻松写出正确的链表代码?
【04】 链表下:如何轻松写出正确的链表代码?1. 理解指针或引用的含义2. 警惕指针丢失和内存泄漏(单链表)3. 利用“哨兵”简化实现难度4. 重点留意边界条件处理5. 举例画图,辅助思考6. 多写多练,没有捷径7. 一些经验8. LeetCode练习题9. 参考资料10. 声明1. 理解指针或引用的含义含义:将某个变量(对象)赋值给指针(引用),实际上就是就是将这个变量(对象)的地址赋值...
2019-09-07 19:27:37
191
原创 【04】 链表上
【04】 链表上1. 什么是链表?2. 为什么使用链表?即链表的特点3.1 单链表3.2 循环链表3.3 双向链表3.4 双向循环链表4. 选择数组还是链表?5. 如何分别用链表和数组实现LRU缓冲淘汰策略?6 如何通过单链表实现“判断某个字符串是否为水仙花字符串”?(比如 上海自来水来自海上)7 设计思想8. 参考资料9. 声明1. 什么是链表?和数组一样,链表也是一种线性表。从内存结构...
2019-09-06 23:00:54
178
原创 【03】数组
【03】数组1. 什么是数组?2. 什么是线性表(Linear List)?3. 什么是非线性表?4. 为什么很多编程语言的数组都是从0开始编号的?5. 连续的内存空间和相同类型的数据的优缺点6. 数组怎么根据下标随机访问的?7. 为何数组插入和删除低效?7.1 数组插入7.2 数组删除8. 数组访问越界问题9. 数组和链表的面试纠错?10. 容器是否完全替代数组?11. JVM标记清除算法?12...
2019-09-03 00:34:22
190
原创 【02】基本算法思想
【02】基本算法思想1. 贪心算法2. 分治算法3. 动态规划4. 回溯算法5. 枚举算法6. 需要掌握的十大数据结构和算法7. 参考资料8. 声明1. 贪心算法贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须...
2019-09-03 00:32:45
237
原创 【01】复杂度分析
【01】复杂度分析1. 什么是复杂度分析?2. 为什么要进行复杂度分析?3. 如何进行复杂度分析?3.1 大O表示法3.1.1 来源3.1.2 特点3.2. 复杂度分析法则4. 常用的复杂度级别?5. 如何掌握好复杂度分析方法?6. 复杂度分析的4个概念7. 为什么要引入这4个概念?8. 如何分析平均、均摊时间复杂度?8.1 平均时间复杂度8.2 均摊时间复杂度9. 参考资料10. 声明1. 什...
2019-09-03 00:26:28
531
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅