我需要在Java中实现n:m关系.用例是目录.
我目前的解决方案是拥有一个具有两个哈希映射的映射类.
这完全是多余的,我需要一个设置类,始终注意在两个哈希映射中存储/删除数据.
但这是我发现在O(1)中创造以下表现的唯一方法:
我想在各方面避免全阵列扫描或类似的事情.
但是必须有另一个更优雅的解决方案,我不需要将数据索引两次.
请点亮我.我只有普通的Java,没有数据库或SQLite或者可用的东西.如果可能的话,我也不想真正实现btree结构.
我想按修改时间升序和降序对文件进行排序.
根据这个答案,看起来最好定义一个排序回调函数并使用usort/uasort.
但是由于我的应用程序的性质,我可能会遇到一些排序算法的最坏情况(例如几乎反向排序的输入序列).
由于每次比较都使用两个部分在网络驱动器上的文件系统访问,因此比较次数至关重要,必须最小化.其他类型的迭代可以更多.
那么PHP的数组排序函数使用哪种算法?快速排序?Multisort?有什么办法可以配置吗?
我可能在排序之前将数组洗牌吗?
或者我是否需要编写自己的实现?
你知道一些提供可配置算法排序功能的好库吗?
您建议使用哪种算法或方法来解决最小化比较的问题?
好的,标题非常主观.但这就是问题所在.
背景是我想要针对定义数量的缓存服务器均匀地分发静态Web内容的命中.此外,向客户端的交付应该加快,因为正在使用多个域并且请求不会相互阻塞.我也不需要经典的负载均衡器,但在我的html代码中立即生成正确的链接.
我还想确保同一个服务器始终提供相同的URL.
所以我刚刚定义了一个小函数,通过散列请求url来返回要使用的主机,并根据使用的服务器数量计算模数:
function pseudocode_statify($url) { // $url looks like /folder1/folder2/file.jpg
return 'http://' . md5($url) % $num_of_servers .'.mydomain.com' . $url;
}
Run Code Online (Sandbox Code Playgroud)
我首先使用十六进制解码和子字符串来防止溢出,但发现它只是在上面的方式工作正常.
但是我的问题是,如果我运行以下测试脚本:
for($i=0;$i<100000;$i++) {
$md5 = md5(uniqid($i).microtime().rand(1,999999999999));
$result[$md5%2]++;
}
Run Code Online (Sandbox Code Playgroud)
我期待均匀分布.意味着$ result [0]将接近$ result [1]的值;
此情况并非如此.
好的,这没什么特别的.我会接受这样一个事实:md5并不像我想象的那样均匀分布,并且会像sha1之类的其他散列算法一样.
但我试图重现这些发现并发现了一种我无法解释的模式.
该比率总是约为2/1.事实上,这个比例总是像1/2.16到1/2.17
以上脚本的一些运行的示例输出:
output was generated by: echo "ratio: ".$result[0]/$result[1]."\n";
ratio: 2.1757121534504
ratio: 2.1729411578062
ratio: 2.1726559360393
ratio: 2.1676895664225
ratio: 2.1667416128848
ratio: 2.1667115284133
ratio: 2.1677791605385
ratio: 2.1658969579688
ratio: 2.1668508131769
ratio: 2.1689292821741
Run Code Online (Sandbox Code Playgroud)
现在奇怪的是,总和%2等于1和总和%2等于0的比率有时会交替出现!
for($j = 0; $j<100;$j++) {
for($i=0;$i<100000;$i++) { …Run Code Online (Sandbox Code Playgroud) 我正在LAMP堆栈上设计存储云软件.
文件可以有一个内部ID,但是它们有很多优点来存储它们,而不是在服务器文件系统中使用递增id作为文件名,而是使用散列作为文件名.
如果应当对当前集中的数据库进行分片或分散或者应该设置某种主 - 主高可用性环境,那么作为数据库中的标识符的散列将具有很多优点.但我还不确定.
客户端可以在任何字符串下存储文件(通常是某种路径和文件名).
这个字符串保证是唯一的,因为在第一级是类似"桶"的东西,用户可以在Amazon S3和Google存储中注册.
我的计划是将文件存储为客户端定义路径的哈希值.
这样,存储服务器可以直接为文件提供服务,而无需数据库询问它是哪个ID,因为它可以动态计算哈希值,从而计算文件名.
但我害怕碰撞.我目前考虑使用SHA1哈希.
我听说GIT也使用哈希值和修订标识符.
我知道碰撞的可能性非常低,但可能.
我无法判断这一点.您或者您不会为此目的而依赖哈希吗?
我还可以对路径的编码进行一些规范化.也许base64作为文件名,但我真的不希望这样,因为它可能会变得混乱,路径可能会变得太长,可能还有其他并发症.
轻松隐私过去,安全存储和传输机密信息需要安装专用软件.新的Mega可以在浏览器中透明地加密和解密您的数据.您掌握了存储在云端的内容,而不是我们.
此引用来自新的MegaUpload文件主机服务的网站,该服务将于本月1日19日推出.
作为一名网络开发人员,我自然感兴趣并对所背后的技术感到好奇.
我所能找到的只是截图和声明,使它看起来真实,数据真的永远不会离开客户端未加密!
使用AES保护文件和传输.
每个客户端都获得一个非对称密钥对,我只能猜到原因,但我认为它将用于加密AES初始化向量和其他客户端的密钥,以便与其共享文件.
不过我的问题是:
拦截文件上传/下载在技术上如何?
我知道有RSA和AES的加密算法在javascript中运行并且非常有效.
但唯一似乎支持在文件系统中运行的浏览器是chrome.
如何将数据从硬盘驱动器传输到客户端浏览器进行加密?它是如何从那里到硬盘上的文件的?
我不知道文件系统API这样的事情.甚至html5也只支持某种对象存储.
我猜它对于某些浏览器插件或maby是java或adobe air applet非常微不足道,但他们声称不会有像第三方软件那样需要安装的东西.
还有另外一种方法吗?
在MVC它就像http://www.yourdomain.com/sampleController/sampleAction/如果你打电话只是/sampleController/那么/sampleController/indexAction/,如果你只需要调用/然后/indexController/indexAction/火灾.
当然也有例外,但这或多或少都是惯例.
Zend有一些smilir.他们称之为模块.
它们基本上只是包含MVC逻辑的文件夹.所以你可以打电话/Module1/Controller/Action/.如果你只是打电话/Module1/然后/Module1/indexController/indexAction/开火.如果你有一个巨大的项目,它很方便,因为你可以构建更多,但如果你只有一个小项目它很烦人.
所以我非常喜欢HMVC/PAC的想法,并希望在我的框架中采用它.
我是否正确理解它与Zend基本相同但是具有无限的嵌套模块?
所以我举个例子/sub-project/sub-sub-project/controller/action/?
如果我打电话给/ A/B/C/D /那是什么惯例.
它是指模块A/B中控制器C中的动作D吗?或模块A/B/C中控制器D的IndexAction?
让我们举一个例子:
Content
ToplistController
AdministrateAction
IndexAction
ContentController
ToplistAction
Users
Chat
RoomController
IndexAction
Run Code Online (Sandbox Code Playgroud)
我现在调用URL /content/toplist/.
对于URL,/users/chat/room/?room=1该示例使其显而易见,因为只有一种可能性.但这是正确的吗?是否存在在右侧控制器中唯一地添加正确操作的约定?
我的第一个想法是"尽量少猜".
所以我首先检查网址是否与某个动作直接匹配.
如果存在一个带有索引动作的控制器/模块,如果存在"更高级别"的匹配,则无法触发.
如果不是这种情况,我会看到url是否与控制器直接匹配并附加IndexAction.
如果不是这种情况,我会寻找一个模块并猜测IndexController和IndexAction,如果不是这种情况,我会寻找一个名为index的模块.
但我想避免这个if/else的东西和文件系统访问.所以我想知道会议是怎么回事.或者甚至有一个?我找不到任何例子!
或者做一些像调用IndexAction,如果没有指定只是没有完成,但每个"短网址"必须在单独的路由逻辑中指定?
或者我完全误解了HMVC/PAC的概念?
仅供参考:我包含了php标签,因为我在php中使用我的框架,想知道php中的约定.我经常看到其他编程语言的差异.
我目前正在处理从Level3 CDN保护rtmp流的问题.
文档可以在这里找到:https: //rapidshare.com/files/1450549534/Token_Components.html (看起来你需要登录才能查看,因此我在托管上托管.原始网址是: https:// mediaportal.level3.com/mediaWeb/help/Content/ServicesDocs-Streaming/StreamingTokenAuth/TokenComponents.htm)
Scoll down to On Demand流输入/输出示例(适用于MP4文件)
我试图重现该示例并获得具有相同值的相同网址.我为此写了一个小函数:
function flimmithash($file) {
$streamer = 'pmsales';
$host = 'pmsalesfs.fplive.net';
$start_time = '20080101120000';
$end_time = '20101231235900';
$customer_secret = 'Secret'; // in the documentation there is also secret with a non capital s, i tried both
$resouce_path = "/$streamer/$file"; echo "resouce_path: $resouce_path <br>\n";
$message = "$resouce_path?start_time=$start_time&end_time=$end_time#$customer_secret"; echo "message: $message <br>\n";
$digest = md5($message); echo "digest: $digest <br>\n";
$tokenvalue = "start_time=$start_time&end_time=$end_time&digest=$digest"; echo "tokenvalue: $tokenvalue <br>\n";
$token = …Run Code Online (Sandbox Code Playgroud) 我正在处理受防火墙保护的应用程序,并且只允许从某些IP地址(应用程序Web服务器)进行访问.
它有点微妙,引入另一个身份验证/保护层会很麻烦.
我对网络的理解并不是很好,因为它不是我的主题,但在我的脑海里,我编写了以下场景:
有人知道我们的一个应用程序服务器的IP地址,并想要伪造它以访问他知道监听套接字和协议的其他应用程序.
因此,他改变了IP数据包的标头,将Web服务器IP作为发送器.
接下来发生什么?
答:他的ISP拒绝了这个数据包并说:"嘿,这不是你从我那里分配的IP地址." - 解决了问题
B:ISP将数据包传递到下一级别(他的上行链路......)
让我们假设ISP已被盗用或数据包未经检查就被传递(我不知道是否是这种情况)
接下来发生什么?
答:运营商拒绝数据包并说"嘿,IP不在我们同意你正在操作的IP范围内!" - 现在,如果我的网络服务器不是由攻击者攻击的同一个ISP操作的,那么问题就解决了
B:ISP不检查数据包或受到攻击并将其转发到他的上行链路.
现在我确信通过路由器时会检查和过滤IP地址.否则就会完全无政府状态.
所以说实话:一个想要伪造我的IP地址的攻击者需要破坏负责我的网络服务器运行的IP范围的非常相同的ISP - 或者这个ISP不进行数据包检查.
好吧,现在我想我的服务器位于办公室,其ISP是一家地区有线电视公司.
将数据包从我的IP地址发送到另一个互联网IP所需的步骤是什么?
(当然,我只是要求了解风险并选择适当的保护措施!)
我想要找到路由站,它通常位于街道一侧的一个小容器中,只有一个锁才能保护.进去吧 交换电缆或插入自己.
如果您知道自己在做什么,或者是否存在真实办公室调制解调器上存储的密钥与构建经过身份验证的连接所需的密钥,那么这种情况最有可能发挥作用吗?
我在谈论今天有线互联网的标准.
最后的想法:所以如果我的原始服务器不是某些家庭ISP,它的站点在街道上易受攻击我应该是非常安全的,对吗?
我记得NFS服务器仅依赖IP身份验证作为默认值.因为这很常见 - 是否存在伪造IP地址导致NFS服务器入侵的任何示例?
我意识到这个问题非常暴躁.这是因为我不确定我在这里说什么.我只是想在洞穴吃的地方给出一些输入,这样就可以确认或消除它们.
总的来说,我很感激您对该主题的任何评论和个人想法!
我正在开发某种基于Web的云存储服务.
一个特征是用户可以启动视频文件的转码(以便它们可以在不同的设备上流式传输).
这需要一些时间,我想向用户显示进度条.
我的计划是使用ajax将作业写入数据库.ajax调用返回数据库中作业的ID,该id将用作通知的通道.
因此,当提交作业时,客户端在某些自托管websocket服务器上订阅频道"job-databaseID".
然后,转码工作者会定期从数据库表中选择待处理的作业并进行处理.在处理时,他们将他们的进度推送到websocket服务器到客户端正在监听的同一频道.
前端应用程序应该是一个带有javascript和jquery的网站.后端应该用PHP和MySQL以及apache或nginx webserver编程.
这是使用websockets的正确方法吗?通常我会看到在一对多的通知场景中使用的websockets .这是一对一的通知方案.对于这种单向信息流,是否有更好的替代方案?
此外,我经常看到Websocket场景的频道或多或少地存在.这里很短暂.对于每个用户制作一个频道,maby会更有意义吗?
什么是一个很好的websocket服务器用于这种用途?理想情况下,一旦没有客户端连接到它就会自动删除通道,并以相同的方式自动创建,因此我不需要处理这些.
我注意到chrome缓存了一个视频文件.我用服务器上的另一个替换它,并且chrome继续从缓存服务旧的(使用JW flash player 5)
请求的标头如下所示:
joe@joe-desktop:~$ wget -O - -S --spider http://www.2xfun.de/files_geheimhihi14/20759.mp4
Spider mode enabled. Check if remote file exists.
--2011-05-15 22:40:56-- http://www.2xfun.de/files_geheimhihi14/20759.mp4
Resolving www.2xfun.de... 213.239.214.112
Connecting to www.2xfun.de|213.239.214.112|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Date: Sun, 15 May 2011 20:40:56 GMT
Server: Apache
Last-Modified: Sun, 15 May 2011 20:37:59 GMT
ETag: "89b38-3bb227-4a35683b477c0"
Accept-Ranges: bytes
Content-Length: 3912231
Cache-Control: max-age=29030400, public, must-revalidate
Expires: Sun, 15 Apr 2012 20:40:56 GMT
Connection: close
Content-Type: video/mp4
Length: 3912231 (3.7M) [video/mp4]
Remote …Run Code Online (Sandbox Code Playgroud) php ×5
apache ×2
hash ×2
javascript ×2
algorithm ×1
apache2 ×1
cdn ×1
checksum ×1
cryptography ×1
digest ×1
encryption ×1
filesystems ×1
guid ×1
hashmap ×1
hashtable ×1
hmvc ×1
html ×1
html5 ×1
http ×1
http-headers ×1
identity ×1
indexing ×1
ip ×1
java ×1
md5 ×1
networking ×1
nginx ×1
pac ×1
security ×1
sorting ×1
spoofing ×1
websocket ×1