自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hhh_2333

just for fun

  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 归并排序中使用Fork/Join框架与普通多线程的比较

从实验结果上来看,归并排序中使用Fork/Join框架比使用普通多线程在效率上有了一定的提高。更重要的是,使用Fork/Join框架的程序会更具有健壮性。多线程的归并排序中,线程数量会随着递归层级的深入而爆炸式的增长,因此要严格限制递归层级的深度。而在Fork/Join框架中,工作线程的数量可以预先定义,在算法实现时只需要考虑每个任务的粒度大小,而这同样是多线程的归并排序所需要考虑的。此外,使用Fork/Join框架的代码更易读易写,能更好适配采用分治策略的算法。

2022-10-26 10:28:10 305 1

翻译 Java的Fork/Join框架

Doug Lea 的 A Java Fork/Join Framework论文在有一类并发编程中,问题被(递归地)分解为多个子问题,每个子问题被并发处理,所有子问题结果的组合则是该问题的解决结果。Fork/Join框架可以支持该类并发编程,其主要的实现技术围绕高效构建和管理任务队列和工作线程。

2022-10-24 20:03:45 398

原创 排序算法之多线程实现

在排序算法中,归并排序(Merge Sort)采用了经典的分治(divide-and-conquer)策略,并且具有并行的特征。如下是归并排序算法串行执行的Java代码:

2022-09-12 16:38:08 885

原创 设计模式学习笔记

单例模式、简单工厂模式、观察者模式

2022-09-10 10:11:15 104

原创 二叉树的序列化与反序列化(leetcode格式)

在二叉树中,序列化是将二叉树转化为字符串,方便数据的存储和传输;而反序列化是将字符串重构得到原来的二叉树,如图所示:

2022-05-26 16:38:49 445

原创 身份基加密方案的安全性证明

在上一篇博客中,介绍了Boneh-Franklin的基于身份的加密方案,准确地说,是介绍了Boneh-Franklin论文中最基础的方案——BasicIdent。在这篇博客中,主要论述BasicIdent可以抵抗选择明文攻击(chosen plaintext attacks, CPA),但不可以抵抗选择密文攻击(chosen ciphertext attacks)。

2021-04-10 11:21:39 1288 5

原创 Boneh-Franklin的基于身份的加密方案

本篇博客主要讲Boneh和Franklin两人所提出的基于身份的加密方案(Boneh-Franklin identity-based encryption, BF-IBE)。第一节我会简单的介绍双线性映射,这是构造BF-IBE方案的重要数学工具。之后我会以Elgamal加密方案为例子,分析传统的公钥密码所存在的问题。最后引出BF-IBE方案的具体构造,阐明其具有的优越性。

2021-03-27 20:28:07 3666

原创 线性秘密共享方案(LSSS)矩阵的构造

线性密钥分享方案(LSSS)矩阵的构造基于属性加密(Attribute-Based Encryption, ABE)中有一个很重要的概念就是访问控制策略。具体到密文策略属性基加密(Ciphertext-Policy Attribute-Based Encryption, CP-ABE)方案中:方案存在着若干的属性,明文在一定的访问控制策略下被加密成密文;属性满足密文策略的用户就可以对密文进行解密。

2020-11-15 14:47:55 14646 14

原创 可证明安全

语义安全表示为攻击者即使已知某个消息的密文,也得不出该消息的任何部分信息,即使是1比特的信息。在完美保密性中,对于等长的消息m,m属于可被该加密算法加密的消息空间,当m用密钥k加密后,加密结果无法得到m的任何信息。

2020-06-17 13:14:37 2906

原创 操作系统的启动

BIOS(Base Input & Output System, 即基本输入输出系统)是计算机上第一个运行的程序,它的运行是计算机开机后由硬件唤醒的。由于BIOS代码所做的工作基本上是不变的,正常情况下不会修改,所以BIOS代码存放在ROM(read only memory, 即只读存储器)中。此ROM映射在低端1MB内存的顶部,即地址0xF0000~0xFFFFF

2020-03-23 14:49:46 295

原创 顺序表

顺序表是线性表的顺序存储。它是用一组地址连续的存储单元依次存储线性表中的数据元素,表现为逻辑上相邻的两个元素在物理位置上也相邻

2020-01-15 14:51:09 307

翻译 Go切片(slices)

Go语言的切片(slices),可以高效且方便的处理同类型的数据序列数组在了解切片之前需要先了解数组一个数组的定义需要指定长度和元素类型比如说,[4]int 表示一个存储四个整数的数组。 数组的长度是固定的。长度是数组类型的一部分,因此 [4]int 和 [5]int 是完全不同的类型。 数组可以使用索引方式访问,表达式 s[n] 访问数组的第 n 个元素(从0开始计数)var ...

2019-04-08 18:33:49 764

原创 SMTP协议

SMTP( Simple Mail Transfer Protocol, 简单邮件传输协议 )一封邮件是由信封和内容构成信封包含发送者地址、传输模式、一个或多个接收者地址内容使用头部和主体组成头部的结构是键/值对的集合,并且必须是使用US ASCII进行编码主体是文本结构,通常使用US ASCII编码,但一些扩展(比如MIME)放开了这种限制连接网易SMTP服务器...

2019-04-04 09:44:28 1996

原创 用PHP写一个Redis客户端

Redis客户端的核心就是实现RESP协议,在Redis 2.0中,RESP协议已经成为和Redis服务通信的标准协议。

2019-03-02 15:47:15 459

原创 流水线技术(pipeline)在Redis中的应用

Redis客户端通过TCP连接或者类似的面向流的连接来和服务器端进行通讯通常情况下:客户端发送命令到服务器端,并等待服务器端的返回;服务器端接收到命令,并完成响应操作,发送处理结果数据给客户端;这样就完成了完成了一次请求/响应在我们使用Redis时,客户端一般一次只发送一个命令,举个例来说:客户端服务器端set key valueOKget keyvalue客户端服务器端这样的模式适用于很...

2019-03-01 15:55:27 329

原创 令人头疼的JavaScript对象

对象创建创建对象的方式有两种第一种是使用对象字面量的方式,也就是声明形式let obj = { key: value //...}第二种是使用构造方式let obj = new Object()obj.key = value这两种方式虽然形式不同,但产生的是同一种对象在实际应用中我们也会使用构造函数来生成实例对象function Person(name) {...

2019-02-24 19:15:13 134

原创 PHP学习建议

前言开启了PHP的学习,实际上也就是开启了后端的学习。一入后端深似海,后端的知识太过繁重,需要花很多的时间去学习和研究的。PHP学习建议学习来源通过视频学习,虽然学习起来比较花时间,但是通过直观的演示能跳过许多的坑中国网站:it慕课网,网易云课堂,哔哩哔哩国外网站:Udemy,YouTube通过相关书籍学习,根据自己的需要自己购买语言学习实际应用架构设计通过查看...

2019-02-11 23:00:19 291

原创 Redis协议规范

Redis协议规范redis的客户端和redis服务器端的通信协议使用RESP(Redis Serialization Protocol,即Redis序列化协议)RESP是以下几点的一个折衷方案:实现简单解析快速易于理解RESP不仅可以序列化像整数、字符串、数组这样的类型,同时也可以针对错误类型。Redis客户端发送一个字符串数组格式的命令,Redis服务器回应命令相对应的数据类型...

2019-01-16 15:06:31 372

翻译 cJSON文档解析

cJSON文档解析cJSON是一个轻量级且易于扩展的JSON解析开源库。github地址为:https://github.com/DaveGamble/cJSON安装与使用源码安装:将cJSON.c与cJSON.h这两个文件复制入自己的工程项目中,通过#include "cJSON.h"就可以使用了编译安装#克隆cJSON库的源码git clone https:/...

2018-10-15 15:34:12 8784

原创 实现c与shell间的双向通信

实现c与shell间的双向通信管道是应用较为广泛的进程间通信的手段,一般来讲,管道是单向的,一个进程负责向管道里写内容,另一个进程负责向管道里读内容。于是我利用了两个管道来实现双向通行。具体实现c_conn_shell.h//// Created by fengjun on 18-9-22.//#ifndef STUDYNET_C_CONN_SHELL_H#define...

2018-09-23 16:44:12 1636

原创 linux C 文件相关函数

打开文件,创建文件,关闭文件,读取文件,写入文件,文件偏移,文件的元数据,文件截断

2018-09-16 17:11:17 390

翻译 javascript之this绑定

javascript之this绑定基本知识call-site函数或子程序的调用站点并非是它们声明的地方,而是调用函数或者是通过动态调度调用的位置。call-stack调用堆栈是一个方法列表,按调用顺序保存所有在运行期被调用的方法function baz(){ //调用栈是 `baz` bar(); //`bar`的调用站点}function ......

2018-08-07 15:39:04 172

原创 IBE-使用PBC库

IBE-使用PBC库 identity-based encryption#include <pbc/pbc.h>int main(int argc, char **argv) { mpz_t z,V,M; element_t s,r,P,Ppub,Qid,dID,gID,gIDr,U,tem1; pairing_pp_t pp; ...

2018-06-14 23:33:41 2462 2

翻译 BLS签名-使用PBC库

BLS签名-使用PBC库 本篇博客将介绍如何使用PBC库实现Boneh-Lynn-Shacham (BLS)签名方案,该程序的源代码文件是example/bls.c 我们有三个阶为素数r的群G1、G2、GT,和一个双线性映射,它能把一个来自G1的元素和一个来自G2的元素映射到GT对应的元素上。我们把这些与一个系统参数g一起发布,g是G2中随机选择的一个元素 Alice选...

2018-06-04 21:24:35 3835 2

翻译 PBC快速入门

PBC快速入门 就PBC库而言,双线性配对是来自两个循环群。G1和G2映射到第三个群GT,其中每一个群具有素数阶r在下载的安装包里,经过编译,pbc目录下有pbc可执行文件,用cli执行程序输入g := rnd(G1);g; 第一行生成群G1的随机元素g,而第二行打印出g的值。(语法受到任意精度计算器bc的影响) 输入h := rnd(G2);h;...

2018-06-03 22:02:37 4470 4

翻译 PBC下载、安装及基本使用

PBC下载、安装及基本使用下载 安装在下PBC之前需要GMP库在官网找到相应的包进行安装我采用源码安装,将下载的pbc-0.5.14.tar.gz解压,并进入解压后的目录# 对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,根据提示先将依赖包安装好./configure# 对源码进行编译make# 将编译好的程序安装到相应目录,默认的目录...

2018-05-30 21:29:41 3656

原创 c的分段存储布局

c的分段存储布局代码段代码段又称为指令段,是CUP执行的指令部分代码段通常是只读的,但也有特殊情况。由于代码段不可改的性质使得它可以供多个程序共享使用当我们试图修改代码段的信息时,就会产生段错误(Segmentation fault)。对于一些简单的常量,比如整型,随着指令一起存储。初始化数据段(.data)程序中明确给定初值的全局变量和静态变量初始化数据段在编译的时候就明确了该段的大小,在程序运...

2018-05-20 21:57:45 355

原创 sms4的S盒构造c实现

sms4的S盒构造c实现sms4算法中的s盒的构造是由三个函数复合而成的,公式为S(x)=L(I(L(x))),其中L(x)是仿射变换,而I(x)是逆变换。仿射变换较为简单,而在模2的伽罗瓦域上求多项式的逆则比较复杂。基本的假设是:对于数字1011,表示的是x^3+x+1,即二进制数的第n位为1时表示x^(n-1) S盒仿射变换实现 int change(int x){    int A1...

2018-05-01 14:24:15 4003 13

原创 通过哲学家就餐问题看死锁预防

通过哲学家就餐问题看死锁预防哲学家就餐问题一张圆桌上坐着 5 名哲学家,桌子上每两个哲学家之间摆了一根叉子,桌子的中间是一碗米饭。哲学家只做拿起两边的筷子吃饭或者思考这两件事情。我们需要指定一些规则保证哲学家不会被饿死(即始终拿不到两边的筷子)死锁预防是通过设置某些限制条件,去破坏产生死锁的必要条件来预防死锁的发生摒弃“请求和保持”条件当每一个哲学家想吃饭的时候都同时拿起他两边的筷子,并且当其中一...

2018-04-27 17:13:34 1452

原创 github-http认证

github-http认证基于用户名和密码的认证 # 通过-u选项来传入自己的用户名和密码 curl -u username:password https://api.github.com/user # 只传入用户名,敲回车,会有提示信息提示输入密码进行认证 curl -u username https://api.github.com/user //利用node.js,获取api的...

2018-04-17 16:52:55 1320

翻译 github搜索技巧——搜索仓库

github搜索技巧——搜索仓库搜索fork仓库修饰语例子fork:truegithub fork:true 匹配所有的包含关键字“github”的仓库,包括 fork仓库.android language:java fork:true 匹配包含关键字“android”并且使用java写的fork仓库或者是常规的仓库.fork:onlygithub fork:only 匹配所有的包含关键字“git...

2018-04-15 17:46:38 4369

原创 b-m算法

b-m算法原理及实现 b-m算法常用来研究某一的01比特串的线性复杂度,换句话说通过BM算法可以得到01序列的最小线性多项式。 在介绍b-m算法之前,我先列出基本的公式 从公式就可以看出b-m算法是一个迭代算法,它的基本思想是利用前n-1个01序列所求出的最小线性多项式来求前n个01 序列的最小线性多项式,初始值容易明确,其重点在于整个算法如何如何迭代。 首先要明确的是公式中的加法并不是‘或’ 的...

2018-04-05 17:50:26 5845 3

原创 nginx新手入门

分享会nginx安装利用包管理工具(简单)源码编译安装(灵活,但参数配置比较复杂)开启,关闭,重载/etc/init.d/nginx start# kill -s signal pid(by default to the nginx.pid in the directory /usr/local/nginx/logs or /var/run)nginx -s signalstop 快速关闭qui...

2018-03-31 18:27:04 332

GNU Scientific Library

gsl是一个用于科学计算的 C库,其中包含了绝大多数常见的科学计算方面的需求,包括矩阵,优化,求根,数值积分,解微分方程,统计,常见分布 该资源是其文档,英文版

2018-04-07

空空如也

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

TA关注的人

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