小编Pat*_*k M的帖子

如何从数组中删除重复的条目,同时保留非连续的重复项?

我有一个像var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4, 5, 5, 5];我真的想要输出的数组[5,2,9,4,5].我的逻辑是:

  • 逐个浏览所有元素.
  • 如果元素与prev元素相同,则计算元素并执行类似的操作 newA = arr.slice(i, count)
  • 新数组应该只填充相同的元素.
  • 对于我的示例输入,前3个元素是相同的,因此newA将会是,arr.slice(0, 3)并且newB将会是arr.slice(3,5)等等.

我试着把它变成以下代码:

function identical(array){
    var count = 0;
    for(var i = 0; i < array.length -1; i++){
        if(array[i] == array[i + 1]){
            count++;
            // temp = array.slice(i)
        }else{
            count == 0;
        }
    }
    console.log(count);
}
identical(arr);
Run Code Online (Sandbox Code Playgroud)

我在确定如何输出表示数组中相同元素组的元素时遇到问题.如果元素不相同,则应按原始数组中的顺序输出.

javascript arrays

6
推荐指数
1
解决办法
3887
查看次数

SQL性能搜索长字符串

我需要将用户代理字符串存储在数据库中,以跟踪和比较不同浏览器之间的客户行为和销售业绩。一个很普通的用户代理字符串大约100个字符长。决定使用varchar(1024)来将用户代理数据保存在数据库中。(我知道这太过分了,但这是个主意;应该在以后的几年中容纳用户代理数据,并且某些设备,工具栏,应用程序已经将500个字符推入了长度。)包含这些字符串的表将被规范化(每个不同的用户代理字符串只会存储一次),并像缓存一样对待,因此我们不必一遍又一遍地解释用户代理。

典型的用例是:

  • 用户来到我们的网站,被检测为新访客
  • 为此用户创建了新的会话信息
  • 确定我们是否需要分析用户代理字符串,或者我们是否对其进行了有效的分析
  • 如果有的话,很好,如果没有,请进行分析(当前,我们计划调用第三方API)
  • 将相关信息(浏览器名称,版本,操作系统等)存储在与现有用户会话信息绑定并指向缓存条目的联接表中

注意:我倾向于说“搜索”数据库中的用户代理字符串,因为它不是简单的查找。但需要明确的是,查询将使用“ =”运算符,而不是正则表达式或LIKE%语法。

因此,查找用户代理字符串的速度至关重要。我已经探索了几种确保其性能良好的方法。出于大小原因,索引整个列是正确的。部分索引不是一个好主意,因为大多数用户代理最后都具有区别信息。部分索引必须相当长才能使其值得使用,这时它的大小会引起问题。

因此归结为哈希函数。我的想法是对Web服务器代码中的用户代理字符串进行哈希处理,然后运行select在数据库中查找哈希值。我觉得这样可以最大程度地减少数据库服务器上的负载(而不是让它计算哈希),尤其是因为如果找不到哈希,则代码会转过来并要求数据库在插入时再次计算哈希。

散列为整数值将提供最佳性能,但有发生更高冲突的风险。我期望最多看到成千上万的用户代理。即使是100,000个用户代理,也可以很好地适合2 ^ 32大小的整数,并且几乎没有冲突,而这些冲突可以由Web服务在对性能的影响最小的情况下进行解密。即使您认为整数哈希不是一个好主意,使用32字符摘要(例如SHA-1,MD5)也应比原始字符串快得多,对吗?

我的数据库是MySQL InnoDB引擎。Web代码最初将来自C#,随后将来自php(在我们整合了一些托管和身份验证之后)(不是Web代码应该有很大的不同)。

如果您认为这是la脚的“选择我的哈希算法”问题,请允许我在此道歉。我真的很希望能从以前做过类似事情的人那里获得一些意见,并在他们的决策过程中得到一些意见。因此,问题是:

  • 您将为此应用程序使用哪个哈希?
  • 您会在代码中计算哈希还是让数据库处理哈希?
  • 在数据库中存储/搜索长字符串是否有根本不同的方法?

mysql string hash user-agent

5
推荐指数
1
解决办法
2635
查看次数

更正ASP.NET MVC4中的用户输入

背景

我们一直在将大量遗留代码和系统迁移到ASP.NET MVC表单.我已经使用模型绑定,验证,属性等编写了许多与MVC 4的CRUD类型接口,所以我对这个范例非常熟悉.到目前为止,所有这些表单都出现在我们的后端管理和管理应用程序中,它们需要进行非常严格的输入验证.我们正在MVC推出我们的第一个面向消费者的应用程序,并面临着不同类型的问题.

问题

我们在该领域的传统形式是我们公司的主要收入引擎.消费者体验的可用性是当今的规则.为此,我们希望我们的表单尽可能宽松 - 遗留系统做了很多事情来自动纠正用户输入(当然,每次都是完全自定义的,非标准的方式).为此,我们并不需要输入验证,因为我们需要卫生设施.

例子

我们要求用户输入具有隐含度量单位的数字输入.常见的是货币金额或平方英尺.输入标签很清楚,他们不需要提供以下格式:

什么是近似平方英尺?(例如:2000)

你的预算是多少?(例如:150)

人是人,不是每个人都遵循指示,我们经常得到如下答案:

大约2100

1500平方英尺

$ 47.50,给予或接受

(好吧,我夸大了最后一个.)我们最终存储到业务逻辑中的模型接受这些字段的数字输入类型(例如int和float).我们当然可以使用数据类型验证器属性([DataType(DataType.Currency)]预算输入的示例,或只是让字段类型为平方英尺的整数),以清楚地向用户表明他们做错了,提供了有用的错误消息,例如:

平方英尺必须只是数字.

然而,更好的用户体验是尝试尽可能宽松地解释他们的响应,因此他们可以尽可能少地中断完成表单.(注意我们有一个广泛的客户服务方面,他们可以在我们的系统之后解决错误,但我们必须让用户在我们联系之前填写表格.)对于上面的平方镜头示例,这只是意味着剥离非数字字符.对于预算,这将意味着剥离不是数字或小数点的所有内容.只有这样我们才能应用其余的验证(是一个数字,大于0,小于50000等)

我们坚持采取最佳方法来实现这一目标.

潜在解决方案

我们已经考虑了自定义属性,自定义模型绑定以及将在模型和数据库之间存在的单独的scrubber服务类.以下是我们在尝试确定方法时考虑的一些注意事项.

自定义验证属性

我已经阅读了很多有用的资源.(它们具有不同程度的相关性和新近性.我找到的很多东西都是为MVC2或MVC3编写的,并且可以在MVC4中使用标准属性.)

我没有找到任何人做我想做的事情,这将改变模型价值本身.我显然可以创建值的本地副本,清理它并提供通过/失败,但这会导致大量重复的代码.在保存到数据库之前,我仍然需要再次清理任何输入值.

更改模型值本身有3个好处:

  1. 它会影响后续验证规则,从而提高其接受率.
  2. 该值更接近将放入数据库的值,从而减少了存储之前所需的额外准备和映射开销.
  3. 如果表单因其他原因被拒绝,它会向用户轻轻地建议"你正在努力尝试这些领域."

这是一种有效的方法吗?是否有人以这种方式使用验证属性,我错过了?

自定义模型绑定

我读了拆分日期时间 - 单元测试ASP.NET MVC自定义模型绑定器,它关注自定义日期时间输入字段,并在模型绑定层完成自定义验证和解析.这与模型本身更接近,所以它似乎是修改模型值的更合适的地方.事实上,这个例子class DateAndTimeModelBinder : IModelBinder在一些地方确实如此.

但是,为此示例提供的控制器操作签名不使用整体模型类.看起来像这样

public ActionResult Edit(int id, 
    [DateAndTime("year", "mo", "day", "hh","mm","secondsorhwatever")]
    DateTime foo) {
Run Code Online (Sandbox Code Playgroud)

而不是这个

public ActionResult Edit(
    MyModelWithADateTimeProperty model) {
Run Code Online (Sandbox Code Playgroud)

在此之前不久,文章确实说

首先,用法.您可以通过在Global.asax中注册此自定义模型绑定器来管理所有日期时间:

ModelBinders.Binders[typeof(DateTime)] = 
   new DateAndTimeModelBinder() { Date = …
Run Code Online (Sandbox Code Playgroud)

c# asp.net validation asp.net-mvc asp.net-mvc-4

5
推荐指数
1
解决办法
940
查看次数

挂在npm上的厨师客户端安装在node-gyp rebuild

npm install从厨师食谱中跑出来我遇到了问题.当我从命令行运行它时,它在一分钟内完成,只有一些与package.json没有存储库字段相关的警告(应该是无害的).但是当我从chef运行它时,它会挂起最后一行输出回命令行,如下所示:

* execute[npm-install-app] action run
Run Code Online (Sandbox Code Playgroud)

配方中的这个资源块是:

execute "npm-install-app" do
  cwd "#{home}/#{prefix}#{app}"
  command "npm --registry #{priv['url']}:#{priv['port']}#{priv['path']} install --cache #{home}/.npm --tmp #{home}/tmp > npm-run.log 2>&1"
  user node['nodejs']['user']
  action :run
end
Run Code Online (Sandbox Code Playgroud)

#{home}扩展出/home/nodejs和用户nodejs.

如您所见,我将输出重定向到文件到文件> npm-run.log 2>&1.输出文件获取写入它的npm install命令的输出(与命令行不同),最后一件事是:

-- a bunch of 200's and 304s, like this --
npm http 304 http://my.private.npm.amazonaws.com/registry/_design/app/_rewrite/esprima

kerberos@0.0.3 install /home/nodejs/my-app/node_modules/mongoose-q/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos
(node-gyp rebuild 2> builderror.log) || (exit 0)
Run Code Online (Sandbox Code Playgroud)

kerberos是我们依赖的一个模块的依赖,但我们自己并没有使用kerberos.我从其他来源收集到npm正在运行node-gyp来编译在npm服务器上打包的不可用的应用程序版本.

它将在该状态下保持2小时,直到大厨shellout注册超时并显示致命错误.ps -e将显示当Chef-client仍在运行时npm仍在运行,并且中断chef-client将导致npm从进程列表中消失,这表明npm仍然认为它至少仍在进行有意义的工作.(另一方面,当我遇到连接问题时,我倾向于问这个问题.这是npm install另一个问题的潜在问题的可能性很高,但我认为他们需要单独考虑.) …

hang node.js chef-infra npm chef-recipe

5
推荐指数
1
解决办法
6377
查看次数

Celery提供对等连接重置

我设置rabbitmqserver并使用以下步骤添加了用户:

uruddarraju@*******:/usr/lib/rabbitmq/lib/rabbitmq_server-3.2.3$ sudo rabbitmqctl list_users 
Listing users ...
guest   [administrator]
phantom [administrator]
phantom1    []

sudo rabbitmqctl set_permissions -p phantom phantom1 ".*" ".*" ".*"

uruddarraju@******:/usr/lib/rabbitmq/lib/rabbitmq_server-3.2.3$ sudo netstat -tulpn | grep :5672
tcp6       0      0 :::5672                 :::*                    LISTEN      31341/beam.smp  
Run Code Online (Sandbox Code Playgroud)

我的芹菜配置是这样的:

BROKER_URL = 'amqp://phantom:phantom1@10.98.85.92/phantom'
Run Code Online (Sandbox Code Playgroud)

我的代码是这样的:

__author__ = 'uruddarraju'

from celery import Celery
import time
import celeryconfig

app = Celery('tasks')
app.config_from_object(celeryconfig)


@app.task
def add(x, y):
    print 'sleeping'
    time.sleep(20)
    print 'awoke'
    return x + y
Run Code Online (Sandbox Code Playgroud)

当我尝试跑步时

celery -A celery worker --loglevel=info 
Run Code Online (Sandbox Code Playgroud)

我懂了

[2014-07-08 23:30:05,028: ERROR/MainProcess] …
Run Code Online (Sandbox Code Playgroud)

python django redis celery flask

5
推荐指数
2
解决办法
7546
查看次数

如何找出消耗我的 DynamoDb 表读取容量的内容?

我们有一个 DynamoDB 表,我们认为我们可以关闭和删除它。我们关闭了对查询它的 Web 服务的调用方(并且可以在 Web 服务器指标上看到调用方已降至零),但 AWS 控制台仍显示读取容量消耗大于零。 显示读取容量消耗系列 > 0 的图表

但是,所有其他与读取相关的图表都没有显示数据:获取延迟、放置延迟、查询延迟、扫描延迟、获取记录、扫描返回的项目计数和查询返回的项目计数都是空白的。在我知道正在使用的其他表格上,这些图表显示了一些 > 0 的数据。

在我知道使用的其他表上,读取容量图仅显示已配置的行,没有使用的行。

该表仍在通过 Lambda 过滤和聚合来自 Kinesis 流的事件写入。我已经查看了 Lambda 代码,它没有专门从表中读取任何内容——当 lambda 更新或覆盖现有键的值时,读取容量是否会被消耗?

access-control amazon-web-services amazon-dynamodb aws-lambda

5
推荐指数
1
解决办法
1436
查看次数

HTTPS 标头和帖子正文哪个更安全?

发送 HTTPS 请求时,从安全角度来看,标头和帖子正文之间有什么区别吗?是否更容易泄露或被拦截?如果是这样,为什么?

我读过 GET 与 POST 以及各种身份验证和加密方案之间的比较,但没有读过 Header 与 application/x-www-form-urlencoded Post 主体的比较。我承认我只花了大约 20 分钟的谷歌搜索和 SO 搜索,所以如果之前已经介绍过这一点,我深表歉意。


虽然我相信这对于所有 HTTPS 流量都是通用的,但我是在 OpenId Connect 的上下文中询问的。我正在使用授权代码授予类型和 Spring Security OAuth 客户端库。

OIDC 规定客户端和授权服务器在将一次性代码交换为持久 ID 令牌时可以选择发送凭证的方法。引用openid.net openid-connect-core 第 9 节。客户端身份验证

本节定义了一组客户端身份验证方法,客户端使用这些方法在使用令牌端点时向授权服务器进行身份验证。在客户端注册期间,RP(客户端)可以注册客户端身份验证方法。如果没有注册方法,则默认方法是client_secret_basic。

这些客户端身份验证方法是:

client_secret_basic
从授权服务器收到 client_secret 值的客户端根据 OAuth 2.0 [RFC6749] 的第 2.3.1 节,使用 HTTP 基本身份验证方案向授权服务器进行身份验证。

注意,这是Authorization: Basic <value>标题。我正在集成的提供商通过 OpenId client_id 和 client_secret 与冒号和 Base64 编码连接来支持此功能。

client_secret_post
从授权服务器收到 client_secret 值的客户端,根据 OAuth 2.0 [RFC6749] 第 2.3.1 节,通过在请求正文中包含客户端凭证来向授权服务器进行身份验证。

我无法找到任何特定于 OpenId Connect 的内容来表达这两种方法之间的偏好。

我正在与允许任一方法的 OIDC 提供程序集成,但您必须进行选择,并且所有依赖的资源服务器必须符合单一选择。标题和帖子正文均以纯文本形式发送。(请注意,该提供程序不支持 …

security https post header openid-connect

5
推荐指数
1
解决办法
2950
查看次数

如何修复方法引用中的错误返回类型:无法将 RecipeIndicatorsDto 转换为 R?

如何修复下面的错误?

方法引用中的返回类型错误:无法将 RecipeIndicatorsDto 转换为 R

多谢你们

public List<RecipeIndicatorsDto> listByUploadTime(LocalDateTime localDateTime) {
    if(localDateTime!=null) {
        QRecipeIndicator qRecipeIndicator = recipeIndicatorRepo.getQEntity();
        QOrder qOrder=orderRepo.getQEntity();
        List<Predicate> predicates = new ArrayList<>();
        predicates.add(qRecipeIndicator.uploadTime.before(localDateTime));
        List<RecipeIndicator> recipeIndicators = recipeIndicatorRepo.find(predicates, new PageRequest(0, 100));
        List<Order> orders=orderRepo.find(null,new PageRequest(0,100));
        return recipeIndicators.stream()
                               .map(DtoFactory::recipeIndicatorsDto)
                               .collect(Collectors.toList());
}
          
public static RecipeIndicatorsDto recipeIndicatorsDto(RecipeIndicator recipeIndicator, Order order) {
    if (recipeIndicator != null&&order!=null) {
        RecipeIndicatorsDto recipeIndicatorsDto = new RecipeIndicatorsDto();
        recipeIndicatorsDto.setVerificationStatus(recipeIndicator.getVerificationStatus());  
        recipeIndicatorsDto.setUploadTime(recipeIndicator.getUploadTime());
        recipeIndicatorsDto.setRemark(order.getRemark());
        recipeIndicatorsDto.setUseDays(order.getUseDays());
}
Run Code Online (Sandbox Code Playgroud)

java

5
推荐指数
1
解决办法
5124
查看次数

google-cast示例ios/application的错误7是什么?

我下载了chromecast ios示例,当我将示例应用程序连接到chromecast时,它会出现以下错误:

error domain=com.google.GCKError code=7 "The operation couldn't be completed. (com.google.GCKError error 7.)"

你知道为什么吗?

ios google-cast

3
推荐指数
1
解决办法
3992
查看次数

DataGrip 升级 (2021.3.x) 后 MySQL 数据库连接中断

将 DataGrip 升级到版本 2021.3.2 后,我现有的数据库连接被破坏。我通过配置为通过 AWS 堡垒主机连接的 SSH 隧道连接到各种数据库(Oracle、MySql)。

升级后 - DataGrip 建议 MySql 驱动程序必须更新为 Amazon Aurora MySQL 驱动程序,并且它不再能够连接到升级前的工作位置。

在驱动程序之间切换时,我收到两个单独的错误:

使用 Amazon Aurora MySQL 时出现的第一个错误(更新后建议的驱动程序)

[08000][-1]无法连接到地址=(主机=本地主机)(端口= 53929)(类型=主):(conn = 57522706)无法加载系统变量[08000] [1220](conn = 57522706)连接已关闭。

使用原始 MySQL 驱动程序时出现第二个错误

[08S01]
通信链路故障

最后一次成功发送到服务器的数据包是在 0 毫秒前。驱动程序尚未收到来自服务器的任何数据包。
没有合适的协议(协议被禁用或密码套件不合适)。

我的所有连接在 DataGrip 升级之前都可以正常工作 - 所以看来升级需要新的驱动程序,这与我的连接方式有问题。

mysql driver amazon-aurora datagrip

3
推荐指数
1
解决办法
1364
查看次数