- 博客(49)
- 资源 (7)
- 收藏
- 关注

原创 博客目录
架构架构-1:高性能架构之读写分离和分表分库架构-2:高性能架构之NoSQL和缓存架构-3:高性能架构之单机高性能和负载均衡架构-4:高可用架构之存储高可用架构-5:高可用架构之Paxos和Raft架构-6:高可用架构之一致性哈希算法和数据分片架构-7.高可用架构之接口级故障springSpring-1.IoCSpring-2.AOPSpring-3.Spring MVCJ...
2019-10-13 19:26:34
344
原创 架构-7.高可用架构之接口级故障
架构-1:高性能架构之读写分离和分表分库架构-2:高性能架构之NoSQL和缓存架构-3:高性能架构之单机高性能和负载均衡架构-4:高可用架构之存储高可用架构-5:高可用架构之Paxos和Raft架构-6:高可用架构之一致性哈希算法和数据分片架构-7.高可用架构之接口级故障接口级别故障是最常见的故障,相比于机器宕机,机房故障,接口级别的故障要频繁,但是危害却也不小。如果没有好的解决方案...
2019-09-18 16:53:41
324
原创 架构-6.高可用架构之一致性哈希算法和数据分片
一致性哈希算法一致性哈希算法是构建一个0~2^32的整数环,即首尾相连。假设存放的是缓存数据。每一个槽位可以存放一个缓存服务器。当一个请求过来,可以根据ip和port计算出hash,然后根据顺时针,找到最近的缓存服务器。这样的设计实现了容错性和可伸缩性,即使某台机器宕机了,那么顺时针就找到下一台机器了,加入机器也是找到一个槽位直接加入即可。但是这样还是存在均衡性的问题,如果某一台机器...
2019-09-16 18:24:11
571
原创 架构-5.高可用架构之Paxos和Raft
Paxos算法Paxos算法是解决分布式系统中如何就某个值达成协议。典型的场景就是选举主机,zookeeper选举主机使用的zab算法就是Paxos的一个实现。Paxos的三个角色Proposer:提议者,提出方案的角色Acceptor:接受者,接收方案的角色Learner:学习者,确定接受者是否超过半数的节点同意某个提案Paxos分为三个阶段阶段1:发送编号每一个提议者都会提...
2019-09-16 18:22:16
382
原创 架构-4.高可用架构之存储高可用
架构的复杂度来源-高可用高可用是指系统不会轻易的挂掉,这里的“高”是指不可能达到100%的可用性,或者说100%的可用性成本非常高,所以一般用4个九5个九表达高可用,其实就是指99.99%的可用性,99.999的可用性。相对于高性能,高可用要复杂得多。因为高性能只需要考虑性能。而高可用必须得考虑可用性,一致性和分区容忍性CAP和BaseCAP原则,CAP分别指C(一致性),A(可用性),P...
2019-09-16 18:21:23
608
原创 架构-3,高性能架构之单机高性能和负载均衡
单机高性能PPC和TPCPPCPPC创建一个进程的代价是非常高的,需要分配很多的内核资源,且进程之间的通信也很昂贵,所以一般只有连接数比较少的会使用(如数据库服务器),而普通的业务服务器是不会使用的。TPCPPC与TPC的区别在于,PPC子啊接收请求之后,会fork一个子进程(不是线程)而TPC则会创建一个子线程。TPC则是进行了改良,创建线程而不是进程,在tomcat早期的版本,使...
2019-09-03 14:08:52
651
原创 架构-2,高性能架构之NoSQL和缓存
关系型数据库的局限NoSQL不是指No SQL而是指No only SQL,关系型数据库非常成熟于强大,但是依然存在一些问题,所以NoSQL时关系型数据库的一种补充而不是替代。1.只能存储行结构而不能存储更复杂的数据结构,比如某个属性是数组,关系型数据库只能把数组存放到另外一个表或者解析成字符串存储。2.表结构不易修改。由于强制每一行数据个列都是一样的,对于数据量很大的表来说,修改一个字段...
2019-09-03 14:07:41
415
原创 架构-1.高性能架构之读写分离和分表分库
架构的复杂度来源-高性能随着软件系统越来越复杂,软件系统不得不面对三个大问题(高性能,高可用,可拓展)。就拿一个网站来说,最开始用户量较少,单机架构就可以支持。随着用户量的增加,系统的功能不断叠加。软件系统开始变得慢,开始不稳定,修改个bug牵一发而动全身。这时就必须升级软件的架构。尽管硬件的发展很快,相比于软件的发展,真是小巫见大巫。单机架构无论如何都无法支持大量的访问和事务。解决高性能问题...
2019-09-03 14:06:28
719
原创 InnoDB一棵B+树只能存放两千万行数据??
今天看到一篇公众号,提了个直击灵魂的问题:InnoDB一棵B+树可以存放多少行数据?看到他直接给的答案,突然一脸懵逼。约2千万???那那些超过2千万的表是怎么存储的?我们知道InnoDB是以B+树索引的方式存储的。所以如果B+树只能存放2千万左右的数据,那么一张表也只能存放两千万的数据。显然这是错误的。那么作者是如何得出的这个错误的结论?作者说B+树的深度是2~3层,所以假设B+树有三层...
2019-08-22 14:47:44
2327
原创 Spring-4.Spring 事务
Spring事务的使用@Transactionalpublic void test(){}使用@Transactional注解在方法上,即可使得方法以事务的形式运行,当发生UnChecked的错误时,就会回滚。注意,如果能够被try不过的异常时不会回滚事务的,可以通过roolbackFor指定异常,捕获后回滚,或者使用TransactionAspectSupport.currentTra...
2019-08-21 17:16:04
150
原创 Spring-3.Spring MVC
MVC为什么我们强调Spring MVC而不是MVC,因为MVC是一个很广泛的词,不仅有Spring MVC,还有C#的MVC,各种MVC。概念大同小异,而实现方式则千差万别。M:Model指数据模型以及对数据的处理方式,有对数据的直接访问权限,所以我们写的逻辑包括Service等,都是Model。V:View指视图,在spring中可以使用Thymeleaf等来做视图。不过现在大都提倡前后...
2019-08-20 19:25:28
186
原创 Spring-2.AOP
用法示例@Aspect@Componentpublic class WebLogAspect { private Logger logger = Logger.getLogger(getClass()); @Pointcut("execution(public * com.didispace.web..*.*(..))") public void webLog()...
2019-08-19 18:08:36
187
原创 java-基础知识:面向对象,反射,泛型,异常和错误,注解,序列化和反序列化,动态代理
面向对象继承:使用继承,能够复用父类的代码,而且维护和修改更容易。如果是通用方法,直接修改父类。如果是针对个别的方法则可以直接修改子类。多态:对父类方法进行重写后,调用各个子类的同一名方法,表现出不同的状态,称为为多态。而且在使用父类的地方可以使用子类,所以有些方法可以不用关心传入的参数是属于哪个子类,直接调用方法即可,典型的就是回调方法。抽象:抽象是指,把类的方法行为抽象出来,而不去关心...
2019-08-19 17:11:09
337
原创 Spring-1.IoC
Spring IoC 概述Spring最核心的点应该就是IoC,控制反转。所谓控制反转就是对于类中的依赖,不使用硬编码定义,而是依赖接口,然后使用其他方式定义依赖,在spring中使用的就是依赖注入。在代码上来说,就是不用new来实例化,而是使用xml,注解等进行配置。这样做的好处是,降低耦合性,可以通过修改配置达到更换依赖的目的,使得代码更加容易维护。IoC和DI的区别IoC是控制反转...
2019-08-16 18:49:10
363
原创 Java集合-2 数组,ArrayList,Vector,CopyOnWriteArrayList ,LinkedList
数组特点数组是最基础的数据结构,它会在初始化申请一块连续的固定的内存区域。所以数组的访问速度很快,时间复杂度是O(1),但是由于是固定的区域,所以数组的长度在初始化之后是无法修改的。ArraysArrays是一个便于操作数组的类sort:为数组排序binarySearch:在数组中进行二分查找equals:比较两个数组fill:为数组的每一个元素填充数据copyOf/copy...
2019-08-14 18:38:15
176
原创 Java集合-1.HashMap,HashTable,ConcurrentHashMap,TreeMap,LinkHashMap,HashSet,TreeSet,LinkedHashSet
HashMap基础结构:数组+链表HashMap是一个支持键值对的数据结构,使用数组和链表实现。每个数组保存的是一个链表。插入元素的步骤首先计算出key指的hashCode,找出元素应该落在数组的哪个位置上(或称为槽)。如果对应的槽没有元素,则添加到链表的第一个元素。如果对应的槽的链表已经有元素了,则往后添加到链表的头。在java1.8之后,如果链表的长度超过8,会进化为红黑树,优...
2019-08-14 18:35:43
464
原创 JVM-6.Java线程内存模型和线程实现
java线程内存模型主内存和工作内存Java的线程内存包括主内存和工作内存。这里的内存模型和jvm的内存区域并没有直接的关系,如果非要对应起来,那么主内存对应的是java堆,工作内存对应的是虚拟机栈。工作内存是每个线程私有的,而主内存则是共享的。线程并不直接操作主内存的数据,而是先操作工作内存里保存的副本,然后再同步到主内存中。volatile的特殊规则volatile有两...
2019-08-08 18:08:37
224
原创 JVM-5.程序编译与代码优化
java中有两种编译,第一种是由java代码编译成字节码(使用javac编译器),第二种则是由字节码编译成对应平台的机器码(使用即使编译器JIT)。但并不是所有的字节码都会被编译,大部分代码都是直接解释执行(使用解释器),只有热点代码才会被编译成机器码。编译期优化(javac编译器)编译过程解析和填充符号解析的过程分为词法语法解析和填充符号,词法解析是把源代码解析成最小元素,如“in...
2019-08-08 15:15:51
1781
原创 JVM-4.字节码执行和方法调用
本文问题1.线程在是如何运行代码的,代码和数据在线程中的结构是字母样的?2.方法是如何被调用的。1.运行时栈帧结构栈帧线程运行代码是基于栈帧的,这里不要跟操作数栈搞混了。线程使用一个栈来保存栈帧,而一个栈帧则代表了一个方法,包含了局部变量表,操作数帧,动态链接,和返回地址。另外,为了优化,帧之间并不是完全无关的,有些会把数据存放在共享区域,避免复制。局部变量表局部变量表顾...
2019-08-06 18:40:26
260
原创 JVM-3.类的加载机制
上一篇文章总结了字节码相关的知识,本文则将总结类加载相关知识。包括类是在什么时候被加载的。类是如何被加载的。类的双亲加载机制是什么。1.类在什么时候被加载使用new创建对象,读取类的静态字段或者方法的时候使用反射进行调用的时候初始化一个类,且其父类未加载时,触发其父类加载虚拟机启动时,需要执行一个主类(包含main方法的类)动态语言解析后触发调用静态的类属性或方法2.类...
2019-08-06 15:44:35
171
原创 JVM-2.字节码和字节码指令
我们都知道,java代码经过编译之后,会转换为字节码。那么字节码是什么?他的结构是怎么样的?字节码是怎么被执行的?这些问题本文都尝试去回答。1.字节码是什么字节码是什么,当我们编译java程序之后,便会生成.class文件,使用文本编辑器打开.class文件。你会看到一大堆数字,不过你仔细观察会发现前8个字符居然是“cafe babe”,咖啡宝贝。这让人想起java的logo也是...
2019-08-05 17:55:30
345
原创 JVM-1.自动内存管理
和大多数高级语言一样,java也有自动回收内存的机制。给程序员们带来河大的便利,而不用和c++一样,时刻当心内存溢出。那么,jvm的自动内存管理机制是如何实现的?关键点1.jvm运行时内存分布2.垃圾回收器和垃圾回收算法3.虚拟机对象:对象的创建,访问和删除4.性能监控工具1.JVM的运行时区域jvm运行时内存被分配为不同的块,以实现不同的作用。java 1.7和之前的区...
2019-08-01 10:46:54
243
原创 5. InnoDB的事务
InnoDB的一个特性是支持事务,并且实现支持了四种隔离级别。1.事务的目标:ACID原子性原子性是指事务是不可分割的单位,如果其中一步失败了,前面执行成功的也要回滚。隔离性隔离性是指,事务提交之前,变更的数据对其他事务不影响。一致性一致性是指事务将数据的状态由上一个状态转换为下一个正确的状态。一致性容易和原子性混淆,即使实现了原子性也不一定能保证一致性,比如更新覆盖。持久性持...
2019-07-26 18:59:26
181
原创 4.InnoDB的锁总结
InnoDB的一个特点就是实现了行锁,锁虽然大部分是InnoDB自动操作的,似乎不需要用户进行干涉,但是如果对锁不了解,可能会导致很多问题。锁的类型排他锁(X)和共享锁(S)所谓排他锁,顾名思义,就是只能独占的锁,比如写数据的时候,一般是排他锁。毕竟,不能一边写数据,一边读数据。而共享锁一般是读数据用。共享锁的作用是和排他锁互斥,防止读数据的时候,数据被修改。表锁和行锁和MyISA...
2019-07-25 18:30:35
161
原创 3.InnoDB的索引和算法
索引是数据库中非常重要的元素,用得好可以极大的提升查询效率,用不好却可能导致更新插入时,发生很多次IO,导致效率低下。索引中的算法索引属于算法中经典的检索数据问题。当讨论索引的算法时,也许都会想起B+树,但是除了B+树,实际上还用到了二分查找和哈希算法。二分查找为什么要使用二分查找,一个关键的原因是,索引并没有找到数据在哪一行,而是找到数据所在的页,并把数据加载到内存查找。由于页内的数据是...
2019-07-25 01:36:16
246
原创 2.InnoDB的存储结构
上一篇文章介绍了InnoDB的四大特性,这篇文章介绍下InnoDB的存储结构。一 物理文件首先,先打开mysql的数据存储路径,可以使用命令查看具体的路径。如果是使用Navicat Premiun,可以直接按下F6打开命令界面。show global variables like "%datadir%";表空间文件 ibd可以看到里面有一些文件,其中以ibd为后缀的文件,就是存放数据...
2019-07-24 19:14:41
233
原创 1.InnoDB的关键特性
如果问起对InnoDB的了解有多少,你可能会回答InnoDB的四个关键特性,存储结构,索引,锁,事务等五个方面取描述InnoDB。InnoDB的四个关键除了二次写是为了防止数据被破坏,其他的三个特性几乎都是为了提高性能考虑的。1.两次写在理解两次写之前,先要理解什么是脏页?页是InnoDB存储结构的单位,行数据和索引都会存放在页中。但是更新数据时,InnoDB并不是直接更新磁盘中的数据的,...
2019-07-24 17:03:28
363
原创 java 字符串常量池
简单的问题先看一个简单的经典问题String s1 = "Hello";String s2 = "Hello";String s3 = new String("Hello");System.out.println(s1==s2);//trueSystem.out.println(s1==s3);//true首先说明“==”比较的是引用地址而不是值,比较值用equals方法。这个原...
2019-07-16 17:35:49
231
原创 Java并发编程系列——锁:synchronized
锁是并发编程里保证数据线程安全的一个重要的工具。今天就来了解下,java里的锁。如何实现一个高并发的计数器我们首先来考虑一个问题,如何实现一个高并发的计数器。稍微了解过java的人应该立马能想到"synchronized"关键字。但是事实上,在Java里可以通过各种方式来实现线程安全的计数器。这篇文字将会解锁以下几种方式,并详细的解锁每一种锁的机制。synchronizedLock接口...
2019-03-31 12:09:26
242
原创 《重构》一本书告诉你,为什么有的程序员比你快10倍
听说你还在加班写BUG1 经常加班写bug。2 改bug改到头秃。什么,你加班加到没有时间读书?没关系,本硬核用一篇文章带你快掌握这本书。很多人对“重构”有很深的误解,脑海中浮现的画面都是一群人加班加到的“重构”项目。能够让你不用加班倒是第一次听说。但是偏偏《重构》这本书就告诉你,重构能够提升开发效率。为什么重构能让你提升开发效率,我们举两个简单的例子。如果你是一名程序员,也许你听过...
2019-02-04 22:13:42
2058
2
原创 Spring Cloud 全家桶系列 ——1.服务中心Spring Cloud Eureka
目录目标步骤快速构建服务中心新建项目添加依赖主类注解必要配置服务注册新建项目添加依赖主类注解配置提供服务接口服务发现和消费新建项目添加依赖主类注解配置消费服务启动总结目标本文的目标是使用spring cloud eureka和spring cloud ribbon快速构建一个简易的分布式结构例子。spring cloud eureka微服务的关键就是把服务切分成比较小且独立的服务,这样做...
2019-01-20 23:32:47
309
原创 设计模式总结
1.为什么使用设计模式在了解设计模式之前,我们需要进行一次苏格拉底式的追问以了解我们使用设计模式的最终目的。为什么要使用设计模式?为了代码可重用,容易被他人理解,保证代码可靠性。为什么代码要可重用且需要容易被他人理解?因为代码需要被维护。为什么代码需要被维护?因为需求总是变化和增加的。为什么需求总是变化和增加的?因为编程是以迭代的方式向前优化的。所以我理解使用设计模式的目的三...
2018-07-18 22:35:35
220
原创 机器学习(10)实例:自动驾驶,使用SVM跟踪视频中的汽车
最终视频效果点击图片查看视频 本文的目的是如视频所显示的效果,使用SVM算法在视频中找出汽车的位置github过程编写提取特征的函数使用svm和提取到的特征,训练一个二分类器,区分汽车和非汽车编写滑动窗口函数,并把每一个窗口使用svm判断是否汽车编写热力图函数,把多个判断为汽车的窗口合并为一个窗口opencv读取视频和图片转换为视频提取特征像素特...
2018-04-21 23:22:28
3089
3
原创 机器学习(9)-支持向量机
什么是支持向量机支持向量机是分类算法,目标是确立一个超平面来切分数据,(超平面在二维中是一条线,在三维中是一个面,以此类推),并且这个分类的边界要足够好,即离分割边界最近的数据点到分割边界的距离要越远越好(前提是所有的分类都是正确的,加入软间隔后可忽略部分离群点)。如图 点到面的距离点到面的距离公式看这个链接:https://www.cnblogs.com/graphics/ar...
2018-04-21 12:03:11
331
原创 caffe使用教程(1)-网络文件配置
1.caffe介绍caffe是一种简单易用的机器学习框架。最大的特点是,网络结构层是使用配置文件设置的,而不需要编写代码。所以在训练网络模型阶段,甚至可以不用编写代码。2.caffe配置文件说明2.1文件说明使用caffe时会用到以下文件,需要说明的是,文件名是自定义的,但一般会加上“train”,“solver”,”deploy”来用于区分作用。 train.proto...
2018-02-26 23:07:44
1167
原创 机器学习(8)-人脸识别和 人脸定位
目的与过程概要1.目的:输入一张图片,让机器在人脸的位置画出一个框 2.过程概要训练一个能识别一张227*227的图像是否是人脸的二分类模型(使用AlexNet网络) =>人脸 =>非人脸修改训练好的网络模型,数据层改为输入层,全链接层改为全卷积层(起到窗口滑动的作用)将输入的图片进行放大缩小变换scal变换- 根据图像的大小,动态的修改网络模型的数据层环境首先,要安装以下环境Ubu
2017-12-23 00:36:27
21329
17
原创 机器学习(7)-EM算法
最大似然估计在讲EM算法前,回顾下最大似然估计 最大似然估计解决的问题是,在不知道参数θ的情况下,只有数据,要猜出参数θ。 假设参数为θ那么在θ参数出现的情况下,出现样本xix_i的概率就是p(xi|θ)p(x_i|θ) 考虑所有样本,计算最大值,进行累乘法:l(θ)=∏mi=1p(xi|θ)l(θ)=\prod_{i=1}^mp(x_i|θ)由于累乘计算难度比较大,加入一个对数转换为加
2017-12-03 23:52:30
412
原创 机器学习(6)-贝叶斯算法
什么是贝叶斯算法正向概率:假设袋子里有N个白球,M个黑球,那出黑球的概率有多大逆向改率:假设不知道黑白球的分布,摸出一个或者多个球,观察后推测球的分布正向概率容易求,而逆向概率却很难求,贝叶斯算法就是把逆向概率转换为正向概率来进行求解公式 P(A|B)=P(B|A)P(A)P(B)P(A|B)=\frac{P(B|A)P(A)}{P(B)}算法推理男生占了60%,女生占了40%,男生总是
2017-12-01 00:43:05
1269
原创 机器学习(5)-决策树与集成算法
1.什么是决策树从树的根节点开始一步步(决策)走到子节点的树型结构假如我门需要解决谁愿意和我们一起玩游戏的问题,并且有如下的数据 那么我们可以构造一个如下的决策树来预测结果 2.决策树的构建决策树定义很简单,关键是我们如何构建一棵决策树,为什么要把年龄当成树节点,把性别当成子节点?我们分配的标准就是,使用这个分类器后,使得数据的混乱度最大的降低。我们用熵来表示混乱程度度,熵 表示物体
2017-11-21 00:04:28
1254
原创 机器学习(4)-实例:信用卡欺诈检测
背景从提供的银行数据中,找出信用卡欺诈样本样本不均衡的解决方案由于欺诈样本属于少数样本,导致正常样本回远大于异常样本,直接计算会导致效果很差下采样(undersample):随机选择和异常样本一样多的正常数据和异常数据一同进行训练进行过采样(oversample):利用生成算法,生成和正常样本一样多的异常样本交叉验证交叉验证可使得训练的结果更加稳健将数据分割成训练集(80%)和测试集(2
2017-11-15 22:29:05
9216
1
MySQL必知必会_文字版_目录齐全.pdf
2018-09-18
Docker 容器与容器云(第2版)【目录完整】
2018-08-08
精通ASP.NET MVC 5中文版,目录完整
2018-08-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人