- 博客(37)
- 资源 (3)
- 收藏
- 关注
原创 (二)Redis 数据类型 - String
参考资料 : 《Redis 设计与实现》String字符数组数值型【int】bitmapListSetSorted SetHashHelpredis-cli 中,使用 help 可以查看帮助,不同帮助按照组划分,@ 前缀# 通用组@generic# 不同数据类型@string@list@set@sorted_set@hash@pubsub@transactions@connection@server@scripting@hyperloglog@.
2021-03-15 23:51:49
242
原创 (一)Redis安装与概述
参考资料 Redis中文概述 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), .
2021-03-14 23:35:38
212
原创 Spring事务的传播属性/机制/行为(7种)
预计阅读时间: 10分钟事务的传播什么是事务的传播?传播,意味着是有两个事务参与的,单个事务是没有 ”传播“ 的概念的事务的传播机制(propagation behavior),即为在一个事务方法中调用另一个事务方法时,事务该如何执行。7种传播属性首先简要介绍事务的7种传播属性,事务方法 methodA 调用事务方法 methodB传播属性含义PROPAGATION_REQUIREDrequired 含义是 必须有事务, 如果存在一个事务,则支持当前事务。如果没有事务.
2021-03-08 23:11:12
310
原创 分布式系统 CAP 理论
C : (consistency) 数据一致性所有 节点拥有数据的最新版本A : (availability) 可用性P : (partition-tolerance) 分区容错性 : **容忍网络出现分区,**分区之间网络不可达集群同一个业务,部署在多个服务器上 (不同的服务器运行同样的代码,干同一件事)通过多台计算机完成同一个工作,达到更高的效率。两机或多机内容、工作过程等完全一样。如果一台死机,另一台可以起作用。分布式分布式系统是一组计算机,通过网络相互连接传递消息与.
2021-01-17 19:00:49
182
原创 HTTPS 秘钥交换过程/四次握手
HTTPS = HTTP + SSL传统的HTTP协议通信:传统的HTTP报文是直接将报文信息传输到TCP然后TCP再通过TCP套接字发送给目的主机上。HTTPS协议通信:HTTPS是HTTP报文直接将报文信息传输给SSL套接字进行加密,SSL加密后将加密后的报文发送给TCP套接字,然后TCP套接字再将加密后的报文发送给目的主机,目的主机将通过TCP套接字获取加密后的报文给SSL套接字,SSL解密后交给对应进程。HTTPS加密请求(一次握手)过程首先,客户端发起握手请求,以明文传输请求信息.
2020-12-13 22:50:46
1627
原创 BlockingQueue - 阻塞队列(一)
本文介绍阻塞队列基本原理以及两种基本的阻塞队列 ArrayBlockingQueue & LinkedBlockingQueue 阻塞队列是线程池中的一个重要角色,JDK 原生实现的阻塞队列有四种 LinkedBlockingQueue、SynchronousQueue、ArrayBlockingQueue 以及 PriorityBlockingQueue 阻塞队列与其他队列显著的区别有两点:既然用于线程池,必须要支持并发(线程安全)提供阻塞添加与阻塞删除方法在传统队列的基.
2020-11-24 18:31:52
186
原创 SSH修改登录端口并配置免密登录(非root)
实验环境本地 MacOS 10.14.4远程服务器CentOS 7.5 64位Firewalld本地命令前缀 [admin@MacBookPro]$服务器命令前缀 [A@CentOS]$ 最近在建站后,发现不到2天我的小破站就有600次ssh远程登录的尝试。心中不免一阵寒意,为了解决这个问题特地读取了ssh官方的文档,对网站的ssh登录进行了一些措施。 首先要了解 SSH免密登录的原理,免密登录需要使用 ssh 的非对称加密方式,登录无需密码,但是需要携带秘钥。本地若想登录.
2020-11-12 14:50:18
2504
1
原创 HashMap在JDK1.7和JDK1.8的改动
Integer.MAX_VALUE = 2 ^ 31 - 1;HashMap table 的最大大小 1 << 30 = 2 ^ 30HashMap 查找的时间复杂度 O(1) + O(n) (before JDK 1.7) | O(1) + O(logN) (after JDK 1.8)JDK 1.7 和 1.8 的区别JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7是用单链表进行的纵向延伸,当采用头插法时会容易出现逆序且.
2020-11-12 10:15:21
474
2
原创 JVM_05 运行时数据区与指令集
JVM Runtime data area and JVM instructions<previous next>一、Java 内存布局 图 1 java 内存布局 PC线程私有program counter , 保存下一条指令的位置。 PC 是唯一不会发生 OOM 的内存区域。虚拟机执行的过程类似于以下的伪代码:while (not end) { get from pc; get 对应位置指令; 执行该指令; pc ++;}JVM Stack线程私.
2020-08-31 20:26:11
207
原创 JVM_04 指令重排序原则
< previous next >一、Java 8 大原子操作(目前这种说法已弃用)参考资料 《深入理解java虚拟机》page: 364指令作用区解释lock主内存标识变量为线程独占unlock主内存解锁read主内存读到工作内存write主内存写到主内存load工作内存read后的值放到线程本地变量副本store工作内存存储值到主内存给 write 备用use工作内存传值给执行引擎ass.
2020-08-13 20:05:29
555
原创 JVM_03 CPU的乱序执行
上次我们提到了JVM为了安全推出的 双亲委派机制那么双亲委派机制可能被打破吗?可以,那么如何打破呢? ClassLoader.loadClass 方法定义了类加载的双亲委派机制,重写该方法即可跳出双亲委派。历史上出现过几次双亲委派被破坏的案例JDK 1.2 之前,想自己实现类的加载必须重写 loanClass 方法。Thread.ContextClassLoader 中的线程上下文加载器,不是按照双亲委派机制运行的。热启动、热部署等场景,每一个 WebApplication 都有自己的 C.
2020-08-05 21:58:48
489
原创 JVM_02 类加载机制
JVM 类加载步骤loading - 装载linking - 链接verification - 验证preparation - 准备resolution - 解析intializing - 初始化装载1. 通过一个类的 全限定名 来获取定义此类的 二进制字节流2. 将这个字节流所代表的 静态存储结构 转化为 方法区的 运行时数据结构3. 在 Java 堆中生成一个代表这个类的 java.lang.Class 对象,作为方法区访问这些数据的入口。验证: 检查载入Cla
2020-08-03 22:20:41
174
原创 JVM_01 Class文件格式
JVM 知识体系图1 jvm 结构问题1: Java 是编译执行的还是解释执行的?解释 + 热点代码编译 执行 (混合执行)**解析:**其实 JVM 主要对 class 文件中的字节码使用 字节码解释器 进行解释并执行。但是当某一方法调用次数达到即时编译定义的阈值时,就会触发即时编译,这时即时编译器会将IR进行优化,并生成这个方法的机器码,后面再调用这个方法,就会直接调用机器码执行相关参数:-Xmixed 混合执行-Xint 解释执行模式-Xcomp 编译执行模式图2 j...
2020-08-03 20:51:08
177
原创 Java 线程&锁(三)
public static void shortSleep(Duration duration) { try { TimeUnit.MILLISECONDS.sleep(duration.toMillis()); } catch (InterruptedException e) { e.printStackTrace(); } }synchronized问题一:synchronized 锁的...
2020-07-23 19:58:02
159
原创 Java 线程&锁(一)
摘要:锁的本质是什么CAS如何实现?如何处理 ABA 问题互斥锁:同一时刻,只能有一个线程持有锁原始的线程通讯 -> o.wait(); o.notify(); 在调用 o.wait(); 时,线程会进入等待队列;CASCAS = compareAndSet/compareAndSwap - 自旋锁: 失败时候重试自旋锁引发的 ABA 问题:int m = 0;// 线程①取 m 值运算,经过运算后将 m 更新为 1, 更新之前会判断 m 是否仍然为 0, 如果为0, 则将 .
2020-07-03 17:31:46
2964
原创 Java 线程&锁(二)
概要 : 线程Thread 进程 纤程/协程Fiber图 1 冯诺依曼计算机体系结构进程与线程的区别进程:操作系统资源分配的基本单位线程:CPU执行的基本单位,也是一个进程里面最小的执行单元一个CPU(核)在同一时刻可以执行几个线程? 除非有超线程存在,否则1个线程切换ALU: 运算单元Register: 寄存器PC: 程序计数器Cache: 缓存线程切换的时候,需要把寄存器和程序计数器中的内容保存(保护线程),然后在切换到其他线程执行,再切换回来。JVM 是运行在操作.
2020-07-03 17:18:35
268
原创 Collection [集合] & Collections [集合工具类]
Collection [集合] & Collections [集合工具类]标签: java 数据结构 集合java.util.* 中的集合结构Collection 类中定义的基本方法// 对集合的基础操作:int size(); // 获取元素个数boolean isEmpty(); // 是否个数为 0boolean contains(Object element...
2020-04-22 10:58:39
248
原创 Java 引用传递与值传递
Java 引用传递与值传递【背景】首先 Java 中没有值传递和引用传递的概念,所谓 pass by value 和 pass by reference 只是从其他语言引申的概念而已。所以你会听到有人说 ”Java 中没有引用传递,全部都是值传递“,然而在使用过程中却又总能遇到 ”方法调用确实改变了某些值“ 的情况。一、基本类型与引用类型基本类型:byte/char/int/long/...
2020-01-16 19:27:40
176
原创 Apollo 学习(一)
Apollo 学习(一)演示环境GitHub一、namespace1. 什么是Namespace?Namespace是配置项的集合,类似于一个配置文件的概念。2. 什么是“application”的Namespace?Apollo在创建项目的时候,都会默认创建一个“application”的Namespace。顾名思义,“application”是给应用自身使用的,熟悉Sprin...
2020-01-16 16:57:43
217
原创 Crontab表达式
Crontab表达式Linux 的 crontab 表达式可以用于表示任何时间,常用于定时任务的时间测算友情链接:在线工具-crontab一、表达式格式< * * * * * * >用 6 个 * 分别来表示 分 时 日 月 周 (年) , 其中年字段为可选取值范围:分(1-59)(*或*/1表示每分钟)时(1-23)(0表示0点)日(1-31)月(1-1...
2019-08-26 19:14:30
896
原创 Java获取系统环境变量的方法
java中获取环境变量:STEPS:1. Try to get environment from JVM system propertym_env = System.getProperty(“env”);2. Try to get environment from file "server.properties"m_env = m_serverProperties.getProper...
2019-08-02 11:21:06
5076
原创 int []数组与List互相转换
int[] data = {4, 5, 3, 6, 2, 5, 1}; // int[] 转 List<Integer> List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList()); // Arrays.st...
2019-07-29 19:40:32
30746
3
原创 Java的三种代理模式 Spring代理
Java的三种代理模式1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法。 举个例子来说明代理的作用:假设我们想邀请一位明星,...
2019-05-15 09:26:51
1138
原创 TCP/IP 协议详解
TCP/IP 协议一、TCP/IP 是什么? TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)体系结构是指能够在多个不同网络间实现的协议簇。 TCP/IP 是一种体系结构,也代表了一系列的协议簇,同时,TCP 和 IP 又分别是建立在传输层和网络层的协议。而传输层协议还包含常见的面向无连接的 UDP 协...
2019-03-26 15:51:43
2159
原创 Linux服务器搭建SSH免密登录
Linux服务器搭建SSH免密登录一、什么是SSH?管理员可以通过 远程登陆 的方式,对通过网相连的分散于各处的多台主机进行管理操作。管理员可以对远程主机进行如下操作:远程登陆远程命令执行远程文件传输存在的问题:这些操作不安全!使用纯文本口令,并用明文发送信息可能会被截取,口令可能会被检索未经授权的人员使用截取的口令登陆系统而对系统造成危害SSH的目标在不...
2019-03-25 16:13:10
314
原创 JVM类加载机制
java 类加载机制1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java...
2019-03-25 10:33:40
153
原创 Mysql数据库事务
数据库事务事务特性SQL92标准定义了数据库事务的四个特点:原子性(Atomicity):一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做。一致性(Consistency):事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的。隔离性(Isolation):是指数据库允许多个并发事务同时对其中的数据进行读写和修改的能力,隔离性可以防止...
2019-03-25 10:32:08
626
原创 悲观锁与乐观锁(CAS实现)
CAS乐观锁-悲观锁悲观锁与乐观锁悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会 阻塞 直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语 synchronized 关键字的实现也是悲观锁。乐观锁:顾名思义,就是很乐观,每次...
2019-03-25 10:29:43
822
原创 HashMap的底层实现与HashTable
HashMap - HashTable其他数据结构的CRUD性能数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也...
2019-03-25 10:27:52
412
原创 学会线程池,这一篇就够了
线程池线程池核心参数**corePoolSize****maximumPoolSize****keepAliveTime****unit****workQueue****threadFactory****handler**排队策略和拒绝策略**Executors**实现原理线程池内部状态任务提交任务执行ThreadPoolExecutor.addWorkerFailed() 方法ThreadPoo...
2019-03-15 16:45:45
287
原创 Git学习笔记(二)
Git学习笔记(二)本文介绍Git的常用命令以及基本用法 使用Git管理任何项目,只需在项目根文件夹下的git bash中执行命令:git init 执行后的项目文件夹便多了.git文件目录(隐藏),之所以以.开头,是因为在Linux环境中,以.开头的文件为隐藏文件。 添加文件到暂存区:git add . #添加全部文件git add / #添加全部文件git add ...
2018-12-17 10:31:12
183
原创 GitBook文本管理工具的使用
GitBook简介一、Git和GitBook 相信在认识GitBook之前,你或多或少对Git是有了解的。可能你觉得Git只是作为协同开发使用,其实不然。GitHub依赖其良好的开源性,完全可以作为一个良好的分享平台。而且在这里你不只是能分享你的代码,包括你的任何文章、心得、著作,everything is ok! 那么Git和GitBook有联系吗?答案是 : 没联系! 就像雷...
2018-11-14 09:43:06
895
原创 java中用==判断相等与equals方法的区别
Object类中的.equals()方法和.hashCode()方法详解一、判断相等 众所周知,在java中判断两个变量或者对象是否相等,可以使用 == 操作符或者‘.equals()’方法。而.equals()方法又涉及到.hashCode()方法,他们究竟的原理是什么,让我们细细道来。基本类型的相等判断 当判断基本类型的相等与否时,用‘==‘判断完全没问题,因为基本类型的相等与否完...
2018-11-02 16:11:29
1529
原创 Intellij IDEA 破解补丁激活(适用版本:2018.2.1)
IDEA破解补丁激活鸣谢 破解方法出自lan yu 适用版本:Intellij IDEA2018.2.1破解补丁为 Rover12421 开发,使用方法如下:1.下载 http://idea.lanyus.com/jar/JetbrainsCrack-2.6.2.jar 并将 JetbrainsCrack-2.6.2.jar 放置到 D盘根目录。 2. 打开位于 C:\Window...
2018-08-16 11:35:41
3029
原创 Git 学习笔记(一)
Git 分布式版本控制系统目录Git 分布式版本控制系统一、简介二、Git环境配置三、Git基本命令四、命令详解4.1 配置账号4.2 创建本地仓库4.3 创建文件test.txt4.4 查看文件修改内容4.5 查看历史记录4.6 版本回退五、工作区与暂存区5.1 丢弃未添加到暂存区的内容5.2 删除文件六、远程仓库与Git分支6.1 远程仓库配置...
2018-08-15 17:37:56
491
原创 Mybatis的分页插件PageHelper使用及注意事项
(一)PageHelper分页插件介绍*笔者采用spring+springMVC+mybatis框架做java后台开发,开发软件是IntellijIDEA(用过之后已卸掉eclipse),项目为maven工程。使用方法(在已有ssm框架基础上)1.mybatis的配置文件中添加代码: <plugins> <!-- com.github.pagehelper为PageHelper类所在包名
2017-12-11 16:08:22
6742
2
转载 Intellij IDEA激活服务器
Intellij IDEA激活服务器http://intellij.mandroid.cn/http://idea.imsxm.com/http://idea.iteblog.com/key.phplicense server 转载自: https://www.cnblogs.com/suiyueqiannian/p/6754091.html
2017-12-05 09:01:50
21306
1
Microsoft Visual C++ 2013 Redistributable(X64) - 12.0.40660
2017-12-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人