自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《深入理解Java虚拟机》学习记录

学习笔记目录1.Java内存区域与内存溢出异常1.1.运行时数据区1.1.1.程序计数器1.1.2.Java虚拟机栈和本地方法栈1.1.3.Java堆1.1.4.方法区与常量池(静态常量池与运行时常量池)

2020-09-12 21:15:18 137

原创 SpringBoot+WebMagic+Vue多数据源搭建一个小说网站(项目复盘)

经过一个多月的时间,终于把这个项目做完了,现在进行项目复盘。项目框架:Springboot、webmagic、vue、quarzt、druid、mybatis-plus、dynamic数据库:mysql项目环境:jdk8,centos,docker技术选型:主体框架为SpringBoot由于SpringBoot内部集成了很多框架使用起来会简便不少数据获取:使用java爬虫框架WebMagic,使用该框架只需要定制爬虫规则以及数据持久方式就能过使用了,不需要定制专用的请求前端框架采用Vue,其

2020-08-02 13:53:39 992 2

原创 SpringAOP编程实现

我百度过AOP的实现方式好像有四种第一种 静态AOP:在编译期,切面直接以字节码的形式编译到目标字节码文件中优点:被织入的类性能不受影响。缺点:不够灵活第二种 动态AOP(JDK动态代理) :在运行期间,目标类加载后,为接口动态生成代理类,将切面植入到代理类中。Java从1.3引入动态代理,实现原理是为被代理的业务接口生成代理类,将AOP逻辑写入到代理类中,在运行时动态织入AOP...

2020-01-12 14:50:12 182

原创 手写Spring之DI依赖注入

之前写过了spring的IOC实现方式,现在则写DI依赖注入的实现方式贴类图由于在实现完DI进行测试的时候,会用到junit包,所以在pom.xml导入依赖 <!--SpringDI--> <dependency> <groupId>junit</groupId> <ar...

2020-01-11 19:27:38 230

原创 手写Spring之IOC基于注解动态创建对象

在上一篇使用了基于xml文件创建对象的方式实现了IOC,这个是基于注解实现的方式。废话不多说了,直接看代码!!上类图此次实现不需要导入第三方依赖,先创建自己的注解MyComponent注解内容如下 package com.spring.ioc.ioc_annotation.annotation;import java.lang.annotation.ElementType;im...

2020-01-11 19:03:16 458

原创 手写Spring之IOC基于xml动态创建对象

现库存的IOC代码写了两种实现方式,一种是基于xml文件动态创建对象的实现方式,一种是基于注解创建对象的实现方式,先把这篇基于xml文件创建对象的实现方式写出来,再去发注解的。先发类图先创建一个MAVEN工程,在pom.xml导入需要用到的依赖,在这里只需要导入解析xml文件的dom4j的依赖即可 <!--解析xml--> <dependency>...

2020-01-11 18:31:10 174

原创 MyBaits(简易)手写实现

手写思路1.读取XML文件MyBatis的配置文件有两种:一种是mybatisConfig.xml,配置文件的名称不是固定的,它配置了全局的参数的配置,全局只能有一个配置文件一种是Mapper.xml,它配置多个statement,也就是多个sql,整个MyBatis中可以有多个。通过mybatis配置文件得到SqlSessionFactory通过SqlSessionFactory...

2020-01-11 17:37:12 145

原创 对象的存活与死亡(引用计数算法和可达性分析算法以及回收方法区)

在堆中存放着Java世界中几乎所有的对象实例,垃圾收集器在堆进行回收钱,第一件事情就是要确定这些对象之中哪些对象还"存活",哪些已经"死去"(这里的死去即不可能再被任何途径使用的对象)而判断对象是否存活或者死亡,当前主流有两种算法实现引用计数算法可达性分析算法1.引用计数算法引用计数算法大致思路及特征:在对象中添加一个引用计数器,每当一个地方引用到它时,计数器就加一,当引用失效时,计数器就减一,任何时刻计数器为零的对象就是不可能再被使用的,也就说明这个对象已经死了。实现引用计数算法需要占用

2020-09-26 19:11:59 260 1

原创 垃圾收集器与内存分配策略

垃圾收集(简称GC)在java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈这三个区域随着线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本在类结构确定下来是酒已知的因此这几个区域的内存分配和回收都具备确定性,在这几个区域内不需要过多的考虑如何回收的问题,当方法结束或者线程结束时,内存自然就跟随者回收了而Java堆和方法区这两个区域则由很显著的不确定性:一个接口的多个实现类需要处理的内存可能会不一样一个方法所

2020-09-26 16:27:52 203 1

原创 方法区与常量池(静态常量池与运行时常量池)

方法区方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已经被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。他也有一个别名为"非堆",目的是与Java堆区分开来。方法区和永久代在JDK8以前,很多把方法区和永久代混为一谈,本质上这两者并不是等价的,仅仅是因为当时的HotSpot虚拟机设计团队选择吧收集器的分代设计扩展至方法区,或者说使用永久代来实现方法区而已,这样使得HotSpot的垃圾收集器能够像管理Java堆一样管理方法区的内存,省去专门为方法区编写内存管理的

2020-09-12 21:03:48 780 1

原创 Java堆

Java堆特点:Java堆是虚拟机所管理的内存中最大的一块内存区域他是所有线程共享的内存区域它的生命周期会随着虚拟机的启动而创建,关闭而销毁在Java世界中,几乎所有的对象实例都在这里分配内存它被实现的时候,可以被定义为固定大小的,也可以被定义为可扩展的,当前主流都是可扩展的(通过**-XMS和-XMX**设定)它可以分为很多区域,比如新生代、老年代、永久代,无论分多少个区域其存储的对象只会是实例对象,而创建这些区域的目的是为了更好的进行内存回收垃圾收集器Java堆也是垃圾收集器管理的

2020-09-12 19:56:16 144

原创 Java虚拟机栈和本地方法栈

Java虚拟机栈Java虚拟机栈它也是线程私有的一块内存区域,所以生命周期自然和线程相同。每个方法在执行的时候,Java虚拟机栈都会同步生成一个栈帧,然后再将这个栈帧压入Java虚拟机栈中,所以Java虚拟机栈主要保存的就是这个栈帧。栈是一种先进后出的数据结构,所以Java虚拟机栈他只会先处理位于栈顶的栈帧,而位于栈底的栈帧(也就是最先入栈的栈帧)只会等待其上面的栈帧处理完毕了才会被处理。当一个方法从调用到执行完毕,就意味着一个栈帧从Java虚拟机栈中从入栈到出栈的过程。栈帧栈帧主要保存局部变

2020-09-12 19:35:38 2504 5

原创 程序计数器

程序计数器在运行时数据区中,它是线程隔离的一块内存区域,即它是线程私有的内存区域同时它是一块很小的内存区域,可以看做当前线程所执行字节码的行号指示器。即,程序计数器就是用于存放下一条指令所在单元的地址的地方字节码指示器Java虚拟机通过改变计数器的值来选取需要执行的字节码指令,所以它也是程序控制流的指示器,自然Java程序中的分支、循环、跳转、异常处理、线程恢复等都需要依赖这个计数器来完成。例子,线程恢复Java多线程是通过多个线程之间的轮流切换、分配处理器执行时间的方式实现的。在任何一个确定

2020-09-12 14:05:27 206

原创 JVM运行时数据区

运行时数据区Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域程序计数器Java虚拟机栈本地方法栈Java堆方法区如下图,该图5个区域就是上面描述的数据区域这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。其中,这5个内存区域中,可以再进行细分线程私有顾名思义,就是线程私有的内存区域程序计数器Java虚拟机栈本地方法栈线程共有顾名思义,线程共用的内存

2020-09-12 13:22:56 100

原创 Windows安装nacos-1.3.2教程及采坑记录

首先到官网下载安装包附上链接:https://github.com/alibaba/nacos/releaseswindows的下载完成后直接解压就可以了(注意,下载的非常慢)解压后文件目录是这样的,注意我画红框的3个文件夹,这3个文件夹解压后是没有的,其中plugins是我自己创建的然后里面放mysql的驱动,因为要弃用nacos的内嵌数据库,换成mysql8.0+数据库;然后logs和data好像是启动后自动生成的。下面是重点修改配置修改在conf目录里的application.pro

2020-08-27 10:09:20 1588 7

原创 设计模式之单例模式

在多线程环境下,第一个线程调用了getSingleton方法,该线程进入判断后,还没生成实例对象的时候,资源就被另一个线程占用了,而另一个线程同样也调用了这个方法,然后一路执行完毕,这个时候就有了一个实例对象了,接着资源重新分配到第一个线程,它继续执行之前未完成的步骤,又创建了一个实例对象,这个时候就有了2个实例对象了,所以它是线程不安全的

2020-08-20 17:34:28 133

转载 Linux安装git

https://www.jianshu.com/p/2df3b3cfbc76

2020-08-03 13:49:57 83

原创 Linux安装docker教程

1.安装环境在这里用的是centos7进行安装docker,要求系统为64位、系统内核版本为3.10以上uname -r2用yum源安装,简单快捷,懒人的最佳选择,手动我也懒得搞了yum -y install docker安装过程我就不截图了安装完啥都不用管了,启动就完事了3.启动dockersystemctl start docker4.查看运行状态systemctl...

2020-08-03 13:49:14 154 1

原创 SpringCloud概括

SpringCloud是在SpringBoot实现的微服务架构,它为微服务架构涉及的配置管理、负载均衡、断路器、服务治理、智能路由、控制总线等操作提供了简单的开发方式。SpringCloud子项目简介SpringCloud Config集中配置管理工具,分布式系统中统一的外部配置管理,默认使用Git来存储配置,可以支持客户端配置的刷新及加密、解密操作SpringCloud Netflix...

2020-08-03 13:49:00 113

原创 小说网站复盘三(vue前端页面)

由于我用的是前后端完全分离,所以是创建了一个vue项目,然后代码写完后打包,将打包后的文件copy到后端web模块中的静态文件里去了。前端使用的是vue+emelent-ui下面附上一些代码:import Vue from 'vue'import Router from 'vue-router'import HelloWorld from '@/components/HelloWorld'//后面这里引入可以被用户访问的页面组件import Home from '../components/

2020-08-02 14:51:02 1429

原创 小说网站复盘二(mysql多数据源)

docker虚拟化mysql主从请参考这篇文章:docker配置Mysql8.0主从下面放配置文件mybatis-plus: configuration: map-underscore-to-camel-case: false global-config: db-config: id-type: auto capital-mode: true type-aliases-package: sx.book.web.pojo mapper-locatio

2020-08-02 14:45:53 719

原创 小说网站复盘一(webmaigc获取小说数据)

前面已经介绍了项目的框架,这一篇主要介绍使用webmagic爬虫获取数据。这里只会贴上关键代码,如果想看全部代码可以到github上面去下载。首先,使用webmagic框架只需要定制爬虫规则就可以了,但是解析爬虫下载的html页面,就需要解析工具了,这里我用的Jsoup。下面贴一个例子//排行榜页面 private void FirstURL(Page page) { try { //获取当前的url String link

2020-08-02 14:32:49 354

原创 VirtualBox关闭防火墙

VirtualBox关闭防火墙的方式和vm不一样在这里插个眼systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall开机启动

2020-01-14 16:28:43 2730

空空如也

空空如也

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

TA关注的人

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