www.91084.com

GVKun编程网logo

Tinyurl样式的唯一代码:防止冲突的潜在算法(tiny url系统设计)

45

在这篇文章中,我们将为您详细介绍Tinyurl样式的唯一代码:防止冲突的潜在算法的内容,并且讨论关于tinyurl系统设计的相关问题。此外,我们还会涉及一些关于.net–制作类似TinyURL.com

在这篇文章中,我们将为您详细介绍Tinyurl样式的唯一代码:防止冲突的潜在算法的内容,并且讨论关于tiny url系统设计的相关问题。此外,我们还会涉及一些关于.net – 制作类似TinyURL.com的简短网址、503状态码:防止网页被删除、535. TinyURL 的加密与解密 : 设计一个 URL 简化系统、bootstrap.css和esayUi.css样式冲突的解决的知识,以帮助您更全面地了解这个主题。

本文目录一览:

Tinyurl样式的唯一代码:防止冲突的潜在算法(tiny url系统设计)

Tinyurl样式的唯一代码:防止冲突的潜在算法(tiny url系统设计)

我有一个系统,需要一个唯一的6位代码来表示一个对象,并且我正在尝试一种生成它们的好的算法。以下是先决条件:

  • 我正在使用以20为基的系统(没有大写字母,数字,元音或l,以防止造成混淆和顽皮的单词)
    • 以20为基数的组合允许6400万种组合
  • 我将一次插入潜在的5万到1万个条目,因此从理论上讲,我将使用批量插入,这意味着使用唯一键可能不会高效或漂亮(尤其是当开始有很多冲突时)
  • 填充10%的组合并不是没有问题的,因此很可能发生大量碰撞
  • 我想确保代码不连续

我有一个听起来像可行的想法,但我对数学的理解不够,无法确定如何实现:如果我从0开始并以N递增,然后转换为以20为底,那么似乎应该是N的某个值,使我可以在重复任何值之前对0-63,999,999中的每个值进行计数。

例如,使用N = 3(即10 mod 3)从0到9:0、3、6、9、2、5、8、1、4、7。

是否有某种魔术数学方法可以计算出较大的N值,从而可以在整个范围内进行计数而无需重复?理想情况下,我选择的数字会在集合中跳来跳去,以至于没有明显的规律可言,但我不确定这样做的可能性。

另外,一种散列算法可以保证0-64百万之间的唯一性,但是我实在太傻了,无法知道是否可行。

答案1

小编典典

您需要的是一个与密钥空间没有任何因素的数字。最简单的值是使用质数。您可以用Google搜索大素数,或使用http://primes.utm.edu/lists/small/10000.txt

.net – 制作类似TinyURL.com的简短网址

.net – 制作类似TinyURL.com的简短网址

我正在构建一个新的网络应用程序,该应用程序需要生成一个内部的短URL以供将来使用,以便用户轻松地返回到具有非常长的URL的特定页面.我的初步想法是将数字存储在数据库中,并将其输出为HEXADECIMAL值以使其短于整数. TinyURL.com似乎使用除了HEXADECIMAL之外的其他东西(多个字母数字与数字混合).有什么简单的方法可以产生类似TinyURL的东西吗?

解决方法

请查看这个关于主题的良好解释: Random TinyURL Browser (Updated) .

重要部分:

As we have established,there are 62,193,780 possible values for TinyURL’s. TinyURL’s are generated by a Base 36 hash (36 indicating the number of characters a-z and 0-9,the array of possible values out of which a TinyURL can be constructed),autoincremented by MysqL with an initial value count of zero.

BTW,另一个SO类似的问题,通过数学观点:Creating your own Tinyurl style uid.这里有一些.NET源代码:Base 36 type for .NET (C#)

503状态码:防止网页被删除

503状态码:防止网页被删除

我认为503状态码最大的作用是告知搜索引擎:现在服务器压力过大,网站(某个网页)稍后再抓取,503是指目前无法使用服务器(由于超载或进行停机维护)。通常,这只是一种暂时的状态。按照百度的说法,网站关闭或其他临时情况,这个时候网站应该返回:“503 Service Temporarily Unavailable”!使用503状态码,而不是404错误页面。

如果网站需要临时维护或者未建立好就上线的页面,当网页不能打开时以及没有建好时,不要立即返回404,建议使用503状态。503可以告知百度spider该页面临时不可访问,请过段时间再重试。

503状态码:防止网页被删除 SEO优化 主机 SEO推广 第1张

(网页出现503状态提示)

如果返回404状态码,会被百度当成死链删除,造成收录和流量损失。使用503返回码,这样百度的抓取器接到503返回码后,会在隔一段时间再去访问这个地址,在您的页面建好上线后,就又能被重新抓取,保证页面及时被抓取和索引,避免未建好的内容设为404后带来不必要的收录和流量损失。

常见的HTTP状态码

404:404返回码的含义是“NOT FOUND”,百度会认为网页已经失效,那么通常会从搜索结果中删除,并且短期内spider再次发现这条url也不会抓取。

301:301返回码的含义是“Moved Permanently”,百度会认为网页当前跳转至新url。当遇到站点迁移,域名更换、站点改版的情况时,推荐使用301返回码,尽量减少改版带来的流量损失。虽然百度spider现在对301跳转的响应周期较长,但我们还是推荐大家这么做。

503:503返回码的含义是“Service Unavailable”,百度会认为该网页临时不可访问,通常网站临时关闭,带宽有限等会产生这种情况。对于网页返回503,百度spider不会把这条url直接删除,短期内会再访问。届时如果网页已恢复,则正常抓取;如果继续返回503,短期内还会反复访问几次。但是如果网页长期返回503,那么这个url仍会被百度认为是失效链接,从搜索结果中删除。

503状态码的设置方法

IIS服务器的就好解决,一般回收一下应用程序池即可,或者重启一下IIS。

下面举的例子需要配合APACHE的 .htaccess 重写文件来实现:

Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_USER_AGENT} ^.*Google.* [NC]

RewriteRule .* /cgi-bin/error/503.php

向除了指定ip外的任何来访者发送 503:

Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{REMOTE_HOST} !^1\.1\.1\.1

RewriteCond %{REQUEST_URI} !^/cgi-bin/error/503\.php [NC]

RewriteRule .* /cgi-bin/error/503.php

向蜘蛛发送 503,其他来访者返回一个 404 页面:

Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_USER_AGENT} ^.*(Googlebot|Googlebot|Mediapartners|Adsbot|Feedfetcher)-?(Google|Image)? [NC]

RewriteCond %{REQUEST_URI} !^/cgi-bin/error/503\.php [NC]

RewriteRule .* /cgi-bin/error/503.php

RewriteCond %{REMOTE_HOST} !^1\.1\.1\.1

RewriteCond %{REQUEST_URI} !^/cgi-bin/error/404\.php [NC]

RewriteRule .* /under-development-explain.html [R=302,L]

如果是单页面,可以先建一个503.php文件,

<?php

ob_start();

header('HTTP/1.1 503 Service Temporarily Unavailable');

header('Status: 503 Service Temporarily Unavailable');

header('Retry-After: 3600');

header('X-Powered-By:');

?><!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>

<title>503 Service Temporarily Unavailable</title>

</head><body>

<h1>Service Temporarily Unavailable</h1>

<p>The server is temporarily unable to service your

request due to maintenance downtime or capacity

problems. Please try again later.</p>

</body></html>

把这段代码复制进去就可以了,但切记把所有页面都指向这一个页面,这样做只告知了用户,而没有通知蜘蛛,这样蜘蛛只会以为其他页面被删除了,只剩下这个页面。

第一二句告知搜索蜘蛛网站处理暂时关闭状态,第三句告知搜索蜘蛛,网站将于2012年10月8日18:27从新开放,注意:这里用的是格林威治标准时间。

但是光放一个503信息到服务器里还是不够的,蜘蛛会访问网站不同的页面,因此我们必须引导所有的蜘蛛到503.php这个页面,让蜘蛛知道,整个网站处于临时关闭中,而不是个别页面。

如果站长使用的是Apache/Linux服务器,我们只需在.htaccess设置一下,引导所有的蜘蛛到505.php页面,这里我们要使用302跳转,注意:在这里千万不要使用301跳转,因为301是永久的,在这种情况下会毁灭掉整个网站。

引导蜘蛛到503.php

将下面这段代码保存到.htaccess文件,并上传到网站根目录

Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{REMOTE_ADDR} !^00\.00\.00.\.00

RewriteCond %{REQUEST_URI}!^/503.php [NC]

RewriteRule ,* /503.php [R,L]

最后一行的[R, 告知蜘蛛,这个是302跳转,属于暂时的。这样我们就完成了网站临时关闭的部署,可以放心关站了!

百度站长平台的建议和总结:

如果百度spider对您的站点抓取压力过大,请尽量不要使用404,同样建议返回503。这样百度spider会过段时间再来尝试抓取这个链接,如果那个时间站点空闲,那它就会被成功抓取了

如果站点临时关闭或者页面暂未建好上线,当网页不能打开时以及没有建好时,不要立即返回404,建议使用503状态。503可以告知百度spider该页面临时不可访问,请过段时间再重试。

注:部分内容引自网络和百度站长平台

535. TinyURL 的加密与解密 : 设计一个 URL 简化系统

535. TinyURL 的加密与解密 : 设计一个 URL 简化系统

题目描述

这是 LeetCode 上的 535. TinyURL 的加密与解密 ,难度为 中等

Tag : 「哈希表」、「模拟」

TinyURL 是一种 URL 简化服务, 比如:当你输入一个 URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk

请你设计一个类来加密与解密 TinyURL

加密和解密算法如何设计和运作是没有限制的,你只需要保证一个 URL 可以被加密成一个 TinyURL ,并且这个 TinyURL 可以用解密方法恢复成原本的 URL

实现 Solution 类:

  • Solution() 初始化 TinyURL 系统对象。
  • String encode(String longUrl) 返回 longUrl 对应的 TinyURL
  • String decode(String shortUrl) 返回 shortUrl 原本的 URL。题目数据保证给定的 shortUrl 是由同一个系统对象加密的。

示例:

输入:url = "https://leetcode.com/problems/design-tinyurl"

输出:"https://leetcode.com/problems/design-tinyurl"

解释:
Solution obj = new Solution();
string tiny = obj.encode(url); // 返回加密后得到的 TinyURL 。
string ans = obj.decode(tiny); // 返回解密后得到的原本的 URL 。

提示:

  • $1 <= url.length <= 10^4$
  • 题目数据保证 url 是一个有效的 URL

模拟 + 哈希表

对于每个 longUrl 我们都在「大写字母/小写字母/数字」中随机 $k = 6$ 位作为其映射标识,这需要使用一个哈希表 tiny2Origin 进行记录。

同时了防止相同的 longUrl 多次调用,确保 encode 服务的「幂等性」,我们再额外建立哈希表 origin2Tiny 来记录原串和映射标识的对应关系。

代码:

public class Codec {
    Map<String, String> origin2Tiny = new HashMap<>(), tiny2Origin = new HashMap<>();
    String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    String prefix = "https://acoier.com/tags/";
    int k = 6;
    Random random = new Random();
    public String encode(String longUrl) {
        while (!origin2Tiny.containsKey(longUrl)) {
            char[] cs = new char[k];
            for (int i = 0; i < k; i++) cs[i] = str.charAt(random.nextInt(str.length()));
            String cur = prefix + String.valueOf(cs);
            if (tiny2Origin.containsKey(cur)) continue;
            tiny2Origin.put(cur, longUrl);
            origin2Tiny.put(longUrl, cur);
        }
        return origin2Tiny.get(longUrl);
    }
    public String decode(String shortUrl) {
        return tiny2Origin.get(shortUrl);
    }
}
  • 时间复杂度:encode 操作复杂度为 $O(C + L)$,其中 $C = 6$ 为短串长度,$L$ 为传入参数 longUrl 的长度(存入哈希表需要计算 longUrl 哈希值,该过程需要遍历 longUrl);decode 操作复杂度为 $O(C)$,其中 $L$ 为传入参数 shortUrl 的长度,该长度固定为 prefix 长度加 $6$
  • 空间复杂度:$O(K \times L)$,其中 $K$ 为调用次数,$L$ 为平均 longUrl 长度

最后

这是我们「刷穿 LeetCode」系列文章的第 No.535 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。

在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSou... 。

在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地

本文由mdnice多平台发布

bootstrap.css和esayUi.css样式冲突的解决

bootstrap.css和esayUi.css样式冲突的解决

总结

以上是小编为你收集整理的bootstrap.css和esayUi.css样式冲突的解决全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

今天的关于Tinyurl样式的唯一代码:防止冲突的潜在算法tiny url系统设计的分享已经结束,谢谢您的关注,如果想了解更多关于.net – 制作类似TinyURL.com的简短网址、503状态码:防止网页被删除、535. TinyURL 的加密与解密 : 设计一个 URL 简化系统、bootstrap.css和esayUi.css样式冲突的解决的相关知识,请在本站进行查询。

本文标签: