
笔记
喜三仔
严于自律,自强不息
展开
-
链表环入口-快慢指针方法理解的关键点
看到这个图一般就理解了,加油,共勉。原创 2020-09-07 14:35:45 · 237 阅读 · 0 评论 -
SpringBoot整合Mybatis(IDEA)
创建项目Finish目录结构设计表application.properties配置文件spring.datasource.username=rootspring.datasource.password=1234spring.datasource.url=jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8spring.datasou原创 2020-07-07 18:16:52 · 381 阅读 · 0 评论 -
Eureka注册中心
上一篇博文中我们搭建了一个简单的SpringCloud微服务工程,其中包含服务提供者和服务消费者。Eureka Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。...原创 2020-05-30 13:52:18 · 457 阅读 · 0 评论 -
SpringCloud微服务简单搭建(IDEA版本)
SpringBoot是SpringCloud的基础,所以学习SpringCloud之前需要对SpringBoot有一定的了解。父工程(springcloud)打开IDEA,创建一个maven项目springcloud,这个是接下来所有子项目的父工程。pom.xml(springcloud)<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"原创 2020-05-28 21:56:52 · 685 阅读 · 0 评论 -
Redis数据持久化
RDB RDB方式的数据持久化,仅需在redis.conf文件中配置即可,默认配置是启用的。配置文件中有SNAPSHOTTING,这一部分就是关于RDB的配置说明。配置SNAPSHOTTING地方有三处:配置执行RDB生成快照文件的时间策略。对Redis进行设置,让它在“N秒内数据集至少有M个key改动”这一条件被满足时,自动保存一次数据集。配置格式:save <seconds&...原创 2020-04-25 15:48:49 · 157 阅读 · 0 评论 -
Redis事务操作
事务事务有以下特性:⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必...原创 2020-04-25 11:31:05 · 179 阅读 · 0 评论 -
Redis发布订阅功能
Redis提供了发布订阅的功能发布:PUBLISH订阅:SUBSCRIBE先订阅,再发布 示例代码:Pblisher 发布者public class Pblisher { public static void main(String[] args) { System.out.println("现在开始发布者---------------------...原创 2020-04-25 12:27:55 · 134 阅读 · 0 评论 -
Jedis和SpringDataRedis
Redis官方推荐使用Jedis api,但它是不完善的。ps:由于我本人以前学习技术都是照着图片打代码,这样的学习效果不佳,所以在本文章中我会尽量使用文字阐述,但仍会尽量详尽,目的在于让各位看客多思考,遇到问题然后解决问题才有更好的学习效果。Jedis使用首先我们使用IDEA创建一个新的Maven project,在pom文件中添加下面的依赖:<dependencies> ...原创 2020-04-23 21:42:30 · 727 阅读 · 0 评论 -
启动多个redis进程
启动时指定端口启动时指定端口可在一台服务器启动多个redis进程cd /usr/local/redis/bin./redis-server ../conf/redis.conf --port 6380创建多个redis目录创建多个redis目录,建议以端口号命名将redis目录改名为redis-6379复制一个目录6380redis-6380的配置文件需要修改端口分别启动两...原创 2020-04-21 12:00:36 · 1060 阅读 · 0 评论 -
Redis安装配置及后台启动和关闭(CentOS7)
安装配置首先我们需要有一个CentOS7的系统环境。推荐初学者使用虚拟机,方便管理容错率还高。然后我们需要让这个虚拟机可以联网 (侵删)使用免费的Xftp6将下载好的redis安装包传输到/usr/local目录下cd /usr/local/ 进入目录tar -zxvf redis-5.0.4.tar.gz 解压安装包cd /usr/local/redis-5.0.4 进入解压目录...原创 2020-04-21 10:34:20 · 710 阅读 · 0 评论 -
Java核心技术之程序编译与代码优化---Java与C/C++的编译器对比
大多数程序员都认为C/C++会比Java语言快,甚至觉得从Java语言诞生以来“执行速度缓慢”的帽子就应当扣在它的头顶,这种观点的出现是由于Java刚出现的时候即时编译技术还不成熟,主要靠解释器执行的Java语言性能确实比较低下。 Java与C/C++的编译器对比实际上代表了最经典的即时编译器与静态编译器的对比,很大程度上也决定了Java与C/C++的性能对比的结果,因为无论是C/C++还是J...原创 2019-11-05 08:12:24 · 346 阅读 · 0 评论 -
Java核心技术之程序编译与代码优化---晚期(运行期)优化
在部分的商用虚拟机(Sun HotSpot、IBM J9)中,Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为 “热点代码”(Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Ju...原创 2019-11-04 21:05:44 · 1185 阅读 · 1 评论 -
Java核心技术之程序编译与代码优化---早期(编译期)优化
Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端”更准确一些)把 .java文件转变成.class文件的过程;也可能是指虚拟机的后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码转变成机器码的过程;还可能是指使用静态提前编译器(AOT编译器,Ahead Of Time Compiler)直接把.java文...原创 2019-11-03 16:14:35 · 509 阅读 · 0 评论 -
Java核心技术之类加载及执行子系统
在Class文件格式与执行引擎这部分中,用户能通过程序进行操作的,主要是字节码生成与类加载器这两部分的功能。 Tomcat:正统的类加载器架构 主流的Java Web服务器,如Tomcat、Jetty、WebLogic、WebSphere或其他笔者没有列举的服务器,都实现了自己定义的类加载器(一般都不止一个)。因为一个功能健全的Web服务器,要解决如下几个问题:部署在同一个服务器上的...原创 2019-11-02 23:01:34 · 406 阅读 · 0 评论 -
Java核心技术之虚拟机字节码执行引擎---基于栈的字节码解释执行引擎
Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行) 和编译执行(通过即时编译器产生本地代码执行) 两种选择。 解释执行 Java语言经常被人们定位为“解释执行”的语言,但主流的虚拟机中都包含了即时编译器后,Class文件中的代码到底会被解释执行还是编译执行,就成了只有虚拟机自己才能准确判断的事情。编译过程 Java语言中,Javac编译器完成了程序代码经过...原创 2019-11-01 15:00:57 · 196 阅读 · 0 评论 -
Java核心技术之虚拟机字节码执行引擎---方法调用
方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。 在程序运行时,进行方法调用是最普遍、最频繁的操作,但Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于之前说的直接引用)。解析 所有方法调用中的目标方...原创 2019-10-31 17:35:19 · 261 阅读 · 1 评论 -
Java核心技术之虚拟机字节码执行引擎---运行时栈帧结构
前言 执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是:物理机的执行引擎直接建立在处理器、硬件、指令集和操作系统层面上虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。 从外观上看起来,所有的Java虚拟机的执行引擎都是一致的:输入的是字节...原创 2019-10-30 18:40:10 · 203 阅读 · 0 评论 -
Java核心技术之类加载机制---类加载器
虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类与类加载器 类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段。比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则...原创 2019-10-29 10:11:47 · 222 阅读 · 0 评论 -
Java核心技术之类加载机制---类加载的过程
加载 “加载”是“类加载”(Class Loading)过程的一个阶段。在加载阶段,虚拟机需要完成以下3件事情:通过一个类的全限定名来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。 虚拟机实现与具体应用的灵活度都是相当大的,例如“通过一个类...原创 2019-10-28 17:12:11 · 230 阅读 · 0 评论 -
Java核心技术之类加载机制---类加载的时机
我们已经知道,在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用。那么,虚拟机如何加载这些Class文件? 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增...原创 2019-10-27 22:27:58 · 338 阅读 · 0 评论 -
Java核心技术之字节码指令
Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。 Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码。 字节码指令集是一种具有鲜明特点、优劣势都很突出的指令集架构,由于限制了Java虚拟机操作码的长度为一个字节(即0~25...原创 2019-10-25 14:26:54 · 301 阅读 · 0 评论 -
Java核心技术之类文件结构
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。 今天的计算机仍然只能识别0和1,但由于最近10年内虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现并蓬勃发展,将我们编写的程序编译成二进制本地机器码(NativeCode)已不再是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。 无关性...原创 2019-10-24 18:27:30 · 335 阅读 · 0 评论 -
Java核心技术之虚拟机性能监控与故障处理---JDK的可视化工具
JDK中有这么两个可视化工具:JConsole和VisualVM,它们是JDK的正式成员。 JConsole:Java监视与管理控制台 JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视、管理工具。启动JConsole 进入到JDK/bin目录下,通过“jconsole.exe”启动JConsole。程序将自动搜...原创 2019-10-23 13:10:58 · 167 阅读 · 0 评论 -
Java核心技术之虚拟机性能监控与故障处理---JDK的命令行工具
给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。经常使用适当的虚拟机监控和分析的工具可以加快我们分析数据、定位解决问题的速度。 JDK的bin目录中有“java.exe”、“javac.exe”这...原创 2019-10-22 09:41:10 · 251 阅读 · 0 评论 -
Java核心技术之内存管理机制---内存分配与回收策略
内存管理其实就只是两个问题:给对象分配内存以及回收分配给对象的内存。 前面的几篇文章已经描述了各种内存回收的问题,所以这一篇着重在对象的内存分配。对象的内存分配,往大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中,分配的规则并不是...原创 2019-10-21 09:45:53 · 221 阅读 · 0 评论 -
Java核心技术之内存管理机制---垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。HotSpot虚拟机的垃圾收集器 上面是7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器。 Serial收集器 Serial收集器是最古老、最基本的收集器,在JDK 1.3.1之前它是唯一的新生代收集器。该收集器是单线程的...原创 2019-10-20 22:13:59 · 160 阅读 · 0 评论 -
Java核心技术之内存管理机制---HotSpot的算法实现
前面的原创 2019-10-18 09:48:15 · 182 阅读 · 0 评论 -
Java核心技术之内存管理机制---垃圾收集算法
标记-清除算法 该算法分为“标记”和“清除”两个阶段:首先使用上一篇博文中的方法标记出所有需要回收的对象。在标记完成后统一回收所有被标记的对象。这个算法简单方便,但是它有两个比较重要的缺陷:一个是效率问题,标记和清除两个过程的效率都不高另一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而...原创 2019-10-17 07:12:23 · 164 阅读 · 0 评论 -
Java核心技术之内存管理机制---垃圾收集
在Java程序运行的过程中,线程间不可见的内存区域:程序计数器、虚拟机栈和本地方法栈随着线程而诞生,当线程结束时,它们也一并被清空销毁。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此,这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。 但是Java堆和方法区不一样。只有当我们的Java程序运行...原创 2019-10-16 12:42:03 · 117 阅读 · 0 评论 -
Java核心技术之内存管理机制---溢出异常
在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM)异常的可能。 Java堆溢出 Java堆是Java虚拟机运行时的最大块的内存,里面存储了大量对象实例。如果一直创建对象,同时保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么就会产生OutOfMemoryError内存溢出异常。示...原创 2019-10-15 10:04:45 · 185 阅读 · 0 评论 -
Java核心技术之内存管理机制---HotSpot虚拟机对象
这篇文章用于探讨HotSpot虚拟机在Java堆中对象分配、布局和访问的全过程。 对象创建(一)检查类虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。(二)分配内存 在类加载检查通过后,接下来虚拟机将为新生对象分配内存,对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的...原创 2019-10-14 20:46:18 · 150 阅读 · 0 评论 -
Java核心技术之内存管理机制---运行时的数据区域
对于一名Java程序开发的开发人员,了解Java的核心内存管理,可以令你的薪水有一个突破。Java程序运行时的数据区可以分为:方法区、堆、虚拟机栈、本地方法栈和程序计数器。其中方法区和堆是由所有线程共享的数据区,后面三个是线程隔离的数据区。Java虚拟机数据区域程序计数器 程序计数器是指示字节码执行的一块小空间,各个功能都需要依靠它,不然就无法实现分支、循环、跳转、异常处理和线程恢复等...原创 2019-10-12 20:25:03 · 148 阅读 · 0 评论 -
分布式——第一个Dubbo程序
程序准备由于是第一次写Dubbo程序,所以降低一下难度,不使用注册中心Registry只使用以下的:开发服务提供者Provider开发服务消费者Consumer不使用注册中心Registry的情况下,我们需要直接连接到指定服务提供者(点对点连接)点对点直接连接服务提供者取消服务注册:registry=“N/A”服务消费者指定访问的IP及端口:dubbo://localhost...原创 2019-04-11 17:14:26 · 330 阅读 · 0 评论 -
分布式--Dubbo管控台的部署与使用
部署环境Linuxjdk.1.8tomcat8.5dubbo-admin-2.3.5.war部署步骤将Linux上tomcat下的ROOT目录下的文件全部删除将dubbo-admin-2.3.5.war上传到Linux上的tomcat下的webapps/ROOT目录下使用unzip命令解压dubbo-admin-2.3.5.war文件:unzip dubbo-admin-2....原创 2019-04-20 17:31:21 · 112 阅读 · 0 评论 -
分布式--Dubbo--Zookeeper集群
zk集群特点集群中只要有超过半数的机器是正常工作的,那么整个集群对外就是可用的;也就是说如果有2个zookeeper,那么只要有1个故障了,zookeeper就不能用了,因为1没有过半,所以2个zookeeper不是高可用的,因为不能容忍任何一台发生故障;同理,要是有3个zookeeper,一个故障了,还剩下2个正常的,过半了,所以3个zookeeper才是高可用的,因为能容忍1台发生故障...原创 2019-04-20 19:29:47 · 254 阅读 · 0 评论 -
分布式--Dubbo服务化建议
分包 建议将服务接口,服务模型,服务异常等均放在API包中,因为服务模型及异常也是API的一部分。粒度 服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo暂未提供分布式事务支持。 服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。 不建议使用过于抽象的通用接口,如:Map query(Map),这样的接口没...原创 2019-04-20 20:52:43 · 154 阅读 · 0 评论 -
HTTP协议原理(一)--前言及5层网络模型介绍
前言 HTTP是前后端开发人员都必须掌握的协议 对于后端开发同学,学习HTTP协议可以打造性能更好的HTTP服务; 对于前端开发同学,学习HTTP协议可以更好地使用HTTP的特性帮助开发; 并且,能够帮助前后端更好地协作。五层网络模型低三层物理层主要作用是定义物理设备如何传输数据数据链路层在通信的实体间建立数据链路连接网络层为数据在结点之间传输创建逻辑链路传输层 向用...原创 2019-04-21 09:05:46 · 755 阅读 · 0 评论 -
Linux常用命令--压缩解压命令
压缩解压命令:gzip (只能压缩文件)命令名称:gzip命令英文原意:GNUzip命令所在路径:/bin/gzip执行权限:所有用户语法:gzip [文件]功能描述:压缩文件压缩后文件格式:.gz 压缩解压命令:gunzip命令名称:gunzip命令英文原意:GNUunzip命令所在路径:/bin/gunzip执行权限:所有用户语法:gunzip [压缩文件]功...原创 2019-04-25 21:30:00 · 256 阅读 · 0 评论 -
信号与系统--幅度谱和相位谱
周期信号的频谱为了能既方便又明白地表示一个信号在不同频率下的幅值和相位,可以采用成为频谱图的表示方法。在傅里叶分析中,把各个分量的幅度|Fn|或 Cn 随着频率nω1的变化称为信号的幅度谱。而把各个分量的相位 φn 随角频率 nω1 变化称为信号的相位谱。幅度谱和相位谱统称为信号的频谱。三角形式的傅里叶级数频率为非负的,对应的频谱一般称为单边谱;指数形式的傅里叶级数频率为整个实轴,所以称...转载 2019-04-14 16:10:10 · 87677 阅读 · 4 评论 -
Linux常用命令--网络命令
网络命令:write命令名称:write命令所在路径:/usr/bin/write执行权限:所有用户语法:write <用户名>功能描述:给用户发信息,以Ctrl+D保存结束范例:#write linzhiling 网络命令:wall命令名称:wall命令英文原意:write all命令所在路径:/usr/bin/wall执行权限:所有用户语法:wall [m...原创 2019-04-26 22:08:14 · 156 阅读 · 0 评论