自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (8)
  • 收藏
  • 关注

原创 MySQL详解

1、数据结构(B+还是B-?)目前大多数数据库系统都使用B-树和B+树作为索引结构。一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级。机械磁盘的存储(I/O)需要寻道(移动磁头对准磁道)以及旋转(将磁盘的目标扇区旋转到磁头下),因此为了提高效率,要尽量减...

2020-03-08 22:24:32 477

原创 kafka

高可用kafka副本概念分区中的所有副本统称为AR(Assigned Repllicas),所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas),ISR集合是AR集合中的一个子集1、leader副本:响应客户端的读写请求 2、follow副本:备份leader的数据,不进行读写操作 3、ISR副本:leader副本和所有能够与leader副本保持基本同步的follow副本,如 果follow副本和leader副本数据同步速度过慢,该fo

2021-08-15 13:39:55 198

原创 rocketmq事务消息

比如更新db并发送消息,由下游继续处理任务。但是无法保证更新db与发送消息同时成功。1. rocketmq先发一个半消息(Half Msg,类似一个 Prepare 操作),这个消息是不会投递给消费者的【如果半消息发送失败,db未更新,整个操作失败,无影响】2. 半消息发送成功后更新db【半消息发送成功,但此时发生异常,生产者以为失败了不会更新db。由于broker存储半消息成功了,缺迟迟等不到后续提交操作,超时后broker会询问生产者此消息要如何处理,生产者查询db,然后给broker答

2021-08-05 17:14:33 173

原创 flag: redis6.0

占坑有空写redis6.0提供了很多有意思的功能,引入多线程用来提高IO性能,引入集群proxy,将原先集群内部每台机器需要保存集群所有信息抽象到了proxy,更方便的进行集群信息变更、与客户端交互等等。...

2021-01-28 12:06:20 173

原创 RateLimiter源码解析

简介限流即流量限制,目的是在遇到流量高峰期或者流量突增时,通过对流量进行限制,以把流量控制在系统所能接受的合理范围之内,不至于让系统被高流量击垮。当达到限制速率时,可以拒绝服务(定向到错误页或告知资源没有了)、排队或等待(比如秒杀、评论、下单)、降级(返回兜底数据或默认数据,如商品详情页库存默认有货)等。Google开源工具包Guava提供了限流工具类RateLimiter,该类基于令牌桶算法来完成限流。令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。桶中存放的令牌数有最大上限,.

2020-12-22 19:04:04 435

原创 Semaphore源码解析

Semaphore,信号量,可以用来控制同时访问特定资源的线程数量,可以将信号量看做是在向外分发使用资源的许可证,只有成功获取许可证,才能使用资源。底层基于AQS实现。存在Sync、NonfairSync、FairSync三个内部类,Sync类继承自AbstractQueuedSynchronizer抽象类,NonfairSync与FairSync类继承自Sync类主要变量和方法acquire() 获取一个令牌,在获取到令牌、或者被其他线程调用中断之前线程一直处于阻塞状态。acqu..

2020-12-21 22:07:30 158 2

原创 名字生成器 - 再也不用担心给孩子起名了

import java.util.Random;/** * Created on 2020-10-02 */public class GenerateName { public static void main(String[] args) { printName("韩", 2, 800); } /** * 打印名字 * @param lastName 姓 * @param digits 名字长度 * @para.

2020-10-02 15:48:45 8279

原创 震惊:Netty竟然对ThreadLocal做出这种事...

threadlocal

2020-09-05 17:59:23 710

原创 slf4j打印traceid

我们在调试代码时会打很多日志,这些错综复杂的日志往往混杂在一起,很难筛选出某个请求链路的日志。我们就希望在每个请求到来时生成一个唯一的traceid,可以set到请求头信息中,打日志时带上就可以快速筛选请求链路的日志了。slf4j提供了这样的功能(MDC),slf4j用ThreadLocal来存储traceid。首先注册一个拦截器,在preHandle方法中调用MDC.put()方法,保存随机生成的id。在afterCompletion方法中删除。public class TraceIntercep

2020-09-04 18:57:56 2316

原创 好用的工具

在idea中Preferences -> plugins -> Browse repositories -> 搜索 plantUML -> 安装即可@startuml'单引号表示注释'autonumber 显示序号'alt/else 消息分组'== 按逻辑分割线'activate/deactivate 对象的活跃周期'note 添加注释title 测试时序图actor "客户端" as aparticipant "服务端" as bdatabase ..

2020-09-02 10:44:20 217

原创 《Netty、Redis、Zookeeper高并发实战》读书笔记

使用java NIO Buffer类的基本步骤使用创建子类实例对象的allocate()方法,创建一个Buffer类的实例对象 调用put方法,将数据写入缓冲区 写入完成后,调用flip()方法,将缓冲区转换为读模式 调用get方法,从缓冲区中读取数据 读取完成后,调用clear方法或compact方法,将缓冲区转换为写入模式...

2020-06-03 21:12:12 770

原创 2020年5月社招java面试题总结

蚂蚁金服:1、hashMap源码,为什么使用红黑树?2、为什么要使用三级缓存?3、解释下AOP原理?4、动态代理cglib是怎么实现的?

2020-05-26 20:54:00 1646

原创 实现一个线程安全的阻塞队列

1、使用synchronized实现。由于synchronized是同一把锁,所以使用notify()可能会唤醒非目标线程,notifyAll()唤醒全部线程则会带来大量的 CPU 上下文切换和锁竞争public class ArrayBlockingQueue { private Object[] array; //数组 private int head; //头 private int tail; //尾 private volatile int size; //.

2020-05-17 16:02:30 1153 1

原创 JVM调优

jvm参数常用配置-Xmx 指定最大堆 -Xms 指定最小堆 -Xmn 设置新生代大小 -XX:NewRatio 新生代和老年代的比值,例如:4,表示新生代:老年代=1:4 -XX:SurvivorRatio Survivor区和eden的比值,例如:8,表示两个Survivor:eden=2:8 -XX:+HeapDumpOnOutOfMemoryError OOM时导出堆到文件...

2020-04-25 11:02:39 267

原创 从CountDownLatch源码和ReenTrantLock源码看AQS(AbstractQueuedSynchronizer)

目录AQS概念CountDownLatch源码ReenTrantLock源码AQS概念抽象队列同步器,是除了java自带的synchronized关键字之外的锁机制。AQS就是基于虚拟的双向队列(双向链表),用volatile修饰共享int变量state,线程通过CAS+自旋去改变状态符,成功则获取锁成功,失败则进入等待队列,等待被唤醒。关键词:双向链表、CAS、自旋。AQS ...

2020-04-23 16:55:00 311

原创 zookeeper详解

一、什么是zookeeper?zookeeper是一个开源的分布式协调服务,是一个典型的分布式数据一致性解决方案。可以实现:命名服务(节点类似于文件系统)、配置管理(watcher机制)、分布式锁、集群管理(dubbo的注册中心)。可以保证:顺序一致性(同一个客户端发起的事务请求,会严格按照顺序执行) 原子性(执行一个事务,整个集群要么全部成功,要么全部失败) 单一视图(无论客户端连接...

2020-04-11 23:15:48 282

原创 springboot

用来简化spring应用开发,约定大于配置。嵌入式的tomcat无需部署war文件,starters自动依赖与版本控制。核心注解@SpringBootApplication。Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成spring及其他技术。...

2020-04-10 23:36:23 132

原创 什么是Restful

restful是一种思想或者风格,并不是一种标准。以前我们每次请求的接口或地址都在做描述,例如查询的时候用了query,新增的时候用save,其实完全没必要,我使用了get请求就是查询,使用post请求就是新增的请求,完全没必要额外描述。在Restful之前的操作:http://127.0.0.1/user/query/1 GET 根据用户id查询用户数据http://127.0.0...

2020-04-09 15:24:50 167

原创 mybatis多数据源动态切换

首先在配置文件中配置多个数据源 <!--数据库配置一--> <bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> ...

2020-04-02 17:38:59 259

原创 浅入理解jvm

自动内存管理机制 程序计数器区是唯一没有内存溢出的区域,hotspot通过使用直接指针访问方法区的对象类型数据。 垃圾回收机制。 新生代采用标记复制法,老年代采用标记整理法。引用计数器法需要用可达性分析防止循环依赖。强软弱引用尚未理解。 垃圾收集器 serial是默认的新生代收集器,但会stop the world带来不良体验。parnew仅仅是多线程,公司目前使用,多...

2020-03-27 22:34:36 232

原创 mybatis浅析

SqlSession是Mybatis最重要的构建之一,提供select/insert/update/delete方法,SqlSession的运行主要是依靠Executor执行器调用(调度)StatementHandler、parameterHanlder、ResultSetHandler,Executor首先通过创建StamentHandler执行预编译并设置参数运行。SqlSession重...

2020-03-24 14:49:02 248

原创 solr浅析

全文索引原理:可以理解为一本词典。现在有100个商品名称,首先用分词器处理(拆分、去标点、去无意义的词等)得到词元,然后创建索引文件。进行检索时,在索引表中找关键词,如果有多个关键词,将查找结果合并。使用: 创建spring-solr.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns="ht...

2020-03-23 22:39:48 161

原创 spring mvc 异常统一处理

使用HandlerExceptionResolver接口//HandlerExceptionResolver接口方式public class ExceptionTest implements HandlerExceptionResolver{ @Override public ModelAndView resolveException(HttpServletRequest...

2020-03-06 12:16:28 141

原创 六大设计原则

单一职责:一个类应负责一个职责,一个方法只完成一件事。 里氏替换原则:任何父类出现的地方都可以用子类替换。 依赖倒置:通过接口产生依赖,而不是通过实现类。 接口隔离:不要为了容纳多个模块的访问而将所有方法放在同一个接口中,应尽量细化接口。 迪米特法则:最少知道原则,即一个类应该对需要调用的类知道的最少,提示减少public属性和方法。 开闭原则:当需求变化时应通过扩展代码而非修改代码来实...

2020-02-25 22:53:48 132

原创 spring浅析

1、spring启动流程web容器为web应用提供一个全局的上下文环境ServletContext,为IOC容器提供宿主环境。 web.xml中有contextLoaderListener,在web容器启动时触发容器初始化事件(ApplicationContext可以理解为IOC容器,具体实现有多个,如XmlWebApplicationContext),加载所有的service、dao、数据...

2020-01-19 18:24:27 405

原创 spring事务的传播规则

一、事务的特性原子性:事务包含的所有操作要么全部成功要么全部失败 一致性:使数据库从一个一致性状态变换到另一个一致性状态,比如A有100元 B有0元,A转给B50元,结果为A50元B50元 隔离性:多个并发事务之间要相互隔离 持久性:事务提交后对数据库的改变是永久的二、事务的隔离级别未提交读:读数据不加锁;写数据加行级S锁,事务结束释放 已提交读:读数据加行级S锁,读完就释放;...

2019-12-25 15:06:43 600

原创 java NIO浅析

NIO与IO的主要区别是:1、IO多路复用 2、IO流与NIO缓冲区 阻塞与非阻塞(IO多路复用) 传统IO是阻塞的,当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出CPU。当数据就绪之后,内核会将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除block状态。此外由于每个连接都需要创建一个线程,...

2019-12-18 10:39:40 182

原创 秒杀系统

拜读了58沈剑的秒杀系统架构优化思路后颇有收获,秒杀系统设计的核心思想就是:将请求尽量拦截在数据库的上游、重复利用缓存。前端利用CDN和浏览器缓存进行一级流量拦截秒杀前用户不断刷新商品详情页,页面请求达到瞬时高峰,可以将该页面上的元素尽量静态化处理,除了秒杀按钮需要服务端进行动态判断,其他的静态数据可以缓存在浏览器和 CDN 上 通过按钮置灰和js限制访问间隔减少用户提交请求的次数...

2019-12-13 16:18:53 506

原创 分布式锁 - redis锁、zookeeper锁

应用场景:分布式锁是为了保证同一时刻只有一台机器的一个线程执行某段代码。分布式锁的目的如下 解决业务层幂等性 解决 MQ 消费端多次接受同一消息 确保串行|隔离级别 多台机器同时执行定时任务 最近在工作中遇到了一些问题,上游重复调用下游接口下发数据导致数据重复,需要用redis锁防重,线程获取不到锁时直接提示给上游已经下发过数据。redis分布式锁:...

2019-12-12 18:18:16 219

原创 设计模式

1、策略模式主要解决if...else..的复杂和难以维护。一个公共接口,多个子类,一个策略使用类。策略的选择可以结合枚举类使用,将枚举常量存在Map中或者存在枚举常量属性中。2、代理模式代理模式就是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。黄勇的《Proxy 那点事儿》写的超好,就不重复了,大概总结如下:静态代理:代理类和委托类需要实现相同的接口,且需...

2019-12-06 17:01:20 203

原创 @Autowired可以注入List和Map

spring是支持这种基于接口实现类的直接注入的@Autowiredprivate List<MyInterface> myList;这样就直接将MyInterface的子类bean直接添加到了myList中,并且还可以用Order来指定添加顺序没看过此处源码,但盲猜是在bean的后置处理器中,解析到带@Autowired的注解且是List或Map的类型的属性,则将其泛...

2019-12-05 18:40:19 3498 1

原创 spring mvc 国际化配置

要使用spring mvc配置国际化,首先用MessageSource来管理国际资源文件: <!-- 国际化资源文件 messageSource配置的是国际化资源文件的路径, classpath:messages指的是classpath路径下的 messages_zh_CN.properties文件和messages_en_US.properties文件 设置“useCodeAsD...

2019-12-05 10:41:36 300

原创 实现一个线程安全并且可以设置过期时间的LRU(LinkedHashMap原理)

思路分析:FIFO的思想是实现一个先进先出的队列,LRU的思想是在FIFO的基础上,将最近访问的节点转移到队列的头部于是考虑可以用双向链表linkedList来实现,同时为了兼顾查询节点时的效率,结合HashMap来实现。双向链表linkedList+HashMap的数据结构可以联想到LinkedHashMap,就不需要我们自己来实现了。LinkedHashMap存储数据是有序的,可以...

2019-11-26 21:54:03 1586

原创 spring mvc踩坑 - jackson解析框架返回json多一层双引号

问题:两套业务逻辑代码相同,但返回的数据不同,导致相同的前端代码用eval解析时出错。其中一个多了一层双引号,分别为"{\"aaa\":1}" "\"{\"aaa\":1}\""//服务端代码 @RequestMapping(method = RequestMethod.POST, params = "method=xxx") public @ResponseB...

2019-11-26 15:07:16 4144

原创 怎么解决跨域问题(cors、nginx、jsonp)

什么是跨域问题当前页面地址与请求URL的协议、域名、端口有任意不同: 网络协议不同,如http协议访问https协议。 端口不同,如80端口访问8080端口。 域名不同,如qianduanblog.com访问baidu.com。 子域名不同,如abc.qianduanblog.com访问def.qianduanblog.com。 域名和域名对应ip...

2019-11-22 14:32:25 190

原创 Guava cache 本地缓存

项目开发中很多程序员喜欢用HashMap来构建本地缓存,存在并发、内存泄漏、刷新机制不健全(某些场景下我们希望定时删除或刷新缓存)、容量限制(当超过设置的最大缓存量时使用LRU算法淘汰最久未使用的缓存数据)等问题,推荐使用Google的Guava来构建本地缓存。 引包 <dependency> <groupId>com.google.guava</...

2019-10-18 11:54:20 457

原创 Nginx详解

1、什么是NginxNginx是一个高性能的web服务器和反向代理服务器。用于HTTP、HTTPS、SMTP、POP3和IMAP协议2、负载均衡的几种常用方式和算法实现原理轮询 (用一个初始值为0的计数器,当有请求时计数器+1,计数器=ip数时计数器归零,以此从ip列表获取ip) upstream mysvr { server 127.0.0.1:7878; se...

2019-10-15 10:36:50 233

原创 Redis详解

导读:Redis数据类型(string,hash,list,set,zset) 在 Java 中使用 Redis连接池 Redis集群 Redis 主从架构搭建及同步方法 Redis主从自动切换(哨兵sentinel) Redis缓存雪崩、缓存穿透、缓存一致性问题 Redis数据类型(string,hash,list,set,zset) 1、String(set、get)...

2019-10-11 10:48:22 540

原创 JAVA多线程(线程池、ThreadLocal、CountDownLatch)

1、线程池池化思想主要是为了避免不停地创建和销毁应用(线程、数据库连接)影响系统性能。创建线程池实际上还是利用ThreadPoolExecutor类实现的ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, B...

2019-10-09 18:45:29 610

原创 《架构探险从零开始写javaweb》总结

导读:DI (实现加载指定路径的类,实现加载指定注解的类,放在Map<Class<?>, Object>中) AOP (先将目标类的所有的切面类找出来,链式的将切面代理类作为目标类的增强返回新的bean,替换原来的bean到map中。) IOC (将类中需要注入bean的属性,反射注入进去) MVC (根据方法上的注解将请求路径、类、方法存入Map<Requ...

2019-10-08 18:39:09 198

java实现js、css、图片合并到html文件

技术点:1、使用htmlparser解析html文件,得到html代码里的js、css、img链接 2、将相对路径的链接转变成绝对路径,并读取资源 3、将css和js合并到html 4、将图片转换成base64编码,写入标签的src

2017-08-18

MATLAB-遗传算法-多车场-开放式-带时间窗-多商品-VRP问题

MATLAB-遗传算法-多车场-开放式-带时间窗-多商品-VRP问题,解压后直接运行。MATLAB-遗传算法-多车场-开放式-带时间窗-多商品-VRP问题,解压后直接运行。

2016-03-22

遗传算法和聚类算法结合的matlab程序

将遗传算法和聚类算法有效结合,充分发挥遗传算法的全局寻优能力和聚类算法的局部搜索能力,可以更好地提高聚类质量。

2015-12-30

MATLAB+遗传算法+多车有容量约束VRP

花了一天写的MATLAB遗传算法,解决多车有容量约束VRP问题,运行成功。花了一天写的MATLAB遗传算法,解决多车有容量约束VRP问题,运行成功。花了一天写的MATLAB遗传算法,解决多车有容量约束VRP问题,运行成功。

2015-12-27

MATLAB-遗传算法-TSP旅行商问题程序代码

MATLAB遗传算法-TSP旅行商问题程序代码,运行成功。MATLAB遗传算法-TSP旅行商问题程序代码,运行成功。MATLAB遗传算法-TSP旅行商问题程序代码,运行成功。

2015-12-27

VRP遗传算法资料整理合集

VRP遗传算法资料整理合集,内含5个经典的VRP问题程序代码。

2015-12-27

MATLAB遗传算法VRP

MATLAB遗传算法单车场单车型有容量约束的多车VRP问题,解压后直接运行。

2015-12-27

thinkphp3.2.3入门教程实例-新闻系统

thinkphp3.2.3入门教程实例-新闻系统,本教程仅实现了新闻信息的增、删、查、改以及验证码功能和分页功能,非常适合新手入门学习和把握thinkphp3.2框架。

2015-07-29

空空如也

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

TA关注的人

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