一进来就切入主题。
互联网寒冬快过去了,小菜鸟最近在找新工作,于是乎,小菜鸟在网上海投了很多求职,等啊等,终于等到黄花菜都开了。
几天后,小菜鸟终于接到了电面邀请,对面是一位声音沙哑的小哥哥打电话开启聊天模式了,简单的自我介绍之后开始问问题了,第一个问题是,聊聊JAVA的异常机制?
小菜鸟不太自信的说道:
异常是JAVA中的错误处理机制,异常分为JVM自动会捕获的异常和程序员自己去try,catch到的异常。比如NPE,ArithmeticException,IndexOutOfBoundsException等异常。
接着,小哥哥又问道,Error和Exception的区别是什么?
小菜鸟还是勉强答道:
Error通常是编译器(JVM)运行时碰到的程序无法捕捉到的异常,如内存溢出ThreadDeath(线程消亡),StackOverflowError(堆栈溢出)等等。Exception可以捕获,可用来防御性编程,也可以自定义异常,并且可控)。
面试官小哥哥今天是和异常杠上了,小哥哥又问道;
finally的使用场景是什么?finally是return之前执行还是之后执行?
小菜鸟心想:这小哥哥是不是觉得写代码就是一堆异常堆出来的啊,为什么这么喜欢异常呢,没有办法,工作重要啊。
FInally:在Return之前执行,finally一般用在释放资源场景。它被执行的前置条件是与之结合的try{}catch{}语句块有被执行到。建议Finally块中不要直接return,会影响Catch块里的return.
小哥哥无休止地问下去了,请简单描述下;throws和throw的区别?
throws是声明式异常,在方法上声明,可以声明多个可能会抛出的异常,throw是往外抛出异常。
最后说一下,你以前的项目中是如何处理异常的?
1.程序发生的不可控异常统一以00XX开头的状态码表示,话术显示得很逗比"客官,服务器开小差了,请您茶座片刻,稍安勿躁"
2.业务上发生的异常用统一以01XX开头的状态码表示,话术是系统预定好的,配置在属性文件里面。
3.控制层调用Service发生的异常统一在全局异常机制中去捕获,异常信息一并打印到日志中去。
。。。。。。。。。。。。。。。。。。
小哥哥后面又问了JVM相关的问题,以及高并发的解决方案,真是由浅入深啊,小菜鸟被折磨得。。。。
今天的面试就到此为止,后面会电话通知面试结果的,如果觉得您合适的话会有个现场面试,感谢您的面试,再见。
网友评论