这道Java基础题真的有坑!我求求你,认真思考后再回答

Docker Desktop重装避坑:从卸载到安装的完整流程(Win10/Win11适用) 本文详细介绍了在Windows 10/11系统上彻底卸载和重新安装Docker Desktop的完整流程,包括深度清理残留文件、注册表项和虚拟磁盘,以及安装前的环境准备和安装后的验证步骤,帮助用户避免常见问题并优化Docker环境配置。 阅读详情

本文目录

一.题是什么题?

二.阿里Java开发规范。

 2.1 正例代码。
 2.2 反例代码。

三.层层揭秘,为什么发生异常了呢?

3.1 第一层:异常信息解读。
3.2 第二层:抛出异常的条件解读。
3.3 第三层:什么是modCount?它是干啥的?什么时候发生变化?
3.4 第四层:什么是expectedModCount?它是干啥的?什么时候发生变化?
3.5 第五层:组装线索,直达真相。

四.这题的坑在哪?

4.1 回头再看。
4.2 还有一个骚操作。

五.线程安全版的ArrayList。

六.总结一下。

七.回答另外一个面试题。

八.扩展阅读。

 7.1 fail-fast机制和safe-fast机制。
 7.2 Java语法糖。
 7.3 阿里Java开发手册。

九.最后说一句。

一.题是什么题?

我第一次遇到这个题的时候,是在一个微信群里,阿里著名的"Java劝退师"小马哥抛出了这样的一个问题:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

然后大家纷纷给出了自己的见解(注:删除了部分聊天记录):

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

后面在另外的群里聊天的时候(注:删除了部分聊天记录),我也抛出了这样的问题:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

总结一下图片中的各种回答:

1.什么也不会发生,remove之后,list中的数据会被清空。

2.remove的方法调用错误,入参应该是index(数组下标)。

3.并发操作的时候会出现异常。

4.会发生ConcurrentModifyException。

你的答案又是什么呢?

在这里,我先不说正确的答案是什么,也先不评价这些回答是对是错,我们一起去探索真相,寻找答案。

二.阿里Java开发规范

有人看到题的第一眼(没有认真读题),就想起了阿里java开发手册(先入为主),里面是这样说的:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

正是因为大多数人都知道并且读过这个规范(毕竟是业界权威)。所以呼声最高的答案是【会发生ConcurrentModifyException】。因为他们知道阿里java开发手册里面是强制要求:

不要在foreach循环里面进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。

但是不能因为他是权威,我们就全盘接受吧?

2.1 正例代码

所以我们眼见为实,先把手册里面提到的【正例代码】跑一下,如下:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

细心的读者可能发现了:咦,这个代码的22行为啥颜色不一样呢?

我帮你看看。

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

替换之后的代码是这样的:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

从上面我们可以得到一个结论.......

等等,到这一步你就想得到结论了?你不对【一行代码为什么就替换了七行代码】好奇吗?

看到真相的时候,有时候再往前一步就是本质了。

源码之下无秘密,我再送你一张图,JDK1.8中Collection.removeIf的源码:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

好了,已经到源码级别了,从这里我们验证了,阿里java开发手册里面的正例是对的,而且我还想给他加上一句:

如果你的JDK版本是1.8以上,没有并发访问的情况下,可以使用Collection.removeIf(Predicate<? super E> filter)方法。使代码更加优雅。

2.2 反例代码

接下来我们看看【反例代码】的运行结果:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

从执行结果来看,和我们预期的结果是一致。看着没有问题呀?

但是你别忘了,下面还有一句话啊:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

我们执行试一试:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

什么情况?真的是"出乎意料"啊!

把删除元素的条件从【公众号】修改为【why技术】就发生了异常:

java.util.ConcurrentModificationException

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

三.层层揭秘,为什么发生了异常呢?

我们现在明白为什么阿里强制要求不要在foreach循环里面进行元素的remove/add操作,因为会发生异常了。

但是开发手册里面并没有告诉你,为什么会发生异常。需要我们自己层层深入,积极探索。

3.1 第一层:异常信息解读

所以这一小节我们就一起探索,为什么会发生异常。我们再解析一下程序的运行结果,如下:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

正如上图里面异常信息的体现,异常是在代码的第21行触发的。而代码的第21行,是一个foreach循环。foreach循环是Java的语法糖,我们可以从编译后的class文件中看出,如下图所示:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

请注意图中的第26行代码:

list.remove(item) (这句话很关键!!!)

很关键,很重要,后面会讲到。

这也解释了,异常信息里面的这一个问题:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

好了,到这一步,我们把异常信息都解读完毕了。

3.2 第二层:抛出异常的条件解读

我再看看真实抛出异常的那一个方法:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

很简单,很清晰的四行代码。抛出异常的条件是:

modCount !=expectedModCount

所以,我们需要解开的下两层面纱就是下面两大点:

第一:什么是modCount?它是干啥的?什么时候发生变化?

第二:什么是expectedModCount?它是干啥的?什么时候发生变化?

3.3 第三层:什么是modCount?它是干啥的?什么时候发生变化?

先来第一个:什么是modCount?

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

modCount上的注释很长,我只截取了最后一段。在这一段中,提到了两个关键点。

1.modCount这个字段位于java.util.AbstractList抽象类中。

2.modCount的注释中提到了"fail-fast"机制。

3.如果子类希望提供"fail-fast"机制,需要在add(int,E)方法和remove(int)方法中对这个字段进行处理。

4.从第三点我们知道了,在提供了"fail-fast"机制的容器中(比如ArrayList),除了文中示例的remove(Obj)方法会导致ConcurrentModificationException异常,add及其相关方法也会导致异常。

知道了什么是modCount。那modCount是干啥的呢?

在提供了"fail-fast"机制的集合中,modCount的作用是记录了该集合在使用过程中被修改的次数。

证据就在源码里面,如下:

这是java.util.ArrayList#add(int, E)方法的源码截图:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

这是java.util.ArrayList#remove(int)方法的源码截图:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

注:这里不讨论手动设置为null是否对GC有帮助,我个人认为,在这里有这一行代码并没有坏处。在实际开发过程中,一般不需要考虑到这点。

同时,上面的源码截图也回答了这一层的最后一个问题:它什么时候被修改?

拿ArrayList来说,当调用add相关和remove相关方法时,会触发modCount++操作,从而被修改。

好了,通过上面的分析,我们知道了什么是modCount和modCount是干啥的。准备进入第四层。

3.4 第四层:什么是expectedModCount?它是干啥的?什么时候发生变化?

接下来:什么是expectedModCount?

expectedModCount是ArrayList中一个名叫Itr内部类的成员变量。

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

第二问:expectedModCount它是干啥的:

它代表的含义是在这个迭代器中,预期的修改次数

第三问:expectedModCount什么时候发生变化?

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

情况一:从上图中也可以看出当Itr初始化的时候,会对expectedModCount字段赋初始值,其值等于modCount。

情况二:如下图所示,调用Itr的remove方法后会再次把modCount的值赋给expectedModCount。

换句话说就是:调用迭代器的remove会维护expectedModCount=modCount。(这句话很关键!!!)

好了分析到了这里,我们知道了下面这个六连击:

1.什么是modCount?

2.modCount是干啥的?

3.modCount什么时候发生变化?

4.什么是expectedModCount?

5.expectedModCount是干啥的?

6.expectedModCount什么时候发生变化?

3.5 第五层:组装线索,直达真相

为什么发生了异常呢?

如果说前四层是线索的话,真相其实已经隐藏在线索里面了。我带你梳理一下:

【第一层:异常信息解读】中说到:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

【第二层:抛出异常的条件解读】中说到:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

【第三层:什么是modCount?它是干啥的?什么时候发生变化?】中说到:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

【第四层:什么是expectedModCount?它是干啥的?什么时候发生变化?】中说到:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

为什么发生了异常呢?我想你大概已经有了一个答案了,我再去Debug一下,为了方便演示,我们去掉语法糖,程序修改如下:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

并确认一下这个循环体会执行三次,如下:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

第一次循环

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

第一次循环取出的【公众号】,不满足条件if("why技术".equals(item)),不会触发list.remove(Obj)方法。

第二次循环

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

如图所示,第二次循环取到了“why技术”。满足条件if("why技术".equals(item)),会触发list.remove(Obj)方法,如下所示:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

第三次循环

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

总结一下在foreach循环里面进行元素的remove/add操作抛出异常的真相:

因为foreach循环是Java的语法糖,经过编译后还原成了迭代器。

但是从经过编译后的代码的第26行可以看出,remove方法的调方是list,而不是迭代器。

经过前面的源码分析我们知道,由于ArrayList的"fail-fast"机制,调用remove方法会触发【modCount++】操作,对expectedModCount没有任何操作。只有调用迭代器的remove方法,才会维护expectedModCount=modCount。

所以调用了list的remove方法后,再调用Itr的next方法时,导致了expectedModCount!=modCount,抛出异常。

四.这题的坑在哪里?

前面讲了阿里开发手册。讲了在foreach循环里面进行元素的remove/add为什么会发生异常。有了这些铺垫之后。

4.1 回头再看

我们再回过头来看小马哥出的这个题:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

我靠,这乍一看,foreach循环里面调用list.remove(obj)。我们刚刚分析过,会抛出ConcurrentModificationException异常。

你要这样答,你就进了小马哥的坑了。

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

这个题的坑在这三个点里面。小马哥并没有说这个list是ArrayList吧?如果你没有认真审题,先入为主的默认了这个list就是ArrayList。第一步就错了。

这是真正的高手,借力打力。借阿里开发手册的力,让你第一步就走错。

请看下面这张图:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

当使用CopyOnWriteArrayList的时候,程序正常执行。

4.2 还有一个骚操作

既然我们知道为什么会抛出异常,也知道怎么不抛出异常,List本来就是一个接口,那我们是不是可以实现这个接口,弄一个自定义的List呢?

比如下面的这个WhyTechnologyList,就是我自己的List,狸猫换太子,这操作,够"骚"啊。

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

只有掌握了原理,我们想怎么玩就怎么玩。

五.线程安全版的ArrayList

CopyOnWriteArrayList是什么?我们看一下源码注释上面是怎么说的:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

相对于ArrayList而言,CopyOnWriteArrayList集合是线程安全的容器。在遍历的时候,由于它操作是数组的"快照","快照"不会发生变化。所以它不需要额外加锁,也不会抛出ConcurrentModificationException异常。

我们主要看一下,示例程序中用到的三个方法,add(E e)、next()、remove(Obj)

先看add(E e)方法:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

我们看一下它的next()方法:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

再看一下它的remove(Obj)方法:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

next、remove都是操作的快照,并没有看到ArrayList里面的modCount和expectedModCount。所以它没有抛出ConcurrentModificationException

之前看小马哥说的这句话的时候还不太明白集合和一致性之间的关系(老问题,还是先入为主,一说到一致性首先想到的是缓存和数据库之间的一致性)。

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

但是当我阅读源码,从add方法可以看出CopyOnWriteArrayList并不保证数据的实时一致性。只能保证最终一致性。

同时我们从源码中可以看出CopyOnWriteArrayList增删改数据的时候需要搞一个"快照",这一点是比较耗内存的,使用过程中需要注意。

六.总结一下

我们再回到最开始的地方,看看大家的回答:

1.什么也不会发生,remove之后,list中的数据会被清空。

2.remove的方法调用错误,入参应该是index(数组下标)。

3.并发操作的时候会出现异常。

4.会发生ConcurrentModifyException。

现在,你知道这些回答的问题在哪里了吧?这一部分的总结也很简单,上一个对比图就好了:

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

七.回答另外一个面试题

现在面试官经常问的一个问题,你读过源码吗?

咦,巧了。你看了这篇文章,就相当于了读了ArrayList和CopyOnWriteArrayList的部分源码。

那你就可以这样回答啦:我之前看阿里Java开发手册的时候看到一条规则是

不要在foreach循环里面进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。

我对这条规则很感兴趣,所以我对其进行了深入的研究,阅读了

ArrayList和CopyOnWriteArrayList的部分源码。

如果碰巧面试官也读过这块源码,这个问题,你们可以相谈甚欢。

如果面试官没有读过这块源码,你可以给他讲的明明白白。

当然,还有一个前提是:我希望你读完这篇文章后,如果是第一次知道这个知识点,那你可以自己实际操作一下。

看懂了是一回事,自己再实际操作一下,是另外一回事。

八.扩展阅读

8.1 fail-fast和fail-safe机制

文中多次提到了"fail-fast"机制(快速失败),与其对应的还有"fail-safe"机制(失败安全)。

这种机制是一种思想,它不仅仅是体现在Java的集合中。在我们常用的rpc框架Dubbo中,在集群容错时也有相关的实现。

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

Dubbo 主要提供了这样几种容错方式:

Failover Cluster - 失败自动切换

Failfast Cluster - 快速失败

Failsafe Cluster - 失败安全

Failback Cluster - 失败自动恢复

Forking Cluster - 并行调用多个服务提供者

如果对这两种机制感兴趣的朋友可以查阅相关资料,进行了解。如果想要了解Dubbo的集群容错机制,可以看官方文档,地址如下:

http://dubbo.apache.org/zh-cn...

8.2 Java语法糖

文中说到foreach循环的时候提到了Java的语法糖。如果对这一块有兴趣的读者,可以在网上查阅相关资料,也可以看看《深入理解Java虚拟机》的第10.3节,有专门的介绍。

这道Java基础题真的有坑!我求求你,认真思考后再回答

 

书中说到:

总而言之,语法糖可以看做是编译器实现的一些“小把戏”,这些“小把戏”可能会使得效率“大提升”,但我们也应该去了解这些“小把戏”背后的真实世界,那样才能利用好它们,而不是被它们所迷惑。

关注公众号并回复关键字【Java】。即可获得此书的电子版。

8.3 阿里Java开发手册

阿里的孤尽大佬作为主要作者写的这本《阿里Java开发手册》,可以说是呕心沥血推出的业界权威,非常值得阅读。读完此书,你不仅能够获得很多干货,甚至你还能读出一点技术情怀在里面。

对于技术情怀,孤尽大佬是这样的说的:

热爱、思考、卓越。热爱是一种源动力,而思考是一个过程,而卓越是一个结果。如果给这三个词加一个定语,使技术情怀更加立体、清晰地被解读,那就是奉献式的热爱,主动式的思考,极致式的卓越。

关注公众号并回复关键字【Java】。即可获得此书的电子版。

九.最后说一点

这篇文章写之前我一直在纠结,因为感觉这个知识点其实我已经掌握了,那我还有写的必要吗?我在写的这个过程中还能收获一些东西吗?

但是在写的过程中,我翻阅了大量的源码,虽然之前已经看过,但是没有这样一行一行仔细的去分析。之前只是一个大概的模糊的影像,现在具象化清晰了起来,在这个过程中,我还是学到了很多很多。

其实想到写什么内容并不难,难的是你对内容的把控。关于技术性的语言,我是反复推敲,查阅大量文章来进行证伪,总之慎言慎言再慎言,毕竟做技术,我认为是一件非常严谨的事情,我常常想象自己就是在故宫修文物的工匠,在工匠精神的认知上,目前我可能和他们还差的有点远,但是我时常以工匠精神要求自己。就像我之前表达的:对于技术文章(因为我偶尔也会荒腔走板的聊一聊生活,写一写书评,影评),我尽量保证周推,全力保证质量。

文中提到的两本书《深入理解Java虚拟机》和《阿里Java开发手册》是两本非常优秀,值得反复阅读的工具书,可以关注我后,在后台发送java,即可获得电子书。

才疏学浅,难免会有纰漏,如果你发现了错误的地方,还请你留言给我指出来,我对其加以修改。

如果你觉得文章还不错,你的点赞、留言、转发、分享、赞赏就是对我最大的鼓励。

另外,如果小马哥本尊能读到这个文章,读到这段话,我想在这里表达对他的敬意。同时也想催更一下:小马哥,每日一问好久没更新啦,非常怀恋那种被"坑"的明明白白的感觉!

以上。

谢谢您的阅读

SI案例分享--考虑ESD保护二极管的差分线阻抗仿真 PCB设计中的cut out参考面早已是SI评估中常用的阻抗优化方式,通过合理的仿真建模,可以提供合适的设计参考,并保持与测试结果的高度一致性。 阅读详情

相关推荐

保姆级教程:用再生龙Clonezilla Live给Ubuntu系统做全盘备份与恢复(含BIOS设置避坑)

本文提供了一份详细的Clonezilla Live教程,指导Ubuntu用户如何轻松完成全盘备份与恢复。从启动盘制作、BIOS设置避坑到备份参数解析和恢复操作,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效保护系统数据。

weixin_42116058的博客 645

这道Java基础题真的有坑!我求求你,认真思考后再回答。

本文首发于公众号,关注文末公众号,阅读体验更佳。 这是个人第10篇原创文章 全文共计7362个字,46张图。分析的较为详尽,并进行了相关知识点的扩展,所以篇幅较长,建议转发朋友圈或者自己收藏起来,慢慢阅读。 本文目录 一.题是什么题? 二.阿里Java开发规范。 2.1 正例代码。 2.2 反例代码。 三.层层揭秘,为什么发生异常了呢? 3.1 第一层:异常信息解读。...

qq_27243343的博客 1269

使用pytorch构建LSTM_AE模型的两种方式

2.基本LSTM_Unit计算——基本LSTM_AE结构 3.自定义LSTM_Unit计算——自定义LSTM_AE结构 1.LSTM-Encoder-Decoder模型结构及简要解析 图基本lstm计算单元

qq_37840762的博客 7275

Java容器源码攻坚战--第二战:ArrayList

基于java10.1 零、前言 如果想读读源码测试功力,或读读源码修养身心,或读读源码满足自虐倾向,我建议第一个类是:ArrayList 第一、常用----所以用法比较熟悉,看完源码你也会更明白如何去用 第二、相对简单----1595行代码,刨去注释的一大堆也没有太多,还是hold的住的 总得来说ArrayList...

dianju8374的博客 281

触摸开关原理图_反激式开关电源PCB设计要点

由于最近工作中经常用到反激开关电源,就顺便做个有关反激电源PCB Layout方面的简单总结。关于变压器和补偿环路的设计原理和方法,可以参考之前的文章,链接如下:电子小白菜:反激电源变压器设计篇之详细设计步骤​zhuanlan.zhihu.com电子小白菜:反激电源变压器设计篇之基础原理​zhuanlan.zhihu.com电子小白菜:【干货分享】开关电源环路补偿设计步骤讲解​zhuanlan.z...

weixin_39574868的博客 1165

unity shader 后处理实现水墨风格渲染「Low Poly 」变「水墨画 」

水墨风格渲染 这次学校的比赛打算做一个中国古代背景的游戏,所以尝试做了水墨风格的渲染。 主要按以下四步来实现的效果: 根据色调和饱和度调整饱和度。 对图像进行模糊 水墨风格的物体边缘 物体内画笔笔触的模拟 接下来我分别就这四步依次展开说明: 调整饱和度 这里我使用Post-Processing Stack 的Color Grading 来调节饱和度,通过使用Grading Curv...

九级铁甲蛹的博客 1万+

java.util.ArrayList.add(int index, E elemen)方法实例

java.util.ArrayList.add(int index, E elemen) 方法将指定的元素E在此列表中的指定位置。它改变了目前元素在该位置(如果有的话)和所有后续元素向右移动(将添加一个到其索引)。 声明 以下是java.util.ArrayList.add()方法的声明 public void add(int index, E element) 参数

evilcry2012的专栏 1707

STM32H7串口DMA避坑指南:如何解决RT-Thread默认驱动不支持的问题

本文针对STM32H7在RT-Thread系统中启用串口DMA时遇到的驱动不支持问题,提供了详细的解决方案。通过分析问题根源,指导修改驱动代码以适配H7的DMA Stream架构,并调整内存配置确保DMA可访问性,最终实现稳定高效的串口DMA通信。

weixin_29179311的博客 424

Java入门必做踩坑题(篇二)

本篇主要讲类和对象这一章节的踩坑题,这一章也相对复杂和难理解,面试也是常考的一类题,我分析的都是比较经典的,读者觉得自己学习的不够扎实,可以收藏,如果觉得写发不错的话,求个免费的赞,谢谢!

耀的博客 1565

Spring AI + RAG 构建电商智能客服:从 PDF 文档解析到精准问答的全链路实战

核心框架:向量数据库:- PostgreSQL + pgvector (生产推荐)- Redis Stack (轻量级方案)- ChromaDB (快速原型)文档解析:- Apache PDFBox: PDF 文本提取- Spring AI Document Readers: 结构化解析大模型:- 阿里云百炼 (DashScope)- 本地部署:Qwen/ChatGLM/*** 电商领域实体*/@Data@Builder@ToString/*** 商品类型。

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 383

OSCP-Algernon(SmarterMail)

从前面的结果中,确实有.NET远程处理在端口17001上运行。因此,此漏洞应适用于目标计算机。下载了漏洞并编辑了以下部分以匹配我的IP并使用本地端口21。端口9998引导到一个SmarterMail的登录页面。设置监听,获得一个反弹shell。端口80重定向到默认IIS页。已经是system权限了。google搜索漏洞。

墨痕诉清风的博客 492

Java日常开发的21个坑,你踩过几个?

try {try {//这里有问题//这里有问题exceptionTwo抛出的异常,很可能是 exceptionOne的异常哦。正确使用方法,应该是new 一个出来。throw new BusinessException("业务异常", 0001);

java小白翻身 1231

2小时用Trae搭建全功能CMS系统

在前文中,我们使用Trae从零搭建了一个用户文档站点,仅用不到2小时就实现了用户注册登录和文档的增删改查功能,且无需编写任何代码。本节我们将在此基础上,构建一个CMS后台管理系统,包含用户管理和文档管理两大功能模块。

2501_92019101的博客 540

java list remove_这道Java基础题真的有坑!我求求你,认真思考后再回答

作者:why技术一.题是什么题?我第一次遇到这个题的时候,是在一个微信群里,阿里著名的"Java劝退师"小马哥抛出了这样的一个问题:然后大家纷纷给出了自己的见解(注:删除了部分聊天记录):后面在另外的群里聊天的时候(注:删除了部分聊天记录),我也抛出了这样的问题:总结一下图片中的各种回答:1.什么也不会发生,remove之后,list中的数据会被清空。2.remove的方法调用错误,入参应该是in...

weixin_39769627的博客 178

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

这道Java基础题真的有坑!我也没想到还有续集。

关注文末公众号,阅读体验更佳 这是why技术的第12篇原创文章 前情回顾 自从我上次发了《这道Java基础题真的有坑!我求求你,认真思考后再回答。》这篇文章后。我通过这样的一个行文结构: 解析了小马哥出的这道题,让大家明白了这题的坑在哪里,这题背后隐藏的知识点是什么。 但是我是万万没想到啊,这篇文章居然还有续集。因为有很多读者给我留言,问我为什么?怎么回事?啥情况? 问题片段一:到底循环几次?...

qq_27243343的博客 1178

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【原创】这道Java基础题真的有坑!我也没想到还有续集。

前情回顾 自从我上次发了《这道Java基础题真的有坑!我求求你,认真思考后再回答。》这篇文章后。我通过这样的一个行文结构: 解析了小马哥出的这道题,让大家明白了这题的坑在哪里,这题背后隐藏的知识点是什么。 但是我是万万没想到啊,这篇文章居然还有续集。因为有很多读者给我留言,问我为什么?怎么回事?啥情况? 问题片段一:到底循环几次? 有很多读者针对文章的下面的这个片段: ...

weixin_44626952的博客 255

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

centos7 java程序突然停止运行没有报错日志_这道Java基础题真的有坑!我也没想到还有续集。...

点击蓝字关注我吧这是why技术的第12篇原创文章1 前情回顾自从我上次发了《这道Java基础题真的有坑!我求求你,认真思考后再回答。》这篇文章后。我通过这样的一个行文结构:解析了小马哥出的这道题,让大家明白了这题的坑在哪里,这题背后隐藏的知识点是什么。但是我是万万没想到啊,这篇文章居然还有续集。因为有很多读者给我留言,问我为什么?怎么回事?啥情况?问题片段一:到底循环几次?有很多读者针对...

weixin_39948439的博客 694

2和3为什么是错的 java,【原创】这道Java基础题真的有坑!我也没想到还有续集。...

前情回顾自从我上次发了《这道Java基础题真的有坑!我求求你,认真思考后再回答。》这篇文章后。我通过这样的一个行文结构:解析了小马哥出的这道题,让大家明白了这题的坑在哪里,这题背后隐藏的知识点是什么。但是我是万万没想到啊,这篇文章居然还有续集。因为有很多读者给我留言,问我为什么?怎么回事?啥情况?问题片段一:到底循环几次?有很多读者针对文章的下面的这个片段:来问了一些问题:为什么会循环三次?循环二...

weixin_42613018的博客 158

Java开发基础技术板块

1. 优秀文章合集 1.1 讲述Java集合的普通便利删除与迭代器删除 这道Java基础题真的有坑!我求求你,认真思考后再回答。

iNiBuBian的博客 197

“Java面试大挑战:从基础到架构,马小帅的技能秀!“

(自信地)Java SE 17啊,嗯,它引入了几个新特性,比如基于模式的文本块、记录、密封类和新的预定义的记录类型。

zhaomh2017的博客 409

HR面试问题回答技巧综合大全

HR面也有很多学问

菜鸟逆袭之路 1709

【面试技巧】巧妙回答面试中的常见问题

本文节选自《Java面试八股文》一书。

Tom弹架构 436

Spring全家桶笔记,这是真的强!

今天有粉丝问我:SpringBoot中默认有135个自动配置类,难道SpringBoot启动时都要去解析它们?难道这就是SpringBoot启动慢的原因吗?在回答这个问题之前,我还是得先给这位粉丝点个赞,看得出来他是在认真思考的,只不过大家都知道SpringBoot是基于Spring来实现的,如果对Spring的底层不熟悉的话,在研究SpringBoot源码时将会更加痛苦。对于上面这个问题,首先,...

Java技术栈,分享最主流的Java技术 503

【原来是这样】一个Java多线程的问题,颠覆了我多年的认知!

碰见个奇怪的多线程问题 小白们也不用怕,今天的文章你们都能看得懂????,最近的学习中,碰到这样的一个问题: Java创建多线程的方式有哪几种啊? 你可能会说啦,这还不简单,不就是: 继承Thread类 实现Runnable接口 好像也是,如果你让我回答这个问题,我似乎也会这样回答,顶多我会再回答一个callable的方式,但是啊,最近看到这样的一个说法,让我陷入了深深的思考啊???? Java中创...

庆哥Java的优快云技术博客 8304

面试被问职业规划应该怎么回答最有效

从很多方面来分析,包括:掌握问题实质。掌握应答策略,大量的回答案例,程序员跳槽面试特别会踩的坑和思路的规避 及注意的地方

mobangde的博客 1223

30道“热乎乎”的 JVM 典型题目剖析!

公众号后台回复“学习”,获取作者独家秘制精品资料多年好友心血力作,阿里资深技术专家十余年JVM生产实践经验《从零开始带你成为JVM实战高手》限时优惠:88元(正在进行in...

石杉的架构笔记 1387
上一篇: 终于有人把年薪40WJava程序员必知技术点整理出来了(墙裂推荐)
下一篇: 面试官标准:第一能干活,第二Java基础要好,第三熟悉分布式框架
JavaAOE
博客等级 码龄7年 27粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值