自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySql 深入浅出之四 (数据库的锁)

锁的分类每个数据库引擎都有自己锁的实现。例如Myisam引擎就支持表锁。因此总的来说锁分为 全局锁,表锁,行锁。 从粒度来说当然是粒度越细效率越高。但是其实每一种锁都有自己的使用场景。 全局锁:可以是整个数据库属于只读状态。 因此可以用来做全局逻辑备份。 表锁:表锁分为两种一种是表锁,一种是元数据所(meta data lock,MDL) 表锁的语法是:lock tables ... ...

2019-02-25 20:46:44 182

原创 MySql 深入浅出之三 (数据库索引)

常见的数据库索引数据结构数据库索引是数据库很重要的概念,它主要的作用是提高数据库的读写效率。 常见的索引数据结构有以下3个:哈希表:是一种以key-value形式存储的数据结构。是一种很常见的数据结构,使用合适的哈希函数就能算出key值对应存储的位置。 可想而知当key值很多的时候,会出现hash冲突,这个时候采用的方法是将对应位置的key值建立链表。具体实现可以对应HashMap。从上面...

2019-02-25 10:16:37 148

原创 MySql 深入浅出之二 (Update的执行)

前面说到了数据库的查询会经过连接器,分析器,执行器,存储engine等。试下,在一条更新语句之前,我们必须知道更新前的值,因此在Update执行的时候,查询语句也会先被走一边。下图是一个Update语句执行的过程:从图中可以看出两个重要的日志用于完成update这一操作。其中 redo log是用于保存物理日志的,用于记录这个数据页修改了什么操作,存放在存储Engine中,是InnoDB自...

2019-02-17 22:32:19 252

原创 Mysql 深入浅出(一)

Mysql基础框架工作中经常必然会涉及到数据库的操作。但是自己对数据库的知识没有形成一个很连贯的知识网络,接下来的时间自己会根据阅读的图书做一些笔记总结。Mysql主要分为两层,server层和存储层。如下图:连接器:负责用户的链接管理,密码验证,鉴权登陆等。分析器:对SQL语句进行分析。其实SQL就是一个有规则的(包含关键字和空格)字符串。分析器会对字符串中的关键字进行解析。...

2019-02-11 22:09:50 189

原创 《分布式服务架构》读后感

最近乘着项目的空档期,大略的读了一下《分布式服务架构》一书。这本书首先介绍了分布式微服务与SOA服务的对比。从而衍生出对应的相关微服务相关的知识点。 它主要讲的不是技术,而是一种习惯。代码,架构,风格以及后期运维的习惯。其实现在自己写的项目虽然用到了微服务的很多特点,但是自我感觉和书中的微服务理念有些矛盾。比如现在项目将所有向外部的RPC接口都集中于另一个项目之中,造成后期更新的时候需要两个项...

2018-12-03 16:26:20 480

原创 MyBatis 一对多映射

昨天自己完成了一个Mybatis 的数据库一堆多映射,特此记录,以免忘记。 首先数据库如下:Table CommandTable Command_Content为了达到范式要求,我将数据库分为了两个,一个是Command:里面记录了Command的ID和NAME等信息,其中ID为主键;另一个是Command_Content,里面记录了COMMAND_CONTENT的ID...

2018-09-11 19:34:16 288 1

原创 设计模式在JDK中的运用

今天复习了一下设计模式,也从源码中去寻找了一下设计模式在JDK中的运用。适配器模式:核心思想就是将一个接口适配(伪装成)到另一个接口。在Java I/O中运用到了很多适配器模式,例如将字符串数据转变成字节数据保存到文件中或将字节数据转变成流数据等,下面用InputStreamReader 举例。public class InputStreamReader extends Reader...

2018-08-28 13:21:30 692

原创 反射机制在 JVM中

前面博客中说到反射机制,它是Java的重要特性,它允许Java程序在运行的时候观察程序本身,甚至是修改程序。以前说到了Java通过Class枚举获得类中的所有方法,属性值,其实还可以用Method.SetAcessible方法绕过Java语音的访问权限,在私有方法所在类之外的地方调用该方法。反射最常用的应用是Spring IOC的DI,其实在我们常用的IDE软件中,在我们输入在类名后输入.号后...

2018-08-13 20:41:15 917

原创 JVM 中的异常处理

 通常来说在JVM中构建一个异常实例是一个十分昂贵的动作。 因为在构建异常的时候,JVM就需要生成一个异常栈轨迹(stack trace)。这个操作会逐一访问当前线程的Java 栈帧,并且记录下调试的各种信息,比如:所在的方法名,方法所在的类,文件名,以及具体在什么代码行。(抛出异常的时候可见) JVM具体是怎么抛出异常的首先JVM在编译的时候,每个方法都会附带一个异常表(异常表会声明...

2018-08-07 22:01:02 2263

原创 学习笔记之JVM 运行效率

标准JDK中的HotSpot虚拟机顾名思义为热点虚拟机,它能根据运行时的热点混合的使用内置即时编译器:C1、C2 和 Graal (JDK10 中最新的JIT)。 比如在二八原则的程序中,百分之二十的代码占用了CPU百分之八十的计算资源。这时候HotSpot会根据情况使用不同的即时内置编译器。例如C1(client编译器)即时编译器,常用于对时间敏感的客户端编译工作,采用较简单的优化操作换取更...

2018-08-01 00:26:46 288

原创 学习笔记:垃圾回收

常见的垃圾回收器:1.serial GC: 比较古老的垃圾回收器,是单线程工作的,可能发生stop-the-world,不过因为它是单线程工作的,所以比较精简,不需要过多的去维护数据结构,因此它是client端的首选。从年代来看,在serial Old(老年代)采用的是标记-整理 垃圾回收算法(防止内存空间碎片化),而新生代中主要使用的是复制算法。2.PerNew GC:是serial...

2018-07-23 15:22:31 220

原创 学习笔记之类加载以及其双亲委派协议

学习杨晓峰Java进阶教程后的笔记。 类加载过程:1.加载: 它将字节码从各种形态的数据源中读取出来,然后映射为JVM可以读取的数据结构(class 对象)。这些数据源可以包括但不限于Jar 文件,class文件。如果输入的数据不是classFile结构,会抛出classFormatError。2.验证:这个阶段主要是验证之前映射的字节信息是否符合JVM的规范;这一阶段是重要的安全...

2018-07-22 16:48:02 147

原创 Java 锁机制

当没有竞争的时候,系统会默认使用偏斜锁。JVM 利用CAS(compare and swap)在 对象头的第一部分(mark word)设置 偏向线程ID,表示对象偏向于这个线程。 因为大部分并发场景下面 对象 生命周期 中最多被一个线程锁定, 使用偏斜锁的话可以降低 低竞争状态下的 额外开销。这个时候如果有另外的线程试图锁定已经被倾斜过的对象,JVM会撤销(revoke)偏斜锁, 并切换到轻...

2018-07-21 17:37:50 2488

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

接口:接口可以理解为对行为的抽象,利用接口可以把API和接口分离开来。在接口里面只能有常量(public final static)。方法的话只能允许静态方法和抽象方法。接口 不能被实例化。甚至有的接口里面都没有声明抽象方法,只有常量:cloneable。抽象类:主要用于方法重用,用abstract 关键字修饰class。 也是不能实例化,抽象类可以实现接口。 最近的接口:在Java ...

2018-07-21 00:08:23 204

原创 文件拷贝效率与操作系统

内核态空间:操作系统底层分为内核态空间和用户态空间。其中系统内核和硬件驱动等都属于内核态空间,它拥有较高的特权。用户态空间:则是普通应用和服务所在的空间数据拷贝的方法:数据拷贝主要有以下3种方法:a .使用inputstream 和outputstream。然后使用inputstream的read()方法读取数据,outputstream的write()方法写数据。...

2018-07-20 17:34:22 260

原创 IO和NIO的区别

在这里不再过多描述IO的具体API用法。 总的来说reader,writer是处理字符的,而inputsream 和 outputstream是处理字节的,eg:图片什么的(其实现在大多Web应用上传图片时候也不会使用字节流而是上传一个图片存储的地址)。上图是IO的大体结构。其中buffer 相当于一个缓冲区,通过这个缓冲区,字节传输的可以改为块传输,提高了效率。 IO(同步阻塞)...

2018-07-20 16:54:37 4956

原创 ConCurrentHashMap

ConCurrentHashMap的早期实现如上图,是将其分为很多segment,其次每个segment的数据结构类似于HashMap;每个Segment里面都拥有一个HashEntry<k,v>对象。 HashEntry<k,v> 内部使用了 volatile 的value字段保证了数据的可见性以达到同步的效果。在同步环境下,整体采用了分段锁定的效果,当其中一个seg...

2018-07-20 12:46:55 776

原创 自动装箱和自动拆箱

自动装箱:Integer.valueOf()自动拆箱:integer.IntValue()两个过程都发生在编译阶段,javac为我们完成这些工作。PS:在Int的值在-128到127之间的时候,会产生缓存机制,值会被放进常量池。也就是方法区(Boolean,Short,Byte,Character也有这种机制。其中Byte因为数值有限,都会被放进方法区)。引用类型相比于原始类型的优势在...

2018-07-19 01:33:44 157

原创 反射机制

首先什么是JAVA的反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。以下是3种常用的获得Class 类的3种方法:public class Fanshe { public static void main(String[]...

2018-07-18 23:51:23 104

原创 内存泄漏问题

strong reference:一个强引用指向一个对象,证明这个对象是可达的,不会被垃圾回收。soft reference : 比强引用弱的引用,可以得到一些垃圾回收豁免权,只有当内存空间严重不足的时候,会考虑回收soft reference。weak reference:不能使对象豁免垃圾收集。仅仅是提供一种访问在弱应用状态下对象的途径。一个线程新鲜创建的对象是强引用状态,但是...

2018-07-18 20:02:58 158

原创 try-with-resourse

今天看书的时候,发现一个比 try finally更好的关闭资源的方法:try-with-resourse. 下面是一个关闭JDBC的例子:public static void viewTable(Connection con) throws SQLException { String query = "select COF_NAME, SUP_ID, PRICE, SALES, ...

2018-07-18 18:28:44 225

原创 Spring MVC 问答

1.Spring 运行原理:a.首先所有请求会被提交给DispatcherServlet。b.DispatcherServlet查询一个或者多个HanderMapping,找到处理请求的controller。c.然后DispatcherServlet把请求提交给controller。d.controller通过业务逻辑处理后返回一个ModelAndView。e.Dispache...

2018-07-16 18:58:08 138

原创 Java面试常见问答

1.hashmap的内部实现 答:hashmap 是对数据结构hash table 的内部实现,哈希表也叫散列表,有着不错的查询和添加速度。它通过关键吗key来访问其对应的值value。就是关键码key(key.hashcode())的映射函数来找到表中相对应的位置的value。它结合了链表和数组的优势,其中链表是用来解决hash冲突的。其链接节点数据结构是entry<k,v>,每个e...

2018-07-16 14:21:39 1337

原创 HashMap and HashTable

 1.  关于HashMap的一些说法: a)  HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HashMap的底层结构是一个数组,数组中的每一项是一条链表。 b)  HashMap的实例有俩个参数影响其性能: “初始容量” 和 装填因子。 c)  HashMap实现不同步,线程不安全。  HashTable线程安全 d)  HashMap中的key-value都是存储在...

2018-05-28 07:48:05 101

转载 java基础回顾之JVM

java 栈:包含三类信息:局部变量,执行环境,操作数栈。局部变量用来存储一个类的方法中所用到的局部变量。执行环境用于保存解析器对于java字节码进行解释过程中需要的信息,包括:上次调用的方法、局部变量指针和 操作数栈的栈顶和栈底指针。操作数栈用于存储运算所需要的操作数和结果。StackFrame在方法被调用时创建,在某个线程中,某个时间点上,只有一个 框架是活跃的,该框架被称为Current F...

2018-05-19 03:14:08 97

原创 java基础回顾之异常处理

1.java中的两种异常类型是什么?它们有什么区别?一个是unchecked的异常,它是error 和 runtimexception 的子类。error 是java自己的错误或者内存耗尽等严重错误是不可抗拒的。runtimexception 是程序有逻辑错误,如空指针,类转换,数据类型转换等,是需要程序员开发过程中尽量避免的。另一个是checked的异常,它是exception的子类,如果不捕捉...

2018-05-13 05:56:31 202

原创 java基础回顾之GC篇

1.java 中的垃圾回收有什么目的?垃圾回收的目的是识别并且丢弃那些不再使用的对象。整个回收过程的进行取决与JVM自己。2.finalize() 方法什么时候调用?在释放内存占用的对象时,会调用finalize方法。3.java 堆的结构JVM的堆是运行时数据区,所有类的实例和数组在这里被分配内存。在JVM启动的时候堆被创建。4.在java中,对象什么时候可以被垃圾回收?在对象对当前使用这个对象...

2018-05-13 05:41:13 126

原创 java 集合类基础回顾

1.java集合类里面最基本的接口有:a.collection: 代表一组对象,每一个对象都有它的子元素。b.set:不包含重复元素的collection。c.list:有顺序的collection,并且包含重复元素。d.map:可以把建(key)映射到值(value)的对象,建不能重复。2.迭代器(iterator)iterator接口提供了很多对集合元素进行迭代的方法。每一个集合元素类都包含了...

2018-05-11 08:40:32 232

原创 java多线程 基础回顾

1.进程和线程的区别?进程是正在执行的应用程序。而线程则是进程中的执行流程,一个进程中可以同时包含多个线程,每个线程也可以得到一小段程序的执行时间。2.实现线程的主要两种方式:a.继承java.lang.thread类b.实现java.lang.Runnable接口通常情况下,runnable更加实用,因为java无法多继承。3.继承thread类:public class ThreadTest ...

2018-05-09 05:24:21 144

原创 java 面试基础回顾

java 面试基础回顾 (自己对java表层知识点基础回顾)1.JDK 和 JRE 的 区别?总的来说,JDK 是完整的java软件开发包,里面包含了JRE,编译器和其他的工具(javadoc),以至于开发者可以进行开发,编译,执行java程序。而JRE是将要执行java程序的java虚拟机。2.为什么java是一个跨平台的语言?因为java虚拟机的存在,它了解底层硬件平台的指令长度(例如wind...

2018-05-08 09:56:29 228

空空如也

空空如也

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

TA关注的人

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