自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 收藏
  • 关注

原创 CMS 中 三色标记概述

CMS 清理流程三色标记概述三色标记其实就是用三种颜色区分不同的内存区域。黑色标记:自己已经标记,直接引用的对象区域已经标记灰色标记:自己标记完成,但引用区域没来得及标记白色标记:没有遍历到的区域,可以理解为没有标记CMS在每次进行标记的时候。从根root广度优先遍历。第一次遍历根root最终被标记为黑色,且引用对象标记为灰色。再次遍历时黑色区域引用区域也已经标记,则不会再次扫描标记,灰色区域需要进行扫描并最终标记为黑色区域。白色区域<未标记>的认为是垃圾,进行清理。可能

2022-05-09 20:36:50 2750 1

原创 Java8新特性->stream流式处理

stream特点不改变原来的数据源,会将操作后的数据保留到另一个对象中惰性求值,流在中间处理过程中,只是对操作进行记录,而不会立即执行常用方法创建流stream() 获取一个顺序流parallelStream() 获取一个并行流中间操作筛选与切片filter 过滤流中的某些元素limit 获取n个元素skip 跳过n元素,配合limit 可实现分页distinct 通过流元素的hashCode跟equals去重元素映射map 接收一个函数作为参数,将每个元素映射为

2022-04-01 17:01:52 381

转载 分布式事务一致性解决方案

最近工作上进行重构,切流量的期间会涉及到新老系统同步更新的情况,这样就设计到多系统保证一致性的问题。针对这个的解决方案,看了一个博客,写的很不错,记录一下~https://zhuanlan.zhihu.com/p/183753774...

2022-03-31 21:25:29 152

原创 分布式系统的了解学习

分布式系统的基本功能配置中心注册中心服务网关负载均衡RPC调用服务熔断服务降级服务限流全局锁控制总线分布式事务服务安全链路追踪集群管理事件驱动任务调度云连接器函数计算配置中心功能区分不同环境的配置<开发,测试,生产>配置动态实时刷新 <实时监听到配置的更改,进行热部署>配置的权限控制配置的版本控制<支持版本回退>配置的灰度发布 <支持部分实例测试通过后,再推到全部实例>注册中心简介注册中心相当于微

2022-03-24 21:37:09 445

原创 使用vim 改变文件编码格式

这几天有个数据导出的需求,但是我用脚本导出表格后,编码是utf-8想着在代码里改一下编码,但是却发现了一种更方便的方式可以使用 vim 改变文件的编码格式在实际生活中相当有用啊!表格导出表格导出其实不需要在后台拼接<table>标签,感觉写起来很费劲有一种更简单实用的表格格式是 .csv 格式,这种文件格式是用 英文逗号分割的,在表格识别时默认以逗号分割 <十分方便>但是在使用的时候有个问题是 – 导出的文件默认按utf-8编码,需要转成 gbk编码这就引出了我后.

2021-09-09 21:29:11 8046 1

原创 记录.vimrc配置。打造适合自己的vim

vim ~/.vimrc " ====================================== " 基本配置 " ====================================== " 不兼容vi命令 set nocompatible colorscheme desert " 打开语法高亮 syntax on " 开启文件类型检查,并且载入与该类型对应的缩进规则。 filetype off " 在底部状态栏显示当前模式,如插入、命令模式 set show

2021-08-11 13:55:20 103

原创 git 深入了解

安装与配置sudo apt-get install gitgit config --global user.name "your Name"git config --global user.email "[email protected]"![在这里插入图片描述](https://img-blog.csdnimg.cn/20210713135047539.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,tex

2021-07-13 18:04:36 207

原创 文本分析工具与shell编程

shell编程这个之后再更,确实刚开始使用,还没有达到总结的水平不过 简单说就是 把命令写到sh文件里面,因为是解释形语言,会按行读取执行awk命令linux中处理文本文件的一个应用程序awk 动作 文件名awl会根据空格和制表符,将每一行分成若干字段 ,用 $n 表示第n个字段awk ‘{print $0}’ demo.txt 其中 print是打印命令 $0表示当前行,意思是将每一行都原样输出awk -F ‘:’ ‘{print $1}’ demo.txt -F参数可以指定

2021-04-02 17:24:46 130

原创 Vim 让你的编程更高效~

很久之前我就尝试用过vim,但是因为自动变成命令模式,把我整的很烦,后来就不用了。在看到同事用Vim十分流的时候,激起了我重新使用的渴望不得不说其实学习Vim应该并不麻烦,关键是要摆正心态Vim 模式总结命令模式 此时可以使用命令来进行操作编辑模式 就是咱们的输入末行模式 进行保存或者设置命令模式的快捷键建议理解的去记忆删除(vim中的删除会复制到剪切板中)x 删除当前光标处字母X 删除当前光标上一处字母D 删除光标至行尾的内容db 删除光标至行首的内容 d + .

2021-03-28 14:43:20 178 4

原创 PHP快速入门

PHP快速入门php是弱类型语言变量变量要以 $ 开头变量不需要申明,需直接赋值作用域分为:local,global,static,parameter函数中想要调用全局变量,前面必须加 global关键字在某个局部变量前面加static,可以做到函数执行结束不被删除,但是作用域仍是函数内输出语句echo 可以输出一个或多个字符串 echo "这是一个", "字符串,", "使用了", "多个", "参数。";。且没有返回值print 只允许输出一个字符串,返回值总为1数据

2021-02-02 20:49:39 130

原创 JVM---清理算法和垃圾回收器<整理篇>

四大清理算法标记清除算法标记整理算法复制算法分代收集算法

2021-01-22 20:23:55 135

原创 JVM初步了解

JVM跨语言的平台虚构出来的一台计算机。有自己的字节码指令集和内存管理任何语言只要能编译成.class文件,符合class文件的规范。都可以在JVM上运行java从编码到执行到过程:java文件经过javac 编译为class文件class文件经过类加载跟java的核心类库公共加载到内存中去通过字节码解释器解释为执行引擎,执行引擎可直接跟系统硬件交互(所以说java是半编译,半解释语言)。对于经常被使用到的类(当然是少部分),而是会通过JIT即时编译器编译为系统平台可以直接使用的文件。不

2021-01-22 20:23:13 67

原创 TCP粘包和拆包

粘包拆包问题出现的原理粘包拆包问题是发生在网络比较底层的问题,在数据链路层,网络层以及传输层都有可能发生。我们日常的网络应用开发大都是在传输层进行的UDP有消息保护边界, 不会发生这个问题出现粘包和拆包主要有以下几个原因应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包问题应用程序写入的数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包问题进行MSS(最大报文长度)大小的TCP分段,当TCP报文长度 - TCP头部长度 > MSS的时候,将发生拆包

2021-01-14 17:18:11 165

原创 使用openssl生成自签证书使项目支持https

使用openssl生成自签证书使项目支持https生成CA证书创建私钥 openssl genrsa -out ca-key.pem 1024创建证书请求 openssl req -new -out ca.csr -key ca-key.pem之后按个人的实际情况,填写信息 (这些信息会标明在证书里面)自签署证书 openssl x509 -req -in ca.csr -out ca.cer -signkey ca-key.pem -days 3650生成server证

2021-01-13 16:29:49 353

原创 golang整合swagger的实现以及效果

golang整合swagger的实现以及效果Swagger是一个在线接口文档使用工具,对查看项目接口文档特别是自己测试时有很大的用途效果图整体效果图:可以对接口进行分组, 并且增加注释单个接口的效果图:会根据注释自己生成相应的参数,点击execute 可以获取返回结果golang实现方式 ginSwagger "github.com/swaggo/gin-swagger" "github.com/swaggo/gin-swagger/swaggerFiles" "rtp-c

2021-01-13 16:27:45 3395 1

原创 密码安全存储

关于现在的密码存储的安全性,有很多需要考虑的问题. 直接明文存储或者 双向加密(可以解密)存储都是不可取的有很多人使用了单向加密的方式-----MD5加密但是MD5加密后的安全性并不高。同样可以解出来因此产生了hash+盐的存储方式MD5加密特性:单向加密,不可以解密。特性:同一个密码每次MD5加密后生成的字符串是相同的基于相同这一个特点,只要枚举所有短密码进行 md5 加密,做成一个索引表,就能轻易的逆推出原始密码hash+盐盐是指随机生成的key很多加密算法都是采用ha.

2021-01-04 18:25:15 483

原创 算法小小心得===会持续更新~

java的实用方法System.arraycopy(来,begin,去,begin,length)Character.isLetterOrDigit(ch) 是字母或者数字返回true,不是返回false需要注意的特殊情况当遇到有关数字转化的问题时,要考虑Integer的边界问题

2020-12-31 20:27:03 87

原创 go语言的学习----结构体与方法

结构体t=new(T) 和 var t T的区别t=new(T) 变量t是一个指向T的指针var t T 称为t是类型T的i个实例结构体的内存布局Go 语言中,结构体和它所包含的数据在内存中是以连续块的形式存在的,即使结构体中嵌套有其他的结构体,这在性能上带来了很大的优势。不像 Java 中的引用类型,一个对象和它里面包含的对象可能会在不同的内存空间中,这点和 Go 语言中的指针很像下面的例子清晰的说明了这个问题:结构体工厂创建实例(构造方法)func NewFile(fd in

2020-11-24 16:04:45 494

原创 go语言的学习------Map

Mapvar map1 map[keytype]valuetypekey可以是任意可以用==或者!=所以数组,切片,结构体不能作为key(含有数组切片的结构体不能作为key,只包含内建类型的struct是可以作为key的)。value 可以是任意类型的...

2020-11-19 14:32:16 158

原创 Docker的学习与使用

DockerFile编写

2020-11-18 15:29:25 116

原创 go语言的学习------数组与切片

数组数组是具有唯一类型的一组已编号且长度固定的数据项序列如果想让数组元素类型为任意类型的话,可以使用空接口作为类型go语言中的数组是一种值类型(不像C/C++中是指向首元素的指针),所以可以通过new() 来创建 var arr=new([5]int)数组定义的三种方式var arrAge = [5]int{18, 20, 15, 22, 16}[10]int{1,2,3}:这是一个有10个元素的,除了前三个其他元素都是0var arrLazy = […]int{5, 6, 7, 8,

2020-11-11 15:12:14 139 1

原创 go语言的学习------控制结构与函数

控制结构Go完全忽略了if switch 和 for 结构中的括号,看起来更加简洁一点可以使用return来结束函数的执行,使用goto与标签来调整执行的位置runtime.GOOS上个常量,表示操作系统类型Abs()用来返回一个整形数字的绝对值isGreater()用来比较俩个整形数字的大小if 可以包含一个初始化语句(如:给一个变量赋值)(在初始化语句后方必须加上分号)if val := 10; val<max{// do something}多返回值函数的错误在函数

2020-11-05 20:03:59 129

原创 go语言的学习-----基本类型

基本类型数字类型go语言支持整数和浮点数,并且支持复数位运算采用补码go语言也有基于架构的类型,例如:int,uint等。这些类型的长度根据所在的操作系统而变。比如在32位机器,int类型长度为32,在64位机器,int类型长度为64go语言中没有float类型。(只有float32,float64)没有double类型增加前缀0来表示8进制,增加前缀0x来表示16进制,使用e来表示10的连乘(如:1e3=1000)go语言中不允许不同类型之间的混合使用,但是对于常量的类型限制很少,允许常量

2020-10-29 17:40:17 226

原创 go语言的学习-----常量和变量

常量与变量常量用const定义,用来存储不可改变的数据const pname [type]=value 可以省略type,,因为可以根据值来推测其类型const c2=自定义函数()会报错,因为在编译期间自定义函数属于未知,无法用于常量的赋值,但内置函数可以使用常量也允许并行赋值的形式 const beef, two, c = "eat", 2, "veg"常量在go中是弱类型如何体现:1. 给int起个别名 sint2. 如果函数形参为sint 而传参为int,编译期会出错误,反之一样

2020-10-28 11:18:11 165

原创 go语言的学习-----基本结构和类型

go语言的基本结构和类型文件名与关键字有效的标识符必须以字符(可以使用任何 UTF-8 编码的字符或 _)开头,然后紧跟着 0 个或多个字符或 Unicode 数字_ 被称为空白标识符。他可以用于变量的声明和赋值(任何数据类型都可以赋值给他),但是赋值之后将会被丢掉,无法在后续代码中使用,而且也不可以使用这个标识符进行赋值和运算程序的代码通过语句来实现结构化。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。包与导入package ma

2020-10-27 16:34:17 103

原创 java8新特性:lambda表达式

lambda表达式lambda表达式实现的接口必须是函数式接口函数式接口:接口中,要求实现类必须实现的抽象方法有且只有一个lambda表达式的基础语法在写lambda表达式的时候,只需要关注俩部分即可:参数列表 和 方法体(参数) -> {方法体};InterfaceName lambda1=(a) ->{System.out.println(“这是一个有参无返回值的方法,参数a:”+a);};//a 具体的参数类型会跟 InterfaceName定义方法时的参数列

2020-10-20 14:29:34 82

原创 varchar int查询 到底什么情况走索引的问题

结论:表中的字段类型为整型时,无论查询用字符串类型的数字还是int类型的数字均能走索引表中字段类型为字符类型时,查询的值为整型时,无法走索引如果字段做了函数计算后,该列上即使有索引也无法使用(MySQL8.0之前的版本)实验操作# 创建表test1create table test1(id int primary key,c_no int ,c_2 varchar(1),key c_no(c_no));# c_no字段为int类型,下面分别用整型和字符串进行比较,查看是否走索引。对应的.

2020-10-18 11:41:53 708

原创 Java类加载的过程 ----双亲委派

Java类加载类的生命周期#mermaid-svg-IxC4Hkt4bnb9EW0l .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-IxC4Hkt4bnb9EW0l .label text{fill:#333}#mermaid-svg-IxC4Hkt4bnb9EW0l .node rect,#mermaid

2020-10-17 23:37:25 87

原创 Hadoop学习——hdfs

HDFS的整体架构namenode用于存储元数据接收读写请求元数据包括:1. 抽象目录树2. 存储数据和block的对应关系3. block存储的位置datanode负责真正的数据存储,存储数据的block真正处理读写secondarynamenode冷备份节点:助理 当namenode宕机的时候不能主动切换为namenode主要作用是:namenode宕机的时候帮助namenode恢复帮助namenode做一些事情,分担namenode的压力四大机制心跳机制nameno

2020-09-25 19:50:20 100

原创 Http请求

Http1.0和Http1.1的比较http1.1增加keep-alive 持久连接 (在请求头部增加标识)能不能开启多个tcp连接去下载资源呢?是可以的。 谷歌浏览器运行打开6个tcp连接。但不允许打开多个。因为打开多个就相当于D DOS攻击了但是在http1.0和http1.1 队头阻塞 ->请求是严格按照请求顺序处理的。比如先请求1后请求2,则必须在等待1 回来并处理后才能处理2即使开再多的tcp并发链接,队头阻塞也是一个很大的性能瓶颈。Http1.1和Http2.0比

2020-09-21 21:47:59 94

原创 前后端分离解决跨域的问题

跨域问题出现的原因浏览器都是基于同源协议的同源政策的目的:是为了保证用户信息的安全,防止恶意的网站窃取数据。同源协议是指:- 协议相同 - 域名相同 - 端口相同同源协议造成的问题:- Cookie、LocalStorage 和 IndexDB 无法读取 - DOM 无法获得 - AJAX 请求不能发送前后端分离跨域问题的解决方法基于nginx正向代理解决server{ listen: 80

2020-09-21 21:34:59 124

原创 并发编程----线程池与future

线程池业务场景分为IO密集型和CPU密集型IO密集型通常 存在线程等待阻塞 线程池最大线程数配置为2×CPU核数CPU密集型通常 不存在等待,每个线程过来都会运行的 线程数最大线程数配置为CPU核数线程池执行原理执行顺序当线程数小于核心线程数时,创建线程。当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。当线程数大于等于核心线程数,且任务队列已满1若线程数小于最大线程数,创建线程2若线程数等于最大线程数,抛出异常,拒绝任务为什么等待队列要使用阻塞队列因为使

2020-09-21 15:35:34 263

原创 数据结构---散列(hash)C++底层版

散列将元素通过一个函数转换为一个整数,使得该整数可以尽量唯一地代表这个元素最常见的散列应用,就是直接把key%length作为数组下标进行存储存在hash冲突的问题C++中解决hash冲突的问题线性探查法当H(key)被占用,就占用 H(key+1) 以此类推,超出表尾就回到表头这个做法容易出现扎堆的现象平方探查法当H(key)被占用,将按下面的顺序检查表中的位置:H(key)+12 , H(key)-12, H(key)+22,H(key)-22如果H(key)+k2超过

2020-09-17 11:49:49 389

原创 算法学习day5---DFS与BFS

DFS 深度优先解决的问题:给定一个起始点和一个终点,判断是否有一条路径可以从起点连接到终点只关注路径存在与否,不在乎其长短深度优先遍历必须依赖于栈,递归时调入函数相当于入栈,执行完函数相当于出栈...

2020-09-16 16:36:14 104

原创 算法学习day4---排序

排序算法和其时间复杂度插入排序 堆排序 归并排序 快速排序 是最重要的

2020-09-15 21:29:13 279

原创 算法学习day3--递归与回溯

递归与回溯递归的基本性质:函数调用本身将大规模的问题不断地变小,再进行推导的过程回溯:利用递归的性质从问题的本身出发,不断的尝试。返回一步甚至多步再做选择,直到抵达终点的过程递归经典案例:汉诺塔算法思想要懂得如何将一个问题的规模变小再利用从小规模问题中得到的结果结合当前的值或者情况,得出最终的结果通俗理解将要实现的递归函数,看成已经实现好的直接利用解决一个子问题思考:如何根据子问题的解以及当前面对的情况得出答案递归算法是自顶向下,动态规划是自底向上递归写法结构总结:第一步:

2020-09-08 21:51:54 571

原创 中间件:nginx应用篇

代理正向代理为客户端做代理,代替客户端去访问服务器 最常见的是VPN反向代理为服务端做代理,代替服务端接收客户端的请求

2020-09-08 13:54:10 315

原创 java多线程---多线程原理

多线程线程模型用户级线程(ULT)用户程序实现,不依赖操作系统核心。应用提供创建,同步,管理线程的函数来控制用户线程 (自己管理)不需要用户态\核心态切换,速度快内核级线程(KLT)系统内核管理线程内核保存线程的状态和上下文信息线程的创建,管理和调度由内核完成进度比ULC慢java使用的线程模型:内核级线程KLTjava线程池的参数corePoolSize 核心线程数maximumPoolSize 总线程数keepAliveTime 等待时间时间单位

2020-09-08 09:55:33 92

原创 缓存穿透缓存击穿与雪崩

缓存穿透 (查不到导致)用户查询一个数据,缓存中没有就会去持久层数据库中查询,高并发情况下(秒杀),缓存中没有命中,于是都去请求持久层数据库,给持久层数据库造成很大的压力,这个时候就相当于出现了缓存穿透。解决方案布隆过滤器布隆过滤器是一种数据结构,把所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力缓存空对象当持久层数据库不命中时后(数据库中没有),返回一个空对象,并把空对象存储在缓存层中, 下次有用户访问时,则会返回给其一个空对象

2020-09-07 21:41:15 86

原创 Redis----哨兵模式/redis-sentinel

哨兵模式 (redis-sentinel)出现问题旧的主从切换的方法:当主服务器宕机后,需要手动将一台从服务器切换为主服务器,费时费力,还会造成一段时间内服务不可用。Redis从2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题 (自动版)其原理是:哨兵通过发送命令,等待redis服务器响应,从而监控运行的多个redis实例单哨兵模式:哨兵集群模式假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上故障转移,仅仅是哨兵1主观认为主服务器不可用,这个现象称为主观下线,当后面

2020-09-07 21:15:52 99

空空如也

空空如也

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

TA关注的人

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