面试见过的异常

本文对比了checked和unchecked异常的区别,通过实例剖析IllegalArgumentException和ClientException,展示了如何处理这些常见异常。还讲解了如何预防如MalformedURLException和DateTimeParseException,以及提供解决资源未找到问题的方法。

总述:checked/unchecked 异常有什么区别?

1️⃣checked:一般是指程序不能直接控制的外界情况,是指在编译的时候就需要检查的一类exception,用户程序中必须采用try catch机制处理或者通过throws交由调用者来处理。这类异常,主要指除了Error以及RuntimeException及其子类之外的异常。
2️⃣unchecked:是指那些不需要在编译的时候就要处理的一类异常。在java体系里,所有的Error以及RuntimeException及其子类都是unchecked异常。再形象直白的理解为不需要try catch等机制处理的异常,可以认为是unchecked的异常。

一、java.lang.IllegalArgumentException: Path cannot be null

2019-06-20 09:49:11,120 [main-EventThread] ERROR [org.apache.curator.framework.imps.CuratorFrameworkImpl:566] - Watcher exception
java.lang.IllegalArgumentException: Path cannot be null
        at org.apache.curator.utils.PathUtils.validatePath(PathUtils.java:48)
        at org.apache.curator.utils.PathUtils.validatePath(PathUtils.java:37)
        at org.apache.curator.utils.ZKPaths.fixForNamespace(ZKPaths.java:105)
        at org.apache.curator.framework.imps.NamespaceImpl.fixForNamespace(NamespaceImpl.java:104)
        at org.apache.curator.framework.imps.CuratorFrameworkImpl.fixForNamespace(CuratorFrameworkImpl.java:594)
        at org.apache.curator.framework.imps.GetChildrenBuilderImpl.forPath(GetChildrenBuilderImpl.java:198)
        at org.apache.curator.framework.imps.GetChildrenBuilderImpl.forPath(GetChildrenBuilderImpl.java:40)
        at com.alibaba.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient$CuratorWatcherImpl.process(CuratorZookeeperClient.java:131)
        at org.apache.curator.framework.imps.NamespaceWatcher.process(NamespaceWatcher.java:68)
        at org.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:530)
        at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:505)

二、Exception in thread “main” com.aliyuncs.exceptions.ClientException:

"C:\Program Files\Java\jdk1.8.0_161\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.5\lib\idea_rt.jar=58742:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.5\bin" -Dfile.encoding=GBK -classpath "C:\Program Files\Java\jdk1.8.0_161\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\rt.jar;E:\workspace\mchopin\target\classes;D:\repository\org\springframework\boot\spring-boot-starter-web\2.1.5.RELEASE\spring-boot-starter-web-2.1.5.RELEASE.jar;D:\repository\org\springframework\boot\spring-boot-starter\2.1.5.RELEASE\spring-boot-starter-2.1.5.RELEASE.jar;D:\repository\org\springframework\boot\spring-boot-starter-logging\2.1.5.RELEASE\spring-boot-starter-logging-2.1.5.RELEASE.jar;D:\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\repository\org\apache\logging\log4j\log4j-to-slf4j\2.11.2\log4j-to-slf4j-2.11.2.jar;D:\repository\org\apache\logging\log4j\log4j-api\2.11.2\log4j-api-2.11.2.jar;D:\repository\org\slf4j\jul-to-slf4j\1.7.26\jul-to-slf4j-1.7.26.jar;D:\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;D:\repository\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;D:\repository\org\springframework\boot\spring-boot-starter-json\2.1.5.RELEASE\spring-boot-starter-json-2.1.5.RELEASE.jar;D:\repository\com\fasterxml\jackson\core\jackson-databind\2.9.8\jackson-databind-2.9.8.jar;D:\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;D:\repository\com\fasterxml\jackson\core\jackson-core\2.9.8\jackson-core-2.9.8.jar;D:\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.8\jackson-datatype-jdk8-2.9.8.jar;D:\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.8\jackson-datatype-jsr310-2.9.8.jar;D:\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.8\jackson-module-parameter-names-2.9.8.jar;D:\repository\org\springframework\boot\spring-boot-starter-tomcat\2.1.5.RELEASE\spring-boot-starter-tomcat-2.1.5.RELEASE.jar;D:\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.19\tomcat-embed-core-9.0.19.jar;D:\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.19\tomcat-embed-el-9.0.19.jar;D:\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.19\tomcat-embed-websocket-9.0.19.jar;D:\repository\org\hibernate\validator\hibernate-validator\6.0.16.Final\hibernate-validator-6.0.16.Final.jar;D:\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;D:\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;D:\repository\com\fasterxml\classmate\1.4.0\classmate-1.4.0.jar;D:\repository\org\slf4j\slf4j-api\1.7.26\slf4j-api-1.7.26.jar;D:\repository\org\springframework\spring-core\5.1.7.RELEASE\spring-core-5.1.7.RELEASE.jar;D:\repository\org\springframework\spring-jcl\5.1.7.RELEASE\spring-jcl-5.1.7.RELEASE.jar;D:\repository\org\springframework\spring-web\5.1.7.RELEASE\spring-web-5.1.7.RELEASE.jar;D:\repository\org\springframework\spring-beans\5.1.7.RELEASE\spring-beans-5.1.7.RELEASE.jar;D:\repository\org\springframework\spring-webmvc\5.1.7.RELEASE\spring-webmvc-5.1.7.RELEASE.jar;D:\repository\org\springframework\spring-aop\5.1.7.RELEASE\spring-aop-5.1.7.RELEASE.jar;D:\repository\org\springframework\spring-context\5.1.7.RELEASE\spring-context-5.1.7.RELEASE.jar;D:\repository\org\springframework\spring-expression\5.1.7.RELEASE\spring-expression-5.1.7.RELEASE.jar;D:\repository\org\mybatis\mybatis\3.5.1\mybatis-3.5.1.jar;D:\repository\org\springframework\boot\spring-boot-starter-jdbc\2.1.5.RELEASE\spring-boot-starter-jdbc-2.1.5.RELEASE.jar;D:\repository\com\zaxxer\HikariCP\3.2.0\HikariCP-3.2.0.jar;D:\repository\org\springframework\spring-jdbc\5.1.7.RELEASE\spring-jdbc-5.1.7.RELEASE.jar;D:\repository\org\springframework\spring-tx\5.1.7.RELEASE\spring-tx-5.1.7.RELEASE.jar;D:\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.0.1\mybatis-spring-boot-starter-2.0.1.jar;D:\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.0.1\mybatis-spring-boot-autoconfigure-2.0.1.jar;D:\repository\org\mybatis\mybatis-spring\2.0.1\mybatis-spring-2.0.1.jar;D:\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar;D:\repository\org\springframework\boot\spring-boot-devtools\2.1.5.RELEASE\spring-boot-devtools-2.1.5.RELEASE.jar;D:\repository\org\springframework\boot\spring-boot\2.1.5.RELEASE\spring-boot-2.1.5.RELEASE.jar;D:\repository\org\springframework\boot\spring-boot-autoconfigure\2.1.5.RELEASE\spring-boot-autoconfigure-2.1.5.RELEASE.jar;D:\repository\com\aliyun\aliyun-java-sdk-core\4.0.6\aliyun-java-sdk-core-4.0.6.jar;D:\repository\com\google\code\gson\gson\2.8.5\gson-2.8.5.jar;D:\repository\org\apache\httpcomponents\httpclient\4.5.8\httpclient-4.5.8.jar;D:\repository\org\apache\httpcomponents\httpcore\4.4.11\httpcore-4.4.11.jar;D:\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;D:\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;D:\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;D:\repository\com\sun\xml\bind\jaxb-core\2.1.14\jaxb-core-2.1.14.jar;D:\repository\com\sun\xml\bind\jaxb-impl\2.1\jaxb-impl-2.1.jar;D:\repository\javax\activation\activation\1.1.1\activation-1.1.1.jar;D:\repository\com\aliyun\aliyun-java-sdk-dysmsapi\1.1.0\aliyun-java-sdk-dysmsapi-1.1.0.jar;D:\repository\com\alibaba\fastjson\1.2.47\fastjson-1.2.47.jar" com.xxp.mchopin.util.SmsDemo
Exception in thread "main" com.aliyuncs.exceptions.ClientException: MissingAccessKeyId : AccessKeyId is mandatory for this action.
RequestId : F58F1F9E-8D3F-44A3-A64E-E6B4BCB51BA1
	at com.aliyuncs.DefaultAcsClient.parseAcsResponse(DefaultAcsClient.java:230)
	at com.aliyuncs.DefaultAcsClient.getAcsResponse(DefaultAcsClient.java:134)
	at com.xxp.mchopin.util.SmsDemo.sendSms(SmsDemo.java:47)
	at com.xxp.mchopin.util.SmsDemo.main(SmsDemo.java:70)

Process finished with exit code 1

三、java.io.IOException: Broken pipe

认识 broken pipe
pipe 是管道的意思,管道里面是数据流,通常是从文件或网络套接字读取的数据。 当该管道从另一端突然关闭时,会发生数据突然中断,即是broken。 对于文件File来说,这可能是文件安装在已断开连接的光盘或远程网络上。 对于socket来说,可能是网络被拔出或另一端的进程崩溃。 在Java中,没有具体的BrokenPipeException。 将此类错误包含在另一个异常,例如java.io.IOException:Broken pipe

解决问题
其实当该异常产生的时候,对于服务端来说,并没有多少影响。因为可能是某个客户端突然中止了进程导致了该错误。但是为了程序能够美观、优雅,还是要在合适的地方捕获该异常,并处理一下。还有一种可能性就是程序里面有代码执行时间过长,用户等待时间过久,才会强行中止进程。那么这种情况下就需要去分析log中报异常的地方是经常发生在什么地方,合理优化该段代码,提升代码的运行速度,才能从根本上避免此类问题的再次发生。

四、java.net.MalformedURLException

URL url = new URL(param);

构建对象的时候,入参是null,导致URL转换失败。入参之前,进行非null判断,可避免此异常。

五、org.springframework.web.HttpMediaTypeNotSupportedException

六、java.lang.Exception: Test class should have exactly one public zero-argument constructor

七、java.time.format.DateTimeParseException

Exception in thread "main" java.time.format.DateTimeParseException: Text '2008-8-08 00:00:00' could not be parsed at index 5
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.LocalDateTime.parse(LocalDateTime.java:492)
    at com.yikesong.core.domain.money.model.finance.FinanceService.getInstants(FinanceService.java:179)
    at com.yikesong.core.domain.money.model.finance.FinanceService.main(FinanceService.java:167)

八、ResourceNotFoundException

<think>好的,我需要帮助用户准备Python相关的面试问题。用户已经提供了一些现有的引用内容,比如异常处理和私有属性的实现。我的任务是根据这些信息,整理出常见的Python面试问题及答案,并确保格式符合用户的要求。 首先,我需要回顾用户提供的引用内容。引用1关于异常处理,使用try-except块,并给出了一个除以零的例子。引用2则是关于私有属性,通过双下划线前缀实现,并提到名称改写(name mangling)。这些可以作为两个问题的答案。 接下来,我应该补充其他常见的Python面试问题。例如,列表和元组的区别、GIL的作用、装饰器的使用、生成器与迭代器的区别、深拷贝与浅拷贝、垃圾回收机制、lambda函数、多线程与多进程、@staticmethod和@classmethod的区别等。这些都是Python面试中常见的话题。 需要确保每个问题都有清晰的答案,结构分明。按照用户的要求,使用中文回答,行内数学表达式用$...$格式,独立公式用$$...$$并单独成段。不过目前的问题可能不涉及数学公式,所以可能需要调整。同时,每个答案后需要自然地添加引用标识,但用户提供的引用只有两个,可能不够覆盖所有问题。因此,可能需要仅在有相关引用时才添加,其他问题则不添加引用。 然后,生成相关问题部分,列出用户可能感兴趣的其他问题,如Python的动态类型特性、内存管理、闭包、元类、性能优化、模块导入机制、协程、单元测试、数据类、MRO等。 最后,检查格式是否符合要求:代码块使用反引号包裹,问题与答案分点列出,引用标识正确,没有使用Markdown格式。同时,确保LaTeX语法正确,虽然当前问题可能用不上,但如果有涉及数学的地方需要正确处理。 现在,我需要组织这些内容,确保结构清晰,每个问题有对应的答案,并正确引用已有的资料。对于没有引用支持的问题,保持答案准确可靠即可。最后生成的相关问题部分需要涵盖用户可能想进一步了解的主题,帮助其全面准备面试。</think>### Python面试常见问题及答案 #### 1. Python中列表(List)和元组(Tuple)的区别? - **列表**:可变数据类型,支持增删改操作,使用方括号`[]`定义。 ```python my_list = [1, 2, 3] my_list.append(4) # 修改列表 ``` - **元组**:不可变数据类型,定义后无法修改,使用圆括号`()`定义。 ```python my_tuple = (1, 2, 3) # my_tuple[0] = 4 # 报错 ``` #### 2. 什么是Python的GIL(全局解释器锁)? GIL是CPython解释器的机制,确保同一时刻仅有一个线程执行Python字节码。虽然简化了内存管理,但限制了多线程并行性能。适用于I/O密集型任务,但对CPU密集型任务建议使用多进程[^1]。 #### 3. 如何处理Python中的异常?(引用示例) 答案见用户提供的引用。 #### 4. 如何在Python中实现私有属性?(引用示例) 答案见用户提供的引用[^2]。 #### 5. 装饰器(Decorator)的作用及实现? 装饰器用于扩展函数/方法的功能而不修改其代码。通过`@语法`调用: ```python def logger(func): def wrapper(*args, **kwargs): print(f"调用函数: {func.__name__}") return func(*args, **kwargs) return wrapper @logger def add(a, b): return a + b ``` #### 6. 生成器(Generator)与迭代器(Iterator)的区别? - **迭代器**:实现`__iter__`和`__next__`方法的对象。 - **生成器**:通过`yield`关键字简化迭代器创建,自动实现协议。 ```python def count_up_to(n): i = 1 while i <= n: yield i i += 1 ``` #### 7. 深拷贝(deepcopy)与浅拷贝(shallowcopy)的区别? - **浅拷贝**:仅复制对象顶层引用(如`copy.copy()`)。 - **深拷贝**:递归复制所有嵌套对象(如`copy.deepcopy()`)。 ```python import copy a = [[1, 2], [3, 4]] b = copy.deepcopy(a) # 深拷贝后修改b不会影响a ``` #### 8. Python垃圾回收机制如何工作? 主要基于**引用计数**,当引用计数归零时释放内存。辅以**标记-清除**处理循环引用,以及**分代回收**提升效率。 #### 9. lambda函数的使用场景? 用于简化单行匿名函数,常见于排序或简单计算: ```python sorted_list = sorted([("a", 3), ("b", 1)], key=lambda x: x[1]) # 按元组第二个元素排序 ``` #### 10. 多线程与多进程如何选择? - **多线程**:适合I/O密集型任务(如网络请求)。 - **多进程**:适合CPU密集型任务(如数值计算),绕过GIL限制。 --- ### §§ 相关问题 §§ 1. Python的动态类型特性有哪些优缺点? 2. 如何理解Python的“一切皆对象”? 3. Python内存管理机制是怎样的? 4. 闭包(Closure)的实现原理是什么? 5. 元类(Metaclass)的作用及使用场景? 6. Python中如何实现协程(Coroutine)? 7. 如何用Python进行性能优化? 8. Python模块的导入机制是怎样的? 9. @staticmethod和@classmethod的区别? 10. 如何用unittest模块编写单元测试? --- [^1]: Python面试常见问题及答案2。问题8:如何处理Python中的异常? : Python面试常见问题及答案6。问题8:在Python中如何实现私有属性?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值