搜索
您的当前位置:首页正文

工作上碰到的问题

来源:星星旅游
  1. 场景: Redis 缓存hash,取数据报 java.lang.UnsupportedOperationException: null
    因为序列化的原因导致的,默认二进制, 我把mybatisplus的IPage对象放入缓存, 取的时候序列化失败, 最后把redis存储格式改成了JSON

方案:

  1. redis:
    serializertype: json
  2. 在存入缓存之前先用JSON 转一下,取出来在转回来
  1. 场景: 使用mybatisplus 遇到的坑, 由于不想手动创建 控制层 服务层 数据层 使用了逆向工程
    生成代码, 代码使用mybatisplus的方法, 调用逆向工程生成的sql, 由于项目还没有上线,
    数据库冗余的字段由于业务变动不需要了, 删了字段导致一直找不到那个字段.

使用mybatisplus的方法, 最好不要有不是自己写的sql, .one()执行会去找sql, 如果找到就会执行, 具体好像是因为resultMap结果集映射, 被删掉的字段没有被干掉造成的,时间有点久忘记了

  1. 场景:GROUP_CONCAT函数 通过这个函数返回的数据时好时坏, 导致数据不一致.

方案:
1.GROUP_CONCAT拼接最长是1024,可以通过命令修改GROUP_CONCAT默认长度
2.全部返回到业务层去拼接在当做参数传进去查询

  1. 场景: 登录前台系统没问题, 跳转到后台系统就报413

问题: 跳转到后台管理前端把 Cookie 又拼接了一次导致 Cookie太大 413请求的实体太大
解决:最好不要超过15行

  1. 问题:Error occurred during initialization of VM Could not reserve enough space for object heap

解决:内存不够导致项目启动不起来

  1. 问题: 公司搬场地以后, 微服务注册不上nacos ,找不到nacos
  1. 问题:接口加了缓存出现了数据不准确,总共59条数据,但是第一页只有3条数据

解决:
因为接口被多个地方调用,问题就在于首页也调用了,首页只需要3条数据,导致在去列表管理页面查看数据时,出现上述情况,用字段区分判断是否缓存或字段拼接缓存名称

  1. 问题: 定时任务报OOM (OutOfMemoryError)

方案: 在使用ArrayList的时候,尽量对其进行容量大小的初始化,避免其频繁扩容,造成OOM异常,线上出现该问题真的很恐怖。
ArrayList#add方法每次容量确定:size+1,而ArrayList#addAll每次是size+numNew(要插入的容量)。在ArrayList#add方法插入数据进行扩容时,每次都是扩容器为其1.5倍,并且扩容并不是那么频繁,需要达到临界点,而ArrayList#addAll不确定,需要依赖numNew大小。

  1. 需求: 编号规则:yyyyMMdd + 6位数 , 日期变化6位数从1开始, 订单编号再并发的情况下出现重复

1:加分布式锁,只有等上一个线程完成以后在查一次,保证不重复. 缺点:串行化,pqs上来以后响应慢,增加数据库压力.
2:分布式锁加自旋,把生成过的编号当作key来加锁,如果这个这个key被生成了,那么这把锁在一定的时间内不会被释放,通过自选往上加,直到拿到锁. 优势:响应快,通过自旋达到预生成编号.
缺点:key 要保存一段时间

因篇幅问题不能全部显示,请点此查看更多更全内容

Top