自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

海贼懒懒

tomZhang

  • 博客(114)
  • 资源 (8)
  • 收藏
  • 关注

原创 行锁/间隙锁/Next-key Lock

官网地址:https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.htmlrecord Lock:在索引上的行锁,防止其它事务 新增/更新/删除 该行gap Lock:间隙锁,锁住一个区间,防止其它事务新增Next-key Lock:行锁+间隙锁,可重复读的事务隔离级别会按照Next-key Lock扫描索引来加锁注意:所有锁都是针对于索引的表User,id为主键,age为数值型;索引:id主键唯一索引,age普通索引C

2021-08-05 00:00:10 1398

原创 springmvc启动加载和处理请求过程

启动过程:1 先加载ContextLoaderListener(负责容器的启动和销毁操作),默认加载/WEB-INF/applicationContext.xml这个文件(如果没有需要加载的文件可以不写Listener)<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>&lt

2020-12-13 18:08:46 592

原创 浅谈HTTPS

原因:HTTP是明文传输的,中间人能看到C端(Client)和S端(Server)的所有信息。(我们可以这样理解中间人:网络传输要经过层层路由,中间人有办法能监听到里面的数据,一旦中间人知道一条链路所有来往的数据,那么就可以伪造用户请求给Server。网络是不安全的,中间人还可以攻击域名服务器,修改域名指向的IP)第一步 加密传输内容我们可以使用对称加密将内容加密,由C端和S端通过密码进行加解密,但这个密码怎么发送过去呢?毕竟直接发送中间人也能获取到~第二步 使用非对称加密传输密码(公.

2020-11-28 21:24:22 356 1

原创 装饰模式

/* * 场景:对已有的对象进行扩展 * 定义:不改变现有对象结构的情况下,通过装饰器对象动态的给已有对象增加一些职责 * 角色: * 抽象构件 定义一个抽象接口以规范对象 * 具体构件:实现抽象构件 * 抽象装饰:继承抽象构件,并包含具体构件实例,可以通过子类扩展具体构件的功能 * 具体装饰:实现抽象装饰 * * 扩展一个类的方式:继承或关联机制,即将一个类的对象嵌入另一个对象 * */publi...

2020-11-16 23:33:35 207

原创 JDK的SPI技术

SPI(Service Provide Interface)是动态加载的一种实现(基于接口的编程,具体的实现类通过配置文件里指定完整类名,然后通过反射拿到class,进而拿到对象)。常见的实现例如JDBC,SLF4J,SpringBoot里的starter组件等,只指定接口,具体的实现类进行动态指定。1 完整代码案例1.1先定义一个接口package com.tom.blog.spi;public interface SPIservice { void execute...

2020-11-15 23:48:56 231

原创 Solid设计原则

开闭原则(总纲,其他原则是其实现)软件实体应当对扩展开放,对修改关闭即当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求1 里氏替换原则子类可以扩展父类的功能,但不能改变父类原有的功能即子类不能覆盖父类非抽象方法(不能重写),而是新增独有方法注:任何基类出现的地方,子类一定可以出现,方便使用父类替换子类2依赖倒置原则面向接口编程,程序要依赖于抽象接口,不要依赖于具体实现即对于变量或者传参数,尽量使用抽象类,或者接.

2020-10-25 23:56:15 30015 1

原创 简单工厂/工厂方法/抽象工厂

1 简单工厂根据参数由工厂类来创建对象/** * 简单工厂 * 目的:根据参数获取对象 * 缺点:新增实现类时,需要修改代码,不好动态扩展(可参考工厂方法) */public class SimpleFactoryDP { public final class Const { static final int PRODUCT_A = 0; static final int PRODUCT_B = 1; } //抽象产品

2020-10-25 22:56:14 29652

原创 SpringBoot热部署

1 原理使用2个类加载器,一个类加载器加载不会改变的类(第三方jar包),另一个类加载会更改的类(我们的代码),代码修改时,重新创建第二个类加载器,由于需要加载的类较少来实现较快的重启时间。2 配置方式2.1 pom增加依赖 <dependencies> <!--devtools热部署--> <dependency> <groupId>org.springframework.boo

2020-07-22 17:23:05 227

原创 Linux

1 文件1.1查找文件1.1.1 find 全盘查找格式: find<指定目录> <指定条件> <指定动作>find /etc -name elasticsearch.yml查看目录下的所有文件(包括子目录里的文件) find /root -type f-type f:指定文件-type d:指定目录1.1....

2020-01-19 17:27:46 354

原创 Linux设置脚本开机启动

目的:针对Ubuntu和Centos通用的开机启动先准备一个脚本:例如启动java程序的脚本java.sh (存放位置:/root/java.sh)#! /bin/sh### BEGIN INIT INFO# Provides: start-adb-connect-manager# Required-Start: $remote_fs $...

2020-01-13 22:54:57 380

原创 重装Windows/Linux系统

1 windows1.1如果需要重装的电脑已经是win系统且可以上网,可以选择小白等工具在线重装,简单粗暴但会有捆绑软件1.2非win系统或者电脑不能上网时,需要借助一台能上网的电脑和U盘,有2种安装方式:安装版和GHOST版GHOST版:利用ghost软件将某个硬盘/分区制作成windows系统.gho压缩包(网上有现成的),然后再用ghost软件进行还原安装过程:...

2020-01-06 21:53:41 1077

原创 kubectl 连接 apiServer

前提:现在已经有一个K8s集群,我们需要在本地(非master节点上)运行kubectl步骤:1 本地安装kubectlsudo apt-get update && sudo apt-get install -y apt-transport-httpscurl -s https://packages.cloud.google.com/apt/doc/apt-key....

2019-12-10 20:18:14 3302

原创 rabbitmq启动报错 .erlang.cookie must be accessible by owner only

问题:.erlang.cookie must be accessible by owner only出现原因:出现这个情况是因为这个文件的权限有问题出现场景:rabbitmq安装时由于该文件不存在,会自动创建并且赋权,是不会报这个错误当rabbitmq重启时,可能该文件的权限被修改,重启时会报这个错误或者使用docker挂载该文件时,挂载的文件权限不是400(所有者读)...

2019-11-29 16:43:11 33537

原创 CPU类型

生产CPU的有3个厂商:amd inter armamd(性价比高)和inter(稳定性高):使用CISC(复杂指令集),CPU的性能高,价格昂贵,耗电高。常用在PC机和服务器(对性能有要求)arm:使用RISC(精简指令集),CPU性能相对低,价格便宜,耗电低。常用在手机等电子产品(对耗电有要求)和物联网设备(对费用有要求)常见的CPU架构:X64: 64位amd , 常见...

2019-11-27 11:09:20 585

原创 树莓派部署K3S集群

官网参考:https://rancher.com/docs/k3s/latest/en/quick-start/K8S非常消耗资源,在性能一般的机器上不适合部署。K8S的精简版K3S就是为了针对这种情况,将很多性能一般的机器(例如树莓派)加入到集群1 安装raspberry操作系统默认用户名/密码:pi/raspberry1.1 修改主机名sudo hostnamectl s...

2019-11-25 21:34:33 2196 2

原创 Java 数据结构

List:ArrayList(数组):线程不安全内部结构:transient Object[] elementData; 总结:1索引查询( get(0) )/插入( add("xxx") )复杂度为O(1);指定位置插入(add(3,"xxx"))的复杂度为O(n)2默认容量大小为10,每次扩容为1.5倍3 指定位置插入和扩容会需要复制数组,底层是调用Sys...

2019-10-25 09:13:37 198

原创 TCP

1 TCP报文首部源端口和目的端口,各占2个字节,分别写入源端口和目的端口; 序号,占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始; 确认号,占4个字节,是期望收到对方下一个报文的第一个数据字节的序号。例如,B收到了A发送过来的报文,其序列号字...

2019-10-14 16:57:21 1415

原创 匿名内部类访问final修饰的方法成员变量

问题:匿名内部类访问方法成员变量时,该变量必须加上final,否则编译不通过public class Main { public void useMyInterface() { final Integer num = 23; MyInterface myInterface = new MyInterface() { @Over...

2019-10-10 14:00:30 345

原创 Java NIO

1 buffer/cache共同点:通过减少访问硬盘/内存的次数提升效率1.1.1buffer(缓冲):从硬盘读取大量数据放到缓冲区供程序使用例如下面读取文件的代码,如果每次读取100个字节都去访问硬盘则效率非常低。所以可以每次读取硬盘时读取大量数据到缓冲区,用户需要时直接从缓冲区去取,缓冲区没有数据时再重新去读取硬盘 File file = new File(...

2019-09-29 09:53:07 423 1

原创 spring 修改返回内容的编码格式

第一种:直接使用produces @GetMapping(value = "login/home",produces = "text/html;charset=gb2312") @ResponseBody public void login1() { return "我";}第二种:response.setContentType 配合 response.ge...

2019-09-11 16:22:32 977

原创 IO 同步 异步 阻塞 非阻塞

参考:https://blog.csdn.net/historyasamirror/article/details/5778378一个IO操作(文件IO / 网络IO)包括两步:第一步:数据复制到内核空间第二步:数据从内核空间复制到用户空间几种常见I/O模型的对比:阻塞IO:阻塞直到2个阶段都完成非阻塞IO:第一步立即会返回结果,error表示数据没...

2019-09-10 22:08:04 165

原创 Ubuntu下k8s安装教程

官网:https://kubernetes.io/docs/setup/independent/install-kubeadm/1 我的主机是在aliyun上,默认配置了阿里源配置阿里源:修改/etc/apt/source为:deb http://mirrors.aliyun.com/ubuntu/ xenial maindeb-src http://mirrors.aliyu...

2019-09-10 21:22:46 104595 4

原创 AQS

参考文档1 参考文档2AQS(AbstractQueuedSynchronizer),是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的AQS核心思想:如果被请...

2019-09-10 15:45:25 144

原创 用两个栈实现队列

思路:Push:数据都Push到栈APop:将A的数据放入B,然后Pop出B的顶部元素,最后再将数据重新放入A// 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack...

2019-09-06 10:19:47 193

原创 Java 线程池

1 线程池public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue);public ThreadPoolExecutor(int corePoolSize,int ma...

2019-09-03 17:18:19 158

原创 Java 强引用 软引用 弱引用 虚引用 ThreadLocal

强引用规则:使用最普遍的引用,当内存空间不足,JVM宁愿抛出OutOf MemoryError错误,都不会回收它 // 通过new产生,user就是个强引用 User user = new User();软引用规则:系统内存不足时,将会把这些对象列进回收范围进行GC回收 byte[] cacheData = n...

2019-09-03 13:25:46 803

原创 Java volatile

前景提示:(多核CPU下)每次线程从内存里读写线程共享的变量,会将内存的变量复制到CPU缓存里再进行读写,导致内存的数据发生变化,处于某个CPU的线程不一定能拿到已经发生变化的实时数据,读写的是CPU缓存的数据MESI(缓存一致性协议):当CPU写数据时,如果发现操作的变量是共享变量,即在其他CPU中也存在该变量的副本,会发出信号通知其他CPU将该变量的缓存行置为无效状态,因此当...

2019-08-30 10:57:10 121

原创 Synchronized实现原理

参考1 参考21 Synchronized的三种应用方式1.1 修饰实例方法对象锁,进入同步代码需要获得当前实例对象的锁1.2 修饰静态方法类锁,进入同步代码需要获得当前类对象的锁1.3 修饰代码块对象锁,进入同步代码库前要获得给定对象的锁2 Synchronized实现互斥锁通过管程对象(又称monitor对象或监视器锁),每个对象都存在...

2019-08-29 13:34:00 173

原创 二叉树遍历

根据根节点的顺序 分为:前序/中序/后序例如上图: A:根节点 B:左节点 C:右节点前序遍历:ABC(顺序:根,左,右)中序遍历:BAC(顺序:左,根,右)后序遍历:BCA(顺序:左,右,根)案例:比如上图二叉树遍历结果前序遍历:ABCDEFGHK中序遍历:BDCAEHGKF后序遍历:DCBHKGFEA可以总结一些特点:特性A,对于...

2019-08-26 09:05:24 425

原创 Java JVM

1 运行时内存数据1.1 线程私有:虚拟机栈:每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表(基础数据类型+对象引用),操作数栈,方法返回信息等数据。从方法调用直至执行完成的过程对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。注:当线程请求栈的深度超过当前Java虚拟机栈的最大深度的时候,就抛出SOF异常当线程请求栈时内存用完了,无法再动态扩展会抛...

2019-08-26 09:05:08 355

原创 链表(从尾到头打印链表)

题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList public class Solution { ArrayList<Integer> arrayList=new ArrayList<Integer>(); public ArrayList<Integer> printListFromTailT...

2019-08-22 20:48:50 141

原创 字符串(替换空格)

题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy思路:用String.replace函数public class Solution { public String replaceSpace(StringBuffer str) { return str...

2019-08-22 20:40:21 583

原创 数组(二维数组的查找)

题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数思路:遍历,由于从左到右,从上到下递增,那么某一个数,比它小的一定在其左下方例如:下图中,target为3时,比较到第一行的4时,由于小于4,target一定小于第3列后面的元素 ...

2019-08-22 20:07:20 136

原创 一致性Hash算法

常规Hash(散列)是通过取模将数据均匀的放置在各个节点,在网络请求里适合用于负载均衡(例如nginx里可以配置成Hash的负载,确保每个IP的请求走固定服务器)。常规hash取余(取模):这样的配置不需要Session共享,因为每次IP都是访问固定服务器。问题来了 :一旦某台机器崩掉了或者想增加一台机器抗压,此时hash取模时,原本IP访问的固定服务器会改变(可能所有已登录的用户...

2019-08-09 17:01:57 753

原创 取模运算和取余运算

对于整数 a,b 来说,取模运算(mod)或者取余运算(rem)的方法要分如下两步:1、求整数商:c=a/b2、计算模或者余数:r=a-(c*b)求模运算和求余运算在第一步不同取余运算在计算商值向0方向舍弃小数位取模运算在计算商值向负无穷方向舍弃小数位例如:1.ab符号位不一致时:4/(-3) 约等于 -1.3在取余运算时候商值向 0 方向舍弃小数位为...

2019-08-08 16:52:33 3741

原创 Java HashMap解析

HashMap:数组+链表(或红黑树)Hash碰撞:所谓“碰撞”就是多个hash值不同的元素计算得出同一个桶(相同的数组下标),在put时出现冲突桶:数组里的每一个元素Q:怎么计算key对应的数组下标?A:put()方法里,将hash值和(数组容量-1)进行异或(&)操作(取hash的低位)注:在put()方法里,需要根据hash值拿到对应的数组下标:...

2019-08-06 17:39:40 871

转载 java基础 基本位运算

1. 2进制和10进制转换1.1 2转10Java:Integer.valueOf("0101",2).toString;1.2 10转2JAVA:Integer.toBinaryString(int i);2.原码/补码/反码在Java中,所有正数/负数 的表示方式都是以补码形式来表示正数:原码、反码、补码相同负数:对原码进行符号位...

2019-08-06 13:50:25 831

原创 CAS登录登出

CAS实现CAS理论CAS:中央认证服务,解决sso单点登录问题登录:登出:A系统结束本地Session,然后通知CAS结束Session,CAS通知各个子系统结束Session...

2019-08-01 21:57:00 1384 1

原创 spring security (originalChain和additionalFilters)

Spring Security过滤器其实分成2部分:originalChain 和additionalFilters顺序就是先走我们定义的过滤器(additionalFilters),然后再走内部过滤器(originalChain)代码实例:我们配置在httpSecurity的都是在additionalFilters里,在WebSecurity里配的在originalChain里...

2019-08-01 09:26:14 2112 3

原创 SpringSecurity过滤器顺序

官网地址官网定义的关键过滤器顺序:源码里所有的过滤器顺序:默认情况会启动以下过滤器:(默认设置在:WebSecurityConfigurerAdapter 的 getHttp()方法里)怎么替换默认的过滤器:http.addFilterAt() 不能替换默认的过滤器,只是在相同的位置放置一个过滤器,原本的过滤器仍然起作用可以disa...

2019-07-30 20:37:15 14885

阿里巴巴Java开发手册1.4.0.pdf

阿里巴巴开发手册最新1.4.0版本,原文免费下载地址:https://yq.aliyun.com/download/2720

2019-08-06

大型分布式网站架构设计与实践.pdf

大型分布式网站架构设计与实践 陈康贤 电子工业出版社 2014年9月出版

2019-07-10

ModbusSlave7.tar

modbusSlave7 用于模拟测试modbus(包括破解码) 版本:7.0

2019-05-21

ModbusPoll7.tar

modbusPoll工具(包含破解码),用于模拟/测试modbus 版本:7.0

2019-05-21

rabbitmq实战指南

作者:朱忠华 出版日期:2017年11月 电子工业出版社 springboot整合rabbitmq:https://blog.csdn.net/qq_35720307/article/details/89531782

2019-05-05

Kubernetes权威指南 第2版

Kubernetes权威指南 第2版 中国人写的书,不是堆代码 2016年出版,内容有部分是过时的

2019-03-13

深入分析Java Web技术内幕

深入分析Java Web技术内幕 供大家下载查看,主要是因为别人提供的需要太多的下载积分 百度网盘链接:https://pan.baidu.com/s/1tlGHyeqDRm_RwLrc5w437g 提取码:fewm

2019-03-12

navicat Premium 12.1.12

navicat Premium 版本:12.1.12 可以用作mysql postgresql等数据库的可视化工具

2019-01-22

空空如也

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

TA关注的人

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