
Java
儒雅的读书人
这个作者很懒,什么都没留下…
展开
-
spring的循环依赖
一级缓存为:singletonObjects二级缓存为:earlySingletonObjects三级缓存为**:singletonFactories**原创 2022-07-01 16:07:42 · 805 阅读 · 0 评论 -
spring的简易流程
代码如下:首先需要一个ApplicationContext,输入参数也是一个AppConfig配置类(主要来定位到bean的目录)在ZhouyuApplicationContext需要是创建一个bean,怎么创建一个bean呢?创建一个Map beanDefinitionMap = new HashMap();用来存放bean的定义(单例还是原型,是否懒加载,class的类型等),key为bean的名字。创建一个Map...原创 2022-06-30 16:14:47 · 168 阅读 · 0 评论 -
BlockingQueue阻塞队列
BlockingQueue阻塞队列:顾名思义起到阻塞的作用,将生产者和消费者隔离起来,提高安全性。原创 2022-06-27 16:26:09 · 289 阅读 · 0 评论 -
JMM(Java的内存模型)
JMM(Java的内存模型)主要是针对可见性、有序性、原子性三方面的规则。可见性:有序性:原子性:原创 2022-06-19 19:02:08 · 104 阅读 · 0 评论 -
Kafka相关1
参考官网是学习kafka的最好途径kafka官网由于Kafka是用Scala语言开发的,运行在JVM上,因此在安装Kafka之前需要先安装JDKyum install java-1.8.0-openjdk* -ykafka依赖zookeeper,所以需要先安装zookeeperwget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gztar -zxvf apac原创 2021-12-07 11:26:07 · 109 阅读 · 0 评论 -
Rabbitmq
Rabbitmq的高级特性1.确认机制(producer—>rabbitmq broker)从生产者发布消息到broker的这个过程,broker接收到消息的确认。这里分两种状态confirm:生产者把消息发送到broker时,可能出现两种状态,1.ack(表示broker接收成功) 2.nack(表示broker拒收消息)return:表示broker接收消息成功,但是没有队列去存放消息,最终会把消息退回给生产者。channel.confirmSelect(); ch原创 2021-11-23 20:36:23 · 1450 阅读 · 0 评论 -
中间件MQ
一说到 MQ ,大家想到的是它的作用1.应用解耦(提高容错性、维护性)2.异步提速3.削峰填谷四种mq的区别:rabbitmq的架构学习任何的技术,如果有官网那是最好的呢,因为网页上的其他技术都是基于官网出来的。RabbitMQ 官方地址:http://www.rabbitmq.com/从官网得知,有六种工作模式:...原创 2021-11-22 09:47:11 · 1274 阅读 · 0 评论 -
Arthas和常量池以及对象池
阿里巴巴的开源JVM调优工具。Arthas官网解释一切问题。Arthas不熟悉的话,直接查看快速入门,怎么下载,怎么开始玩。哪些指令是我们经常用到的。1.dashboard2.thread3.thread pid4.thread b5.jad xxx.class 反编译代码看是否正确6.ognl @对象全路径@属性,可以改变属性的值对GC日志的分析可以项目一启动就加载日志,参数如下:-Xloggc:./gc-%t.log -XX:+PrintGCDetails -XX:+Pr原创 2021-07-09 22:59:27 · 371 阅读 · 0 评论 -
JVM调优工具
JVM调优工具很多,底层还是这些指令在运行,可能不同的工具封装了这些指令。1.jmapjmap用来查看内存的信息。jmap -histo pid > ./log.txtjmap -heap pidjmap -dump:format=b,file=eureka.hprof pid2.jstack查看死锁的情况查看堆中的信息查看jvm进程中cpu飙升的原因,可以定位到代码的行数jstack -pidtop -p jstack 19663|grep -A 10 4cd03.jin原创 2021-07-07 23:33:31 · 125 阅读 · 0 评论 -
垃圾收集器G1和ZGC
随着jdk的发展,垃圾收集器也是在不停的发展中……首先看图:1. G1收集器(-XX:+UseG1GC)从图中我们看得出,堆内存分割成了一个个小的region,每个region可能是eden、可能是s、可能是old,可能是h区。G1默认把堆内存分成2048个region。每个region是2的幂次方m。大对象存于h区,而不是直接放在old区。默认新生代占堆内存5%,有参数可以调节。G1收集器的执行过程:和CMS比较,初始标记,并发标记,最终标记几乎一样。差别在于筛选回收。筛选回收会STW,相对原创 2021-07-06 21:46:09 · 296 阅读 · 0 评论 -
垃圾收集器相关
jvm中垃圾是怎么收集的呢???1.垃圾收集算法1.1标记-复制:用于Eden1.2标记-清除:用于Old1.3标记-整理:用于Old2.垃圾收集器2.1Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)新生代采用复制算法,老年代采用标记-整理算法。2.2Parallel Scavenge收集器(-XX:+UseParallelGC(年轻代),-XX:+UseParallelOldGC(老年代))新生代采用复制算法,老年代采用标记-整原创 2021-07-05 18:58:41 · 78 阅读 · 0 评论 -
Java对象的创建相关
上面思维导图表示的是类加载的整个流程。既然是分配内存,我们得知道一个类有多大???怎么查看呢??下面依赖可以查看一个类的大小<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version></dependency>其中涉及到:1.指针.原创 2021-07-04 16:01:31 · 90 阅读 · 0 评论 -
JVM类加载机制
学习了这么长时间,对于一个类是怎么被加载的一直不清楚。想找一个源码来看看,但是又不知道从哪里下手,真是有点尴尬。机会来了,机会来了……首先我们通过一张图来稍微了解一下类是什么来加载的???类加载器:引导类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如rt.jar、charsets.jar等扩展类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包应用程序类加载器:负责加载ClassPath路径下的类包,主要就是加载你自己写的那些类自原创 2021-06-30 21:18:13 · 58 阅读 · 0 评论 -
CPU密集型 vs IO密集型
CPU密集型(CPU-bound)CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。在多重程序系统中,大部份时间用来做计算、逻辑判断等CPU动作的程序称之CPU bound。例如一个计算圆周率至小数点一千位以下的程序,在执行的过程当中绝大部份时间用在三角函数和开根号的计算,便是属于CPU bound转载 2021-03-26 11:23:17 · 130 阅读 · 0 评论 -
IDEA创建类时添加类注释,已有的类补充类注释(详细)
IDEA创建类时添加类注释,已有的类补充类注释idea创建类时添加类注释(细节)File -> Settings -> Editor -> File and Code Templates[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xb8ynrsm-1605753222841)(IDEA创建类时添加类注释,已有的类补充类注释(详细).assets/1.png)]创建一个模板Includes页签,新建一个java_header模板(后面有一些可用的模原创 2020-11-19 10:34:30 · 2197 阅读 · 0 评论 -
java log4j日志级别配置详解
1.1在项目的classpath下或者resource包下(maven项目)新建一个log4j.properties文件,初始项目配置如下参数就足够了,更详细配置可继续看1.4 log4j日志级别配置;#通过根日志记录器指定日志级别及输出源 #日志输出的优先级: debug < info < warn < error < fatal#定义根日志记录器的日志级别(info)及输出源的别名(console,myFile)#该定义让日志在控制台和文件输出,并且只输出info级别原创 2020-10-21 10:51:28 · 1569 阅读 · 0 评论 -
SpringMVC的详细流程(一)
SpringMVC的详细流程Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。与之相反的是基于组件的、事件驱动的Web框架,如Tapestry、JSF等。 Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是Dispatcher原创 2020-09-25 18:08:33 · 276 阅读 · 0 评论 -
Java计时器StopWatch
一、最简单的计时在我们的程序中不免需要对某一个运算或者方法进行计时,以便我们来观察该运算或方法是否符合我们的预期,所以在我们刚开始接触 Java 的时候都能写出类似下面这样的代码来计时:```javapublic static void main(String[] args) { Long startTime = System.currentTimeMillis(); doSomeThing(); Long endTime = System.currentTimeMillis();原创 2020-09-25 17:20:24 · 784 阅读 · 0 评论 -
如何使用log.debug()
log4j是一个开源的日志,共分为六个等级:LOG、DEBUG、INFO、WARN、ERROR、和FATAL。DEBUG是其中的一种日志级别。一般我们用这个方法的时候都是这样的: if (log.isDebugEnabled()) { log.debug("CheckSalePackageIsExistsLimit 类: 查询耗时", System.currentTimeMillis() - startReq); }意思是:如果log4j的配置中开启debug原创 2020-09-23 15:29:30 · 4970 阅读 · 0 评论 -
Idea使用httpclient调用接口
1.、关于下面这种方式呢,不建议使用,因为用了下面的,其实就和postman没区别了2、正确的使用方式2.1、Post请求2.1.1、@RequestBody不写的话,按照下面的正常调用就行了,但是如果写上了里面参数使用了required=true,一定不能让DTO对象为null,否则就会报错org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing 或者将原创 2020-09-11 10:15:00 · 1544 阅读 · 0 评论 -
Xshell连接centOS7(设置)
0、对于如下配置的宿主机(此处即为windows主机)1、编辑→虚拟网络编辑器 配置完毕后的状态如下:注:(1)其中的子网IP就是根据宿主机的IP修改得来的,即修改第三位。(2)其“NAT设置”配置如右图,是根据子网IP修改最后一位得到的。2、虚拟机→设置→网卡适配器的配置如下图3、cd /etc/sysconfig/network-scriptsvi ifcfg-eno167...转载 2020-02-29 18:07:38 · 2148 阅读 · 0 评论 -
Intellij IDEA菜单项中Compile、Make和Build的区别
Compile、Make和Build的区别针对Java的开发工具,一般都有Compile、Make和Build三个菜单项,完成的功能的都差不多,但是又有区别。编译,是将源代码转换为可执行代码的过程。编译需要指定源文件和编译输出的文件路径(输出目录)。Java的编译会将java编译为class 文件,将非java的文件(一般成为资源文件、比如图片、xml、txt、poperties等文件)原封不...转载 2020-01-17 16:50:32 · 183 阅读 · 0 评论 -
DevOps的思想
DevOps概念介绍在DevOps入门篇的开始,我们首先来了解一下DevOps这个概念。从字面上看,DevOps就是Dev + Ops。Dev可以理解为Development,也就是开发;也可以理解为Developer,也就是开发人员。Ops可以理解为Operation,也就是运维;也可以理解为Operator,也就是运维人员。所以从字面上来看,DevOps就是如何开发软件,如何交付软件,如何运...原创 2019-12-19 14:44:37 · 332 阅读 · 0 评论 -
Thymeleaf的快速了解
开发传统Java WEB工程时,我们可以使用JSP页面模板语言,但是在SpringBoot中已经不推荐使用了。简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较于其他的模板引擎,它有如下四个极吸引人的特点:动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以...原创 2019-12-19 14:16:01 · 368 阅读 · 0 评论 -
用一个bat文件调用另外两个bat文件
@echo offstart d:\1.batstart c:\2.bat这样是2个任务同时执行,应该怎么改,谢谢@echo offstart /wait d:\1.batstart /wait c:\2.bat@echo offcall d:\1.batcall c:\2.batstart 是在新窗口运行调用的文件,call是在当前的窗口运行。 start /wait是指启动...转载 2019-12-11 10:27:11 · 1555 阅读 · 0 评论 -
kibana dev tools快捷键
ctrl+i 自动缩进ctrl+enter 提交请求down 打开自动补全菜单enter或tab 选中项自动补全esc 关闭补全菜单原创 2019-11-08 22:04:58 · 1293 阅读 · 0 评论 -
linux常见指令
1 cd命令集ifconfig 检查IP地址 ip addrpwd 查找当前文件位置cd命令是linux中最基本的命令语句,必须熟练掌握cd / 返回根目录cd ~ 用户主目录cd . 当前目录cd …返回到上一级目录cd /usr/ 进入到usr目录cd – 返回上一个目录cd 直接回家2 ls目录和文件ls 展现文件目录ll 展现文件详情ls ...原创 2019-10-29 14:18:56 · 105 阅读 · 0 评论 -
CRC 算法的简单说明
写给嵌入式程序员的循环冗余校验(CRC)算法入门引导前言CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验。因此,掌握基本的CRC算法应是嵌入式程序员的基本技能。可是,我认识的嵌入式程序员中能真正掌握CRC算法的人却很少,平常在项目中见到的CRC的代码多数都是那种效率非常低下的实现方式。其实,在网上有一篇介绍CRC 算法的非...转载 2019-07-21 11:25:23 · 938 阅读 · 0 评论 -
对线程的理解
33.1.进程:正在进行中的程序。其实进程就是一个应用程序运行时的内存分配空间。33.2.线程:其实就是进程中一个程序执行控制单元,一条执行路径。进程负责的是应用程序的空间的标识。线程负责的是应用程序的执行顺序。33.3.线程的生命周期33.3.1.新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态。33.3.2.新建和就绪状...原创 2019-06-30 16:18:05 · 214 阅读 · 0 评论 -
Eclipse UML小工具AmaterasUML的配置和使用
AmaterasUML是个人认为最好用的Eclipse UML插件,能够通过拖拽Java源文件,轻松生成类图结构。同一时候支持活动图、时序图和用例图。AmaterasUML官方下载地址是:http://sourceforge.jp/projects/amateras/releases/#21568 ,眼下最新是1.3.4版本号,网盘直接下载:http://pan.baidu.com/s/1o6...转载 2019-09-04 20:33:30 · 294 阅读 · 0 评论 -
Spring Boot 面试,一个问题就干趴下了!
随着 Spring Boot 使用越来越广泛,Spring Boot 已经成为 Java 程序员面试的知识点,很多同学对 Spring Boot 理解不是那么深刻,经常就会被几个连环跑给干趴下了!比如下面这一段的 Spring Boot 问答:问:你觉得 Spring Boot 最大的优势是什么呢?答:Spring Boot 的最大的优势是“约定优于配置“。“约定优于配置“是一种软件设计范...转载 2019-08-19 16:10:30 · 139 阅读 · 0 评论 -
java 左移和右移理解
<<(左移),>>(右移)皆属于位运算符.其运算比乘除快,所以我们可以用其优化代码。<<左移规则则是带符号位移,高位移出,低位补0,移动位数超过该类型的最大位数,则进行取模,如对Integer型左移34位,实际上只移动了两位。左移一位相当于乘以2的一次方,左移n位相当于乘以2的n次方。Integer i = 7; message(Integer.t...转载 2019-07-16 08:46:35 · 1646 阅读 · 0 评论 -
java中线程同步的几种方法
方法一:使用synchronized关键字由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类。 注:同步是一种高开销的操作,因此应该尽量减少同步的内容。通常没有必要同步整个方法,使用sync...转载 2019-07-15 17:24:07 · 133 阅读 · 0 评论 -
Ribbon几种负载均衡规则
1.轮询规则RoundRobinRuleThis rule simply choose servers by round robin. It is often used as the default rule or fallback of more advanced rules.2.根据服务是否死掉或者服务处于高并发来分配权重AvailabilityFilteringRuleThis r...转载 2019-07-15 17:10:43 · 1582 阅读 · 0 评论 -
一致性Hash算法
一致性Hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1、平衡性(Balance):平衡性是指哈希的结果能够尽可能分布在所有的缓冲(Cache)中去,这样可以使得所有的缓冲空间得到利用。很多哈希算法都能够满足这一条件。2、单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应该能够保证原有...转载 2019-06-30 23:30:58 · 107 阅读 · 0 评论 -
nginx负载均衡的常用策略
一、什么是负载均衡当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访...转载 2019-06-30 22:34:06 · 129 阅读 · 0 评论 -
nginx的工作原理
Nginx是如何处理一个请求的呢?首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面先初始化好这个监控的socket,再进行listen然后再fork出多个子进程出来, 子进程会竞争accept新的连接。此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后此时,某一个子进程会...转载 2019-06-30 22:15:08 · 169 阅读 · 0 评论 -
简单工厂模式实现加减乘除法
1.创建运算的接口public interface Operation {//提供计算两个数字的方法double getResult(double num1,double num2);}2.创建对应的加减乘除四个实现类复制代码public class Addition implements Operation { //加法@Overridepublic double getRes...转载 2019-07-05 00:05:25 · 1720 阅读 · 1 评论 -
JavaScript实现AJAX(只需四步)
1、第一步:获取XMLHttpRequest对象//(1)获取XMLHttpRequest对象var xmlHttp = ajaxFunction();function ajaxFunction(){ var xmlHttp; try{ //现代浏览器(IE7+、Firefox、Chrome、Safari 和 Opera)都有内建的 XMLHttpRequest 对象 xmlHt...原创 2019-07-14 15:30:10 · 814 阅读 · 0 评论 -
ajax中的一些参数的含义及用法
jquery中的ajax方法参数的用法和他的含义:1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。2.type: 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。3.timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。此设...转载 2019-07-14 15:21:34 · 147 阅读 · 0 评论