自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Ubuntu离线安装软件

需求1、设备在不方便联网的环境下,需要安装一些软件,设备使用系统是Ubuntu 16.04解决方案1. 下载需要的安装包一种办法是直接去找对应的安装包,这种需要考虑版本、设备硬件平台等,要注意不要搞错这里采用一种取巧的方式$ sudo rm -rf /var/cache/apt/archives/* # 清空缓存目录,这一步也可以不做$ sudo apt-get clean # 清空缓存目录,这一步作用和上面一样,清除缓存$ sudo apt-get -d install <包名&gt

2021-03-16 22:03:55 2218

原创 负载均衡

挖个坑,后面找时间写一下美团MGWLVS 负载均衡集群

2021-03-01 19:00:17 279

原创 虚拟ip(VIP)实现原理

实现高可用(HA)的方式,一般采用两台机器同时完成一项功能,比如数据库服务器,平常只有一台机器对外提供服务,另一台机器作为热备,当这台机器出现故障时,自动动态切换到另一台热备的机器。故障检测的实现方式: 1)心跳,采用定时发送一个数据包,如果机器多长时间没响应,就认为是发生故障,自动切换到热备的机器上去。怎么实现自动切换那? 2)虚IP。何为虚IP那,就是一个未分配给真实主机的IP,也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的 任意一个都可以连接到这

2021-03-01 17:20:47 5328

原创 rocketMQ保证不丢消息的处理方法

目录消息发送发送方式同步发送异步发送单向发送重试机制多Master消息存储同步刷盘异步刷盘(默认)磁盘挂了?消息消费手动ack失败重试保证一条消息不被丢失,主要可以从消息流转的三个环节考虑。消息发送可能有成功,消息存储肯能还没存盘或者存盘以后磁盘挂了,消息消费失败,但是已经ack,无法再消费。所以解决思路从下面几点考虑。消息发送发送方式同步发送发送以后,等broker返回ack才算发送完成。异步发送发送以后就过,不再等待ack。等回调函数触发。单向发送只负责发送消息而不等待服务器回应且没有

2021-02-02 23:00:06 365

原创 redis持久化

2021-01-26 19:20:14 66

原创 CAS登录验证流程

最近一个项目用到CAS登录认证,研究了很多资料,这两篇把这个讲清楚了,这里记录下,以后有时间把详细流程在这里补一下。单点流程序列图相关术语解释(TGT、ST、PGT、PT、PGTIOU)

2021-01-19 17:16:06 471

原创 彻底搞懂跨域问题

这是几篇非常不错的跨域问题解决的文章,非常好,记录在这里阮一峰老师的跨域资源共享 CORS 详解还有一个解决方案的解决ajax跨域问题还有一篇讲解在服务器如何配置的springboot设置Cors跨域的四种方式...

2021-01-14 18:30:00 103

原创 最好的计算机网络入门

读了一个特别好的计算机网络入门的文章,怕丢了,特意链接在这里。讲解的确实深入浅出。计算机网络入门,点这里

2021-01-12 14:55:05 126

原创 Java SPI思想梳理

Java SPI思想梳理写的确实很好,在这里记录下,方便以后查看

2021-01-11 16:12:05 86

原创 outlook配置126邮箱

配置方法outlook版本我用的不是outlook2016,应该是office365带的最新版outlook。网上找到的资料很多都说的是2016如何配置,很多操作还是不同的,需要注意。配置流程点击右上角的设置按钮点击全部设置选择其他其他电子邮件账户填写地址和密码(这个密码不是邮箱登录密码,实际上是邮箱的一个授权码,下面再解释如何获取,这里要注意)填写邮件服务器地址接收服务器: imap.126.com 端口:993发送服务器: smtp.126.com 端

2020-12-30 16:33:07 10211

原创 BIO、NIO和AIO一文搞懂

目录BIO缺点服务端代码客户端NIONIO三大核心组件server端代码client端代码NIO服务端程序详细步骤AIO服务端代码客户端代码简单总结阻塞和非阻塞同步和异步BIO阻塞式IO。一个线程对应一个客户端。缺点IO代码里read操作是阻塞操作,如果连接不做数据读写操作会导致线程阻塞,浪费资源。线程太多的情况下服务器压力较大。服务端代码public class SocketServer { public static void main(String[] args) thr

2020-12-26 18:14:04 139

原创 RocketMQ消息存储

目录何时存储消息消息存储介质磁盘存储速度零拷贝技术消息存储结构刷盘机制同步刷盘异步刷盘配置方式消息主从复制同步复制异步复制配置方式负载均衡Producer负载均衡Consumer负载均衡集群模式广播模式消息重试如何让消息进行重试重试如何处理重试次数:关于MessageId:配置覆盖:死信队列消息幂等消息幂等的必要性发送时消息重复投递时消息重复负载均衡时消息重复(包括但不限于网络抖动、Broker 重启以及订阅方应用重启)处理方式何时存储消息MQ收到一条消息后,需要向生产者返回一个ACK响应,并将消息存

2020-12-19 19:39:13 2081 1

原创 RocketMQ学习笔记

RocketMQ组件结构NameServer提供轻量级的Broker路由服务。启动NameServer服务:$ROCKETMQ_HOME/bin目录下有个mqnamesrnohup bin/mqnamesrv & Broker实际处理消息存储、转发等服务的核心组件。启动命令:nohup ./mqbroker &Producer消息生产者集群。通常是业务系统中的一个功能模块。Consumer消息消费者集群。通常也是业务系统中的一个功能模块。RocketMQ的编程

2020-12-17 23:46:55 180

原创 三大主流消息队列Kafka、RabbitMQ、RocketMQ比较

RocketMQ淘宝内部的交易系统使用了淘宝自主研发的Notify 消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011 年初,Linkin 开源了Kafka 这个优秀的消息中间件,淘宝中间件团队在对Kafka做过充分Review之后,Kafka 无限消息堆积,高效的持久化速度吸引了我们,但是同时发现这个消息系统主要定位于日志传输,对于使用 在淘宝交易、订单、充值等场景下还有诸多特性不满足,为此我们重新用 Java 语言编写了 Rocke

2020-12-17 22:18:44 1393

原创 RabbitMQ学习-高级特性

消息可靠性投递生产端confirm在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。confirm 确认模式return 退回模式rabbitmq 整个消息投递的路径为:producer—>rabbitmq broker—>exchange—>queue—>consumer消息从 producer 到 exchange 则会返回一个 confirmCallbac

2020-12-15 22:01:18 73

原创 RabbitMQ学习

这里写目录标题MQ 简介优点缺点常见MQ产品AMQP协议RabbitMQ简介基本概念BrokerVirtual hostConnectionChannelExchangeQueueBinding工作模式简单模式work queuesPublish/Subscribe 发布与订阅模式Routing 路由模式通配符Topic主题模式RPC 远程调用模式发布者确认模式MQ 简介优点异步解耦,提高可维护性,提高容错性削峰填谷,提高系统稳定性异步提速,提高提高吞吐量缺点降低可用性引入新的组件,M

2020-12-14 23:07:47 108

原创 一文讲清http代理的cookie问题

http使用cookieHTTP请求,Cookie的使用过程1、server通过HTTP Response中的"Set-Cookie: header"把cookie发送给client2、client把cookie通过HTTP Request 中的“Cookie: header”发送给server3、每次HTTP请求,Cookie都会被发送。http请求发送cookies的条件:1、本地已经缓存有cookies2、根据请求的URL来匹配cookies的domain、path属性,如果都符合才会发

2020-12-01 22:47:42 4277 2

原创 not a git repository (or any of the parent directories): .git

git命令行操作出现个小问题解决办法在当前路径下执行git init问题解决。

2020-11-25 21:35:38 77

原创 iptables

数据流进防火墙流程

2020-11-23 23:10:19 82

原创 redis缓存设计

目录缓存穿透解决办法1. 缓存空值2. 布隆过滤器注意缓存击穿解决办法缓存雪崩解决方法热点缓存重建优化解决方法缓存与数据库双写不一致解决方法redis开发规范键值设计键设计值设计命令规范客户端规范缓存穿透缓存穿透是指查询的数据在缓存中不存在,需要到数据库中查询,导致缓存没有起到作用。解决办法1. 缓存空值对于不存在的key,在缓存中存储value为空,以后来的查询仍然去缓存中查询。2. 布隆过滤器对于每一次查询,把key放入布隆过滤器进行过滤,如果布隆过滤器判断不存在,就直接返回空,不再去数据

2020-11-14 16:34:17 96

原创 设计模式六大原则

总原则 开-闭原则设计应该对扩展开放,对修改关闭。在设计之初,就应该考虑以后可能改动的点,尽量通过接口来定义行为,以后通过不同的实现类的多态性来扩展功能,不要直接去修改原有代码。开闭原则是软件设计的总的原则,最关键一点是利用多态性,定义抽象类或者接口来实现核心逻辑。接口要作为定义好的交互规范发挥作用。里氏替换原则父类出现的地方,一定可以使用子类来替换。这里要求,子类在继承时,不能覆盖父类的非抽象方法,子类只能去实现父类的接口,可以添加自己特有的方法,但是不能覆盖父类的非抽象方法。反过来说,如果

2020-11-12 22:31:02 84

原创 redis核心数据结构

目录RedisDb数据结构String数据结构示意图listziplistquiklisthashsetintsetzsetzset数据结构RedisDb数据结构typedef struct redisDb { dict *dict; dict *expires; dict *blocking_keys; dict *ready_keys; dict *watche

2020-11-10 22:48:51 95

原创 redis数据结构

目录redis五种数据结构string基本操作字符串常用操作原子加减使用场景单值缓存对象缓存分布式锁计数器Web集群session共享分布式系统全局序列号hash哈希Hash常用操作使用场景对象缓存电商购物车优缺点list常用操作应用场景常用数据结构微博消息和微信公号消息set常用操作使用场景微信抽奖小程序微信微博点赞,收藏,标签zset常用操作集合操作应用场景集合操作实现排行榜redis五种数据结构string基本操作字符串常用操作SET key value //存入字符串键值对M

2020-11-10 22:11:00 129

原创 设计模式-策略模式

定义策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。分析策略模式要求算法封装以后能相互替换,就是要求封装以后的对象有共性,很自然的,我们想到所有的算法实现相同的接口,通过接口来约束算法的操作。类图#mermaid-svg-dIl8NmTsAflqD9GX .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-fam

2020-11-08 18:26:44 70

原创 两阶段提交和三阶段提交

分布式提交的问题在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。在数据有多份副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突,造成事实上的数据不一致。解决思路可以看到,这里出现问题的主要原因是多个副本之间没有同步机制,可以增加一个协调机制来解决数据不一致问题。下面介绍的两阶段提交和三阶段提交都是通过引入一个协调者来进行协调。两阶段提交概述

2020-11-03 23:47:32 3051

原创 device /dev/ttyS2 is locked问题分析和解决

问题开发了一款远程服务的设备,在调试过程中,出现了用户无法使用串口连接下端设备的问题,我们设备上使用的是minicom进行串口连接和调试的。查看设备连接问题,提示 device /dev/ttyS2 is locked。分析ttyS2就是我们串口使用的端口设备,提示被锁定,可以在/var/lock/目录下查看是否有锁定文件。/var/lock功能介绍:许多程序遵循在/var/lock 中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件。其他程序注意到这个锁定文件,将不试图使用这个

2020-10-27 19:13:09 2918

原创 Spring bean初始化过程

1:实例化一个ApplicationContext的对象;2:调用bean工厂后置处理器完成扫描;3:循环解析扫描出来的类信息;4:实例化一个BeanDefinition对象来存储解析出来的信息;5:把实例化好的beanDefinition对象put到beanDefinitionMap当中缓存起来,以便后面实例化bean;6:再次调用bean工厂后置处理器;7:当然spring还会干很多事情,比如国际化,比如注册BeanPostProcessor等等,如果我们只关心如何实例化一个bean的话那么

2020-10-26 16:35:27 2468

原创 设计模式-装饰器模式

定义装饰器模式以对客户端透明的方式拓展对象的功能,是对继承关系的一种替代。简单分析一下,继承方式是一种耦合比较强的方式,很多地方推荐使用组合方式。类图#mermaid-svg-YXg2C5LAosQWOclX .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-YXg2C5LAosQWOclX .labe

2020-10-25 14:39:55 62

原创 设计模式-享元模式

定义享元模式(Flyweight Pattern)是运用共享技术有效地支持大量细粒度对象的复用。说实话,这个定义看了还是让人有点懵。咱们来从名字上来分析一下,先看看英文名称,Flyweight意思是轻量级,蝇量级选手,在面向对象语义中应该是小对象、细粒度对象。再看看中文名称,享元,显然是从另外一个角度在描述同样的意见事情。享元中的享应该理解为共享,元应该理解为元素,合起来就是共享元素,再联系英文名称,共享元素达到支持轻量化对象的一种模式。这里共享元素应该是重点。上面这些分析很容易让人联想到各种缓冲

2020-10-20 22:05:23 76

原创 设计模式-命令模式

定义将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。很容易让人一头雾水,在别的地方看到一个这样的解释,命令是具现化的方法调用。就是将方法包装为对象,统一调用。所以,GoF随后说:命令模式是一种回调的面向对象实现。...

2020-10-14 23:04:16 91

原创 设计模式-责任链模式

#mermaid-svg-RjVozA1PzKH27C7S .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-RjVozA1PzKH27C7S .label text{fill:#333}#mermaid-svg-RjVozA1PzKH27C7S .node rect,#mermaid-svg-RjVozA1PzK

2020-10-11 12:25:48 123

原创 Spring AOP通俗解释

AOP就是面向切面编程,到底什么意思呢,下面用通俗的话介绍一遍。为啥要用AOP省事方便重复的代码不需要导出写,相当于对不同两个维度的代码进行了组合。逻辑清晰主逻辑可以专注于自己的事情,零碎的与主流程关系不大的事情交给切面完成。比如日志、事务、安全等。AOP基本概念1. 通知(advice)想要增强的功能,就是上文提到的日志、事务、安全等。在通知里面定义好,在别的地方引用。2. 连接点(JoinPoint)就是spring允许你使用通知的地方,基本每个方法的前、后(两者都有也行),或抛

2020-10-09 23:11:55 278

原创 InnoDB执行引擎的BufferPool缓存机制

这么复杂的机制,是为了保证并发,因为硬盘的随机读写性能是非常差的,通过这样的机制,可以保证数据不被丢失的同时,有很高的读写性能,可以在较高机器配置下抗下几千的读写请求。Mysql这套机制可以保证每个更新请求都是先更新内存BufferPool,然后顺序写日志,保证各种异常情况的数据一致性。...

2020-09-24 23:10:54 160

原创 Mysql MVCC多版本并发控制

Mysql MVCC多版本并发控制简介Undo日志版本链与read view机制详解一致性视图 read-view构成可重复读和读已提交差别比对规则总结简介Mysql在可重复读级别下,同样的sql在一个事务里面多次执行查询结果相同,即使有其他事务对数据有修改也不会影响当前事务的查询结果。这个隔离就是通过MVCC(多版本并发控制 Multi-Version Concurrency Control),对同一行的数据的读和写两个操作是不会通过加锁互斥来保证隔离性,避免频繁加互斥锁。串行化隔离级别为了保证隔

2020-09-24 23:05:02 113

原创 Mysql锁学习笔记

Mysql锁学习笔记锁分类表锁行锁总结行锁与事务隔离级别案例分析读未提交:读已提交可重复读串行化间隙锁(Gap Lock)临键锁(Next-key Locks)Mysql锁其他特点锁主要是加在索引上,如果对非索引字段更新,行锁可能会变表锁锁优化建议锁分类从性能上分,乐观锁和悲观锁从对数据库操作上分,读锁和写锁(都是悲观锁)读锁 (共享锁,shared锁)多个会话可以同时读,不能写写锁 (排它锁,exclusive锁)只有一个会话可以读写,其他会话阻塞,知道当前获取的会话释放锁,其他会话才能执行

2020-09-20 15:58:14 142

原创 Mysql事务隔离

Mysql事务隔离事务隔离为什么要有事务隔离事务及其ACID属性事务并发带来的问题事务隔离为什么要有事务隔离数据库会并发执行多个事务,不同的事务可能会对同一批数据进行增删改查操作,就会引起数据脏写、脏读、不可重复读、幻读等情况。本质上都是由于事务之间的并发导致,简单点说就是事务之间互相影响,导致数据不一致问题。事务隔离机制就是解决多事务并发的一种方式。事务及其ACID属性事务是由一组sql组成的逻辑处理单元。具有ACID四个属性:原子性(Atomicity) 事务是一个原子操作单元,不可分割

2020-09-18 00:16:57 54

原创 Java synchronized学习

synchronized简介静态方法加锁一般方法加锁实现原理代码块加锁实现原理Monitor对象对象内存布局1. 对象头(Header)2. 实例数据(Instance Data)3. 对齐填充(Padding)锁的升级过程偏向锁轻量级锁自旋锁重量级锁锁消除逃逸分析优化简介synchronized修饰符是Java提供的多线程访问临界资源的同步器,一般我们有三种使用方式:对类的静态方法加锁对类的一般方法加锁对代码块加锁静态方法加锁静态方法是属于类的,所以这种加锁实际上对类进行加锁,加锁对象为

2020-09-13 18:13:09 110

原创 AQS学习

文章目录AQS是啥特性主要属性1.状态2.阻塞队列自定义需要实现的方法isHeldExclusively()tryAcquire(int)tryRelease(int)tryAcquireShared(int)tryReleaseShared(int)需要注意的地方AQS是啥AQS (Abstract Queue Synchronizer),抽象队列同步器,定义了一套多线程访问共享资源的同步器框架,是一个依赖状态的同步器。特性阻塞等待队列共享/独占公平/非公平可重入允许中断主要属性1

2020-09-08 21:21:08 97

原创 JAVA线程池

JAVA线程池为啥要用线程池什么时候使用线程池线程池主要方法线程池状态线程池创建1. corePoolSize 核心线程数2. maximumPoolSize 最大线程数3. keepAlivetime 线程最大空余时间4. workQueue 等待线程队列5. threadFactory 线程工厂6. handler 拒绝策略为啥要用线程池JAVA虚拟机线程实现是KLT模型,与OS线程是1:1的映射关系,就是使用内核态线程来实现虚拟机线程,所以线程的创建、调度、销毁都需要切换到内核态,所以线程是稀

2020-09-01 21:16:25 91

原创 一文搞懂mysql索引

mysql索引索引是啥索引类型数据库数据存储MyISAMInnoDB聚集索引和非聚集索引聚集索引非聚集索引为何应该使用自增整型主键InnoDB非聚集索引回表查询索引覆盖联合索引最左匹配原则索引是啥索引是一种排好序的数据结构,mysql使用这种结构能够高效获取数据索引类型二叉树在一些情况下回退化为链表。hash只能实现= 和in 查找,无法范围查找,可能有哈希冲突。查找复杂度低。红黑树树的高度在数据量大的情况下太高,效率较低。B树mysql使用B+树,非叶子节点不存储数据,只存储索引,

2020-08-27 23:12:47 405

遗传算法MATLAB代码

简单的遗传算法,计算函数最值. function ga_main() % 遗传算法程序 % n-- 种群规模% ger-- 迭代次数% pc--- 交叉概率% pm-- 变异概率 % v-- 初始种群(规模为n)% f-- 目标函数值% fit-- 适应度向量 % vx-- 最优适应度值向量% vmfit-- 平均适应度值向量 clear all; close all; clc;%清屏 tic;%计时器开始计时 n=20;ger=100;pc=0.65;pm=0.05;%初始化参数 %以上为经验值,可以更改。 % 生成初始种群 v=init_population(n,22); %得到初始种群,22串长,生成20*22的0-1矩阵 [N,L]=size(v); %得到初始规模行,列 disp(sprintf('Number of generations:%d',ger)); disp(sprintf('Population size:%d',N)); disp(sprintf('Crossover probability:%.3f',pc)); disp(sprintf('Mutation probability:%.3f',pm)); %sprintf可以控制输出格式 % 待优化问题 xmin=0;xmax=9; %变量X范围 f='x+10*sin(x.*5)+7*cos(x.*4)'; % 计算适应度,并画出初始种群图形 x=decode(v(:,1:22),xmin,xmax);"位二进制换成十进制,%冒号表示对所有行进行操作。 fit=eval&#40;f&#41;;%eval转化成数值型的 %计算适应度 figure(1);%打开第一个窗口 fplot(f,[xmin,xmax]);%隐函数画图 grid on;hold on; plot(x,fit,'k*');%作图,画初始种群的适应度图像 title('(a)染色体的初始位置');%标题 xlabel('x');ylabel('f(x)');%标记轴 % 迭代前的初始化 vmfit=[];%平均适应度 vx=[]; %最优适应度 it=1; % 迭代计数器 % 开始进化 while it<=ger %迭代次数 0代 %Reproduction(Bi-classist Selection) vtemp=roulette(v,fit);%复制算子 %Crossover v=crossover(vtemp,pc);%交叉算子 %Mutation变异算子 M=rand(N,L)<=pm;%这里的作用找到比0.05小的分量 %M(1,:)=zeros(1,L); v=v-2.*(v.*M)+M;%两个0-1矩阵相乘后M是1的地方V就不变,再乘以2. NICE!!确实好!!!把M中为1的位置上的地方的值变反 %这里是点乘 %变异 %Results x=decode(v(:,1:22),xmin,xmax);%解码,求目标函数值 fit=eval&#40;f&#41;; %计算数值 [sol,indb]=max(fit);% 每次迭代中最优目标函数值,包括位置 v(1,:)=v(indb,:); %用最大值代替 fit_mean=mean(fit); % 每次迭代中目标函数值的平均值。mean求均值 vx=[vx sol]; %最优适应度值 vmfit=[vmfit fit_mean];%适应度均值 it=it+1; %迭代次数计数器增加 end

2012-11-08

空空如也

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

TA关注的人

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