- 博客(64)
- 资源 (1)
- 收藏
- 关注
原创 Spring-BeanFactory和FactoryBean的区别
1.BeanFactory和FactoryBean的区别 BeanFactory是一个接口,提供了IOC容器最基本的形式,给具体的IOC容器的实现提供了规范 FactoryBean也是一个接口,为IOC容器中Bean的实现提供了更加灵活的方式,FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式,我们可以在getObject()方法中灵活配置。 结论:BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Be
2020-09-25 21:45:34
329
原创 RabbitMq七种工作模式,结合简单的java实例使用,别再说你不会
一、Maven依赖添加com.rabbitmqamqp-client3.0.4二、七种工作模式的java实例1、简单模式最简单的一个消费者和一个生产者模式,生产者生成消息,消费者监听消息,若是消费者监听到它所需要的消息,就会消费该消息,这种消息是次性的,被消费了就没有了。1.1.1、EasyRecv.javaimportcom.rabbitmq.client.Channel;importcom.rabbitmq.client.Connection;imp...
2020-09-23 21:21:52
217
原创 SpringBoot工程的三种搭建方式,你了解几种呢?
SpringBoot的主要目的是简化配置文件,通过少量配置即可运行Java程序,其强大的自动配置功能帮助开发者轻松实现配置装配,通过引入SpringBoot的starter就能实现想要的功能,不需要额外的配置。目前SpringBoot工程有三种搭建方式:通过Spring Initializr创建通过IDEA创建工程手动创建工程1. 通过Spring Initializr创建Spring团队提供一个非常方便的网页用于生成SpringBoot工程,打开浏览器进入 Spring Initi
2020-09-22 16:49:18
297
原创 我工作三年了,该懂并发了(干货)
本文的组织形式如下,主要会介绍到同步容器类,操作系统的并发工具,Java 开发工具包(只是简单介绍一下,后面会有源码分析)。同步工具类有哪些。下面我们就来介绍一下 Java 并发中都涉及哪些模块,这些并发模块都是 Java 并发类库所提供的。同步容器类同步容器主要包括两类,一种是本来就是线程安全实现的容器,这类容器有Vector、Hashtable、Stack,这类容器的方法上都加了synchronized锁,是线程安全的实现。“Vector、Hashtable、Stack 这...
2020-09-21 20:29:21
180
原创 聊聊Dubbo(二):简单入门
准备以上两点准备,不是本文重点,不做详细介绍,安装比较简单,自行查阅相关资料安装学习。1 服务端1.2 接口定义1.创建Maven模块:msa-demo-apimsa-demo-api2.msa-demo-api:配置pom.xml以上POM配置,从dubbox-2.8.4开始,所有依赖库的使用方式将和dubbo原来的一样:即如果要使用REST、Kyro、FST、Jackson等功能,需要用户自行手工添加相关的依赖。3.定义接口:UserS...
2020-07-16 17:36:04
273
原创 java 后端博客系统文章系统——No6
工具IDE为idea16 JDK环境为1.8 gradle构建,版本:2.14.1 Mysql版本为5.5.27 Tomcat版本为7.0.52 流程图绘制(xmind) 建模分析软件PowerDesigner16.5 数据库工具MySQLWorkBench,版本:6.3.7build本期目标mybatis一些简单的进阶使用 日志功能的记录 文章发布 草稿保存上期我们通过对数据库的分析,仔仔细细的探索了一遍WordPress程序运行时候文章提交和草稿提交...
2020-07-15 17:42:48
222
原创 聊聊Dubbo(一):为何选择
1. 前言随着现在互联网行业的发展,越来越多的框架、中间件、容器等开源技术不断地涌现,更好地来服务于业务,实现业务并解决问题。然而面对众多的技术选择,我们要如何甄别出适合自己团队业务的技术呢?对于人来说,鞋子过大,可能影响奔跑的速度,鞋子过小,可能影响身体的成长。技术对于业务也是如此的关系。所以,相对于技术的学习、搭建、使用、运维等技能,我们对技术的甄别选择更是重中之重。那么本文要讲的Dubbox框架,又是如何在众多的服务框架中脱颖而出,被团队选中践行服务之路?2. 服务2.1 为什么.
2020-07-15 16:13:48
278
原创 java 后端博客系统文章系统——No5
工具IDE为idea16 JDK环境为1.8 gradle构建,版本:2.14.1 Mysql版本为5.5.27 Tomcat版本为7.0.52 流程图绘制(xmind) 建模分析软件PowerDesigner16.5 数据库工具MySQLWorkBench,版本:6.3.7build本期目标根据WordPress的工作进行程序设计分析 完成文章保存和草稿保存相关程序流程分析首先我们打开WordPress登录到控制台后随便保存草稿和文章,然后导出数据库中po...
2020-07-14 19:46:22
232
原创 啃碎并发(11):内存模型之重排序
前言在很多情况下,访问一个程序变量(对象实例字段,类静态字段和数组元素)可能会使用不同的顺序执行,而不是程序语义所指定的顺序执行。具体几种情况,如下:例如,如果一个线程写入值到字段a,然后写入值到字段b,而且b的值不依赖于a的值,那么,处理器就能够自由的调整它们的执行顺序,而且缓冲区能够在a之前刷新b的值到主内存。有许多潜在的重排序的来源,例如编译器,JIT以及缓冲区。所以,从Java源码变成可以被机器(或虚拟机)识别执行的程序,至少要经过编译期和运行期。在这两个期间,重排序分为..
2020-07-14 14:20:33
235
原创 java 后端博客系统文章系统——No4
这一期我们的目标是完成后端博客系统的博客发布功能。按照我们前面的设定,我们的后端博客系统需要完成最简单的博文发布,我们也得有后台管理界面,同时需要将用户权限这些都附带上,但是由于时间关系,我们后端默认账户就是管理员吧,毕竟这一期的重点是实现博客的发布。我们需要发布博文,那么后端必不可少的是登录和发布系统,至于其他的我们可以先缓一缓,毕竟我也没想好后端页面怎么设计,嘿嘿。前面我看了一下,确实是完美兼容WordPress还是有很多难度,毕竟很多技术细节我们并不知道,不过,至少说...
2020-07-13 19:47:55
309
原创 啃碎并发(10):内存模型之内部原理
前言如上一篇文章所述,Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整计算机的模型,因此,这个模型自然会包含一个内存模型—又称为Java内存模型。如果你想设计表现良好的并发程序,理解Java内存模型是非常重要的。Java内存模型规定了如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。1 Java内存模型我们先来看看Java 线程运行内存示意图,如下图所示: ...
2020-07-13 15:51:37
216
原创 java 后端博客系统文章系统——No3
工具IDE为idea16 JDK环境为1.8 gradle构建,版本:2.14.1 Mysql版本为5.5.27 Tomcat版本为7.0.52 流程图绘制(xmind) 建模分析软件PowerDesigner16.5 数据库工具MySQLWorkBench,版本:6.3.7build本期目标1.文章阅读前端页面全部完成2.根据页面框架进行解耦 页面附属信息 文章信息文章系统前端页面文章系统作为我们博客系统中重要的一环,...
2020-07-11 18:11:35
209
原创 啃碎并发(九):内存模型之基础概述
前言在并发编程中,需要解决两个关键问题:线程之间如何通信;线程之间如何同步;线程通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。线程同步是指程序用于控制不同线程之间操作发生相对顺序的机制。在共享内存的并发模型里,..
2020-07-11 15:03:27
171
原创 啃碎并发(八):深入分析wait¬ify原理
前言上一节讲了Synchronized关键词的原理与优化分析,而配合Synchronized使用的另外两个关键词wait¬ify是本章讲解的重点。最简单的东西,往往包含了最复杂的实现,因为需要为上层的存在提供一个稳定的基础,Object作为Java中所有对象的基类,其存在的价值不言而喻,其中wait¬ify方法的实现多线程协作提供了保证。1 源码今天我们要学习或者说分析的是 Object 类中的 wait¬ify 这两个方法,其实说是两个方法,这两个方法包括他们的重载
2020-07-10 20:36:34
278
原创 Java 后端博客系统文章系统——No2
今天这一篇,主要是关于上一张的编码实现。为什么我要单路分离出来?因为做事要分先后,明白道理,执行才能确定无误。wordpress做的文章存储在上次我们已经看过了wordpress的数据库模型(有朋友问我什么是逆向分析,拿着别人的产品逆向推导这就是逆向分析),我们可以很清楚的看到数据库关于文章存储的两张表,它们分别存储了文章的主体信息和文章的其他信息,具体的我们再看看数据库模型:wordpress数据库模型在上面的途中,我们很明显的看到数据库关于文章的存储主要分为两张表:wp_p.
2020-07-10 17:05:10
441
原创 啃碎并发(七):深入分析Synchronized原理
前言记得开始学习Java的时候,一遇到多线程情况就使用synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着学习的进行我们知道在JDK1.5之前synchronized是一个重量级锁,相对于j.u.c.Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。不过,随着Javs SE 1.6对synchronized进行的各种优化后,synchroniz.
2020-07-09 17:45:27
265
原创 Java 后端博客系统文章系统——No1
这一章我们主要介绍文章系统。毕竟博客系统的核心就是文章的发布和阅读。闲话不多说,老规矩走起来。工具IDE为idea16JDK环境为1.8gradle构建,版本:2.14.1Mysql版本为5.5.27Tomcat版本为7.0.52流程图绘制(xmind)建模分析软件PowerDesigner16.5首先我们需要先了解我们这个文章系统的整个功能模块组合,也就是我们的思维导图,只有这样才能实现整体功能的架设。下面如图所示:其实在上面的系统中,我...
2020-07-09 15:52:59
459
原创 啃碎并发(六):Java 线程同步与实现
前言为何要使用Java线程同步?Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时,将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。但其并发编程的根本,就是使线程间进行正确的通信。其中两个比较重要的关键点,如下:Java中提供了很多线程同步操作,比如:synchronized关键字、wait/notifyAll、ReentrantLock、Condition、一些并发包下的工具类、1
2020-07-08 17:44:47
855
原创 啃碎并发(五):Java线程安全特性与问题
前言在单线程中不会出现线程安全问题,而在多线程编程中,有可能会出现同时访问同一个共享、可变资源的情况,这种资源可以是:一个变量、一个对象、一个文件等。特别注意两点:简单的说,如果你的代码在单线程下执行和在多线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的。那么,当进行多线程编程时,我们又会面临哪些线程安全的要求呢?又是要如何去解决的呢?1 线程安全特性1.1 原子性跟数据库事务的原子性概念差不多,即一个操作(有可能包含有多个子操作)要么全部执行(生效),要么全部都不执..
2020-07-08 15:05:34
219
原创 啃碎并发(四):Java线程Dump分析
1 Thread Dump介绍1.1 什么是Thread DumpThread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数。1.2 Thread Dump特点1.3 Thread Du.
2020-07-07 19:51:32
281
原创 啃碎并发(三):Java线程上下文切换
前言在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。再后来发展到多线程技术,使得在一个程序内部能拥有多个线程并行执行。一个线程的执行可以被认为是一个CPU在执行该程序。当一个程序运行在多线程下,就好像有多个CPU在同时执行该程序。多线程比多任务更加有挑战。多线.
2020-07-07 15:32:03
232
原创 啃碎并发(二):Java线程的生命周期
前言当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。尤其是当线程启动以后,它不可能一直"霸占"着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。线程状态转换关系1 新建(New)状态当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时的线程情况如下..
2020-07-06 21:20:36
196
原创 啃碎并发(一):Java线程总述与概念
1 前言在JDK5之前,Java多线程以及其性能一直是个软肋,只有synchronized、Thread.sleep()、Object.wait/notify这样有限的方法,而synchronized的效率还特别地低,开销比较大。在JDK5之后,相对于前面版本有了重大改进,不仅在Java语法上有了很多改进,包括:泛型、装箱、for循环、变参等,在多线程上也有了彻底提高,其引进了并发编程大师Doug Lea的java.util.concurrent包(后面简称J.U.C),支持了现代CPU的CAS原语
2020-07-06 16:49:35
259
原创 Java架构-Apache POI Excel
相信在项目中,对数据进行动态导出这是一个比较常见的功能。对于数据导出我们可以使用Apache-POI这个框架来帮我来进行Excel的写入与读取。下面就用代码来实现Apache POI写入与读取excel文件。1、Apache POI基本概念下面将简单的描述一下当进行Excel读取与写入的时候要使用到的基本类。HSSF 为前缀的类名表示操作的是Microsoft Excel 2003文件。XSSF 为前缀的类名表示操作的是Microsoft Excel 2007或以后的版本XSSFWork
2020-07-04 20:03:25
220
原创 面试中必问的JVM应该怎么学(面试题含答案)
方法区方法区与Java堆一样,是各个线程共享的区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译(JIT)后的代码等数据。对于JDK1.8之前的HotSpot虚拟机而言,很多人经常将方法区称为我们上图中所描述的永久代,实际上两者并不等价,因为这仅仅是HotSpot的设计团队选择利用永久代来实现方法区而言。同时对于其他虚拟机比如IBM J9中是不存在永久代的概念的。其实,移除永久代的工作从JDK1.7就开始了。JDK1.7中,存储在永久代的部分数据就已经转移到了Java Heap或者..
2020-07-04 18:11:15
190
原创 解读 java 并发队列 BlockingQueue
点击添加图片描述(最多60个字)编辑今天呢!灯塔君跟大家讲:解读 java 并发队列 BlockingQueue最近得空,想写篇文章好好说说 java 线程池问题,我相信很多人都一知半解的,包括我自己在仔仔细细看源码之前,也有许多的不解,甚至有些地方我一直都没有理解到位。说到线程池实现,那么就不得不涉及到各种 BlockingQueue 的实现,那么我想就 BlockingQueue 的问题和大家分享分享我了解的一些知识。本文没有像之前分析 AQS 那样一行一行源码分析了,不..
2020-07-04 17:20:38
334
原创 java架构-一些设计上的基本常识
最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助,把暂时想到的几条,先记在这里。1、API与SPI分离框架或组件通常有两类客户,一个是使用者,一个是扩展者。API(Application Programming Interface)是给使用者用的, 而SPI(Service Provide Interface)是给扩展者用的。 在设计时,尽量把它们隔离开,而不要混在一起, 也就是说,使用者是看不到扩展者写的实现的。比如:一个Web框架,它有一个API接口叫Action, 里面有个
2020-07-03 21:08:24
176
原创 猿灯塔:疫情冲击,去体验远程面试被怼10分钟,今年Java开发找工作真难
网行业,美团王兴曾说:“2019年可能会是过去十年里最差的一年,却是未来十年里最好的一年”。没想到预言竟然快成真了?年前很多企业一波裁员,2020年又受疫情影响,延长了假期,各大企业复工时间拉长,招聘需求也可能缩减,对于已经离职和打算跳槽的朋友无疑是雪上加霜,目前更是暂停现场招聘活动,加强了网上就业服务,大力推进网上就业服务。今年的金三银四会怎样?面前找到心仪的工作?今年因为疫情的特殊情况,整体经济形势不是很明朗,但是危机中也蕴含着无限机遇。对于开发者来说,更应该用知识丰富自己,不管外界环境如何,我们
2020-07-03 19:50:12
404
原创 猿灯塔:最详细Dubbo相关面试题
1、Dubbo是什么?Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。面试官问你如果这个都不清楚,那下面的就没必要问了。官网:http://dubbo.apache.org2、为什么要用Dubbo?因为是阿里开源项目,国内很多互联网公司都在用,已经经过很多线上考验。内部使用了 Netty、Zookeeper,保证了高性能高可用性。使用 Dubbo 可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用
2020-07-03 15:49:14
163
原创 猿灯塔:Java程序员月薪三万,需要技术达到什么水平?
最近跟朋友在一起聚会的时候,提了一个问题,说Java程序员如何能月薪达到二万,技术水平需要达到什么程度?人回答说这只能是大企业或者互联网企业工程师才能拿到。也许是的,小公司或者非互联网企业拿二万的不太可能是码农了,应该已经转管理。还有区域问题,这个不在我的考虑范围内,因为除了北上广深杭,其他地方也很难达到。还有人提到这个水平不止2w,其实工资是跟面试表现有关的,也跟其他综合水平有关,比如你是985,top10,或者研究生学历,也或者懂点node,懂点大数据等等,或者表达能力强,击中面试官痛点都会加分。如果
2020-07-01 16:38:15
290
原创 猿灯塔:关于Java面试,你应该准备这些知识点
自天子以至于庶人,壹是皆以修身为本 《礼记·大学》马老师说过,员工的离职原因很多,只有两点最真实:钱,没给到位心,受委屈了当然,我是想换个平台,换个方向,想清楚为什么要跳槽,如果真的要跳槽,想要拿到一个理想的offer,除了运气,基本功也要足够的扎实,希望下面的面试经验能给你们能够提供一些帮助。项目经验面试官在一开始会让你进行自我介绍,主要是想让你介绍一下自己做过的一些项目,看看你对这些项目的了解程度,因为很多人简历上写的项目并非都是从头到尾都参与的,有些只是参与并实现了其中的一些模块而已,或是
2020-06-30 15:54:43
153
原创 如何写一份合格的技术简历?
原创声明:本文首发于微信公众号【名师猿灯塔】,转载引用请说明出处今天是猿灯塔“365天原创计划”第8天。今天讲:如何写一份合格的技术简历在金三银四的招聘旺季,现在找工作的程序员很多,都需要写简历。求职者们关于“为什么我的简历投递后会石沉大海”越来越集中的出现。我见过很多简历,写得很糟糕,看不出这个人的亮点在哪里。一个人总是有亮点的,对不对。一些同学私下找我,让我帮忙修改简历。我在这...
2020-05-26 16:25:37
415
原创 JVM源码分析之堆内存的初始化
原创申明:本文由公众号【猿灯塔】原创,转载请说明出处标注“365篇原创计划”第十五篇。今天呢!灯塔君跟大家讲:JVM源码分析之堆内存的初始化堆初始化Java堆的初始化入口位于Universe::initialize_heap方法中,实现如下:其中UseParallelGC、UseG1GC、UseConcMarkSweepGC都可以通过启动参数进行设置,整个初始化过程分成三步:1、初始化GC策略;2、初始化分代生成器;3、初始化Java堆管理器;...
2020-05-22 15:26:43
353
转载 JVM源码分析之JVM启动流程
原创申明:本文由公众号【猿灯塔】原创,转载请说明出处标注“365篇原创计划”第十四篇。今天呢!灯塔君跟大家讲:JVM源码分析之JVM启动流程前言:执行Java类的main方法,程序就能运行起来,main方法的背后,虚拟机究竟发生了什么?如果你对这个感兴趣,相信本文会给你一个答案,本文分析的openjdk版本为openjdk-7-fcs-src-b147-27classBootStrap{publicstaticvoidmain(String[]arg...
2020-05-21 16:50:18
203
原创 JVM源码分析之synchronized实现
原创申明:本文由公众号【猿灯塔】原创,转载请说明出处标注“365篇原创计划”第十二篇。今天呢!灯塔君跟大家讲:JVM源码分析之synchronized实现java内部锁synchronized的出现,为多线程的并发执行提供了一个稳定的环境,有效的防止多个线程同时执行同一个逻辑,其实这篇文章应该写在JVM源码分析之Object.wait/notify实现机制之前,本文不会讲如何使用synchronized,以HotSpot1.7的虚拟机为例,对synchronized的实现进行...
2020-05-20 17:17:41
314
原创 JVM源码分析之Java对象头实现
原创申明:本文由公众号【猿灯塔】原创,转载请说明出处标注“365篇原创计划”第十一篇。今天呢!灯塔君跟大家讲:JVM源码分析之Java对象头实现HotSpot虚拟机中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充。对象头对象头包括两部分:Mark Word 和 类型指针。Mark WordMark Word用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等,占用内存大小与虚拟机位长一致。类型指..
2020-05-18 16:06:36
215
原创 JVM源码分析之深入分析Object类finalize()方法的实现原理
“365篇原创计划”第十篇。今天呢!灯塔君跟大家讲:深入分析Object类finalize()方法的实现原理finalize如果类中重写了finalize方法,当该类对象被回收时,finalize方法有可能会被触发,下面通过一个例子说明finalize方法对垃圾回收有什么影响。public class FinalizeCase { private static Block holder = null; public static void main(String[] args) .
2020-05-15 10:49:08
263
原创 猿灯塔-Phaser 使用介绍
原创申明:本文由公众号【猿灯塔】原创,转载请说明出处标注本文将介绍 java.util.concurrent.Phaser,一个常常被大家忽略的并发工具。它和 CyclicBarrier 以及 CountDownLatch 很像,但是使用上更加的灵活,本文会进行一些对比介绍。和之前的文章不同,本文不写源码分析了,就只是从各个角度介绍下它是怎么用的。本文比较简单,我觉得对于初学者大概需要 20 分钟左右吧。其实我对这个需要多少时间很没概念,有没有读者愿意记录下所花费的时间,在评论区反馈一下。使用示.
2020-05-14 11:20:55
224
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人