自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员田同学的博客

灵魂程序员&业余写手,谈副业,谈成长,公}众号【程序员田同学】

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

原创 JVM面试大总结

从现在往回看,我们会发现每个垃圾收集器都是一个时代的产物。**第一阶段:**在单核CPU,内存资源稀缺的时代使用的是Serial和Serial Old收集器,对于单核CPU,内存只有几十M的场景Serial的效率是非常高的。**第二阶段:**进入多核CPU时代后出现了Parallel Scavenge和Parallel Old收集器,利用多线程并行收集极大的提高了垃圾收集的效率,所以在多核CPU场景,内存在几百M到几G的场景Parallel Scavenge和Parallel Old是适用的。

2023-01-03 14:36:40 585 1

原创 计算机网络面试大总结

本文分文五大部分,第一部分总纲说明计算机网络层次划分的三种模型,一到四部分以TCP/IP协议模型作为划分标准,分别说明各层作用和最常见的面试题,最后总结网络综合面试题,历时六天全文一万字。

2022-11-23 10:00:33 406

原创 工厂方法在Spring源码中的运用

我们都知道Spring中IOC是使用的工厂模式,但是对于实现细节就一知半解了,今天这篇文章就带大家解读Spring中是如何使用工厂模式的。

2022-10-11 15:22:11 428

原创 设计模式之访问者模式

大多数情况下你不需要访问者模式,但当一旦需要访问者模式时,那就是真的需要它了,这是设计模式创始人的原话。可以看出应用场景比较少,但需要它的时候是不可或缺的,这篇文章就开始学习最后一个设计模式——访问者模式。

2022-09-30 10:05:48 356

原创 设计模式之模板方法模式

在我们实际开发中,如果一个方法极其复杂时,如果我们将所有的逻辑写在一个方法中,那维护起来就很困难,要替换某些步骤时都要重新写,这样代码的扩展性就很差,当遇到这种情况就要考虑今天的主角——模板方法模式。

2022-09-29 09:49:01 582

原创 设计模式之策略模式

在一个收银系统中,如果普通用户、中级会员、高级会员分别对应着不同的优惠策略,常规编程就要使用一系列的判断语句,判断用户类型,这种情况下就可以使用策略模式。

2022-09-28 09:13:06 256

原创 设计模式之状态模式

实际开发中订单往往都包含着订单状态,用户每进行一次操作都要切换对应的状态,而每次切换判断当前的状态是必须的,就不可避免的引入一系列判断语句,为了让代码更加清晰直观,我们引入今天的主角——状态模式。

2022-09-27 10:10:59 266

原创 设计模式之观察者模式

观察者模式是极其重要的一个设计模式,也是我几年开发过程中使用最多的设计模式,本文首先概述观察者模式的基本概念和Demo实现,接着是观察者模式在Java和Spring中的应用,最后是对观察者模式的应用场景和优缺点进行总结。

2022-09-22 15:22:11 595

原创 设计模式之备忘录模式

无论是我们在使用word还是记事本,系统都会为我们提供撤销的功能,这几乎是人人都会使用到的功能,而在我们实际开发中,会不会存在一个很复杂的对象,当更改了其中的某一个属性以后,也提供撤销的功能,可以快速恢复到更新前的状态。提供该功能的模式也正是今天的主题——备忘录模式。

2022-09-19 09:18:10 221

原创 设计模式之中介者模式

在我们实际业务中,可能存在多个类之间相互调用,形成了一个复杂的网状结构。这时候就需要有一种模式去“捋顺”他们之间的关系,引出一个中间者让类之间不再相互调用,该模式就是我们今天的主人公——中介者模式。

2022-09-15 09:54:26 285

原创 设计模式之迭代器模式

本文介绍设计模式中的迭代器模式,首先通俗的解释迭代器模式的基本概念和对应的四个角色,并根据四个角色举一个典型的实例,为了加强知识的连贯性,我们以Jdk源码集合中使用迭代器模式的应用进一步说明,最后说明迭代器模式的应用场景和优缺点。

2022-09-14 09:20:19 503

原创 设计模式之解释器模式

解释器模式字面意思,也即解释某些内容的含义。这种设计模式是实际开发中最不容易用到的。比如SQL解析,符号处理引擎,会用到解释器模式,属于更底层的开发人员才会用到的设计模式。本文就以解释器模式的概念、角色和简单的例子说明解释器模式,读者对这部分内容了解即可。

2022-09-06 15:44:48 2061

原创 设计模式之命令模式

本文通过解决老王经常搞错借书人的问题,来引出行为型模式中的命令模式。为了在案例之上理解的更加透彻,我们需要了解命令模式在源码中的应用。最后指出命令模式的应用场景和优缺点。

2022-08-30 09:12:39 162

原创 设计模式之责任链模式

本文通过图书馆管理系统中,用户名校验、密码校验、需要增加问题,每次都要增加if判断语句,将其改用责任链模式进行链式调用,为了让代码更加的优雅,我们使用之前学过的建造者模式就代码进行改造。接着我们会介绍责任链模式在我们常用的框架中的运用,最后是责任链模式的优缺点和应用场景。

2022-08-24 10:34:47 241

原创 设计模式之享元模式

本文通过优化买票的重复流程来说明享元模式,为了加深对该模式的理解,会以String和基本数据类型的包装类对该模式的设计进一步说明。

2022-08-16 14:41:02 177

原创 设计模式之外观模式

本文通过老王改造小王公司的整体架构来说明外观模式,所谓的外观模式其实就是在各种复杂的子系统中抽象出来一个接口,隐藏具体的实现细节,调用方调用时只需要调用接口即可。为了加深理解我们会选出外观模式在源码中的应用进行重点的介绍,最后是我对设计模式学习过程中的一些思考。...

2022-08-15 15:25:12 181

原创 设计模式之装饰器模式

本文由老王将建好的书房计划请小王来帮忙,小王却想谋权篡位,老王通过教育他引出装饰器设计模式,第二部分针对老王提出的建设性意见实现装饰器模式,第三部分针对装饰器模式在Jdk中的IO、Spring中的缓存管理器、Mybatis的运用来加强我们的理解,第四部分说明装饰器模式和代理模式的区别及他们各自的应用场景。...

2022-08-10 14:58:29 131

原创 设计模式之组合模式

本文通过老王和小王探讨书房、书架、各类书的管理问题,引出结构型设计模式家族中的一个重要成员——组合模式,本文会给予两种组合模式的典型代码实现,为了加深理解会在第三部分应用中介绍组合模式在源码中的实际运用,最后总结该设计模式学习后的一些思考。...

2022-08-09 11:48:16 113

原创 设计模式之桥接模式

本文通过老王和小王买车,引出设计模式中的结构型设计之桥接模式,接着说明设计型模式的概念和代码实现,为了加深理解,会说明适配器设计模式在JDBC中的应用,最后谈谈桥接模式和适配器模式的总结。...

2022-08-05 15:46:16 113

原创 设计模式之适配器模式

本文通过老王使用纸质书籍阅读小王使用电子书籍的故事,详细说明设计模式中的结构型设计模式之适配器模式,分别对对象适配器和类适配器代码实现,最后为了加深理解,会列举适配器设计模式在JDK和Spring源码中的应用。...

2022-08-04 15:40:45 210

原创 设计模式之代理模式

本文由老王出租房子引出——代理设计模式,将从最简单的静态代理实现开始,后延伸使用jdk实现动态代理,最后扩展到Cglib实现动态代理。为了更深入理解代理模式,我们会对实际应用中的典型案例进行介绍,包括在Spring和Mybatis中的应用。...

2022-08-03 10:53:54 86

原创 设计模式之建造者模式

本文由老王家组装电脑引出——建造者设计模式,详细介绍建造者模式的基本概念和实现代码,为了便于理解建造者模式,我们会对实际应用中的典型案例进行介绍。最后对比工厂模式和建造者模式之间的区别,让我们在实际使用时能更加灵活的选择设计模式。...

2022-08-01 15:39:43 550

原创 设计模式之单例和原型

今天这篇文章我们来学习创建型设计模式的另外两个孪生兄弟,单例和原型,其中原型设计模式中我们深入到JVM的内存模型,最后顺便谈谈Java中的值传递和引用传递。

2022-07-29 15:39:51 169

原创 设计模式之工厂方法和抽象工厂

全网最详细的工厂设计模式,本文主要是创建型设计模式中的工厂方法和抽象工厂,先由传统实现方式引出问题,接着对代码改进到简单工厂,后扩展到工厂方法,最后是抽象工厂模式,文中包括概念理解和相关实现代码。...

2022-07-28 16:49:27 388

原创 设计模式概述

成为一名优秀的软件开发工程师,设计模式的重要性不言而喻,本章节是对设计模式的前置知识概述,涉及概念性较多,读者可在设计模式学习过程中参阅本文档。

2022-07-27 16:46:51 122

原创 赚钱能力”是需要积累的

没有门槛,才是最大的门槛。

2022-07-22 10:29:18 91

原创 Shiro实现多realm方案

公司开始了新项目,新项目的认证采用的是Shiro实现。由于涉及到多端登录用户,而且多端用户还是来自不同的表。这就涉及到了Shiro的多realm,今天的demo主要是介绍Shiro的多realm实现方案,文中包含所有的代码,需要的朋友可以无缝copy。...

2022-07-02 11:09:39 2833 1

原创 Redis实现并发阻塞锁方案

由于用户同时访问线上的下订单接口,导致在扣减库存时出现了异常,这是一个很典型的并发问题,本篇文章为解决并发问题而生,采用的技术为Redis锁机制+多线程的阻塞唤醒方法。在实现Redis锁机制之前,我们需要了解一下前置知识。一、前置知识1、多线程将wait()、notifyAll()归为到多线程的方法中略有一些不恰当,这两个方法是Object中的方法。① 当调用了wait()方法后,让当前线程进入等待状态,并且让当前线程释放对象锁,等待既为阻塞状态,等待notifyAll()方法的唤醒。wait(

2022-04-28 15:26:31 2052

原创 Java并发编程系列之三JUC概述

上篇文章为解决多线程中出现的同步问题引入了锁的概念,上篇文章介绍的是Synchronized关键字锁,本篇文章介绍更加轻量级的锁Lock接口及引出JUC的相关知识。本文不力争阐释清楚JUC框架的所有内容,而是站在一定的高度下,了解Juc下包的设计与实现。文章目录一、LOCK锁概述二、JUC概述1、Lock框架① 接口: Condition②接口: Lock③接口: ReadWriteLock④抽象类: AbstractOwnableSynchonizer⑤抽象类(long): AbstractQueue

2022-04-15 16:36:14 181

原创 如何在一票面试者中,脱颖而出

入行以来,见过了太多的技术博主,大都以BAT这些大厂的程序员居多,拥有大厂闪闪发光的经历固然让人提神,但是不可否认的是:生活中大都还是普通人居多,学历普通、经历普通、公司普通。

2022-04-14 10:35:01 656

原创 Java并发编程系列之二线程基础

上篇文章对并发的理论基础进行了回顾,主要是为什么使用多线程、多线程会引发什么问题及引发的原因,和怎么使用Java中的多线程去解决这些问题。正所谓,知其然知其所以然,这是学习一个知识遵循的原则。推荐读者先行查看并发编程的理论知识,以便可以丝滑入戏。并发编程系列之一并发理论基础本篇文章重点在于Java中怎么去使用多线程,和多线程的一些相关概念和操作,及怎么优化多线程。在Java中每个对象都有其生命周期,线程同样不例外,也有其生命周期。一、线程生命周期线程的几种状态转换1、新建(New)新创建

2022-04-07 15:38:00 148

原创 Java并发编程系列之一并发理论基础

Java并发编程系列之一并发理论基础本系列文章开始Java并发编程的进阶篇的学习,为了初学者对多线程的初步使用有基本概念和掌握,前置知识会对一些基础篇的内容进行介绍,以使初学者能够丝滑入戏。多线程学习,真正的难点不在于多线程程序的逻辑有多复杂,而在于理清J.U.C包中各个多线程工具类之间的关系、特点及其使用场景,学习应该是从整体到局部、高屋建瓴,这对学习任何知识都至关重要。站在上帝视角,以全局视野,抽丝剥茧,深入每个并发编程的各个包及APi的底层实现。概览下图为并发编程包含的所有知识。读者大致浏览

2022-03-30 15:13:08 431

原创 AOP详解之三-创建AOP代理后记,创建AOP代理

AOP详解之三-创建AOP代理后记,创建AOP代理。上篇文章已经获取到了AOP的信息,接下来就是拿着这些AOP的信息去创建代理了。首先我们看下创建AOP代理的入口处。//这个方法将返回代理类 protected Object wrapIfNecessary(Object bean, String beanName, Object cacheKey) { // 1.判断当前bean是否在targetSourcedBeans缓存中存在(已经处理过),如果存在,则直接返回当前bean if (St

2022-03-24 10:15:22 808

原创 AOP源码解析之二-创建AOP代理前传,获取AOP信息

AOP源码解析之二-创建AOP代理前传,获取AOP信息。上篇文章对AOP的基本概念说清楚了,那么接下来的AOP还剩下两个大的步骤获取定义的AOP信息,生成代理对象扔到beanFactory中。本篇文章重点对前半部分,如何获取到AOP信息的过程解读。在Spring的核心方法Refresh方法中,aop是在Object bean = resolveBeforeInstantiation(beanName, mbdToUse);开始切入的,该文章就开始深入这个方法进行解析。@Nullable pr

2022-03-21 14:40:36 639

原创 AOP详解之一基本概念

AOP详解之一基本概念什么是AOPAOP 即 Aspect Oriented Programming,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。说人话:要在我们的功能中加一些功能,而不直接修改修改源代码的前提

2022-03-17 11:23:55 1004

原创 Spring源码之九finishRefresh详解

Spring IoC 的核心内容要收尾了,本文将对最后一个方法 finishRefresh 进行介绍,位于refresh 方法中的第九个位置。本章实际是对发布订阅模式的一种补充,这是Spring在刷新事件完成后发布事件。

2022-03-11 16:54:46 390

原创 Spring源码解析之八finishBeanFactoryInitialization方法即初始化单例bean

Spring源码解析之八finishBeanFactoryInitialization方法即初始化单例bean七千字长文深刻解读,Spirng中是如何初始化单例bean的,和面试中最常问的Spring是如何解决循环依赖?今天解读Spring核心方法refresh()中最最重要的一个方法finishBeanFactoryInitialization()方法,该方法负责初始化所有的单例bean。finishBeanFactoryInitialization()方法位于refresh()中下标为8的位置。

2022-03-09 11:02:31 1063 1

原创 Spring源码之七registerListeners()及发布订阅模式

Spring源码之七registerListeners()及发布订阅模式大家好,我是程序员田同学。今天带大家解读refresh()方法中的registerListeners()方法,也就是我们经常说的Spring的发布-订阅模式。文章首先举一个发布-订阅模式的样例,然后讲解了发布-订阅四个模式的原理,及对发布-订阅模式所依赖的观察者模式进行了举例,最后引出该模式在Springboot中的大量应用。照例放一份refresh()方法的源码,registerListeners()方法位于该方法的第七个位置。

2022-03-07 15:25:19 628 2

原创 前同事的坑,有多深?

在打工人的搬砖生涯中,人来人往都是正常的,当前一个人走了,后一个人总是要顶上的,而你的前任的砖烫不烫手,就是一个玄学问题了。自古职场后浪推前浪,后浪拍死在工位上。而我就实打实的当了一回后浪,同事小王最近离职了,他的“优秀”工作成果领导让我来接手。那天天是阳光明媚,我的内心是大雨交加。小王的技术水平着实让人不敢苟同,作为一个程序员,打字那不是基本生存技能吗?毕竟是靠着这玩意吃饭的,人家小王那可不是。小王同学眼神像扫描仪一样在键盘上扫视,四个手指在键

2022-03-07 08:52:50 79

原创 怀念吗?那年下课回宿舍的日子

清晨,宿舍的窗户透过阳光,倾洒在地砖上,将宿舍从黑夜拉回了白昼,整个宿舍依然一片寂静。床上的人儿慵懒的翻了一个身,伸了一个懒腰,漫不经心的低头看了一眼时间。“今天周几啊?卧草,今天有课啊“。话毕,几个小伙迅雷不及掩耳之势一跃而下,好像跃的再快一些就不会迟到了。牙刷胡乱的在嘴里转了几个来回,敷衍的洗了一下脸,有的敷衍呢,有的部位甚至还没有接触到水就结束了,在镜子前美美的摆弄一下与徐志胜相差无两的发型。路上早已是人烟稀少,几人四处张望唯恐避辅导员而不及。阳光透光过

2022-03-04 11:34:50 55

空空如也

空空如也

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

TA关注的人

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