Hello World

行走即是圆梦,回望亦是前行。

0%

工作学习总结

前言

这里简单记录下工作学习知识点总结

参考博客–常见问题整理

c++相关知识点

c++相关知识点

进程间通信

  • 管道
  • 命名管道
  • 消息队列
  • 信号
  • 信号量
  • 共享内存
  • socket套接字

线程间通信

  • 锁机制

    互斥锁、读写锁、条件变量

  • 信号量
  • 信号

线程同步

  • 临界区
  • 信号量
  • 互斥量
  • 事件

topK

海量数据

快速排序

退化改进
二分查找

linux五种IO模型

linux五种IO模型

tcp协议

tcp协议

redis常见问题

redis常见问题

堆排序

  • 大顶堆
  • 小顶堆
    应用场景

红黑树

常用容器的底层数据结构和时间复杂度
vector和map的底层实现

数据库

  • 索引
  • 幻读

boost

stl内存管理

  • 一级配置器
  • 二级配置器

其他问题

其他问题1

迭代器种类和作用,左值引用和右值引用区别,二叉树节点怎么找它的层数,lambda怎么用,容器的配接器有什么作用
线程数目是cpu核数
红黑树左旋右旋
数据一致性,数据库写挂了,怎么处理
指针和引用的区别
servlet和socket区别
哈希冲突

其他问题2

深拷贝浅拷贝
设计模式
拷贝构造函数的理解
智能指针
stl的组件(容器 算法 迭代器 仿函数 配接器 适配器)
c++11 thread
多态(virtual怎么实现的多态)

leetcode

五大算法

https://www.jianshu.com/p/4abfd96d91e6
https://www.jianshu.com/p/48a6bdfccff1

  • 递归分治
  • 回溯法
  • 动态规划
  • 贪心算法
  • 分支界限

递归、迭代和动态规划的区别与联系

  • 定义
    递归:程序调用自身,从顶部将问题分解,通过解决所有分解出来的小问题,来解决整个问题。
    迭代:利用变量的原值推算出变量的一个新值。递归中一定有迭代,但迭代中不一定有递归。
    动态规划:通常与递归相反,其从底部开始解决问题,将所有小问题解决掉,进而解决整个问题。
    下面通过斐波那契数列对三者进行对比:

    斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21…
    递归公式:F[n] = F[n-1] + F[n-2] (n >= 3), 递归结束条件:F[1] = 1, F[2] = 1

  • 递归
    自上而下调用函数本身,速度较慢,不推荐。
    要知道第n个数,必须要先知道第n-1和第n-2个数;
    而想要知道第n-1个数,必须要知道第n-2和第n-3个数。
    f(n) = f(n-1) + f(n-2)
    = f(n-2) + f(n-3) + f(n-3) + f(n-4)
    = …

    1
    2
    3
    4
    5
    6
    7
    int Fibonacci(int n) {
    if (n <= 2) {
    return 1;
    }

    return Fibonacci(n - 1) + Fibonacci(n - 2);
    }
  • 迭代
    利用原值去求解下一个值,一般比递归速度更快。
    由第1个数和第2个数去求解第3个数;
    由第2个数和第3个数去求解第4个数;
    以此类推:
    f(3) = f(2) + f(1)
    f(4) = f(3) + f(2)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int Fibonacci(int n) {
    if (n <= 2) {
    return 1;
    }

    int f1 = 1, f2 = 1;
    int res = 0;
    for (int i = 3; i <= 3; ++i) {
    res = f1 + f2;
    f1 = f2;
    f2 = res;
    }
    return res;
    }
  • 动态规划
    动态规划采用空间换时间的方法,速度比迭代更快一些。
    子问题可能需要多次计算,即子问题的重接性质;
    利用额外空间,将子问题的解保存起来,每个子问题只用计算一次,以节省时间。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int Fibonacci(int n) {
    std::vector<int> dp(n);
    dp[1] = 1;
    dp[2] = 1;

    for (int i = 3; i <= n; ++i) {
    dp[i] = dp[i - 1] + dp[i - 2];
    }
    return dp[n];
    }

印象笔记

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
变量的命名规则,运算符优先级,函数,递归,贪心算法,回溯,分治,动态规划(0/1背包),分支限界kmp,最小生成树,最短路径
关键字C/C++区别,动态开辟内存,结构体对齐,权限
指针函数,函数指针,指针数组,数组指针,二维数组传参,最大递增子串,最大公共子串,最大子序列和

const,inline
引用返回&
作用域,字符常量
地址空间


封装,继承(公私保及访问权限),多态
构造函数,友元,重载。
单继承,多继承
虚表,virtual(修饰基类的析构函数), 静态联编动态联编 (早绑定晚绑定),静多态,动多态
模板函数,函数模板,模板类,类模板
隐藏、覆盖、重载(高质量C++编程)
排序,时间复杂度,空间复杂度

链表,栈,队列,二叉树,深浅拷贝/赋值

pdf课件,三次握手,tcp,udp,arp,http,dns,拥塞控制,ip

设计模式(单例模式)