V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  geelaw  ›  全部回复第 13 页 / 共 173 页
回复总数  3441
1 ... 9  10  11  12  13  14  15  16  17  18 ... 173  
271 天前
回复了 LeeReamond 创建的主题 程序员 有没有什么前端验证码的成熟方案?
@yankebupt #1 (经典计算机的)客户端不能自己验证,通常来说验证码的长度不足以阻挡离线枚举。

如果是注册验证,一个简单的避免重放的思路是让验证码和注册信息绑定。当然我没有仔细想过这样做的问题,标准解决方案才是正道。
272 天前
回复了 bjzhou1990 创建的主题 Windows 因为一个文件夹名字,电脑死机了
@Jirajine #28 很明显是为了避免《微软公司升级系统故意让某公司软件不能运行,我们要抵制微软、反垄断》这类文章。有些开发者的电脑上路径没有空格,且很多开发者有自己机器上测试的坏习惯——正确的测试方法是在一台全新安装的 Windows 机器上测试(可以检查出很多“只有开发环境下才能运行”的 bug )。

另外,Windows NT 4.0 的时候用户资料默认位置是 C:\WINNT\Profiles\用户名,而 Windows XP 里面默认位置是 C:\Documents and Settings\用户名,所以即使一开始在全新安装的 Windows 上测试过程序也不代表就会在以后的默认安装上成功——当然那个程序已开始没处理过空格就是错的。

我也不喜欢这种设计,因为某些程序自始至终就不是正确的,但这类程序就是很多,从 DOS 和 Unix 来的程序经常这样。

扩展阅读:搜索 8.3 names site:devblogs.microsoft.com/oldnewthing 以及把 8.3 改成 short 搜索。
272 天前
回复了 bjzhou1990 创建的主题 Windows 因为一个文件夹名字,电脑死机了
@Ocean810975 #18 应该也不是很早期,因为 8.3 格式的名字里不能有空格。

@ulosggs #20 这个理解比较片面。首先,分区的文件系统可以选择不支持短文件名,也可以通过注册表关闭短文件名的生成。如果一个名字已经符合 8.3 的要求,就只会转换为大写作为短文件名。另外短文件名和创建顺序有关,第一个以 PROGRA 开头的无扩展名长文件名在 Windows 的常见实现里会得到 PROGRA~1 这个短文件名,第二个则是 PROGRA~2 ,更更多的情况还有更复杂的命名方法( Windows 上的常见实现大概会有四位 hex 之类的),还有在短文件名已经生成后建立长文件名等于已经存在的短文件名的情况。PROGRA~1 只能表示某个特定的文件,不能表示所有以 Progra 开头的长文件名文件。

最后,使用 PROGRA~1 表示 Program Files 的程序不应该被理解为“不想处理空格”,这实在是太美化它们了,更好的理解是

自从 Windows 3.3 以来就没更新过的程序,或者
写得很糟糕的程序,或者
忘了声明自己是 Windows 95 之后开发的程序

在现代文件系统里存储短文件名只是为了兼容上个世纪的程序,不是允许新程序逃避现实。
272 天前
回复了 bjzhou1990 创建的主题 Windows 因为一个文件夹名字,电脑死机了
@XiLingHost #3 Program 的 8.3 文件名是 PROGRAM ,会出问题是因为很多 Windows 软件没有正确处理空格,在调用 API 的时候把命令行设置为

C:\Program Files\abc\def.exe xyz

按照正统理解,这是在打开 C:\Program 并传入参数 Files\abc\def.exe 和 xyz ,但是现实世界里意思大概是打开 C:\Program Files\abc\def.exe 并传入参数 xyz 。

为了兼容这种情况,Windows 会尝试修复首个命令没有被 " 包围的命令行,方法是从左到右尝试寻找最短的以空白分开的串,满足这个串代表的路径存在着文件,然后把需要打开的文件理解为这个串,剩下的理解为传入的参数。

读者习题:以上面的坏例子,解释为什么存在着 C:\Program 文件可能会让一些程序坏掉。

此处应该记住的是永远要正确转义命令行,文件名可以包含空格。
272 天前
回复了 ldzhu1 创建的主题 奇思妙想 互联网一直缺失的功能——任意网页评论
这个想法过去已经被尝试过无数次了,比如随便一搜 https://www.reddit.com/r/chrome/comments/3xrrad/a_comment_extension_allowing_free_speech_on_all/

或许中心化的性质是这类服务的弱点之一,比较 WWW 的做法是在自己的网站上链接要评论的东西并写评论。
272 天前
回复了 zhangbao4830 创建的主题 分享创造 浏览器端实现打印机续打功能~
普通打印机是对不准的,打印的版式容差能力需要很强(比如如果是表格的话,最好内间距大一些,而且第二次打印的时候不要重新打印框线)。

另外网页无法控制打印的效果,采用相同浏览器、相同版本、相同打印设置才能续打,而且如果一开始已经打印多页,最好不要自作聪明删除多余的数据,因为网页不知道浏览器分页的位置。
“给编程初学者出什么题让他不能直接从 GPT 获得答案?”

这个问题是 GPT 无法正确回答的(对角线论证)。

@itskingname #20 问题:a[b[c]d[e] 的提取结果是什么?
或许可能说不定微信根本没有这个功能。( Windows 上的微信很多 UI 都是自己搞的一套不太行的版本。)
楼主应该巩固一下现代汉语,0 楼的内容读起来很不连贯。

另外我觉得“掌握”“懂”是很虚的概念,即使考虑这个概念,“掌握”“懂”也可以分不同的等级。就我个人经验来说,“懂”和“可以用各种语言实现”数据结构和算法,可以是完全不相关的两码事儿,前者是计算机科学问题,后者是计算机技术/工程问题。

我小时候并不“理解”快速排序和并查集,但是了解任何语言的基础知识之后都可以很容易写出快速排序和并查集。我写快速排序至少两年之后才理解快速排序,而且我至今也不能算是理解了并查集——没有内化它的复杂度证明就不算是理解。
@superedlimited #4 外国人可以学习一下。

如果数据是以姓、名的方数据存储的,则应该分别存储 Zhang 和 San ,而不管格式化输出的结果。
281 天前
回复了 albert0yyyy 创建的主题 Android 好奇, wsa 安装恶意病毒 app 会怎么样
@Rennen #1 WSA 是 subsystem 好像和安全性无关,只是表明它提供一系列 API 而已吧,Win32 也是 subsystem 。
@weekidjoker #17 那你的需求无法用软件达成,只要加密代码存在于客户可以自由访问的内存里,那客户当然知道加密逻辑和公钥。
要回答你的问题,第一步是搞清楚你说的“破解”是什么意思。
@weid #5 Zelle 只要用参与银行的往来账户基本上都可以无额外条件使用,而银行开户并不需要社保号,第一次以 B 身份进入美国也是可以开的。获取社保号不需要是公民或者永久居民,例如几乎所有在学校工作的 F 身份的人都有社保号。
282 天前
回复了 ZC3746 创建的主题 问与答 其实国外也有很多电信诈骗
美国这边最近流行的是“我是 AT&T/Verizon/T-Mobile ,您名下的电话号码发送诈骗短信”(我推测是 Weee! 泄露的数据)
@LuckyPocketWatch #3 虽然楼主的理解问题比较大,不过

struct People
{
mutable int mutable_field;
int field;
};

void print_info(const People &p)
{
p.mutable_field = 1;
const_cast<People &>(p).field = 2;
}

int main()
{
People inst;
print_info(inst);
}
282 天前
回复了 justonelastdance 创建的主题 问与答 函数传参的类型
另外,Python 也只有传值,最早的 FORTRAN 只有传引用。

@justonelastdance #7 您需要复习 JavaScript 基础知识,a 的值是指向那个对象实例的引用,而不是那个对象实例。在 b 的调用中,通过 c (也是指向那个对象的引用)改变了对象实例,当然可以通过 a 看见。

你当然理解这里发生了什么,但是你的术语用法和计算机科学中的主流用法不符。我暂时找不到教科书,而且我上面的说明已经很明确了,你也可以参考 https://stackoverflow.com/a/7744623/4598348
282 天前
回复了 justonelastdance 创建的主题 问与答 函数传参的类型
@justonelastdance #5

a 的值没有变,在 b 退出之前 c 的值是 null ,但 b 退出之后 a 不是 null 。

另外“a 和 c 都指向同一个引用”是错误的。a 和 c 代表了不同的存储位置,并且进入 b 的时候 a 和 c 所代表的存储位置具有相同的值,这两个相同的值都是对象引用。
282 天前
回复了 justonelastdance 创建的主题 问与答 函数传参的类型
@justonelastdance #3 一个方法的一个参数是传引用 (pass by reference) 的含义是:实参可以被赋值,且方法内对形参的赋值会导致对实参赋值。

let a = {};
function b(c) { c.d = 1; c = null; }
b(a);
console.log(a);

这里 a 不是 {} 那个对象,而是对象引用,a 的值引用了那个对象。b(a) 这个调用中:

形参 c 的值是实参 a 的值的副本,故一开始 c 也引用了那个对象,透过 c 的值可以操作那个对象,因此 c.d = 1 这句话会改变那个对象,当然,这没有改变 a ,因为 a 不是那个对象,而 a 还是引用了那个对象。

形参 c 和实参 a 绑定到了不同的存储位置,对 c 的赋值并不影响 a 的值(也就是不影响 a 的值引用了哪个对象),因此 c 是传值。

最简单的理解 JavaScript 的方法是这样的:这个世界上有两种值,对象实例、对象引用,除了 import 带来的,其他所有变量名都指示互不相同的存储位置,且每个具名的存储位置都只能存储对象引用。( 123 这种 typeof 会得到 'number' 的东西直接理解为不可变对象就好,不要搞什么 primitive value 之说。)
282 天前
回复了 justonelastdance 创建的主题 问与答 函数传参的类型
另外,JavaScript 也只有传值。

对于纯函数式语言来说,传引用和传值没有任何区别。
1 ... 9  10  11  12  13  14  15  16  17  18 ... 173  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   995 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 42ms · UTC 20:29 · PVG 04:29 · LAX 13:29 · JFK 16:29
Developed with CodeLauncher
♥ Do have faith in what you're doing.