自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

rqX的博客

rqX的博客

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

原创 Cprypto++编译与安装

crypto++编译与安装

2022-10-11 09:49:52 258

原创 大整数库实现(入门)路线及注意事项

大整数库实现(入门)路线及注意事项实现路线的说明:下图给出了一个基本的实现的层级依赖关系,下层函数的实现或运行基本需要依赖上层的方法,有的或许不存在直接调用,但可能会包含或需要理解上层函数的实现原理。t1是基本的入门方法实现,有些没有列入其中,如判零,判1,置零,置1这种很简单的方法,但少不了要用,包括可以使用memcpy替代的复制操作。t2是在理解并实现t1函数后很容易实现的,但会被下层的函数频繁使用,没必要拖到后期再实现。t1和t2中的函数在被下层函数使用时,在测试好正确性后,可以不使用函数

2022-04-13 16:27:31 322

原创 微软商店打开应用页面时闪退的解决方法

当且仅当打开应用页面才闪退的解决方法,打开上面的服务就可以了。

2021-12-07 18:24:12 2714 1

原创 SHA3(Keccak)设计、大小端与实现

SHA3设计、大小端与实现看NIST提供的SHA3中间值文档会发现非常奇怪,并不符合常见的设计文档中的大端表示法方,与FIPS202中多速率填充也并不一致,附录中是这样填充的M || 0x06 || 0x00 … || 0x80或者M || 0x86。这是为了在实现中方便为了在小端平台上直接将8bit字节转换为64bit长整数类型而设计的。我们在实现r=576,c= 1024,b=1600下的SHA3时,一个lane大小为64bits,即一个uint64_t数据类型,我们将其简化变短一点,按照文档的

2021-11-29 12:15:12 571

原创 一文读懂输入输出流stream

如何理解数据输入输出时的“流”Stream的概念通常来说,我们的CPU处理数据的速度会远高于I/O设备的速度,无论是从硬盘读取一个文件,亦或是从网络接受一段数据,甚至是从内存中读取一段的String。数据的I/O速度是缓慢的,如果我们等待所有的数据全部读入完成再处理,要不会漫长的难以忍耐,要不内存会爆掉,我们在看电影时总不能一次性读入并处理一整部8K的电影,整存整取更是使得网络直播成为了彻底的不可能,所以我们就需要一边读入,一边处理。就像是一首歌,是便下载边听,还是整首下载下来再听的区别。通常一个几kb的

2021-09-04 10:01:25 387

原创 最牛逼的Bit算法合集

基于Bit置换算法的延伸算法1. Bit置换算法​ Bit置换算法是这一系列算法中最为简单的一种,理解该算法可以帮助我们更好的理解接下来的其它算法。​ 算法的伪码如下表示: T = ((A >> N) ⊕ B) & MASK; B = B ⊕ T; A = A ⊕ (T << N);​ MASK为B的掩码(将B需要交换的位置1,其他位置0),交换B^MASK位与A的(MASK << N)位。​ 设要交换B的m位与A的n+m位(从

2021-06-16 20:17:14 1067

原创 一文读懂SIMD指令集 目前最全SSE/AVX介绍

SIMD指令集 SSE/AVX概述参考手册Intel® Intrinsics GuideTommesani.com DocsIntel® 64 and IA-32 Architectures Software Developer Manuals背景1. 什么是指令集所谓指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重

2021-06-06 21:48:19 35168 6

原创 Initializing non-local variable with non-const expression depending on uninitialized non-local varia

可能依赖于未初始化的外部静态变量来初始化该静态变量

2021-05-17 08:08:40 362

原创 bit 交换

bit 交换算法 T = ((A >> N) ⊕ B) & MASK; B = B ⊕ T; A = A ⊕ (T << N);MASK为B的掩码(将B需要交换的位置1,其他位置0),交换B^MASK位与A的(MASK << N)位。设要交换B的m位与A的n+m位(从右边数起),则将MASK第m位置1,其他位置0,N = n。(A >> N): 将A的n+m位与B的m位对齐;((A >> N) ⊕ B):

2021-05-12 16:15:08 387

原创 数组强制类型转换的效率问题

数组强制类型转换的效率问题数组向下或向上强制类型转换的方式:uint8_t text[16];uint32_t text32[4];uint8_t *pt = (uint8_t *)text32;uint32_t *pt2 = (uint32_t *)text;for (int i = 0;i < 4; ++i) pt[i] = sbox[pt[i]];以上相比较下面的方式具有明显的效率降低,采用下面的方式能获得可观的效率收益:uint8_t b[4];b[0] = (ui

2021-05-06 09:55:10 387

原创 AES的转置实现

AES的转置实现AES是按列输入数据的,但按行排列数据更符合电脑的数据存储方式,可以更方便的进行数据类型的转换,也更适合查表的实现,以达到更快的效率。转置实现的好处有:需要时可以按字存取,甚至可以按64位数存取,减少了循环的次数更符合查表实现的逻辑更适合人的直观感受在AES的几种变换中,SBOX是完全按照字节进行变换的,转置下的实现对于SBOX替换没有任何影响,可以不做改动。轮密钥加当按转置实现时,轮密钥加的效率提升很大,本来需要一字节一字节相加的,现在直接进行uint64_t *te

2021-04-29 11:31:50 876

原创 AES的优化及其记录

AES的优化及其记录在最初完全是按照书上的说明照葫芦画瓢实现了AES,能跑的通,但效率很低,对同一明文反复进行加密的话,每秒差不多5MB的加密速度,这里的速度和个人电脑关系密切,我在每次加密都执行一次密钥扩展,如果多次加密使用同一密钥的话,可以单独仅实现一次密钥扩展,速度会快很多,大概能有一倍的速率提升。使用查表法能大幅提升加密速度,最简单的在列混淆时GF28上的乘法(只用乘2和乘3)可以列个表能有一定的提升,大概20%左右,达到了6MB/S。查表法真正的提升是在列混淆的建表上,可以建成一个4*25

2021-04-21 22:02:30 2420 5

原创 C/C++指针强制转换时按字节的倒置

C/C++指针强制转换时按字节的倒置我们建立一个uint8_t的数组,当我们把它按uint32_t ,uint64_t等强制向上转换后读取,会出现按字节的倒序现象。uint8_t test[8] = {0xaf,0x7f,0x67,0x98};uint32_t *test32 = (uint32_t *)test;printf("%#x  \n",test32[0]);uint8_t *p =(uint8_t*) &test32[0];for (int i = 0; i &lt

2021-04-20 17:14:03 481

原创 C/C++中移位运算符的连续使用

C/C++中移位运算符的连续使用在C或C++中连续使用移位运算符编译器会将其自动优化。有时,当你需要将一个8bit串的第3位之外的其他位清零时,你可能想这样写:uint8_t test = 0xb5;test = test << 2 >> 7;这时你期望的结果位0x20,然而实际上编译器给你的结果为0x05,这是经过编译器优化的结果,将0xb5直接向右移动了5位。使用这种方法:uint8_t test = 0xb5;test = test << 2 ;t

2021-04-20 16:43:00 571

原创 C++泛型 显式实例化与显式具体化区别

显式实例化,相当于通知编译器接下来我要使用这种数据类型的函数,显示的通知编译器生成对应的模板,以此和隐式的实例化相区别,隐式的实例化通过实参的类型来控制编译器对于通用函数模板相应类型的生成,而显式实例化为明文通知,实际效果上两者似乎并无太大区别。函数实例化有点类似于java泛型中的向下转型:template <typename T> T Add(T a, T b) { return a + b}int m = 6; int n = 10.2;cout << Add

2021-03-23 11:24:52 776

原创 C++与Java在函数中传递对象的区别

Java中所有函数都是按值传递,在函数传递对象时,传递的是对象的引用的复制值。C++中当对对象在函数中传递时,有三种方法1. 按值传递,这时传递的并非对象的引用,而是整个对象的复制值,这时C++对于对象的操作和基础类型一致2. 按引用传递,这时是对对象的引用进行直接传递,而非是像java一样传递其引用的复制值,当在函数体中对该引用进行改变时,同时会改变函数体外该引用的指向,而Java不会3. 对象指针的按值传递,这时是对对象的指针的按值传递,将指向对象的指针复制后传入函数,在函数体内既可以对对

2021-03-20 17:10:44 216

原创 RecyclerView的免费DLC大派送:recyclerview-selection

RecyclerView的免费DLC大派送:recyclerview-selection​ 在不使用recyclerview-selection组件的时候,我们通常会另外维持一个数据容器(List或Set)来保存被我们选中的内容,组件中的Selection类与此类似,相当于一个另外实现的容器类,起到了Set的作用(其实就是Set的委托类,以Key值作为存储信息),保存我们的初次选择和随后选择的内...

2020-04-17 10:32:58 1097

原创 Kotlin中interface与abstract class的区别

Kotlin中interface与abstract class的区别​ Kotlin中的interface添加了默认方法的实现和抽象属性,与abstract class在功能上的差距已经相差无几,仅有的差别在于abstract class中属性可以保存状态,即具体值,而interface不行。当然在interface和abstract class的选用上还需要有设计与抽象上的考量,interf...

2020-04-02 18:24:03 943

原创 Kotlin构造方法梳理

Kotlin主从构造方法梳理1. 主构造方法​ Kotlin中有个专有名词叫做主构造方法(primary construcor),很多地方并没有对这个词有很明确的定义,其实很好理解,但弄清楚这个词是理清Kotlin中构造方法的前提。所谓主构造方法,就是在类定义的第一行的类名后面添加( ),即以类名加括号的表达方式来表示主构造方法。 class User(val name: String = ...

2020-04-02 18:08:20 2543

翻译 震惊!AsyncTask将被弃用?

AsyncTask被弃用了,怎么办?这是篇翻译自 Vasiliy的文章原文地址https://www.techyourchance.com/asynctask-deprecated/在过去的十年里,AsyncTask一直是Android并发 代码开发中最广为使用的解决方案。 然而,它备受争议。一方面,AysncTask很强大,并且在大量的Android应用中依然很好用,另一方面,很多专业...

2020-01-15 21:23:28 14937 9

原创 对复杂的if-else语句进行简化

对复杂的if-else语句进行简化使用相似逻辑进行判断的一般情况下可以使用switch语句进行取代,可以使得代码可读性更高。在不能使用switch取代的情况下出现了复杂的if-else语句嵌套,说明程序的模块设计出现了问题,允许的条件下应该考虑重构代码提升逻辑的可靠性与代码的可阅读性,将代码的逻辑判断职责分摊到不同的模块与层级。不能重构代码的情况下,考虑使用利用异常机制分离代码逻辑,将判断...

2019-06-16 16:38:01 1790

原创 Android Studio 变量/参数 下划线

Android Studio 编辑页面中的变量/参数下面出现下划线,是指该变量为Reassigned parameter,即该变量被多次赋值。设置的位置 : Editor -> Language Defaults -> Identifiers -> Reassigned parameters...

2019-03-18 18:52:03 7467 1

原创 Enum Vs @IntDef

Enum 和 @intDef 到底哪个好?现在大多数博文的倾向都取决于多年前的一篇Android官方开发文档(已过时)Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.枚举通常需要的内存是静态常量的两...

2019-02-25 20:47:32 529

原创 Android Studio 3.2版本的SDK安装

Android Studio 3.2版本的SDK安装​ 因为重装了系统需要重装AS,重装了几遍之后发现3.2.1版本确实不包含SDK的安装,在网上搜了一下发现3.0.X版本可能就已经取消了。网上由狼人为了解决这个问题下载安装的2.3.3版本然后再升级回去。​ 实际上在完成安装之后不要直接import之前的项目,先start一个新的项目,做完默认的选择之后它就会开始自动下载相应的SDK了。​ ...

2018-12-25 12:02:27 1392

原创 在虚拟键盘弹出时响应返回键

在虚拟键盘弹出时响应返回键在虚拟键盘弹出时点击返回键仅会收起弹出的键盘 ,如果在这时希望能够在收起键盘的同时响应一些其他动作,需要重写相应输入框(例如EditText)的dispatchKeyEventPreIme方法。public class MyEditText extends AppCompatEditText { ... @Override pub...

2018-05-04 22:03:18 663

原创 AppCompatButton与Button的区别

AppCompatButton与Button的区别自定义控件的时候会发现Android studio提示Button已被AppCompatButton取代,AppCompatButton继承自Button,新增加了对动态的背景颜色等功能的支持. A Button which supports compatible features on older version of the pla...

2018-03-17 09:55:16 10314

原创 Foreach与迭代器模式的区别

Foreach与迭代器模式的区别所谓迭代器模式就是一个被大量使用的固定接口,如果我们需要便利一个集合时对元素进行操作的话使用迭代器十分方便。而Foreach是在Java SE5中出现的一种对集合遍历的句型,也被称作for/in句型,主要用于大部分Collection的遍历(不包括各种Map)和数组的遍历。Foreach通常用于一次性遍历整个集合,通常不会暂停,大大提升了代码的简洁性和...

2018-03-16 16:36:48 3898

原创 ArrayList中removeAll()与clear()的区别

ArrayList中removeAll()与clear()的区别boolean removeAll(Collection&lt;?&gt; c)从列表中移除指定 collection 中包含的其所有元素(可选操作)。removeAll(Collection&lt;?&gt; c)可以传入一个Collection类型参数,意在清除当前列表中与所有传入Collection所包含的元素,...

2018-03-15 17:33:06 36170 1

原创 互联网创造价值吗?

 前段时间在“kseo怎么看”中看到了这样一篇文章《互联网不创造财富吗?》里面这样写道”李方的文章《互联网会让人们更富裕吗》,是一片引人深思的文章。他对被誉为“第三次工业革命”的信息技术革命,尤其是互联网的创造财富的能力提出质疑。他的结论是,互联网为代表的信息技术革命,对全球财富总量的增加几乎没有贡献,它只是让财富发生转移。“中国历史进程中被西方列国所超越的很关键的一个问题在于儒家”重农抑商“的思...

2018-03-09 15:28:40 1169

原创 一篇梳理Git与GitHub的使用

一篇梳理Git与GitHub的使用对于一个熟悉了Git工作模式的人来说,Git的步骤清晰明了而自然,然而对于一个完全懵懂而新手来说,这些步骤繁杂而又混乱,完全搞不懂Word上一个Save就能解决的事情怎么能分出这么多操作,Git和GitHub终于傻傻分清楚了,add,commit,push,pull外加一大堆黑乎乎五颜六色的命令行又在脑海中嗡嗡的转圈圈,沉下心来把它们仔细的梳理一遍是很有必要的...

2018-03-09 15:08:20 256

原创 在Android Studio3.0以上使用 Java 8 语言功能

针对使用(包括在源代码中或通过依赖项使用)Java 8 语言功能的每个模块,在其 build.gradle 文件中添加以下代码: android { … // Configure only for each module that uses Java 8 // language features (either in its source code or

2018-01-26 11:51:46 686

原创 FloatingActionButton被软键盘遮挡问题

FloatingActionButton被软键盘遮挡问题通常来讲floatingactionbutton会随着软键盘弹起而上移,按不知道什么原因当软键盘弹起时FAB被遮住了,更换了页面的布局方式和修改软键盘的adjustPan或者adjustResize都没有用, 在跟布局中添加```android:fitsSystemWindows="true"``` 后FAB成功随软键盘弹起,但这样修改stat

2017-11-22 17:55:13 1674

原创 Statement lambda can be replaced with expression lambda 的Warning

Statement lambda can be replaced with expression lambda 的Warningwarning的全文如下 Statement lambda can be replaced with expression lambda less… (Ctrl+F1) This inspection reports lambda expressions wi

2017-11-18 17:17:04 24070

原创 OnTouch关于performClick的Warning

OnTouch关于performClick的Warning当你对一个控件(例如FloatingActionButton)使用setOnTouchListener() 或者是对你的自定义控件重写onTouchEvent方法时会出现这个警告,警告内容全文如下 If a View that overrides onTouchEvent or uses an OnTouchListener d...

2017-11-18 11:33:28 22463 1

原创 含参Fragment的官方构建方法

含参Fragment的官方构建方法​ 在Android Studio 按照如下方式新建一个Fragment ​ ​ 在选项中勾选默认的三个选项,这样就可以见到Android Studio自动帮你生成好的Fragment模板,在模板代码中可以看到如下段落 ​ 贴一下源码 /** * Use this factory method to create

2017-11-17 10:59:34 530

原创 为什么要学设计模式

为什么要学设计模式​ 设计模式是实际上将类,对象,继承,多态,抽象类,接口这一系列东西系统运用起来的学科,尽管它的名字听起来像是什么美工人员或者产品经理才需要学习的东西。​ 不得不承认,当你第一次接触JAVA中的抽象类和接口的时候,你心中会想,这是什么东西,这种里面都是空的东西能有什么用?无论你的JAVA书怎么苦口婆心的诉说它们是多么重要,罗列出多少理由讲述它们的作用,你都会心存疑虑,并且这

2017-11-06 13:36:40 515

原创 阅读完《第一行代码》后可能还会有的疑问

阅读完《第一行代码》后可能还会有的疑问​ 阅读完《第一行代码》后,基本上已经踏入了安卓世界的大门,但一本书的篇幅毕竟有限,你可能还会有如下疑问。在下列问题当中,很多郭神在他自己的博客中已经有了相当详尽的解析,或者在网上找到不错的资料,完全可以作为补充阅读,我在这儿提供相关的链接。这些问题中,有的是android开发本身的特色知识,而有的,是java或者程序开发应该具有的基础知识或者素养,作为学院

2017-11-06 12:36:16 1360

原创 为何和如何学习MarkDown

为何和如何学习MarkDown​ 作为一个程序员来说,学习markdown的成本并不高,略微阅读几篇相关文章稍作了解便能愉快的的使用了,相比不少媒体作者等行业的markdown初学者来说,那些让初见者一头包的标记语言比找到几篇叙述简洁清晰的markdown的介绍文章更简单一点。​ 学习markdown需要的十分钟有五分钟花费在了找几篇让人愿意读下去的指南上,如果你有幸看到了我这篇blog,那

2017-11-03 16:59:58 261

原创 以程序员的角度对书法抽象画等艺术审美的理解

书法艺术是规则的艺术,熟知他所拥有的规则,自古以来人们给他制定的规则,将这些规则套用在书法作品上来评价他的好坏,一切风格都有他自己区域中的定义,而不完全遵从他的自然定义,所以对于一个新手来讲,也许脱离了他的自然审美区域。审美,如果一幅画,一幅字,如果能有一个应用区域,他的审美得以应用,那么我就认为,这是一个优秀的审美,很多抽象画,很多人认为难以理解,三四岁小孩子也能画出来的东西,有什么好的

2017-10-15 17:20:10 389

原创 RecyclerViewer与ViewPager合用的NullPointer报错

完全新手在看完第一行代码后照着编写,在RecyclerViewer与ViewPager合用时出现了NullPointer报错,提示的错误行数在LayoutManager处,但在网上查看。出现这种报错多半是因为LayoutMana

2017-10-15 16:50:18 251

Linux 编程白皮书

操作系统必须和作为其基础的硬件系统紧密地协同工作。操作系统需要只有硬件能提供的特定服务。为了完全理解 L i n u x操作系统,需要了解它下层的硬件基础知识。

2019-02-18

Linux Kernal 核心中文手册

Linux Kernal核心中文操作手册,完整版。为了完整的了解 Linux ,你需要了解底层硬件的基础知识

2019-02-18

空空如也

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

TA关注的人

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