RegularNotes icon indicating copy to clipboard operation
RegularNotes copied to clipboard

记录cpp知识点,面试题,网络编程,多线程编程

RegularNotes 🔥

C➕➕

✨✨👀最近在研究golang了,已经转到go_learning,喜欢基础文章的的小伙伴可以跟我多提issue跟我交流,有空就会更新。

数据结构与算法

记录常用数据结构,包括快速排序,冒泡排序,插入排序,图,树等数据结构以及剑指offer部分题目

线性表结构
  • 栈的实现,顺序栈,支持动态扩容(模版实现)
  • 队列实现,循环队列的实现,动态扩容的支持(模版实现)
  • 单链表,头插法与尾插法,链表反转,增删查改,检测回文字符,快慢指针获取链表中间节点
经典排序
  • 冒泡排序与插入排序,同样是O(n^2),我选择插入
  • 归并与快速查询O(nlogn)如何在O(n)找到第k大元素?
  • 线性排序,计数排序,桶排序,对数据的要求更加严格,寻找最大值K

查找

  • 二分查找,快速查找,O(logn)的查找速度,寻找旋转数组最小数字
  • 为什么redis底层使用跳表来实现
  • Word单词拼写检查功能如何实现,如何散列表与链表一同使用

非线性结构

  • 二叉树,构树,二叉查找树?什么样的二叉树适合用数组存储
  • 堆,为什么说堆排序没有快速排序快?持续堆化的完全二叉树
  • 堆的应用,如何查找topk的搜索关键词
  • 图,如何存储微博,微信等社交网络好友关系?散列表与链表的存储结构,邻接表
  • 图的广度优先遍历与深度优先遍历,广度优先,存储三个关系,深度优先,压栈关系
  • Trie🌲,如何实现搜索引擎的搜索关键词提示功能呢?和散列表以及红黑树比较又有什么优缺点?

字符串匹配 凹凸

  • BM算法,如何实现文本编辑器中的查找功能
  • 借助BM算法轻松理解KMP算法

算法思想

  • 贪心,如何用贪心算法实现哈夫曼编码,讲究贪心策略,我一开始只要最好的,实例,剪绳子问题
  • 分治,分而治之,分的策略以及合并的策略,求逆序度
  • 回溯,蝴蝶效应,回到原点,8皇后的争锋相对
  • 暴力回溯解决杨辉三角最短路径问题,动态规划解决重复问题
  • 动态规划,存储的是一个状态或者一个价值
动态规划,每日一练
  • 硬币只有1,3,5,选择最少硬币

高级算法篇

算法高级篇 并发处理算法

思想:先正确再优化!

leetcode刷一刷

  • twoSum提供两种解法,分别是时间换空间与空间换时间
  • addTwoNumbers其实这个有个类比的string写法,有机会要将这个整个写法重新修改,但是确实是用时最少
  • reverseInt其实就是分析是否溢出,通过余数分析与整数得到的结果分析
  • 判断回文整数,最简单的做法,求余最快
  • rommantoInt,倒过来就好了
  • longestCommonPrefix计数
  • mergeTwoSortList眼界真的要开阔一点,递归的做法之前一直用循环做,傻不傻
  • Subtree of Another Tree 不行就左,不行就右,递归是一个好解法
  • symetric树的对称,分两个树
  • Binary_preorder_traversal前序遍历循坏,仿栈
  • Binary_inorder_traversal好吧,受到了前序遍历的干扰,其实就是遍历完左边,然后再看右边
  • ValidParenthess判断有效,map先构造,而后再实现栈匹配
  • RemoveDuplicate去重,快慢指针做,做完就数据搬移
  • MergeTwoSortedArray其实就是归并的设计,只不过最后将申请的空间都浓缩到nums1中,尝试直接在最后赋值,关键就是边界条件
  • Maxi_SubArray最长最大的数组子串,一个一个加,两个Sum比对
  • BinaryTreeTravel两个队列实现遍历
  • Binary_zigzag_travel两个栈实现之字形遍历
  • longestSubstring尝试获取i到j的最大长度,用哈希的思维计算
  • sqrt(x)求平方,牛顿迭代公式,求K值斜率求得result
  • 二分查找从一个有序数组构建一颗平衡二叉树,中序遍历的思想
  • 插入排序的思想,超级简单searchInsertPosition
  • 进行add-binary,只是排除一下情况,然后加个flag
  • 很巧妙的后序遍历以及计算两个子树的深度差大于1,这个要多看!

剑指offer 📃✅

基础知识
  • 大数相加,可以思考一下大数相乘计算
  • 从外到内打印矩阵,两种解法,对比,佩服剑指
  • 数组中,找出其他数都出现两次的数组中只出现一次的数
  • 解耦,函数指针,让代码可持续重用

Cpp程序设计知识点集合

重读cpp Primer,并且将代码实现的过程

  • 拷贝构造函数。类值与类指针行为
  • 读写流
  • iostream与ostream文件读写流
  • 关于文件读写
  • allocator的使用,一块申请到的内存,怎么去使用
  • new与delete,枚举与智能指针的实现
  • 基本关联容器map与pair使用
  • 容器,顺序容器使用
  • 动态内存管理
  • 泛型算法结合可调用对象的使用
  • 面向对象程序设计public继承
  • 运算符重载(没写完呐)
  • 私有继承,继承实现
  • 完美赋值运算符重载
  • 我只是抄一下screen的实现
  • 封装数据成员private
  • 右值引用,参考四行代码带你理解右值引用
  • 发现好文const还有续命内存机制-(int *const&p=&a)

Cpp面试题精讲㊙️

主要收集各大面试题,并且写出了自己的理解。

  • 结构体和共同体的区别struct和union
  • static和const分别怎么用,类里面的static和const可以同时修饰成员函数吗?
  • 指针和引用区别,引用可以用常指针实现吗?
  • 什么是智能指针?为什么要用智能指针?如何打破循环引用的问题?实现一个智能指针呗!对于资源管理有什么作用?
  • 什么是可调用对象?了解lambda表达式吗?function又是怎么回事?
  • 什么是多态,多态有什么用途。(虚函数)
  • 水文-C调用C++
  • C++面试考点陈列
  • C++面试题杂谈,字节对齐-vector-list-allocator-红黑树
  • C++面试题杂谈,红黑树与B树,声明与定义,malloc匹配与一致性哈希
  • C++面试题杂谈,TCP,慢启动,流量控制,301与302,poll与epoll

Cpp Primer与TCPL部分

对Cpp Primer的学习笔记以及部分实现。以及研读Effective C++55 items

  • 关于深拷贝与浅拷贝,知道多少?
  • 虚析构函数的用法--体验一下继承--构造
  • 相依于声明式,不相依于定义式,继承关系的is-a
  • 强制左侧运算对象是一个左值,面向对象编程
  • 标准库部分
  • 结构体struct的使用
  • 模版编程
  • C++primer变量与基本类型&字符串、向量和数组
  • C++表达式&语句&函数&类
  • IO库与顺序容器
  • Cpp范型算法,关联容器以及动态内存
  • 面向对象程序设计
  • 运算符重载与类型转换
  • 拷贝控制,了解cpp默默为你创建的四个函数
  • 模版与泛型编程(这篇偷懒,😠,可怕,估计是feed up)
  • 杂项

CSS

尝试读了一篇博文叫flexbox,了解css

  • FlexBoxp-完全指南,图片兼容浏览器size

设计模式与部分实现CPP

设计模式精讲以及理解

  • 工厂模式,抽象工厂模式
  • 命令模式-将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化
  • 装饰模式-主要靠包装-动态地给一个对象添加一些额外的职责
  • 代理模式-找人帮忙打游戏,打着打着给你送金币
  • 单例模式-我就是我,不一样的烟火,限量版的我
  • 模版方法-我有一套模版,一套有一套
  • 设计模式之禅-遵循六大,可以到处溜达
  • 创建类型模式-单例、原型、工厂方法、抽象工厂、建造模式
  • 结构类型模式-适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式和代理模式

JavaScript 学习笔记与部分实现

工作的时候用到了js,做了一些笔记,希望以后查询的时候可以用得上

  • 红宝书,读一读
  • 好文好读,async/await,解决回调
  • Es6_7_8学习指南,只是简单了解一下新特性
  • 闭包与高阶函数
  • 面向对象的js,居然!有设计模式

Nodejs 深入浅出笔记

主要参考nodejs深入浅出的书

  • Node简介,特点,模块,异步,学习笔记
  • 理解Buffer,深入理解buffer缓存机制
  • v8内核初识,内存控制
  • Node网络编程,引入tcp与http模块
  • 玩转进程,node也能新建进程,基于多核CPU

Python 工作笔记

学了一天的python,实现了一下excel的简单读取

  • 一个python读取excel的简单demo

TCP/IP协议簇 ⛓️

参考tcp/ip详解与图解tcp/ip以及刘超老师的课程,尝试网络编程实现

  • mac层与链路层以及ip网际层,网络上跑的包都是完整的,不能有上层没下层,可以有下层没上层
  • TCP与UDP区别详述,以及网络编程部分
  • HTTP状态码与首部字段解读,应用层的世界,从来都不简单
  • HTTP缓存机制,渣男需要被负责
  • HTTP2.0我受够了等待
  • HTTPS-为了安全🔐,我愿意带上套
  • Google-QUIC官宣HTTP/3.0-QUIC协议"城会玩" UDP也是我的主场
  • DNS->HTTPDNS,网络的负载均衡手段
  • CDN,京东建仓策略,就近配送

unix 环境高级编程 APUE巨著 😱

apue巨著,每天读一个小时,理解并深入每个知识点,对进程与多线程多一点了解。

  • UNIX标准及实现
  • 标准IO库
  • 文件和目录
  • 系统文件信息亚数据
  • 进程环境
  • 进程控制fork、wait、exec
  • 进程关系(会话,进程组,进程)与守护进程(setsid)
  • 信号,进程与线程异步的思想
  • 线程,就是一个正在运行的函数
  • 线程控制,根据线程的属性,pthread_kill
  • 高级IO,非阻塞IO,epoll、select、poll通知
  • 进程间通信,管道,socket,XSI(System V)
  • 终篇-网络通信IPC,socket,协议决定通信

现代操作系统

开始学习操作系统的知识,分为进程与线程,内存管理,文件系统,输入输出,死锁。不会看书,只会不断查博客,然后做知识总结。

  • 进程与线程,很抽象
  • 信号量,条件变量,互斥锁以及读写锁🔒,保证线程顺序执行的方法
  • 进程与线程调度,因环境而已,离不开抢占
  • 内存管理,分页还是分段,看你的笔记本怎么写
  • 死锁,先发制人还是后发制人?银行家有经验

攻克linux系统编程

  • 深入程序布局内部,增强应用控制能力
  • 理解进程内存排布,掌握程序动态
  • 理解线程实现,达成高效率和低复杂度
  • 探究进程间通信技术,优化数据传输效率
  • 解析共享库工作机理,灵活组织大型项目
  • 理解文件系统设计思想,站在巨人肩上
  • 掌握信号处理,稳健处理信号中断和异常
  • 理解时钟与定时器,电子世界中的脉动
  • 理解系统安全,保护你重要的资产
  • 线程同步,让复杂的工作流协调有序
  • 活用内存映射与虚拟内存,让应用更高效

🐂牛客网刷题 错题集

  • 基础语言题C/Cpp
  • 基础语言题C/Cpp
  • 基础语言题C/Cpp
  • 基础语言题C/Cpp
  • 基础语言题C/Cpp
  • Linux基础
  • Linux基础