自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

雨夜的博客

一个专注于技术研究和分享的博客!

  • 博客(103)
  • 资源 (2)
  • 收藏
  • 关注

原创 相忘于江湖,追逐于区块链

相忘于江湖,追逐于区块链首先,别把区块链想的太高深了,打个比方,他就是个非常非常牛的多人参与的账本,专业一点就是分布式的去中心化的数据库。那么它到底牛在哪里呢?我们来通过一个故事来了解一下。话说有一天,张无忌因中了玄冥二老一掌,找了张三丰看病。张三疯检查了一遍说:“目前整个武当,是治不了的,去找少林派吧”。于是,张无忌只能长途跋涉来到少林派,去找远空大师,远空大师又重现看了张无忌的胸口说“先去会空师弟那,检查下吧”,无忌无奈的说“师祖,看过了”,相信张无忌的遭遇,大家是不是联想到咱们去医院的遭遇。哈哈,同样

2022-06-12 11:39:18 152 4

原创 如何通过puppetter实现PDF聚合阅读器初始模型以及产品思维构想

行业中puppeteer被称为傀儡师,又被称为提线木偶,它是一个 Node 库,它提供了一个高级 API 来通过控制 Chrome 或 Chromium。Puppeteer 默认运行,但可以配置为运行完整(非无头)Chrome 或 Chromium。

2022-08-22 22:21:57 341 1

原创 如何理解P2P网络?

Peer-to-peer简称P2P,即点对点技术。又称对等互联网络技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。简单的说,P2P直接将人们联系起来,让人们通过互联网直接交互。P2P使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间商。P2P就是人可以直接连接到其他用户的计算机、交换文件,而不是像过去那样连接到服务器去浏览与下载。P2P网络的一个重要的目标就是让所有的客户端都能提供资源,包括带宽,存储空间和计算能力。因此,当有节点加入且对系统请求增多

2022-06-27 23:06:57 1674

原创 深入区块链技术(一)

区块链的技术定义区块链是一个提供了拜占庭容错、并保证了最终一致性的分布式数据库;从数据结构上看,它是基于时间序列的链式数据块结构;从节点拓扑上看,它所有的节点互为冗余备份;从操作上看,它提供了基于密码学的公私钥管理体系来管理账户。你可以这样理解有 100 台计算机分布在世界各地,这 100 台机器之间的网络是广域网,并且,这 100 台机器的拥有者相不信任,那么,我们采用什么样的算法(共识机制)才能够为它提供一个可信任的环境,并且使得:P2P 网络协议是所有区块链的最底层模块,负责交易数据的网络传输和广播、

2022-06-25 11:31:47 2670

原创 如何理解PoW工作量证明?

PoW工作量证明是区块链入门型的共识机制,那么如何理解PoW的共识机制呢?比如,武侠小说中谁破解玲珑棋局就能获取无崖子的百年功力,于是各门各派开始参加破解玲珑棋局,谁快速的破解玲珑棋局,谁就能获取无崖子的百年功力,这就是PoW共识机制的实践。产生记账者的随机性其实来自于谁快速的破解玲珑棋局,这个问题可以简化成谁拥有的计算资源更多,谁就拥有整个系统的最大概率的记账权。一旦这个概率超过一半以上,那么这个系统就有一定的中心化风险。如何理解上面一段话呢?举个例子,虚竹开启的外挂,突然获取了一种神力,可以快速的破解玲

2022-06-24 14:45:13 2602

原创 什么是区块链的共识机制?

什么是区块链的共识机制?拜占庭将军问题其实是虚构出来的一个故事,是为了方便通俗地介绍分布式系统所面临的难题。1982年,Leslie Lamport提出的“拜占庭将军”问题是解释一致性问题的一个虚拟模型。拜占庭是古东罗马的首都,由于地域宽广,守卫的将军需要通过信使传递消息,达成一致的决定。但由于将军中可能存在叛徒,这些叛变的将军可能会发送错误的消息,干扰大家的决议。 拜占庭问题的提出是为了解决上述情况下,怎样让忠诚的将军们达成一致的决议。这个问题演变到计算机领域,就是在互联网中不同计算机通过通信怎样达成一致

2022-06-21 23:02:59 3792

原创 为什么区块链被称为价值互联网?

为什么区块链被称为价值互联网?前两节介绍了区块链是什么?什么特点?以及区块链的运行原理?这几天准备被讲共识机制的拜占庭将军问题以及副官模型,但是这几天爆出的河南多家银行暴雷事件、作为一个在河南上大学并且在河南生活的小伙,感到痛心疾首,有必要给大家普及下区块链的商业价值以及它可以应用在哪些领域,本课程不提供投资建议,只是为了学习推广区块链技术而已,往投资者谨慎投资。区块链是一个去中化的分布式账本,拥有公开记账、去中心化、安全、防篡改、隐私性、透明等特点。区块链原理是公开记账、创建创世区块、交易、打包 Tran

2022-06-18 12:53:53 289

原创 如何理解区块链的运行原理?

上文,我们介绍了区块链的概念,今天就稍微深入一下,尽可能通俗地介绍一下:区块链的运行原理?通过上文的小故事,我们知道了区块链的概念,它的本质就是解决信任问题,降低信任成本的技术方案,目的就是为了去中心化,去信用中介。区块链是比特币的底层技术。比特币的概念最初由中本聪在2009年提出,它就是数字货币,海外也被称为法币。首先,我们借鉴了一个区块链描述中的经典情景来模拟中心化记账。假设武当派是一个由百户徒弟的门派,其中张三丰是武当派的掌门,掌门的大徒弟是宋远桥。徒弟们都把钱存到武当派哪里,张三丰负责记账。比如,张

2022-06-13 19:46:26 586

原创 字符串转换整数 (atoi)

请你来实现一个函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。 函数 的算法如下: * 读入字符串并丢弃无用的前导空格 * 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 * 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 * 将前面步骤读入的这些数字转换为整数(即,”123” -> 123, “0032” -> 32)。如果没有读入

2022-06-09 22:22:06 162

原创 实现 strStr()

实现 函数。给你两个字符串 和 ,请你在 字符串中找出 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 。说明:当 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 是空字符串时我们应当返回 0 。这与 C 语言的以及 Java 的 定义相符。示例 1:示例 2:示例 3:提示: 什么是kpm算法? > KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特

2022-06-09 22:20:56 151

原创 算法学习篇==外观数列

给定一个正整数 ,输出外观数列的第 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列: * * 是对 的描述,然后转换成另一个数字字符串。前五项如下:要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。例如,数字字符串 的描

2022-06-09 22:19:34 25

原创 如何理解分治思想

最外面的三角形的边, 表示了盘子从一个柱子移动到另一个柱子最快的方式. 最大的三角形可以沿着中线分成三个次小的三角形, 就是上面由二级的汉诺塔组成三级的汉诺塔的逆向操作, 次小三角形相互之间的连线, 表示着最大的盘子的移动方式.

2022-05-04 13:40:19 1577

原创 如何深度理解排序算法(一)

以上三种算法均是排序算法当中常用到的,或者面试中常问的算法;三个算法的时间复杂度都为O(n2),如果要想使时间更短的话,那么大家就要去考虑下其他的算法或者去了解下堆这个概念和分治思想。

2022-04-23 12:35:02 558

原创 什么是算法?

以上几种算法都可以达到想要的结果,但是考虑到实际应用的场景以及后期更好的性能输出,还是要考虑它的时间复杂度和空间复杂度作为一个好算法的衡量标准,其次就是他的可读性。

2022-04-20 13:55:53 316

原创 ERROR: Could not find a valid gem ‘bundler’ (>= 0)解决方法

ERROR: Could not find a valid gem ‘bundler’ (>= 0)解决方法问题描述系统macOS,需要用到ruby gem,执行gem install bundler后报错:ERROR: Could not find a valid gem 'bundler' (>= 0), here is why: Unable to download data from https://ruby.taobao.org/ - SSL_connec

2021-10-21 21:19:17 1698

原创 gem install bundler SSL证书错误 解决办法

gem install bundler SSL证书错误 解决办法最近在windows10电脑上装上PentestBox后,直接用“msfconsole”命令启动metasploit时,却发现需要先让我执行ruby中的“gem install bundler”命令,意思是先让我安装一个bundler,结果却报了如下错误:ERROR: SSL verification error at depth 1: unable to get local issuer certificate (20) ERROR:

2021-10-21 21:15:08 1924

原创 Could not find a valid gem ‘compass‘ (>= 0) in any repository compass安装失败解决方案

Could not find a valid gem ‘compass’ (>= 0) in any repository compass安装失败解决方案安装完成ruby gem 之后,通过 gem install compass 安装compass~~出现如下报错Could not find a valid gem ‘compass‘ (>= 0) in any repository然后尝试在 https://rubygems.org/ 下载 compass-1.0.3.gem 本

2021-10-21 21:00:56 618

原创 PHP常用函数整理

PHP常用函数整理array_since()从选择的下标开始取出$arr = array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);$arr1 = array_slice($arr,2); # 從arr的下標2開始取出foreach ($arr1 as $key=>$value){echo $key.'='.$value.'<br/>';}输出c=3<br/>d=4<br/>e=5

2021-10-20 22:21:11 125

原创 Flutter Insecure http is not allowed by platform

Flutter Insecure http is not allowed by platformFlutter 团队最近进行了此更改,现在不允许不安全的 http 连接。 https://flutter.dev/docs/release/break-changes/network-policy-ios-android我想知道如何将我的手机上的 Flutter 应用程序连接到我的 PC 上运行的本地 Go 服务器。我的服务器正在运行:http : //192.168.29.45 : 4001但它没有连

2021-10-20 22:11:04 1435

原创 版本控制工具

版本控制工具版本控制工具如何下拉库里边的内容(从无到有)? 在SVN中:在本地库中右键单击,选择tortoise SVN —版本库浏览器 然后输入地址,账号密码登录,登陆完毕后选择要下载的文件右键单击选择检出即可下拉到本地库 在GIT中:在本地库中右键单击,选择GIT bash here 然后输入git clone+文件完整路径,即可下拉库里边的文件到本地库如何将本地库更新至最新? 在SVN中:在本地库中右键单击空白地方,选择SVN更新即可更新至最新版本 在GIT中:在本地库中右键单击,选择git b

2021-10-20 22:03:40 5908

原创 接口测试笔记

接口测试笔记原文地址:接口测试笔记Apache - Jmeter 安装方法:准备好Jmeter安装包,解压到D盘jmeter文件夹此软件依赖于jdk打开环境变量,新建系统变量JMETER_HOME,路径为自己jmeter的bin文件夹所在所在 路径。如:D:\apache-jmeter-3.0(不含/bin)配置CLASSPATH变量,路径后增加:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jo

2021-10-10 12:09:41 186

原创 接口测试常见问题

接口测试常见问题原文地址:接口测试常见问题接口测试需要考虑的点/如何设计接口测试的用例?接口测试用例编写除了使用功能测试中最基本的等价类,边界值,因果图,错误推测,场景设计等方法外,还要考虑一些其他方面,首先我们要先进行冒烟测试,说白了就是传递正确的参数查看是否返回正确的结果然后还要考虑参数组合:因为参数有必填和非必填,参数的格式、长度,以及数据传输的业务流程中的一些限制,我们要考虑不同的参数组合的情况,以保证能够覆盖到所有的情况以及绕过验证、权限验证、参数是否加密最重要的是要考虑业务逻辑校

2021-10-09 22:44:18 16235 2

原创 接口自动化笔记

原文地址:接口自动化笔记配置:在pycharm中安装requests第三方库打开DOS命令或者在pycharm的terminal中输入pip install requests就可以安装了安装pyyaml 5.3.1第三方库打开DOS命令或者在pycharm的terminal中输入pip install pyyaml安装语法:使用单元测试框架class (类名):def setUP(self):passdef test_01(self):print(‘this is test01’

2021-10-09 22:37:57 152

原创 Python移动自动化测试面试准备

自动化测试工具原文地址:自动化测试工具InstrumenttationUIAutomator +uiautomatorviewerSelendroidRobotismAppiumselenium自动化框架Unittest框架单元测试数据驱动DDTpython的第三方库一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合,所以在测试一个接口时,通常会编写多条case,而这些除了传参不同外,并没有什么区别。这个时

2021-10-09 22:34:50 6730

原创 Python 高级知识点总结

Python 高级知识点总结原文地址:Python 高级知识点总结一、可迭代对象,迭代器对象和生成器像list,tuple等这些序列是可以使用for…in…语句进行遍历输出的。这是为什么呢?这就要需要知道可迭代对象(Iterable),迭代器对象(Iterator)和生成器对象(Genertor)。1、什么是可迭代对象?把可以通过for…in…这类语句迭代读取一条数据提供我们使用的对象。2、可迭代对象的本质?可迭代对象通过__iter__方法向我们提供一个迭代器,我们在迭代一个可迭代对象的时

2021-10-09 22:24:40 350

原创 Python高级用法总结—(列表推导式,迭代器,生成器,装饰器)

原文地址:Python高级用法总结—(列表推导式,迭代器,生成器,装饰器)Python高级用法总结—(列表推导式,迭代器,生成器,装饰器)列表推导式(list comprehensions)场景1:将一个三维列表中所有一维数据为a的元素合并,组成新的二维列表。 最简单的方法:新建列表,遍历原三维列表,判断一维数组是否为a,若为a,则将该元素append至新列表中。 缺点:代码太繁琐,对于Python而言,执行速度会变慢很多。 针对场景1,我们首先应该想到列表解析式来处理:lista = [ite

2021-10-09 22:17:11 169

原创 Python高级知识

Python高级知识原文地址:Python高级知识# -*- coding: utf-8 -*-# !/usr/bin/python3# 切片# L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']# 取前3个元素# 笨办法# print(L[0], L[1], L[2])# 取前3个元素# r = []# n = 3# for i in range(n):# r.append(L[i])# print(r)# 取前3个元素

2021-10-09 22:06:16 51

翻译 Lyra:一种用于语音压缩的新型极低比特率编解码器

视频介绍:Lyra:一种用于语音压缩的新型极低比特率编解码器通过语音和视频通话与其他人在线联系越来越成为日常生活的一部分。实时通信框架(如WebRTC)使这成为可能取决于有效的压缩技术、编解码器,以编码(或解码)信号以进行传输或存储。几十年来,编解码器是媒体应用程序的重要组成部分,它允许需要带宽的应用程序有效地传输数据,并导致人们对随时随地进行高质量通信的期望。因此,开发视频和音频编解码器的持续挑战是提供更高的质量、使用更少的数据并最大限度地减少实时通信的延迟。尽管视频似乎比音频更需要带宽,但现代视频编

2021-09-28 14:21:27 265

原创 利用Lrzsz实现Windows/Linux之间文件下载和上传

利用Lrzsz实现Windows/Linux之间文件下载和上传Lrzsz是一款在linux里可代替ftp上传和下载的程序,提供 XMODEM,YMODEM ZMODEM文件传输协议的unix通信包 。只要输入一行简单的命令,就可以上传下载文件,无需打开 ftp 或者其他服务器文件管理软件。lrzsz安装# Debian / Ubuntu :apt-get updateapt-get install lrzsz -y# CentOS / RHEL :yum update -yyum ins

2021-06-15 23:51:42 652 1

原创 Dart基础语言学习 —变量的两种类型

Dart基础语言学习 —变量的两种类型弱类型var如果没有初始值,可以变成任何类型var a;a = 'dart-var';a = 123;a = true;a = {'key': 'val123'};a = ['abc'];Object动态任意类型,编译阶段检查类型Object a = 'dart-Object';a = 123;a = [2222];dynamic动态任意类型,编译阶段不检查检查类型 dynamic a = 'dart-dynamic'; a

2021-06-15 23:25:39 215

原创 Dart基础语言学习—常量

Dart基础语言学习—常量类型声明可以省略final String a = 'final-string-dart';final a = 'final-a-dart'const String a = 'const-string-a';const a = 'const-a';初始后不能再赋值final a = 'final-a';a = 'abc';const a = 'const-a';a = 'abc';不能和 var 同时使用final var a = 'final-v

2021-06-15 23:24:45 100

原创 Dart基础语言学习—数值

Dart基础语言学习—数值数值数值类型int整数值,其取值通常位于 -253 和 253 之间。double64-bit (双精度) 浮点数,符合 IEEE 754 标准。numint 和 double 都是 num 的子类。数值表示法 十进制、十六进制int a = 1001;int b = 0xABC;print([a, b]);科学计数法num a = 21.2e3;print([a]);数值转换// string -> int// string -&gt

2021-06-12 19:46:21 172

原创 Dart基础语言 — 布尔

Dart基础语言 — 布尔声明为了代表布尔值,Dart 有一个名字为 bool 的类型。 只有两个对象是布尔类型的:true 和 false 所创建的对象, 这两个对象也都是编译时常量。boolbool a;print(a);只有 true 对象才被认为是 true。 所有其他的值都是 flase。String name = 'dart';if(name) { print('this is name');}注意: 断言只在检查模式下运行有效,如果在生产模式 运行,则断言不会执行

2021-06-12 19:43:55 94

原创 Dart基础语言 — 字符串

Dart基础语言 — 字符串—单引号或者双引号String a = 'dart';String b = "dart";字符串模板var a = 123;String b = 'dart : ${a}';字符串连接var a = 'hello' + ' ' + 'ducafecat';var a = 'hello'' ''ducafecat';var a = 'hello' ' ' 'ducafecat';var a = 'hello'' ''ducafecat';

2021-06-12 19:42:02 257

原创 Dart基础语言 — 日期时间

Dart基础语言 — 日期时间声明var now = new DateTime.now();print(now);var d = new DateTime(2018, 10, 10, 9, 30);print(d);创建时间 UTCvar d = new DateTime.utc(2018, 10, 10, 9, 30);print(d);解析时间 IOS 8601var d1 = DateTime.parse('2018-10-10 09:30:30Z');print(d1);

2021-06-12 19:39:04 436

原创 Dart基础语言 — 列表

Dart基础语言 — 列表List 是一个有序列表var l = [1, 2, 3];print(l);自动List<int> l = new List();l..add(1)..add(2)..add(3);print(l);定长List<int> l = new List(3);// print(l[0]);l[0] = 1;l[1] = 2;l[2] = 3;print(l);属性| 名称 | 说明 || —— | ——

2021-06-12 19:37:18 169

原创 Dart基础语言 — Map

Dart基础语言 — Mapkey value 形式的集合var a = {'name': 'ducafecat', 'web': 'www.ducafecat.tech'};松散var a = new Map();a['name'] = 'ducafecat';a['web'] = 'www.ducafecat.tech';a[0] = 'abc';强类型var b = new Map<int, String>();b[0] = 'java';b[1] = 'pyth

2021-06-12 19:35:37 350

原创 Dart基础语言 — Set

Dart基础语言 — SetSet 是一个元素唯一的有序队列松散// var a = new Set();// a.add('java');// a.add('php');// a.add('python');// a.add('java');// a.add('sql');// a.add('swift');// a.add('dart');强类型// var b = new Set<String>();// b.addAll(['dart', 'c#', 'j#'

2021-06-12 19:33:17 911

原创 Dart基础语言 — Runes

Dart基础语言 — RunesRunesRunes 对象是一个 32位 字符对象,用来表示一个字。这样设计也是考虑兼容 UTF-16 四个字节的情况。length 和 runes.length 比较String a = '';print(a.length);print(a.runes.length);>> 输出2 // 标识占 2 个 16 位字符1 // 表示占 1 个 32 位字符runes 是一个 32 位字符对象操作 32-bit Unicode 字符

2021-06-12 19:31:07 219

原创 Dart基础语言 — symbol、enum、comments

Dart基础语言 — symbol、enum、comments符号 SymbolDart语言的标识符,在反射中用的很普及,特别是很多发布包都是混淆后的。import 'dart:mirrors';Symbol libraryName = new Symbol('dart.core');MirrorSystem mirrorSystem = currentMirrorSystem();LibraryMirror libMirror = mirrorSystem.findLibrary(libra

2021-06-12 19:30:04 224

移动自动化测试学习过程和面试心得

如果你是已经工作好多年的移动端测试工程师,那没有必要下载该内容 这是我自己整理的面试阿里自动化测试的知识点,后来因为与自己的职业规划不符合 所以没去,现在在杭州一家创业公司做主程开发、目前主要研究方向是区块链加密算法、 p2p协议、共识算法、分布式、ai安全。接下来的几个月里,我将来利用业余时间基于python3、appium、atxserver2、elasticsearch、kibana搭建一个数据分析平台、用来实现抖音、快手的用户习惯和喜欢观看的视频、更多的数据、来做数据算法研究和数据分析,源码和思路也会通过该平台分析出去,需要大家提供更多的建议,谢谢, 如果想可以持续学习、可以关注我的微信公众号“雨夜的博客”,关注我的公众号。

2022-06-15

基于python3+appium的自动点击和翻页

基于python3+appium的自动点击和翻页、本代码实用于快手极速版、抖音极速版和火山,本内容可以当作移动自动化测试的代码学习和知识能力的提升。

2022-06-14

空空如也

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

TA关注的人

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