我最近在" 你更有争议的编程意见是什么 "中发布了我最喜欢的采访白板编码问题之一,即编写一个使用Leibniz公式计算Pi的函数.
它可以通过多种不同的方式进行处理,退出条件需要一些思考,所以我认为它可能会成为一个有趣的代码高尔夫问题.最短的代码获胜!
假设Pi可以使用函数4*(1 - 1/3 + 1/5 - 1/7 + ...)估算,更多项更精确,可以编写一个函数来计算Pi到0.00001以内.
编辑:2008年1月3日
正如评论中所建议的那样,我将退出条件更改为0.00001,因为这就是我的真实含义(由于四舍五入,精确度小数点后五位更难,所以我不想在面试中问这个,而在0.00001以内是更容易理解和实现退出条件).
另外,为了回答评论,我想我的意图是解决方案应该计算迭代次数,或检查它何时做得足够多,但没有什么可以阻止你预先计算迭代次数并使用该数字.我真的有兴趣问这个问题,看看人们会想出什么.
在我们的构建过程中,我们aspnet_compiler.exe针对我们的网站运行,以确保ASP.NET/MVC中所有后期绑定的内容实际构建(我对ASP.NET一无所知,但我确信这对于防止在运行时发现故障是必要的).
我们的网站规模相当大,有几百页/观看/控制/等.然而,在10-15分钟范围内所花费的时间似乎过多(作为参考,这比整个解决方案需要大约40个项目的编译时间更长,我们只是预编译了两个网站项目).
我怀疑硬件是问题,因为我运行的是最新的四核英特尔芯片,配备4GB内存和WD Velociraptor 10,000rpm硬盘.而奇怪的部分是EXE似乎没有使用太多的CPU(1-5%)并且似乎也没有做太多的I/O.
那么......这是一个众所周知的问题吗?为什么这么慢?有没有办法加快速度?
注意:为了澄清人们已经回答的一些事情,我不是在谈论Visual Studio中的代码编译.我们已经在使用Web应用程序项目了,编译速度不是问题.问题是在已经编译这些项目之后预先编译网站(有关详细信息,请参阅此MSDN页面)作为开发构建脚本的一部分.我们正在执行就地预编译,而不是将文件复制到目标目录.
使用ASP.NET MVC Preview 5(尽管已经尝试使用Beta),路由中的查询字符串默认值会覆盖查询字符串中传递的值.一个repro就是写一个像这样的控制器:
public class TestController : Controller
{
public ActionResult Foo(int x)
{
Trace.WriteLine(x);
Trace.WriteLine(this.HttpContext.Request.QueryString["x"]);
return new EmptyResult();
}
}
Run Code Online (Sandbox Code Playgroud)
路由映射如下:
routes.MapRoute(
"test",
"Test/Foo",
new { controller = "Test", action = "Foo", x = 1 });
Run Code Online (Sandbox Code Playgroud)
然后使用这个相对URI调用它:
/Test/Foo?x=5
Run Code Online (Sandbox Code Playgroud)
我看到的跟踪输出是:
1
5
Run Code Online (Sandbox Code Playgroud)
换句话说,为路径设置的默认值总是传递给方法,而不管它是否实际上是在查询字符串上提供的.请注意,如果删除了查询字符串的默认值,即路由映射如下:
routes.MapRoute(
"test",
"Test/Foo",
new { controller = "Test", action = "Foo" });
Run Code Online (Sandbox Code Playgroud)
然后控制器按预期运行,并将值作为参数值传入,给出跟踪输出:
5
5
Run Code Online (Sandbox Code Playgroud)
这对我来说就像一个bug,但我会发现非常令人惊讶的是,像这样的bug仍然可以在ASP.NET MVC框架的测试版中,因为带有默认值的查询字符串并不完全是一个深奥或边缘的功能,所以这几乎肯定是我的错.我有什么想法我做错了吗?
我目前正在努力指定我公司的新合作伙伴/公共API,这将是一个面向资源的RESTful Web服务.目前这个难题的缺失部分是认证/授权.
要求是:
OAuth似乎是理想的(2)获取令牌的工作流程,重定向到用户输入其凭据以授权它的网站,然后使用该标记来识别/验证应用程序和用户.
但是,从我读,我不知道这是否是适合于(1) -即是否有任何方式的OAuth可以用来只是识别调用应用程序,而无需有效的用户特定的标记,因此不需要要重定向到网页,以便他们输入凭据?
我正在使用ASP.NET MVC实现REST API,并且Expect: 100-continue对于具有帖子正文的请求,请求头的形式出现了一个小绊脚石.
RFC 2616声明:
在收到包含具有"100-continue"期望的Expect请求标题字段的请求时,源服务器必须以100(继续)状态响应并继续从输入流中读取,或者以最终状态代码进行响应.在发送100(继续)响应之前,源服务器不得等待请求主体.如果它以最终状态代码响应,它可以关闭传输连接,或者它可以继续读取并丢弃请求的其余部分.如果它返回最终状态代码,则它不能执行所请求的方法.
这听起来像我需要对请求做出两个响应,即它需要立即发送HTTP 100 Continue响应,然后继续读取原始请求流(即HttpContext.Request.InputStream)而不结束请求,然后最终发送结果状态代码(为了参数,我们可以说它是204 No Content结果).
所以,问题是:
wrt(2)我在继续阅读输入流之前尝试使用以下代码...
HttpContext.Response.StatusCode = 100;
HttpContext.Response.Flush();
HttpContext.Response.Clear();
Run Code Online (Sandbox Code Playgroud)
...但是当我尝试设置最终的204状态代码时,我收到错误:
System.Web.HttpException:在发送HTTP标头后,服务器无法设置状态.
我是MVVM的新手,所以如果这个问题有一个众所周知的解决方案,请原谅.
我们正在构建一组模型类,它们具有一些预先加载的核心属性,以及一些可以通过进行Web API调用来按需加载延迟的其他属性(更新:澄清,它将是一个每个延迟加载的属性的Web API调用).
而不是拥有多个模型,拥有一个带有延迟加载逻辑的单个模型似乎是明智的.但是,似乎懒惰加载的属性在访问时不应该阻塞,因此当View绑定到ViewModel并且它绑定到Model时,我们不会阻止UI线程.
因此,我正在考虑一种模式,当模型上的惰性属性被访问时,它开始异步获取,然后立即返回默认值(例如null).异步提取完成后,它将引发一个PropertyChanged事件,以便ViewModel/View可以重新绑定到获取的值.
我已经尝试过了,它看起来效果很好,但是想知道:
我对OAuth草案RFC(特别是它包含的一些错误)有一些评论,但我不确定接受它的方法是什么.
底部有一个电子邮件地址,所以我只是在那里发送带有评论的邮件,还是有一些IETF工具我应该知道跟踪评论/问题?
我正在寻找使用lamba表达式来允许事件以强类型方式连接,但是在中间有一个监听器,例如给定以下类
class Producer
{
public event EventHandler MyEvent;
}
class Consumer
{
public void MyHandler(object sender, EventArgs e) { /* ... */ }
}
class Listener
{
public static void WireUp<TProducer, TConsumer>(
Expression<Action<TProducer, TConsumer>> expr) { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)
事件将被连线为:
Listener.WireUp<Producer, Consumer>((p, c) => p.MyEvent += c.MyHandler);
Run Code Online (Sandbox Code Playgroud)
但是这会给编译器错误:
CS0832:表达式树可能不包含赋值运算符
现在起初这似乎是合理的,特别是在阅读了关于为什么表达式树不能包含赋值的解释之后.但是,尽管有C#语法,但+=它不是赋值,它是对Producer::add_MyEvent方法的调用,正如我们可以从CIL中看到的那样,如果我们只是正常连接事件:
L_0001: newobj instance void LambdaEvents.Producer::.ctor()
L_0007: newobj instance void LambdaEvents.Consumer::.ctor()
L_000f: ldftn instance void LambdaEvents.Consumer::MyHandler(object, class [mscorlib]System.EventArgs)
L_0015: newobj instance void [mscorlib]System.EventHandler::.ctor(object, …Run Code Online (Sandbox Code Playgroud) 如果将多个属性应用于成员,例如
[Foo]
[Bar]
void Baz() { ... }
Run Code Online (Sandbox Code Playgroud)
那么CLR/.NET规范是否保证在通过反射检索它们时将检索它们的顺序(例如Attribute.GetCustomAttributes)?这些方法的文档并没有明确说明,虽然它们似乎是按照它们应用的顺序返回的,但我不想依赖于未记录的行为,因为它只是在寻找麻烦.
至于为什么这可能很重要,想象一下这些属性用于表示该方法应该有一系列拦截器,这些拦截器应该以特定的顺序运行.
如果我有一个任意函数myFunc,那么我的目标是用一个在执行代码之前和之后运行代码的包装调用替换这个函数,例如
// note: psuedo-javascript
var beforeExecute = function() { ... }
var afterExecute = function() { ... }
myFunc = wrap(myFunc, beforeExecute, afterExecute);
Run Code Online (Sandbox Code Playgroud)
但是,我没有所需wrap功能的实现.这样的jQuery中是否存在任何东西(我通过文档很好看但却看不到任何东西)?或者有人知道这个的一个很好的实现,因为我怀疑有一堆边缘情况,如果我自己尝试写,我会想念?
(顺便说一句 - 这样做的原因是要做一些功能的自动检测,因为我们在Javascript剖析器等不可用的封闭设备上做了很多工作.如果有比这更好的方法那么我会很感激这些方面的答案太.)
asp.net-mvc ×2
oauth ×2
.net ×1
asp.net ×1
attributes ×1
c# ×1
code-golf ×1
http ×1
http-headers ×1
javascript ×1
jquery ×1
lambda ×1
lazy-loading ×1
mvvm ×1
query-string ×1
rfc ×1
routing ×1
silverlight ×1
wpf ×1