遇到的那些坑

本文记录了在软件开发过程中遇到的一些技术难题及其解决办法,包括SpringMVC静态资源处理配置、BoneCP与Oracle数据库连接问题、ueditor图片上传显示问题、雪花算法ID精度问题、HttpClient超时设置以及MyBatis异常排查等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此贴记录工作过程中遇到的那些坑爹问题。

1、spring mvc 静态资源处理

  spring提供三种对静态资源的处理方式,我使用的是<mvc:resources mapping="/images/**" location="/images/" />方式,由于之前分文件配置,将这个标签跟

</context:component-scan>标签配置在别的xml里面,而不是**-servlet.xml里面,将导致正常的spring mvc注解地址访问不到。

2、bonecp 链接oracle11gr2存在问题

  使用bonecp0.8.0.RELEASE,连接oracle11g R2一直提示找不到驱动,换了一晚上的驱动错误依旧,改为c3p0就OK了。

3、使用百度ueditor上传图片之后缩放在chrome下存在问题

  增加如下css  .edui-scale{-webkit-box-sizing:content-box;border-box:content-box;-moz-box-sizing:content-box;}

4、使用雪花算法生成的ID为18位,传到前端会有很多问题,因为js的数字类型精度只能支持到16位,多的都会四舍五入。所以导致前端获取的ID存在问题。解决办法就是:

  全都转成字符串类型。。。

5.HttpClient 4.3连接超时问题

  4.3版本不设置超时的话,一旦服务器没有响应,等待时间N久(>24小时)。我们线上环境直接导致所有线程都在等待,卡死。。。解决是给其加上超时时间:

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet=new HttpGet("http://www.baidu.com");//HTTP Get请求(POST雷同)
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();//设置请求和传输超时时间
httpGet.setConfig(requestConfig);
httpClient.execute(httpGet);//执行请求

 

6.mybatis异常,这几天在用mybatis,遇到问题统一记录下

  1)前几天改用mybatis有次报了这么一个异常:Mapped Statements collection already contains value for com.mapabc.boss.core.collect.statistical.dao.CollectStatisticalDao.queryScoreStatistical

  一开始也没当回事,反正解决了,结果今天又遇到了,缺忘记那天咋搞定的了,又纠结半天,充分印证了那句好脑瓜不如烂笔头啊,还是记录下防止以后再遇到。

  其实就是因为在mapper文件中有重名的方法,这里虽然报的是queryScoreStatistical,但是可能并不是这个,需要检查下整个xml,找出重名的,改了就OK。

  2)org.apache.ibatis.binding.BindingException: Parameter '__frch_item_0' not found. Available parameters are [param1, list]

   这个是因为在取值的时候没有对应的属性名。

http://www.cnblogs.com/lcxdever/p/4286769.html

 

转载于:https://www.cnblogs.com/softidea/p/5560604.html

### 如何避免List删除元素的常见问题及陷阱 在Java中,使用`List`删除元素可能会遇到多种问题,尤其是当需要在遍历过程中同删除元素。以下是可能遇到的问题及其解决方案: #### 1. 索引偏移问题 在使用`for`循环遍历`List`并删除元素,如果按照正序遍历(从索引0开始),删除操作会导致后续元素向左移动,从而引发索引偏移问题[^1]。这可能导致部分元素被跳过或程序逻辑错误。 **解决方案**: - 使用倒序遍历。由于删除操作只会影响后续元素的索引,而不会影响当前及之前的元素,因此倒序遍历可以有效避免索引偏移问题[^2]。 - 示例代码如下: ```java for (int i = list.size() - 1; i >= 0; i--) { if ("b".equals(list.get(i))) { list.remove(i); } } ``` #### 2. `ConcurrentModificationException` 异常 直接在`for`循环或增强型`for`循环中修改集合内容(如删除元素)会导致`ConcurrentModificationException`异常。这是因为默认的迭代器不支持在遍历过程中对集合进行结构性修改[^3]。 **解决方案**: - 使用`Iterator`的`remove`方法。`Iterator`提供的`remove`方法可以在遍历过程中安全地删除元素,而不会抛出`ConcurrentModificationException`异常[^1]。 - 示例代码如下: ```java Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); if ("b".equals(element)) { iterator.remove(); } } ``` #### 3. Stream 流过滤 对于Java 8及以上版本,可以使用`Stream`流的`filter`方法来筛选需要保留的元素,并生成一个新的`List`。这种方法避免了直接修改原集合的风险,适合于不可变集合场景[^1]。 **解决方案**: - 示例代码如下: ```java list = list.stream() .filter(element -> !"b".equals(element)) .collect(Collectors.toList()); ``` #### 4. 不推荐的删除方式 直接在增强型`for`循环中调用`List`的`remove`方法是不推荐的做法,因为这会触发`ConcurrentModificationException`异常[^4]。此外,使用`List`的`remove(Object)`方法需要注意,它删除的是第一个匹配的对象,而不是指定索引位置的元素[^1]。 --- ### 总结 为了避免`List`删除元素的常见问题和陷阱,建议采用以下方法: - 倒序遍历以避免索引偏移问题[^2]。 - 使用`Iterator`的`remove`方法以避免`ConcurrentModificationException`异常。 - 使用`Stream`流的`filter`方法以实现更简洁、安全的过滤逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值