自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 资源 (1)
  • 收藏
  • 关注

原创 MongoDB集群和安全

通其它中间件一样,也是通过角色和权限进行配置,一个角色可以包含多个权限,权限包括对资源的CRUD。内置角色,其中readWrite比较常用:单实例环境:直接给用户赋角色即可,创建语法如下。需要在mongodb开启认证,启动的时候增加参数 --auth,可以在配置文件中增加配置副本集环境:应用和单机都是相同的,都需要用户名和密码,主要不同的是各个节点之间安全通信处理方式除了创建用户之外还需要生成key文件增加用户并赋角色生成一个key文件,使用openssl即可将key文件复制到各个节点中。...

2022-08-12 18:31:04 743

原创 Mangodb简单使用

1、数据模型:同时可以使用一些脚本进行逻辑的处理2、特点高性能高可用高扩展丰富的查询方式无模式,数据结构比较松散(BSON存储)3、配置文件相关内容# where to write logging data. 日志存储systemLog:# Where and how to store data. 数据存储位置storage:journal:# engine:# how the process runs 后台运行。......

2022-07-25 17:33:13 730

原创 Dubbo的简单使用

一、架构演进单体架构 垂直应用架构:根据业务边界拆分,每个功能称为一个服务 公共的业务service,导致很多部分的冗余 分布式应用架构:把公共服务器的service提取成一个服务 网络通讯的问题,使用RPC框架 服务集群的负载均衡处理 服务如何被发现 服务如何被治理 服务之间如何高效的通信 微服务架构,主要解决以下几个问题 服务的注册和发现 服务的搞笑通信 服务的治理:服务权重、负载均衡、服务熔断、限流等等 二、注册中心1、概述主流的注册中心:

2022-07-08 08:47:40 7121

原创 Mysql CPU占用100%查询

这几天每天都会收到服务器负载报警,抽出时间查看一下原因。进入到服务器使用top命令查看:能够看到是mysql常年霸居榜首,导致服务器负载变高。理论上来讲,数据量没有那么大,因为很多数据都是没用的,前一段时间刚刚清理过。看了一下,最大的表也就40多万数据。初步分析应该是sql编写的有问题,导致负载升高。先查看mysql的慢查询设置:show variables like '%slow_query_log%';开启慢查询:set global slow_query_log=1

2022-03-31 08:18:01 2303 1

原创 Zookeeper应用及原理

一、zookeeper的介绍1、什么是zookeeper2、zookeeper的应用场景二、搭建zookeeper服务器1、zoo.cfg配置文件说明2、zookeeper服务器操作命令三、zookeeper内部的数据模型1、zookeeper是如何保存数据的2、zookeeper中znode是什么样结构3、zookeeper中节点znode的类型4、zookeeper的数据持久化四、zookeeper客户端的使用(zkCli)五、Curator客户端的使用

2022-03-20 21:31:31 3907

原创 Tomcat设置基础

一、web应用配置在tomcat中conf文件夹下,有一个web.xml能够配置相关内容。1、ServletContext初始化参数可以使用<context-param>配置servlet的初始化参数,也就是可以在程序中获取到这些配置的参数。2、会话配置使用<session-config>进行session配置,参数如下:3、Servlet配置主要包含servlet和servlet-mapping配置。当没配置load-on-startup的时候,

2022-03-19 12:33:23 3605

原创 TOMCAT原理

一、TOMCAT的基本架构二、Coyote连接器三、Catalina容器四、启动流程介绍五、请求处理流程介绍六、Jasper引擎七、服务器配置1、Server、Service2、Executor3、Connector4、Engine、Host5、Context...

2022-03-15 22:16:12 5265

原创 单例模式的几种写法

单例模式的编写需要注重一下几点:是否懒加载 是否线程安全 是否通过反射、克隆、序列化进行破坏第三点也是面试中长问的,其实让其无法调用2次构造函数即可:private Singleton(){ if(instance != null){ throw new RuntimeException("单例模式禁止反射创建实例!"); } }这个只是其中一种方式,其它方式也是大同小异,不让调用2次构造函数。下面从两个方面分别去讨论单

2022-02-16 16:01:38 153

原创 Centos7搭建Gitlab

1、安装必要依赖、打开防火想配置、配置支持邮件依赖sudo yum install -y curl policycoreutils-python openssh-server打开防火墙和SSHsudo systemctl enable sshdsudo systemctl start sshdsudo firewall-cmd --permanent --add-service=httpsudo systemctl reload firewalld安装邮件支持sud.

2022-02-15 17:34:49 749

原创 Redis之epoll和IO多用复用

一、redsi的IO多路复用redis利用epoll来实现IO多路复用,将连接信息和事件放入队列中,一次放到文件事件分派器,事件分派器将事件分发给事件处理器。IO多路复用,使用的是linux内核函数,它的使用有三种select、poll、epoll,redis使用的就是epoll进行实现。在redis中,多个客户端同时进行连接,redis使用epoll,把各个客户端的事件放到队列中,然后又事件派发器找到对应的工作单元。IO多路复用解决就是防止一个读写导致整个进程的阻塞。Redis服务采用

2022-02-13 14:38:12 2098

原创 缓存\DB数据一致性

数据库、缓存数据一致性的问题一直是生产中一直存在的,有一些程序直接忽略这个问题,有些自己编写程序去处理。但是还是存在一下问题:先更新数据库,更新缓存 先删除缓存,在更新数据库 先更新数据库,在删除缓存一、中间件Canal其实在工作中不论遇到什么问题,尽量要想到是否有成熟的中间件可以处理,这要比自己造轮子强很多,毕竟经过大部分人验证没问题的中间件是很香的。1、canal介绍canal是阿里开发并开源的用于Mysql增量日志数据的订阅、消费和解析的。是要原理是模拟一个Mysql的备机去监听

2022-02-09 20:18:03 1221

原创 Redis6-过期淘汰、经典数据类型的实现

一、redis的缓存过期淘汰策略redis配置文件中有一个maxmemory,配置内存大小。默认是64位无限制,32位最大3GB。官网推荐配置是物理内存的四分之三。查看redis内存使用情况,info memory:1、如果超过了最大内存怎么办当超过最大内存之后,设置的时候,会提示OOM,所以会出现内存淘汰策略(LRU)redis的key当过期了之后,不一定会立刻删除,需要根据不同清情况分析。redis的内存删除方式:立刻删除:能够保证数据新鲜、内存空间释放,但是性.

2022-02-07 21:46:20 1477

原创 Redis6-雪崩、击穿、穿透、分布式锁

一、布隆过滤器上亿级别数据,怎么判断是否存在。数据集合已经存在了,判断某个元素是否存在。为了解决这个问题,布隆过滤器诞生了。它是一个很长的二机制数组(bitmap)和一些列的随机hash算法映射函数,主要判断一个集合是否在元素中存在。统计结果不算准确。特点:高效的插入和查询,占用空间小,返回结果是不确定的 一个元素如果判断结果为存在的时候元素不一定存在(hash冲突),但是判断其不存在则一定不存在 可以添加元素,但是不能删除元素,因为删除元素会导致错误率增加 误判只会发生在没有添加过的

2022-02-06 11:17:32 9049 6

原创 Arthas的使用

一、概述可以解决问题:这个类是哪个jar包加载的?为什么会报各种类相关的Exception 我改的代码为什么没有执行? 遇到线上问题无法debug,难道只能通过加日志重新发布吗? 线上遇到某个用户的数据处理有问题,线下无法重现 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态? 怎么养快速定位应用的热点,火焰图运行环境要求,JDK6以上的版本,支持Tab自动补全功能,命令行的交互模式。二、快速安装去官网下载:下载 — Arthas 3.5.5

2022-02-05 12:32:11 4312

原创 Redis6-基本使用

一、官网查阅和基本配置1、redis官网Redis。官网2、命令大全Redis 命令参考 — Redis 命令参考3、redis6的版本需要使用大于6.0.8,redis-server -v二、redis的单线程和多线程1、redis为什么选择单线程redis各个版本之间架构都不同,所以这个问题需要从不同版本去描述3.x,单纯的单线程 数据结构简单 避免锁和线程切换的开销 基于内存 多路复用和非阻塞IO:redis使用IO多路复用功能来监听多个soc

2022-02-04 13:12:14 1526

原创 JVM调优

一、概述1、生产环境中的问题生产环境发生了内存溢出应该如何处理 生产环境应该给服务器分配多少内存合适 如何对垃圾回收器的性能进行调优 生产环境CPU负载飙高应该如何处理 生产环境应该给应用分配多少线程合适 无log,如何确定请求是否执行了某行代码 无log,如何实时查看某个方法的入参和返回值2、调优基本问题为什么要调优 防止OOM出现,对JVM规划和预调优 解决程序运行中各种OOM 减少full GC的出现频率,决绝运行慢、卡顿的文图 调优的方向 合理的编写代码

2022-02-02 14:53:39 671

原创 JVM知识点

1、包装类的缓存2、 String声明的字面量,都是放在字符串常量池中,而常量池JDK6放在永久代、JDK7以后放在堆空间在JDK6之前,由于常量池在永久代,所以intern调用自后,helloworld生成在永久代,所以str不等于str1在JDK7之后,由于常量池在堆中,所以intern调用后,常量池中会存放堆中helloworld对象的引用,所以str等于str1//返回了一个 new String String str = new String("hello")

2022-01-29 14:18:06 449

原创 分析GC日志

一、GC日志参数查看文章:JVM运行时参数_liming0025的专栏-优快云博客一、JVM参数选项类型1、类型1:标准参数选项特点比较稳定,各版本差距不到以 - 开头各种选项运行java或者java -help可以查看全部的标准选项补充内容-server与-client2、类型2:-X参数选项特点非标准化参数功能还是比较稳定的,但是可能会改变以 -X 开头各种选项运行java -X 命令可以看到所有X选项JVM的JIT编译模式相关的选项特别地3、类型3:-XX参数选项二、添加JVM参数选项https

2022-01-16 16:05:45 1110

原创 JVM运行时参数

一、JVM参数选项类型1、类型1:标准参数选项特点 比较稳定,各版本差距不到 以 - 开头 各种选项 运行java或者java -help可以查看全部的标准选项 补充内容 -server与-client 2、类型2:-X参数选项特点 非标准化参数 功能还是比较稳定的,但是可能会改变 以 -X 开头 各种选项 运行java -X 命令可以看到所有X选项 JVM的JIT编译模式相关的选项 特别地3、类型3:-XX参数选项二、添加JVM参数选项

2022-01-16 14:46:02 718

原创 JVM监控之图形化工具

一、工具概述使用命令行工具存在以下的局限性:无法获取方法级别的分析数据,如方法之间的调用关系、各方法的调用次数和调用时间等 要去用户登陆到java应用所在的宿主机上 分析数据通过终端输出,结构不够直观随着java应用的官方使用,越来越多的图形化工具问世1、JDK自带工具jConsole:查看应用运行概况、监控堆信息、永久区使用情况、类加载情况等 Visual VM:提供了可视化界面,用户查看JVM二、jConsole三、Visual VM四、eclipse MAT五、J

2022-01-15 18:18:43 2198

原创 Tomcat使用APR协议

apr(Apache Portable Runtime/Apache可移植运行库)是Apache HTTP服务器的支持库。从操作系统级别解决异步I/O问题,大幅度提高服务器的并发处理性能,也是Tomcat生产环境运行的首选方式。要tomcat支持apr,必须安装apr和native,这样tomcat才可以利用apache的apr接口,使用操作系统的部分本地操作,从而提升性能。优化步骤如下:安装Tomcat Native 安装依赖包:yum -y install apr-devel gcc gcc-

2022-01-13 11:43:10 2250

原创 Redis集群搭建

一、注意点每个节点必须开启 2个TCP端口 redis的服务器端口 redis集群之间的集群端口,默认使用10000+redis的服务端口,例如服务端口是6379,集群端口使用的就是16379,也可以手动修改 版本显示 版本>=5.x,直接使用./redis-cli --cluster create 指令构建redis集群 版本<5.x,需要安装ruby、rubygems环境,使用 ./redis-trib.rb create 指令构建redis集群 集群环境,需要6

2022-01-11 17:04:47 1746

原创 JVM监控工具之命令行篇

一、概述使用数据说明问题、使用知识分析问题、使用工具处理问题 无监控、不调优,因为没有一次性的处理,所有需要根据实际情况才能调优二、jps-查看正在运行的java进程1、基本情况jps(java Process Status):显示指定系统内所有HotSpot虚拟机进程(查看JVM进程信息),用于查询正在运行的JVM进程。对于本地JVM进程来说,进程的本地虚拟机ID和操纵系统的进程ID是一只的,也是唯一的。2、测试3、基本语法-q:仅仅显示LVMID,即本地虚拟机

2022-01-09 16:38:19 1051

原创 JVM调优概述

一、性能优化的步骤1、发现问题-性能监控GC频繁 cup load 过高 OOM 内存泄漏 死锁 程序响应时间长2、排查问题-性能分析打印GC日志,通过GCviewr或者gceasy分析日志信息 命令行工具:jstack、jmap、jinfo等 dump出堆文件,使用内存分析工具分析文件 使用阿里Arthas或者jconsle、JVisualVM来实时查看JVM状态 jstack查看堆、栈信息3、解决问题-性能调优适当增加内存、根据业务场景选择垃圾回收器 优化代码、控

2022-01-09 10:37:56 108

原创 类的加载器

一、概述ClassLoader是java核心组件,所有Class都是有ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制流数据读入JVM内部,转换为一个目标类对应的java.lang.Class对象实例。然后交给JVM进行链接、初始化等操作。因此,ClassLoader在整个装载阶段,只能影响到类的加载,而无法通过ClassLoader去改变链接、初始化的行为。至于他是否可以执行,则由Execution Engine(执行引擎)决定。类的加载方式:显

2022-01-08 12:36:58 712

原创 类的加载过程(生命周期)

一、概述生命周期的7个阶段:从使用过程看:最后会在方法区,存在类的模版,之后就可以使用这个类了。二、过程1:Loading阶段(加载)所谓加载,就是将字节码文件加载到机器内存中,并在内存中构建出Java类的原型-类模版对象,其是一个java类在JVM内存中的一个快照,JVM将字节码文件中解析出来的常量池、类字段、类方法都存储到模版中,这样JVM在运行期间可以通过类模版获取到类中的任意信息、遍历成员变量、方法调用。反射机制也基于这个。1、加载完成的操作查找并加载二进制数据,

2022-01-06 09:10:25 4348 1

原创 字节码指令

一、概述字节码对于jvm相当于机器语音对一计算机,属于基本指令。字节码由一个字节长度的代表着某种含义的数字(操作码,Opcode),以及跟随其后的零至多个代表操作所需的参数(操作数,Operands)而构成。由于JVM采用的是操作数栈而不是寄存器的结构,所以大多数指令不包含操作数,只有一个操作码。操作码最多不超过256.1、执行模型2、字节码与数据模型操作指令一般都跟所操作的数据类型有关系,例如:iload就是加载一个int类型数据,同样fload加载一个float类型数据。i代表.

2022-01-04 21:32:33 1672

原创 Docker 编排和集群

一、Docker Compose1、简介Docker Compose 高效的管理容器。定义和运行多个容器,使用yaml文件进行配置。使用dockerfile编写镜像 使用 docker-compose.yml 定义服务 使用 docker-compose up 启动环境主要的作用就是批量容器的编排。是Docker官方开源项目。需要独立docker安装。一个应用的启动除了应用程序本身之外,还有很多外部环境如redis、mq、mysql、nginx等等,如果每个环境都使用DockerFile去

2021-12-28 21:32:24 841

原创 docker 数据卷、File、网络

一、容器数据券docker是将应用+环境打包成镜像,直接可以运行。但是如果一些配置文件、数据放在容器中,那么这些东西都会丢失。所以在使用镜像的时候,会有一些东西需要持久化,并且容器之间可以共享,也就是容器数据券的技术。Docker产生的数据、配置文件都同步到本地,将容器内部的目录挂载到宿主机上。使用数据卷方式1:直接使用命令挂载 -vdocker run -it -v 主机目录:容器目录使用 docker inspect 容器ID 可以看到如下信息,就是挂载成功了。同比效果:

2021-12-26 12:59:23 976

原创 docker 的镜像

一、docker镜像加载原理1、联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。UFS是docker镜像的基础。镜像通过分成来进行继承,基于基础镜像,可以制作各种具体的应用镜像。bootfs:启动的使用引导镜像。rootfs:在bootfs之上,不同系统的发行版。rootfs非常小,只包含基本的命令,并且内核使用的都是主机的。二、docker镜像分层结构所有的docker

2021-12-20 21:21:25 702

原创 Spring Security 分布式架构中的使用

1、分布式系统认证需求分布式每个服务都会有认证授权的需求。如果每个服务都些认证授权的逻辑就会很冗余。所以需要把认证授权进行抽取,进行统一认证授权。认证授权服务,需要支持多种认证授权的方式,如用户名密码、短信验证码、二维码等等。同时要给其他服务提供其他应用接入的的认证。2、分布式系统认证方案1、选型基于session的认证方式:存在session共享的问题。方案很多,常用的直接使用redis进行存储,spring boot 也提供了相关的插件。缺点是不同的客户端cookie机制可能不一样。

2021-12-19 15:10:17 2213

原创 Class文件的概述

一、概述字节码文件的跨平台性Java语言,跨平台语言 编译后的class文件,在不同平台上运行 现在阶段出现的高级语言,基本都是跨平台的语言了,已经成为一门语言的的必选特征了 Java虚拟机,跨语言平台 不与语言进行捆绑,而是和class文件进行捆绑,只要遵循class规范,不论什么语言都可以运行在JVM上 想要让一个java程序正确的在JVM中运行,源码就必须编译成符合规范的字节码 前端编译:java源码->class文件 javac 常用工具之一:词法解析、语法

2021-12-17 23:06:09 2175

原创 Docker常用命令

一、常用命令docker -version:版本号 docker info:详细信息,镜像和容器 docker 命令 --help:帮助命令镜像命令docker imgaes:查看镜像(-a:全部、-f:过滤、-q:只显示ID) docker search:搜索镜像docker search mysql --filter=STARS=9000 docker pull:下载镜像 docker pull mysql:5.7 docker rmi:删除镜像。docker rmi -f $(d.

2021-12-16 23:07:26 1426

原创 spring security 工作原理

一、结构概览spring security 解决的问题就是“安全访问控制”,而这些无法避免对请求进行拦截,所以可以想到其使用的就是常见的Filter链。SecurityContextPersistenceFilter:守门员,出口也是入口,初始化相关框架环境 UsernamePasswordAuthernticationFilter:账号密码验证 ->AuthenticationManagert FilterSecurityInterceptor:授权验证->AccessDeci

2021-12-14 22:06:12 564

原创 StringSrcurity的基本概念

一、基本概念1、认证:确定使用者是否有权限,判断身份是否合法,基于用户名密码、二维码、短信验证码等2、会话:为了避免用户每次操作都认证,让用户在登录一次后创建一个会话,在特定时间内,就不需要认证了,基于session、token等3、授权:使用者是否对资源拥有权限,控制不同用户访问不同资源授权的数据模型简单理解为Who对What进行How操作。Who:主题、What:资源、How:权限(数据、功能)。RBAC基于角色的访问:判断主体是否有某些角色,当角色改变,可能要修改 基于.

2021-12-13 22:03:53 462

原创 JVM-垃圾回收器

一、GC分类与性能指标二、不同的垃圾回收期概念1、Serial回收器:串行回收2、ParNew回收器:并行回收3、Parallel回收器:吞吐量优先

2021-12-11 11:38:01 691

原创 Docker概述

一、为什么出现多环境配置,导致上线很麻烦。运维、开发考验都很大,经常本地可以上线无法使用。环境配置十分麻烦,每一个机器都要部署环境、集群都很浪费时间,还容易部署错误,费时费力。Docker的出现就是从根本解决这个问题,带着第三方组件一起发布项目,也就是带上环境一起安装。之前在服务器配置相关环境很费时间、配置很麻烦,环境可能也不是跨平台的,可能导致开发的时候可用,但是线上因为环境不同没办法使用。所以现在开发-发布一起完成。开发者把项目+运行环境一起打包成镜像,下载直接使用就行了。很棒!Dock

2021-12-08 22:49:31 306

原创 垃圾回收的相关感念

一、System.gc()的理解调用会触发Full GC,进行垃圾回收释放内存,无法保证对垃圾收集器的调用,无法确定执行时间。二、内存溢出和内存泄漏内存溢出(OOM):没有空间内存,垃圾回收器也无法提供更多的可用内存。可能是堆内存设置不够或者是代码问题。在OOM之前一般情况下都会调用一次GC,当GC后空间还是不足才抛出OOM异常,当然也不是任何情况都调用,当出现一个超大对象,并且超过堆的最大值,那么JVM判断GC也无法解决问题,直接抛出OOM。内存泄漏(Memory Leak):只有对象不再

2021-12-05 15:49:00 437

原创 JVM-垃圾回收器的相关算法

一、标记阶段:引用计数算法GC过程:标记阶段、清除阶段(先识别、在清除)垃圾标记阶段:判断对象是否存活二、标记阶段:可达性分析算法三、对象finalization机制四、MAT于JProfiler的GC Roots溯源五、清除阶段:标记-清除算法六、清除阶段:复制算法七、清除阶段:标记-压缩算法八、小结九、分代收集算法十、增量收集算法、分区算法...

2021-12-05 11:16:38 324

原创 JVM-垃圾回收概述

一、什么是垃圾关于垃圾收集经典问题:哪些垃圾需要回收 什么时候回收 如何回收垃圾收集什么:运行程序中,没有任何指针指向的对象,这个对象就是需要回收的垃圾。在jdk中垃圾回收器一直在优化。二、为什么需要GC不进行垃圾回收,内存迟早会消耗完,发生溢出 需要JVM整理内存碎片,清理出整片的内存,分配给新对象 没有GC,就无法保证应用程序正常运行三、早期垃圾回收早期的C和C++ 都是手动回收、申请内存的,相对比较灵活。但是增加了代码的复杂度。如果忘记回收可能出现内存泄漏,所谓内存

2021-12-03 08:47:04 402

Android核心技术与实例详解

Android核心技术与实例详解,含有源码!

2014-11-04

空空如也

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

TA关注的人

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