自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(145)
  • 资源 (5)
  • 收藏
  • 关注

原创 后缀树

后缀树,就是把一串字符的所有后缀保存并且压缩的字典树。相对于字典树来说,后缀树并不是针对大量字符串的,而是针对一个或几个字符串来解决问题。比如字符串的回文子串,两个字符串的最长公共子串等等,后面应用会说。一、建立后缀树比如单词banana,它的所有后缀显示到下面的。1代表从第一个字符为起点,终点不用说都是字符串的末尾。 以上面的后缀,我们建立一颗后缀树。如下图,为了方便看到后缀...

2018-03-28 15:59:16 1770

原创 字典树-Trie树

一、概念字典树,又称为单词查找树,Tire数,是一种树形结构,它是一种哈希树的变种。利用字符串的公共前缀来减少查询时间,最大限度的减少无谓的字符串比较。1.1 基本性质根节点不包含字符,除根节点外的每一个子节点都包含一个字符从根节点到某一节点。路径上经过的字符连接起来,就是该节点对应的字符串每个节点的所有子节点包含的字符都不相同1.2 特性1)根节点不包...

2018-03-28 14:17:24 538

原创 快排和堆排序

一、堆排序5.1 堆的定义用数组保存效率高,第 i 个节点保存在下标为 i 的位置,也就是 arry[0]空着。第 i 个元素的左节点在 2 * i,右节点在 2 * i + 1。一个节点的父节点在 i / 2 位置。以一个size变量记录堆的大小。5.2 堆的基本操作5.2.1 提取最大元素return array[1]5.2.2...

2018-03-27 23:31:32 629

原创 简单排序算法

插入排序、希尔排序、选择排序、归并排序。插入排序等时间复杂度为O(N^2),任何通用的排序算法的时间复杂度都是O(N Log N)。一、插入排序import java.util.Arrays;public class App { public static void main(String[] args) { int[] testArray = {...

2018-03-27 19:40:54 450

原创 海量数据处理

1、 海量日志数据,提取出访问次数最多的IP 2^10 = 1024 = 1k 千 2^20 = 1M 百万 2^30 = 1G 十亿 2^32 = 4G传统方法:分治 + Hash(1)一行一行处理日志,提取出IP,并对IP进行Hash取1024的模,也就是将 2^32 = 4G 个IP 分散到 1024 个小文件中,每个文件中包...

2018-03-27 14:23:01 330

原创 MapReduce原理

MapReduce是一个分布式并行计算引擎,基于它写出来的应用程序能够运行在由上千个机器组成的大型集群上,并以一种可靠、容错、并行的方式处理TB级别的数据集。-一、编程模型这里我们以 WordCount 为实例: 有一批文件,规模为 TB 级或者 PB 级,如何统计这些文件中所有单词出现的次数。-很理所应当的一个想法是,先统计每个文件中单词的频次,再合并累加不同文...

2018-03-27 01:10:10 384

转载 HDFS架构与原理

HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,可以运行于廉价的商用服务器上。一、HDFS优缺点1.1 优点1、高容错性数据自动保存多个副本。它通过增加副本的形式,提高容错性。某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的,我们不必关心。2、适合批处理...

2018-03-26 23:36:02 300

转载 Redis 存储一条用户信息

一、方式1如果用普通的key/value结构来存储,主要有以下2种存储方式: 第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储, ​ 如:set u001 “李三,18,20010101” ​ 这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对...

2018-03-26 18:28:33 4054

原创 秒杀/抢红包/可扩展下单架构

下列解决方案可以满足:秒杀抢红包(需要增加一个红包预先拆分的逻辑)等高并发场景。一、削峰与异步化对于秒杀系统瞬时会有大量用户涌入,所以在抢购一开始会有很高的瞬间峰值。高峰值流量是压垮系统很重要的原因,所以如何把瞬间的高流量变成一段时间平稳的流量也是设计秒杀系统很重要的思路。利用Kafka消息队列缓存用户请求,后端的秒杀服务再按照自己的速率从消息队列拉取请求处理。...

2018-03-26 01:10:15 628

原创 数据库索引总结

一、数据结构及算法基础索引是一种数据结构,主要功能是提高数据库的查询效率。目前最常用的索引数据结构就是B+树,我们先从介绍它开始。1.1 B+树B+树是一种多叉、平衡的排序查找树状结构,多用于外部查找。(平衡二叉树、红黑树多用于数据集不大的内部查找。)其节点分为三类:根节点、内部节点和叶子节点。定义: (1)每个节点最多存放 m - 1 个数值; (2)每...

2018-03-25 20:06:17 477

原创 CGLib动态代理的底层原理

JDK实现动态代理需要实现类通过接口定义业务方法。CGLib采用了非常底层的字节码技术,其原理是通过目标类的字节码为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。底层使用字节码处理框架ASM,来转换字节码并生成新的类。更详细一点说,代理类将目标类作为自己的父类并为其中的每个非final委托方法创建两个方法: 一个是与目标方法签名相同的方法,它在方法...

2018-03-25 12:41:48 4804

转载 TCP与UDP的区别

TCP UDP 可靠性 可靠 连接性 面向连接 报文 面向字节流 效率 传输率低 双工性 全双工 流量控制 有(滑动窗口) 拥塞控制 有(慢开始、拥塞避免、快重传、快恢复) 首部开销 20字节1 可靠性TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不...

2018-03-25 00:41:26 259

原创 Spring事务的用法与原理

1. 事务ACIDAtomicity原子性:一个事务要么全部执行,要么不执行;Consistency一致性:事务的运行并不改变数据库中数据的一致性,例如检查约束、非空约束、主键约束、外键约束;Isolation隔离性:两个以上的事务不会出现交错执行的状态;Durability持久性:事务执行成功以后,该事务对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故的回滚;...

2018-03-25 00:06:08 6975 1

原创 Java与Spring注解的原理

注解(Annotation)提供了一种安全的类似注释的机制,为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻方便的使用这些数据,用来将任何的信息或者元数据与程序元素(类、方法、成员变量等)进行关联。Annotation其实是一种接口,通过Java的反射机制相关的API来访问Annotation信息。相关框架或工具中的类根据这些信息来决定如何使用该程序元素或改变它们的行为。...

2018-03-24 21:37:37 287

原创 遍历中修改HashMap的Key

一、不可变对象1.1 什么是不可变对象immutable Objects就是那些一旦被创建,它们的状态就不能被改变的Objects,每次对他们的改变都是产生了新的immutable的对象,而mutable Objects就是那些创建后,状态可以被改变的Objects。不可变的优势:(1)提高效率。如果你知道一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只...

2018-03-24 11:38:23 19448

原创 带权重的随机Java实现

题目淘宝里如果按照1-5星的店面,从五家店里一共推送出10个同一类产品,都是随机推送,但是最后大量的随机测试后,要保证五颗星的店家推送的商品数量大概是一颗星店家推送的商品数量的五倍,且不能破坏其他概率输出。分析这就是一个带权重的随机题。 1星店铺的权重是1,2星店铺的权重是2,……,5星店铺的权重是5。使用java.util.Random.nextInt(int ...

2018-03-24 01:15:08 2835

原创 用URL请求页面流程

一、打开浏览器,地址栏输入blog.csdn.net。二、开始进行域名解析DNS 查找过程浏览器缓存 —— 浏览器会缓存 DNS 记录一段时间,但是操作系统并没有告诉浏览器储存 DNS 记录的时间。于是,不同浏览器会储存各自的一个固定时间( 2 分钟到 30 分钟不等)。系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用( Windows 里是 ...

2018-03-23 23:17:45 685

转载 下单系统水平可扩展框架

截图自《亿级流量网站架构核心技术》,作为笔记:

2018-03-20 01:19:41 329

转载 容灾备份

1. 什么是双活数据中心首先我们要知道双活就是Active-Active,故名思义就是两边都是活动在线提供服务的,是相对于传统的主备模式Active-Standby模式的。一个真正的双活方案是应该涵盖基础设施、中间件、应用程序各个层次的。双数据中心同时对外提供业务生产服务的双活模式,两个数据中心是对等的、不分主从、并可同时部署业务,可极大的提高资源的利用率和系统的工作效率、性能,让客户从容...

2018-03-20 01:08:41 1202

转载 支付宝的高可用与容灾架构演进

持续可用和快速容灾切换的能力,是技术人员追求的极致目标。在架构设计中,容灾设计强调的是系统对外界环境影响具备快速响应能力,节点级别的快速恢复能力,保障系统的持续可用。去年12月18日,全球架构师峰会上,阿里巴巴高级系统工程师曾欢(善衡)结合互联网金融业务及系统特性,分享了在支付宝系统架构演进中,每个阶段的高可用和容灾能力建设的解决思路。在架构设计中,作为系统高可用性技术的重要组成部分,容灾...

2018-03-19 23:15:32 1104

转载 Nginx架构模型

架构模型nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。在调试的时候可以手动地关掉后台模式,让nginx在前台运行,并且通过配置让nginx取消master进程,从而可以使nginx以单进程方式运行。另外,nginx是以多进程的方式来工作的,当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式...

2018-03-19 18:13:01 461

转载 Apache Spark入门级摘要

Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,Spark有如下优势:Spark提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。官方资料介绍Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10倍。1....

2018-03-19 13:39:40 4311

原创 Redis事务总结

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。所以,Redis的事务不具备原子性。一、普通事务一个事务从开始到执行会经历以下三个阶段:开始事务...

2018-03-19 11:48:57 181

转载 Redis-订阅与发布

1. 功能简介Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。(1)发送消息 Re...

2018-03-18 16:41:20 290

转载 Redis键过期-内存淘汰-持久化原理

1. Redis数据过期策略转自:https://www.cnblogs.com/xuliangxing/p/7151812.html1.1 设置过期时间Redis对存储值的过期处理实际上是针对该值的键(key)处理的,即时间的设置也是设置key的有效时间。Expires字典保存了所有键的过期时间,Expires也被称为过期字段。expire key time(以秒为单位)–这...

2018-03-18 16:13:02 2086

转载 微服务架构下的数据一致性

一、分布式事务保证一致性1.1 两阶段提交在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败。当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等)。因此,二阶段提交的算法思路可以概括为:...

2018-03-18 12:37:13 409

原创 会话保持原理

1. 什么是会话保持?会话保持是负载均衡最常见的问题之一,也是一个相对比较复杂的问题。会话保持有时候又叫做粘滞会话(Sticky Sessions)。会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互过程的关连性,在作负载均衡的同时还保证一系列相关连的访问请求会分配到一台服务器上。2. 什么是Session在WEB开发中,服务器可以为每个用户浏览器创建一个会话...

2018-03-18 00:54:45 6621

转载 Canal介绍与应用

一、背景早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。ps. 目前内部使用的同步,已经支持mysql5.x和oracle部分版本的日志解析...

2018-03-17 21:50:48 1515

原创 Redis缓存与数据库一致性方案

使用Redis缓存的模式的有很多种,下面就逐一介绍。一、数据库和redis分别处理不同的数据类型数据库处理要求强一致实时性的数据,例如金融数据、交易数据; redis处理不要求强一致实时性的数据,例如网站最热贴排行榜;二、Cache-Aside模式Cache-Aside模式的意思是业务代码直接维护缓存,这是最常用的一类模式。2.1 读场景先从缓存获取数据,...

2018-03-17 20:23:45 5225 1

转载 MySQL的跨库join

功能需求首先要理解原始需求是什么,为什么要跨库join。举个简单的例子,在日志数据库log_db有一份充值记录表pay_log,里面的用户信息只有一个userid;而用户的详细信息放在主库main_db,里面有用户的详细信息表user_info,如用户名、登录时间、注册时间、会员等级 等等。如果只是按用户名查找充值记录,那可以很简单地分两次查询即可。但是更复杂的需求,比如按注册时间排序,按会员...

2018-03-17 18:39:06 1604

原创 Redis Cluster介绍

1. Redis Cluster介绍Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。1.1 数据分布理论分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整个数据的...

2018-03-15 01:38:04 1184

转载 强引用/软引用/弱引用/虚引用

想必很多朋友对OOM(OutOfMemory)这个错误不会陌生,而当遇到这种错误如何有效地解决这个问题呢?今天我们就来说一下如何利用软引用和弱引用来有效地解决程序中出现的OOM问题。一、Reference的概念从Java SE2开始,就提供了四种类型的引用:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期...

2018-03-14 21:33:39 164

转载 Servlet 3.0/3.1 中的异步处理

在Servlet 3.0之前,Servlet采用Thread-Per-Request的方式处理请求,即每一次Http请求都由某一个线程从头到尾负责处理。如果一个请求需要进行IO操作,比如访问数据库、调用第三方服务接口等,那么其所对应的线程将同步地等待IO操作完成, 而IO操作是非常慢的,所以此时的线程并不能及时地释放回线程池以供后续使用,在并发量越来越大的情况下,这将带来严重的性能问题。即便是像S...

2018-03-14 16:30:00 302

原创 CDN原理与使用

一、概述背景: 当下的互联网应用都包含大量的静态内容,但静态内容以及一些准动态内容又是最耗费带宽的,特别是针对全国甚至全世界的大型网站,如果这些请求都指向主站的服务器的话,不仅是主站服务器受不了,单端口500M左右的带宽也扛不住,所以大多数网站都需要CDN服务。CDN,Content Delivery Network:基于内容的分布式分发网络。 简单的说CDN就是让原本上海的浏览...

2018-03-13 22:40:27 2715

原创 MySQL复制+高可用技术

一、复制1. BinlogMysql的binlog日志作用是用来记录mysql内部增删改等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被binlog日志记录;主要用于数据库的主从复制以及增量恢复。对于数据更新操作,在事务提交前要先写入Binlog。1.1 与Redo日志的不同redo日志是innoDB的日志,基于物理层面...

2018-03-09 01:50:10 821

转载 MySQL分库分表

一、分表在日常开发或维护中经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。1. 什么是分表分表是将一个大表按照一定的规则分解成多张的实体表,我们可以称为子表。对于...

2018-03-08 19:16:04 318

转载 MySQL慢查询日志

一、简介开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。二、参数说明slow_query_log:慢查询开启状态 slow_query_log_file:慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录) long_query_time :查询超过多少秒...

2018-03-08 19:15:06 174

原创 Java NIO总结

一、概述1. NIO与IO的区别Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 Java NIO的非阻塞模式,使一个线程从某通道读取数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞。所以直至数据变的可以读取之前,该线程可以继续做其他的事情...

2018-03-07 18:44:45 273

转载 Java类初始化顺序

先不考虑父类。初始化的一个大原则是:(1)静态域成员(静态变量和静态代码块)最先;(2)非静态域成员(成员变量和初始化代码块)先于构造函数;(3)同是静态域成员或同是非静态域成员,则先后顺序和代码顺序一致public class InitialOrder { private static String staticField = "Static Field Initi...

2018-03-07 01:20:05 184

原创 Java GC算法

GC算法内存垃圾回收主要集中于 java 堆和方法区中。对象存活判断判断对象是否存活一般有两种方式:引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。可达性分析(Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到...

2018-03-07 00:08:46 288

黑白棋(奥赛罗)Android APP完整源代码工程包

黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。有一种说法是:只需要几分钟学会它,却需要一生的时间去精通它。 本资源系本人课程作业编写,包括完整的可编译的Android Studio 工程包,还包括可以直接在Android手机上安装的apk文件。该APP实现了所有黑白棋的功能和逻辑,还有背景音乐和翻转动画等效果。

2016-01-09

数据结构与算法分析:C语言描述(原书第2版)

《数据结构与算法分析:C语言描述(原书第2版)》内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能、效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括。由于《数据结构与算法分析:C语言描述(原书第2版)》选材新颖,方法实用,题例丰富,取舍得当。《数据结构与算法分析:C语言描述(原书第2版)》的目的是培养学生良好的程序设计技巧和熟练的算法分析能力,使得他们能够开发出高效率的程序。从服务于实践又锻炼学生实际能力出发,书中提供了大部算法的C程序和伪码例程,但并不是全部。一些程序可从互联网上获得。

2016-01-09

《算法导论(原书第3版)》

《算法导论(原书第3版)》内容简介:在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。《算法导论(原书第3版)》将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在IT专业人员的职业生涯中,《算法导论(原书第3版)》也是一本案头必备的参考书或工程实践手册。

2016-01-09

空空如也

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

TA关注的人

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