2 呛水鱼

尚未进行身份认证

选择理想,还是面对现实。

等级
TA的排名 35w+

谈谈ThreadLocal所引发的OOM

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

2018-09-26 21:05:57

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

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

2018-09-02 19:11:41

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

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

2018-08-26 14:11:05

MySQL的explain语句分析

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

2018-08-19 13:20:23

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

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

2018-08-19 11:46:12

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

一、SpringAOP概念AOP(Aspect-OrientedProgramming)面向切面或者面向方面编程的简称,将一些分散在对象或者类中的与业务逻辑无关的代码分离出来进行独立的管理编码,例如日志,事务处理,异常等。几个相关的重要概念:1、方面/切面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用...

2018-08-13 20:29:40

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

一、volatile概述volatile是java并发编程中常用的一个关键字,在某些特定的情况下,开发人员通常用它去实现线程间的通信,而不是使用synchronized和Lock。因为在JVM的概念中,volatile是一种轻量级锁,使用它的消耗会远小于上述两种锁机制。当使用synchronized和Lock时会引起大量的线程上下文的切换。线程上下文切换:当处理机的一个时间片执行完成之时,而当...

2018-08-05 12:27:31

谈谈对AQS的一些理解

AQS的概念AQS全称AbstractQueuedSynchronizer,是java并发包中的核心类,诸如ReentrantLock,CountDownLatch等工具内部都使用了AQS去维护锁的获取与释放:AQS内部结构首先我们可以找到这样一张图:它描述了其内部是如何维护线程的状态,一起锁的获取。类似于一个阻塞队列,当前持有锁的线程处于head(记住不是在阻塞...

2018-07-18 20:40:16

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

一、Mybatis的介绍Mybatis作为Java常用的访问数据库层的框架,其工作主要交给创建的Sqlsession对象完成,那么Sqlsession对象是如何创建的?它又是去如何去对数据库进行操作?如图所示,是我们常用的使用mybatis进行数据库访问的方式,现在我们按照上面得步骤来一次分析整个数据库访问的流程及其原理。二、Mybatis的原理及其工作流...

2018-05-12 15:55:38

SpringIoC机制的实现原理

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

2018-03-10 15:36:23

Linux常用命令总结(二)

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

2018-02-08 15:18:31

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

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

2018-02-07 12:30:35

Linux常用命令总结(一)

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

2018-02-05 17:55:48

多线程(二)重入锁

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

2018-01-03 16:51:55

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

同步(Synchronous)和异步(Asynchronous)同步和异步主要用于指对于一次方法的调用过程。同步方法调用开始后,方法者必须等到这一次调用返回后,才能继续后续的操作。异步方法调用开始后,立即返回,方法者可继续开始后续的行为。并发(Concurrency)和并行(Parallelism)并发和并行主要用于指多个任务的执行。并发是指多个任务交替执行,实际上可能仍然是串行。而并

2018-01-03 16:21:19

IO流学习总结

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

2017-10-30 16:16:52
勋章 我的勋章
    暂无奖章