自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 锁的优化——浅谈偏向锁、轻量级锁、重量级锁

JavaSE1.6为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”。在JavaSE1.6中,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁,重量级锁也不能降级成轻量级锁。这种锁升级却不能降级的策略,目的是为了提高获得锁和释放锁的效...

2018-12-24 20:45:52 700 1

原创 Java语言是" 解释执行" 的语言吗

先给结论:class(字节码)文件经过JVM编译成机器码进行解释执行(解释执行)。对于热点代码,JIT(JustInTime)编译器会在运行时将其编译为机器码执行(编译运行)所以在JVM默认的mixed模式下JAVA既不完全是解释运行也不完全是编译运行。 正文:许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代...

2018-12-23 21:00:33 1427

原创 Java——Mybatis二级缓存

一、什么是二级缓存二级缓存是mapper级别的缓存,Mybatis默认是没有开启二级缓存。多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,也就是说,二级缓存是跨SqlSession的,因此二级缓存的作用范围更大。UserMapper有一个二级缓存区域(按namespace分),其它mapper也有自己的二级缓存区域(按namespac...

2018-12-23 14:55:14 1154

原创 Java——Mybatis一级缓存

一、概述当用户频繁查询某些固定的数据时,第一次将这些数据从数据库中查询出来,保存在缓存(内存,高速磁盘)中。当下次用户再次查询这些数据时,不用再通过数据库查询,而是去缓存里面查询。这么做的目的,一是提升查询速度,二是降低数据库的并发请求压力。在Mybatis中,缓存分为两种 : 一级缓存和二级缓存。而Mybatis默认开启一级缓存。一级缓存是SqlSession级别的,二级缓存是M...

2018-12-23 13:50:56 388

原创 常见加密算法原理及概念

一、概述在安全领域,利用密钥加密算法来对通信的过程进行加密是一种常见的安全手段。利用该手段能够保障数据安全通信的三个目标:1、数据的保密性,防止用户的数据被窃取或泄露2、保证数据的完整性,防止用户传输的数据被篡改3、通信双方的身份确认,确保数据来源与合法的用户而常见的密钥加密算法类型大体可以分为三类:对称加密、非对称加密、单向加密。下面我们来了解下相关的算法原理及其常见的算法。...

2018-12-22 16:20:17 4399

原创 Java——继承机制详谈

先给出结论:子类只能继承父类的非静态方法,并可以对之进行覆盖。对于父类的成员变量和静态方法,子类不能够继承,但是子类可以访问到父类的成员变量和静态方法。如果此时子类中有与父类相同的成员变量或静态方法,也只是把父类的静态方法隐藏。当通过该变量访问它所引用的对象的成员变量和静态方法时,该实例变量的值取决于该变量的声明类型;当通过该变量来调用它所引用的对象的非静态方法时,该方法取决于它实...

2018-12-20 11:13:23 286

原创 Java——类加载机制详解

一、什么是类加载虚拟机把描述类的数据从class文件(代表类和接口,是一串二进制流)加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型。 二、什么时候进行类加载与那些在编译时需要进行连接工作的语言不同,在java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的。这种策略虽然会令类加载时稍微增加一些性能开销 ,但是会为Java...

2018-12-19 20:30:48 231

原创 Java——迭代器iterator详解

一、Iterator的API      关于Iterator主要有三个方法:hasNext()、next()、remove()      hasNext:没有指针下移操作,只是判断是否存在下一个元素      next:指针下移,返回该指针所指向的元素      remove:删除当前指针所指向的元素,一般和next方法一起用,这时候的作用就是删除next方法返回的元素 二...

2018-12-18 15:41:07 2443

原创 Java——反射的意义及优缺点

意义:1.增加程序的灵活性,避免将程序写死到代码里。例:定义了一个接口,实现这个接口的类有20个,程序里用到了这个实现类的地方有好多地方,如果不使用配置文件手写的话,代码的改动量很大,因为每个地方都要改而且不容易定位,如果你在编写之前先将接口与实现类的写在配置文件里,下次只需改配置文件,利用反射(java API已经封装好了,直接用就可以用 Class.newInstance())就可完成...

2018-12-15 17:26:54 16811 4

原创 JAVA——synchronized方法与synchronized代码块的区别

区别:1.当A线程访问对象的synchronized(this)代码块的时候,B线程依然可以访问对象方法中其余非synchronized块的部分。注:该情况在该方法没有加synchronized修饰的情况下成立。因为synchronized代码块和synchronized方法其实共享一把锁,锁住的同样是整个对象。2.同步方法直接在方法上加synchronized实现加锁,同步代码块则在...

2018-12-14 15:14:48 4460

原创 JAVA——静态方法加锁和非静态方法加锁的区别

对象锁(实例锁,synchronized)该锁针对的是该实例对象(当前对象)。synchronized是对类的当前实例(当前对象)进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块。每个对象都有一个锁,且是唯一的。注意:1.指的是“类的当前实例”, 类的两个不同实例就没有这种约束了。2.锁住的只是synchronized块,static synchroni...

2018-12-14 14:44:37 2482 1

原创 Java——动态代理实现与原理详细分析

Java代理分静态代理和动态代理。 一、静态代理1、什么是静态代理编译时就已经将接口,被代理类,代理类等确定下来。在程序运行之前,代理类的.class文件就已经生成。 2、静态代理的简单实现需求:假如一个班的同学要向老师交班费,但是都是通过班长把自己的钱转交给老师。这里,班长就是代理学生上交班费。代理模式在访问实际对象时引入一定程度的间接性,因为这种间接性,可以附加...

2018-12-14 00:29:48 252 1

原创 Java——设计模式之单例模式详解

一、单例模式定义单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 二、为什么要使用单例模式1.对于系统中的某些类来说,只有一个实例很重要。例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;售票时,一共有100张票,可有有多个窗口同时售票,但需要保证不要超售(这里的票数余量就是单例,售票涉及到多线程)。如果不是用机制对窗口对象进行唯一化将弹出...

2018-12-13 00:11:24 203

原创 JAVA——深入理解Java接口和抽象类

一、抽象类1.什么是抽象类如果一个类含有抽象方法或类用abstract关键字修饰,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。 2.抽象类和普通类的区别包含抽象方法的类称为抽象类,...

2018-12-12 22:56:32 180

原创 JVM——对象的回收

本篇来自周志明的<<深入理解java虚拟机>>预备知识: 如何判定对象存在活引用? https://blog.csdn.net/q5706503/article/details/84899581即使在可达性分析算法中不可达的对象,也并非是“非死不可”的 ,这时候它们暂时处于“缓刑” 阶段 ,要真正宣告一个对象死亡 ,至少要经历两次标记过程 : 如 果对象在进行可达性...

2018-12-12 14:30:33 114

原创 JVM——垃圾收集器GC算法

本篇来自周志明的<<深入理解java虚拟机>> 标记-清除算法标记-清除(Mark-Sweep)算法是最基础的算法,就如它的名字一样,算法分为”标记”和”清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其缺点进行改进而得到的。它主要有两个缺点:一个是效率问...

2018-12-12 14:27:50 135 1

原创 JVM----G1垃圾收集器

本篇来自周志明的<<深入理解java虚拟机>> G1(Garbage-First)收集器是当今收集器技术发展的最前沿成果之一,早在JDK 1.7刚刚确立项目目标,Sun公司给出的JDK 1.7 RoadMap里面,它就被视为JDK 1.7中HotSpot虚拟机的一个重要进化特征。从JDK 6u14中开始就有Early Access版本的G1收集器供开发人员实验、试用...

2018-12-12 14:25:24 231

原创 JVM----CMS垃圾收集器

本篇来自周志明的<<深入理解java虚拟机>> 一、什么是CMSCMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的Java应用都集中在互联网站或B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。CMS收集器就非常符合这类应用的需求。 二、...

2018-12-12 14:19:05 178

转载 数据库——SQL Server基础之存储过程

一:存储过程概述 SQL Server中的存储过程是使用T_SQL编写的代码段。它的目的在于能够方便的从系统表中查询信息,或者完成与更新数据库表相关的管理任务和其他的系统管理任务.T_SQL语句是SQL Server数据库与应用程序之间的编程接口。在很多情况下,一些代码会被开发者重复编写多次,如果每次都编写相同功能的代码,不但繁琐,而且容易出错,而且由于SQL Server逐条的执行语句会降低...

2018-12-04 00:20:39 423

原创 数据库——sql优化(百万数据优化方案)

一、sql数据库优化1、索引建立索引是数据库优化各种方案之中成本最低,见效最快的解决方案,一般来讲,数据库规模在几十万和几百万级别的时候见效最快,即便是有不太复杂的表关联,也能大幅度提高sql的运行效率。 建立索引需要注意的地方1、索引一般加在查询条件的关键字上,如果有多个查询条件关键字,还可以添加组合索引,写sql的时候需要注意,索引字段和sql字段需要保持一致,否则索引会无效。...

2018-12-03 22:46:15 1621

原创 可承载千万级用户的 Redis框架结构详解

一、架构数据单片分发数据多片分发二、流程解析数据单片分发数据分发到一个片上,这是默认的redis分发模式。先分发请求到各个片,再在内存中构成树结构数据多片分发数据分发到多个片,显著降低数据传输速度,但是数据在内存中构成树结构所耗费的时间并未大幅减少,因为平衡二叉树的时间复杂度是o(logn),所以数据减少,时间并不会减少。...

2018-12-03 00:15:07 674

原创 可承载千万级用户的互联网ZooKeeper框架结构详解

一、架构二、流程解析1.在zookeeper注册生产者,给生产者分配标识key注:不同的生产者可以有不同的key,也可以选择使用相同的key2.在zookeeper注册消费者,也给消费者分配key注:key也可以相同,根据具体情况判断。3.消费者拿给生产者分配的key去访问对应的生产者4.生产者先对消费者分发一些服务器,再对请求的数据进行一系列计算,判断分发到哪个服务器。同时将消费...

2018-12-03 00:02:02 237

原创 可承载千万级用户的互联网公司网络框架详解

一、架构二、流程解释1.DNS根据域名查询地址注:因为DNS服务器性能数量的原因,有时候公司会选择让DNS来承担一部分分流的任务,在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。2.公司部署防火...

2018-12-02 23:05:10 753

原创 for循环和foreach的区别

1.在固定长度或者长度不需要计算的时候for循环效率高于foreach,在不确定长度或者计算长度有损性能的时候用foreach比较方便2.foreach适用于只是进行集合或数组遍历,for则在较复杂的循环中效率更高。3.如果对集合中的值进行修改,就要用for循环了。其实foreach的内部原理其实也是Iterator,但它不能像Iterator一样可以人为的控制,而且也不能调用iterat...

2018-12-01 22:36:44 12498 3

原创 List、Set、Map的区别

一、集合概述 二、List、Set、Map特点List1.可以允许重复的对象。2.可以插入多个null元素。3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 Li...

2018-12-01 22:01:44 112

原创 ArrayList、Vector和LinkedList有什么区别

ArrayList、Vector、LinkedList类均在java.util包中,均为可伸缩数组,即可以动态改变长度的数组一、ArrayList和Vector的区别存储结构ArrayList和Vector是按照顺序将元素存储(从下表为0开始),删除元素时,删除操作完成后,需要使部分元素移位,默认的初始容量都是10.ArrayList和Vector是基于数组实现的,LinkedLi...

2018-12-01 21:47:23 182

原创 HashMap、Hashtable、TreeMap、LinkedHashMap、IdentityHashMap、ConcurrentHashMap和WeakHashMap的区别

一、Map概述java为数据结构中的映射定义了一个接口java.util.Map;它有三个实现类,分别是HashMap、Hashtable 和TreeMap.Map是用来存储键值对的数据结构,在数组中通过数组下标来对其内容进行索引的,而在Map中,则是通过对象来进行索引,用来索引的对象叫做key,其对应的对象叫value。 二、类图 注:以下说的无序的意思是指不会记录插...

2018-12-01 19:23:57 1379

原创 Java——集合和数组的区别

1、数组声明了它容纳的元素的类型,而集合不声明。2、数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。3、数组的存放的类型只能是一种(基本类型/引用类型),集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。4、数组是java语言中内置的数据类型,是线性排列的...

2018-12-01 17:42:37 206

空空如也

空空如也

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

TA关注的人

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