自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

代码笔记本

个人博客www.yyycode.cn

  • 博客(1106)
  • 收藏
  • 关注

原创 关于构造函数抛出异常的讨论

C++构造函数抛异常问题

2022-10-13 20:32:14 954 1

原创 IK学习笔记(2)——TwoBones IK

Two Bones IK

2022-08-01 14:22:50 906

原创 IK学习笔记(1)——CCD IK

CCD IK

2022-07-24 13:01:33 2017

原创 3dsmax插件开发遍历节点对象和Object获取及INode变换矩阵说明

3dsmax插件开发的INode变换矩阵说明

2022-06-25 20:54:09 581

原创 3dmax插件开发环境配置及FileExport和Utilities模板测试

3mdax插件开发之环境配置及模板测试

2022-06-18 17:08:27 671 2

原创 分布式存储与一致性哈希

文章目录背景分布式存储一致性哈希背景许多应用的数据比如聊天内容其实也保存在服务端,而当用户基数庞大的时候,一台服务器肯定是存不下数据的。分布式存储例子:假设微信有10亿用户,一个用户的微信信息100M,假设每一个通过微信号来对应微信信息。这是时候就需要差不多10WT的空间来保存这些数据。假设一台服务器有1T的空间,现在就需要10W台服务器。那么如何保存这些数据?我们保存数据肯定是为了更加方便的查找,在面对海量数据的时候,可以采用哈希切割。将每一台服务器进行编号,利用哈希切割,对微信号进行哈

2022-03-29 11:20:45 302 2

原创 多继承时的指针偏移和判等问题

代码#include<iostream>using namespace std;class A { public: int _b1;};class B { public: int _b2;};class C: public A, public B { public: int _b3;};int main() { C c; A* p1 = &c; B* p2 = &c; C* p3 = &a

2022-03-18 15:12:40 1449 1

原创 C++设计模式 | Observer观察者模式

设计模式——观察者模式概念Observer模式也称为发布-订阅(publish-subscribe),定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也称为发布-订阅(publish-subscribe)。目标是通知的发布者,它发出通知时并不需要知道谁是它的观察者。常用于解耦事件的观察和事件最终的处理方式。解决的问题Observer模式要解决的问题为:建立一个一(Subject)对多( O

2022-03-16 21:55:03 1060

原创 volatile关键字

volatile的作用保存内存的可见性。告诉编译器,volatile修饰的变量,不允许优化,对该变量的任何操作都必须再真实的内存中进行操作。volatile应用场景懒汉方式-单例模式懒汉方式中的静态对象指针要加volatile关键字防止过度优化出现问题。// 懒汉模式, 线程安全template <typename T>class Singleton { volatile static T* inst; // 需要设置 volatile 关键字, 否则可能被编译器优化.

2022-03-15 20:03:58 509

原创 312. 戳气球(区间dp)

链接:https://leetcode-cn.com/problems/burst-balloons/首先这个长度为500的范围可以猜测出是O(n^3)区间dp这里主要讲述为什么状态定义要定义成开区间而不是闭区间最大的原因:闭区间计算出来的状态是无法保证正确性的假如使用一开始的闭区间定义去做:原先定义dp[i,j]:戳爆i~j下标气球的最大积分。举一个样例:nums = [3,1,5,8](以下标开始为1进行讲述)枚举k作为区间内最后一个被戳爆的气球,那么此时若最后一下要戳爆k,若想让k成

2022-03-14 11:48:07 800

原创 网络编程:sockaddr统一结构

sockaddr结构从网络编程的API中我们看到一个需要强转的结构体(struct sockaddr),为什么要强转成这个结构体呢?先说结论,sockaddr是统一的接口,只用一个接口完成不同套接字(比如IPV4,IPV6)之间的通信问题。socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6,以及后面要讲的UNIX Domain Socket。然而,各种网络协议的地址格式并不相同。在C语言中如果直接处理就要多出重复的接口,设计成统一的目的是为了设计尽量少的接口,

2022-03-10 20:25:20 3548

原创 自主web服务器

自主web服务器文章目录自主web服务器前言http背景目标描述技术特点项目背景开发环境www客户端浏览器发展史服务器端http发展史Tcp/IP分层概述TCP/IP通信传输流DNS域名解析各协议之间的协作http特点URI、URL、URN浏览器URL基本格式http请求与响应示意图http报文细节http请求方法http状态码项目代码.h和.hpp传输层及网络层封装TcpServer.hpp封装HttpServer.hpp封装Log.hpp处理HTTP协议——Protocol.hppUtil.hpp工具

2022-03-09 12:32:48 430

原创 进程环境变量:putenv函数的不安全问题

前言在做项目的时候发现一个bug,调了2小时多最后发现,于是写了两个对应的demo来解释getenv的坑现象一般来说我们可以通过环境变量来达到传参的目的。而环境

2022-03-09 09:31:55 1512 3

原创 网络编程:epoll的demo

EpollServer.hpp#pragma once#include "tcpServer.hpp"#include <sys/epoll.h>#define NUM 20#define SIZE 64#define DFL -1class Backage{ public: Backage(int fd , int pos = 0) :_fd(fd) ,_pos(pos) { memset(_buf,0,

2022-03-01 19:55:04 1220 1

原创 Linux的动态库和静态库

动静态库文章目录动静态库动静态库的概念动态链接的特点静态链接的特点查看文件的动静态链接属性动态链接的机理生成&&使用静态库生成&&使用动态库使用外部库动静态库的概念静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。 一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码在可执行文件开始运行

2022-03-01 19:52:08 1292

原创 brk()、mmap()及malloc()基本原理

文章目录linux内存分配缺页中断linux内存分配的原理malloc()背后的实现原理malloc()和free()的功能malloc()和free()的分配算法参考资料linux内存分配缺页中断什么是缺页中断,简单来说是因为操作系统采用了虚拟内存技术,程序代码/数据对应的内容并不一定是完全读入到内存中,在使用到时候发生缺页中断将对应的内容读入到内存中。当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作:检查要访问的虚拟地址是否合法查找/分配一个物理页填充物理页内容(读取磁盘,或

2022-02-27 16:25:54 3977 2

原创 高并发内存池项目

文章目录1.什么是内存池1.1池化技术1.2内存池1.3内存池主要解决的问题1.4malloc2.设计定长内存池2.1结构设计2.2windows和Linux下直接向堆申请页为单位的大块内存2.3代码实现3.高并发内存池整体框架设计4.高并发内存池——thread cache4.1thread cache整体设计4.2自由链表的哈希桶跟对象大小的映射关系4.2.1理论设计4.2.2计算字节数对应的实际freelist大小4.2.3计算字节数对应的实际哈希桶下标4.3创建thread cache时使用TLS无

2022-02-25 21:29:19 1073 1

原创 C/C++关键字:static

static关键字文章目录static关键字C语言隐藏场景演示解决方法声明和定义分离使用static关键字及缺陷保持变量内容的持久默认初始化为0Cppstatic类成员变量static类成员方法单例模式C语言隐藏场景演示当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。会导致符号表认为存在同名全局变量和函数发生碰撞。场景:全局的变量/函数在.h中会在多个.cc文件中拥有且全局可见有链接问题。a.h#pragma once#include<stdio

2022-02-21 20:05:09 1036

原创 网络编程:PollServer的demo

tcpServer.hpp#pragma once#include<iostream>#include<string>#include<cstdio>#include<cstring>#include<string.h>#include<typeinfo>#include<exception>#include<stdexcept>#include<arpa/inet.h>#in

2022-02-19 11:45:22 561 1

原创 网络编程:select通信demo

tcpServer#pragma once#include<iostream>#include<string>#include<cstdio>#include<cstring>#include<string.h>#include<typeinfo>#include<exception>#include<stdexcept>#include<arpa/inet.h>#includ

2022-02-19 09:40:12 242

原创 C++智能指针

智能指针文章目录智能指针1.为什么需要智能指针(智能指针场景)2.内存泄漏2.1什么是内存泄漏2.2内存泄漏的危害2.3内存泄漏分类(了解)2.4如何解决内存泄漏相关问题3.智能指针的使用及原理3.1RAII3.2智能指针的原理3.3auto_ptr3.4unique_ptr3.5shared_ptr3.6weak_ptr4.智能指针的历史5.定制删除器(了解)6.RAII的扩展学习:lock_guard1.为什么需要智能指针(智能指针场景)C++没有垃圾回收机制,new/delete等等出来的资源,

2022-02-18 18:32:04 575 1

原创 C++类型转换

C++的类型转换文章目录C++的类型转换1.C语言中的类型转换2.为什么C++需要四种类型转换3.C++强制类型转换3.1static_cast3.2reinterpret_cast3.3const_cast3.4dynamic_cast3.5explicit4.RTTI(了解)5.常见面试题1.C语言中的类型转换在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化。C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转

2022-02-17 22:30:01 527

原创 C++异常

文章目录1.C语言传统的处理错误的方式2.C++异常概念3.异常的使用3.1异常的抛出和捕获3.2异常的重新抛出3.3异常安全3.4异常规范4.自定义异常体系5.C++标准库的异常体系6.异常的优缺点1.C语言传统的处理错误的方式什么是异常?异常是面向对象语法处理错误的一种方式那么C语言传统的处理错误的方式有哪些呢?终止程序,如assert,exit,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错

2022-02-16 21:12:18 417 3

原创 传输层——UDP协议

文章目录传输层再谈端口号端口号划分认识及查看知名端口号linux下网络命令**netstat(查看当前主机的连接情况,高频重要)**pidof(查看服务器的进程id)UDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲区UDP使用注意事项基于UDP的应用层协议底层实现的结构传输层这部分由网络基础(一)可以知道是由操作系统实现的内核级协议再谈端口号端口号(Port)标识了一个主机上进行通信的不同的应用程序。向上交付的时候根据TCP/UDP首都中的端口号进行分用。那么端口号是怎么找到进程

2022-02-09 20:45:08 2067

原创 HTTP与HTTPS的对比

文章目录结构对比加密过程中间信息篡改验证远端服务器身份认证总结结构对比http:80https:443加密过程对称加密的一种典型方式比如异或加密。但是问题在于server端如何获取密钥,密钥的安全无法保证,密钥没有加密存在被劫持可能。解决方法是先采用非对称加密。https密钥协商过程:server->公钥->client对称密钥。用公钥加密->server->解密->server拿到对称密钥。至此,双方通信采用对称密钥进行。为什么不直接采用非对称加密进行传输呢

2022-02-09 20:41:55 1987

原创 网络基础(二)

讲述具体的各层协议,自顶向下讲述。文章目录应用层再谈协议网络版计算器概念代码实现小结传输层抓包——tcpdumpHTTP协议认识URLurlencode和urldecodeHTTP协议格式基本特征无连接无状态简单快速特征小结HTTP构成HTTP抓包工具——Fiddler简单原理抓取https协议GET方法请求响应PUT方法请求响应总结telnet直接请求HTTP爬虫的简单原理HTTP的方法HTTP的状态码HTTP常见Header常见HeaderCookieSession应用层我们程序员写的满足日常需求

2022-02-08 16:36:48 364

原创 网络编程套接字

网络编程套接字文章目录网络编程套接字预备知识理解源IP地址和目的IP地址认识端口号理解“端口号”和"进程ID"理解源端口号和目的端口号认识TCP协议认识UDP协议网络字节序网络字节序的规则htonl和ntohl的大小端转换socket编程接口socket常见API理解socketbindinet_addr和inet_ntoa(点分十进制的转换)recvfrom(udp)sendto(udp)INADDR_ANYlisten(tcp)accpet(tcp)recv(tcp)send(tcp)connect(

2022-02-07 14:07:09 1618

原创 demo:线程池+tcp

pthreadPool.hpp#pragma once#include<pthread.h>#include<queue>#include<iostream>#include<string>#include<cstring>#include<unistd.h>#include<sys/wait.h>#include<sys/socket.h>#include<arpa/inet.h&gt

2022-02-06 23:55:48 541 1

原创 网络基础(一)

网络基础(一)文章目录网络基础(一)计算机网络背景网络和系统的关系网络发展认识“协议”网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型网络传输基本流程网络传输流程图同一个网段内的两台主机传输跨网段的主机的传输数据包封装和分用网络中的地址管理IP地址认识MAC地址linux下查看网络信息总结计算机网络背景学习系统不能忽略硬件,学习网络也不能忽略硬件。网络和系统的关系网络发展最开始只有一台计算机处理人算力不足的问题。独立模式:计算机之间相互独立不同人在不同单位所承担的分工是

2022-02-03 22:22:43 3744 6

原创 C++11

文章目录1.c++11简介2.统一的列表初始化2.1{}初始化2.2std::initializer_list2.2.1std::initializer_list的使用2.2.2底层原理3.声明3.1auto3.2decltype3.3nullptr4.范围for循环5.智能指针6.STL的一些变化**7.右值引用和移动语义**7.1左值引用和右值引用7.1.1左值的概念和左值引用的概念7.1.2右值的概念和右值引用的概念7.1.2右值引用的注意点(完美转发场景的解释)7.2左值引用和右值引用的区别7.2.

2022-02-02 23:59:29 236 1

原创 map和set的实现(2)——红黑树

文章目录1.红黑树的概念2.红黑树的性质与原理3.红黑树节点的定义4.红黑树的插入4.1情况一4.2情况二4.3情况三4.4代码实现4.5小结5.红黑树的检查6.红黑树的删除1.红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出2倍,因而是接近平衡的。实际当中进行搜索一般使用红黑树,和AVL树相比较并不是质的变化。那么AVL树和红黑树有什么区别呢?

2022-01-31 00:20:30 4151 4

原创 C++特殊类的设计

文章目录设计一个类,只能在堆上创建对象设计一个类,只能在栈上创建对象设计一个类,不能被拷贝设计一个类,不能继承设计一个类,只能创建一个对象(单例模式)单例模式的概念单例模式的实现饿汉模式懒汉模式饿汉模式和懒汉模式的对比懒汉模式的优化单例对象的释放单例对象的直接释放内部垃圾回收类设计一个类,只能在堆上创建对象想要的效果实际是没法直接在栈上创建对象。首先cpp只要创建对象就要调用构造函数,因此先要把构造函数ban掉,把构造函数设计成private。但是单这样自己也创建不了了。因此提供一个创建的接口,只能

2022-01-30 12:43:19 1087

原创 哈希的应用(2)——布隆过滤器

文章目录布隆过滤器布隆过滤器的概念布隆过滤器的实现哈希函数个数和布隆过滤器长度模拟实现布隆过滤器的删除小结海量数据处理相关题5.1哈希切割5.2位图应用5.3布隆过滤器扩展布隆过滤器布隆过滤器的概念比如说一个论坛要实现注册功能,每个人都有昵称(主码)。现在新用户输入昵称或者修改昵称,提交的时候要如何快速检测一下昵称是否被用过?有人使用,则提示一下,没人使用,则提交成功。此时就是一个key的模型。比如说此时已经有100亿个用户昵称了。目前有两种方式:用哈希表存储用户记录,缺点:浪费空间。用位图

2022-01-29 23:50:45 3073

原创 哈希的应用(1)——位图

文章目录位图位图概念位图的实现相关应用位图位图概念给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】思路一:遍历,时间复杂度O(N)O(N)O(N)思路二: 排序O(NlogN)O(NlogN)O(NlogN),利用二分查找: O(logN)O(logN)O(logN)但是问题是,40亿个无符号整数,16G。压力很大。思路三:放进set或unordered_set,再查找。问题是空间撑不住,红黑树一个节点还有额外的空间,哈希的需要的

2022-01-29 15:58:58 880

原创 unordered_map和unordered_set的实现——哈希表实现及封装

文章目录1.两者与map及set的关系2.std::find和unordered_set::find3.随机数据测试4.底层结构4.1哈希概念4.2哈希冲突4.3哈希函数4.3.1直接定址法(常用)4.3.2除留余数法(常用)5.解决哈希冲突5.1闭散列——开放定址法5.1.1线性探测5.1.2二次探测5.1.3负载因子5.1.4模拟实现5.1.4.1判空5.1.4.2取模的选择5.1.4.3扩容的要求5.1.4.4仿函数处理各种类型转成整数5.1.5小结5.2开散列——哈希桶/拉链法5.2.1概念5.2.

2022-01-29 12:18:22 861

原创 map和set的实现(1)——AVL树

文章目录1.AVL树的实现1.1AVL树的概念1.2AVL树节点的定义1.3AVL树的插入1.3.1控制平衡1.3.1控制平衡因子1.3.2四种旋转1.3.2.1右单旋1.3.2.2左单旋1.3.2.3左右双旋1.3.2.4右左双旋1.3.2.5总结1.4AVL树的平衡检查1.5AVL树的查找1.6AVL树的拷贝,赋值,析构1.7AVL树的operator[]修改1.8AVL树的删除2.AVL树的性质2.1AVL树的性能前面对map/multimap/set/multiset进行了介绍,这几个容器有个共

2022-01-28 22:04:25 796

原创 map和set的实现(3)——红黑树封装

我们前面写的红黑树是k-v结构的,但是set是k结构的,如何保证复用性的情况下进行封装。学习源码要先看框架,框架看懂了细节就容易多了。文章目录红黑树结构的复用源码的复用框架key和key-value的比较碰到的问题仿函数实现两种类型的各自比较迭代器的实现迭代器的结构operator++/--的实现带头节点不带头节点反向迭代器的实现(迭代器适配器)operator[]的访问代码红黑树结构的复用源码的复用框架RBTree.h#pragma once#include <iostream&gt

2022-01-27 15:25:32 683

原创 C++list类的模拟实现

本文是对之前list类的模拟实现的重制。文章目录整体框架Alloc内存池iterator类iterator的意义iterator的实现operator=&&拷贝析构iterator的三个模板参数operator->的编译器省略List的拷贝构造析构等list接口的基本实现string,vector,list的迭代器整体框架namespace YCB{ //模拟实现list当中的结点类 template<class T> struct _list_node {

2022-01-26 22:29:27 694

原创 C++set、map、multiset、multimap的使用

文章目录1.关联式容器2.树形结构和哈希结构3.set3.1set的介绍3.2set的构造3.3set的迭代器3.4set的常用成员函数4.multiset5.map5.1map的介绍5.2pair和make_pair5.3map的构造5.4map的插入5.5map的遍历5.6map的修改5.7map的删除5.8operator[]与map经典场景5.8.1统计次数的方式一5.8.2统计次数的方式二5.8.3统计次数的方式三(operator[])5.8.3.1operator[]的底层原理5.8.3.2o

2022-01-24 16:02:12 741

原创 C++二叉搜索树

文章目录二叉搜索树二叉搜索树的概念二叉搜索树操作定义非递归版插入中序遍历查找删除递归版本查找插入删除类的默认成员函数析构拷贝构造operator=赋值二叉搜索树的应用K模型KV模型二叉搜索树二叉搜索树的概念二叉搜索树又称二叉排序树(因为走中序,数据都是有序的),它或者是一棵空树,或者是具有以下性质的二叉树。若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树即每颗子树中,左子树中值都小于根,右子树

2022-01-24 10:18:25 936

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除