自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 记一次惨痛的面试教训

参加2019年的秋招,可谓是各种被虐,也知道了自己的很多问题,昨天的阿里面试让我不停反思自己,还是要多关注细节和源码,对待做过的项目一定要了如指掌,还有不能过度依赖IDE:一些常见的java基础知识:1索引怎么保证有效性2如何保障秒杀过程中库存不会为负数,不会发生超卖现象3项目如何保障Mysql和Redis中数据的一致性4AOP的原理5Redis常见的数据结构及底层原理...

2019-08-16 12:29:46 258

原创 LRU算法的实现

这是2019年阿里巴巴的一道面试题:题目:LRU 缓存机制 设计和实现一个 LRU(最近最少使用)缓存数据结构,使它应该支持一下操作:get 和 put。 get(key) - 如果 key 存在于缓存中,则获取 key 的 value(总是正数),否则返回 -1。 put(key,value) - 如果 key 不存在,请设置或插入 value。当缓存达到其容量时,它应该在插入新项目之前使最...

2019-08-12 15:49:11 551

原创 Java并发包中的线程池原理

1为什么使用线程池:(1)当大量执行异步任务时线程池可以提供更好的性能,在不使用线程池时,每当需要执行任务时需要new一个线程来运行,而线程的创建和销毁都需要一定开销(2)线程池提供了一种资源控制和管理的手段,比如控制线程个数,动态增加线程等。2类图介绍:Executors是一个工具类,里面提供了很多静态方法,我们可以根据不同的需求选取不同的线程池实例,具体如图所示:下面我...

2019-07-21 20:55:28 172

原创 mybatis原理解析2

前文大致描述了Mybatis的构建阶段,下面我们来说说Mybatis的执行阶段:1.Mybatis执行期间的关键类 (大致了解熟悉即可) :SqlSession:Mybatis的核心执行入口,默认实现为DefaultSqlSession,提供了大量SQL调用方法Configuration:保存构建阶段的结果,也负责执行阶段初始化所需要的变量MappedStatement:配置好的映...

2019-07-15 20:08:11 170

原创 mybatis原理解析1

大家应该都使用过JDBC,传统的JDBC工作流程比较繁琐,需要先连接,然后处理JDBC底层事务,还需要操作Connection对象、Statement对象去拿取数据,并且还要捕捉各种可能出现的异常,十分复杂,因此我们一般使用ORM框架对数据进行处理,这就引出了我们今天的主题——Mybatis。Mybatis相信熟悉Java的朋友们都不会陌生,是一个半自动映射ORM框架,使用的非常广泛,话不多说...

2019-07-09 20:42:48 111

原创 CycleBarrier回环屏障源码解析

CyclicBarrier是回环屏障的意思,它可以让一组线程全部达到一个状态后再全部同时执行,之所以叫回环是因为当所有线程执行完毕,可以重置CyclicBarrier状态,进行复用,这也是它与CountDownLatch的主要区别,下面介绍一个案例:public class CyclicBarrierTest { public static void main(String...

2019-06-22 20:37:41 599

原创 CountDownLatch的实现原理

在日常开发中经常会遇到需要在主线任务中开启多个线程,并等到所有子线程完成工作之后再进行汇总的情形,这种情况下可以考虑使用CountDownLatch这个工具类实现功能,下面是使用CountDownLatch的一个示例:package xiancheng.Lock;import java.util.concurrent.CountDownLatch;public class Count...

2019-06-16 16:40:57 3256

原创 JUC包中锁的实现原理——AQS

锁是java同步的重要机制,在之前的博客中写了一些关于锁的内容,但比较浅显,这里从源码的角度来分析一下java中方的锁。java中的锁主要有两种:Synchronized和ReenTrarantLock,前者是从jvm的层面实现的,后者是从代码的层面实现的,因此这篇文章的主要对象是针对后者。谈到ReenTrarantLock的实现,就不得不提到AQS。AbstractQueuedSynchro...

2019-06-15 21:03:07 795

原创 redis底层数据结构

Redis是互联网技术领域使用广泛的存储中间件,其全称是“Remote Dictionary service”。Redis以其高性能、丰富的文档、简洁易懂的源码和丰富的客户端支持受到好评,许多大型公司都在使用,比如新浪微博、twitter、阿里巴巴、华为、腾讯等。1redis的常见数据类型string(字符串):内部是一个带长度信息的字符数组,也叫“SDS”。Redis的字符串是动态字符串...

2019-06-09 16:15:26 137 1

原创 java类加载机制

1java类加载的过程--.class文件保存着java代码经转换后的虚拟机指令,当需要使用某个类时,虚拟机会加载该类的.class文件;java类加载需要经过以下步骤:1加载:通过一个类的完全限定查找此类字节码文件,并利用字节码文件创建一个Class对象2链接:包括验证、准备和解析等过程3初始化:类加载最后阶段,若该类具有超类,则对其进行初始化,执行静态初始化器和静态初始化成员变量(如...

2019-02-21 21:18:57 96

原创 最大堆的实现和运用

最近看到了这样一个题目:输入N(很大)个整数,找出其中最小的K个数。初看这个问题,很多人下意识的的思路就是先排序,再找出最大的数,这种做法当然可行,空间复杂度为O(n),时间复杂度为O(NlogN),在海量数据的情况下会消耗较大内存;此处采用最大堆,则可以提高效率。最大堆是一种数据结构,本质上是一颗完全二叉树,树的根节点是最大值,与此对应有最小堆:我们可以创建一个容量为K的最大堆,先插入K...

2019-02-16 09:54:48 848 1

原创 常见的排序算法

  排序就是将一组对象按照某种逻辑顺序重新排列的过程,在数据处理和科学计算中有着重要的作用,下文将会对一些常见的算法进行分析并给出实现(Java):常见排序算法特点 算法 是否稳定 原地排序 时间复杂度 空间复杂度   冒泡排序 稳定 是 N^2 1   插入排序 是 是 介于N和N^2之间 1 ...

2019-02-16 09:16:43 140

原创 Mysql索引基础详解

最近,跟着教程学习了Mysql索引相关的知识,在这里总结一下:1索引是什么?本质上来讲,索引是一种数据结构,目的是为了帮助用户更迅速的取得数据;一般默认的索引都是B+树,当然也有其它形式的索引,比如哈希索引等。2索引的优势?使用索引可以更迅速的获取数据,举个例子,在一个学生表里,对学生ID建立了索引,在查询ID为111的学生时,大致的结构图如图所示,当然实际的情况往往比这个复杂得多...

2019-01-22 21:10:40 134

原创 java线程

最近一直在复习java线程相关的知识,以前零零散散的看过,这次自己试着总结一下:1线程和进程的基本概念以及特点?--进程是现代分时操作系统的工作单元,通常一个程序对应一个进程;每个进程都有自己的独立资源和自己的私有地址空间,在没有经过进程允许的情况下,一个进程不可以访问其他进程的地址空间。--线程被称作轻量级进程,是进程执行的基本单元;一个进程可以拥有多个线程,一个线程必须有一个父进程;线...

2018-12-17 21:51:16 131

空空如也

空空如也

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

TA关注的人

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