![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
工作问题
文章平均质量分 69
yxh13521338301
只分享干货的码农
展开
-
借鉴秒杀思想设计直播抽奖,将50QPS提升至4W
一、前言先谈谈秒杀的设计思路秒杀业务设计大致分为三块:前端、网关和后端。前端需要动静分离,可以采用第三方文件服务器获取静态资源,减轻CDN带宽压力,提升访问秒杀页面的用户体验。秒杀业务大致都是异步完成,所以需要前端轮训秒杀的请求结果。网关需要对请求进行限流(分布式锁)、保护或者IP黑白名单控制,防止单用户短时间多次请求。后端采用数据库的sql where 库存>0来防止库存超卖,为了减少数据库访问压力,也需要在redis中生成对应库存数量的令牌桶供请求获取(或者在redis记录库原创 2021-10-08 16:12:27 · 992 阅读 · 2 评论 -
MDC的注意事项
为了方便定位问题,相信很多猿友都干过这件事:使用过滤器拦截请求,然后生成一个请求ID(唯一标识,如UUID),并将其放入ThreadLocal中。然后在执行业务代码时,通过日志将核心的信息或参数输出,同时输出threadLocal中记录的请求ID。这样一来,本次请求出现异常后,我们可以根据请求id查询日志,读取请求的整个过程,从而快速从庞大的日志文件中获取我们感兴趣的信息。log4j提供了MDC,本质上也是使用ThreadLocal进行保存。而且使用的是InheritableT...原创 2021-01-27 15:54:46 · 1112 阅读 · 0 评论 -
mybatis的同参数名称的覆盖问题(foreach)
遇到个奇怪的问题。mapper.xml中是这么写的<if test="statusList != null"> AND STATUS IN <foreach collection="statusList" separator="," open="(" close=")" item="status" index="index"> #{status ,jdbcType=TINYINT} </foreach></if><if t.原创 2020-12-18 13:46:51 · 1062 阅读 · 0 评论 -
万恶503
遇到问题不可怕,可怕的是问题来源广泛,不知从何下手,相信从事研发的小伙伴都会感同身受。前段时间一直被503 service temporarily unavailable这个错误搞得焦头烂额,很多用户吐槽,操作页面不定时会弹出这个503的nginx错误,查询tomcat日志,没有异常信息,查询我们自己的nginx(注意:后面还有一个外部的nginx)日志,也未见异常。可是复现起来也有些难度,毕竟开发和测试环境都正常,只有生产环境不定时踩雷,为调试增加难度。昨夜加班处理时,为了排查到底是to.原创 2020-10-13 15:39:55 · 405 阅读 · 2 评论 -
实战解决生产环境OOM的问题
需要先来一波小小的吐槽,OOM真特么坑爹啊!!!各种原因都有可能导致OOM!!而且如果根据程序抛出的异常来定位问题,无异于大海捞针!!为了帮助大家避免弯路,分享一下自己处理OOM的过程和心得。怀着开机混底薪的轻松心疼走进办公室沏了一杯茶,打开CSDN浏览大家的佳作。突然钉钉中出现很多吐槽的声音,原来运营同事陆陆续续接到很多用户的投诉,反应系统卡慢甚至503问题。妈的,愉快的一天从接到BUG开始走向结束。远程连接服务器查询Tomcat日志,吃惊的发现出现大量OOM的异常信息,...原创 2020-09-02 17:27:01 · 771 阅读 · 0 评论 -
为什么对研发情有独钟
相信很多猿仔都和我一样,学到知识总想着在实际工作中快速用到,这样就算暴露处理错误,也方便我们加深对知识的理解。 不才,年初想着使用策略+模板方法的设计模式去重构我们项目中臃肿的代码,上去就是一通撸。经过自测之后,满意地露出了淫荡的笑容...然而,之后的工作时间中,总会有一些匪夷所思的数据出现,比如,短信接收者吐槽不是他的数据,为何他收到短信;再者,数据不一致等现象。 仔细检查代码,也没发现我这惊为天人的代码逻辑有何不妥之处,而且自己反复测试还是没有问题复现,故想着莫非用户...原创 2020-07-28 16:19:10 · 680 阅读 · 0 评论 -
如何防止XSS攻击
源于蚂蚁课堂的学习,点击这里查看(老余很给力)何为XSS攻击分类反射型请求参数中包含script等特殊的指令,随响应返回至视图,使得视图层执行了对应的脚本存储型参数中包含特殊的脚本,且被持久化(记录在数据库等地方),用户再去使用时,读取了这些文件,HTML解析后误以为是页面脚本,就会触发执行DOM输出点在 DOM 。XSS代码可能是<script src="https://xxx.js">,载入第三方的恶意脚本,这些恶...原创 2020-06-03 14:55:00 · 1011 阅读 · 0 评论 -
controller中使用了@Async不起作用
源于蚂蚁课堂的学习,点击这里查看(老余很给力)问题描述王德发?!本来想装逼使用@Async去提升代码执行效率,结果装逼失败,现在都脸疼,根本尼玛没生效啊。程序依旧是自上而下执行了,难受的一比,马哥!@Async底层原理@Async会使得当前controller类采用代理设计模式生成代理对象!!!你妹啊!!这当然会失效啊,代理模式中目标方法执行时,其方法体中调用本类其他方法,会使用this。而this指的就是目标对象,而非代理对象,所以,这时候还异步个毛啊!!都特么不走.原创 2020-05-20 15:45:31 · 4404 阅读 · 4 评论 -
多线程之间的通讯(仿真生产与消费)
源于蚂蚁课堂的学习,点击这里查看(老余很给力)java内存模型(jmm)java内存模型分为两大类型即,主内存和本地内存1.主内存 也就是主进程所占用的内存2.本地内存 线程中开辟的属于线程自己的内存,其中存放着全局变量的副本数据 也就是全局共享的数据实在主内存中的,线程中复制一份放入自己的本地内存,线程执行结束后将其变动刷新至主内存。 这也就是为什么多线程会有线程安全的问题所在。 多个线程同时做了修改,都去刷新主内存,会造成结果和实际不一致。原创 2020-05-15 14:10:39 · 942 阅读 · 3 评论 -
nginx压缩静态和页面缓存
源于蚂蚁课堂的学习,点击这里查看1.对静态资源进行压缩所谓静态压缩,就是对js和css做压缩,常见的做法是去掉空白和注释,使其尽可能轻量级。而nginx做的更绝,它通过字典的方式,约定了一些js和css的关键字,如(假设:将function变为一个字母a)。通过这种方式压缩静态资源,然后减少带宽的传输,然后通过约定渲染的时候按照字典对应的规则还原js,从而提升响应速度配置方...原创 2020-04-30 11:28:11 · 303 阅读 · 0 评论 -
zookeeper实现分布式锁的原理
源于蚂蚁课堂的学习,点击这里查看(老余很给力)所谓分布式锁,就是多个JVM之间可以共享的锁。众所周知,我们常见的锁(sync,lock,cas)都是基于同一JVM。在不同JVM中实现锁的共享,就需要一个全局的地方存储这把锁,zk和redis是主流解决这种问题的技术场景:分布式任务调度平台。多个节点同时触发定时任务,这样会导致重复执行。可使用分布式锁去解决这种问题仿真问题仿...原创 2020-05-07 13:04:02 · 490 阅读 · 0 评论 -
浅谈mysql中的那些琐
读锁和写锁一种对行为的抽象描述,主流数据库引擎都是select为读锁,update/delete/insert为写锁表锁顾名思义,锁住整张表的数据行锁锁住数据所在行。表锁和行锁对比:性能:表锁<行锁锁的速度:表锁>行锁(表数据越大,开销越大,需找到表中所在行的数据,进行锁定)共享锁查询数据时,会对其加锁,期间可以有其它的读操作进入。(即共享锁之间可以共存)排它锁写入操作时,对数据进行的加锁处理,期间不允许其它请求访...原创 2020-05-09 14:04:58 · 135 阅读 · 0 评论 -
tomcat8性能优化
源于蚂蚁课堂的学习,点击这里查看(老余很给力)其实springboot中通过内嵌tomcat的方式已对tomcat做了去除臃肿的操作,所以我们可以参照微服务的方式去优化tomcat1.若项目的视图没有使用JSP,可以将其去掉将conf/web.xml中关于jsp的配置删除,即如下: <servlet> <servlet-name>jsp</servlet-name> <servlet-class>o原创 2020-05-12 14:40:02 · 368 阅读 · 0 评论 -
LinkedList的增删一定比ArrayList快吗?
1.背景众所周知,arrayList底层是通过数组实现,当其超过容量时,会进行1.5的扩容,将原数组数据迁移至新数组中。而LinkedList底层为双向链表,其增加操作直接在尾部新增一个node节点即可。那么,在插入相同的数据情况下(集合默认长度都是0),到底谁更快呢?2.案例 public static void main(String[] args) {...原创 2020-04-29 10:52:10 · 1092 阅读 · 1 评论 -
网站跨域的解决方法
源于蚂蚁课堂的学习,点击这里查看(老余很给力)1.何为网站跨域当一个项目发送ajax请求至另一个项目时,会出现请求成功但拿不到响应的情况,这是浏览器默认的安全策略。保证同源。即:请求发起者和请求必须满足:同协议+同域名+同端口2.解决方法1.在每个请求对应的方法中手动设置响应头(繁琐,不推荐) // 设置允许跨域的域名,*表示允许所有 respons...原创 2020-04-20 14:13:27 · 299 阅读 · 3 评论 -
使用AOP去切入private,导致属性注入失败的问题
1.背景最近项目中使用了数据字典,在写订单模块时会经常在映射方法中将订单的类型和订单的状态放到request域或model域中。由于订单模块业务映射很多,一个个添加太麻烦,所以想到AOP来实现。2.问题描述自己写了一个AOP,访问时发现,有些映射访问错误,属性注入为空3.aop代码package com.chongdong.web.comm...原创 2019-11-04 14:00:25 · 3244 阅读 · 1 评论 -
插入mysql出现 Incorrect string value错误的解决方法
问题描述 这可真是个坑爹的问题,我的数据库使用的也是UTF-8,所以中文应该是没问题的,后发现用户传递了一个原创 2019-05-28 16:44:38 · 12261 阅读 · 4 评论 -
mysql存储过程空值赋值变量的问题
发现一个问题:mysql的存储过程,在赋值变量时,如果所赋值为空,则赋值失败,变量维持现状。比如:my_loop : LOOP IF(逻辑判断) TEHN leave my_loop; END IF; select id into my_id from user limit 1;END LOOP;假设第一次循环,查询my_id为1,则id被赋值为...原创 2019-09-03 16:06:29 · 2442 阅读 · 5 评论 -
ajax和js执行顺序问题
js和jQuery是Java开发不可或缺的一门技术,相信很多猿友一定遇到过这样的问题,在ajax之后写了一段js,但是执行脚本的时候,发现下方的JS在ajax执行前先执行了。如果是手写的ajax,那么xmlhttp_request.open("GET",URL,false); 这个类似的句子 请用false;如果是使用jQuery,则在ajax中加入async:false 注意加上这个...原创 2018-08-17 13:55:19 · 594 阅读 · 0 评论 -
上传文件时使用文件流遇到的坑
由于项目性质,做商品批量导入时,使用inputStream去获取文件流,通过POI解析为list集合,然后为了提高效率,使用异步线程池。但是在线程中获取不到list,尝试了几次,判断为,list通过文件流解析得到,本质还是属于文件流,如果使用异步线程的话,文件流就不会流入线程中,而是继续走主线程,所以在外面再定义一个集合list2,将流中的list的数据全部addAll即可。...原创 2019-03-08 16:07:57 · 907 阅读 · 0 评论 -
使用异步线程池ThreadPoolTaskExecutor进行并发处理批量操作
案例:用户在商品列表进行检索,结果集大约有100W商品,点击批量上架/下架。一、配置异步线程池1.springboot配置类ThreadPoolConfigpackage ***;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.ThreadPoolExecutor.C...原创 2019-05-16 11:01:38 · 13143 阅读 · 0 评论 -
内存溢出OutOfMemoryError
这是一个老生常谈的问题,至于这种异常产生的原因无外乎几种:JVM内存设置太小、内存泄漏、死循环和无限递归等。一、常见问题类型的原因及解决方法1. tomcat:java.lang.OutOfMemoryError: PermGen space问题类型: PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要...原创 2019-05-20 10:39:54 · 243 阅读 · 0 评论 -
循环之后将数据放入刚刚循环的对象中
实际场景,集合为商品订单集合,一个订单有多个商品,现在要做导出,商品有一个属性为订单总金额,如何得到这个订单总金额,并将其放入商品中?//订单集合List<Order> orderList = new ArrayList<Order>();//导出的列的keyString[] keys = {"name","price","orderPrice"};//导出的...原创 2018-06-06 10:54:08 · 1073 阅读 · 0 评论 -
Java发送邮件附件名称乱码问题
MimeUtility.encodeText(name)使用这个方法对附件名称进行转码即可原创 2019-04-01 15:17:08 · 1130 阅读 · 0 评论 -
MySQL报错:Data too long for column
异常信息如下:nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'xxx' at row此原因是字段的最大容量小于实际数据的容量导致,但我字段选取的是text,本以为可不限长度,谁知都是假象。原来text类型也是有长度的。TINYTEXT...原创 2019-03-29 10:02:01 · 9212 阅读 · 1 评论 -
使用rpm安装出现error: Failed dependencies的解决方法
在安装包后面加两个参数--nodeps --force如:rpm -Uvh erlang-solutions-1.0-1.noarch.rpm --nodeps --force其作用为不再分析包之间的依赖关系而直接安装原创 2019-03-18 14:51:20 · 13175 阅读 · 0 评论 -
json序列化导致无限递归的问题
描述遇到个比较奇葩的问题,在序列化一个实体类时,总是报无限递归导致堆溢出的错误,核查后发现,原来我这个实体里面有一个Method的熟悉,而Method中有一个自己的实体属性Method root,所以导致序列化的时候不停地递归,最后堆溢出。总结序列化无限递归,往往是因为对象里面有其他引用类型的属性包含自己或者属性本身...原创 2019-03-15 15:16:46 · 2238 阅读 · 1 评论 -
JS获取input 【type=“file“】的物理路径,解决浏览器C:\fakepath\的问题
相信很多猿友一定遇到过上传文件时,发现文件路径被替换为C:\fakepath\****这是由于浏览器的安全机制,input file的路径时被fakepath代替,隐藏了真实物理路径。解决方法:1、调整浏览器的浏览器安全设置(不推荐,也不合理)。2、使用window.URL.createObjectURL()/** * 文件预览 */var url = null...原创 2019-01-17 13:15:30 · 32187 阅读 · 13 评论 -
spring定时任务执行两次问题
在项目中,需要把所有子工程的定时任务都抽取出来,作为一个新的工程,解耦合。所有的步骤都是结束后,却发现一个问题,定时任务在一个时间点重复执行两次。问题来源:DispatherServlet和ContextLoaderListener重复加载spring的核心配置文件,而spring的核心配置文件中包含了定时任务的相关配置,导致定时任务重复执行两次。解决方法:1.去掉Dispat...原创 2019-01-07 17:18:01 · 775 阅读 · 0 评论 -
git pull出现REMOTE HOST IDENTIFICATION HAS CHANGED的解决方法
今天git远程仓库迁移更新,本地使用git pull去更新代码时出现大致意思是远程连接仓库已经修改解决方法:找到图中路径下这个文件,删除再git pull即可...原创 2018-12-26 16:34:01 · 2653 阅读 · 0 评论 -
静态资源字体跨域访问出现Access-Control-Allow-Origin的解决方案
网页出现大概的意思是字体在跨域访问时出现问题,我的字体等静态资源是用nginx做动静分离,所以程序访问时,出现跨域访问。解决方法:在nginx的启动配置文件nginx.conf中加入add_header Access-Control-Allow-Origin *;即可。参考如下: server { listen 81; ...原创 2018-11-08 15:22:11 · 3442 阅读 · 0 评论 -
Mysql使用Double类型报错Out of range value的解决
# mysql版本:5.6.24select version();# 创建一个带double类型字段的表CREATE TABLE double_test ( id VARCHAR(32) PRIMARY KEY, score DOUBLE(5, 2))# 录入一个3位整数部分、2位小数部分,一共5个数字的数INSERT INTO double_test VALUE (r...转载 2018-10-29 12:58:45 · 2992 阅读 · 3 评论 -
Velocity与jQuery的$发生冲突解决办法
开发中视图层引入jquery很平常的场景,今天使用jquery的ajax在velocity中调用,出现视图错误,经查询,发现jQuery 的$与velocity视图技术有冲突,为此,解决方法有三种:1、使用jQuery代替$。 如:jQuery.ajax(); 缺点:不适合扩展,一旦替换成第三方库时,那就麻烦大发2、使用jQuery.noConflict。 如:var ...转载 2018-10-26 11:28:19 · 1092 阅读 · 0 评论 -
pagehelper不调用startpage依旧执行分页问题处理
问题描述在执行mapper查询时,没有开启分页,但是查询结果偏偏出现了分页原因pagehepler在开启分页(即执行startpage方法)查询后,需要mybatis中mapper的接口进行消费,且只消费一次,即如果需要多条查询都使用分页,则需要在每个执行mapper前加上startpage的方法调用。pagehelper开启分页的方式有多种:其中如果mapper查询的参...原创 2018-10-22 14:02:52 · 3030 阅读 · 2 评论 -
mysql5.7版本sql_mode=only_full_group_by问题完美解决
今天升级mysql数据库至5.7版本,启动程序发现好多功能出现sql_mode=only_full_group_by的问题,几经波折,终于完美解决问题,特作总结。首先查看数据库的sql_mode:select @@global.sql_mode结果为:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_D...原创 2018-10-17 14:11:32 · 5023 阅读 · 0 评论 -
mybatis批量操作出现BadSqlGrammarException
用过mybatis的猿友也许使用过它的批量操作(可以参考菜鸟程序猿之mybatis的批量操作),但是其实这个地方有个比较坑爹的问题,如下:这里为我的映射文件对应的sql <update id="testBatchUpd" parameterType="java.util.Map"> <foreach collection="dmsProdSkuStocks" ite...原创 2018-08-21 16:31:26 · 7265 阅读 · 1 评论 -
eclipse工程出现错误
相信很多猿友都遇到过这样的问题:打开eclipse,发现里面的工程都出现错误,如下:这样阻止了我们的开发,解决方法为,选择所有错误的工程, 右击,在弹出的列表选择Close project,然后重启eclipse,将之前close 的工程选择,右击,在弹出的列表选择Open project,等右下角进程执行完,就会发现,问题顺利解决了!...原创 2018-08-16 10:06:48 · 269 阅读 · 3 评论 -
解决eclipse出现空白符号的问题
今天在打开eclipse工作时,发现代码前都加入了空白符号:这样编写代码感觉很别扭。解决方法:Window --> Preferences --> General --> Editors --> Text Editors,去掉其中的Show whitespace character对钩即可:这样 代码就没有特殊空白符号了:...原创 2018-08-14 12:48:24 · 713 阅读 · 0 评论 -
Java反序列化问题
今天在实际开发中遇到一个异常com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException大概的问题意思就是Java对象在反序列化时有属性缺少。我们项目的架构是前端使用SpringMVC+Spring+jdbcTemplate,服务是SpringCloud+Mybatis。通常在前台调用服务的时候会将对象进行jso...原创 2018-07-30 19:26:31 · 324 阅读 · 0 评论 -
tomcat启动日志乱码
修改tomcat/conf/logging.properties文件中UTF-8为GBKjava.util.logging.ConsoleHandler.encoding = GBK原创 2019-04-09 10:57:35 · 101 阅读 · 0 评论