我支持一个.NET站点(其中很多,很多,其他东西)与供应商系统的远程API进行通信.
我们想升级以支持TLS 1.2我们希望按照这个问题这样做:是否有TLS 1.2的.NET实现?
但是,一旦我做出改变,我该如何检查这是否真的有效.
理想情况下,我的一个供应商网站将开始仅使用TLS 1.2 ,然后我的测试可能就是"我们现在可以与该供应商交谈吗?" 但我们没有那个.我猜我可以用某种类型的数据包嗅探器做一些事情,但我不知道我究竟在寻找什么,也不知道如何设置嗅探器以可读的方式收集必要的数据.
或者:
要么
显然,C# 可以处理嵌套表达式和链式表达式。如果嵌套和/或链接是线性的,那么很明显表达式的计算顺序是:
Foo(Bar(Baz().Bop()))
只能按以下顺序评估:
Baz()
Bop()
Bar()
Foo()
但如果嵌套不是线性的怎么办?考虑:Foo(Baz()).Bar(Bop())
显然以下内容必须全部为真:
Baz
前Foo
Foo
前Bar
Bop
前Bar
但目前尚不清楚具体何时Bop
进行评估。以下任何一项都是可行的订单:
Bop()
Baz()
Foo()
Bar()
Baz()
Bop()
Foo()
Bar()
Baz()
Foo()
Bop()
Bar()
我的直觉是第三个选项可能是正确的。即它会Foo(Baz())
在开始评估任何一个之前进行全面评估.Bar(Bop())
虽然我当然可以测试个别情况来看看会发生什么,但这并不能告诉我我的猜测是否总是会发生的?
但我的问题是: 分支嵌套表达式的求值顺序是定义为 C# 语言规范的一部分,还是留给编译器根据情况判断?
如果不是,至少知道它是确定性的吗?
这是一个学术问题. 可以说它背后有一个XY问题,我可以稍后单独发布.但我是真正的学术问题特别感兴趣,在这里.
我经常发现我有一组接口,它们都有共同的属性.我想要定义一个基本接口以使其共同化,部分原因是缺乏重复,部分原因是我可以在不知道确切类型的情况下传递对象并使用常用方法.
也许我有IFooRepository
,IBarRepository
等等,我可以宣布IRepository<TEntity>
.
或者我有IHappyBot
,ISadBot
,IConfusedBot
,都具有IBot
共同点.
值得注意的是,没有一个类可以直接实现这些基本接口 - 你永远不会有一些只能 实现的东西IBot
.
如果我们在讨论类的层次结构而不是接口,那么我会说"啊......基本的东西是抽象类".
有什么类似的东西我可以用接口来记录IBot
不会直接实现的期望.
我感兴趣的一个方面是做一些你以后可以通过反射检测的东西,这样当我测试我的DI设置时,我可以说"啊,这个界面不应该是可绑定的,因为它是"抽象的" .
我正在努力寻找简单的文档来说明其AsyncLocal<T>
作用。
我写了一些测试,我认为这些测试告诉我答案是“是”,但如果有人能证实这一点那就太好了!(特别是因为我不知道如何编写对线程和延续上下文有明确控制的测试......所以它们可能只是巧合地工作!)
据我了解,ThreadLocal
将保证如果您在不同的线程上,那么您将获得对象的不同实例。
ThreadLocal
对象已经被使用过的线程)。await
却不太愉快。您继续的线程(即使)不能保证与您开始的线程相同,因此您可能无法从另一端.ConfigureAwait(true)
返回相同的对象。ThreadLocal
相反,AsyncLocal
确实保证您将在调用的两侧获得相同的对象await
。
但我找不到任何地方实际上说AsyncLocal
将获得特定于初始线程的值,首先!
IE:
MyAsyncMethod
),它在调用的任一侧引用其类中的“共享”AsyncLocal
字段 ( ) 。myAsyncLocal
await
我知道,对于 ,的每次单独调用MyAsyncMethod
,myAsyncLocal.Value
将在等待之前和之后返回相同的对象(假设没有任何内容重新分配它)
但是否能保证每次调用首先都会查看不同的对象?
正如一开始提到的,我创建了一个测试来尝试自己确定这一点。以下测试一致通过
public class AssessBehaviourOfAsyncLocal
{
private class StringHolder
{
public string HeldString { get; set; }
}
[Test, Repeat(10)]
public void RunInParallel()
{
var reps = Enumerable.Range(1, 100).ToArray();
Parallel.ForEach(reps, index => …
Run Code Online (Sandbox Code Playgroud) 资料来源:Google Code Jam.https://code.google.com/codejam/contest/10224486/dashboard#s=a&a=1
我们被要求计算Prob(来自N次试验的K次成功),其中N次试验中的每一次都具有已知的p_n成功概率.
Code Jam之后给出了一些问题的分析和思考.
他们观察到,评估N次试验的所有可能结果将使你在N中呈指数时间,因此它们提供了一个很好的"动态编程"式解决方案,即O(N ^ 2).
设P(p#q)= Prob(p在第一次q试验后成功)然后观察以下事实:
Prob(p#q) = Prob(qth trial succeeds)*P(p-1#q-1) + Prob(qth trial fails)*P(p#q-1)
Run Code Online (Sandbox Code Playgroud)
现在我们可以建立一个P(i#j)表,其中i <= j,i = 1 ... N.
这一切都很可爱 - 我遵循所有这些并且可以实现它.
然后作为最后的评论,他们说:
In practice, in problems like this, one should store the logarithms of
probabilities instead of the actual values, which can become small
enough for floating-point precision errors to matter.
Run Code Online (Sandbox Code Playgroud)
我想我广泛理解他们想要做的事情,但我特别想不出如何使用这个建议.
采用上面的等式,并在一些字母变量中进行替换:
P = A*B + C*D
Run Code Online (Sandbox Code Playgroud)
如果我们想在Log Space中工作,那么我们有:
Log(P) = Log(A*B + C*D),
Run Code Online (Sandbox Code Playgroud)
在这里我们递归预先计算Log(B)
和Log(D)
,并 …
请参阅:https ://reactjs.org/blog/2015/12/16/ismounted-antipattern.html 以及此处:如何取消对componentWillUnmount的获取并在此处:ismounted antipattern,track own property
在这两种情况下,他们提到了3种方
promise.resolve
支票中this.IsMounted()
,如果"已安装已卸载",React将为您正确返回promise.resolve
检查中_isMounted
,您已在ComponentWillUnmount()
方法中手动跟踪.promise
永远不会解决.这将解决你所有的问题并让它变得可爱.除了,在第三种情况下你的promise
遗嘱error()
,但也可能error()
在其他情况下(例如API已关闭).
所以实际上第3个选项可归结为: - 在您的promise.error
检查中errorPayload.IsCancelled
,您已在cancellablePromise
对象中手动跟踪,而该检查又由手动调用触发ComponentWillUnmount
.
所以这三个都完全相同:
处理
promise
结果时,请检查此变量的值,该值与组件是否已经存在直接关联unmounted
.
为什么他们声称第3个选项比其他2更好,并且第1个选项是反模式.
假设我希望能够比较2个整数列表并将一个特定值视为外卡.
例如,如果-1是外卡,那么
{1,2,3,4} == {1,2,-1,4} //returns true
我正在编写一个类来包装所有这些逻辑,因此它实现IEquatable
并具有相关的逻辑public override bool Equals()
但是,GetHashCode
如果你压倒一切,我一直认为你或多或少必须实施.Equals()
.虽然它没有被编译器强制执行,但我一直认为如果你不这样做那么你做错了.
除非我不知道如何在.GetHashCode()
不破坏合同的情况下实现(Equal的对象具有不同的哈希值),或者只是执行实现return 1
.
思考?
在我的C#代码中,我有2个WHERE查询,我可以在IQueryable上调用它们,并将整个事务编译成SQL,并且这两个查询都有很多共同的逻辑.
我相信这不是这个类似问题的重复: 在实体框架查询的选择子句中使用函数,因为在我的场景中,有问题的函数可以转换为SQL - EF只是没有意识到它可以这样做.
查询大约是:
public static IQueryable<Template> WhereIsOwnedByUser(this IQueryable<Template> set, User user)
{
return set.Where(temp =>
temp.Requests
.Where(req => req.WasSent)
.OrderByDescending(req => req.DueDate)
.Take(2)
.SelectMany(req => req.RequestRecipients.Select(reqRecip => reqRecip.Recipient.Id))
.Contains(user.Id));
}
Run Code Online (Sandbox Code Playgroud)
和
public static IQueryable<Template> WhereIsOwnedByUser(this IQueryable<DataReturn> set, User user)
{
return set.Where(ret=>
ret.Entity.Id == user.Entity.Id
&&
ret.Request.Template.Requests
.Where(req => req.WasSent)
.OrderByDescending(req => req.DueDate)
.Take(2)
.SelectMany(req => req.RequestRecipients.Select(reqRecip => reqRecip.Recipient.Id))
.Contains(user.Id));
}
Run Code Online (Sandbox Code Playgroud)
因此,"拥有模板"的基本BusinessLogic规则,然后是"拥有DataReturn,如果公司匹配AND拥有模板"的必然结果
正如您所看到的,只考虑C#,这些可以很容易地重构为:
private static bool UserOwnsTemplate(User user, Template temp)
{
return temp.Requests
.Where(req => req.WasSent) …
Run Code Online (Sandbox Code Playgroud) 以下是有效的SQL语法:
SELECT *
FROM (VALUES ('p','q'),('x','y')) AS TableLiteral(Col1, Col2)
Run Code Online (Sandbox Code Playgroud)
并返回表:
| Col1 | Col2
----------------
1 | p | q
2 | x | y
Run Code Online (Sandbox Code Playgroud)
这种语法可以进一步用于CTE等.
这有名字吗?我一直称它们为"TableLiterals",类似于字符串文字和正则表达式文字.
是否有一个将被广泛认可的术语.
我正在尝试使用Selenium和.NET Core组建一个网络抓取应用程序,但是我无法找到我的WebDriver exe
.
我有一个.csproj,它将运行项目的API,调用(以及其他)另一个将处理webscraping的.csproj.所有都在单个.sln中,并且都运行.NET Core 2.1
在刮凸出,我已经的NuGet安装Selenium.WebDriver
和Selenium.WebDriver.ChromeDriver
.
我在API中创建了一个端点,它调用了抓取项目,并运行了一个尝试调用的方法new ChromeDriver()
.它不起作用:(具体来说,我得到:
The chromedriver.exe file does not exist in the current directory or in a directory on the PATH environment variable. The driver can be downloaded at ... <url>
Run Code Online (Sandbox Code Playgroud)
看起来相当清楚(虽然它令人失望并没有告诉你"当前目录"是什么意思.我将立刻提交PR)
dll
s和exe
s都存储在Global Nuget缓存中,而不是packages
解决方案目录中的nuget 文件夹.
chromedriver.exe
出现得到复制到<solutionFolder>\<ScrapingProjectFolder>\bin\Debug\chromeDriver.exe
.
ChromeDriver
Nuget包的功能; 当然我自己没有配置它.new ChromeDriver()
JustWork".WebDriver.dll
".
<globalNugetPackagesCache>\selenium.webdriver\3.141.0\lib\netstandard2.0
"c# ×6
sql-server ×2
.net ×1
algorithm ×1
async-await ×1
evaluation ×1
expression ×1
fiddler ×1
function ×1
hashcode ×1
iequatable ×1
interface ×1
javascript ×1
logarithm ×1
precision ×1
reactjs ×1
selenium ×1
t-sql ×1
terminology ×1
tls1.2 ×1
wildcard ×1
wireshark ×1