工具类
文章平均质量分 59
柳岸花开
同名公众号
展开
-
你遇到过缓存雪崩、缓存穿透、缓存击穿么
缓存雪崩对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机。缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了。此时,如果没有采用什么特别的方案来处理这个故障,重启数据库,但是数据库立马又被新的流量给打死了。缓存雪崩的事前事中事后的解决方案如下:事前:Redis 高可用,主从+哨兵,Redis cluster,避免全盘崩溃。事中:本地 ehcache 缓存 + hystri原创 2021-07-14 21:17:44 · 199 阅读 · 1 评论 -
为什么要用缓存
用缓存,主要有两个用途:高性能、高并发。高性能一个请求过来,操作 mysql,查出一个结果,耗时 600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。600ms 查出来的结果,放缓存里,一个 key 对应一个 value,下次再查,直接从缓存里,通过一个 key 查出来一个 value,2ms。性能提升 300 倍。就是说对于一些需要复杂操作耗时查出来的结果,且确定后面不怎么变化,但是有很多读请求,那么直接将查询出来的结果放在缓存中,后面直接读缓存就好。高并发原创 2021-07-01 20:56:07 · 464 阅读 · 0 评论 -
并发容器的使用:识别不同场景下最优容器
并发容器的使用:识别不同场景下最优容器并发场景下的 Map 容器假设我们现在要给一个电商系统设计一个简单的统计商品销量 TOP 10 的功能。常规情况下,我们是用一个哈希表来存储商品和销量键值对,然后使用排序获得销量前十的商品。在这里,哈希表是实现该功能的关键。那么请思考一下,如果要你设计这个功能,你会使用哪个容器呢?切忌在并发场景下使用 HashMap。因为在 JDK1.7 之前,在并发场景下使用 HashMap 会出现死循环,从而导致 CPU 使用率居高不下,而扩容是导致死循环的主要原因。虽然 J原创 2021-06-22 23:50:44 · 129 阅读 · 0 评论 -
如何保证消息队列的高可用?
如何保证消息队列的高可用?RabbitMQ 的高可用性RabbitMQ 是比较有代表性的,因为是基于主从(非分布式)做高可用性的。RabbitMQ 有2种模式:普通集群模式、镜像集群模式。普通集群模式普通集群模式,意思就是在多台机器上启动多个 RabbitMQ 实例,每个机器启动一个。你创建的 queue,只会放在一个 RabbitMQ 实例上,但是每个实例都同步 queue 的元数据(元数据可以认为是 queue 的一些配置信息,通过元数据,可以找到 queue 所在实例)。消费的时候,实际上如原创 2021-04-08 22:29:15 · 76 阅读 · 0 评论 -
为什么使用消息队列
为什么使用消息队列消息队列的使用场景比较核心的有 3 个:解耦、异步、削峰。解耦A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统跟其它的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。A 系统要时时刻刻考虑 BCDE 四个系统如果挂了该咋办?要不要重发,要不要把消息存起来?如果使用 MQ,A 系统产生一条数据,发送到 MQ 里面去,哪个系统需要数据自己去 MQ 里面消费原创 2021-04-07 22:29:23 · 81 阅读 · 0 评论 -
一个 Split() 方法为什么会影响到 TPS
一个 Split() 方法为什么会影响到 TPS正则表达式是计算机科学的一个概念,很多语言都实现了它。正则表达式使用一些特定的元字符来检索、匹配以及替换符合规则的字符串。构造正则表达式语法的元字符,由普通字符、标准字符、限定字符(量词)、定位字符(边界字符)组成。正则表达式引擎正则表达式是一个用正则符号写出的公式,程序对这个公式进行语法分析,建立一个语法分析树,再根据这个分析树结合正则表达式的引擎生成执行程序(这个执行程序我们把它称作状态机,也叫状态自动机),用于字符匹配。而这里的正则表达式原创 2021-04-06 22:09:07 · 197 阅读 · 0 评论 -
Stream如何提高遍历集合效率?
什么是 Stream?现在很多大数据量系统中都存在分表分库的情况。例如,电商系统中的订单表,常常使用用户 ID 的 Hash 值来实现分表分库,这样是为了减少单个表的数据量,优化用户查询订单的速度。但在后台管理员审核订单时,他们需要将各个数据源的数据查询到应用层之后进行合并操作。例如,当我们需要查询出过滤条件下的所有订单,并按照订单的某个条件进行排序,单个数据源查询出来的数据是可以按照某个条件进行排序的,但多个数据源查询出来已经排序好的数据,并不代表合并后是正确的排序,所以我们需要在应用层.原创 2021-04-04 23:36:46 · 515 阅读 · 0 评论 -
Arthas 线上环境调试 打印方法输入输出
Arthas 线上环境调试 打印方法输入输出Arthascurl -L https://arthas.aliyun.com/install.sh | shvi as.sh 设置JAVA_HOME查看进程:jps启动:./as.sh 进程号watch -b com.tianan.v2x.axtagent.web.controller.api.MessagePushController rss ‘“params[0]=”+params[0]’watch -b com.tianan.v2x.a原创 2021-03-30 16:10:08 · 1749 阅读 · 0 评论 -
ArrayList 和 LinkedList测试
ArrayList 和 LinkedList测试1.ArrayList 和 LinkedList 新增元素操作测试测试结果 (花费时间):通过这组测试,我们可以知道 LinkedList 添加元素的效率未必要高于 ArrayList。从集合头部位置新增元素从集合中间位置新增元素从集合尾部位置新增元素ArrayList>LinkedListArrayList<LinkedListArrayList<LinkedList由于 ArrayList 是数组实现的,而数组是一块连原创 2021-03-25 17:50:49 · 294 阅读 · 0 评论 -
看2021贺岁档电影
扫描关注公众号,回复 唐探3 免费看唐探3。我已经看了,还可以哦原创 2021-02-16 11:08:16 · 360 阅读 · 0 评论 -
红包封面支持自定义了
扫描二维码关注公众号 柳岸花开,回复 红包封面,获取自定义步骤原创 2021-02-05 13:13:53 · 152 阅读 · 0 评论 -
Android(Java):长时间未登录提醒
@Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); currentTime = System.currentTimeMillis(); } @Override protected void onResume() { // TOD原创 2013-08-16 14:37:20 · 1091 阅读 · 0 评论 -
Android(Java):md5加密
/** * md5编码 * @param input * @return result */ public static String md5HexDigest(String input,String salt){ MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("M原创 2013-08-16 15:19:21 · 809 阅读 · 0 评论 -
Android(Java): 获得设备唯一ID
/** * 获得设备唯一ID * @return */ public static String getDeviceUUID(Context context){ final String androidId = Secure.getString(context.getContentResolver(),Secure.ANDROID_ID); String原创 2013-08-16 15:24:08 · 1704 阅读 · 0 评论 -
Android(Java):切换3g提醒
@Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub notifySwitch3G(context); } public void notifySwitch3G(final Context context) { C原创 2013-08-16 15:14:19 · 684 阅读 · 0 评论 -
Android(Java):自定义对话框
一、继承DialogFragmentpublic class LoginDialogFragment extends DialogFragment二、重写onCreateDialog方法/** * * 覆写Fragment类的onCreateDialog方法,在FragmentDialog的show方法执行之后, * * 系统会调用这个回调方法。 */原创 2013-11-25 15:25:41 · 965 阅读 · 0 评论 -
Android(Java):视频播放
在main.xml布局文件添加用于视频画面绘制的SurfaceView控件:SurfaceViewandroid:layout_width="fill_parent"android:layout_height="240dip"android:id="@+id/surfaceView" />SurfaceViewsurfaceView = (SurfaceView)this.find原创 2013-11-25 16:09:31 · 1033 阅读 · 0 评论 -
Android(Java):多线程断点续传下载
使用多线程下载文件可以更快完成文件的下载,多线程下载文件之所以快,是因为其抢占的服务器资源多。如:假设服务器同时最多服务100个用户,在服务器中一条线程对应一个用户,100条线程在计算机中并非并发执行,而是由CPU划分时间片轮流执行,如果A应用使用了99条线程下载文件,那么相当于占用了99个用户的资源,假设一秒内CPU分配给每条线程的平均执行时间是10ms,A应用在服务器中一秒内就得到了990ms原创 2013-11-25 16:24:14 · 1072 阅读 · 0 评论 -
Android(Java):视频播放升级版——播放m3u8
直接上代码 http://schemas.android.com/apk/res/android" android:background="#FFFFFF" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_p原创 2014-01-06 18:00:30 · 4557 阅读 · 0 评论