<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xiangbole的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xiangbole</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xiangbole]]></copyright><item><title><![CDATA[平台化服务探索（三）-隔离与交互策略模型]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/122702326</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/122702326</guid><author>xiangbole</author><pubDate>Wed, 26 Jan 2022 15:13:06 +0800</pubDate><description><![CDATA[模型回顾

之前我们提到租户（Tenant）时说它是数据隔离的单位，不同租户间的数据不能共享：


	账号（Account）隶属于租户，即便是同一个自然人在不同租户间也会有各自的账号
	
	
	应用（App）隶属于租户，权限体系既可以挂载到应用也可以到租户，但租户间权限不能互通
	
但这样的设定会导致无法实现需要租户间交互的场景，接下来我们就来讨论如何在满足租户数据隔离这个大原则下实现我们的需求。

租户账号关联


有应用A1隶属于租户T1，应用A2隶属于租户T2，现希望这两个应用实现单点登录。


..]]></description><category></category></item><item><title><![CDATA[平台化服务探索（二）-权限控制设计]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/122701688</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/122701688</guid><author>xiangbole</author><pubDate>Wed, 26 Jan 2022 15:00:16 +0800</pubDate><description><![CDATA[基本概念

常见的权限模型有：


	ACL（Access-control list）：为简单的权限控制场景设计的模型，多见于文件系统的权限设置，详见：https://en.wikipedia.org/wiki/Access-control_list
	
	
	RBAC（Role-based access control）：基于角色的访问控制模型，引入了角色解耦权限与用户的关系，实现职责分离。这是Web应用系统最主流的基础权限模型，详见：https://en.wikipedia.org/wiki/Rol..]]></description><category></category></item><item><title><![CDATA[平台化服务探索（一）-用户认证模型设计]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/122698233</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/122698233</guid><author>xiangbole</author><pubDate>Wed, 26 Jan 2022 14:28:13 +0800</pubDate><description><![CDATA[基本概念

身份识别与访问管理（IAM，Identity and Access Management）包含了四个重要概念:


	认证（identification）：确认访问者的身份，可通过用户名+密码， 手机号+验证码等方式，常见于登录操作
	
	
	授权（authorization）: 为访问者委派权限并返回凭证，常见于Token形式
	
	
	鉴权（authentication）: 根据访问者凭证确定访问者身份，常见于基于请求Token找到对应的账号
	
	
	权限控制（permission con]]></description><category></category></item><item><title><![CDATA[JVM指令手册概述]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/122672229</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/122672229</guid><author>xiangbole</author><pubDate>Mon, 24 Jan 2022 17:52:33 +0800</pubDate><description><![CDATA[栈和局部变量操作



将常量压入栈的指令

aconst_null 将null对象引用压入栈

iconst_m1 将int类型常量-1压入栈

iconst_0 将int类型常量0压入栈

iconst_1 将int类型常量1压入栈

iconst_2 将int类型常量2压入栈

iconst_3 将int类型常量3压入栈

iconst_4 将int类型常量4压入栈

iconst_5 将int类型常量5压入栈

lconst_0 将long类型常量0压入栈

lconst_1 将long类型常量1压]]></description><category></category></item><item><title><![CDATA[线上故障排查]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/117420249</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/117420249</guid><author>xiangbole</author><pubDate>Mon, 31 May 2021 18:14:36 +0800</pubDate><description><![CDATA[前言
线上定位问题时，主要靠监控和日志。一旦超出监控的范围，则排查思路很重要，按照流程化的思路来定位问题，能够让我们在定位问题时从容、淡定，快速的定位到线上的问题。

线上问题定位思维导图
一  服务器层面
1.1  磁盘
1.1.1  问题现象
当磁盘容量不足的时候，应用时常会抛出如下的异常信息：
java.io.IOException: 磁盘空间不足

或是类似如下告警信息：

1.1.2  排查思路
1.1.2.1  利用 df 查询磁盘状态
利用以下指令获取磁盘状态：
df -h

结果是：

可知]]></description><category></category></item><item><title><![CDATA[Centos7上安装docker]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/114021477</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/114021477</guid><author>xiangbole</author><pubDate>Wed, 24 Feb 2021 15:40:05 +0800</pubDate><description><![CDATA[1、Docker 要求 CentOS 系统的内核版本高于 3.10 ，查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
 $ uname -r


2、使用 root 权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update

3、卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker  docker-common docker-selinux docker-engine]]></description><category></category></item><item><title><![CDATA[单点登录探讨]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/113566655</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/113566655</guid><author>xiangbole</author><pubDate>Wed, 03 Feb 2021 11:05:11 +0800</pubDate><description><![CDATA[一、登录机制
	上图是web应用的请求流程图，其中http请求是无状态协议，此时用户是能通过浏览器访问服务器资源，如果想保护服务器的某些资源，必须限制浏览器请求；要限制浏览器请求，必须鉴别浏览器请求，响应合法请求，忽略非法请求；要鉴别浏览器请求，必须清楚浏览器请求状态。既然http协议无状态，那就让服务器和浏览器共同维护一个状态吧！这就是会话机制。
1、会话机制
浏览器第一次请求服务器，服务器创建一个会话，并将会话的id作为响应的一部分发送给浏览器，浏览器存储会话id，并在后续第二次和第三次请求中带上会话i]]></description><category></category></item><item><title><![CDATA[MySQL如何定位慢SQL]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/112680354</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/112680354</guid><author>xiangbole</author><pubDate>Fri, 15 Jan 2021 17:38:04 +0800</pubDate><description><![CDATA[1、查询是否开启了慢查询
mysql&gt; show variables like ‘%slow%’;
±--------------------------±-------------------------------+
| Variable_name             | Value                          |
±--------------------------±-------------------------------+
| log_slow_admin_s]]></description><category></category></item><item><title><![CDATA[jvm类加载机制探讨]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/107176316</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/107176316</guid><author>xiangbole</author><pubDate>Mon, 13 Jul 2020 16:22:27 +0800</pubDate><description><![CDATA[一、类加载流程
jvm中类加载流程分为5个部分：加载loading，验证Verification，准备preparation，解析resolution，初始化initialization。
1、加载阶段，这个阶段会在内存中生成一个代表这个类的 java.lang.Class 对
象， 作为方法区这个类的各种数据的入口。可从class文件、Zip报（jar\war等）、运行时计算生成（动态代理）、JSP转换成的对应class文件等。主要完成三件事：
1）通过一个类的全限定名来获取定义此类的二进制字节流；
2）]]></description><category></category></item><item><title><![CDATA[MySQL中explain作用探讨]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/107249629</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/107249629</guid><author>xiangbole</author><pubDate>Fri, 10 Jul 2020 17:43:53 +0800</pubDate><description><![CDATA[EXPLAIN命令是查看查询优化器如何决定执行查询的主要方法。
要使用EXPLAIN，只需要在查询中的select关键字之前加上EXPLAIN这个标记，这个标记会使其返回关于在执行计划中的每一步的信息，而不是执行这个查询语句。如下：
EXPLAIN信息各列分析：
1、id列
（1）id 相同执行顺序由上到下

...]]></description><category></category></item><item><title><![CDATA[Java对象不再使用的时候为什么要设置为null]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/104985961</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/104985961</guid><author>xiangbole</author><pubDate>Fri, 20 Mar 2020 11:27:53 +0800</pubDate><description><![CDATA[前言
许多Java开发者都曾听说过“不使用的对象应手动赋值为null“这句话，而且好多开发者一直信奉着这句话；问其原因，大都是回答“有利于GC更早回收内存，减少内存占用”，但再往深入问就回答不出来了。
鉴于网上有太多关于此问题的误导，本文将通过实例，深入JVM剖析“对象不再使用时赋值为null”这一操作存在的意义，供君参考。本文尽量不使用专业术语，但仍需要你对JVM有一些概念。
示例代码
我们来看...]]></description><category></category></item><item><title><![CDATA[springboot整合swagger配置账号密码]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/104946896</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/104946896</guid><author>xiangbole</author><pubDate>Wed, 18 Mar 2020 16:07:10 +0800</pubDate><description><![CDATA[增加maven依赖：

org.springframework.boot
spring-boot-starter-security

配置文件添加：
security.basic.path=/swagger-ui.html
security.basic.enabled=true
security.user.name=lovnx
security.user.password=123456

...]]></description><category></category></item><item><title><![CDATA[Hash 算法原理及应用探讨]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/103421743</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/103421743</guid><author>xiangbole</author><pubDate>Fri, 06 Dec 2019 14:44:46 +0800</pubDate><description><![CDATA[1、什么是Hash
Hash也称散列、哈希，对应的英文都是Hash。基本原理就是把任意长度的输入，通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法，而原始数据映射后的二进制串就是哈希值。活动开发中经常使用的MD5和SHA都是历史悠久的Hash算法。
echo md5(“这是一个测试文案”);
// 输出结果：2124968af757ed51e71e6abeac04f98d
...]]></description><category></category></item><item><title><![CDATA[ThreadPoolExecutor 的八种拒绝策略]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/100891745</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/100891745</guid><author>xiangbole</author><pubDate>Mon, 16 Sep 2019 16:17:31 +0800</pubDate><description><![CDATA[前言
谈到java的线程池最熟悉的莫过于ExecutorService接口了，jdk1.5新增的java.util.concurrent包下的这个api，大大的简化了多线程代码的开发。而不论你用FixedThreadPool还是CachedThreadPool其背后实现都是ThreadPoolExecutor。ThreadPoolExecutor是一个典型的缓存池化设计的产物，因为池子有大小，当池...]]></description><category></category></item><item><title><![CDATA[MySQL的索引要使用B+树探讨]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/100730245</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/100730245</guid><author>xiangbole</author><pubDate>Wed, 11 Sep 2019 11:06:42 +0800</pubDate><description><![CDATA[InnoDB的一棵B+树可以存放多少行数据？

答案：约2千万

为什么是这么多？

因为这是可以算出来的，要搞清楚这个问题，先从InnoDB索引数据结构、数据组织方式说起。

计算机在存储数据的时候，有最小存储单元，这就好比现金的流通最小单位是一毛。

在计算机中，磁盘存储数据最小单元是扇区，一个扇区的大小是512字节，而文件系统（例如XFS/EXT4）的最小单元是块，一个块的大小是4k，而对于...]]></description><category></category></item><item><title><![CDATA[java中的锁探讨]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/100690024</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/100690024</guid><author>xiangbole</author><pubDate>Tue, 10 Sep 2019 09:53:36 +0800</pubDate><description><![CDATA[〇、synchronized与Lock

Java中有两种加锁的方式：一种是用synchronized关键字，另一种是用Lock接口的实现类。

形象地说，synchronized关键字是自动档，可以满足一切日常驾驶需求。但是如果你想要玩漂移或者各种骚操作，就需要手动档了——各种Lock的实现类。

所以如果你只是想要简单的加个锁，对性能也没什么特别的要求，用synchronized关键字就...]]></description><category></category></item><item><title><![CDATA[linux基础常用命令]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/98043716</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/98043716</guid><author>xiangbole</author><pubDate>Thu, 01 Aug 2019 13:46:01 +0800</pubDate><description><![CDATA[Linux是目前应用最广泛的服务器操作系统，基于Unix，开源免费，由于系统的稳定性和安全性，市场占有率很高，几乎成为程序代码运行的最佳系统环境。linux不仅可以长时间的运行我们编写的程序代码，还可以安装在各种计算机硬件设备中，如手机、路由器等，Android程序最底层就是运行在linux系统上的。
一、linux的目录结构

/ 下级目录结构
bin (binaries)存放二进制可执行文件
...]]></description><category></category></item><item><title><![CDATA[navicate导出没有表名]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/93638368</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/93638368</guid><author>xiangbole</author><pubDate>Tue, 25 Jun 2019 18:02:56 +0800</pubDate><description><![CDATA[最近用navicate查询需要的数据然后导出脚本，发现没有办法导出表名，原因是没有对查询进行保存，操作如下：

1、用表名保存查询语句


2、导出向导，选择导出SQL脚本


...]]></description><category></category></item><item><title><![CDATA[VMWare虚拟机centos7桥接联网入门]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/84344525</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/84344525</guid><author>xiangbole</author><pubDate>Thu, 22 Nov 2018 17:08:35 +0800</pubDate><description><![CDATA[最近在有新入职同事问VMWare安装centos7后想用桥接方式连网连不上，网上的教程很多有误导或者不够细化。特此在此记录一下自己的给新入职同事的讲解过程。

1、环境

VM12、centos7

2、确认本地主机网络配置





3、虚拟机设置





4、虚拟机配置文件设置

命令：vi /etc/sysconfig/network-scripts/ifcfg-ens33

备注：有些系...]]></description><category></category></item><item><title><![CDATA[ThreadPoolExecutor机制 及使用探讨]]></title><link>https://blog.youkuaiyun.com/xiangbole/article/details/78860054</link><guid>https://blog.youkuaiyun.com/xiangbole/article/details/78860054</guid><author>xiangbole</author><pubDate>Thu, 21 Dec 2017 09:47:26 +0800</pubDate><description><![CDATA[ThreadPoolExecutor机制 
一、概述
1、ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现，以内部线程池的形式对外提供管理任务执行，线程调度，线程池管理等等服务；
2、Executors方法提供的线程服务，都是通过参数设置来实现不同的线程池机制。
3、先来了解其线程池管理的机制，有助于正确使用，避免错误使用导致严重故障。]]></description><category></category></item></channel></rss>