互斥和锁
互斥c++通过std::mutex实现锁机制,确保多线程下只有一个进入临界区 1234#include <mutex>std::mutex mtx;mtx.lock();mtx.unlock(); 当一个函数内需要获取多个锁时,可以采用lock同时加锁,固定加锁的顺序避免死锁 123456789lock(m1, m2);lock_guard<mutex> g1(m1, adopt_lock);lock_guard<mutex> g2(m2, adopt_lock);/*等价于unique_lock<mutex> l1(n1, defer_lock);unique_lock<mutex> l2(n2, defer_lock);lock(m1,m2)*///或者等价于 scoped_lock s1(m1,m2); 层级锁自定义锁添加权重来保证每次加锁顺序和解锁顺序,数值越大权重越高,核心static thread_local unsigned...
C++线程与源码学习
C++线程std::thread创建thread封装线程操作,通过std::tread(func)传入函数指针,创建一个对象并初始化即开启一个线程执行 注意: 这里可以传入成员函数,但必须加& 这里也可以传入仿函数,但是编译器会认为t1是一个函数指针的类型,可以使用{}统一初始化来指出这是一个thread对象 12345678910111213class func {public: void operator()() { std::cout << "这是一个仿函数" << std::endl; }};int main(){ std::thread t1(func()); std::thread t2{func()}; t2.join(); std::cout << typeid(t1).name() << std::endl; std::cout << typeid(t2).name()...
cs144-tcp/ip实现
Lab0:wamup手动联网:通过telnet获取 1234567891011121314151617181920telnet cs144.keithw.org 80 Trying 104.196.238.229...Connected to cs144.keithw.org.Escape character is '^]'.GET /hello HTTP/1.1Host: cs144.keithw.orgConnection: closeHTTP/1.1 200 OKDate: Tue, 12 Nov 2024 05:17:24 GMTServer: ApacheLast-Modified: Thu, 13 Dec 2018 15:45:29 GMTETag: "e-57ce93446cb64"Accept-Ranges: bytesContent-Length: 14Connection: closeContent-Type: text/plainHello, CS144!Connection closed by foreign...
排序
快速排序通过分而治之实现nlog(n)的排序算法 c++实现 12345678910111213141516template<typename T>void quick_sort(vector<T> arr, int start, int end){ if(start >= end) return; T mid = arr[start]; int left = start, right = end; while(left < right) { while(arr[right] >= mid && left < right) --right; while(arr[left] <= mid && left < right) ++left; std::swap(arr[left], arr[right]); } std::swap(arr[left], arr[start]); quick_sort(arr, start,...
动态规划
动态规划 核心:找状态定义和状态转移方程 启发::由回溯选哪个/选或不选切入 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。 1234567891011121314151617181920212223242526272829class Solution {public: int rob(vector<int>& nums) { int n = nums.size(); /* ...
git使用
git基础特点 分布式版本控制系统,直接记录快照(blob对象),而不是保存差异累计 存储项目随时间改变的快照 可靠性和本地执行,本地拥有完整的历史记录 轻量级分支 完整性:存储文件前通过SHA-1计算校验和,确保 几乎只增加数据而不丢失或修改,快照流 状态: 已修改:在工作区修改了文件 已暂存:添加到暂存区 已提交:保存到git仓库 git配置 /etc/gitconfig 文件:包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。 ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。 每一个级别覆盖上一级别的配置 命令: 1234git config --global user.name "Js"git config --global...
网络编程
基础APIsocket地址API字节序CPU的累加器一次至少装在4字节,字节在内存排序即字节序问题 大多PC采用小端:高高低低;大端相反 123456789101112// which endian#include <stdio.h>void byteorder(){ union{ short value; char union_bytes[sizeof(short)]; }test; test.value = 0x0102; if((test.union_bytes[0] == 1) && (test.union_bytes[2]) == 2) printf("big endian\n"); else if((test.union_bytes[0] == 2) && (test.union_bytes[2]) == 1) printf("little endian\n"); else...
操作系统
阻塞与非阻塞,同步与异步 一个进程的五个状态: new running waiting ready terminated 阻塞是指进程发起一个系统调用,由于该系统调用操作不能立即完成,而被内核挂起为等待状态
mysql
Mysql基础Linux安装mysql8.0下载安装包https://downloads.mysql.com/archives/community/ 从官网下载.tar.gz或.rpm包,上传到服务器解压缩 1tar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar 安装rpm包这里是跟着黑马下载的rpm包使用rpm来安装发现rpm包缺少公钥并且明明安装openssl库却显示缺少库libcrypto.so和libssl.so,于是自己下载8.0.26的仓库进行yum安装 12345yum install openssl-devel # 先安装依赖sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm # 我换了阿里云的centos8源#base CentOS-8.5.2111 - Base -...
redis
redis安装和配置12345yum search all redis|grep redis # 列举相关redis包进行安装yum install redis hiredis hiredis-devel redis-doc.noarch# 通过man手册查看文档systemctl start redissystemctl status redisps -ef|grep redis redis上手redis首先是一个强大的缓存服务器,比memcache强大很多,不仅仅支持多种数据结构(不像memcache 只能存储字符串)如字符串、list列表、set集合、map映射表等结构,还可以支持数据的持久化存储 (memcache只支持内存存储),经常被应用到高并发的服务器环境设计之中。 数据缓存功能1redis-cli 字符串操作123456SET key value [EX seconds] [PX milliseconds] [NX|XX]# NX不存在则创建,XX不存在则返回nilget key# 不存在返回nil,get只能用于字符串值INCR key#...