自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 记一次JVM线上CPU百分百和一次OOM问题

JSON序列化导致CPU 100%问题排查步骤1、jps 获取java进程pid2、top -Hp pid 获取 CPU占用最高的线程ID3、使用printf “%x” 线程ID 转为16进制4、jstack -l pid > jvm.dump 获取JVM快照5、vim jvm.dump 搜索 16禁止线程ID6、最后发现是redis缓存了一个比较重的接口,数据里比较大,导致那个接口并发较高的时候,把数据反序列回来会占用比较长的CPU解决办法在mongodb中建一个表,一次性把所有

2022-02-21 22:47:46 488

原创 ElasticSearch学习笔记

Elasticsearch简介ElasticSearch是什么?ElasticSearch简称ES,是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic技术栈的核心(Elastic技术栈包括ElasticSearch、Kibana、Beats和Logstach),它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别数据。全文搜索对于搜索引擎Google、Baidu等,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,在后台模糊匹配返回,对于关系

2021-06-19 16:30:02 227

原创 缓存一致性协议MESI

缓存一致性协议MESI由于内存的I\O速度远低于CPU的运算速度,为了解决这个问题充分发挥CPU的运算能力,在CPU内部增加了缓存。CPU缓存可以分为三个级别:L1,L2,L3。级别越小越接近CPU的计算速度,但是容量也越小,价格也越贵。L1缓存一般只有32K,L1缓存一般分为L1d Cache和L1i Cache,L1d是用来存放数据,而L1i则是用来存放指令的;L2缓存更大些,比如256K,速度相对L1慢些;L3缓存是缓存中最大的,量级以M算,同时也是最慢的一级,在同一个CPU插槽中的核共享一个L3缓

2020-11-16 21:25:19 208

原创 Java并发机制的底层实现原理学习笔记

Java并发机制的底层Java代码在编译后会变成字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的的并发机制依赖JVM的实现和CPU的指令。那么Java的并发机制的底层是什么呢?接下来向大家介绍一下?volatile的应用在多线程编程中,volatile和synchronized都扮演着重要的角色,volatile相对于synchronized是非常轻的,因为它不会引起线程的上下文切换。它保证了共享变量的“可见性”。可见性的意思是当一个程

2020-10-18 13:06:36 98

原创 使用生产者消费者模式和阻塞队列进行0到一千万的累加

import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.A

2020-10-17 19:57:37 83

原创 Java并发编程的挑战

首先什么是并发编程?并发编程是指在相同时间间隔内,多个事件按照一定的顺序进行。比如说你在吃饭的整个过程中,吃了米饭、吃了蔬菜、吃了牛肉。吃米饭、吃蔬菜、吃牛肉这三件事其实就是并发执行的。并发编程的目的是为了程序运行得更快,但是并不是启动更多的线程就能让程序最大限度地并发执行。在并发编程过程中,如果希望程序运行得更快,就会面临着非常多的挑战,比如上下文切换,死锁问题,以及受限于硬件和软件的资源问题,接下来对这几个问题进行详细的介绍。上下文切换问题在单核处理器中,CPU给每个线程分配CPU时间片来实现多

2020-10-17 14:59:15 69

原创 docker入门-个人docker学习笔记

docker简介docker是什么?问题:为什么会有docker的出现一款产品从开发到上线,需要重复地配置环境和部署,对于开发和运维都不得不面对版本的迭代环境的兼容等问题,而docker镜像的设计,使得我们得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。docker的设计理念docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用

2020-10-11 14:53:59 187

原创 生成器模式

生成器模式生成器模式(Builder Pattern)又叫创建者模式、建造者模式等等,使用生成器封装一个产品的构造过程,并允许按步骤构造。假设我们有一下场景:现在有一个主题公园,请你为他们制定一套度假计划:客人可以选择旅馆以及各种门票、餐厅订位,甚至也可以选择登记参加特殊的活动,首先你需要建立了像下面这样的结构:从上面可以看出每个假期都有很几天,其实主要专注一天的设计就足够了,其他的都是重复的工作。你需要一个有弹性的设计每个客人的度假计划都不太一样,例如天数、活动类型。比如,当地居民可以不需要

2020-07-13 11:39:12 440

原创 工厂模式

最近地摊经济大火,人人都想分一羹汤,但能赚到钱只是少数。程序员小C最近日子也不好过,所以也去买了小吃车,打算下班后去卖手抓饼和奶茶,为了减少成为韭菜的概率,小C打算发挥专业技能写一个小程序为大家提供点餐功能,这样大家可以在工位上在小程序上下单预定或者下单后就可以随便逛一下,稍后就可以领取到小C美味的小吃。已知小C打算出售橙汁、金桔柠檬、西瓜汁、百香果益力多、芒果益力多等等,后续还可能新增品种,首先小C为这些饮料都分别创建一个类Orange, Lemon, Watermelon, Thyme, Mango,

2020-06-15 14:18:12 174

原创 设计模式从入门到放弃

为什么要学习设计模式?1、提高软件的设计质量众所周知,良好的OO设计必须具备可维护、可扩充、可维护三个特性,然而仅仅掌握OO基础:抽象、继承、多态、封装,并不足以让我们设计出良好的系统,而合理地使用设计模式,可以帮助我们提高我们的设计质量。2、彼此沟通的共享词汇各行各业都有一些共享词汇来替代专业词汇来方便沟通和交流。比如,需要实现的一个方法来遍历数组、集合…交给你和老王去做,做完后你俩向主管汇报,你把步骤一步步罗列,讲得口水都干了,而隔壁的老王则直接说使用了“迭代器”模式来实现,简单明了,这时候老王

2020-06-11 20:47:56 204

原创 单例模式(Singleton Pattern)

单例模式:用来创建独一无二的对象,并提供一个全局访问点确保该类只能有一个实例。这有什么用处呢?有一些对象其实我们只需要一个,比如线程池、缓存、对话框、日志对象、充当打印机、显卡等设备的驱动程序对象。事情上,这些对象只能有一个实例,如果制作出多个实例,就会导致许多问题产生,例如:程序的行为异常、资源使用过量,或是不一致的结果。这时候有些同学就会问,要保证一个对象就能有一个实例,我们静态变量就能办到,何必那么麻烦呢?确实,很多时候我们只需要使用静态就能保证对象的唯一性。但是,如果有更好的做法何乐而不为呢

2020-06-11 20:42:24 125

原创 Linux系统管理-进程管理

Linux系统管理进程管理进程的概念进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程管理的作用按照优先级从高到低可以分为:判断服务器的健...

2019-12-26 22:27:03 89

原创 安卓的数据的保存与恢复

在很多场景下,我们需要对数据进行保存与恢复,下面假设Activity中有一个EditText输入框,id为tv2重写onSaveInstanceState和onRestoreInstanceState对数据进行保存与恢复重写onSaveInstanceState对数据进行保存@Override protected void onSaveInstanceState(Bundle ou...

2019-05-19 22:24:49 348 1

原创 安卓开发中活动的显、隐式启动

创建3个activity,分别为firstactivity,secondactivity1,secondactivity2,firstactivity中创建三个button,分别为退出,显式进入secondactivity1,隐式进入secondactivity2**firstactivity代码如下**package com.example.app1;import android.c...

2019-05-19 22:13:43 417

原创 RabbitMQ交换机模式

RabbitMQ四种交换机模式RabbitMQ包含四种不同的交换机类型,包括Direct exchange(直连交换机),Fanout exchage(交换机),Topic exchage(主题交换机),Headers exchange(头部交换机)。Direct exchage:直连交换机​ 直连交换机是一种带路由功能的交换机,一个队列通过与一个交换机绑定,当消息被发送时,需要指定一个ro...

2019-03-26 20:49:55 746

原创 十大排序算法

排序是最常见的数据结构之一,下面给出十大排序算法的Java实现详型时间空间效率可以参考此博客冒泡排序package search;import java.util.Arrays;public class bubbleSort { public static void main(String[] args) { int[] arr={2,6,8,9,4,55,...

2019-03-18 20:35:05 81

原创 Spring Security官方文档学习

核心组件1)SecurityContextHolderspring security最基本的类SecurityContextHolder这里存储应用程序当前安全上下文的详细信息,其中包括当前使用的主体的详细信息,它使用ThreadLocal来存储这些信息,这意味着安全上下文对于整个线程的所有方法来讲都可用的,但是这不是对所有的应用来讲都是适用的,因为有些应用会要求所有的线程使用同一个上下文对象...

2019-02-24 13:04:17 1856 1

原创 文件管理

操作系统简单复习——文件管理文件管理的主要任务是对用户文件和文件系统进行管理以方便用户使用,并保证文件的安全性。为此,文件管理应该具有对问价存储空间的管理,目录管理,文件的读写管理以及文件的共享与保护等功能。文件存储空间的管理为每个文件分配必要的外存空间,提高外存的利用率,进而提高文件系统的存取速度。为此,系统中应设置相应的数据结构,用于记录文件存储空间的使用情况,以供分配速度空间时参...

2018-12-16 16:30:35 526

原创 浅谈Java中面向对象

什么是面向对象面向对象(Object Oriented)是java的一种编程思想,对象是把事物的具体特点抽象出来组合成的事物,举个例子: 张三有姓名,性别,身份证,年龄等等……同样李四也有姓名,性别,身份证,年龄……,那么我们就可以把人这个个体都有的具体特点抽出来组合成人这个对象,人这个对象姓名,性别,身份证,年龄等属性,每个个体都有这些特点,只在属性值上存在差别,比如的身份证都不同...

2018-08-29 15:24:55 198

原创 Java JDBC相关知识点(一)

使用JDBC连接mysql数据库JDBC简介: JDBC全称为JAVA Database Connectivity, 是Sun公司提供java数据库连接的规范.有了Sun公司提供的api我们在学习和开发过程中就可以很方便去调用这些接口方法,而不用自己另外去写应用程序去连接数据库 接下来简要地介绍一下java连接mysql的一般步骤连接步骤加载驱动,在加载驱动...

2018-08-05 15:17:03 531

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除