自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 服务器端排查问题常见命令

top:查看资源信息ps -mp 30477 -o THREAD,tid,time 查询线程ID(tid)jstack pid | grep tid -A 30 : 显示该进程中的线程的堆栈情况netstat -ntu : 查看那些IP访问服务器lsof -i:31002 查看端口进程netstat -tunlp 查看udp与tcp访问信息netstat -lnp : 查询所有的监听端口...

2021-12-24 10:52:18 1606

原创 解析通用的响应状态码

400:坏的请求,例如错误的请求参数406:客户端无法解析浏览器的返回内容202: 接受但并未处理(异步请求)

2021-09-08 17:09:24 229

原创 Redis的lru算法

LRU:least Recently Used的缩写,最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的数据予以淘汰。

2021-06-02 15:08:36 238

原创 Redis的相关问题

redis只存热点高频的数据1.生产上Redis的内存设置为多少(在conf文件夹里面进行配置)maxmemory 决定redis的默认配置(它的单位为:字节类型)默认的redis内存大小:在64位的操作系统下是不限制内存大小,如果是32位操作系统最大内存为3GB生产推荐是占物理内存的四分之三修改内存设置的两种方式:1.conf文件进行配置2.redis动态进行修改进行redis内部:操作命令#设置最大内存config set maxmemory 1024#获取相关信息config

2021-06-01 14:24:24 256

原创 Redis的分布式锁

两种加锁类型:1.JVM加锁2.分布式微服务架构,拆分后各个微服务之间为例避免冲突和数据库故障而加入的一种锁,分布式锁。多个服务间+保证同一个时间段内+同一个用户只能有一个请求(防止关键业务出现数据冲突和并发错误)创建微服务的口诀:1.建Module2.改pom3.写yaml4.主启动5.写业务6.小测试Synchronized:要不线程释放锁,要么报错,可能导致线程大量的积压ReentrantLock:在规定时间内拿不到锁就放弃。tryLock分布式加锁的问题:1.如果在每个服

2021-06-01 13:23:37 176 1

原创 Redis基础

Redis中文官网:http://redis.cn/Redis英文官网:https://redis.io/注意:redis的命令是不区分大小写,但是redis的key是区分大小写帮助命令: help @类型例如: help @StringString的使用场景:商品编号,订单号 使用的是INCR#查看key什么时候过ttl key的名称hash的使用场景:redis的hash 类似于 java的map<String,Map<k,v>>适用于早期

2021-05-31 13:38:23 115

原创 spring的循环依赖(Spring创建bean的大致流程)

循环依赖在spring当中的简介:循环依赖官网简介spring的循环依赖:bean之间存在相互依赖,形成一个闭环。两种注入方法对循环依赖的影响。构造方法注入与setter方法注入。使用构造方法注入会出现循环依赖的问题,抛出异常;使用setter方法注入不会出现循环依赖的问题,而且是用的singleton,如果setter注入用的prototype,则会出现初始化异常:BeanCurrentlyInCreationExceptionspring使用的三级缓存来解决循环依赖:DefaultSingl

2021-05-28 11:10:58 182

原创 spring不同版本下的AOP

springBoot 1.5.9 底层用的spring 4正常代码执行顺序:环绕通知before执行代码环绕通知afterafterReturning异常代码执行顺序:环绕通知beforeafterafterThrowingspringBoot2.3.3 spring是5正常代码执行顺序:环绕通知before执行代码afterReturningafter环绕通知异常代码执行顺序:环绕通知beforeafterThrowingafter...

2021-05-27 09:21:30 265

原创 AQS源码解读

以ReentrantLock进行AQS讲解ReentrantLock有个Sync内部类继承AQS接口。ReentrantLock的公平锁与非公平锁都是继承SyncReentrantLock的加锁的三个步骤:1.尝试加锁2.加锁失败后,线程进入队列。3.加入队列只会,进入阻塞状态。...

2021-05-26 11:25:36 146 1

原创 AQS体系

AQS:通常指的是AbstractQueuedSynchronizer(但是它们三是相互关联的关系)—抽象的队列同步器与LockSupport相关的锁有:ReentrantLock,ReenTrantReadWriteLock,CountDownLatch.SemaPhone等相关。脑图:锁:面向锁的使用者同步器:面向锁的实现者将抢占资源的线程封装成一个node节点使用一个valatile修饰的变量(state)来表示同步状态state状态等于0表示现在没有线程在等待,可.

2021-05-25 09:38:14 154

原创 LockSupport

在java.util.concurrent.locks包下使用java在线API:https://www.matools.com/api/java8LockSupport是线程的wait/notify的改良加强版LOckSupport的park和unpark的作用分别是阻塞线程与解除阻塞线程的事三种线程的等待/唤醒方法1.Object对象的wait方法使线程等待,notify方法唤醒线程注意:不在同一个代码块等待和唤醒功能是不能被用的,会报异常注意:要等待在前,唤醒在后。如果唤醒在前。等待在

2021-05-24 13:32:03 88

原创 可重入锁

可重入锁:同一个线程在外层方法里面获取了锁,在进入内层方法的时候会自动获取锁,不会因为之前获取锁还没有释放而阻塞。ReentrantLock与synchronized都是可重入锁,可在一定程度上避免死锁。隐式锁(即使用Synchronized的锁):synchronized默认是可重入锁,synchronized分为同步代码块和同步方法显式锁(Lock):也有Reentrant这样的可重入锁实例1–synchronized之同步代码块package com.example.demo.LockTe

2021-05-23 14:56:40 113

原创 java字符串常量池内部加载

关于String的intern方法事例:package com.example.demo.javaconstant;public class ConstantTest { public static void main(String[] args) { String str1 = new StringBuffer("58").append("tongcheng").toString(); System.out.println(str1); S

2021-05-21 15:55:55 151

原创 github网址能ping通,但是浏览器访问不了

github网址能ping通浏览器请求超时解决方法#使用命令刷新dnsipconfig /flushdns注意:可能不会马上生效,多刷几次,会通的

2021-05-21 11:18:29 4588

原创 调试+排查+检索(中的检索github相关操作)

使用github进行知识检索

2021-05-21 11:14:32 108

原创 生产环境服务器变慢,诊断思路和性能评估

案例步骤:1.先用top命令查看cpu占用最高的2.使用ps -ef 或者 jps 来找到到底是那个程序导致cpu占用高ps -ef | grep 进程号 | grep -v grepjps -l3.定位到具体的线程与代码ps -mp 进程id -o THREAD,tid,time 找出进程里面线程占cpu最多的线程找到时间长且占用率大的线程id转换成16进制(英文字母小写)线程id:9379 十六进制:24a34.讲需要的线程id转换成16进制(英文小写格式)线程id:9

2021-05-20 16:16:21 86

原创 Linux常用命令

生产环境服务器变慢,诊断思路和性能评估1.整机:top(按1可以查看具体cpu的状况)load average : 系统的负载均衡三个参数的含义:一分钟的负载均衡的平均参数,五分钟的负载均衡的平均参数,十五分钟的平均参数三个参数相加/3 > 60% 表示系统负担压力大可以使用uptime来查看 load average2.CPU:vmstat (主要查看CPU)公式: vmstat -n 2 3每两秒采样一次,总共采样3次查看所有cpu核信息 mpstat -P ALL 2

2021-05-20 16:09:28 96

原创 JVMGC+SpringBoot微服务的生产部署和参数调优

1.先把springBoot项目打包成war包2.知道war包存放地址使用cmd3.内部运行: java -jar war包名称外部运行:java -server JVM参数 -jar war名称4.使用 jps -l 查看进程号使用 jinfo -flags 进程号:查看进程参数...

2021-05-20 14:20:43 216

原创 G1回收器

G1是面向服务端的垃圾收集器在jdk9以后将G2变成默认的垃圾回收机制以替代CMS注意:G1是横跨两区(新生区和老年区)JVM参数-XX:+UseG1GCGC也分4个回收过程设置GC的JVM参数-XX:+UseG1GC -Xmx32g -XX:MaxGCPauseMillis=100-XX:MaxGCPauseMillis 最大GC停顿时间单位毫秒,软目标,JVM将尽可能(但不保证)停顿小于这个时间...

2021-05-20 14:04:47 80

原创 如何选择垃圾收集器

如何选择垃圾收集器:

2021-05-20 10:52:30 85

原创 GC收集器之Serial,ParNew,Parallel Scavenge,CMS,Serial Old Parallel Old

新生代:1.GC之Serial收集器(串行收集器)单线程收集器,在进行垃圾回收的时候会暂停所有的用户线程,直至收集结束。限定于单个CPU环境。对应单CPU环境,它没有其他的线程交互的开销,实现了CPU的最大的利用率。是Client模式下默认的新生代垃圾回收器JVM参数:-XX:+UseSerialGC开启后 :YoungGC使用的是SerialGC+OldGC使用的是 Serial Old(MSC)的收集器组合模式2.GC值Parnew收集器(并行收集器)多个线程进行垃圾回收,其他的用户线.

2021-05-20 10:46:46 270

原创 查看默认的垃圾收集器,七种垃圾收集器的概述与约定参数说明

四种算法:引用计数复制拷贝标记清除标记整理落地实现的垃圾回收器:串行回收并行回收并发回收:并发标记清除G1回收查看默认的垃圾收集器java -XX:+PrintCommandLimitFlags -version添加默认垃圾收集器串行:-XX:+UseSerialGC并行:-XX:+UseParallelGCCMS:-XX:+UseConcMarkSweepGC-XX:+UseParNewGC-XX:+UseParallelOldGC-XX:+UseG1GCjps

2021-05-18 15:04:43 73

原创 Mysql对时间进行操作

1.在时间上进行添加或者减少1.使用Date_add 进行时间的添加公式:Date_add(initDate,INTERVAL 变量 type) 2.使用Date_SUB 进行时间的减少公式:Date_SUB(initDate,INTERVAL 变量 type) 2.进行时间的比较使用 UNIX_TIMESTAMP公式:UNIX_TIMESTAMP(start) > UNIX_TIMESTAMP(end)...

2021-05-18 13:52:00 141

原创 垃圾回收器粗略介绍

GC回收算法:(引用记数,复制,标清,标整)复制用在新生代,标清和标整用在老年代。垃圾回收器是垃圾回收算法的落地实现。主要的垃圾回收器Serial回收器:串行Parallel回收器:并行CMS回收器:并发标记清除GI回收器:串行回收器:Serial回收器为单线程环境设计,使用单线程进行垃圾回收,并且暂停所有用户线程,不适合服务器环境设计。并行回收器:parallel回收器多个垃圾回收线程并行工作,暂停用户线程。适用于科学计算/大数据处理首台处理等弱交互场景。CMS回收器:并发标记清除

2021-05-18 13:41:40 62

原创 java编写路径时“/“在运行时自动变成“\“

实例String filePath =“local/myservice.txt”运行结果local\myservice.txt解决方法:使用File工具类的路径分隔符String filePath ="local"+File.pathSeparator+"myservice.txt"

2021-05-17 11:01:31 986 1

原创 StackOverFlowError(栈堆溢出错误)和OOM(OutOfMemoryError)

Throwable是所有异常的父类StackOverFlowError产生原因:递归的深度调用可能会产生StackOverFlowError(深度的方法调用出不来)实例:package com.example.demo.Throwable;/** * 实现堆栈溢出异常 * 深度进行递归 */public class StackOverErrorFlowDemo { public static void shen(){ shen(); } p

2021-05-17 10:57:28 147

原创 强引用,软引用,弱引用,虚引用

继承关系图强引用定义:强引用(系统默认):当内存不足是,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收最常见的强引用:把一个对象赋给一个引用对象,这个引用对象就是强引用。当一个对象被强引用变量引用时,它是处于可达状态,它是不可能被垃圾回收机制回收的。实例:package com.example.demo.Reference;import com.example.demo.entity.DateDemo;/** * 强引用类型 */public

2021-05-13 16:49:10 100

原创 JVM的常用基础参数

1.-Xms初始大小内存:默认为物理内存的1/64-Xms:等价于-XX:InitialHeapSize2.-Xmx最大分配内存:默认为物理内存的1/4-Xms:等价于-XX:MaxHeapSize3.-Xss设置单个线程栈的大小,一般默认为512k~1024k-Xss:等价于 -XX:ThreadStackSize查看命令:jinfo -flag ThreadStackSize 23876显示效果:0表示默认值-XX:ThreadStackSize=0修改相关的参数,需

2021-05-10 15:37:52 106

原创 JVM的参数类型(XX类型为重点)和查看JVM的默认值

JVM分为三种参数类型一:标配类型-version-helpjava -showversion二:X类型-Xint 解释执行-Xcomp 第一次使用就编译成本地代码-Xmixed 混合模式执行命令java -Xint -versionjava -Xcomp -versionjava -Xmined -version三:XX类型(重点)1.Boolean类型公式: -XX:+ 或者 - 某个属性+表示开启-表示关闭Case一:是否打印GC的收集细节二:是否使用串

2021-05-10 13:37:12 196

原创 对GCRoots的理解

java中的垃圾:指的是在内存中不在被使用的空间判断对象是否可以被回收:1.引用计数法每当有一个地方引用,计数值加1有一个地方引用失效,计数值减12.枚举根节点做可达性分析(根搜索路径)可以作为GCRoots对象的东西...

2021-05-09 14:50:44 112

原创 并发问题的死锁编码及定位分析

死锁的原因:查看是否死锁#查看进程编号 jps -l#查看进程运行状况jstack 进程编号

2021-05-09 14:13:38 77

原创 线程池配置合理线程数

如何考虑线程池:CPU密集型:cpu的核数+1个线程的线程池:减少上下文的切换IO密集型:当出现大量的IO阻塞的时候

2021-05-08 16:30:07 71

原创 线程池的底层工作原理与四种拒绝策略

线程池拒绝策略生效的条件:1.当阻塞队列里面的线程数已经达到最大2.当线程池的线程数量已经达到max值满足这两个条件时,拒绝策略就会生效

2021-05-08 16:11:02 158

原创 线程池七大参数(详解ThreadPoolExecutor构造方法的七个参数)

ThreadPoolExecutor的七参构造方法public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQ.

2021-05-07 14:36:27 185

原创 Executors创建线程池的三种方式与它的底层ThreadPoolExecute(浅谈)

线程池的底层用的是ThreadPoolExecutor线程池不需要new,已经写好池化注意:使用池化线程,永远使用关闭,关闭比使用更重要实例一:创建固定大小的线程池 /** * 创建固定大小的线程池 */ private static void ExecutorNewFixedThreadPool() { ExecutorService executorService = newFixedThreadPool(5); try{ .

2021-05-07 13:52:17 439

原创 线程池的使用和优势三种实现方法(主聊callable)

使用和优势1.省略了上下文的切换课外扩展:int availableProcessors = Runtime.getRuntime().availableProcessors(); System.out.println("可用的处理器: "+availableProcessors);线程池的优势,特点三种实现方法:1.继承Thread类,不可以抛异常,无返回值public class MyThread extends Thread{ @Override

2021-05-07 11:05:24 225 1

原创 线程通信之生产者消费者阻塞队列版本(线程池)

注意:在多线程下 i++等类型可能出现错误为了保证程序的通用性,使用构造方法进行全局变量的赋值编写生产者消费者版的阻塞队列package com.example.demo.threads;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.TimeUnit;import java.util.concurrent.

2021-05-06 17:00:21 67

原创 Synchronized与Lock的区别,新的Lock与以前有什么好处

synchronized属于jvm层面,属于java的关键字Lock是java的API层面的锁,在java.util.concurrent.locks.lock1.原始构成synchronized:monitorenter(底层是通过monitor对象来完成,wait/notify方法都是通过monitor对象来完成,只有在同步代码快里面才能使用wait/notify等方法)monitorexitLock:是具体类2.使用方法synchronized不需要手动释放,当线程执行完成之后,系统会

2021-05-06 15:23:29 72

原创 线程通信之传统的生产者消费者(await在while的原因)

sync的等待(wait)与解锁(notify) 老版lock的等待(wait)与解锁(singal) 新版多线程的判断需要用while判断await要放在while方法里面防止正在waiting被别的原因唤醒,放在while里面,会判断while里面的条件可能会重写挂起。错误情况一:如果有两个生产者A和B,一个消费者C。当存储空间满了之后,生产者A和B都被wait,进入等待唤醒队列。当消费者C取走了一个数据后,如果调用了notifyAll(),注意,此处是调用notifyAll(),则生产者

2021-05-06 13:26:15 280

原创 synchronousQueue

synchronousQueue是一个没有容量的阻塞队列每一个put操作必须等待一个take操作,否则不能添加元素注意这个要放在两个线程里面进行调用,不然没有效果相当于A放,有B来拿能,A才能放synchronousQueue实例package com.example.demo.Queues;import java.util.concurrent.BlockingQueue;import java.util.concurrent.SynchronousQueue;/** * 测试 s

2021-04-30 16:06:07 98 1

空空如也

空空如也

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

TA关注的人

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