杂记

不乱


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

缓存问题和解决方案-缓存穿透/缓存击穿/缓存雪崩

发表于 2020-11-13 | 分类于 cache | 阅读次数:

摘抄自(https://blog.csdn.net/kongtiao5/article/details/82771694)

缓存处理流程

前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。

缓存穿透

阅读全文 »

数字编码

发表于 2019-03-18 | 分类于 remember | 阅读次数:

功能说明

  • 这是本人出于兴趣完善的背诵数字编码的小工具.
  • 仅供学习使用
  • 编码内容没有上传到任何公共平台保存
  • 只限在学习群内使用
  • 本人强迫症,后续可能会有更新,但是应该不会再发出来了,更新会提交到数字编码这里,有需求可以自取(欢迎提bug,或者推送更新过来)
  • 代码随便改
  • 写完这个工具的我大概编码已经比较熟练了o(╯□╰)o

Q&A

  • 使用平台

    因为是网页,所以本质是全平台的,但是这边主要为手机做的优化显示,因为电脑上看起来也很正常.

  • 卡顿

    集成图片后,页面可能比较大,没有好办法,建议机器跑不动使用以前没有图片的版本

  • 界面显示错乱

    已修正,原因是加载外部链接js脚本没有加载成功导致的.

  • 乱码

    页面使用UTF-8编码,应该是最通用的编码,如果看起来文字不正常,请尝试切换浏览器查看(如果理解原理,可以自行修改文件编码修复乱码)(理论上目前应该没有乱码了)

  • 哪里可以获取到更新那?

    github地址:数字编码,当然,这里是没有数字编码图片信息的,我根本就没有上传

  • iphone可以使用吗?

    我就是用iphone打开的,使用百度app或者直接使用内置的备忘录都可以直接打开

  • 安卓可以用吗?

    看群里的反应应该是可以用的~一个页面而已,理论上应该很通用的.(据说qq浏览器可看)

版本信息

V0.0.7

  • 增加自动播放功能

V0.0.6

  • 调整界面显示
  • 增加”反微信”弹窗功能(就是答题的时候挡住了看不到题目)

V0.0.5

  • 图片显示功能添加,base64编码显示图片(就直接放在最后面了,能用就行了)
  • 界面调整
  • 随机/顺序/倒序功能开放
  • 添加说明页面(README.md还是没有)
    阅读全文 »

pprof简述

发表于 2019-03-04 | 分类于 cpp , profiler | 阅读次数:

pprof是google的测试c++代码性能的工具
(valgrind,callgrind同样可以分析)

输出内容

  • 函数cpu耗时百分比
  • 函数调用次数

makefile需要添加库引用

-lprofiler

输出途径

  • 全程序整体分析
    • env LD_PRELOAD="/path/to/libprofiler.a" CPUPROFILE=gmon.out ./执行程序名
    • 注:要生成文件必须要程序正常退出才行,如果是信号触发的退出,必须在信号处理中加入ProfilerStop()函数的调用才能生成分析文件
  • 指定代码段分析
    • 开始处调用函数ProfilerStart("gmon.out")
    • 结束处调用函数ProfilerStop()

将输出结果转化为pdf可是图片

pprof --pdf ./运行程序名 gmon.out > XXX.pdf
查看分析生成的pdf即可

leveldb源码阅读-options

发表于 2019-02-15 | 分类于 leveldb | 阅读次数:

功能

配置文件统一的文件
配置文件因为比较常用,紧接着会补齐配置文件中的TODO内容,
把各个参数的作用都理解和写清楚

源文件

options.h
util/options.cc

CompressionType

db包含了一组set的block
block是用于存储连续键值对的
block是从硬盘读取到内存的单个最小单位
block最终会存储在file文件中
block在存储在file中前,
可能会使用某种方法进行压缩处理,
这个枚举是用于表示block采取了那种压缩方法的

1
2
3
4
5
6
enum CompressionType {
// NOTE: do not change the values of existing entries, as these are
// part of the persistent format on disk.
kNoCompression = 0x0,
kSnappyCompression = 0x1
};
阅读全文 »

leveldb源码阅读-db

发表于 2019-02-15 | 分类于 leveldb | 阅读次数:

功能

定义了统一使用的数据库接口
规定了该类型的数据结构存储了有序键值对集合
同时内部保证了线程安全,外部无需关心线程安全问题
接口类,内部实现没有看到,所以有很多TODO待后续阅读到相关代码补全

源文件

db.h

相关类

SnapShort

抽象类
记录特定状态的DB

1
2
3
4
class LEVELDB_EXPORT Snapshot {
protected:
virtual ~Snapshot();
};
阅读全文 »

leveldb源码-slice

发表于 2019-02-14 | 分类于 leveldb | 阅读次数:

功能

常用的参数,
本质就是指针+长度组成的字符串数组
但是内部不会申请内存,
只是引用外部的指针地址内容
二进制安全的字符串

源文件

slice.h

阅读全文 »

leveldb源码-Status

发表于 2019-02-12 | 分类于 leveldb | 阅读次数:

功能

  • 用于操作结果的返回
  • 标记操作状态的成功与失败
  • 失败时有相应的描述信息

源文件

leveldb/status.h
leveldb/util/status.cc

内部枚举定义

1
2
3
4
5
6
7
8
enum Code {
kOk = 0,
kNotFound = 1,
kCorruption = 2,
kNotSupported = 3,
kInvalidArgument = 4,
kIOError = 5
};

属性

  • private
    • const char* state_,用于记录错误具体信息
      • 默认为nullptr
      • 如果为nullptr,则表示状态为kOk正常
      • 格式:
        • [:3]:后续错误信息字符串的整体长度(不包含长度记录和错误号字节)
        • [4]:错误号(Code的枚举)
        • [5:]:错误文字信息
          • 最多由两段错误信息拼接而成
          • 两段文字中间使用连个字节: 分割
阅读全文 »

leveldb源码阅读-c11相关知识整理

发表于 2019-02-12 | 分类于 leveldb | 阅读次数:

因为leveldb源码中大量的运用了c11的知识点,不懂的话是要仔细看看的
这里做了一下总结的功能和记录
会根据我看到的内容慢慢扩展

noexcept

标记在函数的()后面,表示希望函数无异常抛出,如果函数抛出任何异常,则会报错crash

  • 这里说的是修饰符版本,不是操作符版本
  • 操作符版本会根据函数是否有noexcept修饰过来返回bool类型值表示是否期望无异常抛出

临时变量的简单说明

简单的说,我们能够看到的命名变量都不是临时变量

&&参数的右值引用

在拷贝构造函数与赋值函数中会大量使用右值引用的优化
使用右值引用可以有效减少构造函数的调用
右值引用的本质是将临时参数对象的值交换给实际上有效的对象
而不是复制一份新的给对象
系统会自动判断,如果参数是临时变量,
则会优先调用右值引用优化处理的函数,
如果找不到,则会自动调用普通的函数处理.
非临时变量全部是调用普通的函数处理.

普通的声明

1
2
Status(const Status& rhs);
Status& operator=(const Status& rhs);

使用右值引用的声明

1
2
3
4
5
6
Status(Status&& rhs) noexcept : state_(rhs.state_) { rhs.state = nullptr; }
Status& operator=(Status&& rhs) noexcept;
inline Status& Status::operator=(Status&& rhs) noexcept {
std::swap(state_, rhs.state_); // 注意:这里是交换,没有复制
return *this;
}

注意:

  • 右值引用优化需要和普通的老版本标准函数结合使用,最好不要单独使用,否则会出现无法复制非临时变量的对象
  • 右值引用的函数参数不是const,这里要注意,因为交换时实际是修改了参数的内容的
阅读全文 »

leveldb源码阅读-简述

发表于 2019-02-12 | 分类于 leveldb | 阅读次数:

一直都觉得leveldb的源码不是很好读,
一直都在拖延,
现在抽出时间,
根据自己的阅读,
做下笔记记录,
希望能够理解学习到其中的内容.

一些补充说明

  • 关于源码版本,以前下载导入到工程的一个版本,具体的不知道,后面看到了补上来吧.不确定新旧.
  • 源码中大量运用了c11的知识点,不懂的话是要仔细看看的

简单的makefile示例(不使用shell系统命令的版本)

发表于 2018-11-23 | 分类于 cpp | 阅读次数:

简单的makefile示例
没有使用系统命令
所以平台通用
但是需要手动调整添加新增的目录

阅读全文 »
12…6<i class="fa fa-angle-right" aria-label="下一页"></i>

59 日志
14 分类
29 标签
GitHub
© 2018 — 2020 Pan
由 Hexo 强力驱动
|
主题 — NexT.Gemini v6.1.0