自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

smilejiasmile的博客

Coding your imagine

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

原创 这将是一个新的世界

智能社会,互联互通 Part One  这是一个以汇集资源以及共享社区的 HOME. 在这里你可以通过评论的方式跟我互动,或者通过 Email 或者 WeChat 公众号等多种方式联系到我。我们将会共建社区、这将是一个自由、开源、价值共享、信息互惠的年轻人的社区。在这里我们可以真诚的交流想法、分享知识及其见解、消除人性偏见的障碍,构建真正有效的对话模式,让信息在你我的脑中自由的...

2019-05-25 14:38:35 269

转载 LeetCode上买卖股票问题汇总

本文对LeetCode中的买卖股票问题做了一个汇总。

2023-02-02 19:07:24 13

转载 【转】如何理解Go中不要通过共享内存来通信,而应该通过通信来共享内存?

从架构上来讲,降低共享内存的使用,本来就是解耦和的重要手段之一,举几个例子MMORPG 服务器逻辑依赖实时计算 AOI,AOI计算模块需要实时告诉其他模块,对于某个玩家:所有逻辑都依赖上述计算结果,因此角色有动作的时候才能准确的通知到对它感兴趣的人。这个计算很费 CPU,特别是 ARPG跑来跑去那

2022-12-06 14:43:49 90

转载 go-metrics在Go性能指标度量中的应用

metrics 是什么?当我们需要为某个系统某个服务做监控、做统计,就需要用到Metrics五种 Metrics 类型Go语言内置expvar,基于expvar提供的对基础度量的支持能力,我们可以自定义各种度量(metrics)。但是expvar仅仅是提供了最底层的度量定义支持,对于一些复杂的度量场景,第三方或自实现的metrics包必不可少。go-metrics包是Go领域使用较多的是metrics包,该包是对Java社区依旧十分活跃的Coda Hale’s Metrics library的不完全Go移植

2022-06-14 11:24:53 420 1

转载 Docker bind Mounts和volume及tmpfs对比

本文总结了 bind Mounts 和 volume 及 tmpfs 三种 Docker 管理容器数据方式的区别根据官方文档的介绍:相比功能较为有限,创建一个 bind mount 之后,Host 上的一个文件/文件夹就相当于被挂载到容器里了,该文件/文件夹就被容器通过绝对路径引用了,意味着这个文件/文件夹必须实现存在于 Host 上。而使用使用时,会在 Host 主机上新建一个Docker 存储文件夹,文件夹里的内容由 Docker 管理。映射的文件/文件夹不需要存在于 Host 上,它们是按需生成的。

2022-06-02 10:41:36 335

转载 基于Docker的pulsar集群部署方法

GitHub链接docker-sample/pulsar at master · perayb/docker-sample · GitHub准备工作安装最新版本的docker 拉取pulsar和pulsar-manager镜像docker pull apachepulsar/pulsar:2.7.2docker pull apachepulsar/pulsar-manager:v0.2.0部署流程standalone方式部署启动容器:sh startStandal

2022-05-24 11:07:08 1031

转载 深入golang runtime的调度

深入golang runtime的调度

2022-05-13 23:21:03 433

转载 利用 Go Tool 下的 PProf 和 trace 对 Go 程序进行性能调优

利用 Go Tool 下的 PProf 和 trace 对 Go 程序进行性能调优

2022-05-13 12:22:35 1413

原创 理解 C++ 的 Memory Order 以及 atomic 与并发程序的关系

为什么需要 Memory Order  如果不使用任何同步机制(例如 mutex 或 atomic),在多线程中读写同一个变量,那么,程序的结果是难以预料的。简单来说,编译器以及 CPU 的一些行为,会影响到程序的执行结果:即使是简单的语句,C++ 也不保证是原子操作。 CPU 可能会调整指令的执行顺序。 在 CPU cache 的影响下,一个 CPU 执行了某个指令,不会立即被其它 CPU 看见。  原子操作说的是,一个操作的状态要么就是未执行,要么就是已完成,不会看见中间状态。例如,在 C

2022-01-27 17:36:51 785

转载 零知识证明系列概述—从初探到 zk-SNARK 入门【9】

一、初探零知识证明前言区块链的发展可谓是日新月异,分布式账本,哈希函数,merkle tree,公钥算法,p2p网络,共识机制,智能合约等等很高大上的名词相信大家一定都不会很陌生。区块链像一个有机体,融合了各种不同的理论技术。零知识证明是构建信任的重要技术,也是区块链这个有机体中不可缺少的一环。抛砖引玉的小故事大家一定对数独游戏不陌生。数独游戏就是有一个9×9的盘面。我们要根据盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(33)内的数字均含1-9,不能重复。

2022-01-24 15:25:32 388

转载 Linux异步IO实现方案总结

一、glibc aio1、名称由于是glibc提供的aio函数库,所以称为glibc aio。glibc是GNU发布的libc库,即c运行库。另外网上还有其他叫法posix aio,都是指glibc提供的这套aio实现方案。2、主要接口glibc aio主要包含如下接口:函数 功能 int aio_read(struct aiocb *aiocbp); 提交一个异步读 int aio_write(struct aiocb *aiocbp);...

2022-01-13 11:30:13 1434

转载 linux 创建一个垃圾篓防误删及其误删文件恢复

一、创建一个垃圾篓给你的linux创建一个垃圾篓/回收站,防误删创建一个垃圾回收站,保存被删除距今3天的文件,过期则被删除1. 在你的主目录下,创建文件夹 .trashcd ~mkdir .trash2. 在你的常用脚本目录下创建这俩脚本#!/bin/bashTRASH_DIR="/home/lixy/.trash"for i in $*; do STAMP=`date +%s` fileName=`basename $i` if [[ -d

2021-11-05 14:46:29 279

转载 Linux 文件系统之 inode 概述

inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础。我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念,从而大大简化用户接口。下面就是我的inode学习笔记,尽量保持简单。理解inode作者:阮一峰一、inode是什么?理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取

2021-11-05 14:41:38 745

转载 (四)Go 语言编译流程简述

一、概述Go 语言编译的最后一个阶段是根据 SSA 中间代码生成机器码,这里谈的机器码是在目标 CPU 架构上能够运行的二进制代码,中间代码生成一节简单介绍的从抽象语法树到 SSA 中间代码的生成过程,将近 50 个生成中间代码的步骤中有一些过程严格上说是属于机器码生成阶段的。机器码的生成过程其实是对 SSA 中间代码的降级(lower)过程,在 SSA 中间代码降级的过程中,编译器将一些值重写成了目标 CPU 架构的特定值,降级的过程处理了所有机器特定的重写规则并对代码进行了一定程度的优化;在 S

2021-10-14 18:36:07 826

转载 WebAssembly 系列(五)为什么 WebAssembly 更快?

翻译原文:http://huziketang.com/blog/posts/detail?postId=58c8b98da6d8a07e449fdd25英文原文:What makes WebAssembly fast?本文是关于 WebAssembly 系列的第五篇文章(本系列共六篇文章)。如果你没有读先前文章的话,建议先读这里。如果对 WebAssembly 没概念,建议先读这里。上一篇文章中,我介绍了如何编写 WebAssembly 程序,也表达了我希望看到更多的开发者在自己的工程中同时.

2021-10-14 18:10:11 82

转载 (三)Clang/ LLVM编译流程简述

LLVM概述 LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time) 以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。 传统编译器设计 编译器不同于解释器,解释器可以将高级语言边转译边执行。但是编译器需要将所有的源代码编译成机器代码之后,然后才能执行,所以如图不管传统的还是LLVM都一定是源代码输入,输出是机器代码(..

2021-10-14 18:07:10 1287

原创 (二) GNU/GCC 编译器及其编译流程概述

GNU/GCC编译过程可以被细分为四个阶段:◆ 预处理(Pre-Processing)◆ 编译(Compiling)◆ 汇编(Assembling)◆ 链接(Linking)Linux程序员可以根据自己的需要让GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件 进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。和其它常用的编译器一样,GCC也提供了灵活而强大的代码 优化功能,利用它可以生成执行效率更高的代码。g...

2021-10-14 18:03:59 1673

原创 (Outlook) 详解三大编译器:gcc、llvm 和 clang

编译器一般构成传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd)。在编译过程中,前端主要负责词法和语法分析,将源代码转化为抽象语法树;优化器则是在前端的基础上,对得到的中间代码进行优化,使代码更加高效;后端则是将已经优化的中间代码转化为针对各自平台的机器代码。GCCGCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。GCC 原名为 GNU C 语言编译器,因为它原本只能.

2021-10-14 17:34:16 2437

转载 区块链安全-以太坊智能合约静态分析

Gao Feng of Qihoo 360 IceSword LabHuang Shao Mang of Qihoo 360 IceSword Lab概述目前,以太坊智能合约的安全事件频发,从The DAO事件到最近的Fomo3D奖池被盗,每次安全问题的破坏力都是巨大的,如何正确防范智能合约的安全漏洞成了当务之急。本文主要讲解了如何通过对智能合约的静态分析进而发现智能合约中的漏洞。由于智能合约部署之后的更新和升级非常困难,所以在智能合约部署之前对其进行静态分析,检测并发现智能合约中的漏洞,可以最

2021-09-10 10:13:16 364

原创 Scrapy 爬虫框架五—— 常见的反爬虫技术

爬虫的本质就是“抓取”第二方网站中有价值的数据,因此,每个网站都会或多或少地采用一些反爬虫技术来防范爬虫。比如前面介绍的通过 User-Agent 请求头验证是否为浏览器、使用JavaScript动态加载资源等,这些都是常规的反爬虫手段。下面针对更强的反爬虫技术提供一些解决方案。IP 地址验证有些网站会使用 IP 地址验证进行反爬虫处理,程序会检查客户端的 IP 地址,如果发现同一个 IP 地址的客户端频繁地请求数据, 该网站就会判断该客户端是爬虫程序。针对这种情况,我们可以让 ..

2021-09-01 18:11:06 366

原创 Scrapy 爬虫框架四 —— 动态网页及其 Splash 渲染

一、前言动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送给我们客户端二、问题分析scrapy爬虫框架没有提供页面 js 渲染服务,所以我们获取不到信息,所以我们需要一个渲染引擎来为我们提供渲染服务---这就是Splash渲染引擎(大侠出场了)1、Splash渲染引擎简介:Splash是为Scrapy爬虫框架提供渲染javas.

2021-09-01 17:57:31 325

原创 Scrapy 爬虫框架初体验三 —— 工程优化及其完善

一、工程优化及其完善日志系统及定时过期删除日志文件在工程目录中的settings.py 添加如下修改:import loggingfrom scrapy.utils.log import configure_loggingfrom logging.handlers import TimedRotatingFileHandlerFEED_EXPORT_ENCODING = 'gb18030' # 输出的编码格式为uft-8, gb18030# Log Configlog.

2021-09-01 17:34:22 119

原创 Scrapy 爬虫框架初体验二 —— 以一个新闻站点爬取为例

一、搭建基础 Scrapy 工程框架创建项目输入如下命令:scrapy startproject NewsSpider # 创建项目cd NewsSpiderscrapy genspider technews tech.163.com # 创建一个爬虫tree .目录结构如下:(base) ➜ [dfg@:/Users/dfg/code/codeplay/python/Spider/NewsSpider] tree ..├── NewsSpider│ ├─..

2021-09-01 16:37:37 85

原创 Scrapy 爬虫框架初体验一 —— 网络爬虫及其框架介绍

一、框架概述网络爬虫介绍在介绍框架之前,简单介绍一下网络爬虫(Web Crawler)。当我们上网时,浏览的网页上有很多形形色色的信息,我们可以手动收集(复制粘贴or下载)我们需要的信息。但是,当信息量比较多就显得很麻烦了,有没有一种方式可以自动且快捷地把一堆相关网页上的海量信息下载下来呢?有,那就是网络爬虫。网络爬虫是一种从 Web 上自动下载网页的程序——网络爬虫把一个或多个“种子网页”作为输入,然后经过下载、分析和扫描等处理过程来获取新链接。对于指向未下载网页的链接,将它们加到一个

2021-09-01 16:11:17 93

原创 数据获取之网络爬虫专栏简介

一、技术选型众所周知,针对不同的业务场景和需求选取不同的技术选型和架构方案方案。可以让我们事半功倍,提升工作效率的同时完成本职工作。而针对互联网上的数据获取需求也是一样。下面我们将介绍三种场景的爬虫数据获取需求和场景,并推荐其相应的解决方案。1、简单需求(单文件脚本 / 基于 request 网络库及相关第三方库)针对一次需求和没有持续集成的要求的场景,对于这类简单的任务,不使用爬虫框架也能实现很好的效果,而且代码更少。当采用 Python 语言实现时,常用的相关依赖库有request...

2021-09-01 15:09:26 144

转载 认识 UML 类关系——依赖、关联、聚合、组合、泛化

文章目录1.依赖(Dependency)2.关联(Association)3.聚合(Aggregation)4.组合(复合,Composition)5.泛化(Generalization)6.小结参考文献在学习面向对象设计时,类关系涉及依赖、关联、聚合、组合和泛化这五种关系,耦合度依次递增。关于耦合度,可以简单地理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强。下面根据个人理解,尝试讲解这五种类关系。1.依赖(Depend

2021-08-06 11:09:46 799

转载 C/C++ 中嵌入汇编总结

GCC汇编语法梗概AT&T 与 Intel 汇编区别Linux GCC(GNU, C Compiler)使用AT&T汇编语法。下面列一下AT&T 和Intel汇编语法中的不同:源-目的 顺序AT&T中源和目的操作数的顺序相反。Intel语法中第一个操作数是目的,第二个是源。而AT&T语法中,第一个是源第二个操作数是目的。“Op-code src, dst” —— AT&T 语法“Op-code dst, src” —— Intel语法寄

2021-08-02 10:00:26 434

转载 认真分析mmap:是什么 为什么 怎么用

阅读目录mmap基础概念 mmap内存映射原理 mmap和常规文件操作的区别 mmap优点总结 mmap相关函数 mmap使用细节mmap基础概念mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段.

2021-07-31 11:59:50 147

原创 Doxygen with Graphviz to generate call graph on Mac

Doxygen and GraphvizDoxygenDoxygen is a documentation generator primarily used for c++ code. More on doxygen can be found here.http://www.doxygen.nl/GraghvizDoxygen can use the “dot” tool from graphviz to generate more advanced diagrams and graphs.

2021-07-23 17:46:45 159

原创 cmake 常用变量和常用环境变量

一,cmake 变量引用的方式:前面我们已经提到了,使用${}进行变量的引用。在 IF 等语句中,是直接使用变量名而不通过${}取值二,cmake 自定义变量的方式:主要有隐式定义和显式定义两种,前面举了一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义<projectname>_BINARY_DIR 和<projectname>_SOURCE_DIR 两个变量。显式定义的例子我们前面也提到了,使用 SET 指令,就可以构建一个自定义变量了。比如

2021-07-16 15:18:04 4058

转载 shell脚本如何优雅的打印帮助信息

一个好的帮助信息对于快速、高效的使用shell脚本是非常有好处的。我们一般通过echo来逐行打印帮助信息,这种方式一个明显的缺点就是需要手动去进行排版,而排版的过程有时十分的繁琐。有没有想过,如果可以像写一般的注释一样来完成帮助信息的编写,那该多好啊!本文通过sed这个工具来实现,像写注释一样写shell的帮助信息。shell中一般#开头的行为注释信息,所以利用这个特性,我们可以把帮助信息设计成如下的样式:#!/usr/bin/env bash ###### my-script — does

2021-07-06 11:54:19 526

原创 【程序性能分析利器】Google Perf Tool 和 Valgrind 工具包简介

Google Perf Tools 的安装和使用Gperf 工具包包含如下几个工具: 一个优化的内存管理算法—tcmalloc性能优于malloc。 一个用于CPU profile的工具,用于检测程序的性能热点,这个功能和gprof类似。 一个用于堆检查工具,用于检测程序在是够有内存泄露,这个功能和valgrind类似。 一个用于Heap profile的工具,用于监控程序在执行过程的内存使用情况。 其使用方法如下:1.使用其提供的内存管理函数---TC Malloc: .

2021-05-11 11:12:01 1005 1

原创 密码学在区块链中的应用 【八】

密码学在区块链中的应用 【8】 区块链相关密码学数据的组织方式,区块链的块链结构。通过块的哈希链接起来的链。世界状态:使用 merkle 哈希树组织,便于快速检索和网络传输。如账户树,交易树,账单树等。hash 函数保证数据完整性。sha256/RIPEMD160布隆过滤器:轻客户端快速索引交易。椭圆曲线签名算法。签名认证,确认信息发送方的身份,确认区块链上信息的来源。访问控制与隐私保护:可以确定谁在什么条件下可做什么事,保证区块链上加密的数据只被授权用户看到。如属性加密秘钥交换协议:

2021-04-18 21:21:35 843

原创 秘钥协议及新兴密码学方向【7】

秘钥协议及新兴密码学方向【7】秘钥管理及交换共享 (秘钥协议)密钥交换是实现安全通信的基础,商用加密算法AES和DES需要在安全通信之前,实现通信双方的密钥共享。密钥交换的常用方法:基于RSA的密钥交换; 即通过 RSA 来对秘钥进行加密后,安全传输。证书颁发机构CA(CertificateAuthority);基于DES/AES 实现的 KDC 技术(Key Distributed Center, 秘钥分发中心),引入了一个可信的第三方。Diffie-Hellman 秘钥交

2021-04-18 21:19:18 201

原创 Hash算法及数字签名【六】

Hash算法及数字签名【6】Hash 函数Hash 函数主要用于数据完整性验证,如区块链中的 Merkel 树与根,网络传输的消息认证码等。 1、Hash函数的定义将任意长的消息 M 映射为较短的、固定长度的一个值H(M)。Hash 函数的目的是为需认证的数据产生一个“指纹”。Hash函数应满足以下条件:Hash函数函数的输入可以是任意长Hash函数函数的输出是固定长易于在软件和硬件实现同时,Hash函数为了实现安全认证,需要满足如下安全条件:单向性: 已知x,求h =

2021-04-18 21:05:21 780 1

原创 非对称加密之公钥密码体系 【五】

非对称加密之公钥密码体系 【5】 非对称加密之公钥密码体系古典密码到现代密码最主要的区别便是密码体系的安全不在依赖于加密算法的安全,而是依赖秘钥的安全。在互联网上通信时,若需要加密需要事先共享秘钥,对称密码体制使用同一个秘钥,显然不能网上传输。随着互联网的普及,加入网络的用户激增,于是在网上传输共享秘钥的需求增加,催生了公钥加密体系。 1、产生背景公开信道上的“安全”通信公开信道上的“安全”通信:催生了公钥加密算法。传统的对称密码体制,对称密码体制(例如DES, AES)

2021-04-18 18:20:13 437

原创 对称加密之分组加密【四】

对称加密之分组加密【四】 1、分组密码概述分组密码和流密码的区别。1.分组密码和流密码的概念与区别:所谓流密码,就是把明文的所有字符作为一个整体,然后一位一位地对明文字符进行加密。如维吉尼亚密码和Vernam密码,都属于流密码。一位明文被一位密钥加密为一位密文是流密码的特点。分组密码:需要先对明文进行分组,然后**对分组后的明文一组一组地进行加密。它与流密码的区别是,分组密码一次用一个密钥k加密一组明文,而不是一位一位加密。如下图明文分组长度为 n, 密文分组长度为 m, 加密函数 E:Vn

2021-04-18 18:06:21 480

原创 对称加密之流密码【三】

对称加密之流密码【三】 对称加密之流密码 1 一次一密一次一密 (one-time pad) 是一种较理想的加密方式, 1917 年 由 AT&T 实验室提出,秘钥随机生成,而且只用一次。已经证明在秘钥安全的情况下,改方案具有完善保密性。如下图:优点:密钥随机产生,仅使用一次无条件安全加密和解密为加法运算,效率较高密钥长度大于等于明文长度,密钥共享困难,不太实用。虽然 OTP 具有完善的保密性,但是其缺点也很明显。于是人们就想到使用有

2021-04-18 17:28:39 387

原创 密码学的数学模型及其理论基础 【二】

密码学的数学模型及其理论基础 【二】 密码学的数学模型与理论基础信息论之父 Shannon 的通信保密系统与熵和无条件保密复杂度理论基础与计算安全性的定义1948 年,香农的论文 A mathematical theory of communication, 奠定了现代信息论的基础。1949 年, 香农的论文 Communication theory of secrecy systems, 定义了保密系统的数学模型,为密码学从技巧艺术转向科学之路作出了巨大的贡献。

2021-04-18 17:20:44 1041

原创 密码学概述及其发展简史 【一】

1 密码学1.1 什么是密码学密码学是保障信息安全的核心技术,信息安全是密码学研究与发展的主要动力和目的。密码学能做什么?机密性: 如何使得某个数据自己能看懂,别人看不懂认证: 如何确保数据的正确来源,如何保证通信实体的真 实性完整性: 如何确保数据在传输过程中没有被删改不可否认性: 如何确保用户行为的不可否认性密码算法密码算法的基本概念和术语包括: 明文(M)、密文©、密钥 (k 秘密参数)、加密(E)、解密(D)函数。算法基本约束和要求:对使用者算法可逆恢复成

2021-04-18 17:14:55 1020

机器学习笔记(经典机器算法和大数据算法)

涉及机器学习的各种经典的算法,其中,有 logistics 回归,决策树、随机森林、XGBoost、SVM、主题模型、隐马尔可夫链、贝叶斯网络、聚类算法等等

2018-09-09

空空如也

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

TA关注的人

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