04 2020 档案
摘要:有时对指针长度总是弄混淆,今天试验了把,总算有个明确的结论了. 指针就是地址,它的长度取决于编译程序的编译器,如果是32位,则指针长度为4字节.若是64位,则是8字节. #include<stdio.h> int main() { int i = 0; int *pi = &i; char c =
阅读全文
摘要:
阅读全文
摘要:IP层: 包数据 链路层: 帧数据 以太网协议:电信号分组协议. 每个网卡有一个独一无二的MAC地址. 以太网是通过广播的方式去发送数据包. 物理连接:电信号. 每台电脑有MAC地址和IP地址,MAC地址只和生产厂商以及流水号有关,因此不能够看出电脑之间是否在同一个子网中. 因此需要有个新的机制来区
阅读全文
摘要:1.使用gcc时,需要使用gcc -g选项 2.如果想要把生成的可执行文件的调试信息去掉,可以使用strip命令. 3.调试程序时,最好把编译器的优化给关掉 gdb调试程序的三种方式: 1.gdb filename 2.gdb attach pid # 分离可以用detach 3.gdb filen
阅读全文
摘要:1.VS条件断点中输入的条件只能是非常简单的,对于复杂的可能无法判断.这个时候选择在循环里添加判断的代码来达到条件中断的效果.nice~
阅读全文
摘要:一.什么是Redis Redis是一个内存中的数据结构存储系统,可以用作数据库,缓存和消息中间件(代理). 二.为什么要使用Redis 因为它非常适合一些场景: 1.比如用作缓存,和Memcached相比,两者的相当,但Redis不仅支持简单的K/V类型,还提供list,set,hash等数据结构.
阅读全文
摘要:大多数场景下都是IO密集型. 解释 场景 如何优化 CPU使用率 CPU密集型 又称计算密集型,而任务不太需要访问I/O设备. 计算圆周率、对视频进行高清解码 增加CPU数目;最好用C语言编写,来提高代码效率 高 IO密集 CPU大部分时间在等I/O(硬盘/内存)的读写操作. 涉及到网络、磁盘IO的
阅读全文
摘要:MySQL的逻辑结构 客户端+服务器+存储引擎 存储引擎 查看存储引擎: show engines.我的电脑里默认的是InnoDB; InnoDB和MyISAM索引采用的是B+树, MEMORY采用的是Hash索引. MySql中最常用的的存储引擎是InnoDB和MyISAM. 前者在磁盘中会落2个
阅读全文
摘要:struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socklen_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; s
阅读全文
摘要:不仅定义了整数常量集,还把他们聚集成组。enum open_mode{output,input,append}; 枚举成员值可以不唯一。比如下面的point2w和point3d的值都是3.enum Points{point2d = 2, point2w,point3d = 3, point4w};不
阅读全文
摘要:1.极限法 今天看到hash表,说要让hash表上的链表分布的均匀才是好的hash函数.当时就在想为啥要分散均匀呢? 灵光一闪,如果所有链表都在一个哈希值下的,那么数据查找起来不就又回到了o(n)了吗?那使用hash表的意义就不存在了.因为hash表在没有冲突时的时间复杂度是o(1). 2.多去类比
阅读全文
摘要:尽管自己的英语水平还不错,但是自己处于懒惰的原因,在解决实际问题时不愿意采用英文搜索引擎,不爱看英文资料.后来看皓哥的文章,认识到英文资料对于成长的重要性.一方面你可以紧跟前沿的技术,另一方面也可以提升自己的信心,把自己长处发挥出来.
阅读全文
摘要:成长型思维: 相信能力可以通过训练得以提升->积极应对错误,大脑高速运转,从中学习 我不是做不到,只是还没做到;把努力和困难看做进步. 我正在解决的路上,而非我不够聪明. 僵固性思维: 不懂得享受学习的过程,只盯眼前的成与败.
阅读全文
摘要:#include "stdio.h" #include "assert.h" int main() { char buff[32]; int nPid = getpid(); snprintf(buff, 32, "%d", nPid); //参数1:要被写入的字符串 参数2:写入的大小,防止写入大
阅读全文
摘要://一些和vector,list类似的操作就没有总结#include <set> #include <list> #include <iostream> using namespace std; void count_set(const set<int> &set1, const set<int>
阅读全文
摘要:感受: 每次安装mysql都要遇到很多问题,之前在windows上是这样让人抓狂的MySQL安装-8.0.12版本,昨天在linux上也遇到了问题,还是乖乖地把一些坑记录下来,方便以后自己去查看. 安装过程: 当时安装的参考是这个https://blog.csdn.net/baidu_3287229
阅读全文
摘要:这个流程图给我的启示: 1.某个步骤需要细分的话,可以引出一条线展开阐述(比如左边的步骤3) 2.同样的需要解释的话,也可以用类似的方式.
阅读全文
摘要:windows下是区分线程和进程的,进程拥有进程描述符,描述地址空间,打开的文件等共享的资源,还有指向线程的指针,而线程没有进程描述符,只是拥有一些少量的私有数据. linux下不区分线程和进程,都会分配一个task_struct,只不过在创建线程时会传递一些参数来指明所共享的资源. 参考文章:ht
阅读全文
摘要:一.同步和互斥机制 信号量 互斥锁 同步:指多个任务按照约定的先后次序相互配合来完成一件事情. 比如读线程等待写线程写完之后再去读. 二.信号量-P/V操作 P(s)含义: if(信号量>0) { 申请资源的任务运行; 信号量--; } else {申请资源的任务阻塞} V(S)含义: 信号量++;
阅读全文
摘要:一.概述 linux中不区分进程和线程,都认为是个任务,都是创建一个task_struct.如何区分?线程是共享相同地址空间,而进程是独占地址空间. 多线程共享同一进程的地址空间 优点: 通信方便,可以通过全局变量. 缺点: 访问共享数据时需要考虑同步和互斥. 二.线程共享资源: 可执行的指令 静态
阅读全文
摘要:比如你的计划是要看pthread的用法,并且定了时间表.那么你遇到了小的细节,比如sleep和循环执行空语句的区别. 这样是计划之外的,而且不影响当前pthread的学习,选择把它记下来,在有时间的时候再去了解它.(当自己有时间的时候,也需要对代办列表进行排序) 不是遇到一个问题,就马上解决一个问题
阅读全文
摘要:1.当linux和Windows中,主线程以return 0结束时,程序会在主线程运行完毕后结束.2.当linux中,主线程以pthread_exit(NULL)作为返回值,则主线程会等待子线程.#include<stdio.h> #include<unistd.h> #include<pthrea
阅读全文
摘要:一.最小单位方面 进程是资源分配和管理的最小单元(为什么不是线程呢?因为线程自身所带的资源是不全的,还要用进程中资源) 线程是程序执行的最小单元. 二.切换成本 进程在创建时,系统需要给它分配独立的地址空间,需要用数据表来记录它的代码段,数据段以及堆栈段.当进行线程切换时,成本比较高,需要刷新cac
阅读全文
摘要:搜索实际上是一个很容易陷进去的过程.可能原来想去搜索A,发现没有找到A的相关信息,然后脑子里突然想要搜索B,找到了感兴趣的B的信息,最后就沉浸在B的世界里.忘记了当初搜索的目的.
阅读全文
摘要:一.背景 今天看到一篇文章(https://www.xuebuyuan.com/1691810.html),讲到主线程等待子线程执行完毕,如何判断的问题.作者一开始采用的是简单的Sleep操作,但这种操作不能够保证正确而且效率还比较低. 于是作者自己设计了判断子线程结束的方法,我也就实践了这个方法.
阅读全文
摘要:使用格式: [infile] -o [outfile] [infile] 可以是源文件, 目标文件或者汇编文件;[outfile]可以是目标文件,可执行文件,预处理文件 其中[infile]和[outfile]可以是一个文件,也可以是一组文件. 如果不使用 -o 选项,那么将采用默认的输出文件 1.
阅读全文
摘要:-c 只编译不链接,仅生成目标文件(.o) 可以同时编译多个文件 如果不加-c,则会进行链接操作. 例子: 定义两个源文件fun1.c和main.c //fun1.c #include"stdio.h" void fun1() { printf("this is fun1\n"); } //main
阅读全文
摘要:一.他山之石 1.安装CentOS7教程:https://blog.csdn.net/babyxue/article/details/80970526(我选择无界面的,用最小安装就可以) 2.用xshell连接CentOS教程:https://www.cnblogs.com/shireenlee4t
阅读全文
摘要:一.背景 今天看了一篇有关volatile在多线程中使用的博客(自己对该博客的总结:https://i-beta.cnblogs.com/posts/edit;postId=11388620),里面的例子没有详细地进行代码实现.自己想要验证下这个问题,同时练习下多线程编程的招式,去专门实现了一下.发
阅读全文
摘要:让当前线程休眠,把cpu机会给到别的线程,等到休眠结束后,进入就绪状态再去和别的线程竞争CPU.
阅读全文
摘要:一.如果不加锁,会怎么样? 可能会发生数据竞争,造成数据错乱. 例子: 本来想要的结果n=0,但是执行发现n的值不为0,而且有多种取值.究其原因,是因为多个线程之间会发生数据竞争,导致CPU线程调度时出现问题,不能够保证线程内执行代码的原子操作.我发现string str = "hello";这一句
阅读全文
摘要:#include <list>#include <iostream>using namespace std; //重载<<操作符. 发现重载<<时,第一个参数要为ostream类型,具体原因还没有了解. ostream & operator<<(ostream& ostr, const list<i
阅读全文
摘要:一.总结 (1)子类对象中既包含父类中继承来的变量,还包括自身所特有的.当把子类对象去赋值给父类对象时,把两者共有的部分进行了赋值.(有篇文章反映了两者的内存关系:https://www.cnblogs.com/taiyonghai/p/6515979.html) (2)反之,父类对象赋值给子类对象
阅读全文
摘要:1.作者文章中讲的轻文档和我平时用的工作日志比较类似,把一些开发中需要考虑的东西罗列出来.不过感觉最后用专题文档去记录(比如XX开发轻文档),因为我发现日志经常记得东西比较杂. 记录哪些东西呢? (1)准备信息:一些账号,密码信息之类的,比如远程桌面或者测试时通常用的ip,账户,密码. (2)开发中
阅读全文
摘要:四种方式: 临界区 互斥量 信号量 事件 特点 操作原语 MFC下的操作 临界区 虽然临界区同步速度很快,但却只能用来同步本进程内的线程 EnterCriticalSection()(定义在WinBase.h中)LeaveCriticalSection() CCriticalSection类Lock
阅读全文
摘要:一.区别介绍 静态创建对象指的是在栈上创建对象,比如A a;它会在对象的作用域结束后自动销毁. 动态创建对象指的是在堆上创建对象,然后栈上的指针指向创建的对象.比如A *pa = new A();它需要程序员手动delete掉.如果不进行delete操作,只能等到程序结束后,由OS来回收掉. 代码说
阅读全文
摘要:#include <iostream> #include <vector> using namespace std; void print_vec(const std::vector<int>& vec) { for (auto x : vec) { std::cout << ' ' << x; }
阅读全文
摘要:1.可以使用{}来达到方便的作用. 比如下面的代码,如果不用{}的话,会提示v1重复定义的问题 int sz = 100; std::cout << "using reserve: \n"; { std::vector<int, NAlloc<int>> v1; v1.reserve(sz); fo
阅读全文
摘要:一.真正有用的内存地址 实际上真正有用的地址是写入位置,在VS的内存窗口中去查看该位置,可以看到具体出现的问题. 二.发生访问冲突的可能原因 1.访问了0x00位置的数据 2.对内存中常量进行修改. char * pcontent = " abcdef "; //待去掉前后空格的字符串(共10字节)
阅读全文
摘要:一.背景 昨天脑袋有点发蒙,在.h中定义了一个全局变量CCriticalSection g_CriticalSection;然后就报了若干个LNK2005:重复定义的链接错误(单个cpp文件单独编译时不会发现问题,而链接时把把信息汇总,就会发现问题咯).原因是不应该在头文件中定义全局变量. 正确定义
阅读全文
摘要:--查询10号部门的所有经理,20部门的所有销售员. SELECT * FROM emp WHERE (deptno = 10 AND job = '经理') OR (deptno = 20 AND job = '销售员') --既不是经理也不是销售员 job NOT IN ('经理', '销售员'
阅读全文
摘要:一.背景 之前知道对象结束生命时,会自动调用析构函数.如果类中存在动态数组时,会在析构函数中会对动态数组对应的指针进行delete操作.不过一直对动态对象的delete操作和析构函数之间的关系没有太多关注.直到最近在看delete这块知识时,发现了这样的表述 二.举例 下面的代码中,在main函数的
阅读全文
摘要:SQL中使用sum的方式是这样的:sum(col_name),如果某列不符合sum的条件(比如某列中含有NULL元素,或者不是数值类型),那么会返回NULL. 有的时候不希望sum的结果为NULL,可以做如下的处理: SELECT COALESCE(sum(col_name), 0) FROM Ta
阅读全文
摘要:一.简单认识 MFC中将线程分为用户界面线程和工作线程,两者最大的区别是前者是和界面相关联的,而后者是进行后台的一些操作. 二.如何创建 MFC中的线程大多继承自CWinThread,而相关联的界面可以继承自CFrameWnd,也可以继承自对话框之类的(感觉只要是界面类,就可以吧). 它的创建过程大
阅读全文