随笔分类 -  算法与数据结构

摘要:一、Java 使用 AES 步骤解析 AES是一种对称的加密算法,可基于相同的密钥进行加密和解密。Java采用AES算法进行加解密的逻辑大致如下:(1)生成/获取密钥;(2)加/解密。 (一)关于密钥步骤 1、生成密钥 密钥的生成是通过KeyGenerator来生成的。通过获取一个KeyGenera 阅读全文
posted @ 2021-11-20 18:11 古兰精 阅读(7540) 评论(0) 推荐(0) 编辑
摘要:一、AES 加密报错:java.security.InvalidAlgorithmParameterException: ECB mode cannot use IV 1、问题背景 AES 加解密需使用的 算法(参数 - 算法名称/加密模式/数据填充方式),之前我使用的 "AES/EBC/PKCS5 阅读全文
posted @ 2021-11-19 22:57 古兰精 阅读(5761) 评论(0) 推荐(2) 编辑
摘要:一、问题背景及原因分析 需求对保密性要求严格点,就用的 AES + 盐值 + 偏移向量 去做,前端加密传递参数,Java 解密参数,然后查询数据,得到数据后再将数据加密返给前端,前端最对数据进行解密,得到具体数据使用。 在此过程中发现偶尔使用 Java AES 解密前端传递的参数时会报这个异常,如下 阅读全文
posted @ 2021-11-18 22:26 古兰精 阅读(11417) 评论(0) 推荐(0) 编辑
摘要:一、什么是 hash Hash(哈希),又称“散列”。散列(hash)英文原意是“混杂”、“拼凑”、“重新表述”的意思。 在某种程度上,散列是与排序相反的一种操作,排序是将集合中的元素按照某种方式比如字典顺序排列在一起,而散列通过计算哈希值,打破元素之间原有的关系,使集合中的元素按照散列函数的分类进 阅读全文
posted @ 2021-09-08 18:41 古兰精 阅读(2514) 评论(0) 推荐(0) 编辑
摘要:一、什么情况下需要布隆过滤器? 1、先来看几个比较常见的例子: 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, gmail 等邮箱垃圾邮件过滤功能 这几个例子有一个共同的特点: 如何判断一个元素是否存 阅读全文
posted @ 2021-09-08 12:19 古兰精 阅读(887) 评论(0) 推荐(0) 编辑
摘要:一、MD5 MD5全称为信息-摘要算法(哈希算法),是计算机安全领域的散列函数,用于确保消息的完整性。另外摘要算法还有SHA1,具体请度娘。 MD5是一种单向加密,它的加密不可逆,它将任意长度的字符串,经过算法计算后生成固定长度的数据,一般为16位表示。 1、MD5的用途: (1)消息完整性:每份数 阅读全文
posted @ 2021-06-15 21:02 古兰精 阅读(2717) 评论(0) 推荐(0) 编辑
摘要:最近看到一篇文章写diff算法实现(深度剖析:如何实现一个 Virtual DOM 算法 #13),研究了一下写的确实不错,转载如下: 本文会教你怎么用 300~400 行代码实现一个基本的 Virtual DOM 算法,并且尝试尽量把 Virtual DOM 的算法思路阐述清楚。希望在阅读本文后, 阅读全文
posted @ 2021-04-09 18:20 古兰精 阅读(113) 评论(0) 推荐(0) 编辑
摘要:一、什么是 深度/广度 优先遍历? 深度优先遍历简称DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式。 这两种遍历方式有什么不同呢?我们来举个栗子: 我们来到一个游乐场,游乐场里有11个景点。我们从 阅读全文
posted @ 2021-03-12 11:24 古兰精 阅读(11467) 评论(0) 推荐(3) 编辑
摘要:一、如何分析一个排序算法 复杂度分析是整个算法学习的精髓。 时间复杂度: 一个算法执行所耗费的时间。 空间复杂度: 运行完一个程序所需内存的大小。 学习排序算法,我们除了学习它的算法原理、代码实现之外,更重要的是要学会如何评价、分析一个排序算法。分析一个排序算法,要从 执行效率、内存消耗、稳定性 三 阅读全文
posted @ 2020-11-27 17:53 古兰精 阅读(348) 评论(0) 推荐(0) 编辑
摘要:队列这种数据结构,前端需要了解的队列结构主要有:双端队列、滑动窗口,它们都是算法中是比较常用的数据结构。 一、数据结构:队列 队列和栈类似,不同的是队列是先进先出 (FIFO) 原则的有序集合,它的结构类似如下: 常见队列的操作有:enqueue(e) 进队、 dequeue() 出队、 isEmp 阅读全文
posted @ 2020-08-07 17:08 古兰精 阅读(518) 评论(0) 推荐(0) 编辑
摘要:一、AES补位知识 针对 AES 加密的实现过程,一般都会用到补位。AES 加密的原数据长度要求是 16 的整数倍,但实际操作过程中并不能保证每次待加密的数据长度都能是 16 的整数倍,所以这时候就需要进行补位,再进行加密才能得到正确的加密数据。 常用的补位方式主要:NoPadding,zeroPa 阅读全文
posted @ 2020-07-30 17:49 古兰精 阅读(2270) 评论(0) 推荐(0) 编辑
摘要:时间复杂度:按照我的理解,时间复杂度就是程序运行次数的数量级。 注意!时间复杂度不是单纯的耗时,而是指耗时与数据增长量之间的关系(一般可以套用耗时x数量增长量),我搜了下,竟然有“时间复杂度为O(1)就是耗时1秒,查找10000次时间复杂度O(n)就是耗时10000秒”这样扯淡的说法 一、时间复杂度 阅读全文
posted @ 2018-03-08 23:31 古兰精 阅读(3044) 评论(0) 推荐(1) 编辑
摘要:假如有几个数字 int score[] = {67, 69, 75, 88}; 按照从大到小排序。 有2种思路: 第一种思路:score[j] 和 score[j+1] 比较,如果前者比后者小,把前者和后者调换顺序,两两调换后一轮下来,最小的会被排到最后去。 每一轮j都从0开始,当i轮排序,就有最后 阅读全文
posted @ 2018-03-05 18:51 古兰精 阅读(2269) 评论(0) 推荐(0) 编辑
摘要:一、算法 算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢? 主要还是从算法所占用的「时间」和「空间」两个维度去考量。 1、时间维度: 阅读全文
posted @ 2017-10-10 15:12 古兰精 阅读(1640) 评论(0) 推荐(0) 编辑
摘要:一、数据结构概念 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。 常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 每一种数据结构都有着独特的数据存储方式,不同种类的数据结构适合不同种类的应用,部分数据结构甚至是为了解决特定问题而 阅读全文
posted @ 2017-07-08 19:40 古兰精 阅读(801) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示