自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Redis知识点汇总

一.概述1.什么是RedisRedis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value

2020-08-07 15:35:31 41

原创 Springboot之YAML语法

概述YAML是 JSON 的超集,因此,它是用于指定分层配置数据的便捷格式。只要 class 路径上有SnakeYAML library,SpringApplication class 就会自动支持 YAML 作为 properties 的替代。编写规则属性和值是大小写敏感,同JSON通过缩进表示层次关系字符串默认不需要加单引号或者双引号YAML语法基本语法k:(空格)v:表示一对键值对(空格必须有);以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的s

2020-08-07 10:12:11 31

原创 Tomcat面试题

文章目录1.Tomcat是什么?2.Tomcat的缺省端口是多少,怎么修改3.Tomcat有哪几种Connector 运行模式(优化)?4.Tomcat有几种部署方式?5.Tomcat容器是如何创建servlet类实例?用到了什么原理?6.Tomcat工作模式7.Tomcat顶层架构8.Connector和Container的微妙关系9.Container架构分析10.Container如何处理请求的11.总结1.Tomcat是什么?Tomcat 服务器Apache软件基金会项目中的一个核心项目,是一

2020-08-06 23:25:36 23

原创 我的一天:时间都去哪了?

随着年龄的增大,越来越觉得时间流失的忒快了,都看不到时间走过的轨迹。闲暇之时,回想一下近期的生活和工作,有种虚度光阴、低效利用时间的罪恶感内心的独白我是谁?我是一个即将进入所谓程序员最干戈的年龄“35岁”的程序员,外加2个孩子的奶爸。一方面面临着工作上的各种压力,另一个方面面临着家庭生活水平提高、孩子教育启蒙以及后期孩子上学选址(购买学区房等)的各种压力为了能够给与家庭及子女更好的未来,只能提升自身的专业技能、提高应对突发事件的能力,增加自身不可替代的能力。为了能快速、高质量的提升自己的软、硬方面技能

2020-07-06 00:42:51 68

原创 MyBatis基础知识汇总

文章目录MyBatis简介简介MyBatis历史为什么要用MyBatis?MyBatis入门安装从XML中构建SqlSessionFactory不使用 XML 构建 SqlSessionFactory从 SqlSessionFactory 中获取 SqlSession探究已映射的 SQL 语句命名空间作用域(Scope)和生命周期映射器实例(Mapper Instances)Mybatis操作数据库MyBatis-全局配置文件Properties属性settings设置typeAliases别名处理器typ

2020-07-03 16:27:58 60

原创 Java并发编程题库

文章目录并发编程三要素?实现可见性的方法有哪些?创建线程的有哪些方式?创建线程的三种方式的对比?Runnable 和 Callable 的区别Java线程具有五中基本状态什么是线程池?有哪几种创建方式?线程池的优点?常用的并发工具类有哪些?CyclicBarrier 和 CountDownLatch 的区别synchronized 的作用?volatile关键字的作用什么是CASCAS的问题ThreadLocal是什么?有什么用?Java死锁以及如何避免?死锁的原因怎么唤醒一个阻塞的线程不可变对象对多线程有

2020-07-03 00:23:42 52

原创 Java8的集合:HashSet的实现原理

HashSet 概述HashSet 实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。HashSet 的实现对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成, HashSet 的源代码如下:pub

2020-07-02 10:31:06 87

原创 Java8的集合:HashMap的实现原理

概述哈希表是基于 Map 接口的实现的,它允许 null 值和null 键,它不是线程同步的,同时也不保证有序。Map的这种实现方式为 get(取)和 put(存)带来了比较好的性能。但是如果涉及到大量的遍历操作的话,就尽量不要把 capacity 设置得太高(或 load factor 设置得太低),否则会严重降低遍历的效率。影响 HashMap 性能的两个重要参数:initial capacity(初始化容量)和load factor(负载因子)。简单来说,容量就是哈希表桶的个数,负载因子就是键

2020-07-02 10:27:27 43

原创 悲观锁VS乐观锁

悲观锁VS乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Ja

2020-07-01 15:40:30 58

原创 每日一记:20200630

目的今天是2020年6月30日,2020年已过半,时光匆匆,上半年失去了很多,反思了很多。在以后的日子里,争取每天写一遍笔记,记录这一天工作、生活中的点点滴滴。一来培养自己的写作总结能力,二来记录与家人相处的点点滴滴,记录儿女成长过程的精彩瞬间。我是谁?我现在具有以下几个标签:80后奶爸(3岁半的建设银行,1岁零1个月的招商银行)7年软件研发2020年06月30日工作由于疫情及行业变化的影响,缺少了当前的工作热情,工作没有了激情,趋于平淡公司采用了非人性化的考核机制(按人头考核的策

2020-06-30 23:13:23 50

原创 MyBatis架构分层

MyBatis整体结构接口层与用户应用打交道最多,核心对象是sqlSession;是上层应用和myBatis打交道的桥梁接口层定义了很多对数据库操作的方法,接口层在收到调用请求的时候,会调用核心处理层的响应模块来完成具体的数据库操作核心处理层跟数据库操作相关的动作都是在此完成把接口中传入的参数解析并映射成jdbc类型解析xml文件的sql语句,包括插入参数和动态sql生成执行sql语句处理结果集,并映射成java对象基础支持层抽取一些通用的功能(实现复用),比如数据源

2020-06-29 15:01:34 68

原创 MyBatis常见面试题汇总

文章目录概述简介优点缺点适用场景MyBatis与Hibernate有什么不同?ORM是什么传统JDBC开发存在什么问题?JDBC编程有哪些不足之处,MyBatis 是如何解决的?MyBatis和Hibernate的适用场景?MyBatis的架构MyBatis编程步骤是什么样的?MyBatis的工作原理MyBatis的功能架构是怎样的MyBatis的框架架构设计是怎么样的为什么需要预编译MyBatis都有哪些Executor执行器?他们之间的区别是什么MyBatis中如何指定使用哪一种Executor执行器?

2020-06-29 09:40:50 93

原创 MySQL高级篇:控制流函数

控制流函数case()函数如果满足WHEN分支中的条件,则返回THEN分支中的相应结果,否则返回ELSE分支中的结果CASE表达式是一个流控制结构,允许在查询中构造条件,例如:SELECT或WHERE子句。 MySQL提供了两种形式的CASE表达式case形式一CASE valueWHEN compare_value_1 THEN result_1WHEN compare_value_2 THEN result_2…ELSE result END如果value等于compare_v

2020-06-28 00:00:41 84

原创 Java基础篇:反射

文章目录Java反射机制概述Java Reflection动态语言 VS 静态语言Java反射机制研究及应用反射相关的主要API理解Class类并获取Class实例Class类Class类的常用方法反射的应用示例获取Class类的实例(四种方法)哪些类型可以有Class对象?类的加载与ClassLoader的理解类的加载过程什么时候会发生类初始化?ClassLoader创建运行时类的对象获取运行时类的完整结构小结调用运行时类的指定结构调用指定的方法调用指定的属性关于setAccessible方法的使用J

2020-06-27 23:07:48 43

原创 JVM:StringTable

文章目录String基本特性测试StringTableSize参数大小String的内存分配StringTable为什么要调整?String的基本操作字符串拼接操作intern()的使用new String("ab")会创建几个对象?new String("a")+new String("b")会创建几个对象?itern()在JDK6中的使用场景itern()在JDK7/8中的使用场景拓展题使用intern()测试执行效率:空间使用上小结StringTable的垃圾回收String的垃圾回收示例G1中的St

2020-06-23 06:09:50 54

转载 Java多线程:线程8锁案例分析

线程8锁案例分析通过分析代码,推测打印结果,并运行代码进行验证1、两个线程调用同一个对象的两个同步方法被synchronized修饰的方法,锁的对象是方法的调用者。因为两个方法的调用者是同一个,所以两个方法用的是同一个锁,先调用方法的先执行。public class Demo { public static void main(String[] args) { Number number = new Number(); new Thread(() -&g

2020-06-22 16:28:45 44

原创 Java核心技术汇总

文章目录1、Java并发编程篇必考点汇总面试题汇总线程的生命周期与状态流转Java线程的6种状态线程的状态流转sleep、wait、notify、yield、join的区别线程同步与锁多线程同步与锁由来线程同步解决方案Synchronized简介和用法Synchronized源码实现Synchronized的锁存储位置Synchronized的锁升级ReentrantLock可重入锁ReentrantLock的实现原理ReentrantLock的公平锁源码实现ReentrantLock的非公平锁源码实现Re

2020-06-21 07:37:52 102

原创 JVM知识汇总

JVM总结汇总,整理了作为一个Java工程师在面试中需要用到或者可能用到的基础性知识。一来为了加深学习印象,二来为以后面试做准备。后期会持续整理更深、更细、面试频率更高的知识点…序号整理内容内容链接1JVM与java体系结构https://blog.csdn.net/u012068483/article/details/1056596152类加载子系统https://blog.csdn.net/u012068483/article/details/106500841

2020-06-19 23:32:04 67

原创 JVM:垃圾回收相关概念

文章目录System.gc()的理解内存溢出与内存泄漏内存溢出(OOM)内存泄漏(Memory Leak)Stop The World垃圾回收的并行与并发并发(Concurrent)并行(Parallel)并发VS并行(两者对比)垃圾回收的并发与并行安全点与安全区域安全点(safepoint)安全区域(safe Region)强、软、弱、虚引用引用强引用(Strong Reference)——不回收软引用(Soft Reference)——内存不足即回收弱引用(Weak Reference)——发现即回收虚

2020-06-19 23:05:19 55

原创 JVM:垃圾回收器

文章目录GC分类与性能指标垃圾回收器分类评估GC的性能指标不同的垃圾回收器概述垃圾收集器发展史7款经典的垃圾收集器经典的垃圾收集器7款经典收集器与垃圾分代之间的关系垃圾收集器的组合关系不同的垃圾回收器概述如何查看默认的垃圾收集器Serial回收器:串行回收ParNew回收器:并行回收Parallel回收器:吞吐量优先CMS回收器:低延迟G1回收器:区域化分代式垃圾回收器总结GC日志分析GC分类与性能指标垃圾回收器分类垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现由于

2020-06-19 23:04:21 71

原创 JVM:垃圾回收相关算法

文章目录标记阶段:引用计数算法垃圾标记阶段:对象存活判断引用计数算法小结标记阶段:可达性分析算法可达性分析(或根搜索算法、追踪性垃圾收集)GC Roots对象的finalization机制MAT与JProfiler的GC Roots溯源MAT简介使用MAT查看GC Roots使用JProfiler进行GC Roots溯源使用JProfiler分析OOM清除阶段:标记-清除算法概述背景执行过程示意图缺点特殊说明:何为清除?清除阶段:复制算法核心思想示意图优点缺点特殊说明应用场景清除阶段:标记-压缩算法背景执行

2020-06-19 23:01:46 60

原创 JVM:执行引擎

文章目录执行引擎概述执行引擎的工作过程Java代码编译和执行过程Java代码编译Java代码执行什么是解释器,什么是JIT编译器?为什么说Java是半编译半解释型语言?机器码、指令、汇编语言机器码指令、指令集汇编语言高级语言C、C++源程序执行过程字节码解释器解释器工作机制(或工作任务)解释器分类现状JIT编译器Java代码的执行分类解释器与编译器的抉择?HotSpot JVM的执行方式经典案例JIT编译器概念解释热点代码及探测方式方法调用计数器回边计数器HotSpot VM中JIT分类总结扩展内容关于AO

2020-06-19 06:10:35 86

原创 JVM:垃圾回收概述

文章目录一、垃圾回收概述什么是垃圾(Garbage)?为什么需要GC?早期垃圾回收Java垃圾回收机制二、垃圾回收相关算法标记阶段:引用计数算法垃圾标记阶段:对象存活判断引用计数算法小结标记阶段:可达性分析算法可达性分析(或根搜索算法、追踪性垃圾收集)GC Roots对象的finalization机制MAT与JProfiler的GC Roots溯源MAT简介使用MAT查看GC Roots使用JProfiler进行GC Roots溯源使用JProfiler分析OOM清除阶段:标记-清除算法概述背景执行过程示意

2020-06-18 23:30:22 63

原创 JVM:对象的实例化、内存布局与访问定位

对象的实例化创建对象的方式new关键字最常见的方式变形1:Xxx的静态方法(单例模式)变形2:XxxBuilder/XxxFactory的静态方法Class的newInstance()反射的方式,只能调用空参的构造器,权限必须是publicConstructor的newInstance(Xxx)反射的方式,可以调用空参、带参的构造器,权限没有要求使用clone()不调用任何构造器,当前类需要实现Cloneable接口,实现clone()使用反序列化从文件

2020-06-18 06:43:24 52

原创 JVM:直接内存

直接内存概述非直接缓冲区读写文件,需要与磁盘交互,需要由用户态切换到内核态。在内核态时,需要内存如上图所示。使用IO,这里需要两份内存存储重复数据,效率低直接缓存区使用NIO时,如上图,操作系统划出的直接缓冲区可以被Java代码直接访问,只有一份,NIO适合大文件读写操作小结简单的来看,Java Process Memory= Java heap + native memory...

2020-06-18 06:38:33 35

原创 JVM:方法区

文章目录栈、堆、方法区的交互关系从线程共享与否的角度来看方法区的理解方法区在哪里?方法区的基本理解HotSpot中方法区的演进方法区概述设置方法区大小与OOM如何解决这些OOM?方法区的内部结构示意图方法区(Method Area)存储什么?类型信息域(Field)信息方法(Method)信息non-final的类变量全局常量:static final运行时常量池VS常量池为什么需要常量池?常量池中有什么?小结运行时常量池方法区使用举例方法区的演进细节永久代为什么要被元空间替换?StringTable为什么

2020-06-18 06:09:55 38

原创 JVM:堆

文章目录堆的核心概述内存细分堆空间内部结构(JDK7)堆空间内部结构(JDK8)设置堆内存大小与OOM堆空间大小的设置OutOfMemory举例年轻代与老年代图解对象分配过程概述总结Minor GC、Major GC与Full GC最简单的分代GC策略的触发条件堆空间分代思想为什么需要把Java堆分代?不分代就不能正常工作了吗?内存分配策略内存分配策略(或对象提升Promotion规则)大对象直接进入老年代验证示例为对象分配内存:TLAB为什么有TLAB(Thread Local Allocation Bu

2020-06-15 17:10:02 42

原创 虚拟机栈

一、虚拟机栈概述虚拟机栈出现的背景由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的优点是跨平台,指令集小,编译器容易实现缺点是性能下降,实现同样的功能需要更多的指令内存中的栈与堆栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿Java虚拟机栈是什么?Java虚拟机栈,早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,

2020-06-14 23:24:36 35

原创 Java8的集合:LinkedList的实现原理

一、概述LinkedList 是通过一个双向链表来实现的,它允许插入所有元素,包括 null,同时,它是线程不同步的。下面是双向链表的结构:双向链表每个结点除了数据域之外,还有一个前指针和后指针,分别指向前驱结点和后继结点(如果有前驱/后继的话)。另外,双向链表还有一个 first 指针,指向头节点和last指针,指向尾节点。二、属性LinkedList中的属性如下: /** *链表的节点个数 */ transient int size = 0; /** *指向头节点

2020-06-12 09:50:00 55

原创 Java8的集合:ArrayList的实现原理

一、概述ArrayList 是一个动态数组,实现了 List 接口以及 list相关的所有方法,它允许所有元素的插入,包括 null。另外,ArrayList 和 Vector 除了线程不同步之外,大致相等。二、属性ArrayList 的属性非常少,就只有这些。其中最重要的莫过于 elementData ,ArrayList所有的方法都是建立在 elementData 之上/** * 默认容量大小 */ private static final int DEFAULT_C

2020-06-12 09:22:00 98

原创 本地方法接口和本地方法栈

本地方法接口什么是本地方法?**一个Native Method就是一个Java调用非Java代码的接口。**一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其他的编程语言都有这一机制,比如在C++中,可以用extern "C"告知C++编译器去调用一个C的函数定义一个Native Method时,并不提供实现体,因为其实现是由非Java语言在外面实现的本地接口的作用是融合不同的编程语言为Java所用,他的初衷是融合C/

2020-06-09 17:14:36 83

原创 程序计数器

PC Register介绍JVM中的程序计数寄存器(Proggram Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。作用PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令它是

2020-06-09 17:12:03 87

原创 Java基础篇:JDBC核心技术

文章目录第1章:JDBC概述1.1 数据的持久化1.2 JDBC介绍1.3 JDBC程序编写步骤第2章:获取数据库连接2.1 要素一:Driver接口实现类2.1.1 Driver接口介绍2.1.2 加载与注册JDBC驱动2.2 要素二:URL2.3 要素三:用户名和密码2.4 数据库连接方式举例2.4.1 连接方式一2.4.2 连接方式二2.4.3 连接方式三2.4.4 连接方式四2.4.5 连接方式五(最终版)第3章:使用PreparedStatement实现CRUD操作3.1 操作和访问数据库3.2

2020-06-08 23:25:57 51

原创 二、类加载器子系统

一、类加载器子系统的作用类加载器子系统负责从文件系统或网络中加载Class文件,class文件在文件开头有特定的文件标识CLassLoader只负责class文件的加载,至于是否可以运行,则由Execution Engine来决定加载的类信息存放于一块成为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分地内存映射)二、类加载器ClassLoader角色class file存在本地硬盘上,可以理

2020-06-02 17:24:12 54

原创 MySQL数据库知识汇总

MySQL总结汇总,整理了包括MySQL数据库的基础知识,SQL优化、事务管理以及一些常见的问题,包含了作为一个Java工程师在面试中需要用到或者可能用到的基础性知识。一来为了加深学习印象,二来为以后面试做准备。后期会持续整理更深、更细、面试频率更高的知识点…序号整理内容内容链接1MySQL基础篇:位、字节和字符的关系https://blog.csdn.net/u012068483/article/details/1052575232MySQL基础篇:数据类型https

2020-05-22 15:08:50 83

原创 MySQL基础篇:事务管理

事务DCL 用来控制数据库的访问,包括如下 SQL 语句:GRANT:授予访问权限REVOKE:撤销访问权限COMMIT:提交事务处理ROLLBACK:事务处理回退SAVEPOINT:设置保存点LOCK:对数据库的特定部分进行锁定演示场景假如去银行给朋友汇款,我卡上有 1000 元,朋友卡上 500 元,我给朋友转账 50 元(无手续费),如果,我的钱刚扣,而朋友的钱又没加时,网线断了,怎么办?事务的 ACID 特性原子性(Atomicity):原子意为最小的粒子,或者说不能再分

2020-05-21 15:06:39 48

原创 Java基础篇:网络编程

文章目录概述通信要素之一:IP和端口号通信要素之二:网络协议TCP网络编程UDP网络编程URL编程总结概述Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。实现网络通信需要解决的两个问题如何准确地定位网络上一台或多台主机;定位

2020-05-19 10:50:12 57

原创 Java基础篇:IO流

文章目录一、File类的使用File类的概述File类的实例化File类的常用方法二、IO流原理及流的分类Java IO原理流的分类流的体系结构输入、输出的标准化过程三、节点流(文件流)四、缓冲流五、转换流六、标准输入、输出流七、打印流八、数据流九、对象流十、随机存取文件流一、File类的使用File类的概述File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)File类声明在java.io包下:文件和文件目录路径的抽象表示形式,与平台无关File类中涉及到关于文件或文件目录的创建、

2020-05-18 23:03:08 53

原创 Java8新特性整理篇

文章目录概述Lambda表达式函数式(Functional)接口Stream APIOptional类概述Java 8是oracle公司于2014年3月发布,可以看成是自Java 5 以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性速度更快代码更少(增加了新的语法:Lambda表达式)Stream API便于并行最大化减少空指针异常:OptionalNashorn引擎,允许在JVM上运行JS应用并行流与串行流并行流就是把一个内容分成多个

2020-05-15 11:47:52 61

原创 Java基础篇:面向对象

文章目录学习面向对象内容的三条主线面向过程(POP)与面向对象(OOP)面向对象的思想概述Java类和对象创建Java自定义类对象的创建和使用对象的创建和使用:匿名对象类的成员之一:属性(Field)类的成员之二:方法类的成员之三:构造器类的成员之四:代码块类的成员之五:内部类面向对象特征之一:封装性面向对象特征之二:继承性面向对象特征之三:多态性Object类的使用包装类(Wrapper)的使用向上转型与向下转型向上转型向下转型方法的重写子类对象实例化全过程关键字关键字:this关键字:super关键字:

2020-05-12 00:45:48 176

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