日常随笔
文章平均质量分 53
Overcautious
这个作者很懒,什么都没留下…
展开
-
日常随笔——Excel中的time函数,excel time函数。
在处理数据的过程中,可能会遇到“time;excel time;”这样的目录栏,实际上是对time进行了TIME函数处理。把时间换算到0~1之间,但是在Excel中展示的是。原创 2023-03-23 15:35:56 · 250 阅读 · 1 评论 -
mac浏览网页时遇到问题:“请求中包含特殊字符”
mac浏览网页时遇到问题:“请求中包含特殊字符”原创 2022-09-24 22:47:24 · 1926 阅读 · 2 评论 -
coctx_swap.S源码阅读
【代码】coctx_swap.S源码阅读。原创 2022-08-25 15:24:42 · 176 阅读 · 0 评论 -
多个ipv4地址,求掩码长度
输入一组IPv4地址,返回子网掩码的最大子网掩码长度(二进制中表示的掩码中“1” 的个数)输入:“192.168.129.7”,“192.168.206.155”原创 2022-08-17 20:35:14 · 1238 阅读 · 0 评论 -
日常随笔——Mysql、Redis等的第三方api库 SOCI 的 CMakeLists使用,以及CMakeLists.txt的一点使用
SOCI第三方库的使用原创 2022-07-13 17:52:37 · 487 阅读 · 0 评论 -
日常随笔——linux 更换cmake 版本
linux 更换 cmake 版本原创 2022-07-01 16:51:07 · 527 阅读 · 0 评论 -
日常随笔——基于spdlog开源日志库的封装日志库
为了方便使用,对spdlog作了封装,单独写了一个头文件和类,并且用单例模式来进行调用,提供控制台、文件模式,五种打印级别原创 2022-06-27 16:57:22 · 929 阅读 · 0 评论 -
日常随笔——Ubuntu环境下安装leveldb
偶然了解到了leveldb,简单记录一下安装过程原创 2022-06-23 20:44:57 · 605 阅读 · 0 评论 -
C++—— 编译时链接相关问题
下面就来捋一捋这些关系对于一个C++程序而言,从代码到可执行程序一共有四个过程:将源代码的.c 、.cpp 、.h 等文件包含到一个文件中。在这个过程中会使用一些预处理指令要求编译器使用什么样的方式包含这些文件。预处理结束之后对于c语言编译器会生成一个.i 文件。C++会生成.ii文件。编译过程就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件.不同的优化等级:汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,原创 2022-06-20 20:19:46 · 526 阅读 · 1 评论 -
日常随笔——如何判断字符是汉字、字母、还是拼音? 在C++中又该如何判断?
最近遇到一个问题,需要判断一个字符串中是否包含汉字、拼音、普通字符,于是就简单记录下来。首先,如何判断这些,绕不开操作系统中的编码,常见的有三种:ASCII、Unicode、UTF-8这是最早的一种编码方式,因此只将英文字符编码进去了,也就是一些大小写字母和一些符号。但是,由于后续计算机扩展到各个国家,各国的语音也需要编码,因此ASCII编码(00000000 - 01111111)127位就不够用了,于是就制定了其他编码方式。各国都有各自的一套编码方式,比如中国制定了GB2312编码,日本把日文编入了S原创 2022-06-16 11:24:23 · 2540 阅读 · 0 评论 -
日常随笔——ARM架构的M1芯片上,安装x86环境的ubuntu
描述:最近在学习,在云服务器上安装环境的时候,服务器卡死了几次(就很抽象,编译也能卡死T_T…),于是决定在我的M1芯片macbook上配置x86环境,遇到了很多问题,最后还是解决了。原创 2022-06-07 10:21:17 · 2764 阅读 · 0 评论 -
日常随笔——ubuntu环境下的C++依赖库,以及遇到的一些问题
ubuntu底下的依赖库安装原创 2022-06-03 11:32:53 · 932 阅读 · 0 评论 -
二维码扫码登录是什么原理? (转载)
原文链接:二维码扫码登录是什么原理互联网的认证机制为了安全,手机端它是不会存储你的登录密码的。 但是在日常使用过程中,我们应该会注意到,只有在你的应用下载下来后,第一次登录的时候,才需要进行一个账号密码的登录, 那之后呢 即使这个应用进程被杀掉,或者手机重启,都是不需要再次输入账号密码的,它可以自动登录。其实这背后就是一套基于token的认证机制,我们来看一下这套机制是怎么运行的,账号密码登录时,客户端会将设备信息一起传递给服务端,如果账号密码校验通过,服务端会把账号与设备进行一个绑定,存在一原创 2022-04-11 11:45:07 · 316 阅读 · 0 评论 -
力扣随笔——KMP算法模板
代码: vector<int> nxt(goal.size(), 0); int i=1, j=0; // 求next数组 for(; i<goal.size(); ++i){ while(j>0 && goal[i] != goal[j]){ j = nxt[j-1]; } if(goal[i] == goal原创 2022-04-07 23:05:59 · 60 阅读 · 0 评论 -
LeetCode——KMP算法
KMP算法的作用:给定字符串s1,字符串s2,判断s1中是否包含字符串s2。具体实现,可以观看卡神的视频:KMP算法原理前缀表next前缀表的作用,就是在匹配字符串的过程中,如果遇到不相匹配的,需要改变的偏移量,其计算过程是利用了最长相同前后缀。为什么是最长相同前后缀?如下图,当我们匹配到f的时候,如果不相等,最好的做法是与b来进行匹配,为什么呢? 因为这里有一个f的后缀aaf(实际上不带f),和一个前缀aa,这两是相同的,因此要找最长相同前后缀。求next数组的代码:vector<i原创 2022-03-26 23:04:23 · 1040 阅读 · 0 评论 -
LeetCode——线段树
线段树的定义:首先,线段树是一棵完全二叉树。它的特点是:每个结点表示的是一个线段,或者说是一个区间。事实上,一棵线段树的根结点表示的是“整体”区间,而它的左右子树也是一棵线段树,分别表示区间的左半边和右半边。树中的每个结点表示一个区间[a,b]。每一个叶子结点表示一个单位区间。对于每一个非叶结点所表示的结点[a,b],其左孩子表示的区间为[a,(a+b)/2],右孩子表示的区间为[(a+b)/2,b]。 用T(a, b)表示一棵线段树,参数a,b表示区间[a,b],其中b-a称为区间的长度,记为L。如下图原创 2022-03-20 20:09:48 · 1641 阅读 · 0 评论 -
日常随笔——C++单例模式
应该何时使用单例模式?你需要系统中只有唯一一个实例存在的类的全局变量的时候才使用单例。单例模式应具有的特点越小越好,越简单越好,线程安全,内存不泄露参考C++ 单例模式总结与剖析,C++实现单例模式(包括采用C++11中的智能指针)常遇到的错误示例class CSingleton{private: CSingleton(){ cout << "单例对象创建!" << endl; }; CSingleton(const CSingleton &原创 2022-03-01 16:09:45 · 288 阅读 · 0 评论 -
在C++中使用MySQL
环境ubuntu18.04,MySQL 14.0正文:头文件#include <mysql/mysql.h>初始化以及连接MySQLMYSQL* conn = mysql_init(NULL);conn = mysql_real_connect(conn, HOST, USER, PASSWORD, DATABASE, PORT, NULL, 0);参数依次为连接的ip(一般为localhost或者127.0.0.1),登录MySQL的账户,账户密码,使用的数据库名称原创 2022-02-28 21:08:19 · 1171 阅读 · 0 评论 -
日常随笔——CLion使用过程中遇到的问题
问题描述在使用CLion的过程中,新建一个新的C++类,产生对应的.h文件和.cpp文件,但是此时代码框顶端会显示"不属于任何项目目标,代码洞察功能可能无法正常工作" 。即使在Cmakelist.txt文件中已经明确加入了该文件,但依旧解决不了。解决办法右键文件夹,将其标记为项目源或头...原创 2022-02-28 17:27:31 · 1797 阅读 · 1 评论 -
日常随笔——m1 macbook安装和配置qt
先用brew安装qt。参考Apple M1 开发 Qt 6.2 踩坑但是并没有解决实际问题,在安装完之后,会报错显示编译器与qt版本不匹配,此时需要安装Xcode,直接在Apple Store中进行安装即可,安装完之后就能够自动检测到Apple Clang(arm64)。参考:MacBook Air m1怎么安装Qt,必须要先下载xcode吗? - QueenFan的回答 - 知乎...原创 2022-01-22 17:06:24 · 3157 阅读 · 0 评论 -
随笔——unique_lock锁与condition信号量
看到一个帖子介绍锁与信号量的使用:std::condition_variable与std::unique_lock的结合使用void runthread(int index){ std::unique_lock<std::mutex> lck(mtx); fprintf(stderr, "thread:%d is waiting.\n", index); cv.wait(lck); fprintf(stderr, "thread:%d is wakeup.\n原创 2022-01-15 01:01:12 · 424 阅读 · 0 评论 -
日常随笔——C++中获取当前线程ID
一般有四种参考链接:Linux下获取线程ID#include <pthread.h>#include <thread>#include <iostream>#include <unistd.h>#include <stdio.h>#include <sys/syscall.h> #define gettid() syscall(__NR_gettid)#define NUM_THREADS 5using nam原创 2022-01-12 00:23:18 · 6507 阅读 · 0 评论 -
随笔——WebServer相关
梳理一下程序的大概流程,主要是为了熟悉网络编程。1. 非阻塞的套接字与epoll又对epoll有了一定的了解,参考连接 。ET(边缘触发模式),也就是对套接字的可读可写这些事件,只会相应一次,相应结束之后,需要再次重新注册事件,才会触发。所以代码里会频繁的对套接字进行mod修改操作:并且,对于非阻塞的 socket,此时 send 函数返回 -1,错误码为 EAGAIN 或 EWOULDBLOCK,你一定要继续注册检测可写事件,否则你剩余的数据就再也没有机会发送了,因为 ET 模式的可写事件再也不原创 2022-01-09 21:59:19 · 179 阅读 · 0 评论 -
随笔——虚函数、虚表剖析
虚函数在之前已经记录过:C++复习——虚函数与多态今天面试遇到了一个关于虚函数表的问题,因此特地钻研一下,参考文章:C++ 虚函数表剖析话不多说,直接上代码show me your code1. 简单示例class A{class A{public: virtual void vfunA(){ std::cout<<"class A::vfunA"<<std::endl;} virtual void vfunB(){ std::cout <<原创 2021-12-23 20:25:08 · 347 阅读 · 0 评论 -
C++的花括号、unique_lock与condition_variable
多线程并发中,会使用到锁和信号量,此处介绍常用的操作std::unique_lock的使用std::unique_lock为锁管理模板类,是对通用mutex的封装。std::unique_lock对象以独占所有权的方式(unique owership)管理mutex对象的上锁和解锁操作,即在unique_lock对象的声明周期内,它所管理的锁对象会一直保持上锁状态;而unique_lock的生命周期结束之后,它所管理的锁对象会被解锁。 其具体实现方式是采用RAII思想,即在构造函数中执行lock,析构函原创 2021-12-06 11:26:53 · 988 阅读 · 0 评论 -
lambda函数与多线程thread
Lambda表达式,可以方便的定义和创建匿名函数。此帖介绍一下lambda与多线程之间的关系。创建一个多线程用例#include <chrono> // std::chrono::seconds#include <iostream> // std::cout#include <thread> // std::thread, std::this_thread::sleep_forvoid thread_task(int n) { std:原创 2021-12-05 21:21:50 · 1131 阅读 · 0 评论 -
日常随笔—— __thread关键字
__thread关键字__thread关键字是gcc内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程都有一份独立实体,各个线程之间互不干扰。每新建一个线程,都会重新复制一份该变量。可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。示例代码:#include <iostream>#include <pthread.h>#include <unistd.h>using namespace std;原创 2021-11-07 21:56:34 · 423 阅读 · 0 评论 -
日常随笔(c++11)——NULL的二义性和nullptr
1 NULL的定义#if defined(__cplusplus)# define NULL 0 /* C++中使用0作为NULL的值 */#else # define NULL ((void *)0) /* C中使用((void *)0)作为NULL的值 */ #endif可以看到在C++中,NULL被看作是0,如果现在出现了下面两个函数:void func(int) {}void func(int *) {}函数func(NULL)会因为NULL为0而导致调用func(int)函数原创 2021-11-06 14:52:57 · 273 阅读 · 0 评论 -
日常随笔(c++11)——RAII与智能指针
1. RAII机制RAII全程是Resource Acquisition Is Initialization(资源获取初始化),是C++的一种管理资源、避免内存泄漏的方法。利用的就是C++构造的对象最终都会被销毁的原则。RAII的做法就是使用一个对象,在对象被构造是申请获取其对应的资源;在对象生命周期内控制对资源的访问,使之保持有效;在对象析构的时候,释放构造时获取的资源1.1 为什么要使用RAII计算机资源是有限的,不能够一直申请新的资源,而不释放已用完的资源。在使用资源的时候,必须遵循一个步骤原创 2021-11-05 00:17:46 · 629 阅读 · 0 评论 -
日常随笔——frp内网穿透的使用以及相关问题
这几天在别人那整了一台服务器,但怎么连接也是一个问题,由于不在同一个内网,所以需要借助内网穿透工具。好不容易解决了内网穿透,结果接连两天,内网穿透端口都一直被人攻击(心中一万只草泥马奔腾而过)。因此,这里也记录一下如何防护陌生IP攻击。1. 内网穿透frp什么是内网穿透:主机A在10.21.0.0/16 局域网内,主机B在10.39.0.0/16 局域网内,那么这两台主机不能相互通信。此时需要做的就是找一台中介服务器,作为这两台主机的通信媒介。实现内网穿透后能做什么:实现了后就可以在校外直接访问校原创 2021-10-27 14:56:00 · 2500 阅读 · 0 评论