论坛首页 Java企业应用论坛

面试题:用Exception异常还是if判断

浏览 34369 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (13) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-08-25   最后修改:2010-08-25
抛出异常的爱 写道
pufan 写道
抛出异常的爱 写道
再次提示对于参数验证使用断言.
对于入力参数应该是全部被考虑到的
(录入错误也应该在逻辑之内,
属于鲁棒性编程方法)

如有不正确那需要防御编程方法
防御编程目的是找出代码出问题的点
不是业务需要.

在jvm中还有关闭断言的方法.
正式环境下关闭断言.
开发测试下打开断言

PS:如果真的去面试楼上的众人全军覆没


太搞了你,对于3层架构的应用为啥要前后端双重验证清楚不,难道用户总那么规规矩矩吗。

假设一个验证是防止sql注入的,用断言做,正式环境一关闭,结果只能是杯具。

PS:如果真的去面试你肯定过不了





防止 SQL注入 --> 不是业务需要?


再八婆一下“业务需要”

没错,相对一般程序员来说,用户是你的客户,当用户提交一个表单,对表单的验证是业务需要。

对于类库编写者来说,一般程序员是你的客户,当程序员调用一个函数,对参数的验证在相对类库编写者来说一样是业务需要。

由此可见,没必要谈什么业务需要,忽略对调用方法的参数检查与忽略对用户表单验证的性质一样,都是不负责任不敬业的表现。
0 请登录后投票
   发表时间:2010-08-25  
pufan 写道
抛出异常的爱 写道
再次提示对于参数验证使用断言.
对于入力参数应该是全部被考虑到的
(录入错误也应该在逻辑之内,
属于鲁棒性编程方法)

如有不正确那需要防御编程方法
防御编程目的是找出代码出问题的点
而不是业务需要.

在jvm中还有关闭断言的方法.
正式环境下关闭断言.
开发测试下打开断言

PS:如果真的去面试楼上的众人全军覆没


太搞了你,对于3层架构的应用为啥要前后端双重验证清楚不,难道用户总那么规规矩矩吗。

假设一个验证是防止sql注入的,用断言做,正式环境一关闭,结果只能是杯具。

PS:如果真的去面试你肯定过不了







防止SQL注入,我还是第一次听说用异常,还有用断言的,还有更加奇怪的是,Production环境居然开断言,debug你们开不开?


有没有经验一下子就看出来了,别装了。
0 请登录后投票
   发表时间:2010-08-25  
pufan 写道
抛出异常的爱 写道
pufan 写道
抛出异常的爱 写道
再次提示对于参数验证使用断言.
对于入力参数应该是全部被考虑到的
(录入错误也应该在逻辑之内,
属于鲁棒性编程方法)

如有不正确那需要防御编程方法
防御编程目的是找出代码出问题的点
不是业务需要.

在jvm中还有关闭断言的方法.
正式环境下关闭断言.
开发测试下打开断言

PS:如果真的去面试楼上的众人全军覆没


太搞了你,对于3层架构的应用为啥要前后端双重验证清楚不,难道用户总那么规规矩矩吗。

假设一个验证是防止sql注入的,用断言做,正式环境一关闭,结果只能是杯具。

PS:如果真的去面试你肯定过不了





防止 SQL注入 --> 不是业务需要?


再八婆一下“业务需要”

没错,相对一般程序员来说,用户是你的客户,当用户提交一个表单,对表单的验证是业务需要。

对于类库编写者来说,一般程序员是你的客户,当程序员调用一个函数,对参数的验证在相对类库编写者来说一样是业务需要。

由此可见,没必要谈什么业务需要,忽略对调用方法的参数检查与忽略对用户表单验证的性质一样,都是不负责任不敬业的表现。



这不是在扯啊,抛哥说的JVM的方面,而代码逻辑中的验证是code上去的,不被JVM支配的。

还说一个开发流程咯,在发布到生产环境是要测试的,通过测试以后JVM assert可以去掉,代码逻辑验证肯定保留的。
0 请登录后投票
   发表时间:2010-08-25  
楼上的fans一边去,知道讨论的什么吗,懒得理你。
0 请登录后投票
   发表时间:2010-08-25  
pufan 写道
楼上的fans一边去,知道讨论的什么吗,懒得理你。


我不是他的fans,也不看他的星级,这基本的东西都不了解,建议少看点书,多思考一点。
0 请登录后投票
   发表时间:2010-08-25  
pufan 写道
楼上的fans一边去,知道讨论的什么吗,懒得理你。




你先看说了什么再说话,

mercyblitz 写道
showr 写道
一个方法的参数,C里面好像是一堆的if else判断参数是否合法,不合法就返回一个没有实际意义的值

但在java里面有异常机制,当参数不合法的时候,究竟是if else 一样判断后返回一个值

还是直接来个Exception ?

如果是 if else 的话,有什么好处 ?

如果是 exception 的话,又有什么好处 ?

或者是根据不同情况来定 ?

一次面试的题目,至今无解,求真相


if-else 方式的好处在于更贴近与逻辑思维,性能优于Exception。相对于Exception,其缺点是,不适合OOP,语义不明显,不易于错误错误跟踪或错误提示较少,并且类型比较单一(比如利用C语言的原生类型)或者难以统一(比如C语言结构和宏定义)。

exception方法的好处在于是业务逻辑和异常处理分离(代码相对清晰),try中处理业务,catch中处理异常情况。在API设计中,可以设计Exception Handler来处理异常,使得层次分明。同时,更好的OOP的封装和多态性。缺点在于性能相对差。
0 请登录后投票
   发表时间:2010-08-25   最后修改:2010-08-25
pufan 写道
抛出异常的爱 写道
pufan 写道
抛出异常的爱 写道
再次提示对于参数验证使用断言.
对于入力参数应该是全部被考虑到的
(录入错误也应该在逻辑之内,
属于鲁棒性编程方法)

如有不正确那需要防御编程方法
防御编程目的是找出代码出问题的点
不是业务需要.

在jvm中还有关闭断言的方法.
正式环境下关闭断言.
开发测试下打开断言

PS:如果真的去面试楼上的众人全军覆没


太搞了你,对于3层架构的应用为啥要前后端双重验证清楚不,难道用户总那么规规矩矩吗。

假设一个验证是防止sql注入的,用断言做,正式环境一关闭,结果只能是杯具。

PS:如果真的去面试你肯定过不了





防止 SQL注入 --> 不是业务需要?


再八婆一下“业务需要”

没错,相对一般程序员来说,用户是你的客户,当用户提交一个表单,对表单的验证是业务需要。

对于类库编写者来说,一般程序员是你的客户,当程序员调用一个函数,对参数的验证在相对类库编写者来说一样是业务需要。

由此可见,没必要谈什么业务需要,忽略对调用方法的参数检查与忽略对用户表单验证的性质一样,都是不负责任不敬业的表现。

没写过类库.
不能体会这种
没有业务需要而需要验证状态
0 请登录后投票
   发表时间:2010-08-25   最后修改:2010-08-25
抛出异常的爱 写道
再次提示对于参数验证使用断言.
对于入力参数应该是全部被考虑到的
(录入错误也应该在逻辑之内,
属于鲁棒性编程方法)

如有不正确那需要防御编程方法
防御编程目的是找出代码出问题的点
而不是业务需要.

在jvm中还有关闭断言的方法.
正式环境下关闭断言.
开发测试下打开断言

  能不能详细说说关于在参数验证中使用断言?一般我们只有在TestCase中段要测试的进行断言。而且如果你在开发测试中打开断言,那么正式环境中关闭断言。那是不是对系统会带来安全问题呢? 我不是很明白LZ的想法。能否据个例子解释下呢? 谢谢

0 请登录后投票
   发表时间:2010-08-25  
jiangduxi 写道
抛出异常的爱 写道
再次提示对于参数验证使用断言.
对于入力参数应该是全部被考虑到的
(录入错误也应该在逻辑之内,
属于鲁棒性编程方法)

如有不正确那需要防御编程方法
防御编程目的是找出代码出问题的点
而不是业务需要.

在jvm中还有关闭断言的方法.
正式环境下关闭断言.
开发测试下打开断言

  能不能详细说说关于在参数验证中使用断言?一般我们只有在TestCase中段要测试的进行断言。


http://lehsyh.iteye.com/blog/577499
引用
一、assert的开启和关闭
因为JVM默认是不启动assert的。因此,你可以使用标记 –enableassertions ( 缩写 -ea ) 来开启断言功能。同样,你也可以使用标记 –disableassertions ( 缩写 -da ) 来关闭断言功能。例:
java - enableassertions AssertTest
0 请登录后投票
   发表时间:2010-08-25  
抛出异常的爱 写道
pufan 写道
抛出异常的爱 写道
pufan 写道
抛出异常的爱 写道
再次提示对于参数验证使用断言.
对于入力参数应该是全部被考虑到的
(录入错误也应该在逻辑之内,
属于鲁棒性编程方法)

如有不正确那需要防御编程方法
防御编程目的是找出代码出问题的点
不是业务需要.

在jvm中还有关闭断言的方法.
正式环境下关闭断言.
开发测试下打开断言

PS:如果真的去面试楼上的众人全军覆没


太搞了你,对于3层架构的应用为啥要前后端双重验证清楚不,难道用户总那么规规矩矩吗。

假设一个验证是防止sql注入的,用断言做,正式环境一关闭,结果只能是杯具。

PS:如果真的去面试你肯定过不了





防止 SQL注入 --> 不是业务需要?


再八婆一下“业务需要”

没错,相对一般程序员来说,用户是你的客户,当用户提交一个表单,对表单的验证是业务需要。

对于类库编写者来说,一般程序员是你的客户,当程序员调用一个函数,对参数的验证在相对类库编写者来说一样是业务需要。

由此可见,没必要谈什么业务需要,忽略对调用方法的参数检查与忽略对用户表单验证的性质一样,都是不负责任不敬业的表现。

没写过类库.
不能体会这种
没有业务需要而需要验证状态


类库没写过,那真是在纸上谈兵。




0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics