自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(190)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 CPU0文件解析系列--第一章--概述

【代码】CPU0文件解析系列--第一章--概述。

2023-07-10 16:42:43 143

原创 CPU0 verilog代码全注释

【代码】CPU0 verilog代码全注释。

2023-07-10 10:23:43 289

原创 从一行c代码到0101(LLVM,RISCV)

本文希望力求精简的解释一行c代码是如何变成一段二进制编码,又是如何进入cpu被执行的。

2023-07-05 17:30:38 321

原创 bind(0)导致的临时端口用尽引发的思考(IP_BIND_ADDRESS_NO_PORT)

tips:本文使用的Linux源码版本为3.10.20,最新的版本已经对本文描述的问题做了优化。tips:本文不讨论扩大Linux可用端口范围、SO_REUSEADDR、SO_REUSEPORT等优化方法,仅讨论patch:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=90c337da...

2018-09-27 17:31:16 5471

原创 记录一个诡异的函数调用返回错误的指针bug

//main.c#include "test.h"void main(){ S* s = get_struct_s(); printf("%s\n",s->name); return 0;}//test.htypedef struct S_{ ... char name[8];} S;S* s_array[10];//test.c#inc...

2018-05-30 15:20:33 391

原创 编译错误storage class specified for parameter XXX

考虑如下两个头文件test.h和main.h//test.h#include<stdio.h>void add(int a, int b)//main.h#include"test.h"typedef struct A_{ int data;} A;void del(int a);编译器编译时,会将main.h内include的文件展开,即main.h变为://ma...

2018-02-26 09:09:47 26400 4

转载 SQL Injection绕过技巧

来源:https://www.cnblogs.com/joy-nick/p/5774462.html0x00 sql注入的原因sql注入的原因,表面上说是因为 拼接字符串,构成sql语句,没有使用 sql语句预编译,绑定变量。但是更深层次的原因是,将用户输入的字符串,当成了 “sql语句” 来执行。比如上面的 String sql = "select id,no from user where i...

2018-02-19 11:55:58 732

原创 实验吧---简单的登陆题(CBC字节翻转攻击)

具体原理就不介绍了,百度上很多,直接放代码。因为用python3执行pcat大神的脚本出现很多语法和编码问题,所以打算用php脚本重写一遍攻击过程。第一步:填写0 2nion select * from((select 1)a join (select * from you_want)b join (select 3)c);%00提交后取得返回的cipher,替换php中的字符串,执行php文件,...

2018-02-18 20:43:27 3828 2

原创 windows php7添加openssl支持

网上有许多教程,但是如果下载的是php7的压缩包,解压后需要重命名目录下的php.ini-production为php.ini,并拷贝到C:\windows。然后再照着其他教程在php.ini中进行关于openssl支持的修改。...

2018-02-18 11:12:38 3698 1

原创 初识Linux栈溢出攻击

初识Linux栈溢出攻击0x00 限定条件1、关闭aslr(Address Space Layout Randomization)  开启aslr后,应用程序或动态链接库装载时,系统会随机设定其装载基址。这样就避免了攻击者事先预知特定函数的入口地址。ubuntu下的关闭命令为echo 0 >/proc/sys/kernel/randomize_va_space,该命令需要事先通过su提升到root

2017-10-21 16:08:21 898

原创 C++多态:深入CRTP,理解编译期的多态

虚函数带来的额外CPU消耗 考虑如下的代码:class D {public: int num; D(int i = 0) { num = i; } virtual void print() { cout << "I'm a D. my num=" << num << endl; }};class E :public D {public: E(int i = 0

2017-06-08 11:20:51 1061

转载 Likes Dislike Improving Performance in C++ with Compile Time Polymorphism

来源:https://www.gamedev.net/resources/_/technical/general-programming/improving-performance-in-c-with-compile-time-polymorphism-r2015Virtual functions are one of the most interesting and useful features

2017-06-08 08:57:06 340

原创 C++多态:深入虚函数,理解晚绑定

C++的多态特性是通过晚绑定实现的。晚绑定(late binding),指的是编译器或解释器程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需要检查对象是否支持特性和方法即可。  在C++中,晚绑定通常发生在使用virtual声明成员函数时。此时,C++创建一个虚函数表,当某个函数被调用时需要从这个表中查找该函数的实际位置。通常,晚绑定也叫做动态函数分派(dynamic disp

2017-05-26 09:34:39 1379

原创 STL:深入mem_fun

mem_fun所用的模板的具体化 仿函数是一种具有函数特质的对象,由于内部重载了括号操作符(),所以调用者可以像使用函数一样使用仿函数。 mem_fun()是一个适配器(adapter),该函数能将类的成员函数包装成仿函数使用,于是成员函数可以搭配各种泛型算法完成所谓的多态调用。 具体例子如下面的代码所示。用vector<D*>存放E和F的指针,在泛型算法for_each()中使用D的成员函数p

2017-05-24 18:32:23 1991

转载 MongoDB是如何实现事务的ACID?

原文地址:http://www.ywnds.com/?p=6386&viewuser=33MongoDB ACID事务支持这里要有一定的关系型数据库的事务的概念,不然不一定能理解的了这里说的事务概念。下面说一说MongoDB的事务支持,这里可能会有疑惑,前面我们在介绍MongoDB时,说MongoDB是一个NoSQL数据库,不支持事务。这里又介绍MongoDB的事务。这里要说明一下

2017-05-09 19:02:51 15046 1

翻译 MongoDB_Architecture_Guide(MongoDB架构指导个人翻译)

完整文档见我的资源:http://download.csdn.net/detail/popvip44/9830094 “MongoDB并不是一个闭门造车得到的产物。我们基于我们自己设计大规模,高实用性,稳定系统的经验,构建了MongoDB。我们并不是从头开始设计,而是在已有的系统中找到被破坏的地方,然后修补它们。所以我认为,如果你学习过MySQL,然后把关系数据模型转换为基于文件的数据模型,你将获

2017-05-01 17:19:05 606

原创 sqlite锁机制概述

sqlite的锁的粒度比较粗,是数据库级别的,也就是说即使只是对某个页进行读写操作,sqlite也会封锁整个数据库。这种策略降低了读-写事务和写-写事务间的并发程度,但是大大简化了程序设计,减小了整个程序的大小。所以,sqlite的适用场景为:较少次写入数据,大量、多次读出数据。这也是sqlite作为一款嵌入式数据库的设计初衷。读、写事务获取锁的过程sqlite读事务获取锁的过程:UNLOCKED-

2017-04-04 11:08:37 3230

原创 索引并发(蟹行协议和B-Link树)

索引并发事务的并发问题可以通过两阶段封锁协议(2PL)或者多版本并发控制(mvcc)等方法解决。这些方法也同样适用于索引的并发访问控制。但是,由于索引访问频繁,它们将成为封锁竞争的集中点,导致低并发度。对事务而言,对一个索引查找两次,并在期间发现索引结构发生变化,这是完全可以接受的,只要索引查找返回正确的元组集。因此,只要维护索引的准确性,对索引进行非可串行化井发存取是可接受的。蟹行协议● 当搜索一

2017-02-26 20:54:27 2940

转载 SQLite剖析之事务处理技术

原文章地址:http://www.cnblogs.com/5211314jackrose/p/5818124.html前言  事务处理是DBMS中最关键的技术,对SQLite也一样,它涉及到并发控制,以及故障恢复等等。在数据库中使用事务可以保证数据的统一和完整性,同时也可以提高效率。假设需要在一张表内一次插入20个人的名字才算是操作成功,那么在不使用事务的情况下,如果插入过程中出现异常

2017-02-09 16:51:07 1303

原创 事务并发控制

一、三类并发问题及四种事务隔离级别首先介绍三类并发问题: 1.脏读:一个事务读到另一个事务未提交的更新数据(A和B事务并发执行,B事务执行更新后,A事务查询B事务没有提交的数据,B事务回滚,则A事务得到的数据不是数据库中的真实数据。也就是脏数据,即和数据库中不一致的数据)。 2.不可重复读:一个事务读到另一个事务已提交的更新数据(A和B事务并发执行,A事务查询数据,然后B事务更新该数据,A再

2017-02-08 19:07:16 593

原创 K-th Smallest in Lexicographical Order

依次逐渐确定前缀,每次计算当前前缀下不超过n的个数,若个数超过k,则说明第k个数在当前前缀下,反之,则说明在当前前缀加1以后的前缀;以first为前缀的数[first,first+1][first*10,(first+1)*10][first*100,(first+1)*100]class Solution {public: int findKthNumber(

2017-01-11 14:53:45 338

原创 Word Break II

dp+dfsclass Solution {private: //DFS path build function void buildPath(vector& isBreakable, string &s, int pos, vector &res, string curP, vector& wordDict, int minlen, int maxlen) { int i, len

2017-01-10 11:00:42 210

原创 MDB文件分页类型和格式

page1:0    16    “MDB format 0”  16      4        first freelist page20      4        number of free pages24      1        b+树节点类型,0x0d表示叶子节点,0x05表示内部节点25      2        剩余可用空间  emptyPage:fe5

2017-01-08 19:17:39 1015

原创 Dungeon Game

网上都是从右下角向左上角进行dp的,我想了想,从左上角开始应该也可以,只不过要加边界判断条件(是否碰到dungeon的上边界或者左边界),很麻烦,从右下角开始确实简便了很多class Solution {public: int calculateMinimumHP(vector > &dungeon) { int M = dungeon.size(); int N = dungeo

2017-01-08 09:57:11 344

原创 Arithmetic Slices II - Subsequence

越往后做题越难了啊,像这种题不看答案根本没头绪嘛,其实看个几天逐步推导应该也能有个大概思路,可惜最近真的没时间记个discuss统一认同的答案吧class Solution {public: int numberOfArithmeticSlices(vector& A) { if (A.empty()) return 0; vector> dp(A.size());//[i

2017-01-07 10:20:00 269

原创 Shortest Palindrome

暴力破解思路:补充完成之后的回文串中心必定在原字符串中----原字符串以第一个字符为起点必然存在至少一个回文串(长度可以为1)----找到原字符串中以第一个字符为起点最长的回文串----把剩余部分的翻转补充到原字符串头部。优化方法:1、求字符串s的翻转s_rev2、将两个字符串进行拼接:{s}#{s_rev}3、找出新字符串中最长公共前缀后缀长度comLen4、s_rev.su

2017-01-06 10:05:37 198

原创 Longest Valid Parentheses

有效括号子串有很多,不是连续的,所以不是一般的动态规划(一般dp的时间复杂度是O(n^2)),是断开的动态规划,回溯的时候只需要回溯一步for any longest[i], it stores the longest length of valid parentheses which is end at i.And the DP idea is :If s[i] is '('

2017-01-05 09:49:00 176

原创 MDB中cell的格式

cell存储(key, value)键值对,由于MDB目前只支持uint32_t键值和string数据,所以直接在key size中用变整型数据格式存储uint32_t类型的键值key,在data中存储字符串的ascii格式。payload header保存的是包括payload header和data type的byte数,data type是存储的数据格式,参考了sqlite的表示方法,用整数

2017-01-04 16:59:21 291

原创 Find Median from Data Stream

中位数----两个部分----两个堆贴一份discuss中优雅的代码class MedianFinder { priority_queue small, large;public: void addNum(int num) { small.push(num); large.push(-small.top());//负数模拟大根堆 small.pop(); if (s

2017-01-04 09:16:04 185

原创 Regular Expression Matching

/*** f[i][j]: if s[0..i-1] matches p[0..j-1]* if p[j - 1] != '*'* f[i][j] = f[i - 1][j - 1] && s[i - 1] == p[j - 1]* if p[j - 1] == '*', denote p[j - 2] with x* f[i][j] is true iff any

2017-01-03 14:59:44 177

原创 Minimum Window Substring

窗口子字符串的一般处理方法是用两个指针夹住子字符串,然后移动遍历,暴力搜索class Solution {public: string minWindow(string S, string T) { vector srcHash(255,0); // 记录目标字符串每个字母出现次数 for (int i = 0; i < T.length(); i++) { srcHas

2017-01-02 16:53:39 213

原创 Perfect Rectangle

http://www.cnblogs.com/grandyang/p/5825619.htmlclass Solution {public: bool isRectangleCover(vector>& rectangles) { unordered_set st; int min_x = INT_MAX, min_y = INT_MAX, max_x = INT_MIN, m

2017-01-01 09:47:42 244

原创 Self Crossing

有三种情况:螺旋扩大  螺旋缩小  先螺旋扩大再螺旋缩小下面是第三种情况的示意图: +------------+ +---------+ | | | |

2016-12-30 11:32:06 506

原创 Create Maximum Number

找了一份比较清晰的解释,DP+贪心:https://discuss.leetcode.com/topic/32252/c-dp-greedy-solution-should-be-easy-to-understand/5最近没空仔细研究了,记录一下二刷的时候认真看看class Solution {public: vector maxNumber(vector& nums1, vec

2016-12-29 10:39:01 242

原创 Interleaving String

看到一句话:“When you see string problem that is about subsequence or matching, dynamic programming method should come to your mind naturally. ”class Solution {public: bool dp[101][101]; bool isI

2016-12-27 19:18:50 210

原创 Palindrome Pairs

尝试着理解了一下Trie树,原理解释见:https://discuss.leetcode.com/topic/39585/o-n-k-2-java-solution-with-trie-structure-n-total-number-of-words-k-average-length-of-each-word我把代码改成了C++,使用了shared_ptr,做了简单的注释,已经ACc

2016-12-26 19:28:47 207

原创 First Missing Positive

O(n)时间复杂度,const space对于hard的题,时间复杂度有很大可能其实是O(kn)或者O(n+logn),const space要不是原地排序,要不是在const space中存储大量的信息(这种情况大多数时候是通过数学方法简化原问题推导出来的) 思路:交换数组元素,使得数组中第i位存放数值(i+1)。最后遍历数组,寻找第一个不符合此要求的元素,返回其下标。整个过程需要遍

2016-12-25 10:32:55 182

原创 Basic Calculator

用sign把算术运算符+ -和单个数前的负号分开了class Solution {public: int calculate(string s) { // the given expression is always valid!!! // only + and - !!! // every + and - can be flipped base on it's depth i

2016-12-22 22:40:09 227

原创 The Skyline Problem

multimap, multiset, map, set的底层实现都是红黑树,减少查询时间的同时还可以进行排序,相对于优先队列的优点是可以修改元素,其实优先队列也可以修改元素,只不过修改后需要重新排列一次,discuss中也有很多人用优先队列的,也有一些人用优先队列加哈希表进一步优化时间复杂度这里对输入的vector做了预处理,便于解析左右节点class Solution {public

2016-12-21 20:49:10 296

原创 Maximal Rectangle

按行划分,构造柱状图,用单调递增栈法求柱状图的最大矩形我觉得自己不会写得比这位大神通透了,贴上他的两篇博文:http://blog.csdn.net/doc_sgl/article/details/11805519http://blog.csdn.net/doc_sgl/article/details/11832965

2016-12-18 22:29:06 181

MongoDB_Architecture_Guide(MongoDB架构指导)(个人翻译版)

为了学习Mongodb自己翻译的材料

2017-05-01

Inside SQLite(SQLite技术内幕) 原版+个人翻译版

个人独立翻译的《Inside SQLite》。由于时间仓促,自己也是初学者,有许多地方实在是不尽如人意,最近比较忙,之后有时间的话会修订一次。欢迎任何形式的转载、修订。希望能和大家一起学习。

2016-10-14

opengl入门

两个初学opengl时做的小程序,分别实现正方形和正方体的旋转,都详细注释了,完全原创,希望帮助到学习opengl的人

2014-12-02

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

TA关注的人

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