我很难理解算法中问题的根本原因.然后,通过逐步简化函数,我发现在Python中对默认参数的评估并不像我预期的那样.
代码如下:
class Node(object):
def __init__(self, children = []):
self.children = children
Run Code Online (Sandbox Code Playgroud)
问题是children如果没有明确给出属性,Node类的每个实例都共享相同的属性,例如:
>>> n0 = Node()
>>> n1 = Node()
>>> id(n1.children)
Out[0]: 25000176
>>> id(n0.children)
Out[0]: 25000176
Run Code Online (Sandbox Code Playgroud)
我不明白这个设计决定的逻辑?为什么Python设计者决定在定义时评估默认参数?这对我来说似乎非常违反直觉.
据我了解,双方java.lang.Long并java.math.BigInteger可以容纳非常大的自然数.
我也知道Long的最大值,但BigInteger的最大值是多少?
除了容量之外,BigInteger在处理仍然落在Long范围内的一般大整数时会表现得更好吗?
唯一的考虑因素是:我的价值对于龙来说太大了吗?
有没有办法从C#应用程序查看生成的网页源(所有AJAX调用和JavaScript DOM操作之后的代码),而无需从代码中打开浏览器?
使用WebRequest或WebClient对象查看初始页面工作正常,但如果页面大量使用JavaScript来更改页面加载时的DOM,则这些页面无法准确显示页面.
我尝试过使用Selenium和Watin UI测试框架,它们完美地工作,提供所有JavaScript操作完成后出现的生成源.不幸的是,他们通过打开一个非常慢的实际Web浏览器来实现这一点.我已经实现了一个selenium服务器,它将这项工作卸载到另一台机器上,但仍有很大的延迟.
是否有.Net库可以加载和解析页面(如浏览器)并吐出生成的代码?显然,谷歌和雅虎并没有为他们想要蜘蛛的每个页面开放浏览器(当然,他们可能拥有比我更多的资源......).
除非我愿意剖析开源浏览器的源代码,否则是否有这样的库或我运气不好?
解
好的,谢谢大家的帮助.我有一个比Selenium快10倍的工作解决方案.呜!
感谢来自beansoftware的这篇旧文章,我能够使用System.Windows.Forms.WebBrowser控件下载页面并解析它,然后给em生成源代码.即使控件在Windows.Forms中,你仍然可以从Asp.Net运行它(这就是我正在做的),只需记住将System.Window.Forms添加到项目引用中.
关于代码有两个值得注意的事情.首先,在新线程中调用WebBrowser控件.这是因为它必须在单线程公寓上运行.
其次,GeneratedSource变量设置在两个地方.这不是由于智能设计决定:)我还在努力,并在我完成后更新这个答案.多次调用wb_DocumentCompleted().首先下载初始HTML,然后在第一轮JavaScript完成时再次下载.不幸的是,我正在抓的网站有3个不同的加载阶段.1)加载初始HTML 2)执行第一轮JavaScript DOM操作3)暂停半秒然后进行第二轮JS DOM操作.
由于某种原因,第二轮不是由wb_DocumentCompleted()函数引起的,但是当wb.ReadyState == Complete时它总是被捕获.那么为什么不从wb_DocumentCompleted()中删除它呢?我仍然不确定为什么它没有被抓到那里,这是珠宝软件文章推荐的地方.我要继续研究它.我只是想发布这个代码,所以任何有兴趣的人都可以使用它.请享用!
using System.Threading;
using System.Windows.Forms;
public class WebProcessor
{
private string GeneratedSource{ get; set; }
private string URL { get; set; }
public string GetGeneratedHTML(string url)
{
URL = url;
Thread t = new Thread(new ThreadStart(WebBrowserThread));
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
return GeneratedSource;
}
private void WebBrowserThread()
{
WebBrowser wb = new …Run Code Online (Sandbox Code Playgroud) 我已经安装了Git来使用Visual Studio 2008进行一些开发.大部分工作都是新开发的,但是我们确实有一些来自VS2005之前的旧项目,我想把它带到新的存储库中.有关于一般VS/Git集成的现有线程,但我的问题仅限于.gitignore文件和Visual Studio.
我的问题有两个部分:
.gitignore文件中应包含哪些条目以涵盖Visual Studio特定文件,如二进制文件,程序集,调试文件等?有些内容在上面提到的主题中有所涉及,但有一套全面的内容吗?
在什么情况下您需要全局排除文件,或者单个存储库,或使用环境变量?
我已经知道了.以下是关于忽略文件的Git 用户手册的摘录.
如果您希望排除模式仅影响某些存储库(而不是给定项目的每个存储库),则可以将它们放在存储库中名为.git/info/exclude的文件中,或者放在核心指定的任何文件中.排除文件配置变量.一些git命令也可以直接在命令行上排除模式.有关详细信息,请参阅gitignore(5).
我动态地在bash中构造一个命令.这很好用:
COMMAND="java myclass"
${COMMAND}
Run Code Online (Sandbox Code Playgroud)
现在我想动态构造一个重定向输出的命令:
LOG=">> myfile.log 2>&1"
COMMAND="java myclass $LOG"
${COMMAND}
Run Code Online (Sandbox Code Playgroud)
该命令仍会调用java进程,但输出不会重定向到myfile.log
另外,如果我这样做:
BACKGROUND="&"
COMMAND="java myclass $BACKGROUND"
${COMMAND}
Run Code Online (Sandbox Code Playgroud)
该命令不在后台运行.
有关如何获取日志重定向和后台位的任何线索?(bash -x显示按预期构造的命令)
(实际上,与此示例不同,LOG和BACKGROUND的值是动态设置的)
什么是处理浮点数的好正则表达式(即像Java的Float)
答案必须符合以下目标:
1) 1.
2) .2
3) 3.14
4) 5e6
5) 5e-6
6) 5E+6
7) 7.e8
8) 9.0E-10
9) .11e12
Run Code Online (Sandbox Code Playgroud)
总之,它应该
对于那些想知道的人,是的,这是一个家庭作业问题.我们在编译器的CS课程中收到了这个作业.我已经把我的答案交给了班级,并将其作为这个问题的答案发布.
[Epilogue]我的解决方案没有得到充分的信任,因为它没有处理小数点左边的超过1位数.赋值确实提到了处理Java浮点数,即使这些示例都没有小数点左边的1位数.我会在自己的帖子中发布已接受的答案.
甚至在20年前,也可以调用用一种语言编写的代码来调用另一种语言编写的代码; 在学校,我们从Ada代码中调用汇编图形例程进行一个类赋值.值得注意的例外是从脚本中运行编译代码或从编译代码中执行系统命令; 但很少我们用C++编写库以在我们的Java应用程序中使用.当Java第一次出现并且它仍然很慢时,可以选择用Java编写主应用程序并将瓶颈代码移动到使用JNI调用的某些C/C++ DLL中.
那么,经过这么多年,是什么阻止我们编写多语言应用程序?我想到的主要场景是,当一种语言被认为是一个很好的选择时,如果它不是因为某些性能瓶颈(比如在早期的Java时代),所以它完全用C语言编写,而不是使用两种语言的混合.
我从架构角度和语言设计中对此感兴趣.你有什么好的例子,成功的故事或报价吗?
[编辑]最好的例子之一是对Java的反对,因为它在早期的性能很慢.尽管JIT编译器已经解决了这个问题,但我的问题始终是用一种语言编写软件,使其更易于编写,读取和维护.如果存在瓶颈,请在程序集或C中编写例程以解决瓶颈问题.这样你至少在理论上应该得到两全其美.
在我的编译器构建研究生班上,我们已经介绍了格子的概念.三个讲座专门用于格子,到目前为止,它似乎是一个有趣的切线,但困境在于它并没有真正帮助解释编译器如何使用格子来解决具体问题.
我们已经介绍了解析和类型检查.我们即将开始活体分析和注册分配.
注意,我不是在寻找构建编译器的资源.以下链接列表很好地涵盖了.我正在寻找的是关于编译器和格子之间的关系的解释,大多数例子的奖励点.
我想知道人们如何管理跨Tomcat应用程序服务器的多个实例维护JNDI资源.让我们以我的数据库JNDI资源为例.它在我的/conf/context.xml文件中声明,并从我的apps web.xml文件中引用.
必须在我的开发框,登台框和生产框中独立定义JNDI资源.如果我想设置开发人员/登台/生产箱的新实例怎么办?这意味着我必须在context.xml中为我提出的每个新实例重新创建资源名称?从设置角度来看,这是一个可能导致应用服务器开始指向错误数据库的人为错误的地方.
我发现这是繁琐和令人困惑的,因为我扩大了我的项目的开发人员数量以及最终我可能使用的生产服务器的数量.
你只是将它作为你的设置的一部分,或者每次重新安装tomcat并设置一个盒子时创建一个处理这个的安装脚本吗?或者是否有一些其他级别的间接可以使这更容易?
math ×2
.net ×1
architecture ×1
bash ×1
biginteger ×1
c# ×1
deployment ×1
git ×1
java ×1
javascript ×1
jndi ×1
logic ×1
long-integer ×1
python ×1
regex ×1
scripting ×1
tomcat ×1