谈谈ThreadLocal所引发的OOM

一、ThreadLocal简介 ThreadLocal常用于多线程环境下保证线程安全,它和synchronized以及lock略有不同,后两者是通过对访问权限的控制保证线程安全,而前者是通过增多资源的副本,保证当前线程操作自己所持有的副本,而不需要去与其它线程竞争。 二、ThreadLocal内部...

2018-09-26 21:05:57

阅读数 288

评论数 0

redis的五种基本数据类型及其内部实现

一、redis的五种数据类型 redis作为目前最流行的Key-Value类型的内存数据库,对于数据库的操作都在内存中进行,并可定期的将数据异步的持久化到磁盘之上。由于是纯内存的操作,因此它的性能比普通的关系型数据库高出很多,同时由于是单线程串行的执行指令,因此也避免了加锁和释放锁的开销。相比于...

2018-09-02 19:11:41

阅读数 2387

评论数 0

谈谈MySQL事务的实现原理之redo log

一、事务 事务是一组SQL语句组成的逻辑处理单元,而MySQL的事务想必大家都已经非常的清楚了,既然这里提到了它,顺便讲讲什么是ACID: 原子性(Atomicity):事务是一个原子操作单元。在当时原子是不可分割的最小元素,其对数据的修改,要么全部成功,要么全部都不成功。 一致性(Cons...

2018-08-26 14:11:05

阅读数 255

评论数 0

MySQL的explain语句分析

一、Explain概述 Mysql所提供的explain关键词是用于调优排患的一个神器,通过它可以分析查询语句的执行情况,DBA可以通过分析语句的执行结果对查询语句甚至表结构进行优化,例如添加索引,修改索引,使用覆盖索引等等。 二、Explain结构 创建一张学生表和一张成绩表: CR...

2018-08-19 13:20:23

阅读数 160

评论数 0

Spring MVC的工作原理-从M(Model)-C(Controller)-V(View)

一、Spring MVC概念 MVC即是模型(Model)、视图(View)、控制器(Controller)的简称。其中M负责对应用数据进行封装,并向外提供应用功能的接口;V负责通过向控制器发送请求,得到响应结果,并向用户展示处理好的的应用数据;C这是用于定义应用的功能,接收用户的动作,并选择相...

2018-08-19 11:46:12

阅读数 1044

评论数 0

深入理解SpringAOP的实现原理之代理对象的生成

一、Spring AOP概念 AOP(Aspect-Oriented Programming)面向切面或者面向方面编程的简称,将一些分散在对象或者类中的与业务逻辑无关的代码分离出来进行独立的管理编码,例如日志,事务处理,异常等。几个相关的重要概念: 1、方面/切面(Aspect):一个关注点...

2018-08-13 20:29:40

阅读数 1154

评论数 2

深入理解并发编程中volatile关键字的作用

一、volatile概述 volatile是java并发编程中常用的一个关键字,在某些特定的情况下,开发人员通常用它去实现线程间的通信,而不是使用synchronized和Lock。因为在JVM的概念中,volatile是一种轻量级锁,使用它的消耗会远小于上述两种锁机制。当使用synchroni...

2018-08-05 12:27:31

阅读数 193

评论数 0

谈谈对AQS的一些理解

AQS的概念 AQS全称AbstractQueuedSynchronizer,是java并发包中的核心类,诸如ReentrantLock,CountDownLatch等工具内部都使用了AQS去维护锁的获取与释放: AQS内部结构 首先我们可以找到这样一张图: 它描述了其内...

2018-07-18 20:40:16

阅读数 1564

评论数 0

谈谈Mybatis的原理及其工作流程

一、Mybatis的介绍 Mybatis作为Java常用的访问数据库层的框架,其工作主要交给创建的Sqlsession对象完成,那么Sqlsession对象是如何创建的?它又是去如何去对数据库进行操作? 如图所示,是我们常用的使用mybatis进行数据库访问的方式,现在我们按照上...

2018-05-12 15:55:38

阅读数 2045

评论数 0

SpringIoC机制的实现原理

一、为什么要使用Spring?Spring的设计目标 在未引入框架之前的Java程序中,想要完成某一特定的业务逻辑,必然需要多个对象之间的协同合作,因而常常需要在对象内部实例化与之相互依赖的对象。这样必然会造成代码的高耦合性,也不便于以后的维护和管理。那么我们会想到,能不能使用一个类似于容器的工...

2018-03-10 15:36:23

阅读数 469

评论数 0

Linux常用命令总结(二)

Linux常用命令(二) 本篇是继上篇博文的内容的完善。 Linux常用命令总结(一) 一、history命令 history [选项] [历史命令保存文件] 选项: -c:清空历史命令 -w:把缓存中的历史命令写入历史命令...

2018-02-08 15:18:31

阅读数 98

评论数 0

使用jsoup和httpclient编写的简单爬虫工具

一、灵感来源 前两天有位朋友向我提到了这样一个需求,希望从某张网页上抓取数据然后自动填入到本地的Excel表格中,当你需要进行大量的数据统计时,会显得很方便,让简单的工作变得自动化。这不正是shell编程得目的吗!(本文与shell编程无关,只是有感即发) 二、需求分析 首先对于需求,就...

2018-02-07 12:30:35

阅读数 268

评论数 0

Linux常用命令总结(一)

Linux常用命令(一) 最近看了imooc上tony老师关于shell编程得一些视频,加上从相关书籍上收集整理了一部分linux的常用命令。 一、目录文件处理命令 1.创建目录: mkdir [-p] 目录名 递归创建目录(-p:可在目录里面创建文件) 2.切换目录: cd 目录名 ...

2018-02-05 17:55:48

阅读数 97

评论数 0

多线程(二)重入锁

学习过线程相关知识的朋友都应该已经知道,同步控制对于并发控制的重要性,synchronized关键字是最简单的一种控制方法。它决定了一个线程是否可以访问临界区。而Object类中的wait()和notify()/notifyAll()方法也是一些线程之间通信的工具。但是,当我们想更加灵活的区规定何...

2018-01-03 16:51:55

阅读数 88

评论数 0

多线程(一) 了解多线程,以及涉及到的一些基本概念

同步(Synchronous)和异步(Asynchronous) 同步和异步主要用于指对于一次方法的调用过程。同步方法调用开始后,方法者必须等到这一次调用返回后,才能继续后续的操作。异步方法调用开始后,立即返回,方法者可继续开始后续的行为。 并发(Concurrency)和并行(Paralle...

2018-01-03 16:21:19

阅读数 222

评论数 0

IO流学习总结

1.流的概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。 2.IO流的分类 按操作数据单位不同分为:字节流(8 bit),字符流(1...

2017-10-30 16:16:52

阅读数 92

评论数 0

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