
面试突进
文章平均质量分 89
兢兢业业的子牙
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
并发编程看这一篇就够了
线程池线程池:一个管理线程的池子。为什么使用线程池?降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 提高线程的可管理性。统一管理线程,避免系统创建大量同类线程而导致消耗完内存。public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQue原创 2021-09-22 21:55:14 · 633 阅读 · 0 评论 -
Spring监听器---ApplicationListener
说到事件监听,想到的肯定是观察者模式。但是这儿主要说下spring中的监听是怎么样的流程。这就不得不说到spring容器的refresh方法,容器启动过程中,listener相关的主要是这个三个方法:initApplicationEventMulticaster方法初始化事件多播器,后续的事件发布都是由多播器来发布的;registerListeners注册监听器到前面初始化好的多播器上面去;finishRefresh容器启动完成最后刷新,发布ContextRefreshedEvent事件。..原创 2021-09-15 21:37:23 · 1389 阅读 · 0 评论 -
Dubbo服务暴露与服务消费流程分析
Dubbo的服务暴露和服务的引用流程比较复杂,尤其是Dubbo框架对于扩展点实现了自动包装、自动装配、自适应和自动激活的这些特性,导致我们直接在看源码分析时,会出现很多地方的逻辑不清楚(因为有很多的类是在内存中动态生成的),这里我会把一些动态生成的关键的类的源码贴出来,这样有助于更清晰的理解Dubbo的服务暴露和和消费的整个过程。之所以对服务的暴露和引用的流程做分析,一方面是想更深入的理解Dubbo框架,另一方便是想结合Dubbo的这些扩展点,研究一下Dubbo的微内核加插件机制的架构,学架构不就得..原创 2021-09-06 20:28:35 · 424 阅读 · 0 评论 -
Rocketmq源码分析---broker 启动流程
1. 启动入口broker的启动类为org.apache.rocketmq.broker.BrokerStartup,代码如下:public class BrokerStartup { ... public static void main(String[] args) { start(createBrokerController(args)); } ...}在main()方法中,仅有一行代码,这行代码包含了两个操作:createBro原创 2021-09-01 21:24:47 · 344 阅读 · 0 评论 -
Redis分布式锁---Red Lock
1.Redlock:全名叫做 Redis Distributed Lock;即使用redis实现的分布式锁;官方地址这个锁的算法实现了多redis实例的情况,相对于单redis节点来说,优点在于 防止了 单节点故障造成整个服务停止运行的情况;并且在多节点中锁的设计,及多节点同时崩溃等各种意外情况有自己独特的设计方法前置概念:1.TTL:Time To Live; redis key 的过期时间或有效生存时间2.clock drift:时钟漂移;指两个电脑间时间流速基本相同的情况下,两个电脑原创 2021-08-25 21:47:50 · 896 阅读 · 0 评论 -
Redis的集合---Zset
前言:zset就是有序集合,并且每个member都带有score(可用于排序),因此很适合在打赏日榜、近一周收益这类场景中运用。数据结构初探有序集合对象的编码可以是ziplist或者skiplist。同时满足以下条件时使用ziplist编码:元素数量小于128个 所有member的长度都小于64字节以上两个条件的上限值可通过zset-max-ziplist-entries和zset-max-ziplist-value来修改。ziplist编码的有序集合使用紧挨在一起的压缩列表节点来保原创 2021-08-22 21:02:52 · 1270 阅读 · 0 评论 -
Redis的列表---LIST
前言:Redis 的列表相当于 Java 语言里面的 LinkedList,是链表而不是数组 。这意味着list 的插入和删除操作非常快,时间复杂度为 O(1),但是查找数据很慢,时间复杂度为 O(n) 。 当列表弹出了最后一个元素之后,该数据结构自动被删除,内存被回收。 Redis 的列表结构常用来做异步队列使用 将需要延后处理的任务结构体序列化成字符串塞进 Redis 的列表,另一个线程从这个列表中轮询数据进行处理在版本3.2之前,Redis 列表list使用两种数据结构作为底层实现:压缩原创 2021-08-15 21:32:08 · 1240 阅读 · 0 评论 -
Redis的字符串---SDS
前言:Redis是用C语言写的,但它的字符串不是c语言的字符串,,是简单动态字符串(Simple Dynamic String,SDS)在 C 语言中,字符串可以用一个\0结尾的char数组来表示。比如说,helloworld在 C 语言中就可以表示为"helloworld\0"。这种简单的字符串表示,在大多数情况下都能满足要求,但是,它并不能高效地支持长度计算和追加(append)这两种操作:每次计算字符串长度(strlen(s))的复杂度为 O(n)。 对字符串进...原创 2021-08-15 18:58:22 · 235 阅读 · 0 评论 -
几种常用关系型数据库优缺点比较
计算机存储信息的大小,最基本的单位是字节,一个汉字由两个字节组成,字母和数字由一个字节组成。容量的单位从小到大依次是:字节(B)、KB、MB、GB、TB。它们之间的关系如下:1TB=1024GB1GB=1024MB1MB=1024KB1KB=1024字节1GB=1百万KB常用数据库的处理数量级Excel :可处理行数据量104,8576,大概1百万Access数据库:每个数据库文件上限 2GB 假设每行记录1KB ,大概2百万条记录Mircrosoft sql..翻译 2021-06-24 19:52:29 · 2948 阅读 · 0 评论 -
几种志框架:Log4j Log4j2 SLF4J logback和Apache Commons Logging的比较
作为Java开发人员,对于日志记录框架一定非常熟悉。而且几乎在所有应用里面,一定会用到各种各样的日志框架用来记录程序的运行信息。而对于一个成熟的Java应用,这个是必不可少的。在开发和调试阶段,日志可以帮助我们更快的定位问题;而在应用的运维过程中,日志系统又可以帮助我们记录大部分的异常信息,通常很多企业会通过收集日志信息来对系统的运行状态进行实时监控预警。总体概览image.png目前的日志框架有JDK自带的logging,log4j1、log4j2、logback ,这些框架都自己定制了.原创 2021-06-20 19:12:37 · 1171 阅读 · 6 评论 -
四种JSON类库的性能比较---Gson、FastJson、Jackson、Json-lib
本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库。但是百闻不如一见,只有自己亲手测试过的才是最值得相信的。JSON不管是在Web开发还是服务器开发中是相当常见的数据传输格式,一般情况我们对于JSON解析构造的性能并不需要过于关心,除非是在性能要求比较高的系统。目前对于Java开源的JSON类库有很多种,下面我们取4个常用的JSON库进行性能测试对比, 同时根据测试结果分析如果根据实际应用场景选择最合适的JSON库。这4个原创 2021-06-16 21:30:18 · 1638 阅读 · 0 评论 -
分布式中几种服务注册与发现组件的原理与比较
前言在云计算和容器化技术发展火热的当下,对于微服务架构,服务注册与发现组件是必不可少的。在传统的服务架构中,服务的规模处于运维人员的可控范围内。当部署服务的多个节点时,一般使用静态配置的方式实现服务信息的设定。在微服务应用中,服务实例的数量和网络地址都是动态变化的,这对系统运维提出了巨大的挑战。因此,动态的服务注册与发现就显得尤为重要。解决的问题在一个分布式系统中,服务注册与发现组件主要解决两个问题:服务注册和服务发现。服务注册:服务实例将自身服务信息注册到注册中心。这部分服务信息包括服务所在主机I原创 2021-06-09 19:54:44 · 239 阅读 · 0 评论 -
thrift+springBoot
1 基本语法1.1 数据类型基本类型:bool 布尔类型,true或者falsebyte 字节类型,长度为8位,有符号i16 16位有符号整形,java中的shorti32 32位有符号整形,java中的inti64 64位有符号整形,java中的longdouble 64位浮点数string 一串编码未知的文本或二进制串 需要注意的是,没有无符号整形。这是兼容多种语言所要求的(utf-8编码的字符串)。特殊类型:binary:未经过编码的字节流,java中的ByteBuffer。容原创 2021-06-02 20:23:55 · 1017 阅读 · 0 评论 -
redis实现热搜榜
核心需求一个项目中,遇到了搜索热词统计的需求,我使用了 Redis 的五大数据类型之一 Sorted Set 实现。目前有两项数据需要统计:“当日搜索热词 top10”和“当周搜索热词 top10”。关于这两项数据的统计方法,目前想到了两种实现方法:两个 Redis 的 Sorted Set 实现,一个 Sorted Set A 统计当天,0 点 top10 记录进 MySQL,Sorted Set 清零。一个 Sorted Set B 统计当周,每周日 top10 记录进 MySQL,Sorted原创 2021-05-30 12:43:16 · 3992 阅读 · 2 评论 -
static{}静态代码块与{}普通代码块之间的区别
先看一个例子://class A package com.my.test;class A { static { System.out.println("A1:父类静态代码区域"); } { System.out.println("A2:父类非静态代码区域"); } public A() { System.out.println("A3:父类构造器"); }}//class原创 2021-05-26 21:48:41 · 235 阅读 · 0 评论 -
熔断限流----Sentinel
1.功能特点丰富的应用场景:例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500台以下规模的集群的汇总运行情况。广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。完善原创 2021-05-23 22:43:10 · 517 阅读 · 2 评论 -
redis的数据结构zset---跳跃表
跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。这么说,我们可能很难理解,我们可以先回忆一下链表。一、复习跳跃表1.1 什么是跳跃表对于一个单链表来讲,即便链表中存储的数据是有序的,如果我们要想在其中查找某个数据,也只能从头到尾遍历链表。这样查找效率就会很低,时间复杂度会很高,是 O(n)。如果我们想要提高其查找效率,可以考虑在链表上建索引的方式。每两个结点提取一个结点到上一级,我们把抽出来的那一级叫作索引。这个时候,我们假设要查找节点8,原创 2021-05-19 21:56:05 · 1304 阅读 · 0 评论 -
一文搞懂XXL-JOB任务调度平台
一、概述在平时的业务场景中,经常有一些场景需要使用定时任务,比如:时间驱动的场景:某个时间点发送优惠券,发送短信等等。批量处理数据:批量统计上个月的账单,统计上个月销售数据等等。固定频率的场景:每隔5分钟需要执行一次。所以定时任务在平时开发中并不少见,而且对于现在快速消费的时代,每天都需要发送各种推送,消息都需要依赖定时任务去完成,应用非常广泛。二、为什么需要任务调度平台在Java中,传统的定时任务实现方案,比如Timer,Quartz等都或多或少存在一些问题:不支持集群、不支持统计、原创 2021-05-16 13:04:45 · 1905 阅读 · 5 评论 -
分布式事务几种解决方案
分布式事务分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。以商品流水账单为例,我们拆分为商品购买系统,订单系统,支付系统。用户看中一件商品,点击购买。商品购买系统响应用户的点击,向订单系统插入一条订单信息。原创 2021-05-09 20:27:41 · 1656 阅读 · 5 评论 -
关于序列化和反序列化
前言序列化:将java对象转化为可传输的字节数组反序列化:将字节数组还原为java对象为啥子要序列化?序列化最终的目的是为了对象可以跨平台存储,和进行网络传输。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组什么情况下需要序列化?凡是需要进行跨平台存储和网络传输的数据,都需要进行序列化本质上存储和网络传输 都需要经过 把一个对象状态保存成一种跨平台识别的字节格式,然后其他的平台才可以通过字节信息解析还原对象信息序列化的方式序列化只是一种拆装组装对象的规则转载 2021-05-06 00:00:20 · 162 阅读 · 1 评论 -
Springboot启动扩展点超详细总结,再也不怕面试官问了
1.背景Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配。我非常喜欢这种自动装配的机制,所以在自己开发中间件和公共依赖工具的时候也会用到这个特性。让使用者以最小的代价接入。想要把自动装配玩的转,就必须要了解spring对于bean的构造生命周期以及各个扩展接口。当然了解了bean的各个生命周原创 2021-05-02 23:47:05 · 481 阅读 · 1 评论 -
过滤器 (Filter) 和 拦截器 (Interceptor)
1.过滤器 (Filter)过滤器的配置比较简单,直接实现Filter 接口即可,也可以通过@WebFilter注解实现对特定URL拦截,看到Filter 接口中定义了三个方法。init() :该方法在容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。注意:这个方法必须执行成功,否则过滤器会不起作用。doFilter() :容器中的每一次请求都会调用该方法, FilterChain 用来调用下一个过滤器 Filter。destroy(): 当容器销毁 过滤器实例时调用原创 2021-04-28 23:28:48 · 5222 阅读 · 12 评论 -
Redis(一)------内存淘汰策略
前言作为一个内存数据库,redis在内存空间不足的时候,为了保证命中率,就会选择一定的数据淘汰策略。1.参数设置我们的redis数据库的最大缓存、主键失效、淘汰机制等参数都是通过配置文件来配置的。这个文件是我们的redis.config文件,我们的redis装在了/usr/local/redis目录下,所以配置文件也在这里。首先说明一下我使用的redis是5.0。1.1 最大内存参数关键的配置就在最下面,我们可以设置多少个字节。默认是关闭的。1.2 内存淘汰策略不同于之前的版本,redis5原创 2021-04-25 21:51:19 · 200 阅读 · 0 评论 -
mysql---主从复制
1.MySQL主从复制介绍MySQL数据库支持单向、双向、链式级联、环状等不同业务场景的复制。在复制过程中,一台服务器充当主服务器(Master),接收来自用户的内容更新,而一个或多个其他的服务器充当从服务器(Slave),接收来自主服务器binlog文件的日志内容,解析出SQL,重新更新到从数据库,使得主从服务器的数据达到一致。如果设置了链式级联复制,那么从服务器本身除了充当从服务器外,也会同时充当其下面从服务器的主服务器,链式级联复制类似A—>B—>C的复制形式。在这里,只介绍主—>原创 2021-04-25 21:34:59 · 1613 阅读 · 2 评论 -
MySQL的Redo日志与Undo日志
1.重做日志(redo log)我们都知道,事务的四大特性里面有一个是 持久性 ,具体来说就是只要事务提交成功,那么对数据库做的修改就被永久保存下来了,不可能因为任何原因再回到原来的状态。那么 MySQL 是如何保证一致性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中。但是这么做会有严重的性能问题,主要体现在两个方面:因为 Innodb 是以页为单位进行磁盘交互的,而一个事务很可能只修改一个数据页里面的几个字节,这个时候将完整的数据页刷到磁盘的话,太浪费资源了。一原创 2021-04-21 22:22:58 · 205 阅读 · 0 评论 -
MySQL 是如何解决幻读的
1.什么是幻读在一次事务里面,多次查询之后,结果集的个数不一致的情况叫做幻读。而多或者少的那一行被叫做 幻行。就像出现了幻觉一样 所以叫幻读。2.为什么要解决幻读在高并发数据库系统中,需要保证事务与事务之间的隔离性,还有事务本身的一致性。3.MySQL 是如何解决幻读的3.1 多版本并发控制(MVCC)(快照读/一致性读)多数数据库都实现了多版本并发控制,并且都是靠保存数据快照来实现的。以 InnoDB 为例。可以理解为每一行中都冗余了两个字段,一个是行的创建版本,一个是行的删除(过期)版本原创 2021-04-21 21:51:42 · 330 阅读 · 0 评论 -
设计模式---单例模式
单例模式定义: 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。特点:单例类只有一个实例对象;该单例对象必须由单例类自行创建;单例类对外提供一个访问该单例的全局访问点。优点单例模式可以保证内存里只有一个实例,减少了内存的开销。可以避免对资源的多重占用。单例模式设置全局访问点,可以优化和共享资源的访问。缺点单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来的代码,没有第二种途径,违背开闭原则。在并发测试中,单例模式不利于原创 2021-04-20 21:10:20 · 142 阅读 · 0 评论 -
一文明白设计模式的6大原则和23种设计模式
1.单一职责原则思想:一个方法只负责一件事情。描述:单一职责原则很简单,一个方法 一个类只负责一个职责,各个职责的程序改动,不影响其它程序。 这是常识,几乎所有程序员都会遵循这个原则。优点:降低类和类的耦合,提高可读性,增加可维护性和可拓展性,降低可变性的风险。2.里氏替换原则思想:使用的基类可以在任何地方使用继承的子类,完美的替换基类。描述:子类可以扩展父类的功能,但不能改变父类原有的功能。子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法,子类中可以增加自己特有的方法。优点:增.翻译 2021-04-20 20:32:45 · 305 阅读 · 0 评论 -
Spring中的设计模式
1.简单工厂或叫做静态工厂方法(StaticFactory Mehtod)模式,但不属于23种GOF设计模式之一。简单工厂的实质是由一个工厂类根据传入的参数,动态决定创建哪一个产品类。Spring中的BeanFactory就是简单工厂的体现,根据传入一个唯一的标识来获得bean对象,但是否在传入参数后创建还是传入参数前创建要根据具体情况来定。2.工厂方法(Factory Method)通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始原创 2021-04-20 20:17:22 · 166 阅读 · 0 评论 -
Mybatis-Plus最优雅的使用
1.代码生成开源的代码生成器有很多,我这里使用 人人开源的 renren-generator下载之后可根据需要修改里面的模板文件。①修改application.yml中的DB配置②run 起工程③访问 127.0.0.1:80 打开控制台,选择renren-fast 勾选要生成代码的数据表。生成一个renren.zip的包 解压 把对应的文件copy到我们工程的对应位置既可。这里分页插件可能要修改一下,可以根据自己喜欢的方式选择一个mybatis的分页插件。2.优雅的使用在操作单表的时原创 2021-04-14 20:49:08 · 881 阅读 · 0 评论 -
限流(一)---限流的几种方案
1.限流方案限流的实现方案有很多种,这里稍微理了一下,限流的分类如下所示:①合法性验证限流:比如验证码、IP 黑名单等,这些手段可以有效的防止恶意攻击和爬虫采集;②容器限流:比如 Tomcat、Nginx 等限流手段,其中 Tomcat 可以设置最大线程数(maxThreads),当并发超过最大线程数会排队等待执行;而 Nginx 提供了两种限流手段:一是控制速率,二是控制并发连接数;③服务端限流:比如我们在服务器端通过限流算法实现限流,此项也是我们本文介绍的重点。合法性验证限流为最常规的业务代码原创 2021-04-11 22:32:00 · 1369 阅读 · 0 评论 -
Dubbo架构以及调用流程
一.Dubbo结构图duubo结构图解释一下这个架构图:Consumer服务消费者,Provider服务提供者。Container服务容器。消费当然是invoke提供者了,invoke这条实线按照图上的说明当然同步的意思了。但是在实际调用过程中,Provider的位置对于Consumer来说是透明的,上一次调用服务的位置(IP地址)和下一次调用服务的位置,是不确定的。这个地方就需要使用注册中心来实现软负载。Register服务提供者先启动start,然后注册register服务。消费订阅subs原创 2021-04-07 20:15:21 · 657 阅读 · 0 评论 -
一文学会使用CompletableFuture
**前言:**Java 8引入了CompletableFuture以及它的接口CompletionStage作为对Future的增强,它可以让你使用回调驱动的方式表达不同任务的信息流。CompletableFuture用来定义单个任务事件的计算。1.创建 public void completedFutureExample() { CompletableFuture cf = CompletableFuture.completedFuture("test"); asse原创 2021-04-04 21:26:58 · 243 阅读 · 0 评论 -
JVM垃圾收集算法和垃圾收集器
1.如何判断对象是否存活在进行垃圾回收的时候如何判断对象是否存活呢?(1)引用计数法给对象添加一个计数器,每引用一次计数器+1,失效就-1,任何时候,计数器=0的对象就是没有被引用的对象,可以被回收。但是这种方法,没办法解决对象之间引用的情况,比如对象A引用了对象B,对象B又引用了对象A,所以又有了 跟搜索算法。(2)跟搜索算法 GC ROOT 可达性算法GC Roots的对象为起点,从这些节点向下开始搜索,搜索的路程成为引用连,当一个对象到GC Roots没有任何引用链的时候,该对象可以被认定为原创 2021-03-31 16:55:09 · 177 阅读 · 0 评论 -
再也不怕被问到分布式锁----分布式锁的几种解决方案
1.什么是分布式锁为了防止分布式系统中的多个进程之间相互干扰,我们需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁。1.1 为什么要使用分布式锁假设一个场景:成员变量X是一个有有状态的对象,存在 JVM1、JVM2、JVM3 三个 JVM 内存中,成员变量 X同时都会在 JVM 分配一块内存,三个请求发过来同时对这个变量操作,显然结果是不对的,不是同时发过来,三个请求分别操作三个不同 JVM 内存区域的数据,变量 X 之间不存在共享,也不具有可见性,处理的结转载 2021-03-28 21:32:29 · 801 阅读 · 0 评论 -
JVM(三)---调优总结
1.JVM 内存调优对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。1.Full GC会对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个堆进行回收,所以比较慢,因此应该尽可能减少Full GC的次数。2.导致Full GC的原因1)年老代(Tenured)被写满调优时尽量让对象在新生代GC时被回收、让对象在新生代多存活一段时间和不要创建过大的对象及数组避免直接在旧生代创建对象 。2)持久代Pemanet Generation空原创 2021-03-21 22:19:51 · 183 阅读 · 0 评论 -
JVM(二)---JVM调优
1.利用工具分析JVM运行情况要想合理地分配内存、优化GC,通过前一篇的性能调优过程可以发现,我们至少需要知道如下的一些信息:新生代对象增长的速率,YoungGC的触发频率,YoungGC的耗时,每次YoungGC后存活对象大小,每次YoungGC过后有多少对象进入了老年代,老年代对象增长的速率,FullGC的触发频率,FullGC的耗时等。前面我们是通过分析GC日志或者粗略估算的方式来调优的,现在就利用 jstat 工具来分析下。1、运行示例程序1)如下示例代码这段代码模拟每秒钟在新生代创建20M原创 2021-03-21 22:17:28 · 828 阅读 · 2 评论 -
JVM(一)---调优工具
1.调优工具1.1 JDK工具1.1.1 利用 jps 找出进程jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。1)查看Java进程PID【jps -l】左边一列就是Java进程的PID。2)输出传递给JVM的参数【jps -vl】1.1.2 利用 jstat 查看VM统计信息使用 jstat原创 2021-03-21 22:03:54 · 655 阅读 · 0 评论 -
面试突进之消息队列
关于消息队列面试官常问的问题:1.你有没有在系统里用过消息队列?(你回答:用过的)2.那你说一下你们在项目里是怎么用消息队列的?(巴拉巴拉,啥啥啥项目中发送个啥啥消息队列,别的系统来消费啥啥的,个人觉得这里是一个误区,仅仅就是知道怎么用,用来做了什么。比如我们有个订单系统,订单系统会每次下一个新的订单的时候,就会发送时一条消息到ActiveMQ里面去,后台有个库存系统负责获取了消息然后...翻译 2019-06-24 11:36:06 · 647 阅读 · 0 评论