首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java集合面试题&知识总结(中篇)

当多个线程对一个集合进行并发操作时,如果一个线程通过迭代器(Iterator)在遍历集合过程中,其他线程修改了集合结构(添加、删除元素),那么正在遍历线程会立即抛出 ConcurrentModificationException...在 “Fail Safe” 机制下,当一个线程正在遍历集合过程中,其他线程对集合进行修改,不会抛出 ConcurrentModificationException 异常。...解答:ConcurrentModificationException 是 Java 中一个运行时异常,通常在多线程环境下,一个线程正在遍历集合过程中,另一个线程修改了集合结构(添加、删除元素),...那么正在遍历线程可能会抛出这个异常。...这是因为在遍历过程中,集合结构发生了改变,但是这个改变并没有同步到正在进行迭代过程中,所以会抛出异常

21620

讲真,下次打死我也不敢随便改serialVersionUID了

但是,如果一个类没有实现这个接口,想要被序列化的话,就会抛出java.io.NotSerializableException异常。 它是怎么保证只有实现了该接口方法才能进行序列化与反序列化呢?...所以,对于一些特殊字段需要定义序列化策略时候,可以考虑使用transient修饰,并自己重写writeObject 和 readObject 方法,java.util.ArrayList中就有这样实现...就像我们平时用U盘一样。把Java对象序列化成可存储或传输形式(二进制流),比如保存在文件中。这样,当再次需要这个对象时候,从文件中读取出二进制流,再从二进制流中反序列化出对象。...为了简化代码量,反序列化调用链如下: ? 在initNonProxy中 ,关键代码如下: ? 在反序列化过程中,对serialVersionUID做了比较,如果发现不相等,则直接抛出异常。...之所以会发生异常,是因为反序列化过程中做了校验,并且如果没有明确定义的话,会根据类名及属性等自动生成一个。

77610
您找到你想要的搜索结果了吗?
是的
没有找到

讲真,下次再也不敢随便改 serialVersionUID 了

但是,如果一个类没有实现这个接口,想要被序列化的话,就会抛出java.io.NotSerializableException异常。 它是怎么保证只有实现了该接口方法才能进行序列化与反序列化呢?...所以,对于一些特殊字段需要定义序列化策略时候,可以考虑使用transient修饰,并自己重写writeObject 和 readObject 方法,java.util.ArrayList中就有这样实现...就像我们平时用U盘一样。把Java对象序列化成可存储或传输形式(二进制流),比如保存在文件中。这样,当再次需要这个对象时候,从文件中读取出二进制流,再从二进制流中反序列化出对象。...为了简化代码量,反序列化调用链如下: ? 在initNonProxy中 ,关键代码如下: ? 在反序列化过程中,对serialVersionUID做了比较,如果发现不相等,则直接抛出异常。...之所以会发生异常,是因为反序列化过程中做了校验,并且如果没有明确定义的话,会根据类名及属性等自动生成一个。

4.2K42

第9章 Java高级编程

在程序运行过程中发生错误时,Java允许其不按照正常路径完成任务,由发现错误方法抛出封装了错误信息对象(异常)到其调用程序,发出已经发生问题信号,然后立即退出;而且,程序并不在调用该方法代码处继续执行...前者是一种设计和实现时问题,如数组越界等,这种异常可以通过编程避免。   后者是在程序运行过程中由环境原因造成异常。   ...2、使用throw语句方法,或者调用其他类异常抛出方法时,应在方法头定义中增加throws异常类名列表。   捕获异常   当一个异常抛出时,应该由专门语句来接收这个异常对象。...9.3.3 文件读写及随机访问   文件是保存在磁盘等二级存储设备上数据,由记录组成,文件中一行可以看作是一条记录。...有效利用计算机资源典型应用是在IO等候期间如何利用CPU;用户方面的界面友好性典型体现是如何在一个长时间数据下载过程中灵敏地对“停止”(stop)操作进行反应。

75920

谈谈基于SQL Server Exception Handling

如何处理从Database抛出Exception,如何保存基于Database ExceptionError Message,如何在Database和.NET Application之间进行消息传递...由于可以通过@@ERROR得到Error类型,可以帮助我们在编写Stored Procedure过程中,借助这个@@ERROR进行一些流程控制。...这些Error Message到底是如何存储呢?Error message和Error Numbder又是如何进行关联呢?...对于一些可以预知异常在SQL中又该如何处理呢? 我发现很多程序员喜欢使用Output参数来处理这些预知异常。...我觉得,既然添加一个同名User本身代表一种Exception,从语义上讲,认为地抛出这样Exception方式好像更加合理一,所以我们喜欢通过调用RAISEERROR方式将一个Error抛出

89760

Java面试题3:Java异常

答: 运⾏时异常:空指针异常、指定类找不到、数组越界、⽅法传递参数错误、数据类型转换错误。...答: 所谓异常是指程序在运行过程中发生一些不正常事件。...; 3.finally是在return后面的表达式运算后执行(此时并没有返回运算后值,而是先把要返回保存起来,管finally中代码怎么样,返回值都不会改变,任然是之前保存值),所以函数返回值是在...Fail-safe,java.util.concurrent包下面的所有的类都是安全失败,在遍历过程中,如果已经遍历数组上内容变化了,迭代器不会抛出 ConcurrentModi?...ArrayStoreException(数据存储异常,操作数组是类型不一致) Bu?

6910

Flask 中上下文管理和请求钩子

一、请求上下文 (request context) Flask 中上下文对象相当于一个容器,保存了 Flask 程序运行过程中一些信息,请求方式和表单数据。...通过 current_app ,可以将存储变量获取出来(默认存储了很多信息),可以通过 current_app.name 打印当前 app 名称,可以获取应用启动文件,启动时指定了哪些参数,加载了哪些配置文件...2. g 变量 g 变量是当前请求中一个临时全局变量,充当中间媒介作用,可以使用它来保存数据和传递数据,g 变量保存是当前请求数据,在同一次请求后面的处理步骤中,可以取出保存数据。...2. before_request 在每次请求前执行,验证用户状态保持是否过期。 3. after_request 如果没有抛出错误,在每次请求后执行。...: 在处理第一个请求前执行 在每次请求前执行 如果没有抛出错误,在每次请求后执行 异常:None 在每次请求后执行 刷新一下浏览器页面,发送第二次请求,后端控制台打印结果如下: 在每次请求前执行 如果没有抛出错误

1.7K30

SpringSecurity6 | 核心过滤器

安全上下文是指存储了当前用户认证信息(身份、权限等)对象,在整个请求处理过程中需要被使用。...Spring Security 使用 ThreadLocal 来实现线程本地变量存储,确保在同一线程内安全上下文传递。...与其他安全组件协作:SecurityContextHolderAwareRequestFilter 通常与其他安全组件(身份验证过滤器、访问控制过滤器等)协同工作,确保安全上下文信息能够在整个请求处理过程中得到正确传递和使用...3.14ExceptionTranslationFilter ExceptionTranslationFilter是比较重要一个过滤器,对异常进行转换处理,处理过滤器中抛出AccessDeniedException...异常处理:在权限验证失败或访问被拒绝时,FilterSecurityInterceptor 负责抛出相应异常或执行其他定义异常处理逻辑。

49931

避开NullPointerException10条建议

举个例子,我需要在原有逻辑上加一段代码,而新加代码报错抛出了 NPE,同时又没做异常处理,就直接导致后面的逻辑不运行了,影响了整个原有逻辑,太恐怖了。所以大家一定要小心避开 NPE 这个坑。...后续若也没有为该变量赋值,则当使用这个变量里内容时,便会抛出 NPE。...对空对象调用静态方法或类方法时,不会报 NPE,因为静态方法不需要实例来调用任何方法; 访问或更改空对象上任何变量或字段时; 抛出异常抛出 null; 数组为 null 时,访问数组长度; 数组为...避开 NPE 建议 这节将介绍如何在开发过程中避开 NPE 一些建议。...参考 Java Tips and Best practices to avoid NullPointerException in Java Applications 如何在 Java8 中风骚走位避开空指针异常

2K30

spring事务传播特性

(原子性) :整个过程是完整不会出现在一个过程中一部分成功一部分失败情况 consistency(一致性) :满足业务规则一致性状态,A给B转账A钱减少了而B钱没有增加(这就是不一致情况)...durability(持久性)当这个事务完成操作时候,这里保存事务就会被持久化到存储器中(MySQL,H2,Oralce等) 也许你看到这个会有一个疑问,那就是那数据库在进行存储时候会不会出现失败或者不遵循...第五种方式:全注解 注意: 1、Spring事务边界是在调用业务方法之前开始,业务方法执行完毕之后来执行commit 或者rollback,取决于是否抛出runtime异常。...MANDATORY 当前方法必须运行在事务内部,如果没有正在运行事务,将抛出异常。 SUPPORTS 如果有事务在运行,当前方法就在这个事务内运行;否则它可以不运行在事务中。...NOT_SUPPORTED 当前方法不应该运行在事务中,如果有运行事务,将它挂起。 NEVER 当前方法不应该运行在事务中,如果有运行事务,就抛出异常

54620

规范-编码规范总结(微信分销系统)

但你设置返回值时候保存成功必然返回值为1,但保持失败必定是抛出jdbc操作数据库异常,所以我这里建议使用不设置返回值且不用返回值来处理业务逻辑,成功代码执行完成,失败捕获异常返回给前端。...定义统一异常处理,针对不同异常来统一处理,这个时候在service就可以自定义异常类来统一处理异常,这个时候在service操作异常后就直接抛出自定义异常就行,在controller也不要对异常进行处理了...尽量在数据库中不要用int来存身份和角色相关属性,这样没有文档谁都看不懂,使用varchar就行,就是多占空间而已,但对于代码可读性和可维护性提高不少,即使你数据库中使用时候int来存储,切记在代码中也要使用常量属性来定义类型...还有就是上面的那个问题,insert失败后是直接抛出异常还是返回0,直接抛出异常下面的代码就是永远都不会走代码就没有任何意义了。 ?...service 可以使用void 不用自己再封装baseModel 了,然后一些业务异常抛出自定义异常,如果是操作过程中没有抛出任何异常,就在controller直接业务操作成功。 ?

96430

【面试八股文】每日一题:谈谈你对异常理解

t=9.0 每日一题-Java核心-谈谈你对异常理解【面试八股文】   异常是程序在运行过程中出现错误或不正常情况。当程序执行过程中遇到无法处理错误或者不符合预期情况,就会抛出异常。...异常可以分为两种类型:受检异常和非受检异常。 受检异常是指在程序编译过程中就能被检测到异常,需要在代码中进行明确处理,否则编译不通过。例如,文件不存在、网络连接失败等情况都属于受检异常。...非受检异常是指在程序运行过程中出现异常,无法在编译时被检测到。这些异常通常是由程序逻辑错误导致空指针引用、数组越界等。非受检异常可以通过捕获和处理来避免程序崩溃。...异常处理是为了在程序出现异常时能够进行相应处理,避免程序异常终止。常用异常处理方式包括捕获异常抛出异常和处理异常。...捕获异常通过try-catch语句块来实现,可以在catch块中对异常进行处理,输出错误信息、记录日志等。抛出异常通过throw语句将异常传递给上层调用者来处理。

17920

xwiki开发者指南-保存数据

有些时候,你想保存数据。XWiki平台可以根据你需要提供不同存储地方。下面是你所有的选择。...临时存储 执行上下文 如果要保存数据只要保存一个请求持续时间(即一个XWiki URL调用),那么你应该在Execution Context声明一个属性。...Attribute 参数 描述 cloneValue() - 表明你希望value被cloned,当执行上下文cloned或你属性是从父执行上下文继承 makeFinal() - 表明如果有人试图替换初始值对象应当抛出异常...inherited() - 表明属性应该由在当前请求中push出任何新执行上下文中继承 nonNull() - 表明如果属性值设置为null,应当抛出异常 type(Class<?...有几个地方,你可以存储数据: 在文档内容中 在一个文档XObject对象 在附件中 永久目录 另一种可能性是使用环境永久目录。

29010

Spring事务提交和回滚机制,以及分布式事务处理解决方案

建议先关注、赞、收藏后再阅读。Spring事务提交和回滚机制如下:提交机制:Spring事务默认提交机制是自动提交。...当事务方法顺利执行完成(没有抛出异常)时,Spring会自动将事务提交到数据库中保存。这意味着对数据库操作会永久保存。...回滚机制:Spring事务回滚机制可以分为两种情况:未检查异常(unchecked exception):当事务方法抛出未检查异常时,Spring会自动回滚事务。...在发生未检查异常时,事务将回滚并数据库中操作将被撤销。检查异常(checked exception):当事务方法抛出检查异常时,默认情况下Spring不会自动回滚事务。...基于消息队列(MQ)事务消息:Spring提供了对JMS和AMQP(RabbitMQ)支持,可以使用消息队列来处理分布式事务。

53791

Spring Boot处理REST API错误正确姿势

异常字段的话,可能只有Java开发人员看到这个比较开心,这些信息让API消费者也陷入了思索API服务端究竟发生了什么内部编程错误。 如果我们从这些编程异常内容中抽象出更多细节是不是更好一?...ExceptionHandler ExceptionHandler是一个Spring注解,它提供了一种机制来处理在处理程序执行过程中抛出异常(比如Controller操作)。...一个用于处理数据库调用Spring应用程序常见场景就是使用存储库类通过其ID来查找一条或多条记录。...当使用@ExceptionHandler注解方法时,它将接受多种自动注入参数,WebRequest,Locale和其他。...然后就是如何为应用程序代码中抛出异常创建更多手工方法(带有@ExceptionHandler方法)。

3.5K130

编写高质量代码改善C#程序157个建议

前言     自从.NET出现后,关于CLR异常机制讨论就几乎从未停止过。迄今为止,CLR异常机制让人关注最多就是“效率”问题。...本文主要来学习以下几点建议   建议58、用抛出异常代替返回错误代码   建议59、不要在不恰当场合下引发异常   建议60、重新引发异常使用inner Exception 58、用抛出异常代替返回错误代码...我们来看看这样一种情况:给失败通知增加稍微复杂一功能。   如果本地保存失败,要完成“通知运行本段代码客户机管理员”功能。...总金额个增加功能导致我们不能像处理“本地保存失败”那样来处理“远程保存失败”。   一切仿佛又回到了起点,在没有异常处理机制之前,我们只能返回错误代码,但是现在有了另一种选择,即使用异常机制。...以上通过实际案例阐述了抛出异常相比于返回错误代码优越性,以及在某些情况下错误代码将无用武之地,构造函数、操作符重载及属性。

1.2K31

Java虚拟机--虚拟机内存区域Java虚拟机内存区域

在后续执行过程中,Java虚拟机会用一部分内存区域来存储程序运行期间所需要用到数据和相关信息,通常我们称这部分内存区域叫做Runtime Data Area---运行时数据区,也就是我们常说Java...)、异常表 静态变量 由于静态变量量是所有该类生成对象所共享,因此并不保存在堆、栈中,而是保存在方法区中。...java.lang.Class对象引用 在加载过程中,虚拟机会创建一个代表该类Class对象,方法区中必须保存对该Class对象引用,可以通过Class类forName静态方法来得到该Class...方法表 Java虚拟机会对每个非抽象类,都声明一个方法表,主要将可能使用方法直接引用保存到方法区中,包括从父类继承而来方法。...常量池在Java用于保存在编译期已确定,是已编译class文件中一份数据。它包括了关于类,方法,接口等中常量,也包括字符串常量,String s = "java"这种申明方式。

2K80

【Spring 篇】编织魔法:用XML实现Spring AOP

异常通知(AfterThrowing) 异常通知在连接点抛出异常时执行,用于处理异常情况。在XML中,我们使用元素来定义异常通知。....))"/> 在这个例子中,logAfterThrowing方法是我们定义异常通知,它将在指定切点抛出异常时执行。 5.....))"/> 在这个例子中,logAround方法是我们定义环绕通知,它将在指定切点前后执行。 连接点(Pointcut) 连接点是在程序执行过程中能够插入切面的。...在切面内部,我们使用和元素分别定义了在serviceMethods连接点前后和抛出异常时执行通知。...事务管理: 实现对事务自动开启、提交或回滚。 异常处理: 在出现异常时执行额外逻辑,记录异常信息、发送通知等。 性能监控: 监控方法执行时间,识别性能瓶颈。

15310

【Java零基础入门篇】第 ⑥ 期 - 异常处理

,在系统运行过程中依据会遇到一些问题,因为很多问题不是靠代码能够避免。...3.ArrayStoreException异常 数组存储异常,当数组存储空间不够或类型不匹配时会产生此类异常。...每当java程序运行过程中某段代码发生一个可识别的运行错误时,JVM都会产生一个相应异常对象,对象封装了异常有关信息。...(不建议使用) 手动抛出异常 Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要使用人工创建并抛出。 手动创建并抛出异常,通过throw关键字。...自定义异常类后,创建异常类对象,最后再使用throw语句抛出异常对象,在调用添加异常处理语句即可。 自定义异常步骤 第1步:自定义异常类。

6810
领券