自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

沉迷代码无法自拔

一枚萌新的学习成长记录

  • 博客(44)
  • 收藏
  • 关注

原创 HTTPS的工作流程

1.客户端发送请求到服务器端2.服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在3.客户端验证证书和公开密钥的有效性,如果有效,则生成共享密钥并使用公开密钥加密发送到服务器端4.服务器端使用私有密钥解密数据,并使用收到的共享密钥加密数据,发送到客户端5.客户端使用共享密钥解密数据...

2018-06-29 00:31:18 578

转载 在浏览器中输入网址后执行的全部过程

1、浏览器根据域名(主机名)通过DNS服务器查询域名对应的服务器的IP地址2、浏览器主机根据IP地址与服务器建立TCP连接。3、浏览器将访问请求封装为一个HTTP请求报文,通过TCP协议发送给服务器。4、服务器收到请求并响应,生成一个HTTP响应报文,通过TCP协议发送给浏览器主机。5、浏览器得到响应报文之后,对响应报文进行解析。6、浏览器异步请求其他资源...

2018-06-29 00:25:43 2457

原创 重写equals方法

object对象中的 public boolean equals(Object obj),指示其他某个对象是否与此对象“相等”。这里的相等指的是比较的两方指向同一个对象对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象(就是同一块内存地址),此方法才返回 true; 但是这一性质并不符合我们生活所需,比如一个不允许有重复值的对象数组,我们的规定,保存的数据相同的对象就属于重复...

2018-06-28 01:08:13 430

原创 项目之如果学会使用枚举来封装出现的常量

    项目初期的时候,因为有很多异常信息的处理都需要返回响应的结果字符串,每次都是在需要的地方直接写上字符串就好,后来当需求变动,返回的消息有改动的时候,就需要一处一处地查找用到的字符串,非常麻烦,而且不容易纠错。所以本着优化代码,规范代码的思想,之前有时间将所有的消息都用枚举类型来替代,这样一处修改处处修改,使代码简洁并且增强了重构性下面就举几个例子来说明一下:比如订单状态:public en...

2018-06-28 00:58:30 482

原创 DNS查找过程

递归查询:        主机向本地域名服务器的查询一般都是采用递归查询。        如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果是所要查询的IP地址,或者是返回一个失败的响应,表示无法查询到所需的IP地址。迭代查询:  ...

2018-06-27 00:24:47 3092

原创 CAS自旋volatile变量

我们先来看一下AtomicInteger类的getAndIncrement的源代码: public final int getAndIncrement() { for (;;) { int current = get(); // 取得AtomicInteger里存储的数值 ...

2018-06-27 00:19:44 7053 1

原创 CAS

一、什么是CASCAS,compare and swap的缩写,中文翻译成比较并交换。我们都知道,在java语言之前,并发就已经广泛存在并在服务器领域得到了大量的应用。所以硬件厂商老早就在芯片中加入了大量直至并发操作的原语,从而在硬件层面提升效率。在intel的CPU中,使用cmpxchg指令。在Java发展初期,java语言是不能够利用硬件提供的这些便利来提升系统的性能的。而随着java不断的发...

2018-06-27 00:17:19 219

原创 CDN内容分发网络技术

    由于静态网站的请求资源是不会经常发生变化的,那么这种资源其实很容易被迁移,我们都知道网络传输的效率是和距离长短有关系的,既然静态资源很容易被迁移那么我们就可以把静态资源服务器按地域分布在多个服务节点上,当用户请求网站时候根据一个路由算法将请求落地在离用户最近的节点上,这样就可以减少网络传输的距离从而提升访问的效率,这就是我们长提的大名鼎鼎的CDN技术,内容分发网络技术。基本流程:最简单的C...

2018-06-24 23:18:42 211

原创 集群session一致性和同步问题

一. 何为session用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的?具体方式为:在会话开始时,分配一个唯一的会话标识(sessionId),通过cookie把这个标识告诉浏览器,以后每次请求的时候,浏览器都会带上这个会话标识来告诉web服务器请求是属于哪个会话的。如果遇到禁用cookie的情况,一般的做法就是把这个会话标识放到url...

2018-06-24 23:08:20 401

原创 正向代理和反向代理

之前那篇文章讲解了负载均衡的一些知识,里面提到了正向代理和反向代理最开始我也不是很理解这两个的区别,后来随着学习的深入才能够对这两个词有了深刻的认识:正向代理正向代理类似一个跳板机,代理访问外部资源。举个例子:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然...

2018-06-22 18:38:20 532

原创 负载均衡相关知识

什么是负载均衡当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保...

2018-06-22 18:35:02 170

转载 object中的方法

object中的方法1.clone方法保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。2.getClass方法final方法,获得运行时类型。3.toString方法该方法用得比较多,一般子类都有覆盖。4.finalize方法该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。5.equal...

2018-06-22 00:54:55 3537

原创 包装类和基础类型比较大小的问题

int和int之间,用==比较,肯定为true。基本数据类型没有equals方法int和Integer比较,Integer会自动拆箱,== 和 equals都肯定为trueint和new Integer比较,Integer会自动拆箱,调用intValue方法, 所以 == 和 equals都肯定为trueInteger和Integer比较的时候,由于直接赋值的话会进行自动的装箱。所以当值在[-12...

2018-06-22 00:46:21 4291

原创 重载与重写

发现面试很喜欢问这个问题,于是便好好琢磨了一下:首先,重载和重写都是多态的一种体现方式。重载是编译期间的活动,重写是运行期间的活动。     其次,重载是在一个类中定义相同的名字的方法,方法的参数列表或者类型要互相不同,但是返回值类型不作为是否重载的标准,可以修改可见性;     重写是不同的,要求子类重写基类的方法时要与父类方法具有相同的参数类型和返回值,可见性需要大于等于基类的方法     最...

2018-06-21 00:33:39 209

原创 JVM最大的作用

学习了这么久的Java虚拟机,今天别人问起来最大的作用是什么,我居然有点懵圈,所以来总结一下我觉得JVM除了垃圾回收,分区管理、类加载外最大的作用。平台无关性解释运行字节码程序 消除平台相关性jvm将java字节码解释为具体平台的具体指令。一般的高级语言如要在不同的平台上运行,至少需要编译成不同的目标代码。而引入JVM后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚...

2018-06-21 00:26:11 1704

原创 项目之如何创建一个高复用的服务响应对象

在最开始嘴项目的时候,往往没有注意到服务响应对象复用的的问题,在web开发中,现在比较流行的是从控制层往前台返回json格式的数据,而若每次的返回都设计一个类的话,不方便使用的同时也会显得很臃肿,不仅代码不够规范和美观,而且对于开发人员来说也很痛苦,所以后来我改进过后创建了一个高复用的服务响应对象://保证json序列化的时候,如果是null的对象,key也会消失@JsonInclude(Jso...

2018-06-21 00:19:04 680

原创 开放地址法

讲了讲项目还是回到基础中来吧,毕竟根基打得越牢固,才能学的更快更稳今天来分享一些我学习整理的关于开放地址法的内容:开放地址法      根据以上hash函数计算数组下标时,当遇到数据存放的冲突时就需要重新找到数组的其他位置。关于开放地址法通常需要有三种方法:线性探测、二次探测、再哈希法。 1.开放地址法:容易产生堆积问题;不适于大规模的数据存储;散列函数的设计对冲突会有很大的影响;插入时可能会出现...

2018-06-20 00:46:21 11594 1

原创 项目之使用redis的一些规范和优化

前段时间在回顾自己项目的时候发现了一些问题,并对这些问题进行了优化,今天就来记录一下对redis使用的一些优化:redis一般情况来说用作缓存,会存储一些需要缓存的对象信息,但是当存储的内容过多以后,如何命名这些缓存的对象,能够快速地查找出你需要的对象,快速地区分哪些key里面存的是你想要的数据就成了一个问题。举个例子:可能你今天码代码的时候觉得当存放user对象时key值应该是“user“,过几...

2018-06-20 00:38:23 1223

原创 final关键字

final关键字1 final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:2 实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final当final修饰的成员变量为引用数据类型时,在赋值后其指向地址无法改变,但是对象内容还是可以改变的3 final修...

2018-06-18 23:55:06 189

原创 余数分散算法

余数分散算法缓存系统中应用比较多的是余数计算分散和一致性 HASH 计算分散。 原理:余数计算分散法简单来说,就是 “ 根据服务器台数的余数进行分散 ” 。求得传入键的整数哈希值( int hashCode )。使用计算出的 hashCode 除以服务器台数 (N) 取余数( C=hashCode % N )在 N 台服务器中选择序号为 C 的服务器。 特点:余数计算的方法简单,数据的分...

2018-06-18 23:48:00 950

原创 一致性哈希算法

1.算法背景: 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ;hash(object)%N 一切都运行正常,再考虑如下的两种情况; 1.一个 cache 服务器 m down 掉...

2018-06-18 23:45:22 106

原创 Memcached

为什么要使用memcache 由于网站的高并发读写需求,传统的关系型数据库开始出现瓶颈,例如:1)对数据库的高并发读写:关系型数据库本身就是个庞然大物,处理过程非常耗时(如解析SQL语句,事务处理等)。如果对关系型数据库进行高并发读写(每秒上万次的访问),那么它是无法承受的。2)对海量数据的处理:对于大型的SNS网站,每天有上千万次的数据产生(如twitter, 新浪微博)。对于关系型数据库,如果...

2018-06-18 23:41:49 103

原创 Redis的过期策略

3种过期策略定时删除含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除优点:保证内存被尽快释放缺点:若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生)...

2018-06-17 01:00:22 1253

原创 Redis为什么这么快

1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁...

2018-06-17 00:59:11 1982

原创 事务的隔离级别

 ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。  ③ Read committed (读已提交):可避免脏读的发生。  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。未授权读取级别:也称为读未提交(Read Uncommitted)。以操作同一行...

2018-06-15 00:15:53 113

转载 事务的四大特性(ACID)

1.原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。2.一致性(consistency):数据库总数从一个一致性的状态转换到另一个一致性的状态。也就是说一个事务执行之前和执行之后都必须处于一致性状态。  拿转账来说,假设用户A和用户B两者的钱加起来一...

2018-06-15 00:11:42 229

原创 三大范式的理解

◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。考虑这样一个表:【联系人】(姓名,性别,电话)如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。◆ 第二范式(2NF):首先是 1NF,另外包...

2018-06-15 00:09:04 1592 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 216

原创 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 3259

原创 undolog实现事务原子性,redolog实现事务的持久性

undo logUndo log 是为了实现事务的原子性。还用Undo Log来实现多版本并发控制(简称:MVCC)。事务的原子性事务的所有操作,要么全部完成,要不都不做,不能只做一半。如果在执行的过程中发生了错误,要回到事务开始时的状态,所有的操作都要回滚。原理Undo Log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方(这个存储数据备份的地方称为Undo L...

2018-06-14 00:26:42 3390 1

原创 面向对象和面向过程的区别以及优缺点

    我理解的面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输...

2018-06-12 00:09:04 622

原创 Serial Old收集器和Parallel Old收集器

Serial Old收集器      Serial Old是 Serial收集器的老年代版本;1、特点      针对老年代;      采用"标记-整理"算法(还有压缩,Mark-Sweep-Compact);      单线程收集;      Serial/Serial Old收集器运行示意图如下:2、应用场景      主要用于Client模式;      而在Server模式有两大用途: ...

2018-06-11 16:23:54 3937

原创 Parallel Scavenge收集器

Parallel Scavenge垃圾收集器因为与吞吐量关系密切,也称为吞吐量收集器(Throughput Collector)。1、特点(A)、有一些特点与ParNew收集器相似      新生代收集器;      采用复制算法;      多线程收集;(B)、主要特点是:它的关注点与其他收集器不同      CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间;      而Par...

2018-06-11 16:22:23 11482 5

原创 Serial收集器和ParNew收集器

Serial收集器       Serial(串行)垃圾收集器是最基本、发展历史最悠久的收集器;       JDK1.3.1前是HotSpot新生代收集的唯一选择;1、特点      针对新生代;      采用复制算法;      单线程收集;       进行垃圾收集时,必须暂停所有工作线程,直到完成;                   即会"Stop The World";      S...

2018-06-11 16:17:00 8721 3

原创 G1收集器

  G1(Garbage-First)是JDK7-u4才推出商用的收集器;1、特点(A)、并行与并发      能充分利用多CPU、多核环境下的硬件优势;      可以并行来缩短"Stop The World"停顿时间;      也可以并发让垃圾收集与用户程序同时进行;(B)、分代收集,收集范围包括新生代和老年代          能独立管理整个GC堆(新生代和老年代),而不需要与其他收集器搭...

2018-06-07 23:49:13 1285

原创 CMS收集器

CMS收集器      并发标记清理(Concurrent Mark Sweep,CMS)收集器也称为并发低停顿收集器(Concurrent Low Pause Collector)或低延迟(low-latency)垃圾收集器;      在前面ParNew收集器曾简单介绍过其特点;1、特点      针对老年代;      基于"标记-清除"算法(不进行压缩操作,产生内存碎片);        ...

2018-06-07 23:46:54 3915 3

原创 java能不能自己写一个类叫java.lang.System

能不能自己写个类叫java.lang.System?网上提供的答案有说可以,通常不可以,但可以采取另类方法达到这个需求也有博客说不可以的,刚开始学习的时候还比较疑惑,后来完整地学习完了深入理解Java虚拟机后了解了其中的本质。我的观点是:不可以!!        类加载器可分为两类:一是启动类加载器(Bootstrap ClassLoader),是C++实现的,是JVM的一部分;另一种是其它的类加...

2018-06-07 00:07:09 369

原创 垃圾回收算法

垃圾回收算法:1.复制算法算法思路       (A)、把内存划分为大小相等的两块,每次只使用其中一块;       (B)、当一块内存用完了,就将还存活的对象复制到另一块上(而后使用这一块);       (C)、再把已使用过的那块内存空间一次清理掉,而后重复步骤2;          执行过程如下图:优点       这使得每次都是只对整个半区进行内存回收;       内存分配时也不用考虑内...

2018-06-06 23:52:18 174

原创 java中内存泄露

内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。内存泄露有时不严重且不易察觉,这样开发者就不知道存在内存泄露,但有时也会很严重,会提示你Out of memory。Java内存泄漏的根本原因是什么呢?长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是因为长生命周期持有它的引用而导致...

2018-06-04 23:51:08 87

原创 Java的四种引用方式

java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象。java对象的引用包括  强引用,软引用,弱引用,虚引用Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。下面来阐述一下这四种类型引用的概念:1.强引用 是指创建一个对象并把这个对象赋给一个引用变量。比如:Ob...

2018-06-04 23:43:43 150

空空如也

空空如也

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

TA关注的人

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