- 博客(57)
- 资源 (2)
- 收藏
- 关注
原创 kubernetes安装KubeSphere 2.1.1,redis-psv等启动不了
问题如下图所示:因为 redis跟openldap一直处于pending,而account跟apigateway又都是依赖这两个的,所以会导致一直启动失败。解决方法:按照官网文档2.1.1来安装。由于官网文档中的前置条件,是要求处理完污点之后,要再打上污点。但是就是因为污点导致的redis 持久卷挂载不上,导致整个安装不成功!这里在安装kubesphere之前是需要把污点去除掉。这样redis就可以挂载上了。还有一种方案就是不使用官方的OpenEBS,安装nfs存储可解决这个问题。
2021-04-20 11:49:14 1028 3
原创 kubernetes上安装helm2 init 时报403错误解决
kubernetes上安装helm2 init 时报403错误,我使用helm版本为2.16.2;原因为:自2020年起11月13日,在新的位置stable信息库是https://charts.helm.sh/stable并为新的位置incubator信息库https://charts.helm.sh/incubator。解决方案:helm init --service-account=tiller --stable-repo-url=https://charts.helm.sh/sta.
2021-04-16 10:50:39 573
原创 大型电商系统-采购流程当中接口幂等性解决方案
根据梳理出的业务流程,再分析和考量每个接口调用,看下哪些操作需要添加接口一致性的保障;针对那些需要接口一致性保障的操作,会给出具体的解决方案和思考建议,在此之前思考一下:什么是接口幂等性?接口幂等性问题有哪些常见的解决方案?先看看完整商品采购业务流程图:下面一共分为四个步骤,分别是:采购核心业务梳理。 接口幂等性问题的介绍。 采购业务中幂等性问题分析。 采购业务中接口幂等性问题解决方案 下面一步一步来细说这些。一:采购核心业务梳理电商系统的核心业务简单来说就是销售商品,一..
2021-03-25 11:10:55 527
原创 Redis中8 种数据淘汰策略及近似LRU、LFU原理!
1、为什么Redis需要数据淘汰机制?Redis作为知名内存型NOSQL,极大提升了程序访问数据的性能,高性能互联网应用里,几乎都能看到Redis的身影。为了提升系统性能,Redis也从单机版、主从版发展到集群版、读写分离集群版等等,业界也有诸多著名三方扩展库(如Codis、Twemproxy)。阿里云的企业版Redis(Tair)的性能增强型集群版更是“[豪]无人性”,内存容量高达4096 GB 内存,支持约61440000 QPS。Tair混合存储版更是使用内存和磁盘同时存储数据的集群版Redi
2020-12-04 11:48:20 898
原创 实际生产环境中 Buffer Pool 如何设置?
1、buffer pool这种大块头,能在运行期间动态调整大小吗?基于目前了解的情况来看,buffer pool在运行期间是不能动态的调整自己的大小的。因为动态调整buffer pool大小,比如buffer pool本来是8G,运行期间你给调整为16G了,此时是怎么实现的呢?就是需要这个时候向操作系统申请一块新的16GB的连续内存,然后把现在的buffer pool中的所有缓存页、描述数据块、各种链表,都拷贝到新的16GB的内存中去。这个过程是极为耗时的,性能很低下,是不可以接受的!2、如何基
2020-11-30 17:06:04 799 1
原创 唠唠 Oauth2 与授权认证
1 什么是单点登录1.1 多点登录传统的多点登录系统中,每个站点都实现了本站专用的帐号数据库和登录模块。各站点的登录状态相互不认可,各站点需要逐一手工登录。如下图,有两个术语含义如下:认证(authentication): 验证用户的身份。 授权(authorization): 验证用户的访问权限。1.2 单点登录单点登录,英文是 Single Sign On,缩写为 SSO。多个站点(192.168.1.20X)共用一台认证授权服务器(192.168.1.110,用户数据库和认证授
2020-11-27 15:06:26 487
原创 使用 Docker 安装 elasticsearch 跟 kibana
前提要求:安装了Docker,虚拟机内存大于1G;拉取完elasticsearch 跟 kibana 后可以使用 free -m 查看内存使用情况。具体步骤:#拉取镜像docker pull elasticsearch:7.4.2docker pull kibana:7.4.2mkdir -p /mydata/elasticsearch/configmkdir -p /mydata/elasticsearch/datamkdir -p /mydata/elasticsear.
2020-08-20 11:02:54 155
原创 如何保证消息队列消息的顺序性
如何保证消息队列消息的顺序性?举个例子:有一个mysql binlog 同步系统,压力是非常大的,日同步数据达到了上亿级别,就是将数据从一个 mysql 库当中原封不动的同步到另一个 mysql 库当中去(比较常见的就是大数据组需要干的事情)。假设在 mysql 当中增删改了一条数据,对应的生产了三条 增删改的 binlog 日志,接着这三条 binlog 发送到 MQ 里面去,然后进行消费。这时候就得保证消息队列的顺序性了。不然本来是:增加、修改、删除;你愣是换了顺序给执行成删除、修改、增加,
2020-08-19 10:33:35 2078 1
原创 如何保证消息队列的消息可靠性传输/如何处理消息丢失问题
MQ 有一个基本原则,就是数据不能多一条,也不能少一条。不能多就是重复消费跟幂等性问题。不能少就是说这个数据不能丢失了。如果MQ是用来传递非常核心的消息,比如说计费、扣费的一些消息,那么得必须确保这个MQ传递得过程当中不能把计费得消息给丢失掉。eg: RabbitMQ生产者丢失了数据生产者将数据发送到 Rabbit MQ 的时候,数据可能在发送的途中丢失了(网络原因、其他不可控原因)Rabbit MQ 提供了事务功能,就是发送数据之前开启事务 channel.txSelect,然后发
2020-08-07 11:21:40 463
原创 如何保证消息队列消息不被重复消费/幂等性
RabbitMQ、RocketMQ、Kafka等消息队列如果不做任何的防护措施都是有可能出现消息重复消费的情况的。保证消息的不可重复消费一般都是需要开发人员来进行相对于的设置。Kafka 实际上有个 offset 的概念,每个写入的消息都会有一个 offset ,代表的是消息的序号,在 consumer 消费之后,每隔一段时间(定时定期),都会将自己消费过的 offset 进行提交,标识一下哪些数据是自己已经消费了的。下次重启或者其他情况需要继续消费的时候就从该位置继续消费。理想是美好的,现实确实很
2020-08-07 09:45:46 1038
原创 服务器自动化启动 SpringBoot 项目 Python 脚本
在服务器上部署SpringBoot 项目时,因为是打的 jar 包,还得 kill 掉原来的进程再重新部署,过于麻烦就写了一个自动化的脚本来完成这个功能。(需要 Python 环境)其中一些路径可根据实际情况进行配置。jvm 参数也可以进行适当调整!#!/usr/bin/python# -*- coding:utf-8 -*-import os,sys,time,commandsfrom sys import argvtimes = time.strftime('%Y年%m月%d日%H:%M
2020-08-04 09:14:52 716 2
原创 消息队列-为什么要使用消息队列(面试)
为什么要用消息队列?面试官的主要目的就是为了想问问你消息队列的运用场景,在你的项目里面是怎么运用消息队列的,用来解决了什么问题。面试官期待的回答就是:你们公司的某一个业务场景遇到了技术挑战,如果不用MQ就会很麻烦,但是用了MQ的话就会带来什么样的好处。消息队列的运用场景:解耦、异步、削峰。解耦:如果一个A系统发送数据到BCD三个系统,通过接口发送。如果现在有个E系统也要接收数据,然后C系统不需要再接收数据了,这样A系统的负责人就会崩溃(大改)。具体如下图:在上面的场景当中,A系统
2020-07-31 11:23:23 904
原创 原始GPS坐标(wgs84)转换成百度地图坐标
原始的GPS坐标(wgs84)在百度地图中显示的位置信息是不正确的,需要转换成百度地图的GPS坐标。可以使用百度地图开发平台的API进行转换。官方API代码示例:Map<String, Object> map = new HashMap<>();map.put("coords", "114.21892734521,29.575429778924");map.put("from",1);map.put("to",5);map.put("ak","填入你的开发密钥");
2020-07-30 09:37:05 8894 1
原创 解决 Flowable 部署在服务器上后 重定向为 localhost 不能直接访问 admin task 问题
将 Flowable UI 部署在服务器上后,只能先访问 idm 模块,才能登录其他模块。否则会出现错误;具体如下图:原因是它将重定向的 url 变成了 localhost:8080/flowable-idm 因为是部署在服务器上的,这个地址肯定是访问不了的 。解决方法:在配置文件中将 idm 的 url 改成 服务器对应的地址与端口;以 root 的身份进入 flowable 对应的容器,并进入到 tomcat 对应的目录:进入到 tomcat 目录下的 lib 目录并找到..
2020-07-22 14:27:52 1210
原创 在阿里云服务器上用 Docker 搭建 Flowable UI 教程
首先在服务器上安装Docker(本教程使用的是Centos7.x版本,6.x版本安装Docker可能会出现问题)安装Docker步骤:较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。sudo yum remove docker \ docker-client \ docker-client-latest \
2020-07-21 14:11:48 1657
原创 Redis分布式锁的实现原理(面试)
如果聊到了分布式系统这块的东西。通常面试官都会从服务框架(Spring Cloud、Dubbo)聊起,一路聊到分布式事务、分布式锁、ZooKeeper等知识。如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架就好了,非常的简便易用。可以去看看Redisson的官网,看看如何在项目中引入Redisson的依赖,然后基于Redis实现分布式锁的加锁与释放锁。下面是一个简单得Redisson分布式锁的实现伪代码:...
2020-07-17 11:11:38 13603 3
原创 系统的TPS不达标,此时如何优化(面试)
系统的TPS不达标,此时如何优化对系统进行压测,比如每秒压个几百请求到几千请求,甚至上万请求,此时发现死活压不上去,压来压去,你的系统最多每秒就处理几百个请求,根本到不了几千个请求,此时就发现系统的TPS不达标。这个时候,如果发现TPS不达标,通常是说明你系统肯定是每个请求处理时间太长了,所以就导致你单位时间内,在有限的线程数量下,能处理的TPS就少了,这个时候往往要先优化性能,再提TPS。假设你一共有200个线程,结果你每个请求要耗费500ms,每个线程每秒就只能处理2个请求,200个线程每秒
2020-07-14 17:13:54 1483
原创 高并发场景下的数据库连接池应该如何进行优化(面试)
高并发场景下的数据库连接池应该如何进行优化以druid来举例:(1)maxWait表示从池里获取连接的等待时间,万一你暂时没有可用的连接,就可能要等待别的连接用完释放,你再去使用,通常建议设置在1000以上,就是等待1s以上,比如你可以设置1200,因为有的时候要等待建立新的TCP连接,最多在1s内,那你就得等一会儿。如果这个参数默认设置为0,意思就是无限的等待获取连接,在高并发场景下,可能瞬间连接池耗尽,大量的请求都卡死在这里等待获取连接,进而导致你tomcat里没有可用的线程,服务就是一
2020-07-14 17:04:54 3192
原创 Vue集成 Vue Baidu Map 坐标在左上角问题解决方案
百度地图加载出来的时候,地图中心点偏移到左上角。主要是因为加载顺序的问题。地图的渲染在模态框出来之前,因此模态框还未渲染完成,地图的相对定位就会造成偏差。解决的方法使用 setTimeout ;在模态框出来之后再加载地图,问题解决。具体代码如下:show (params) { //模态框显示时调用的方法 let _this = this; this.showModal = true setTimeout(function () {
2020-07-14 15:32:40 1303 1
原创 计算机网络学习随笔记(虚拟机网络)
为了解决数据中心的采购不灵活、运维不灵活、规格不灵活、复用不灵活等缺点,发明了虚拟机,并在此基础上产生了云计算技术。我们可以在笔记本上创建一台或者多台虚拟电脑,不用的时候删除就没有了。本质上是用软件模拟硬件。虚拟机是如何将虚拟机的网络与物理机的网络连接起来的,具体如下如所示:首先,虚拟机需要一张网卡。对于qemu-kvm 来说,这是通过Linux上的一种TUN/TAP技术来实现的。虚拟机是物理机上运行的一个软件。这个软件可以像其他的应用打开文件一样,打开一个叫做TUN/TAP的Char D.
2020-07-14 15:25:35 512
原创 snowflake算法的时钟回拨问题如何解决(面试)
snowflake算法的时钟回拨问题如何解决snowflake算法:一串数字,用很多的二进制里的bit位,去代表不同的东西;40多位都是当前机器上的时间,中间有几位是代表的是机器id,自增长的id;分布式业务系统,分布在很多台机器上,这很多台机器都要生成唯一的id,不能重复,此时可以调用某台机器上的snowflake算法生成的唯一id;12:00:00 500 28 1~2012:00:04 300 28 1~2012:00:05 308,当前你的snowflake算法部署的机器发生了本
2020-07-11 22:58:36 9456 7
原创 链路追踪的时候,链路id是怎么管理的(面试)
链路追踪的时候,链路id是怎么管理的每一个请求入口,traceid,每一次服务调用,spanid,上游服务id,parenetid,调用时间,timestamp,有正向的,还有反向的,把请求发出,请求接收,业务处理,各种时间都记录下来,计算网络耗时和业务处理耗时。底层的服务框架,接收到每一层请求调用的时候都要交给链路追踪系统的客户端框架来处理一下,traceid,代表了一次请求。链路追踪数据:traceid=1,spanid=1,parentid=0,received_timestamp=1
2020-07-11 22:55:10 1394 1
原创 分布式系统是如何进行链路监控的(面试)
分布式系统是如何进行链路监控的追踪了有什么用?调用链路,链路性能监控,链路故障排查;Google的Dapper,阿里的鹰眼,大众点评的CAT,Twitter的Zipkin,LINE的pinpoint,国产的skywalking,很多,国内一般用CAT和zipkin比较多。核心架构就是做一个框架,然后每一次服务调用都要经过这个框架,框架采集调用链路的数据存储起来,然后有可视化界面展示出来每个调用链路,性能,故障,这些东西。下订单之后,直到返回,需要几秒钟。订单服务收到这个请求是12:00:
2020-07-11 22:53:50 342 1
原创 零拷贝技术到底是什么(面试)
零拷贝技术到底是什么inux提供了sendfile,也就是零拷贝技术。零拷贝技术,就是先从用户态切换到内核态,在内核态的状态下,把磁盘上的数据拷贝到内核缓冲区,同时从内核缓冲区拷贝一些offset和length到Socket缓冲区;接着从内核态切换到用户态,从内核缓冲区直接把数据拷贝到网络协议引擎里去;同时从Socket缓冲区里拷贝一些offset和length到网络协议引擎里去,但是这个offset和length的量很少,几乎可以忽略。只要2次切换,2次拷贝,就可以了。kafka、tomc
2020-07-11 22:51:28 472 1
原创 了解mmap吗?内存映射技术为什么可以提升IO性能(面试)
了解mmap吗有一种mmap技术,也就是内存映射,直接将磁盘文件数据映射到内核缓冲区,这个映射的过程是基于DMA引擎拷贝的,同时用户缓冲区是跟内核缓冲区共享一块映射数据的,建立共享映射之后,就不需要从内核缓冲区拷贝到用户缓冲区了。光是这一点,就可以避免一次拷贝了,但是这个过程中还是会用户态切换到内核态去进行映射拷贝,接着再次从内核态切换到用户态,建立用户缓冲区和内核缓冲区的映射。接着把数据通过Socket发送出去,还是要再次切换到内核态。接着直接把内核缓冲区里的数据拷贝到Socket缓冲区里去,
2020-07-11 22:49:24 732 2
原创 PageHelper不分页的解决方法
PageHelper.startPage(1,10);只对该语句以后的第一个查询语句得到的数据进行分页,就算你在PageInfo pa = new PageInfo("",对象);语句里面的对象是写的最终得到的数据,该插件还是只会对第一个查询所查询出来的数据进行分页第一个查询语句是指什么呢?举个例子吧,比如你有一个查询数据的方法,写在了PageHelper.startPage(1, 10);下面.但是这个查询方法里面包含两个查询语句的话,该插件就只会对第一查询语句查询的数据进行分页,而不是对返回最
2020-07-10 17:07:45 679
原创 Docker 入门万字详解 强烈推荐!
1.1 容器简介1.1.1 什么是 Linux 容器Linux 容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。更加详细地来说,请您假定您在开发一个应用。您使用的是一台笔记本电脑,而且您的开发环境具有特定的配置。其他开发人员身处的环境配置可能稍有不同。您正在开发的应用依赖于您当前的配置,还要依赖于某些特定文件。与此同时,您的企业还拥有标准化的测试
2020-07-09 17:27:34 387
原创 计算机网络学习随笔记(数据中心)
数据中心里面有一大堆的电脑,但是它和咱们办公室里面的笔记本或者台式机不一样。数据中心里面是服务器。服务器被放在一个个叫作机架(Rack)的架子上面。数据中心的入口和出口是路由器,由于在数据中心的边界,就像在一个国家的边境,称为边界路由器(Border Router)。为了高可用,边界路由器会有多个。一般家里只会连接一个运营商的网络,而为了高可用, 为了当一个运营商出问题的时候,还可以通过另外一个运营商来提供服务,所以数据中心的边界路由器会连接多个运营商网络。路由器,就需要跑路由协议,数据中心往往
2020-07-09 16:15:08 318
原创 计算机网络协议随笔记(CDN简介)
全球有这么多的数据中心,无论在哪里上网,临近不远的地方基本上都有数据中心。是不是可以在这些数据中心里部署几台机器,形成一个缓存的集群来缓存部分数据,那么用户访问数据的时候,就可以就近访问了呢?这些分布在各个地方的各个数据中心的节点,就称为边缘节点。 由于边缘节点数目比较多,但是每个集群规模比较小,不可能缓存下来所有东西,因而可能无法命中, 这样就会在边缘节点之上。有区域节点,规模就要更大,缓存的数据会更多,命中的概率也就更大。在 区域节点之上是中心节点,规模更大,缓存数据更多。如果还不命中,就只好回
2020-07-09 15:38:19 250
原创 JDK是如何对堆外内存进行分配和回收的(面试)
-XX:MaxDirectMemorySize:通过JVM参数是可以设置你最大可以使用的堆外内存的大小的,比如说设置堆外内存最大可以使用1GB,此时已经使用了950MB空间了,然后呢,你此时要申请一块80MB的堆外内存。会发现说,堆外内存已经不够了,此时不能直接分配堆外内存了。DirectByteBuffer,这个对象是JVM堆内存里的一个对象,但是这个DirectByteBuffer里面包含指针,引用了一块堆外的内存如果堆外内存足够,就直接预留一部分内存。 如果堆外内存不足,则将已经被.
2020-07-08 17:36:15 522
原创 堆外内存的理解(面试)
堆内和堆外的概念:堆内内存,heap,off-heap硬件层面的内存,其实就是一根内存条而已,自己去购买内存条,在笔记本电脑里是可以装更多的内存条的,习惯于用32GB内存的笔记本电脑,买16GB内存,装在里面。如何用堆外内存?ByteBuffer buffer = ByteBuffer.allocateDirect(1024); // 传入的是你要申请的堆外内存的大小// 你可以直接把你的数据写入到内外内存DirectByteBuffer里去// 把这块数据通过Socket发送,就是直接
2020-07-08 17:30:39 478
原创 计算机网络学习随笔记(HTTPDNS协议)
传统 DNS 存在哪些问题? 域名缓存问题 :它可以在本地做一个缓存,也就是说,不是每一个请求,它都会去访问权威 DNS 服务器,而是访问过一次就把结果缓存到自己本地,当其他人来问的时候,直接就返回这个缓存数据。这就相当于导游去过一个饭店,自己脑子记住了地址,当有一个游客问的时候,他就凭记忆回答了,不用再去查地址簿。这样经常存在的一个问题是,人家那个饭店明明都已经搬了,结果作为导游,他并没有刷新这个缓存,结果你辛辛苦苦到了这个地点,发现饭店已经变成了服装店。 域名转发问题 :缓存问题还是说
2020-07-08 15:55:40 141
原创 计算机网络学习随笔记(DNS协议)
DNS协议在网络世界,也是这样的。你肯定记得住网站的名称,但是很难记住网站的 IP 地址,因而也需要一个地 址簿,就是DNS 服务器。下面是DNS的结构图:根域名DNS服务器:返回顶级域DNS服务器的DNS和IP。 顶级域DNS服务器:返回权威DNS服务器的DNS。 权威DNS服务器:返回相应主机的IP地址。DNS解析的过程:为了提高DNS的解析功能,很多网络都会就近部署DNS缓存服务器。电脑客户端会发出一个 DNS 请求,问 www.163.com 的 IP 是啥啊,并发给本
2020-07-08 15:08:55 211
原创 XSS网络攻击与的原理是什么(面试)
XSS网络攻击的原理是什么XSS是大部分的黑客进行网络攻击的手段,XSS的全称是Cross Site Script,就是跨站点脚本攻击,意思就是说,黑客恶意篡改你的网页的前端代码,在里面注入一些他自己的html+javascript的脚本和代码,然后你比如在访问那个网站的网页的时候,他注入的那些恶意脚本就会运行了。恶意脚本运行的时候就会控制你的浏览器,这个时候他的脚本就可以做很多很多的事情了。第一种XSS攻击是反射型攻击,他主要是想办法让你点击一个URL链接,在这个URL链接里就嵌入他自己的恶意
2020-07-07 16:24:42 410
原创 Java虚拟机对锁的优化(面试)
Java虚拟机对锁的优化从JDk 1.6开始,JVM就对synchronized锁进行了很多的优化。synchronized说是锁,但是他的底层加锁的方式可能不同,偏向锁的方式来加锁,自旋锁的方式来加锁,轻量级锁的方式来加锁。这些东西本身你只要了解一个概念就可以了。synchronized(this) { //代码}锁消除:锁消除是JIT编译器对synchronized锁做的优化,在编译的时候,JIT会通过逃逸分析技术,来分析synchronized锁对象,是不是只可能被一个...
2020-07-07 16:07:49 190
原创 volatile关键字对原子性、可见性以及有序性的保证(面试)
volatile关键字对原子性、可见性以及有序性的保证volatile对原子性的保证真的是非常的有限,其实主要就是32位jvm中的long/double类型变量的赋值操作是不具备原子性的,加上volatile就可以保证原子性了。eg:volatile boolean isRunning = true;线程1:Release屏障isRunning = false;Store屏障=> 原理,没有过多的牵扯到内存屏障的一些东西,可见性和有序性,主要都是基于各种内存屏障来实现的。.
2020-07-07 15:37:32 637
原创 HTTPS的工作原理(面试)
HTTPS的工作原理是什么?浏览器把自己支持的加密规则发送给网站。 网站从这套加密规则里选出来一套加密算法和hash算法,然后把自己的身份信息用证书的方式发回给浏览器,证书里有网站地址、加密公钥、证书颁发机构。 浏览器验证证书的合法性,然后浏览器地址栏上会出现一把小锁;浏览器接着生成一串随机数密码,然后用证书里的公钥进行加密,这块走的非对称加密;用约定好的hash算法生成握手消息的hash值,然后用密码对消息进行加密,然后把所有东西都发给网站,这块走的是对称加密。 网站,从消息里面可以取出来公钥加
2020-07-07 15:14:46 898
原创 计算机网络学习随笔记(文件传输协议)
文件传输最简单的方式就是通过HTTP进行下载。通过浏览器下载的时候,只要文件稍微大点,下载的速度就奇慢无比。还有一种下载方式就FTP,也就是文件传输协议,FTP采用两个TCP连接来传输一个文件。控制连接:服务器以被动的方式打开用于FTP的端口21,客户端主动发起连接。这个连接将命令从客户端传送到服务器端,并将服务器的应答返回。常用的命令:list-获取文件目录;reter-取一个文件;store-存一个文件。 数据连接:每当一个文件在客户端与服务器之间进行传输时,就会建立一个数据连接。FTP
2020-07-07 10:44:18 425
原创 计算机网络学习随笔记(HTTPS协议)
HTTPS协议:HTTPS是加密传输,对于加密算法总共有两大类一种是对称加密算法,一种是非对称加密算法。在对称加密算法中,加密和解密使用的密钥是相同的。也就是说,加密和解密使用的是同一个密钥。因此,对称加密算法要保证安全性的话,密钥要做好保密。只能让使用的人知道,不能对外公开。 在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。一把是作为公开的公钥,另一把 是作为谁都不能给的私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密(大多数情况下使用公钥加密,私钥解密)
2020-07-06 14:33:12 142
原创 深入分析synchronized是如何通过加锁保证原子性的(面试)
synchronized底层的原理,monitor,没有特别细化,这里说明一下synchronized实现原子性的核心原理。简单的synchronized加锁的原理,说白了,就是在进入加锁代码块的时候加一个monitorenter的指令,然后针对锁对象关联的monitor累加加锁计数器,同时标识自己这个线程加了锁,通过monitor里的加锁计数器可以实现可重入的加锁,在出锁代码块的时候,加一个monitorexit的指令,然后递减锁计数器,如果锁计数为0,就会标志当前线程不持有锁,释放锁然后wait和n
2020-07-05 14:50:19 2523
Xshell5+Xftp绿色免安装版
2019-03-12
黑马乐优商城项目最新Sql文件
2019-01-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人