- 博客(77)
- 收藏
- 关注
原创 分布式系统中CAP理论的理解
对于分布式系统了解的不是很多,今天学习了一下分布式系统中CAP,记录一下,希望能对分布式系统的学习有所帮助Consistency(一致性), 数据一致更新,所有数据变动都是同步的Availability(可用性), 好的响应性能Partition tolerance(分区容忍性) 可靠性在网上看了很多资料,这里给出自己的简单理解C:一致性,就是说所有的服务器上面的数据都是一样的...
2018-07-24 00:52:35
2468
原创 怎么打破双亲委派机制
今天在看面经的时候看到一个问题,怎么打破双亲委派机制,觉得很有意思,一般来说面试官关心的都是双亲委派机制的三个特性或者说这个机制的作用,第一次看到这样问的,于是来总结一下打破这个机制的方法:1:自己写一个类加载器2:重写loadclass方法3:重写findclass方法这里最主要的是重写loadclass方法,因为双亲委派机制的实现都是通过这个方法实现的,先找附加在其进行加载,如...
2018-07-19 23:54:38
9369
3
原创 DoubleCheck的几种方法总结
第一种:非延迟加载单例类public class Singleton { private Singleton() {} private static final Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } }...
2018-07-18 00:31:06
14538
原创 RBAC
实用的RBAC模型的数据库建模 RBAC用户角色权限设计方案RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。 角色是什么?可以理解为一定数量的权限的集...
2018-07-15 21:20:40
3217
原创 分库分表相关知识
背景情况用户表达到了 几千万级别,在做很多操作都比较吃力,.所以,考虑对其进行分库分表,或者在进行高并发读写的时候采用分库分表的形式也更能增强读写的性能,保证服务的稳定高效常用的切分方案数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据表中的数据的...
2018-07-13 23:58:58
280
原创 maven打包的经验教训
今天在公司实际开发项目过程中遇到了一件事,我觉得应该记录下来引以为戒当时我项目开发需要另外一个项目组的人提供相应的接口支持,跟他沟通过后他给了我jar包的maven仓库地址,这个接口是正在开发的未经过测试的,我刚拿到的时候觉得没什么不对劲,后来才发现他给我的居然是releases版本的,这样其实是很不规范的,在开发测试过程的打包都应该使用snapshots版本进行打包,这样的话才能够有错及时进行更...
2018-07-13 23:54:16
1013
原创 实习总结之埋点监控的重要性
在公司的开发中提供的有埋点监控的接口,可以实时的记录你想要记录的数据,这为我们发现问题解决问题提供了很好的参照对比性可以记录查询缓存的次数和查询数据库的次数:在缓存开关正常得情况下能够监控缓存的使用情况可以记录服务调用失败数和成功数:关注服务的可用性,新上线的任务是否有问题可以记录缓存命中率: 能够及时看出缓存是否出问题,实时调整缓存策略可以记录查询数据失败率:能够及时发现代码漏洞...
2018-07-08 22:02:38
1822
原创 关于接收对象的小技巧
今天在完成开发任务的时候被师兄指出了一个关于代码的优雅性的小问题,在这里记录一下: 当接受一个Object类型的对象数据,并且要取里面的值的时候,不需要使用类型转换把这个object转换成我们所需要的类,这样的话就相当于写死了逻辑。如果传来的Object类型的对象变化的时候,比如之前是把他转化为类A然后取类A的数据,以后可能传过来的是类B,这样的话就还要修改源代码,我们可以使用一个map来接...
2018-07-06 00:57:21
466
原创 实习之缓存使用心得
经历了一段时间的实习,基本上了解了企业级开发一些具体流程和规范化管理机制,并且也开始上手参与到了项目的研发中去,最近在项目中使用缓存的时候发现我们组使用的缓存机制让我眼前一亮,这是我在原来学校中没有接触到的一部分,今天来记录一下大概的几个要点:1.根据Cache资源管控信息,获取查询模式 在项目发布前期,缓存命中率较低时,对批量查询增设开关,禁止批量查询缓存,前期直接查DB,一段时间...
2018-07-04 00:45:18
311
原创 http1.1和1.0的区别
1.带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。2.长连接,HTTP 1.1支持长连接(Persisten...
2018-07-02 00:32:46
697
原创 如何合理配置线程池的大小
一般需要根据任务的类型来配置线程池大小: 如果是CPU密集型任务,就需要尽量压榨CPU,参考值可以设为 NCPU+1 如果是IO密集型任务,参考值可以设置为2*NCPU 当然,这只是一个参考值,具体的设置还需要根据实际情况进行调整,比如可以先将线程池大小设置为参考值,再观察任务运行情况和系统负载、资源利用率来进行适当调整。与CPU密集型的关系: 一般情况下,C...
2018-07-02 00:30:39
3587
原创 HTTPS的工作流程
1.客户端发送请求到服务器端2.服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在3.客户端验证证书和公开密钥的有效性,如果有效,则生成共享密钥并使用公开密钥加密发送到服务器端4.服务器端使用私有密钥解密数据,并使用收到的共享密钥加密数据,发送到客户端5.客户端使用共享密钥解密数据...
2018-06-29 00:31:18
623
转载 在浏览器中输入网址后执行的全部过程
1、浏览器根据域名(主机名)通过DNS服务器查询域名对应的服务器的IP地址2、浏览器主机根据IP地址与服务器建立TCP连接。3、浏览器将访问请求封装为一个HTTP请求报文,通过TCP协议发送给服务器。4、服务器收到请求并响应,生成一个HTTP响应报文,通过TCP协议发送给浏览器主机。5、浏览器得到响应报文之后,对响应报文进行解析。6、浏览器异步请求其他资源...
2018-06-29 00:25:43
2551
原创 重写equals方法
object对象中的 public boolean equals(Object obj),指示其他某个对象是否与此对象“相等”。这里的相等指的是比较的两方指向同一个对象对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象(就是同一块内存地址),此方法才返回 true; 但是这一性质并不符合我们生活所需,比如一个不允许有重复值的对象数组,我们的规定,保存的数据相同的对象就属于重复...
2018-06-28 01:08:13
467
原创 项目之如果学会使用枚举来封装出现的常量
项目初期的时候,因为有很多异常信息的处理都需要返回响应的结果字符串,每次都是在需要的地方直接写上字符串就好,后来当需求变动,返回的消息有改动的时候,就需要一处一处地查找用到的字符串,非常麻烦,而且不容易纠错。所以本着优化代码,规范代码的思想,之前有时间将所有的消息都用枚举类型来替代,这样一处修改处处修改,使代码简洁并且增强了重构性下面就举几个例子来说明一下:比如订单状态:public en...
2018-06-28 00:58:30
521
原创 DNS查找过程
递归查询: 主机向本地域名服务器的查询一般都是采用递归查询。 如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果是所要查询的IP地址,或者是返回一个失败的响应,表示无法查询到所需的IP地址。迭代查询: ...
2018-06-27 00:24:47
3162
原创 CAS自旋volatile变量
我们先来看一下AtomicInteger类的getAndIncrement的源代码: public final int getAndIncrement() { for (;;) { int current = get(); // 取得AtomicInteger里存储的数值 ...
2018-06-27 00:19:44
7105
1
原创 CAS
一、什么是CASCAS,compare and swap的缩写,中文翻译成比较并交换。我们都知道,在java语言之前,并发就已经广泛存在并在服务器领域得到了大量的应用。所以硬件厂商老早就在芯片中加入了大量直至并发操作的原语,从而在硬件层面提升效率。在intel的CPU中,使用cmpxchg指令。在Java发展初期,java语言是不能够利用硬件提供的这些便利来提升系统的性能的。而随着java不断的发...
2018-06-27 00:17:19
246
原创 CDN内容分发网络技术
由于静态网站的请求资源是不会经常发生变化的,那么这种资源其实很容易被迁移,我们都知道网络传输的效率是和距离长短有关系的,既然静态资源很容易被迁移那么我们就可以把静态资源服务器按地域分布在多个服务节点上,当用户请求网站时候根据一个路由算法将请求落地在离用户最近的节点上,这样就可以减少网络传输的距离从而提升访问的效率,这就是我们长提的大名鼎鼎的CDN技术,内容分发网络技术。基本流程:最简单的C...
2018-06-24 23:18:42
256
原创 集群session一致性和同步问题
一. 何为session用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的?具体方式为:在会话开始时,分配一个唯一的会话标识(sessionId),通过cookie把这个标识告诉浏览器,以后每次请求的时候,浏览器都会带上这个会话标识来告诉web服务器请求是属于哪个会话的。如果遇到禁用cookie的情况,一般的做法就是把这个会话标识放到url...
2018-06-24 23:08:20
430
原创 正向代理和反向代理
之前那篇文章讲解了负载均衡的一些知识,里面提到了正向代理和反向代理最开始我也不是很理解这两个的区别,后来随着学习的深入才能够对这两个词有了深刻的认识:正向代理正向代理类似一个跳板机,代理访问外部资源。举个例子:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然...
2018-06-22 18:38:20
588
原创 负载均衡相关知识
什么是负载均衡当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保...
2018-06-22 18:35:02
189
转载 object中的方法
object中的方法1.clone方法保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。2.getClass方法final方法,获得运行时类型。3.toString方法该方法用得比较多,一般子类都有覆盖。4.finalize方法该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。5.equal...
2018-06-22 00:54:55
3583
原创 包装类和基础类型比较大小的问题
int和int之间,用==比较,肯定为true。基本数据类型没有equals方法int和Integer比较,Integer会自动拆箱,== 和 equals都肯定为trueint和new Integer比较,Integer会自动拆箱,调用intValue方法, 所以 == 和 equals都肯定为trueInteger和Integer比较的时候,由于直接赋值的话会进行自动的装箱。所以当值在[-12...
2018-06-22 00:46:21
4379
原创 重载与重写
发现面试很喜欢问这个问题,于是便好好琢磨了一下:首先,重载和重写都是多态的一种体现方式。重载是编译期间的活动,重写是运行期间的活动。 其次,重载是在一个类中定义相同的名字的方法,方法的参数列表或者类型要互相不同,但是返回值类型不作为是否重载的标准,可以修改可见性; 重写是不同的,要求子类重写基类的方法时要与父类方法具有相同的参数类型和返回值,可见性需要大于等于基类的方法 最...
2018-06-21 00:33:39
258
原创 JVM最大的作用
学习了这么久的Java虚拟机,今天别人问起来最大的作用是什么,我居然有点懵圈,所以来总结一下我觉得JVM除了垃圾回收,分区管理、类加载外最大的作用。平台无关性解释运行字节码程序 消除平台相关性jvm将java字节码解释为具体平台的具体指令。一般的高级语言如要在不同的平台上运行,至少需要编译成不同的目标代码。而引入JVM后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚...
2018-06-21 00:26:11
1752
原创 项目之如何创建一个高复用的服务响应对象
在最开始嘴项目的时候,往往没有注意到服务响应对象复用的的问题,在web开发中,现在比较流行的是从控制层往前台返回json格式的数据,而若每次的返回都设计一个类的话,不方便使用的同时也会显得很臃肿,不仅代码不够规范和美观,而且对于开发人员来说也很痛苦,所以后来我改进过后创建了一个高复用的服务响应对象://保证json序列化的时候,如果是null的对象,key也会消失@JsonInclude(Jso...
2018-06-21 00:19:04
724
原创 开放地址法
讲了讲项目还是回到基础中来吧,毕竟根基打得越牢固,才能学的更快更稳今天来分享一些我学习整理的关于开放地址法的内容:开放地址法 根据以上hash函数计算数组下标时,当遇到数据存放的冲突时就需要重新找到数组的其他位置。关于开放地址法通常需要有三种方法:线性探测、二次探测、再哈希法。 1.开放地址法:容易产生堆积问题;不适于大规模的数据存储;散列函数的设计对冲突会有很大的影响;插入时可能会出现...
2018-06-20 00:46:21
12031
1
原创 项目之使用redis的一些规范和优化
前段时间在回顾自己项目的时候发现了一些问题,并对这些问题进行了优化,今天就来记录一下对redis使用的一些优化:redis一般情况来说用作缓存,会存储一些需要缓存的对象信息,但是当存储的内容过多以后,如何命名这些缓存的对象,能够快速地查找出你需要的对象,快速地区分哪些key里面存的是你想要的数据就成了一个问题。举个例子:可能你今天码代码的时候觉得当存放user对象时key值应该是“user“,过几...
2018-06-20 00:38:23
1259
原创 final关键字
final关键字1 final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:2 实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final当final修饰的成员变量为引用数据类型时,在赋值后其指向地址无法改变,但是对象内容还是可以改变的3 final修...
2018-06-18 23:55:06
216
原创 余数分散算法
余数分散算法缓存系统中应用比较多的是余数计算分散和一致性 HASH 计算分散。 原理:余数计算分散法简单来说,就是 “ 根据服务器台数的余数进行分散 ” 。求得传入键的整数哈希值( int hashCode )。使用计算出的 hashCode 除以服务器台数 (N) 取余数( C=hashCode % N )在 N 台服务器中选择序号为 C 的服务器。 特点:余数计算的方法简单,数据的分...
2018-06-18 23:48:00
1006
原创 一致性哈希算法
1.算法背景: 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ;hash(object)%N 一切都运行正常,再考虑如下的两种情况; 1.一个 cache 服务器 m down 掉...
2018-06-18 23:45:22
127
原创 Memcached
为什么要使用memcache 由于网站的高并发读写需求,传统的关系型数据库开始出现瓶颈,例如:1)对数据库的高并发读写:关系型数据库本身就是个庞然大物,处理过程非常耗时(如解析SQL语句,事务处理等)。如果对关系型数据库进行高并发读写(每秒上万次的访问),那么它是无法承受的。2)对海量数据的处理:对于大型的SNS网站,每天有上千万次的数据产生(如twitter, 新浪微博)。对于关系型数据库,如果...
2018-06-18 23:41:49
147
原创 Redis的过期策略
3种过期策略定时删除含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除优点:保证内存被尽快释放缺点:若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生)...
2018-06-17 01:00:22
1289
原创 Redis为什么这么快
1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁...
2018-06-17 00:59:11
2030
原创 事务的隔离级别
① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。 ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。 ③ Read committed (读已提交):可避免脏读的发生。 ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。未授权读取级别:也称为读未提交(Read Uncommitted)。以操作同一行...
2018-06-15 00:15:53
148
转载 事务的四大特性(ACID)
1.原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。2.一致性(consistency):数据库总数从一个一致性的状态转换到另一个一致性的状态。也就是说一个事务执行之前和执行之后都必须处于一致性状态。 拿转账来说,假设用户A和用户B两者的钱加起来一...
2018-06-15 00:11:42
263
原创 三大范式的理解
◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。考虑这样一个表:【联系人】(姓名,性别,电话)如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。◆ 第二范式(2NF):首先是 1NF,另外包...
2018-06-15 00:09:04
1651
2
转载 Innodb中的事务隔离级别实现原理
<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post"> <link rel="stylesheet&am
2018-06-14 00:57:13
242
原创 MyISAM和INNODB的区别
MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM)1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;3. Inno...
2018-06-14 00:36:01
3284
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人