对List遍历过程中添加和删除的思考
平时开发过程中,不少开发者都遇到过一个问题:在遍历集合的的过程中,进行add
或者remove
操作的时候,会出现2类错误:
- java.util.ConcurrentModificationException
for in
遍历过程中add/remove导致的错误 - java.lang.IndexOutOfBoundsException 越界错误,
for
循环的时候删除元素。
平时开发过程中,不少开发者都遇到过一个问题:在遍历集合的的过程中,进行add
或者remove
操作的时候,会出现2类错误:
for in
遍历过程中add/remove导致的错误for
循环的时候删除元素。Java8中引入了非常多的特性,对于我这个从C#转Java的开发人员而言,Lambda是我的最爱,让我觉得Java总算弥补了一块很大的短板(C#当时用Lambda真的很舒服)。
当然今天想聊聊的不是Labmda,这块内容另外抽时间聊,今天说说一个小特性:反射获取方法真正名称。
Spring有一个包org.springframework.web.client.RestTemplate
,它可以协助开发者更加方便简单的发起HTTP
请求并将结果转化为指定的类型。
Spring体系中存在不少
XXXTemplate,
基本都是简化对XXX
的操作。内部实现基本也都是模板方法,帮你分装和实现一部分通用代码,这不是本文重点,后续探讨。
RestTemplate
提供了几类核心方法:
通用
方法:exchange()
单独
方法:xxxForEntity
和xxxForObject
,其中xxx表示GET等方法中的一种,比如getForEntity
、postForEntity
本文的重点是讲解的是一种:exchange()
,其他东西暂不讨论。
Jackson是一个在Java体系中被广泛使用的Json序列化和反序列化类库,它提供了丰富的API给开发者使用。
今天记录下最近利用Jackson处理复杂的泛型对象的心得,其核心就是利用TypeFactory.constructParametricType()
方法,从内到外依此构造Type。
List<Map<String, Person>>
Map<String, List<Person>>
今天因为手贱,把 Intellij
启动文件 中的agenet
给挪移了一个位置,导致点击 Intellij
应用图标后无法启动,找了各种办法后最终解决问题,最靠谱的方法为2种:
Intellij
的日志进行问题查找terminal
启动Intellij
并查看控制台报错。我们一直都在说传统的 IO属于阻塞 IO,而 NIO
属于非阻塞的 IO.
我一直在理解 阻塞 IO 和 非阻塞 IO 的区别。
看了这么多文章后,今天算是小有所获,可以用形象的语言来表达他们的区别了。
上一篇文章对ThreadLocal
的简单入门,了解了使用场景和使用办法。接下来我们继续聊聊:
ThreadLocal
的内部结构!ThreadLocal
中的WeakReference
是什么?ThreadLocal
是否会触发内存泄露?ThreadLocal
这个东西复杂吗?在我看来,对于初学者而言,还是有些难度的,其内部的存储结构挺饶的,需要沉下心来多刷刷别人的博客,然后自己根据源码、测试以及个人思考慢慢领会。
本文作为抛石引玉,给不清楚的同学给点灵感,也请大神们不吝赐教。
本系列从如下几个知识点进行分析:
ThreadLocal
是什么
ThreadLocal
使用场景有哪些?我喜欢通过实际的案例来引入,学有所用,这样才能学得快。
对zookeeper
的开源框架curator
中关于listener
的使用不算难,这个地方我整理了2篇比较好的文章,对齐用法作出说明。
Linux
服务器上我们通常需要在开机后自动
启动相关的程序。
本文主要整理和记录下工作中用到的关于这方面的知识,方便后续查找。
Tomcat 我已经使用很久了,但是仅仅停留在 IDE 中通过 Tomcat 启动 Web项目,兑取其中很重部署细节以及管理细节都不太清楚,今天趁着项目需要所有对如下几个细节进行总结,并形成文,方便后续查找。
内容包括:
最近有个SpringBoot
项目,需要扫描指定包下带有带有指定注解的类,最开始使用的是hutool
下的 ClassScaner.scanPackageByAnnotation
这个方法进行扫描。
在前期开发阶段工作正常,但是最近在中期部署的时候,将 SpringBoot
项目打包成 jar
后在服务器运行的时候,直接报出了空指针异常,经过查看记录,代码没有在指定包下找到任何一个 class
。
为了解决这个问题我尝试了如下方法:
JDK
本来是 OpenJDK
,更换成了 SunJDK
,无法解决!Guava
提供的 ClassPath.from
,无法解决!war
包后,部署到 tomcat
后运行,成功解决!经过上述测试后发现,只有将项目打包为war 后在 Tomcat下运行才能正常扫描。这下我的心都凉了,因为如果一个SpringBoot
项目还必打包为传统的 war 然后部署,那么SpringBoot
的优势会少很多。
之前腾讯云打折,买了一台腾讯的云服务器,主要打算就是做这个博客。 因为上面运行的是我的博客所以不敢在上面乱折腾,最近恰好看到阿里云的ECS在打折,所以就入手了一台,作为平时测试和开发调试使用。 再部署完基础环境后,启动了一个单机的Zookeeper实例,通过本地客户端发现无法访问。
本文属于对Java线程池的综合思考,如果您对Java线程池还不太了解,可以先收藏。 本文讲解如下几个内容: 当核心线程满时,先创建临时线程还是先加入队列?临时线程工作时间和方式?核心线程和临时线程获取活的方式?只有临时线程才能被销毁吗?何时触发拒绝策略?线程池如何调优?
在最开始学习Spring Cloud
的时候,了解其中有个组件叫做Feign
: 可以通过既定规则在本地消费端存留一份服务提供者的接口,这样消费者便可以直接通过这个接口来进行服务消费。
Spring Cloud
是一个开源方案的整合体,其中的Feign
组件整合的就是已有的一个开源组件Feign
。
Feign
的中文含义是: 假装!