自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

debug

github地址:https://github.com/yq-debug

  • 博客(38)
  • 收藏
  • 关注

原创 Java集合源码分析——PriorityQueue和PriorityBlockQueue

PriorityQueuePriorityQueue是基于数组结构的,可自动扩容,每次扩容1PriorityQueue物理上是基于数组结构来存储元素的,但是在每次添加或者删除元素之后要进行堆化所以PriorityQueue是一个有序无界队列,默认为最大堆属性 //初始数组大小默认为11 private static final int DEFAULT_INITIAL_CAPACITY = 11; //真正存储元素的数组 transient Object[] queue;

2021-01-03 21:30:30 389 1

原创 弱引用分析

弱引用日常在编码的时候开发者一般不会考虑垃圾回收,因为JVM会自动进行GC,这也是JVM中GC的本质当在使用缓存的场景下,缓存中的对象会跟程序拥有一样的生命周期,使得对象无法被GC,当缓存中的对象过时无法及时GC,并且缓存占用内存会越来越大,造成资源浪费,甚至造成内存溢出。以上所讲均是在strong reference 指向对象的情况之下,为了解决上述问题,JVM具有了弱引用的性能弱引用指的是指向对象的引用为weak reference,当jvm gc时,如果一个对象仅被弱引用指向,则这个对象一定会

2021-01-02 14:09:22 386

原创 IO网络模型分析

关于IO模型,网上有很多说法文章,很容易的看晕,并且对于NIO,IO多路复用,Reactor等术语有不同的解释;本人建议先不关注上面这些问题,先从存在的问题入手,再找到解决问题的方法,然后分析优点和缺点,再不断优化。BIO(同步阻塞)BIO:block input/output 同步阻塞IO同步:指的是在客户端请求服务端,并建立连接,此时在服务端处理完当前客户端的请求之后才能接受下一个客户端的请求阻塞:指的是服务端的ServerSocket是阻塞模式的,并且IO也会造成阻塞public stati

2021-01-01 15:04:17 345

原创 Tomcat启动过程源码分析

Tomcat启动过程分析Tomcat默认server.xml文件<?xml version="1.0" encoding="UTF-8"?><Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.c

2020-12-23 20:20:48 191

原创 @Autowired依赖注入源码分析

文章目录入口Refresh()预解析过程findAutowiringMetadata(beanName, beanType, null)buildAutowiringMetadata()注入源数据InjectionMetadataAbstractBeaFactory#doCreateBean注入过程populateBean()方法postProcessProperties()inject()element.inject(target, beanName, pvs)属性自动注入AutowiredFieldEl

2020-11-15 12:58:13 789 1

原创 Spring IOC 容器初始化——refresh()方法

spring 容器初始化源码学习待更新AbstractApplication.refresh()/** * 启动ApplicationContext */public void refresh() throws BeansException, IllegalStateException { //加锁,防止在启动的过程中销毁或者再次启动 synchronized (this.startupShutdownMonitor) { //准备刷新上下文应用 设置启动时间,已

2020-10-11 22:41:16 599

原创 Java内存模型

疑问对原子操作的理解JMM提供的8种原子性操作对指令乱序执行以及并行的理解volatile关键字的作用多线程环境下,A线程如何立即看到B线程的操作结果如何保证数据的一致性、可见性计算机的硬件结构我们所写的代码被编译成字节码之后,从广泛的角度考虑,在电脑中会经过内存---->高速缓冲存储器---->处理器(核/寄存器)三个地方。可见性在多线程环境下,当多个线程同时要操作内存中的变量,如何保证每个线程所操作的变量值为最新的?即A线程对变量操作的结果对其他线程立即可知

2020-09-16 23:48:18 95

原创 排序算法

桶排序计数排序基准排序快速排序插入排序冒泡排序选择排序最近在熟悉总结排序算法,这里做一个记录,此处只对于整数进行排序,后续再做更新。。。桶排序适用范围:适用于对一定范围内的整数进行排序思想:将数组中的元素分别放入到k个桶中,分别对桶中的元素进行排序,然后将桶中的元素倒出。当元素均匀的分配到每个桶中时,性能最好。public void bucketSort(int[] nums) { if (nums == null || nums.length == 0) { retu.

2020-08-30 15:03:08 134

原创 学了忘,忘了学——数据库锁机制

表锁:表锁是MySQL中最基本的锁,并且是开销最小的锁,在加锁时它会锁定整张表,读锁之间不会相互阻塞,写锁之间会相互阻塞。写锁比读锁有更高的优先级,在执行修改表结构的sql语句时使用的表锁行级锁:行级锁每次锁定的是一行,并发程度高,但是开销也大,行级锁只在存储引擎层实现,在MySQL服务器层没有实现,InnoDB存储引擎中实现了行级锁数据库中为什么要使用锁?场景分析:事务...

2020-02-13 21:07:25 147

原创 MySQL索引(InnoDB存储引擎)学习记录

引言关于数据库索引牵扯到的知识点比较多,通过阅读《MySQL技术内幕InnoDB存储引擎》一书以及网上的一些文章,下面记录自己所能理解的部分内容,通过场景分析和一些问题将知识点进行串联起来进行理解。InnoDB存储引擎概要InnoDB存储引擎中所有的数据都被存放在一个空间中,我们称之为表空间,这个表空间中由段组成,段由区组成,区由页(块)组成,这里的页/块(磁盘块)也就是InnoDB存...

2019-12-30 20:18:50 194

原创 秋招

秋招面试中遇到的问题,记录不全java基础方面如何调用别人的接口如何给别人写一个可供调用的接口.net包下的常用类有那些乐观锁和悲观锁UML图jre、jdk、jvm三者之间的关系子类与父类的转型理解程序员可以手动进行内存释放吗序列化与法序列化的作用手写单例模式手写通过反射获取对象的私有方法字符串中转义字符使用equals()和hashCode()的作用java的8种...

2019-10-27 15:20:41 260

原创 HTTP和HTTPS

1. 引言2. HTTP2.1. 通信时明文在不加密的情况下可能会被窃取2.2. 通信时对通信的双方不进行身份的验证2.3. 通信时无法证明报文是否完整或者已经被修改3. HTTPS3.1. HTTP的混合加密模式3.2. 混合加密过程1. 引言前段时间笔试的时候遇到HTTPS与HTTP协议的区别笔试题,在此从理论知识方法对两种协议进行比较。后面再从实际开发角...

2019-10-14 14:57:12 167

原创 集合(list、set、Map)的遍历方式

元素在内存中的两种存放方式一种是顺序存放,内存地址是连续的。顺序存放的集合一般会实现RandomAccess接口,表示此集合中的元素可以随即存取。读取一个元素的时间复杂度为O(1)一种是随即存放,内存地址是不要求连续的。每个数据元素都存储这下一个数据元素在内存中的地址,只能按顺序进行读取,读取一个元素的平均时间复杂度为O(n)传统的for循环遍历for循环遍历基于计数器,根据集合中元素...

2019-10-09 15:53:24 227

原创 关于Thread中wait()方法、join()方法、sleep()方法、notify()方法、notifyAll()方法和yield()方法的区别及其联系-含源码和实例

1. join()2. sleep()3. yield()1. join()join()方法作用就是同步,将并行线程变为串行线程如果在线程A中调用线程B的join()方法则在线程B执行结束之后,线程A再继续执行join()方法的底层使用的是wait()方法,所以join()方法是同步方法源码解析: //设置线程等待的时间为毫秒 public final ...

2019-09-05 21:01:05 271

原创 Integer类内部缓冲池的源码分析

引言学习java的最好方法就是看源码和官方文档关于Integer的缓冲池IntegerCache这里从源码角度进行分析,但是Integer的缓冲池与jvm内存模型之间的关系还有待研究。Integer类源码分析jdk版本:jdk1.8public final class Integer extends Number implements Comparable<Integer&...

2019-08-16 17:30:59 178

原创 阿里云ECS服务器远程连接和数据库的配置踩坑记录

1. ECS服务器的连接2. mysql数据库的配置3. 在本地远程连接服务器上的mysql数据库4. 在mysql中创建用户名并赋予权限 前段时间进行阿里云服务器的配置和在服务器上搭建mysql数据库,在此过程中踩过不少的坑,避免以后踩同样的坑,特此记录:阿里云ECS服务器操作系统:ubuntu18.04.1mysql数据库版本:5.7.26-0ubuntu0.18.04.1本...

2019-07-30 22:15:59 1262

原创 关于Spring中的缓存机制与SpringBoot整合Redis作为缓存的一些思路

1. 缓存机制2. Spring内置缓存配置3. EncacheCacheManager缓存管理器的配置4. RedisCacheManager缓存管理器的配置5. 缓存注解介绍5.1. @Cacheable和@Cacheput5.2. @CacheEvict1. 缓存机制在实际的开发过程当中,缓存机制有很重要的作用,Spring缓存机制可以在 控制器组件或者业务...

2019-07-15 21:10:15 251

原创 dao层注解@Repository在idea环境下无法进行bean注册问题

问题:在idea环境下,注解@Repository注册dao曾bean的时候显示无法注入@Repositorypublic interface BloggerDao { //查询博主信息 Blogger getBloggerData(); //通过用户名查询博主信息 Blogger getBloggerDataByName(String name);}@Servicep...

2019-06-30 09:28:20 3759 1

原创 LinkedHashMap中如何对双向链表进行维护——从源码角度进行分析

1. 同步容器2. 并发容器3. ConcurrentHashMap4. CopyOnWriteArrayList4.1. 关于CopyOnWriteArrayList以下是自己在研究《Java 并发编程实战》这本书时做的一些笔记,增加了别人的一些见解和自己的理解,将其整理如下:1. 同步容器在Java中,同步容器主要有两类:一是Vector、HashTable...

2019-06-02 16:05:40 844 1

原创 Java 集合源码分析——List

1. 简介2. 继承体系3. 源码解析3.1. 属性3.2. 构造方法3.3. add(E e)方法3.4. remove(int index)3.5. remove(Object o)作者:彤哥读源码来源:CSDN原文:https://blog.csdn.net/tangtong1/article/details/88892131版权声明:本文为博主原创文章...

2019-05-19 16:51:54 111

原创 Java并发编程 —— 同步工具类-闭锁(CountDownLatch)、信号量(Semaphore)、栅栏(CyclicBarrier)

1. 闭锁(CountDownLatch)2. 信号量(Semaphore)3. 栅栏(CyclicBarrier)前言:同步工具类可以是任何一对象,他可以根据自身的状态来协调线程的控制流。同步工具类主要包括 闭锁(如CountDownLatch),栅栏(如CyclicBarrier)信号量(如Semaphore)和阻塞队列(如LinkedBlockingQueue)1. 闭锁...

2019-04-03 21:19:34 727

原创 Java并发编程 —— Runnable和Callable

1. Runnable和Callable2. Future和FutureTask1. Runnable和CallableJava多线程有两个重要的接口,Runnable和Callable,分别提供了一个call方法和一个run方法相同点两者都是接口两者都可以用来编写多线程程序两者都可以调用Thread.start()来启动线程不同点两个最大的不同点就是:实现...

2019-03-29 11:35:27 808

原创 Java集合之HashMap源码分析

1. HashMap2. HashTable与HashMap的异同3. HashSet1. HashMapHashMap是一个散列表,它存储的内容是 键值对映射,映射表不能有重复的键HashMap实现了Map、Cloneable、Serializable接口HashMap的实现不是同步的,这意味着 他不是线程安全的,他的key、value都可以为null。此外,它的 映射不是有...

2019-03-25 21:06:25 1302

原创 String字符串的创建与存储机制 —— 关于常量池以及String到底创建几个对象

在Java语言中,字符串起着非常重要的作用,字符串的声明与初始化有以下两种情况:String s1 = new String(“abc”);和String s2 = new String (“abc”);存在 两个引用对象s1和s2,两个内容相同的字符串对象&quot;abc&quot;,他们在内存中的地址是不同的。只要用new就会产生新的对象。String s2 = “abc”;和String s2 = ...

2019-03-14 20:45:23 669

转载 String、StringBuffer、StringBuilder三者的区别

Java中String、StringBuffer、StringBuilder三者的区别首先:String用于字符串的操作,属于 不可变的类StringBuffer和StringBuilder也用于字符串的操作,属于 可变类执行效率上StringBuilder&gt;StringBuffer&gt;StringString是字符串常量,而StringBuffer和StringB...

2019-03-08 18:35:32 147

原创 Java数据结构——线性表、队列、栈、堆、集合、散列表、映射的概念

  下面是我在学习Java数据结构时梳理出来的一些知识点,供大家学习参考,类和接口的方法没有写出,具体以API文档为准。   数据结构在某种形式上是一种合集,数据结构不仅存储数据,还支持访问和处理数据。数据结构从本质上讲就是一个类,创建一个数据结构就是创建这个类的一个实例,然后使用这个实例上的方法操作这个数据结构。  Java中提供的数据结构通常称为java合集框架  Java合集框架中的...

2019-03-08 10:52:58 10343 1

原创 JDK动态代理实现原理(含实例)

1. 动态代理概念2. JDK动态代理技术3. 动态代理相关类的介绍3.1. InvacationHandler3.2. Proxy4. 关于CGLIBgithub实例:https://github.com/hello-qiang/Java/tree/master/TestProxy1. 动态代理概念动态代理的意义在于生成一个 占位(代理对象),用来代理真实的对象...

2019-02-28 18:28:44 857 1

原创 数据模型之Model、ModelMap和ModelAndView的关系

1. 引言2. 在SpringMVC中三者关系的几点说明3. Model4. ModelMap5. ModelAndView1. 引言当从控制器获取数据后,会装载数据到数据模型和视图中,然后将视图名称转发到视图解析中,通过视图解析器解析后得到最终的视图,最后将数据模型渲染到视图中,展示最终的结果给用户。2. 在SpringMVC中三者关系的几点说明为了进一步定义数据模型功...

2019-02-26 19:05:06 610

原创 Spring MVC之表单验证

1. JSR303注解验证JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现,Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint注解验证所需的jar包:valida...

2019-02-25 20:18:54 1279

原创 红黑树

1. 引言2. Bean的属性和方法2.1. 注解方式:2.2. XML配置方式3. 使用类的静态常量和方法4. Spring EL运算1. 引言Spring3引入了Spring表达式语言(Spring Exception Language,Spring EL),它能够以一种强大简介的方式将值装配到bean属性或构造器参数中,在这个过程中所使用的表达式会在运行时计算得...

2019-02-01 12:45:39 421

原创 mybatis与spring整合详解

1. 引言2. 传统JDBC代码的弊端3. 配置数据源3.1. 使用简单数据库配置3.2. 使用第三方数据连接池(DBCP)4. MyBatis-Spring项目配置4.1. 配置Spring-MyBatis项目的步骤4.2. 配置SqlSessionFactoryBean4.3. 配置MapperFactoryBean4.4. 配置MapperScannerConf...

2019-01-25 12:26:53 241

原创 在运行时识别对象和类的信息——传统的RTTI和Java反射机制

类加载器类加载器是Java运行环境的一部分,负责动态加载类到Java虚拟机的内存空间中。类通常是按需加载,即第一次使用该类时才加载。java类在经过Java编译器编译之后就转换为java字节码文件(.class文件),类加载器负责读取java字节代码,并转换为java.lang.Class类的一个实例.获取class对象的三种方式通过Class类的静态方法forName()获取(常用方式...

2019-01-17 16:09:18 170

原创 MyBatis框架:核心组件+基本配置

1. 概要2. MyBatis基本配置2.1. 标签2.2. 实体类的命名方式2.3. 数据库字段与java类型对应关系2.4. 初始化步骤2.5. resultMap与resultType的区别2.6. #{}与${}的区别2.6.1. sql预编译2.6.2. ‘#‘与’$’3. Select4. Insert4.1. Insert标签常用属性4.2...

2019-01-16 22:53:29 280

原创 死磕JVM——java文件的编译与装载过程

JVM介绍JVM运行时的区域划分程序计数器java虚拟机栈(执行方法的服务)本地方法栈(为native方法服务)java堆方法区运行时常量池直接内存对象对象的创建对象的内存布局对象的访问定位垃圾收集与内存分配策略判断对象是否可回收的方法引用计数器可达性分析法垃回收策略标记-清除算法复制算法标记-整理-清除算法分代收集算法...

2019-01-10 22:24:51 174

原创 I/O操作

比特(Bit)、字节(Byte)输入流与输出流字符流、字节流节点流和处理流转换流字节数组流缓冲流Serializable接口关闭流不关闭流的影响关于资源泄露如何关闭流比特(Bit)、字节(Byte)比特是计算机最小的二进制单位,是最小的传输单位,取值为0或者1Byte表示字节,有8个比特位,是最小的存储单位。输入流与输出流按照传输方向分为输出流和...

2019-01-02 15:50:38 273

原创 Servlet学习

Servlet概述Servlet生命周期请求流程doGet()与doPost()方法Sevrlet特性servlet线程安全实现类GenericServlet和HttpServlet相关类ServletRequestServletContext(重点)设置公共初始化参数get与post的区别getpostJSP与Servlet的区别知识拓展C...

2018-12-09 13:50:41 120

原创 SpringMVC前后端传值的几种方式

从JSP页面传递值到controller层的方式直接将请求参数名作为controller中方法的形参使用@RequestParam 绑定请求参数值(推荐使用)用注解@RequestMapping接收参数的方法使用POJO使用原生的Servlet API 作为Controller 方法的参数如何将controller层值传递到JSP页面使用Request使用Model使...

2018-12-01 17:11:37 10176 2

转载 SpringMvc三层架构注解详解@Controller、@Service和@Repository

1. @Controller控制层2. @Service()3. @Repository持久层springvmc采用经典的三层分层控制结构,在持久层,业务层和控制层分别采用@Repository、@Service、@Controller对分层中的类进行注解,而@Component对那些比较中立的类进行注解1. @Controller控制层@Controller用于标记在一个类上...

2018-11-24 22:30:06 109296 4

空空如也

空空如也

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

TA关注的人

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