- 博客(84)
- 收藏
- 关注

原创 记一次排查线上生产cpu线程问题
记一次排查线上生产cpu线程问题问题发生排查步骤结果优化方法问题发生一天突然发现监控大屏cpu闲置率在80%左右,感觉不是很正常,现在需求不是很多,为什么cpu闲置率这么低,一般情况为95%以上,为了好奇开始了一次jvm线程的排查过程。排查步骤找出消耗cpu最高的pid ,第一种直接找到自己的项目名称,jps -l找到pid;第二种:top -c,如下图;找出某pid下线程资源信息,...
2019-08-04 16:19:27
378
原创 kafka线上问题整理和优化
一、前言博主现在负责触达平台的建设,众所周知,对于4000万客户的推送来说,高流量的推送会导致系统负载更高,所以就会使用大量的消息队列来缓冲请求,达到削峰;但是由于网络抖动或者流量高峰期间可能会存在一些报错,现在记录下来并作为分享。二、生产者问题整理问题一:生产者写入超时现象:org.apache.kafka.common.errors.TimeoutException: Expiring 59 record(s) for mkt_push_statistics_filter-7: 3
2021-05-14 18:25:29
1414
原创 开发中你不知道的技巧
1.代表"false",Boolean.FALSE.toString()2.查询数组中是否有一个name值一样,boolean hasMethod = Arrays.stream(interfaceClass.getMethods()).anyMatch(method -> method.getName().equals(methodName));3.spring初始化bean执行的方法优先:通过实现 InitializingBean/DisposableBean 接口来定..
2021-04-29 15:20:24
349
原创 消息队列总结(面试)
一、为什么要使用mq 优点 异步:并行处理提高系统吞吐量(推送路由和渠道服务之间) 削峰:系统流量高峰期间,减少对服务器的额压力(推送路由和渠道服务之间) 解耦:系统之间通过消息通信,发送者不依赖消费者;(推送路由和渠道服务之间) 2.缺点 系统可用性降低,mq挂掉,要考虑服务可用性 系统复杂度提高,接入组件维护麻烦等 数据一致性问题,调用ab两个接口,使用mq后其中一个失败无法感知 二、技术选型1、rabbitmq...
2021-04-27 21:05:01
266
原创 es学习笔记
一、es基本知识和关系型数据库关系:es中的index对应数据库es中的type对应表(7.0版本以后废除)es中的mapping对应表结构es中的document对应表行记录es中的columns对应表字段二、es核心优势横向可扩展性:只需要增加台服务器,做一点儿配置,启动一下Elasticsearch就可以并入集群。分片机制提供更好的分布性:同一个索引分成多个分片(sharding), 这点类似于HDFS的块机制;分而治之的方式可提升处理效率。高可用:提供复.
2021-04-25 20:38:59
362
原创 Netty入门
Netty 是什么?Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活。Netty 的特点是什么?高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开发的网络通信框架,对比于 BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。传输快:Netty 的传输依赖于零拷贝特性,尽量减少不必要的内存拷贝,实现了更高效率的传输。
2021-04-24 16:23:50
135
原创 Redis学习笔记
一、优势和缺点优点:单线程性能高和抗并发缺点:1.缓存和数据库db双写一致性问题2.缓存击穿3.缓存雪崩4.缓存并发竞争问题二、为什么会这么快1、纯内存操作:内存相对于磁盘有天然的性能优势, 类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);2、单线程:避免过多的上下文切换开销;避免同步机制的开销(死锁,锁粒度等问题);简单可维护(作者代码间接性理念);3、I/O多路复用:基于epoll/select/kqueue等I/O多路复用技术,
2021-04-24 11:47:58
109
原创 本地缓存caffeine使用方式
使用方式:一、导入包<dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>2.8.6</version></dependency>二、增加配置类@Configurationpublic class Loca...
2021-04-24 11:46:56
415
原创 redis应用场景记录
应用场景 计数器 1、value为set数据结构时可以做全局去重1、分布式锁 setnx expire2、延迟队列/排行榜 数据类型使用soredset,时间戳作为score,消息内容作为key调用zadd来生产消息,消费者用zrangebyscore指令获取N秒之前的数据轮询进行处理。@Service("distributeDelayedQueueServiceRenaultImpl")public class DistributeDelayedQueueServiceRe.
2021-04-24 11:45:53
107
原创 redis性能优化
前言从资源使用角度来看,redis优化可以包含的知识点如下: CPU 相关:使用复杂度过高命令、数据的持久化,都与耗费过多的 CPU 资源有关 内存相关:bigkey 内存的申请和释放、数据过期、数据淘汰、碎片整理、内存大页、内存写时复制都与内存息息相关 磁盘相关:数据持久化、AOF 刷盘策略,也会受到磁盘的影响 网络相关:短连接、实例流量过载、网络流量过载,也会降低 Redis 性能 计算机系统:CPU 结构、内存分配,都属于最基础的计算机系统知识
2021-04-24 11:44:57
332
原创 redis线上问题记录
一、大key延迟队列采取zset集合来做延迟推送能力,十个业务节点,建了十个keykey:DELAYED_MESSAGE_ZSET + new Random().nextInt(delayMessageZone)上线之后出现慢查询和缓存使用完毕 zcard命令查询每个key下有1588600条数据(双十一) 高峰期间,慢查询一天也会有几百条 十个key路由到redis集群中的其中四台,导致四台内存使用完毕,导致内存失效 扩展性不好,增加一台机器需要修改代码
2021-04-24 11:36:13
214
原创 redis三大问题 终极解决方案
缓存失效背景:通过key查询值,先查询缓存是否存在,如果存在返回,不存在查询数据库,然后更新缓存并返回,如果数据库不存在返回null例如:订单号是从1自增开始,如果黑客或者其他服务传参为-1或者很大的参数缓存穿透(db和缓存都没有)问题:当key为一个不符合业务场景的值,缓存和数据库都不存在,外部侵入者就可以一直请求,导致数据库和缓存压力大解决:1、业务判断,key值大小校验,不能为空或者大于0小于10000之类的;2、缓存和数据库查询不出来时,设置key-value为null,设置超时时间
2021-04-24 11:31:49
482
原创 Redis学习笔记
一、优势和缺点优点:单线程性能高和抗并发缺点:1.缓存和数据库db双写一致性问题2.缓存击穿3.缓存雪崩4.缓存并发竞争问题二、为什么会这么快1、纯内存操作:内存相对于磁盘有天然的性能优势, 类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);2、单线程:避免过多的上下文切换开销;避免同步机制的开销(死锁,锁粒度等问题);简单可维护(作者代码间接性理念);3、I/O多路复用:基于epoll/select/kqueue等I/O多路复用技术,
2021-04-24 11:06:19
1821
5
原创 Lombok @data 字段解析为空
今天碰到一个问题,使用lombook中的@Data注解类生成getset方法,但是传参和参数是一样的,但就是获取不到@Datapublic class BuyingProductInfo { @NotBlank(message = "商品ID不能为空") @ApiModelProperty(value = "商品ID") private String pId; @NotNull @ApiModelProperty(value = "购买数目")
2021-03-16 19:38:29
2034
原创 Java线程池实现原理和使用
一、基本概念1.1解决的问题线程池本质解决的问题是线程生命周期开销和资源不足问题,在大流量和高并发情况下,系统不确定在任意时刻有多少线程需要执行,需要多少资源需要投入,不合理的使用和管理,会带来以下若干问题:无限创建线程,导致系统资源耗尽; 频繁的创建、销毁线程对cpu系统的消耗更大,系统性能降低; 系统稳定性无法保障低,因为无法管理线程资源分布;1.2如何解决线程池采用“池化(Pooling)”思想,将线程资源统一在一起管理,通过构建一个生产者消费者模型,将实际执行的线程和提交的任务
2021-02-04 15:30:35
343
原创 ConcurrentMap原理详解
ConcurrentMap原理详解jdk1.8数据结构数组+链表+红黑树Node<K,V>{}static class Node<K,V> implements Entry<K,V> {final int hash;final K key;volatile V val;volatile Node<K,V> next;如何线程安全数组桶值设置和更新使用CAS算法tabAt(Node<K,V>[] tab, i
2021-01-26 15:36:03
924
原创 史上最全GC原理
史上最全GC原理什么是垃圾定义释放已占用的内存,防止内存泄露清除已经死亡或者长时间未使用的对象内存语言特性c++手动回收垃圾忘记回收回收多次java 自动回收如何定位垃圾引用计数法对象头中分配一片空间用于存储对象引用次数程序执行过程中完成,非STW注意:Recycler 算法可解决循环引用,但在多线程环境下,引用计数变更也要进行昂贵的同步操作,性能较低,早期的编程语言会采用此算法根可达性分析算法GC Root虚拟机栈中引用的对象public
2021-01-26 15:23:21
533
原创 vue+springboot解决跨域
跨域请求:顾名思义客户端请求不一样的域名会出现跨域失败; 解决办法: 第一:前端解决点击参考 一:index.js下配置 proxyTable: { '/': { target: 'http://localhost:8088/', changeOrigin: true, pathRewrite: { '^...
2018-09-05 14:02:50
828
原创 Xshell6 免费版下载安装体验
Xshell6下载地址注意不要下载xshell5,需要更新,更新会出现网络异常问题。1.下载地址:http://www.netsarang.com/download/software.html进入产品列表,选择Xshell6点击Download。 2.填写一下基本信息,选择License Type中的用于(home and school use)家庭与学校即可免注册码使用,填写邮箱然后提...
2018-09-05 10:28:43
1301
原创 Dubbo消费者启动报错
报错如下:172.16.238.68是我的本机ip [DUBBO] Failed to start NettyClient TS20160418002/172.16.234.102 connect to the server /172.16.238.68:20880 (check == false, ignore and retry later!), cause: client(url:dubb...
2018-07-18 11:09:17
3173
原创 java线程池的原理
前天去面试,一问三不知,然后回来赶紧恶补下,发现线程池没有想象中那么难,今天通过阅读优秀的博客对线程池大概坐下总结。 大神博客:https://blog.youkuaiyun.com/he90227/article/details/52576452实现架构顶层:接口Executor,默认只有一个executor方法,void 第二层接口:ExecutorService继承Executor接口,定义一些执行线
2018-04-20 11:11:44
174
原创 MySQL常用引擎
满怀对mysql数据库研究的热情,继续走向引擎。引擎是啥引擎可以理解为汽车的发动机,可以理解为人的性格,对于数据库: 数据库存储引擎: 是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎,...
2018-03-07 21:43:24
264
原创 ngrok研究
有什么用比如在本地电脑开发一个应用或者在公司电脑里,但是当老板要在外网情况下看你的作品,你就得先去找一台能够外网访问的服务器,然后部署的应用,但是这样有点太麻烦额,我就想给别人展示下我的作品; 再比如,在本地电脑开发了微信的接口,需要测试,就得先部署这个项目还是麻烦,ogrok就可以解决作用快速,有面,测试如何使用三种方式,推荐使用小米球(快,安全,简单,不用翻墙)first:必须翻墙,在老外官
2018-01-28 21:17:36
778
原创 java activeMQ的应用
参考文章:rabbitMq和activeMQ的区别 JMS使用ActiveMQ实现Queue和Topic两种模式概念JMS,即java message service,java消息服务,是J2EE规范的一部分,跟jdbc差不多,sun只提供了接口,由各个厂商(provider)来进行具体的实现,然后使用者使用他们的jar包进行开发使用即可。传递方式Queue,点对点
2018-01-27 15:02:00
427
原创 部署tomcat
项目中使用到部署war包到外网环境中: 有以下三种方式:直接将war包复制到webapp文件下,解析直接localhost:8080/(war包名),如果想修改则修改server.xml里的host标签增加以下内容 相当于在host服务下,增加一个应用"/ssm" docBase="/OpinionMonitor.war" debug="0" privileged="true"
2018-01-25 11:03:01
212
原创 mongodb之java基本操作
mongodb由于其存储大量数据,支持高并发,弱事务的特性,受到很多程序人的喜欢。对于java来说需要下载java-mongo的驱动包,类似mysql驱动包,里面包含java操作mongo的工具类。驱动包版本为3.0以下的使用DBCollection。。。 驱动包版本为3.0以上的使用MongoCollection Document。。。本人习惯使用3.0版本以下的,如下:DBCollection
2018-01-23 10:39:19
1671
原创 MongoDB之aggregate聚合函数应用
万事看文档切记详见大牛博客:详见 优秀博客:详见前言公司最近在使用MongoDB作为数据库存储,学习应用了MongoDB的使用。作为非关系性数据库的代表,主要是以文档格式存储的数据库,灵活的字段,收到很多开发人员的喜欢。 本人在使用了一天的MongoDB后感觉确实很方便,程序中不用再去定义实体bean,字段灵活,可多可少。适合需要存储大量数,高并发,弱事务的互联网应用开发,开发
2018-01-22 21:06:15
662
原创 java之微信开发回复图片消息
微信开发文档见:详见 具体实现见:详见public class WxController { public static final Logger LOGGER= LoggerFactory.getLogger(WxController.class); //type传image public static String upload(String acce
2018-01-20 15:08:37
1413
原创 mongodb之导入collection
公司在使用mongodb数据库,相对比较方便,今天需要实现使用RobotMongodb数据库工具,进行导入导入步骤:登陆到你的mongodb服务器,我们在liunx上安装所以需要,ssh连接到该服务器上第二步:将文件导入服务器指定目录下;第三步:进入mongo安装的位置,执行命令:cd mongodb-linux-x86_64-amazon-3.4.4/第四步:进入bin目录,执行命令:cd
2018-01-19 18:50:48
1360
1
原创 idea搭建ssm项目,基于maven
网上很多,详细见:http://blog.youkuaiyun.com/w8897282/article/details/71173211 这里记录自己遇到的问题, 搭建项目不是最重要的,要理解背后的原理和核心配置 主要是:扫描controller包,dao包,service包和jdbc配置(主要各个数据库的驱动配置是不一样的,mysql是com.mysql.driver,pg是org.postgre
2018-01-19 18:32:26
812
原创 maven代理配置
主要参考 网友配置:http://blog.youkuaiyun.com/zhen_6137/article/details/53082152, maven官网网址:http://maven.apache.org/guides/mini/guide-proxies.html首先需要maven下载需要外网访问,保证自己电脑可以外网访问,本公司虽然不能外网访问,但是可以通过代理可以设置。路径:goo
2018-01-16 18:17:21
768
1
原创 设计模式之策略模式
引言今天公司使用了策略模式解决不同角色用户操作不一样,如果新建几个不同的类写不同的方法或者一个类中有好几个方法,这都是硬编码,所以有一种设计模式是策略模式,例如针对一个排序算法有不同的策略实现。 即定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换,使得算法可独立于使用它的客户而变化,这样的模式是策略模式。优点可以动态的更改策略实现的和调用策略缺点调用者必须知道所有的策略策略模
2017-12-25 16:40:47
181
原创 GC垃圾回收算法总结
闲着没事总结下java虚拟机的垃圾回收算法。哪些对象会被回收两种方式:第一种:引用计数法:只要一个对象被引用,计数就+1,释放引用,就-1,但是无法解决两个对象互相引用的问题第二种:对象可达状态分析 主要包括:虚拟机栈中引用的对象。方法区中类静态属性实体引用的对象。方法区中常量引用的对象。大多数是final修饰的本地方法栈中JNI引用的对象。回收理论算法复制算法:将堆内存分成两个区域
2017-12-21 14:29:39
320
原创 架构师之路---数据库水平切分实践
本人一应届生,在去实习的地铁上,看了一篇沈剑老师写数据库水平切分架构思路,看完人清气爽。现在写一篇博客记录下。引言:涉及到数据库水平切分问题,主要有以下两种问题: 第一:项目开始之前进行数据库架构设计,考核,规划以后数据库量大的情况有很好的扩展性; 第二:当项目用户量持续增大时,数据库压力过大,相应速度降低,用户体验度降低,这时可以通过优化数据库来解决,即水平切分数据库。本文以用户登陆为例,来讨
2017-12-20 11:34:06
443
原创 网络基础知识
休假一天好好学习了网络协议基础。第一点:分层协议数据分层主要是为了抽象,不管分几层都是可以的,精确来分可以分为以下四层: 1.应用层:主要是规定应用程序的数据格式,主要协议有http协议 http协议数据主要包括请求头,请求体,空行,请求数据 2.传输层:主要是将应用层封装的http请求包嵌入传输层,传输给下一层,传输层主要分为tcp协议和udp协议区别:udp只需
2017-12-19 14:24:44
201
原创 工具类之json处理
项目遇到将json数组转化为集合list或者map,使用的是阿里的fastjson包,主要方法主要体现在: - json数组转化为list<Map<String,Object>>public static List<Map<String, Object>> fromJsonArrayToList(JSONArray jsonArray){ List<Map<String, Obj
2017-12-13 15:54:19
387
原创 MD5加密类实现
项目中用到对用户名密码进行md5加密,代码如下,可以灵活配置算法用例 总结下工具类EncryptUtil。public class EncryptUtil { /** * 获取MD5加密后的字符串 * * @param pw * @return */ public static String stringMD5(String pw)
2017-12-12 14:13:00
279
原创 dos命令行总结
命令行是考验开发人员的基本功 今天公司电脑需要安装一个软件,但是公司共享盘上没有相关安装文件,只有一个命令脚本,表示在本地d盘下新建app目录,然后赋予该文件夹下所有人可以访问,然后执行共享盘下的安装文件。md D:\appcacls D:\app /t /e /c /g everyone:f\\risfileserver\app\IT_APP\Oracle\Oracle_11gR2_cli
2017-12-04 14:00:55
222
原创 spring整合JNDI和Tomcat
概念:JNDI:java name description interface java命名与目录接口,是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称 访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。配置:tomcat配置jndi有全局配置和局部配置全局配置:(推荐:可以适用于其他项目)第一步:在tomcat安装目录下c
2017-11-30 15:59:35
447
原创 Eclipse项目导入idea中
不同:IntelliJ系中的Project相当于Eclipse系中的workspace。 IntelliJ系中的Module相当于Eclipse系中的Project。 IntelliJ中一个Project可以包括多个Module Eclipse中一个Workspace可以包括多个ProjectEclipse项目导入IDE中:web项目见:http://blog.youkuaiyun.com/github_
2017-11-30 15:31:05
1042
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人