自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 笔记:Mysql45讲(部分)

00 前言前段时间花了点时间看了一小部分Mysql45讲的内容,初看感觉有些地方晦涩难懂,由于时间原因也没看完,先把做的部分笔记放上来,日后有时间学习更新。01 基础架构:一条SQL查询语句是如何执行的?MySQL可以分为Server层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等。连接器负责跟客户端建立连接、获取权限、维持和管理连接。连接的权限判断逻辑,都将依赖于初始时读到的权限。修改完成后,只有再新建的连接才会使用新的权限设置。建立连接的过程通常是

2022-03-08 22:00:44 1035

原创 C++:头文件递归包含问题(互相包含问题)

目录引言初始版本头文件守卫递归包含会怎么样为什么会出错前置声明是什么如何解决递归包含问题参考引言最近正在疯狂补技术债,以及疯狂赶项目…大一大二摸的鱼终归是要还的,也奉劝大家少摸鱼,不然临近找工作可能就会像我一样焦虑。在写C++项目中,碰到一个非常古怪的问题,当我像往常一样引入一个头文件时,vscode居然给我报红了(我在vscode中使用的是clangd插件):当时就觉得非常震惊,我从未没碰到过只是include一个头文件,居然会报错的情况,当我以为是插件的问题,像往常一样mkdir build &

2021-11-04 00:07:21 5074 1

原创 Leveldb:BloomFilter浅析

目录

2021-09-19 15:16:07 415

原创 Leveldb:LRUCache浅析

目录引言LRUHandle成员变量HandleTable成员变量FindPointerResizeInsertRemoveLRUCache成员变量LRUCacheLRU_Remove和LRU_AppendRefUnrefFinishEraseUnref和FinishErase的区别LookupPrune~LRUCacheShardedLRUCache相关代码引言本次给大家介绍鼎鼎大名的LRU(Least Recently Used,即最近最少使用)算法在leveldb中是如何实现的,leveldb又是怎

2021-09-18 01:21:34 438

原创 leveldb:Arena浅析

目录引言成员变量MemoryUsage~ArenaAllocateAllocateFallbackAllocateNewBlockAllocateAligned浅谈字节对齐(align & (align - 1)) == 0(alloc_ptr_) & (align - 1)AllocateAligned逻辑Arena的优缺点相关代码引言这是我关于Google leveldb的第一篇源码解读系列,我不会对所有源码进行解读,但我尽量保证讲到的点都比较清楚(在精不在多嘛)。leveldb中

2021-09-13 20:34:41 633 2

原创 Linux:从min宏开始入手LKM

引言本学期开了陈老师的OS课程,作业比较丰富。对于我这种放飞自我的人来说,作业是“选做 = 不做,必做 = 乱做”的,但是点进去任务的页面,稍微看了一眼觉得挺感兴趣的,也有一点点自己的小问题,决定记录一下。任务如下:任务详情搭建Linux环境,编写Linux内核模块,二选一或者都做1.编写Linux内核模块,并求最大数,参考,https://mp.weixin.qq.com/s/0ZVNbTj7fGs8Gi03vj541A和 https://mp.weixin.qq.com/s/Kvle_fgr

2021-09-11 22:12:19 1432 1

原创 新的学期继续开摆!

双非学校,下学期就找实习了,离找工作的水平还差一大截,但是一点都不慌!

2021-09-11 16:14:56 179 2

原创 笔记:《C++并发编程实战》

第一章 你好,C++的并发世界计算机系统中的并发:进行上下文的切换时,操作系统必须为当前运行的任务保存CPU状态和指令指针,并计算出要切换到哪个任务,并为即将切换到的任务重新加载处理器状态。然后CPU可能要将新任务的指令和数据的内存载入到缓存中,这会阻止CPU执行任何指令,从而造成的多的延迟。多进程并发:操作系统在进程间提供附加的保护操作和更高级别的通信机制意味着可以更容易编写安全的并发代码。使用多进程实现并发还有一个额外的优势———可以使用远程连接(可能需要联网)的方式,在不同机器上运行

2021-08-17 11:31:06 942

原创 Java:Servlet getParameter接收multipart/form-data格式数据

目录引言@MultipartConfigFileUpload参考引言当在HTML或者JavaScript中使用表单提交数据时,默认编码格式为application/x-www-form-urlencoded,在HTTP报文中可以找到用&与=隔开的信息(因此,我们也可以在JavaScript中手动的send他们),类似下面:这种格式可以直接被getParameter获取,但也只能用于传输文本,对于二进制数据是无能为力的。文件传输需要用到multipart/form-data(注意在JavaS

2021-06-12 20:52:04 6145 4

原创 Git:在一个仓库中存放多个IDEA项目

目录引言解决方案实际操作引言最近由于课设的原因,在学习Java Web开发,因为要混Git的小绿点,我把之前学习Servlet的代码传到了Github上。像这样:这两周到了课设开发的时间,虽然组员们不用Git,但是本着开源(混绿点)精神,我还是想传到Git上,但是由于我不是一个职业的Java选手,我认为再为它开一个仓库不太美观。是的,我希望我的学习代码和课设代码共存一个仓库。很显然,我无法通过在同个仓库下创建lean_web和class_design文件夹去解决这个方案,因为它们在不同的IDEA

2021-06-01 19:48:48 1729 1

原创 笔记:图解系统(小林coding)

目录一、硬件结构二、操作系统结构三、内存管理四、进程与线程五、调度算法六、文件系统七、设备管理八、网络系统九、Linux命令一、硬件结构冯诺依曼模型:中央处理器(CPU)、内存、输⼊设备、输出设备、总线。那 CPU 执⾏程序的过程如下:第⼀步,CPU 读取「程序计数器」的值,这个值是指令的内存地址,然后 CPU 的「控制单元」操作「地址总线」指定需要访问的内存地址,接着通知内存设备准备数据,数据准备好后通过「数据总线」将指令数据传给 CPU,CPU 收到内存传来的数据后,将这个指令数据存⼊

2021-05-24 22:01:31 2660

原创 笔记:图解网络(小林coding)

这里写目录标题引言一、基础篇二、HTTP篇三、TCP篇四、IP篇五、网络综合篇引言最近读完两本不错的书,一本是《现代操作系统:原理与实现》。这本书很详细的阐述了OS方面的知识,有的术语很新,也比较晦涩难懂。建议看的时候可以不用太在意细节,一些记了肯定忘的英文缩写之类的理解其思想就好,抓重点学习。这本书的配套lab我没有做,但是听说不错,感兴趣的同学可以做做。由于是纸质书不方便做笔记,我就只简单的在纸上记了一些关键词来帮助我复习,故不放上来。另一本是面向就业的图解教程,由小林coding这个良心博

2021-05-20 18:42:22 3772

原创 Docker:overlay2浅析

目录引言Union File Systemoverlay和overlay2参考引言之前大一看《鸟哥的Linux私房菜》时,了解到mount命令。大概是这么个意思:将一个块设备挂载到目录上,使得访问该目录时相当于访问该设备,挂载时,原目录的内容将暂时被隐藏,而不会消失。看来Linux的虚拟文件系统还是很“海纳百川”的嘛。下面也说说我这一年对mount命令基础用法的一些实践:插U盘时,我们可以整一些小花样,不通过Linux的一些图形化文件管理器打开它时(使用这些管理器时实际上会自动帮我们挂载到run

2021-04-22 15:34:37 11082 2

原创 abi:用json解析和对比linux平台下elf文件

目录引言parse_elf_jsonc.ccompare_elf_cJSON.c引言前段时间接触到了跟abi(注意不是api)相关的知识,简单的了解了一下elf文件格式并写了两个小样例。具体的步骤为:修改readelf命令源码,增加其对h、S、l参数的json输出(修改后的代码过长就不放了)。可以不修改json源码,我用linux平台下的json-c写了一个自己的样例。对比获得的json文件,这里我用cJSON写了一个针对改后readelf的简单对比。说实话对这方面兴趣真不大,发这篇博客当

2021-03-28 22:29:00 422 1

原创 Golang:利用反射修改不同类型对象的值

目录引言实现参考引言在写代码时,我们可能会有这样的需求:根据特定的对象类型进行定制操作。针对这件事情,C++中提供了type_traits这一机制。说的高大上一些,它是一种萃取机。实际上我认为type_traits就是利用模板的特化和模板参数推导,从而在编译期就获得的类模板的一个实例。而接下来介绍Go一种比较有意思的机制:反射。相当特别的是,这件事是在运行期完成的。借用李文周的博客中对反射的介绍:反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会

2021-03-22 20:50:22 1078

原创 C++:std::thread arguments must be invocable after conversion to rvalues

目录引言解决方案引言最近在看《C++并发编程实战》的时,书上有一句话这么写:这些参数会拷贝至新线程的内存空间中(同临时变量一样)。即使函数中的参数是引用的形式,拷贝操作也会执行。这有悖linux c的Pthreads API和引用的含义,我便想试试,如果是引用,子线程究竟是和父进程共享一个对象,还是说各持一份拷贝。由于cout并不具有线程安全性(来自陈硕),且使用多次输出运算符相当于调用多次operator<<(),可能使输出变得杂乱,我并没有使用它。方便起见,我也没有使用cond

2021-03-10 19:45:27 7726 3

原创 muduo(一):C++多线程系统编程

目录第1章 线程安全的对象生命期管理对象的创建很简单销毁太难线程安全的Observer有多难再论shared_ptr的线程安全shared_ptr技术与陷阱对象池弱回调第2章 线程同步精要互斥器只使用非递归的mutexfalse sharing(转载)spurious wakeup不要用读写锁和信号量static_assertsleep(3)不是同步原语借shared_ptr实现copy-on-write第3章 多线程服务器的使用场合与常用编程模型推荐模式进程间通信只用TCP必须用单线程的场合适用多线程程序

2021-03-08 20:32:50 746 1

原创 笔记:23个设计模式

设计模式“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。软件设计的金科玉律:复用。面向对象设计最大的优势在于:抵御变化。设计模式的假设是必须有稳定点(全都是稳定点的话,设计模式也失去意义)。设计模式最大的作用是在变化和稳定中寻找隔离点,分离他们,从而管理变化。面向对象设计原则依赖倒置原则(DIP)高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定) 。抽象(

2021-03-04 18:22:43 116 1

原创 笔记:《C++ Primer》

文章目录写在前面第二章 变量和基本类型引用指针和引用指向指针的引用空指针复合类型const常量引用顶层constconstexprautodecltype第三章 字符串、向量和数组初始化方式第四章 表达式显示转换旧式强转第六章 函数默认实参inline可变形参initializer_list省略符形参尾置返回类型函数重载第七章 类成员函数非成员函数this返回*this动态绑定const成员函数(常量成员函数)基于const的重载class with pointer拷贝赋值函数拷贝构造函数array del

2021-03-04 18:21:48 899 1

原创 笔记:《Effective C++》

视C++为一个语言联邦C、Object-Oriented C++、Template C++、STL。从某个次语言切换到另一个,可能导致高效编程守则改变。尽量以const,enum,inline替换#define宁可以编译器替换预处理器。原因:宏定义的记号也许从未被编译器看到,编译出错时将因为追踪它而浪费时间。盲目替换可能导致目标码更大。常量定义式通常被放在头文件内(以便被不同的源码含入)。string通常比其前辈char*-based更合时宜。#define不

2021-03-04 18:18:53 378 1

原创 C++:Assignment to cast is illegal, lvalue casts are not supported

目录引言Example1Example2引言超级久没有写博客了,这次准备记录一个遇到的C++小错误,顺便水一篇…这个错误是:Assignment to cast is illegal, lvalue casts are not supported。该解释没有详细查证,如有错误,欢迎指正。直接放到百度翻译,结果是:对强制转换的赋值非法,不支持左值强制转换 。下面我将以两个例子为大家讲解这个报错原因。Example1#include <bits/stdc++.h>using na

2021-03-01 20:59:18 2439 3

原创 ubuntu安装draw.io

目录引言ubuntu安装draw.io创建ubuntu快捷方式和alias快捷方式alias强大的draw.io就这么装好了!引言这次大家带来一个跨平台的绘图神器——draw.io。这个强大的绘图软件可以用来画思维导图、UML图、流程图等等。当然也可以画数据结构作业的图了,最重要的是完全免费、开源的,并且相当好用,在多个平台提供桌面版,也可以直接在浏览器在线使用。具体的介绍可以参照其他人的博客:Draw.io—一款强大且支持在线编辑和到处的画图软件如果觉得麻烦可以使用网页版啦:draw.io网

2020-11-06 13:23:38 7702 4

原创 Linux系统编程:多线程交替打印ABC

引言分享关于线程的一道测试题,因为网上基本都是Java的解决方法,决定自己写一篇来记录一下线程的学习。问题描述编写一个至少具有三个线程的程序(称之为线程 A、B 和 C),其中线程 A 输出字符’A’,线程 B 输出字符’B’,线程 C 输出字符’C’。使得最终输出结果为“ABCABCABC…”。思路拿到这题后,我的想法是把问题简化。原题让我们交替打印ABC,那么我们只要先考虑如何交替打印AB即可,然后在B之后衔接C,在C之后衔接A即可。那么,如何使两个线程能够按照顺序去执行任务呢?关于线程

2020-07-21 22:16:06 2738

原创 C语言:迪杰斯特拉(Dijkstra)算法

目录引言算法思想实现代码引言日常生活中,当我们出去旅游、办事等等,面对陌生的环境,我们常常需要规划自己的路线,来使移动的距离最短或是开销最低。那么,今天给大家简单介绍一种针对有向网图的最短路径算法——迪杰斯特拉算法。最短路径:即起点和终点之间经过的边上权值(Weight)之和最小的路径算法思想迪杰斯拉算法类似贪心算法实现本篇图的存储采用邻接矩阵(Adjacency matrix)代码...

2020-07-17 20:48:18 6159 2

原创 新人向:LZW压缩算法(C语言)

目录引言压缩解压缩代码参考引言今天给大家介绍一种常见的压缩算法——LZW压缩算法。LZW算法的基本原理为:通过构建一个字典,在该字典中用不同的编码去表示不同字符串,从而达到节省空间的目的。例如:我有一个字符串"abcdabcdabcd",共占12字节,如果我有一个字典,里面用1来代表"abc",那么只需令编码表(我们称之为key[])中存放三个1即可,倘若我们同样使用char类型,原来的字符串就由12字节压缩至3字节。下面我将为大家介绍压缩和解压缩的具体过程。压缩压缩是一个一边推导字典,一边记

2020-06-19 17:53:25 2879

原创 Linux网络编程:简易客户端和服务端的实现

Directory通信流程服务端客户端一些小问题服务端代码客户端代码通信流程服务端socket()—>创建套接字(用于监听)bind()------>绑定地址结构listen()----->设置最大监听套接字数量accept()---->阻塞等待客户端连接(返回一个新的套接字用于通信)read()------->读取数据foo()--------->处理数据write()------->写回数据close()------->返回第5步或结

2020-06-11 22:09:28 1539

原创 Linux系统编程:生产者消费者问题

Description生产者消费者共享缓冲区,生产者向缓冲区中放数据,消费者从缓冲取中取数据,当缓冲区中被放满时,生产者进程就必须进入挂起状态,直到消费者从缓冲中取走数据时,生产者才能继续向缓冲区中存放数据,同样当缓冲取中没有数据时,消费者进程就必须进入挂起休眠状态,直到生产者向缓冲区中放入数据时,消费者才能被唤醒继续从缓冲区中取走数据。分析首先介绍我相对熟悉的sem写法:用数组并对其下标进行简单的%操作来实现环形数组,用于生产/消费产品。该写法的核心是定义两个sem,一个用来表示剩余可容纳的产

2020-06-06 19:30:35 1682

原创 Linux系统编程:哲学家问题

Description有五个哲学家绕着圆桌坐,每个哲学家面前有一盘面,两人之间有一支筷子,这样每个哲学家左右各有一支筷子。哲学家有2个状态,思考或者拿起筷子吃饭。如果哲学家拿到一只筷子,不能吃饭,直到拿到2只才能吃饭,并且一次只能拿起身边的一支筷子。一旦拿起便不会放下筷子直到把饭吃完,此时才把这双筷子放回原处。如果,很不幸地,每个哲学家拿起他或她左边的筷子,那么就没有人可以吃到饭了。分析该问题涉及Linux系统编程中经典的线程同步问题。本篇采用信号量sem来实现。信号量sem相当于进阶版的mute

2020-06-06 19:12:43 854

原创 新人向:KMP字符串匹配算法

Directory新人向系列引言KMP算法思想最长公共前后缀算法步骤代码Reference新人向系列本人之前几乎未接触过算法,这个系列送给跟我一样的小白。如果有想学的算法可以留下评论,我会试着去学然后总结出博客,这个系列尽量周更,共勉引言很久没有更新了(因为这段时间确实很混)这次算法小白给大家介绍一个KMP字符串匹配算法。一看到字符串匹配,我就想起了以前做过的一种暴力破解的方法(也是唯一我能自己想到的做法)。对了,为了方便起见,这篇博客中,我们把需要找的字符串我们称之为pattern,从什么地

2020-06-02 01:20:35 250

原创 Linux系统编程:my_ls(l、R、A、r、n、h、i、颜色的实现)

参数的解析输出对齐

2020-04-02 10:36:55 719 2

原创 LinuxC编程实战学习笔记(一)

目录4.5 调试器gdb4.5 调试器gdbPage:95 - 104/* 启动 */$ gcc -g test.c -o test //-g参数必须加$ gdb test //gdb 程序文件名 加上-q参数不输出版权说明$ gdb -q //也可以直接输入gdb,用file命令装入需要调试的程序(gdb) file test //(...

2020-03-29 15:38:14 331

原创 鸟哥的Linux私房菜学习笔记(一):文件、目录与磁盘格式

目录第6章 Linux的文件权限与目录配置第7章 Linux文件与目录管理第6章 Linux的文件权限与目录配置Page: 139-160Linux是一个多用户、多任务的系统,因此可能常常有多人同时使用这台主机来工作,考虑到个人隐私和喜好,文件所有者这个概念的就显得很重要了。每个账号都可以有多个用户组支持。root是万能的“天神”。出现“Permission deny”是权限设置错误...

2020-03-27 23:27:23 227

原创 西邮Linux兴趣小组2017-2019纳新题题解

目录201720171. 分析下列程序的输出。int main(int argc, char *argv[]){int t = 4;printf("%lu\n", sizeof(t--));printf("%lu\n", sizeof("ab c\nt\012\xa1*2"));return 0;}输出:411sizeof()返回操作数占用内存空间的大小,int类型是4...

2020-03-07 00:15:28 694

原创 C语言:链表的三种传递信息方式

目录引言传参的三种方式一、全局变量引言当时看浙大翁恺老师的课时一直有一个关于链表的问题没有解决。问题大致如下:在这里插入代码片传参的三种方式一、全局变量这种方式是最简便...

2020-02-29 23:37:36 2503

原创 C语言:feof函数的坑

目录引言feof()函数引言做课设的时候踩到这个坑,跟大家分享一下feof()函数看一下下面的代码#include<stdio.h>int main(){ FILE *fp = fopen("try", "w"); if (feof(fp) == 1) puts("文件已结束"); else puts("文件未结束"); return 0;}输出:...

2020-02-28 22:40:14 1307

原创 C语言大一课设:旭日苑菜品管理系统

目录引言做课设的经验代码引言大一上学习了C语言以后老师布置了一个课设任务,然后我写的是旭日苑菜品管理系统,旭日苑是我们学校最好吃的食堂哈哈哈(没有之一)。顺便介绍一下我们学校,我们学校是全国第四的邮电大学,又称皇家邮电大学。(反正就是很厉害),那么话不多说就上代码啦。做课设的经验写一个模块测试一个模块(放到新的main函数里测试)有良好的逻辑,建议先写菜单函数链表使用时一定要注意边界...

2020-02-28 22:26:14 1228 7

原创 C语言:简单的Linux版登录系统

目录引言题外话代码引言很长时间没有更新博客啦,这段时间也比较堕落,希望大家引以为戒…这次给大家带来一个简单的Linux版登录系统,因为要写课设所以我先写了这个,把它放上来分享给各位。题外话一、因为代码里面用了Linux shell的一些指令所以Windows系统下面无法正常运行。并且gcc编译器没有conio.h这个库(因为它不是标准库),所以我用了网上找到的一个自定义函数来代替getc...

2020-02-21 21:24:48 1855 1

原创 高数:微分中值定理&介值定理证明题浅析

目录引言定理介值定理罗尔定理拉格朗日中值定理柯西中值定理例题引用材料写在后面引言笔者是一名大一学生,在学习高数时发现定理应用证明题挺有意思的,下面将自己的一些的心得和笔记整理如下,与大家分享交流,因为水平有限,难免有错误和考虑不周全之处,请大家见谅。这篇博客主要是给跟我一样的大一学生学术交流(应付期末考试)用的。定理介值定理罗尔定理如果函数f(x)满足(1)在闭区间[a,b]上连续...

2020-01-01 14:56:36 12121

原创 C语言:缓冲区及字符串的输入与输出

引言字符串在大多数编程语言中都有着举足轻重的地位,在C语言中,字符串亦是如此.本篇博客将简单介绍一下缓存区的概念和几个跟字符串输入输出有关的函数.一、缓冲区概念系统为了加快程序运行的速度预留出来的、暂时置放输出或输入资料的一块内存空间为什么需要缓冲区程序运行时,在CPU中控制单元控制下,计算机从磁盘中读取对应的数据。但是与内存相比,磁盘的读写速度是很慢的,如果我们每次获取数据都从磁盘...

2019-12-30 22:19:02 4399

原创 C语言习题:Digital Roots

题目Digital RootsJK学长想对整数的数字求和来找到正整数的数字根。整数根的定义如下:如果结果值是单个数字,则该数字是数字根。如果结果值包含两个或更多个数字,则对这些数字求和并重复该过程。只要需要获得一位数,这就会继续。例如,考虑正整数24.加上2和4得到值6.由于6是单个数字,6是24的数字根。现在考虑正整数39.加上3和9的收益率12.由于12不是一个数字,因此必须重复该过程。...

2019-12-15 21:39:18 909 1

空空如也

空空如也

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

TA关注的人

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