算法
文章平均质量分 71
AlbenXie
这个作者很懒,什么都没留下…
展开
-
浅析什么是哈希算法/散列函数/哈希函数
我们来分析一下,由于这个这个函数过于简陋,它的冲突概率是较高的,比如我们分别输入“张三”、“章五”,“电话簿哈希”都输出了“z”,对于这种冲突,在哈希函数具体实现中处理方法有多种,例如“链地址法”、“再哈希法”等,文章也有很多,需要理解的是为啥它们要这么做,好处都有啥,此处不谈。即使我们已完美解决了冲突的问题,但是回顾咱们“电话簿哈希”这个哈希函数的设计原理,咱们的电话簿哈希依然存在问题——假设我姓“刘”,那么由于我会保存很多姓“刘”的亲戚,电话簿中大量的联系人都映射在了“L”这个地址下。原创 2023-04-20 22:38:56 · 1349 阅读 · 0 评论 -
信息技术安全之哈希算法(Hashing)的基本概念
理想的加密哈希函数应该是确定性的,这意味着相同的输入值应该始终返回相同的哈希值,此函数应具备计算速度快且效率高的特性。加密哈希与加密(encryption)截然不同,因为加密哈希函数应该是单向的,而它们的相似之处在于,可以将纯文本输入到哈希函数中,并获得难以理解的输出,但无法获取哈希输出并恢复纯文本。哈希算法是一种函数或操作类型,它接受任意数据输入并将其映射到固定大小的输出,我们称之为哈希或摘要。在后续分享中,我们将探讨哈希算法的一些示例,并深入探讨哈希函数的弱点或针对其的安全攻击。转载 2023-02-01 20:58:53 · 487 阅读 · 0 评论 -
哈希与哈希算法
哈希是一种加密算法。原创 2023-02-01 20:52:59 · 290 阅读 · 0 评论 -
哈希算法(哈希函数)基本
哈希也称“散列”函数或“杂凑”函数。它是一个不可逆的单向映射,将任意长度的输入消息M(或文件F)映射成为一个较短的定长哈希值H(M),也叫散列值(HashValue)、杂凑值或消息摘要。可见,这是一种单向密码体制,只有加密过程,没有解密过程(因此Hash求逆很困难)。二、哈希的原理和特点单向性:从哈希值不能反向推导原始数据(计算不可行),即从哈希输出无法倒推输入的原始数值。这是哈希函数安全性的基础。灵敏性:对输入数据敏感,哪怕只改了一个Bit,得到的哈希值也大不相同。转载 2023-02-01 20:26:31 · 5943 阅读 · 0 评论 -
JAVA 中的 / 和 % 区别
(除) 注意:整数相除结果还是整数,向下取整。只要相除中有一个小数,结果带小数。4/5 //输出结果为06/5 //输出结果为15/5 //输出结果为14.2/5.2 //输出结果为0.8076923076923077%(取模) 结果为相除之后的余数。也叫取余。原创 2022-08-21 20:47:10 · 3281 阅读 · 1 评论 -
SpringBoot服务如何进行限流(单机)
限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。转载 2022-07-17 02:33:42 · 854 阅读 · 0 评论 -
md5和sha256算法的区别,哪个比较安全
md5和sha256信息摘要算法,都属于加密哈希函数,而且算法比较复杂。那么md5和sha256算法有什么区别,哪个的安全性比较高呢?关于md5的简介md5是一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(哈希值),用于确保信息传输完整一致。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。对于任意长度的消息,这个摘要相当于是个长度为16个字节的数组,通常用一个长度为32的十六进制字符串来表示。转载 2022-05-14 22:18:31 · 1489 阅读 · 0 评论 -
Simple Java—Collections(一)Java高效计数器
Translate from Efficient Counter in JavaJava中的高效计数器你可能经常需要统计一段文本或数据库中某些东西(例如单词)的出现频率。在Java中,使用HashMap可以很简单的实现这么一个计数器。这篇文章将会比较几种实现计数器的方法,最后,得出最有效率的一个。1. 简单计数器String s = "one two three two three three";String[] sArr = s.split(" "); //naive appro转载 2020-11-09 17:58:48 · 623 阅读 · 0 评论 -
快速入门数据结构和算法
简介:有哪些常见的数据结构?基本操作是什么?常见的排序算法是如何实现的?各有什么优缺点?本文简要分享算法基础、常见的数据结构以及排序算法,给同学们带来一堂数据结构和算法的基础课。一 前言1 为什么要学习算法和数据结构?解决特定问题。 深度优化程序性能的基础。 学习一种思想:如何把现实问题转化为计算机语言表示。2 业务开发要掌握到程度?了解常见数据结构和算法,沟通没有障碍。 活学活用:遇到问题时知道要用什么数据结构和算法去优化。二 数据结构基础1 什么是数据结构?数据结..转载 2020-11-09 15:21:26 · 557 阅读 · 0 评论 -
Semaphore 信号量及其理解
一、Semaphore 信号量Semaphore (信号量)是由计算机科学家Dijkstra在1965年提出的,广泛应用不同的操作系统,在管程提出之前信号量就是并发编程领域的霸主!几乎所有并发的语言都支持信号量机制。Semaphore 也有被翻译成信号灯,因为其机制就像我们日常生活中的红绿灯,车辆的通行看红绿灯,对应编程世界的线程能不能执行得看信号灯!Semaphore 用来多线程互斥问题,相对于synchronized和Lock来说它允许多个线程访问一个临界区!例如各种池:数据库连接池、对象池转载 2020-09-22 11:39:16 · 1339 阅读 · 0 评论 -
java判断一个字符串是否为数字型
方法一:用JAVA自带的函数(只能判断正整数)public static boolean isNumeric(String str) { for (int i = str.length(); --i >= 0;) { if (!Character.isDigit(str.charAt(i))) { return false; } } return true;}方法二:正则(推荐,速度最快)public static boo.转载 2020-08-20 18:16:39 · 442 阅读 · 0 评论 -
Java数组及数组工具类Arrays的使用
package com.example.demo;import org.junit.Test;import java.util.Arrays;/** * @Description 数组工具类Arrays的使用 * @Auther gf.x * @Date 2020/5/16 18:58 */public class TestArrays { //1. System.arraycopy()数组复制方法 @Test public void test() { .原创 2020-05-19 22:09:40 · 498 阅读 · 0 评论 -
常见安全算法(MD5、SHA1、Base64等等)
本文主要对消息摘要算法和加密算法做了整理,包括MD5、SHA、DES、AES、RSA等,并且提供了相应算法的Java实现和测试。一 消息摘要算法1. 简介:消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密 只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。 消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法。 著名的摘要算法有RSA公司的MD5算法和SHA-1算法及其大量的变体。2. 特点:无论输入的消息有多长,计算出来的消息摘要的长度转载 2020-05-17 22:58:30 · 666 阅读 · 0 评论 -
MultiKeyedMap方案的实现
方案背景所谓“MultiKeyedMap”是指允许多个关键字经过组合映射到一个对象的集合类。比方说,我们有一个数据表,大概的结构如下:ID 姓 名 性别 出生日期 1 王 小毛 男 '1973-05-18' 2 沈 佩佩 女 '1976-06-24' 数据结构大体如下:class Person...转载 2020-03-24 14:46:22 · 622 阅读 · 0 评论 -
LeetCode算法题
package com.example.demo.leetcode;import java.util.Arrays;import java.util.HashMap;/** * @Description two sum * Given nums = [2, 7, 11, 15], target = 9; * Because nums[0] + nums[1] = 2 + 7 = ...原创 2020-03-19 13:01:23 · 282 阅读 · 0 评论 -
LeetCode算法题
package com.example.demo.leetcode;import org.apache.commons.lang3.StringUtils;import java.util.HashMap;import java.util.HashSet;/** * @Description Longest Substring Without Repeating Characte...原创 2020-03-19 13:00:20 · 279 阅读 · 0 评论 -
算法分析的正确姿势解读
在进一步学习数据结构与算法前,我们应该先掌握算法分析的一般方法。算法分析主要包括对算法的时空复杂度进行分析,但有些时候我们更关心算法的实际运行性 能如何,此外,算法可视化是一项帮助我们理解算法实际执行过程的实用技能,在分析一些比较抽象的算法时,这项技能尤为实用。在在本篇博文中,我们首先会介 绍如何通过设计实验来量化算法的实际运行性能,然后会介绍算法的时间复杂度的分析方法,我们还会介绍能够非常便捷的...原创 2019-12-18 20:35:07 · 479 阅读 · 0 评论 -
二叉搜索树算法详解与Java实现
二叉查找树可以递归地定义如下,二叉查找树或者是空二叉树,或者是满足下列性质的二叉树:(1)若它的左子树不为空,则其左子树上任意结点的关键字的值都小于根结点关键字的值。(2)若它的右子树不为空,则其右子树上任意结点的关键字的值都大于根节点关键字的值。(3)它的左、右子树本身又是一个二叉查找树。从性能上来说如果二叉查找树的所有非叶子结点的左右子树的结点数目均保持转载 2017-04-11 09:35:54 · 589 阅读 · 0 评论 -
Blowfish 加密算法 Java 版简单实现
前几天网上突然出现流言:某东发生数据泄露12G,最终某东在一篇声明中没有否认,还算是勉强承认了吧,这件事对于一般人有什么影响、应该怎么做已经有一堆人说了,所以就不凑热闹了,咱来点对程序猿来说实际点的,说一个个人认为目前比较安全的加密算法:Blowfish。上代码之前,先说几点Blowfish加密算法的特点:1. 对称加密,即加密的密钥和解密的密钥是相同的;2. 每次加密之后的结果是转载 2017-04-10 17:37:30 · 5219 阅读 · 1 评论 -
java开发设计六大基本原则
目录(?)[+]1.遵循单一职责原则一个类只专注于做一件事; 高内聚,低耦合;2.开放-封闭原则对拓展开放,对修改关闭(尽可能不动原有代码进行拓展); 高内聚,低耦合; 为达到目的,需对系统进行抽象化设计(关键); UML举例: 3.里氏代换原则(LSP)子类必须能够替换它们的基类型,基转载 2017-05-17 12:32:05 · 5195 阅读 · 0 评论 -
Java程序员应该了解的10个面向对象设计原则
摘要:Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计。查看Apache和Sun的开放源代码能帮助你发现其他Java设计原则在这些代码中的实际运用。面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton、Decorator、Observe转载 2017-05-17 12:35:29 · 500 阅读 · 0 评论 -
写出优雅性能的JAVA程序必须遵守的35个原则
本文给出35条写出优雅性能的JAVA程序的建议,欢迎收藏!1、尽量指定类、方法的final修饰符带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类原创 2017-05-17 12:37:17 · 4471 阅读 · 1 评论 -
算法----五大算法之分支限界法
分枝界限法是由三栖学者查理德·卡普(Richard M.Karp)在20世纪60年代发明,成功求解含有65个城市的旅行商问题,创当时的记录。“分枝界限法”把问题的可行解展开如树的分枝,再经由各个分枝中寻找最佳解。1. 基本概念描述:采用广度优先产生状态空间树的结点,并使用剪枝函数的方法称为分枝限界法。所谓“分支”是采用广度优先的策略,依次生成扩展结点的所有分支(即:儿子转载 2017-05-27 17:43:31 · 1479 阅读 · 0 评论 -
算法----五大算法之回溯法
回溯法(英语:backtracking)是暴力搜寻法中的一种。回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:1.找到一个可能存在的正确的答案。转载 2017-05-27 17:44:45 · 598 阅读 · 0 评论 -
算法----五大算法之贪心法
贪心法( Greedy algorithm),又称贪心算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。1. 基本概念贪心算法与动态规划的不同在于它每对每个子问题的解决方案都做出选择,不能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能。所谓贪心算法是指,在对问题转载 2017-05-27 17:45:46 · 675 阅读 · 0 评论 -
算法----五大算法之动态规划
动态规划(英语:Dynamic programming,DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。1. 基本概念动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),转载 2017-05-27 17:46:54 · 640 阅读 · 0 评论 -
算法----五大算法之分治法
分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。1. 基本概念字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如快速排序,归并排序等。2. 适用范围转载 2017-05-27 17:48:00 · 650 阅读 · 0 评论 -
java开发设计六大基本原则
目录(?)[+]1.遵循单一职责原则一个类只专注于做一件事; 高内聚,低耦合;2.开放-封闭原则对拓展开放,对修改关闭(尽可能不动原有代码进行拓展); 高内聚,低耦合; 为达到目的,需对系统进行抽象化设计(关键); UML举例: 3.里氏代换原则(LSP)子类必须能够替换它们的基类型,基转载 2017-05-17 12:50:26 · 512 阅读 · 0 评论 -
编译程序原理VS解释程序原理
引言 在备战软考的过程中在复习程序设计语言的时候遇到这么一个考点——解释和编译的原理,并且在做真题的过程中频繁的考查两者的区别,由于复习的不是很到位所以导致丢分,所以小编又重新复习了这一块的知识,现在将两者的区别总结出来和大家分享。 一、编译程序原理 首先让大家看一张来自百度百科上面的编译工作阶段的示意转载 2017-06-27 10:58:31 · 1476 阅读 · 0 评论 -
Java创建树形结构算法实例
在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构。首先是需要的JavaBean 1 2 3 import java.io.Serializable; 4 import java.util.ArrayList; 5 import java原创 2017-09-04 09:12:26 · 1314 阅读 · 0 评论 -
Java基础算法、编写规范等
一、java基础算法二、异常处理三、包的命名四、源程序结构五、类的注释格式六、类的方法的注释格式七、类方法编写规则类方法尽量体现它的功能的单一性:方法封装的单一性。这样有利于方法的重复使用和调试维护。微软内部员工代码编写手册要求:每个方原创 2017-06-22 16:07:17 · 474 阅读 · 0 评论 -
扯蛋的密码规则
在很多很多关于密码的糟糕事情中,你知道最扯的是什么吗?密码规则!2015年8月11日,我曾在twitter上说过:“在我的有生之年,如果我们没有帮用户解决密码问题,我死后变成鬼,也要缠着你!”今日我再提让这句誓言,想让它成为互联网上的永久记录。我不知道是否有来世,但我很快就会知道的,我打算如地狱恶魔般出来游荡……这世界充斥着糟糕透顶的密码规则(例如:https://gith转载 2017-04-12 12:40:27 · 547 阅读 · 0 评论