小编Eri*_*ikE的帖子

在PowerShell中获取HTTP请求并容忍500服务器错误

在Powershell v3.0中,我想从HTTP GET返回响应代码,例如200 OK500 Internal Server Error.(这是为了进行黑客部署,对已部署的站点进行快速预热并查看它是否有效,这是一种小型验收测试.状态代码确实是我想要的.)

违背我的意愿,HttpWebRequest.GetResponse收到错误时会抛出错误500 Internal Server Error.这很烦人,因为在我的用例中它对我来说并不是一个错误.无论如何,我认为我可以捕获异常并仍然剥离底层响应代码,但我遇到了麻烦.

这是一些几乎可以工作的代码:

function WebResponseStatusCode (
   [Parameter(Mandatory=$true)][string] $url
) {
    $req = [system.Net.HttpWebRequest]::Create($url)
    try {
        $res = $req.GetResponse();
        $statuscode = $res.statuscode;
    }
    catch [System.Net.WebException] {
        #the outer error is a System.Management.Automation.ErrorRecord
        Write-Host "error!"
        return = $_.Response.statuscode; #nope
    }
    finally {
        if (!($res -eq $null)) {
           $res.Close();
        }
    }
   return $statuscode;
}
Run Code Online (Sandbox Code Playgroud)

问题当然是$_没有Response财产.也不是$_.InnerException,即使是演员:

return [System.Net.WebException]($_.InnerException)
Run Code Online (Sandbox Code Playgroud)

我玩过$_ | …

powershell http-request

14
推荐指数
1
解决办法
9976
查看次数

识别由左侧的delta和右侧的不同delta链接的集群

考虑排序的数组a:

a = np.array([0, 2, 3, 4, 5, 10, 11, 11, 14, 19, 20, 20])
Run Code Online (Sandbox Code Playgroud)

如果我指定了左右三角形,

delta_left, delta_right = 1, 1
Run Code Online (Sandbox Code Playgroud)

那么这就是我期望分配集群的方式:

#   a = [ 0  .  2  3  4  5  .  .  .  . 10 11  .  . 14  .  .  .  . 19 20
#                                         11                         20
#
#                                     [10--|-12]                 [19--|-21]
#           [1--|--3]                 [10--|-12]                 [19--|-21]
#    [-1--|--1]   [3--|--5]         [9--|-11]                 [18--|-20]
#   +--+--|--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
#              [2--|--4]                       [13--|-15]
#
#         ?    ????????                 ????        ?              ????
#         ?   cluster …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

13
推荐指数
1
解决办法
303
查看次数

为什么Java Collector.toList()在其返回类型中需要通配符类型占位符?

我一直在做一些Java Streams操作,当然它不喜欢我的代码,并且拒绝提供有用的错误消息.(作为参考,我对C#和Linq没有任何问题,所以我从概念上理解了我想要做的一切.)所以我开始深入研究将明确的泛型类型添加到我的代码中的每个方法中,这样我就能找到源代码问题,正如过去的经验告诉我,这是一条成功的前进道路.

环顾四周,我碰到了一些我不理解的东西.请考虑Java源代码中的以下代码(重新格式化一点):

public static <T> Collector<T, ?, List<T>> toList() {
    return new Collectors.CollectorImpl<>(
        (Supplier<List<T>>) ArrayList::new,
        List::add,
        (left, right) -> {
             left.addAll(right);
             return left;
        },
        Collectors.CH_ID
    );
}
Run Code Online (Sandbox Code Playgroud)

为什么toList方法签名?在其返回类型中需要通配符?当我删除它,我得到

Wrong number of type arguments: 2; required: 3
Run Code Online (Sandbox Code Playgroud)

Incompatible types.
Required: Collector<T, List<T>, >
Found: CollectorImpl<java.lang.Object, List<T>, java.lang.Object>
Run Code Online (Sandbox Code Playgroud)

当我改为?Object,我得到(参考上面代码中的这些行/方法):

List::add – Cannot resolve method 'add'
left.addAll – Cannot resolve method 'addAll(java.lang.Object)'
Run Code Online (Sandbox Code Playgroud)

当我把通配符放回去检查这两个时,它们是:

List – public abstract boolean add(T e)
List – public …
Run Code Online (Sandbox Code Playgroud)

java generics wildcard

13
推荐指数
1
解决办法
133
查看次数

将多个列拆分为多个行

我有一个这种结构的表.

UserID  | UserName  | AnswerToQuestion1 | AnswerToQuestion2 | AnswerToQuestion3
1       | John      | 1                 | 0                 | 1
2       | Mary      | 1                 | 1                 | 0
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚我将使用什么SQL查询来获取这样的结果集:

UserID  | UserName  | QuestionName      | Response
1       | John      | AnswerToQuestion1 | 1
1       | John      | AnswerToQuestion2 | 0
1       | John      | AnswerToQuestion3 | 1
2       | Mary      | AnswerToQuestion1 | 1
2       | Mary      | AnswerToQuestion2 | 1
2       | Mary      | AnswerToQuestion3 | 0
Run Code Online (Sandbox Code Playgroud)

我正在尝试将三列分成三个单独的行.这可能吗?

sql sql-server unpivot

12
推荐指数
3
解决办法
2万
查看次数

参数的最佳实践:IEnumerable与IList对比IReadOnlyCollection

当得到延迟执行的值时,我会从一个方法返回一个IEnumerable.并且返回a List或者IList应该只是在结果将被修改时,否则我将返回一个IReadOnlyCollection,所以调用者知道他得到的不是用于修改(这使得该方法甚至可以重用来自其他调用者的对象) ).

但是,在参数输入方面,我有点不太清楚.我可以拿一个IEnumerable,但如果我需要不止一次枚举怎么办?

俗话说" 你所发送的是保守的,你接受的是自由主义",这表明服用IEnumerable是好的,但我并不确定.

例如,如果以下IEnumerable参数中没有元素,则可以通过.Any()先检查在此方法中保存大量工作,这在此ToList()之前需要避免枚举两次.

public IEnumerable<Data> RemoveHandledForDate(IEnumerable<Data> data, DateTime dateTime) {
   var dataList = data.ToList();

   if (!dataList.Any()) {
      return dataList;
   }

   var handledDataIds = new HashSet<int>(
      GetHandledDataForDate(dateTime) // Expensive database operation
         .Select(d => d.DataId)
   );

   return dataList.Where(d => !handledDataIds.Contains(d.DataId));
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道什么是最好的签名,在这里?一种可能性是IList<Data> data,但接受列表表明您打算修改它,这是不正确的 - 这种方法不会触及原始列表,所以IReadOnlyCollection<Data>看起来更好.

但是,即使使用自定义扩展方法,也会IReadOnlyCollection强制调用者 …

c# collections parameters

12
推荐指数
2
解决办法
2005
查看次数

LINQ to DataSet不区分大小写的组

我有一个数据表,我想通过一列数据表(比如Column1string类型)执行不区分大小写的组.我观察到通常LINQ to DataSet执行区分大小写的比较.例如,如果Column1有两个字符串值"Test"和"test",则在应用group by它之后返回两个单独的行,其值为"Test"和"test",而不是一个.

查询是:

var countGroupQuery = from table in dataTable.AsEnumerable()
                      group table by table.Field<string>(Column1) into groupedTable
                      select new
                      {
                          value = groupedTable.Key,
                          count = groupedTable.Count()
                      };
Run Code Online (Sandbox Code Playgroud)

是否有任何方法来执行不区分大小写,group by以便在上面的示例中我只获得一行具有一个值("Test"或"test")?ToUpper或者ToLower实际上将值更改为大写或小写而不是使用至少一个输入值,所以我不想使用它:

group table by table.Field<string>(Column1).ToUpper() into groupedTable
Run Code Online (Sandbox Code Playgroud)

linq datatable group-by case-insensitive dataset

11
推荐指数
1
解决办法
8017
查看次数

Oracle SQLDeveloper小写自动完成(大写怎么样)

我目前正在使用最新的Oracle sql开发人员.我这里只有一个麻烦.当我自动完成表名或列时,它们以小写形式显示.由于大多数人在SQL语句中都有编码指南,我通常需要所有大写的表名,列名和任何其他标识符.

我试图检查sql developer中的设置,"Code Insight"部分没有任何选项.还有其他调整吗?

oracle autocomplete oracle-sqldeveloper uppercase

11
推荐指数
3
解决办法
3万
查看次数

查询在Oracle SQL Developer中快速运行,但在SSRS 2008 R2中运行缓慢

就是这么简单:在SQL Developer连接到Oracle 11g的几秒钟内运行的查询在SSRS 2008 R2中需要15-25分钟.我还没有尝试过其他版本的SSRS.到目前为止,我正在从VS 2008执行所有报告执行.

我正在使用OLE DB提供程序"OraOLEDB.Oracle.1",它在过去似乎比使用Oracle提供程序给我更好的结果.

这是我到目前为止所能确定的:

•延迟是在DataSet执行阶段,与结果集或渲染时间无关.(通过直接从我插入的表中选择相同的行集来证明.)

•SSRS本身并未挂断.它确实在等待延迟所在的Oracle(通过从Oracle端终止数据库会话来证明,这导致SSRS中关于被杀死的会话的快速错误).

•我尝试使用以下形式的参数进行直接查询:参数.我的查询的早期版本更简单,可以直接查询,但似乎过了一定的复杂性,查询将从SSRS开始永远.

•然后我切换到执行将查询结果插入表或全局临时表的SP.这有点帮助,让我比直接查询更远,但同样,似乎增加的查询复杂性或长度最终也破坏了这种方法.注意:运行填充表的SP是可行的,因为在DataSource选项中选中了"使用单个事务"选项,然后按照它们在rdl文件中的出现顺序运行DataSet.只要满足所有参数,仍然会运行不返回Fields的DataSet.

•我刚刚尝试了一个表返回函数,这仍然没有改进,即使在SQL Developer中使用文字参数的直接调用在1-5秒内返回.

•有问题的数据库没有统计数据.它是供应商创建的产品的一部分,我们没有时间或管理层支持来创建/更新统计数据.我使用DYNAMIC_SAMPLING提示来动态计算统计数据并获得更好的执行计划:没有统计数据,基于成本的优化器很少使用LOOP连接而不是HASH连接,导致类似的多分钟执行时间.因此,我提出了查询提示来强制连接顺序,并使其使用策略散列连接,将执行时间缩短到几秒钟.我没有回去尝试使用这些执行提示直接在SSRS中查询.

•我从我们的Oracle DBA那里得到了一些帮助,他们设置了一个跟踪(或者等同于Oracle的东西)并且他能够看到正在运行的东西,但到目前为止他还没有找到任何有用的东西.不幸的是,他的时间有限,我们无法真正深入了解服务器端的执行情况.我没有经验可以快速完成这项工作,也没有时间自己研究如何做到这一点.关于如何确定发生了什么的建议将不胜感激.

我唯一的假设是:

•查询以某种方式获得了糟糕的执行计划.例如,当存在数万个"左"或外环行而不是仅仅几百个时,不正确地使用LOOP连接而不是HASH连接.

•SSRS可以将参数提交为nvarchar(4000)或其他东西而不是合理的东西,并且由于Oracle SP和函数参数没有长度规范但是从查询调用中获取它们的执行长度,那么参数嗅探等一些过程就是弄乱执行计划,就像前一点一样.

•查询以某种方式被SSRS /提供者重写.我使用多值参数,但不是这样:参数作为表达式Join(参数!MultiValuedParameter.Value,",")提交,因此它不需要任何重写.只是一个简单的绑定和提交.我不知道在SP和函数调用中这是怎么回事,但天哪,还有什么呢?

我意识到这是一个非常复杂和冗长的查询,但它完全符合我的需要.它会在1-5秒内运行,具体取决于要求的数据量.造成这种复杂性的一些原因是:

  • 正确处理逗号分隔的成本中心列表参数
  • 允许每周细分是可选的,如果包括在内,即使没有数据,也可以确保一个月内的所有周数.
  • 适当时显示"No Invoices".
  • 允许可变数量的汇总月份.
  • 有一个可选的YTD总计.
  • 包括以前/历史比较数据意味着我不能简单地用这个月的销售商,我要显示所有的供应商,将在任何历史列.

无论如何,所以这里是查询,SP版本(虽然我认为它不会有太大帮助).

create or replace
PROCEDURE VendorInvoiceSummary (
   FromDate IN date,
   ToDate IN date,
   CostCenterList IN varchar2,
   IncludeWeekly IN varchar2,
   ComparisonMonths IN number,
   IncludeYTD IN varchar2
)
AS
BEGIN

INSERT INTO InvoiceSummary (Mo, CostCenter, Vendor, VendorName, Section, TimeUnit, Amt)
SELECT
   Mo,
   CostCenter,
   Vendor,
   VendorName,
   Section,
   TimeUnit,
   Amt …
Run Code Online (Sandbox Code Playgroud)

sql-server oracle execution-time oracle11g ssrs-2008

11
推荐指数
1
解决办法
4749
查看次数

SQL Server中的对象名称"information_schema.columns"无效

以下查询用于工作:

select * from information_schema.columns where column_name like ...
Run Code Online (Sandbox Code Playgroud)

但现在它抛出一个错误:

Server: Msg 208, Level 16, State 1, Line 1
Invalid object name 'information_schema.columns'.
Run Code Online (Sandbox Code Playgroud)

应用程序已升级,但视图仍必须存在于数据库中.

sql-server information-schema

11
推荐指数
1
解决办法
1万
查看次数

具有循环依赖性的静态字段的反射GetValue返回null

注意:以下代码实际上可以正常工作,但显示了我自己的解决方案中失败的方案.有关更多信息,请参阅本文的底部.

有了这些课程:

public class MainType {
   public static readonly MainType One = new MainType();
   public static readonly MainType Two = SubType.Two;
}

public sealed class SubType : MainType {
   public new static readonly SubType Two = new SubType();
}
Run Code Online (Sandbox Code Playgroud)

获取字段OneTwo:

List<FieldInfo> fieldInfos = typeof(MainType)
   .GetFields(BindingFlags.Static | BindingFlags.Public)
   .Where(f => typeof(MainType).IsAssignableFrom(f.FieldType))
   .ToList();
Run Code Online (Sandbox Code Playgroud)

最后,得到他们的价值观:

List<MainType> publicMainTypes = fieldInfos
   .Select(f => (MainType) f.GetValue(null))
   .ToList();
Run Code Online (Sandbox Code Playgroud)

在LinqPad或带有上述代码的简单单元测试类中,一切正常.但是在我的解决方案中,我有一些想要处理这些字段的所有实例的单元测试,GetValue可以返回父类型的字段,但是父字段应该具有子类型的实例,它们总是代替null!(如果发生在这里,那么最终列表将{ One, null }代替{ One, Two }.)测试类与两种类型(每个都在他们自己的文件中)处于不同的项目中,但我暂时将 …

c# reflection static c#-6.0 visual-studio-2015

11
推荐指数
1
解决办法
413
查看次数