天道酬勤,学无止境

在脚本中将 N 放在字符串前面有什么缺点吗? 它被认为是“最佳实践”吗?(is there a downside to putting N in front of strings in scripts? Is it considered a “best practice”?)

问题

假设我有一个包含 varchar 字段的表。 如果我做这样的插入:

INSERT MyTable 
 SELECT N'the string goes here'

这与以下有什么根本区别:

INSERT MyTable 
 SELECT 'the string goes here'

我的理解是,只有当字符串包含 Unicode 字符并且目标列不是 unicode 时,您才会遇到问题。 除此之外,SQL 处理得很好,并将带有N''的字符串转换为 varchar 字段(基本上忽略N )。

我的印象是字符串前面的N是一个很好的做法,但我找不到任何我认为确定的讨论。

回答1

简短回答:适用于脚本,不适用于生产代码。

它不被视为最佳实践。 有一个缺点,当 2 字节字符转换为 1 字节字符时,它会造成很小的性能损失。

如果不知道插入的去向,或者不知道源文本的来源(假设这是一个通用数据插入实用程序,可为未知目标生成插入语句,例如在导出数据时),N 'foo' 可能是更具防御性的编码风格。

所以缺点很小,优点是你的脚本代码更能适应数据​​库结构的变化。 这可能就是您在批量数据插入脚本中看到它的原因。

但是,如果有问题的代码旨在在您关心代码质量的环境中重用,则不应使用N'the string'因为您正在添加不需要的转换。

回答2

当字符串用于nvarchar(...)列或参数时,您应该在字符串前加上N 如果它们的目标是varchar(...)列或参数,则省略它,否则最终会进行不必要的转换。

不管它的用途是什么,将N放在每个字符串前面绝对不是“最佳实践”。

回答3

从插入 (Transact-SQL)

引用 Unicode 字符数据类型 nchar、nvarchar 和 ntext 时,“表达式”应以大写字母“N”为前缀。

另请阅读为什么某些 SQL 字符串具有“N”前缀?

使用 Unicode 进行服务器端编程

出现在服务器上执行的代码(例如存储过程和触发器)中的 Unicode 字符串常量必须以大写字母 N 开头。即使所引用的列已定义为 Unicode,也是如此。 如果没有 N 前缀,字符串将转换为数据库的默认代码页。 这可能无法识别某些字符。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 为什么打开magic_quotes_gpc被认为是一种不好的做法?(Why is turning magic_quotes_gpc on considered a bad practice?)
    问题 为什么在PHP中打开magic_quotes_gpc被认为是错误的做法? 回答1 我认为我无法比PHP本身的制造商更好地解释它(在该页面上有后续评论):为什么不使用Magic Quotes 可移植性:假设打开或关闭它会影响可移植性。 使用get_magic_quotes_gpc()进行检查,并进行相应的编码。 性能:由于并非将每条转义的数据都插入数据库中,因此转义所有这些数据会降低性能。 在运行时简单地调用转义函数(例如addslashes() )会更有效。 尽管php.ini-development默认启用这些指令,但是php.ini-production禁用它。 此建议主要是由于性能原因。 不便之处:因为并非所有数据都需要转义,所以经常在不应该看到转义数据的地方感到很烦。 例如,通过表单发送电子邮件,并在电子邮件中看到一堆\'。 要解决此问题,可能需要过多使用stripslashes() 。 注意-自PHP 5.3.0起已弃用此功能,自PHP 5.4.0起已取消此功能。 回答2 根据PHP和php.ini中的什么是Magic Quotes GPC(magic_quotes_gpc)一文,存在许多缺点: 将表单提交发送回浏览器的情况下,必须通过调用stripslashes()手动删除斜杠。 如果曾经为此服务器关闭了魔引号,或者将代码移到了未启用魔引号的服务器上,则脚本将失败
  • 我应该为我编写的每个JavaScript函数“使用严格”吗?(Should I 'use strict' for every single javascript function I write?)
    问题 我应该为我编写的每个JavaScript函数“使用严格”吗? 在大型AngularJS项目中使用strict的良好实践是什么? 在全球范围内使用它可能会破坏不支持它的第三方库,但是每次都“严格使用”只是很多重复。 回答1 在这个问题上,请注意总体趋势过于简单。 首先,绝对应在严格模式下运行所有代码。 通过在严格模式之外执行代码,可以更改核心现代javascript功能(请参阅.call()和apply())或已毁形(无提示错误)。 (有关此内容的更多信息,来自Crockford。) 但是,这不能解决如何确保代码在严格模式下运行的问题。 至少要考虑两个上下文: 在浏览器中,应将代码缩小后再交付。 如果在每个函数体中都包含'use strict' ,则minifier不会删除它,并且会浪费字节在各处重复。 您只需要在模块定义顶部的最外层函数范围中使用它即可。 一种方法是在构建过程中将缩小的代码包装在单个IIFE闭包中: ;(function (){ 'use strict' // All code here. }()) 我认为,这接近理想的实现方式,但它或多或少地决定您采用连续集成工作流(因为要观察严格模式下运行的代码,必须将其全部包装成一个闭包) 。 如果您不这样做,则必须在每个未在另一个函数范围内声明的函数的顶部都包含use strict指令。 当然,在服务器上,它要简单得多
  • 如何避免在Ruby 1.9中将​​魔术编码注释放在每个UTF-8文件的顶部?(How can I avoid putting the magic encoding comment on top of every UTF-8 file in Ruby 1.9?)
    问题 我有一个带有许多西里尔字符串的Rails项目。 它在Ruby 1.8上运行良好,但是Ruby 1.9假定源文件是US-ASCII编码的,除非您在源文件的顶部提供# encoding: utf-8注释。 那时,文件不被认为是US-ASCII 。 有没有一种简单的方法可以告诉Ruby“此应用程序是UTF8编码的。除非另有声明,否则请将所有及任何包含的源文件视为UTF8”? 更新: 我写了“如何在Ruby 1.9文件中自动插入编码:UTF-8指令”,它在需要时自动追加了编码指令。 回答1 显式胜于隐式。 写下编码的名称对您的文本编辑器,解释器以及其他想要查看该文件的人都是有益的。 不同的平台具有不同的默认值(UTF-8,Windows-1252,Windows-1251等),并且如果您自动选择一个平台,则会阻碍可移植性或平台集成。 需要更明确的编码是一件好事。 将Rails应用程序与GetText集成可能是一个好主意。 然后,您所有的UTF-8字符串都将被隔离到少量翻译文件中,而您的Ruby模块将使用纯净ASCII码。 回答2 我想你可以 对ruby使用-E utf-8命令行参数,或者将您的RUBYOPT环境变量设置为"-E utf-8" 回答3 我认为,显式并不总是比隐式好。 当您使用的几乎所有源都兼容UTF-8时,可以通过使用Ruby的-Ku命令行选项轻松地避免添加魔术编码注释
  • 什么时候将一种语言视为脚本语言? [关闭](When is a language considered a scripting language? [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 6年前关闭。 已锁定。 该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。 它目前不接受新的答案或互动。 是什么使语言成为脚本语言? 我听说有人说“当它被解释而不是编译时”。 这将使PHP(例如)成为脚本语言。 那是唯一的标准吗? 还是有其他标准? 也可以看看: “脚本”和“应用程序”有什么区别? 回答1 脚本语言是一种“脚本化”其他事情以完成工作的语言。 主要重点不是主要构建自己的应用程序,而是使现有应用程序按您想要的方式运行,例如,用于浏览器的JavaScript,用于MS Office的VBA。 回答2 简单的。 当我使用它时,它是一种现代的动态语言,当您使用它时,它只是一种脚本语言! 回答3 传统上,当谈论脚本与编程的区别时,将解释脚本并编译程序。 语言可以通过不同的方式执行-解释或编译(转换为字节码或机器码)。 这不会使一种或另一种语言成为可能。 在某些人眼中,语言的使用方式使其成为脚本语言(例如,主要使用C ++开发的游戏开发人员将在Lua中编写对象脚本)。 同样,线条也模糊了-一个人可以将一种语言用于编程,而另一个人可以将同一种语言用于脚本语言。 这是来自维基百科有关脚本语言的文章: 脚本语言,脚本语言或扩展语言是一种编程语言,可以控制一个或多个软件应用程序。 “脚本”与应用程序的核心代码不同
  • 在JavaScript中定义局部函数:是否使用var?(Define local function in JavaScript: use var or not?)
    问题 在JavaScript中声明本地(内部)函数时,有两个选项: 用var关键字声明,并分配给变量: (function() { var innerFunction1 = function() { ... }; innerFunction1(); }()); 仅使用function关键字声明,而不分配给变量: (function() { function innerFunction2() { ... }; innerFunction2(); }()); 我可以看到第二个优点:可以在调用它的代码下声明该函数,因此可以更轻松地将私有函数与实际执行的代码分开。 其中哪个更好,为什么呢? 回答1 实际上,有3种方法来声明一个函数: 函数声明:函数声明定义了一个命名函数变量,而无需分配变量。 函数声明作为独立的构造出现,并且不能嵌套在非函数块中。 例如: function innerFunction1 () { }; 函数表达式:函数表达式将函数定义为较大的表达式语法(通常是变量赋值)的一部分。 通过函数表达式定义的函数可以命名或匿名: 一种。 使用匿名函数var innerFunction1 = function() { }; b。 使用命名函数var innerFunction1 = function myInnerFunction () { }; 函数构造函数
  • 防止网站上的暴力破解登录(Preventing Brute Force Logins on Websites)
    问题 作为对最近Twitter劫持和Jeff在Dictionary Attacks上的帖子的回应,保护您的网站免受暴力登录攻击的最佳方法是什么? Jeff的帖子建议每次尝试登录时都要增加延迟,注释中的建议是在第二次尝试失败后添加验证码。 这两个都是好主意,但是您怎么知道它是什么“尝试号码”呢? 您不能依靠会话ID(因为攻击者每次都可以更改它)或IP地址(更好,但容易受到僵尸网络的攻击)。 使用delay方法,仅使用用户名登录就可以锁定合法用户(或者至少使他们的登录过程很慢)。 有什么想法吗? 有什么建议吗? 回答1 我认为给定帐户的数据库持久锁定期很短(1-5分钟)是解决此问题的唯一方法。 数据库中的每个userid都包含一个timeOfLastFailedLogin和numberOfFailedAttempts 。 当numbeOfFailedAttempts > X您将锁定几分钟。 这意味着您要锁定有问题的userid一段时间,但不能永久锁定。 这也意味着您将为每次登录尝试更新数据库(当然,除非它被锁定),否则可能会导致其他问题。 亚洲至少有一个国家进行了NAT转换,因此IP不能用于任何用途。 回答2 在我看来,有几种可能性,每种都有优点和缺点: 强制使用安全密码 Pro :可以防止字典攻击缺点:由于大多数用户都无法记住复杂的密码(即使您向他们解释了如何轻松记住它们
  • 有cglib的替代品吗? [关闭](Are there alternatives to cglib? [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 6年前关闭。 改善这个问题 出于好奇,除了cglib之外,是否有任何(稳定)开源项目可用于运行时Java代码生成? 我为什么要使用它们? 回答1 ASM java-asm CGLIB和几乎所有其他库都是在ASM之上构建的,而ASM本身的作用很低。 对于大多数人来说,这是一个阻止因素,因为您必须了解字节码和一些JVMS才能正确使用它。 但是,掌握ASM无疑是非常有趣的。 但是请注意,尽管有出色的ASM 4指南,但在API的某些部分中,javadoc文档可能非常简洁(如果存在的话),但是它正在得到改进。 它紧密遵循JVM版本以支持新功能。 但是,如果您需要完全控制,ASM是您的首选武器。 该项目定期更新; 在2015年5月15日发布此编辑版本5.0.4时。 字节伙伴字节伙伴 Byte Buddy是一个相当新的库,但提供了CGLIB或Javassist提供的任何功能以及更多功能。 Byte Buddy可以完全自定义到字节码级别,并带有一种表达性强的特定于域的语言,该语言允许非常可读的代码。 它支持所有JVM字节码版本,包括有关默认方法的某些操作码的Java 8语义更改。 ByteBuddy似乎没有遭受其他库所具有的缺点的困扰高度可配置相当快(基准代码
  • Python-doctest与unittest [关闭](Python - doctest vs. unittest [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便可以通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 改善这个问题 我正在尝试开始使用Python进行单元测试,我想知道是否有人可以解释doctest和unittest的优缺点。 您将每种条件用于什么条件? 回答1 两者都很有价值。 我用doctest和鼻子代替了unittest。 我将doctest用于测试给出了实际用作文档的用法示例的情况。 通常,我不会对这些测试进行全面的测试,仅是为了提供参考。 我实际上是在反向使用doctest:不是根据我的doctest来测试我的代码是否正确,而是根据代码来检查我的文档是否正确。 原因是我发现全面的doctest会使您的文档过于混乱,因此您要么会得到不可用的docstring,要么会得到不完整的测试。 对于实际测试代码,目标是彻底测试每种情况,而不是通过示例来说明这样做是什么,我认为这是一个不同的目标,我认为其他框架可以更好地实现。 回答2 我几乎只使用unittest。 偶尔,我会在doctest中将一些内容放入doctest中使用。 95%的测试用例是单元测试。 为什么? 我喜欢使文档字符串的长度更短,更准确。 有时,测试用例有助于澄清文档字符串。 大多数情况下,应用程序的测试用例对于文档字符串来说太长了。 回答3
  • 在PHP中将PDF转换为HTML?(Convert PDF to HTML in PHP?)
    问题 我希望能够通过PHP将PDF文件转换为HTML文件,但是遇到了一些麻烦。 我找到了使用Saaspose进行此操作的基本方法,该方法可让您将PDF转换为HTML文件。 但是,这存在一些问题,例如SVG的使用,图像,位置,字体等。 我所需要做的就是能够从PHP文件和与之关联的任何图像中获取文本,然后以线性格式显示该文本,而不是使用绝对定位对其进行格式化。 我的意思是,如果PDF看起来像这样: 我想将其转换为单列设计HTML文件。 如果有图像,我希望它们也返回。 这在PHP中可行吗? 我知道我可以简单地从PDF文件中获取文本,但是如何获取图像呢? 另一个问题是,我希望所有内容都内联,因为它们是在单个文件中提供给客户端的。 目前,我可以通过一些代码来完成此设置: for ($i = 0; $i < $object_number; $i++) { $object = $html->find("object")->find("embed")->eq($i); $embed = file_get_contents("Output/OutputHtml/" . $object->attr("src")); array_push($converted_obj, $embed); array_push($original_obj, $object); } for ($i = 0; $i <
  • 在TSQL中将'N'放在函数参数前面的目的是什么?(What is the purpose of putting an 'N' in front of function parameters in TSQL?)
    问题 在TSQL中将'N'放在函数参数前面的目的是什么? 例如,以下代码中N在函数参数前面的含义是什么: object_id(N'dbo.MyTable') 回答1 它指示“国有化” aka unicode字符串常量。 http://support.microsoft.com/kb/239530 在SQL Server中处理Unicode字符串常量时,必须在所有Unicode字符串之前加一个大写字母N,如SQL Server联机丛书主题“使用Unicode数据”中所述。 http://msdn.microsoft.com/zh-cn/library/aa276823%28SQL.80%29.aspx nchar和nvarchar 字符数据类型是固定长度(nchar)或可变长度(nvarchar)Unicode数据,并使用UNICODE UCS-2字符集。 nchar(n) n个字符的定长Unicode字符数据。 n必须是1到4,000之间的值。 存储大小是n字节的两倍。 nchar的SQL-92同义词是国家字符和国家字符。 nvarchar(n) n个字符的变长Unicode字符数据。 n必须是1到4,000之间的值。 存储大小(以字节为单位)是输入字符数的两倍。 输入的数据长度可以为0个字符。 nvarchar的SQL-92同义词是变化的国家字符和变化的国家字符。
  • 在不使用CRON的情况下安排脚本(Schedule scripts without using CRON)
    问题 我知道有很多关于使用CRON运行php文件的帖子。 但是,在共享托管和易于用户设置的世界中,我不想为此烦恼。 我在网上找到了另一个与套接字有关的解决方案。 只是想让每个人都接受这一点,并告诉我这是个好主意还是坏主意。 听起来不错。 有什么想法吗? //Open socket connection to cron.php $socketcon = fsockopen($_SERVER['HTTP_HOST'],80,$errorno,$errorstr,10); if($socketcon) { $socketdata = "GET /cron.php HTTP 1.1\r\nHost: ".$_SERVER['HTTP_HOST']."\r\nConnection: Close\r\n\r\n"; fwrite($socketcon,$socketdata); //Normally you would get all the data back with fgets and wait until $socketcon reaches feof. //In this case, we just do this: fclose($socketcon); } else { //something went wrong. Put your error handler here. }
  • Porter和Lancaster提取算法的主要区别和好处是什么? [关闭](What are the major differences and benefits of Porter and Lancaster Stemming algorithms? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 4年前关闭。 改善这个问题 我正在处理Java中的文档分类任务。 强烈推荐这两种算法,每种都有什么优点和缺点,并且在自然语言处理任务的文献中更常用? 回答1 从根本上讲,porter和lancaster词干提取算法之间的主要区别在于,lancaster词干提取器比porter词干提取器更具攻击性。 当今使用的三种主要的阻止算法是Porter,Snowball(Porter2)和Lancaster(Paice-Husk),其侵略性连续性基本上遵循相同的思路。 波特是最不积极的算法,每种算法的细节实际上相当冗长和技术性。 不过,这是您的细分: 波特:毫无疑问,最常用的茎梗,也是最柔和的茎梗之一。 少数几个实际上具有Java支持的词干分析器之一,这是一个加分,尽管它也是该算法中计算量最大的一个(不允许有很大的余地)。 它也是最古老的词干算法。 Porter2:出于充分的理由,几乎被普遍认为是对Porter的改进。 波特自己本人实际上也承认它比他原来的算法要好。 与搬运工相比,它的计算时间略短,并且周围有相当大的社区。 兰开斯特(Lancaster):非常激进的词干算法,有时会出错。 使用搬运工和滚雪球时,词干表达通常对读者而言是相当直观的
  • 捕获VBScript中的任何错误?(capture any error in VBScript?)
    问题 我有一个调用VBScript(.vbs)程序的批处理文件。 调用它之后,我的批处理脚本检查%errorlevel%来查看.vbs程序是否失败。 我可以使用WScript.Quit(1)在.vbs程序中使用退出代码来发出失败信号。 但是,我只能明确地做到这一点。 如果发生一些意外的运行时错误,.vbs会退出并显示一个错误对话框,但是退出代码为零,因此我的批处理文件认为是成功的! 我该如何改变这种行为? 而且,如果您想说的话,请on error goto使用,不要打扰...该语法在常规VB中可用,但在VBScript中不可用。 回答1 我想到了一个开箱即用的解决方案...谁说0意味着成功? VBScript有时会针对失败返回0返回码,那么为什么不接受它呢? 采用0作为(至少一个可能的)失败代码,并采用另一个数字(例如10)作为“成功代码”。 在脚本末尾,放入WScript.Quit(10)。 只有到那时一切都成功了,这才会受到打击。 然后,使用“ if%errorlevel%== 10”代替调用批处理文件中的“ if errorlevel 1”。 回答2 编辑:试探性地提出了这个建议(参见注意事项),我迅速开始认为这是一个非常糟糕的主意,但我将其留给后代。 不使用此功能的最有说服力的原因来自Microsoft的Eric Lippert ,他从事VBScript的设计和实现。
  • 在PHP站点中避免xss攻击的最佳实践是什么?(What are the best practices for avoiding xss attacks in a PHP site [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 13天前关闭。 改善这个问题 我已经配置了PHP,以便打开了魔引号,并且关闭了全局寄存器。 我尽我所能一直对我从用户输入派生的任何输出调用htmlentities()。 我有时还会在数据库中查找xss附带的常见信息,例如... <script 我还应该做些什么,以及如何确保自己一直想做的事情始终完成。 回答1 对于成功防止XSS而言,转义输入并不是最好的选择。 输出也必须转义。 如果使用Smarty模板引擎,则可以使用|escape:'htmlall'修饰符将所有敏感字符转换为HTML实体(我使用自己的|e修饰符,它是上述的别名)。 我输入/输出安全性的方法是: 存储未修改的用户输入(输入中没有转义HTML,仅通过PDO准备好的语句完成了DB感知的转义) 在输出时进行转义,具体取决于您使用的输出格式(例如HTML和JSON需要不同的转义规则) 回答2 我认为,在输入期间,不应仅在输出时逃避任何操作。 由于(大多数时候)您不能假设您知道数据的去向。 例如,如果您有一个采用稍后接收到的数据的表格,则您需要进行不同的转义(否则恶意用户可能会重写您的电子邮件标题)。 换句话说,您只能在数据“离开”您的应用程序的最后一刻转义: 项目清单写入XML文件
  • 脚本标记中的HTML注释是最佳实践吗? [关闭](Are HTML comments inside script tags a best practice? [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便可以通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 改善这个问题 在我必须使用的嵌入式JavaScript中,以下做法非常普遍: <script type="text/javascript"> <!-- // Code goes here //--> </script> 我知道关键是要防止与JavaScript不兼容的浏览器呈现源代码,但这是否仍是当今的最佳实践? 当今使用的绝大多数浏览器都可以解释JavaScript。 即使是现代移动设备也通常不会遇到麻烦。 至于“为什么不呢?” 问题:我最近不得不花几个小时来调试一个问题,该问题是有人在深埋在某些页面中的脚本标签末尾的'->'前面省略了'//',这导致了神秘的JavaScript错误。 你做什么工作? 这仍然被认为是“最佳实践”吗? 回答1 重要的是,如今,特定的浏览器是否支持JavaScript是无关紧要的(显然绝大多数都支持)-这是不相关的,因为几乎所有的浏览器都理解脚本块,这意味着即使他们不能理解,他们也知道忽略JavaScript。解释它。 马特·克鲁斯(Matt Kruse)在其JavaScript工具箱网站上给出了更为详细的解释,说明了为什么在脚本块中不特别使用HTML注释。 从该页面引用:
  • Google Analytics 的“异步跟踪”有什么缺点吗?(Are there any drawbacks of “asynchronous tracking” with Google Analytics?)
    问题 我最近从一个旧答案中了解到,除了传统的跟踪代码之外,Google Analytics 还提供所谓的“异步跟踪”。 从文档来看,异步跟踪似乎比传统跟踪更受欢迎: 与传统安装不同,异步跟踪优化了浏览器加载 ga.js 的方式,从而最大限度地减少了对用户体验的影响。 它还允许您将 Analytics 代码段放在页面的更高位置,而不会延迟后续内容的呈现。 文档提到使用异步跟踪没有任何缺点,这让我想知道为什么这不是默认的跟踪方法。 异步跟踪是否存在任何应注意的陷阱,或者我应该继续并在所有安装上进行切换? 回答1 异步跟踪仅在 2 个月前发布。 在将其发布到整个网络之前,他们只是对其进行 Beta 测试。 我听说人们遇到的唯一麻烦是 Google 在其安装页面上调用的内容: 我们已经确定,在大多数页面上,异步代码段的最佳位置是 <body> 部分的顶部。 虽然习惯上将 JavaScript 代码放在 <head> 部分,但将异步代码段放在那里可能会在某些页面上触发 Internet Explorer 6 和 7 中的解析错误。 解决此问题的最简单方法是将其放置在该部分的顶部。 回答2 这是一件非常简单的事情。 调用 GA 的脚本标签是通过 DOM 创建的。 ... 看到这个: html 中 <script> 标签的 async="async" 属性,这是什么意思? 如果您的页面在 GA
  • 处理字符缓冲区(Dealing with char buffers)
    问题 作为 C++ 程序员,我有时需要使用来自 C 的技术处理内存缓冲区。例如: char buffer[512]; sprintf(buffer, "Hello %s!", userName.c_str()); 或者在 Windows 中: TCHAR buffer[MAX_PATH+1]; // edit: +1 added ::GetCurrentDirectory(sizeof(buffer)/sizeof(TCHAR), &buffer[0]); 上面的示例是我通常如何创建本地缓冲区(本地堆栈分配的字符数组)。 但是,有许多可能的变化,因此我对您对以下问题的回答非常感兴趣: 将缓冲区作为&buffer[0]传递是否比传递buffer更好? (我更喜欢&buffer[0] 。) 对于堆栈分配的缓冲区,是否存在被认为安全的最大大小? 我的意思是,例如,对于 Mac、Windows、Linux 桌面(不是移动设备!)上的跨平台桌面应用程序可以被认为是安全的最高值。 静态缓冲区( static char buffer[N]; )是否更快? 是否还有其他支持或反对的论据? 使用静态缓冲区时,您可以使用返回类型const char * 。 这(通常)是一个好主意还是一个坏主意? (我确实意识到调用者需要制作自己的副本,以避免下一次调用会更改先前的返回值。) 如何使用static
  • 如何教AI吃鸡?
    学过软件工程的同学应该都知道,软件工程是一门老师都可能随时不知道自己到底在讲什么的计算机专业课。不过,这不是本篇的重点。软件工程告诉我们很多重要的事,其中一件事是软件都有一个生命周期。没错,一说软件开发,我们都会很自然想到写代码,但软件工程告诉我们,写代码远不是软件开发的全部工作,甚至还不一定是最重要的工作。按照软件工程的说法,开发软件你得首先和客户谈笑风生,这叫需求分析,接着就是各种写不完的文档和开不完的研究会,都弄好以后,差不多就可以把“码农”找过来,把满头青丝编成代码。你以为这就完了?没有!从软件编码到软件正式上线部署之间,有一个非常重要的阶段,叫软件测试,俗称Debug。Debug完了软件该上线了吧?NoNoNo,城里人的套路深着呢,还有QA和QC在前面等着。等着干嘛呢,翻来覆去地花式折腾你的程序,目标只有一个,加油努力把程序玩脱。照一些软工书本的说法,软件开发最重要的是需求,其次是测试,接着可能是什么三姑六婆,至于程序员死了都要爱的写代码环节,在软工书里经常是三甲不入的,没啥存在感。当然了,理想很丰满,现实很骨感,干了一辈子程序员,从没见过活着的QA、QC的也大有人在。所以,象牙塔里的软工老师,讲着讲着能把自己绕晕也不足为奇,这里就不展开了。但是有一点,虽然大公司、小公司、以及不同流派的开发团队,在软件工程上的玩法各不相同,但有一点毫无疑问
  • 在JavaScript中将数字转换为字符串的最佳方法是什么? [关闭](What's the best way to convert a number to a string in JavaScript? [closed])
    问题 关门了。 这个问题需要细节或明确性。 它当前不接受答案。 想改善这个问题吗? 添加详细信息,并通过编辑此帖子来澄清问题。 6个月前关闭。 改善这个问题 将数字转换为字符串的“最佳”方法是什么(就速度优势,清晰度优势,存储优势等而言)? 一些例子: String(n) n.toString() ""+n n+"" 回答1 像这样: var foo = 45; var bar = '' + foo; 实际上,即使我通常这样做是为了简单方便,但对于原始速度而言,似乎出现了1000多次迭代,但.toString()还是有优势的 请参阅此处的性能测试(不是我自己的,而是在我自己编写时发现的):http://jsben.ch/#/ghQYR 基于上面的JSPerf测试最快: str = num.toString(); 应该注意的是,当您认为速度差异可以在0.1秒内进行100万次转换时,速度差异并不是过大。 更新:速度似乎因浏览器而有很大差异。 在Chrome num + '' ,根据此测试, num + ''似乎是最快的http://jsben.ch/#/ghQYR 更新2:再次根据我上面的测试,应该注意到Firefox 20.0.1执行.toString()速度比'' + num示例慢大约100倍。 回答2 在我看来, n.toString()因其清晰度而获奖
  • 为什么在C ++类中的成员变量上使用前缀(Why use prefixes on member variables in C++ classes)
    问题 许多C ++代码使用语法约定来标记成员变量。 常见的例子包括 公共成员的m_ memberName (完全使用公共成员) _私人成员或所有成员的memberName 其他人试图在使用成员变量时强制使用this->成员。 以我的经验,大多数较大的代码库都无法始终如一地应用这些规则。 在其他语言中,这些约定的使用范围远远不够。 我只偶尔在Java或C#代码中看到它。 我想我从未在Ruby或Python代码中看到过它。 因此,现代语言似乎有一种趋势是不对成员变量使用特殊标记。 这个约定是今天在C ++中还是有用的还是仅仅是过时的。 特别是因为跨库使用不一致。 其他语言没有表明没有成员前缀也可以做到吗? 回答1 您必须小心使用领先的下划线。 保留大写字母前的下划线。 例如: _Foo _L 都是保留字,而 _foo _l 不是。 在其他情况下,不允许在小写字母前加下划线。 在我的特定情况下,我发现_L恰好是由Visual C ++ 2005保留的,并且冲突产生了一些意外的结果。 我对标记局部变量很有用。 这是保留哪些标识符的链接:在C ++标识符中使用下划线的规则是什么? 回答2 我都赞成前缀做得好。 我认为(系统)匈牙利符号是前缀得到的大多数“坏说唱”的原因。 在强类型语言中,这种表示形式毫无意义,例如在C ++“ lpsz”中,它告诉您字符串是指向以nul结尾的字符串的长指针