V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  mzer0  ›  全部回复第 6 页 / 共 18 页
回复总数  357
1 ... 2  3  4  5  6  7  8  9  10  11 ... 18  
来源很多. 我们学校的学生数据就曾公开过, 事情是这样的: 学校发现部分学生信息不准确, 于是把学生数据全部公开在网站上, 让学生自己去核对......
2015-12-29 23:43:15 +08:00
回复了 minggeJS 创建的主题 JavaScript 反对 try{}catch (e){}的进来, B 君已经是全群公敌!
@qnnnnez 最后补充一下. 空指针异常是操作系统定义的, 因为内存映射是由操作系统来做的. 空指针异常不是由任何一门编程语言来定义的, 而是操作系统自有的概念.

不知者无畏. 不要因为自己懂得少, 就认为有乱说话的资本.

睡了. 不再回复这个帖子任何内容.
2015-12-29 23:39:44 +08:00
回复了 minggeJS 创建的主题 JavaScript 反对 try{}catch (e){}的进来, B 君已经是全群公敌!
@qnnnnez 就算 JS 是有 GC 的, 区别也不是很大. 如果对象不是一个多态, 或是泛型, 那么同样会触发空指针异常, 只不过异常是交由 GC 处理而已. 如果是多态或者泛型, 那么可能内置有 if 来检查空指针.

不要忘记, Java 的引用本质上也是一个指针, 只不过把指针封装了一下而已.
2015-12-29 23:35:38 +08:00
回复了 minggeJS 创建的主题 JavaScript 反对 try{}catch (e){}的进来, B 君已经是全群公敌!
@msg7086 无论你说多少, 你都不能掩盖这样一个事实: A 完全不知道分支预测理论......

@qnnnnez 所以我说了, 要看具体对异常的处理. 在 Java 或者 JS 这样的语言中, 也有"空指针异常"这个概念, 但是和 C++里的"空指针异常"概念是不一样的. "空指针异常"实际上是操作系统定义的, 与具体编程语言无关.
2015-12-29 23:12:27 +08:00
回复了 minggeJS 创建的主题 JavaScript 反对 try{}catch (e){}的进来, B 君已经是全群公敌!
@msg7086
@sorra
@HarryZD
@leeyuzhe
@msg7086
@Tink
@leeyuzhe
@jarlyyn
@behappy
@mko0okmko0
@saber000
@minggeJS

我为今天早些时候的言论表示抱歉.

--------------------------------------------------------------------------------------------------------------------------------

1. 我不讨论 false 返回值的问题, 也不讨论 try-catch 在这里用合适不合适, 我只是说明一点: 有使用 try-catch 来优化 if-else 的技巧, 并且这种技巧很常用, 这也是 C++的惯用技巧. JS 不追求性能, 所以很多人可能对这种技巧不是很了解. 我想说明的是, 如果你不懂得这种技巧, 那你在这个问题上就没有发言权. 使用 try-catch 来优化 if-else 只能在非常特定的情形下用, 编程模型也和 if-else 的不一样. 使用 try-catch 以后, 返回值怎么办, 应不应该在非异常的情形下使用 try-catch, 这些问题都有很多很多文章来解释 /辩论. 这个技巧在上个世纪 C++刚被发明的时候就吵得热火朝天, 现在的一致意见是: 如果要使用 try-catch 来优化 if-else, 那必须保证函数之外的代码不受影响.

* 我并不是来这里吵"try-catch 比 if-else 好还是坏", 我只是说明, 有这种技巧的存在, 并且被广泛使用. 题注给的信息很少, 所以我不能判断在这种情形下该不该用 try-catch 来优化, 也不是说所有的 if-else 都能这样做, 我只是简单地阐述这是一种技巧.

* 如果你是写前端的, 而你不懂得这种技巧, 那么你可以学习一下, 而不是说看到这种自己没见过的用法, 就轻易否认.

--------------------------------------------------------------------------------------------------------------------------------

2. 如果 mingge 贴出来的代码没错的话, A 的写法其实"很幼稚". CPU 在分支预测的时候, 总是倾向于预测 then 的那一支, 因此:

if (obj.wo && obj.wo.ok && Object.prototype.toString.call(obj.wo.ok.arr) == "[object Array]") {
obj.wo.ok.arr.push("帅哥");
return obj;
}

这样的写法是低效率的, 这样会导致 CPU 总是预测到 NULL 指针的情形, 应该这样写:

if (obj.wo || obj.wo.ok || Object.prototype.toString.call(obj.wo.ok.arr) != "[object Array]") {
return false;
}

obj.wo.ok.arr.push("帅哥");
return obj.

这样, CPU 就会倾向于预测 obj.wo.ok.arr.push("帅哥"); 的那一支.

* 所以说, 在不考虑 A 和 B 代码规范的情况下(毕竟代码规范是个信仰问题), A 的代码效率很低, 计算机基础知识薄弱......

--------------------------------------------------------------------------------------------------------------------------------

3. 这里, 我要黑 @minggeJS . 我对 @minggeJS 的 JS 水平不做评价, 但我必须告诉你, 你做的实验是完全错误的. 你做的实验并不能表明, try-catch 的效率优于 if-else, 因为在你的情形下, 解析器可能会直接把你实验中 try-catch 的代码优化为 i += 20000000 , 而 if-else 的代码则不做优化, 老老实实跑完 20000000 次. 解析器对 try-catch 是用专门的优化的, 我举个例子:

for(...) { try...catch } 很可能会被优化为 try { for(...) } catch

在 C++的情形下, 百分之百会被优化为后者.

--------------------------------------------------------------------------------------------------------------------------------

最后说一句, 用 try-catch 来优化 if-else 需要很高的编程水平, 对汇编与异常处理有着深刻的了解, 才能够这样做. 如果你真的不懂, 你就说不懂, 但你不能否认这种技巧. 我也不是说 mingge 就懂, 因为我也没看到他具体写的代码, 我只是就事论事.
2015-12-29 20:21:33 +08:00
回复了 kjkjkljkj 创建的主题 程序员 付费求助劳动争议仲裁, 地点北京朝阳区
找律师你起码要给 600 ,按一到两小时酬劳算
2015-12-29 16:46:38 +08:00
回复了 mzer0 创建的主题 问与答 如果一个域名绑定多个 ip, 浏览器如何选择访问哪个 ip?
@jasontse Thanks
2015-12-29 16:40:09 +08:00
回复了 mzer0 创建的主题 问与答 如果一个域名绑定多个 ip, 浏览器如何选择访问哪个 ip?
@msg7086 DNS 发送 ip 的顺序总是固定的, 还是看具体实现?
2015-12-29 16:39:46 +08:00
回复了 mzer0 创建的主题 问与答 如果一个域名绑定多个 ip, 浏览器如何选择访问哪个 ip?
@jasontse 我查了资料但还是不明白. 有几种可能:

> DNS 解析的时候, 多个 ip 的顺序是随机的, 浏览器总是先解析第一个.
> 多个 ip 的顺序是固定的, 浏览器随机选择解析.
> 多个 ip 的顺序是随机的, 浏览器随机解析.
2015-12-29 16:09:03 +08:00
回复了 vonnyfly 创建的主题 iOS 写了一个登录公司 WIFI 的 app,怎样分享给其他人用呢?
@vonnyfly 用户先在流量模式下扫二维码打开你的网站, 然后再连 wifi, 再切回你的网站点击登录, 用网页里静态 js 来发 post 请求.
2015-12-29 15:56:10 +08:00
回复了 lixia625 创建的主题 问与答 缓存服务器
c 语言写一个呗, 几个小时的事情...
2015-12-29 15:55:38 +08:00
回复了 joshyu8 创建的主题 淘宝 做了好几年程序员,想开个淘宝店
@joshyu8 不要开淘宝店. 淘宝店会把你这辈子的 RP 都用光, 你将遇到这个世界上最最最奇葩的人......
2015-12-29 15:54:55 +08:00
回复了 vonnyfly 创建的主题 iOS 写了一个登录公司 WIFI 的 app,怎样分享给其他人用呢?
@vonnyfly 可以做成二维码, 扫二维码自动登录 wifi.
2015-12-29 15:04:40 +08:00
回复了 jerry017cn 创建的主题 Linux Cgroup - 从 CPU 的资源隔离说起(四)
cgroup 是什么?
2015-12-29 13:43:17 +08:00
回复了 h1029306 创建的主题 分享发现 出版商 Springer 将十年前出版的书提供电子书下载
@xiadong1994 这是数学类的书单啊....................多数都是关于代数学的
@wukezhan 明年年初写个......
提一个小意见. 域名其实应该是 bugsclose......例如美国的汽车网站 cars.com
2015-12-29 13:28:30 +08:00
回复了 h1029306 创建的主题 分享发现 出版商 Springer 将十年前出版的书提供电子书下载
把原文贴上来吧. Springer 是一家很大的集团, 我没猜错的话, 应该是 Springer 旗下的某个分部在十年前出版的书.
2015-12-29 13:20:25 +08:00
回复了 minggeJS 创建的主题 JavaScript 反对 try{}catch (e){}的进来, B 君已经是全群公敌!
@jarlyyn 这是一种技巧, 我只是告诉你有这种技巧的存在, 但是我不想和你争论这种技巧有没有存在的必要.

> I'd use the try/catch block when the normal path through the code should proceed without error unless there are truly some exceptional conditions -- like the server being down, your credentials being expired or incorrect. I wouldn't necessarily use it to handle non-exceptional errors -- say like the current user not being in the correct role. That is, when you can reasonably expect and handle an error that is not an exceptional condition, I think you should do your checks.

In the case that you've described -- setting up and performing a query, a try/catch block is an excellent way to handle it as you normally expect the query to succeed. On the other hand, you'll probably want to check that the contents of result are what you expect with control flow logic rather than just attempting to use data that may not be valid for your purpose.

One thing that you want to look out for is sloppy use of try/catch. Try/catch shouldn't be used to protect yourself from bad programming -- the "I don't know what will happen if I do this so I'm going to wrap it in a try/catch and hope for the best" kind of programming. Typically you'll want to restrict the kinds of exceptions you catch to those that are not related to the code itself (server down, bad credentials, etc.) so that you can find and fix errors that are code related (null pointers, etc.).

> In general, try-catch blocks are great because they will break (move to the catch statement) whenever the exception occurs. If-else blocks rely on you predicting when the error will happen.

Edit: Also, catch blocks won't stop your code from halting when an error is hit.

> That ’ s exactly the advantage, using one try/catch instead of multiple if statements. You will also be able to catch any unanticipated errors.
2015-12-29 13:17:32 +08:00
回复了 minggeJS 创建的主题 JavaScript 反对 try{}catch (e){}的进来, B 君已经是全群公敌!
1 ... 2  3  4  5  6  7  8  9  10  11 ... 18  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5329 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 06:55 · PVG 14:55 · LAX 22:55 · JFK 01:55
Developed with CodeLauncher
♥ Do have faith in what you're doing.