- 博客(45)
- 收藏
- 关注
原创 Rancher2+K3S单机部署
安装dockeryum install -y docker修改镜像仓库vim /etc/docker/daemon.json{ "registry-mirrors":["https://almtd3fa.mirror.aliyuncs.com"] }sudo systemctl start dockerservice docker restart安装rancherdocker pull rancher/rancher## kubernetes会占用443端口,需
2021-02-08 09:39:33 1613
原创 JavaWeb入门教程
环境安装javaideaJavaWeb架构演变1.MVC架构模式View层。View层即UI层,可采用的技术如JSP,Structs,SpringMVC等Controller层。Controller表示控制器层,可采用的技术,如Servlet/Filter,Spring等Service层。Service层表示核心服务层,向架构上层提供服务DAO层。DAO层表示数据访问层,可采用的技术如jdbc和ORM框架(如Spring JDBC,JPA,Hibernate,Mybatis等)Mod
2021-02-04 11:08:06 422
原创 ubuntu centos Crontab 定时任务
安装#ubuntuapt install cron#centosyum install crontabs基本格式# +---------------- minute 分钟(0 - 59)# | +------------- hour 小时(0 - 23)# | | +---------- day 日期(1 - 31)# | | | +------- ...
2020-03-16 16:27:01 185
原创 Centos 安装 RocketMq
官网和网上的各种教程都有坑,这里提供楼主亲测安装教程1、下载安装前提已经安装java环境,这里不再赘述http://rocketmq.apache.org/docs/quick-start/从官网下载安装包wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-source-rel...
2019-11-01 16:19:59 265
原创 面试被问烂的 Spring IOC(求求你别再问了)
广义的 IOCIoC(Inversion of Control) 控制反转,即“不用打电话过来,我们会打给你”。两种实现: 依赖查找(DL)和依赖注入(DI)。IOC 和 DI 、DL 的关系(这个 DL,Avalon 和 EJB 就是使用的这种方式实现的 IoC):DL 已经被抛弃,因为他需要用户自己去是使用 API 进行查找资源和组装对象。即有侵入性。 DI 是 Sprin...
2019-08-14 17:53:11 188
原创 深入理解 Spring 之 SpringBoot 事务原理
前言今天是平安夜,先祝大家平安夜快乐。我们之前的数十篇文章分析了 Spring 和 Mybatis 的原理,基本上从源码层面都了解了他们的基本原理,那么。在我们日常使用这些框架的时候,还有哪些疑问呢?就楼主而言,楼主已经明白了 IOC ,AOP 的原理,也明白了 Mybatis 的原理,也明白了 Spring 和 Mybatis 是如何整合的。但是,我们漏掉了 JavaEE 中一个非常重要...
2019-08-14 16:39:43 1344 1
原创 深入理解Spring 之 Spring 进阶开发必知必会 之 Spring 扩展接口
# 前言我们在前几篇文章中已经深入了解了 Spring 的 IOC 机制和 AOP 机制,在阅读源码的同时,楼主对 Spring 中设计模式的运用可以说五体投地,还有我们还知道更重要的一点就是:Spring 留给了我们大量的扩展接口供开发者去自定义自己的功能,甚至于 AOP 就是在 Spring 预留的扩展接口中实现的,意思是只要基于 Spring IOC,遵守 Spring 对扩展接口的约定...
2019-08-13 14:22:52 278
原创 自己动手实现一个简单的 IOC
再上一篇文章中,楼主和大家一起分析spring的 IOC 实现,剖析了Spring的源码,看的出来,源码异常复杂,这是因为Spring的设计者需要考虑到框架的扩展性,健壮性,性能等待元素,因此设计的很复杂。楼主在最后也说要实现一个简单的 IOC,让我们更加深刻的理解IOC,因此,有了这篇文章。当然我们是仿照Spring 的 IOC,因此代码命名和设计基本是仿照spring的。我们将分为几步来编...
2019-08-13 10:45:05 205
原创 自己动手模拟spring的IOC
我们这里是模拟spring,主要模拟spring中的IOC功能,所以在此我们一样要在service层中定义dao的实例,当然不用new出来,我们就通过spring的IOC把这里的dao层注入进来。不要忘了对dao提供set。Get方法,因为IOC的底层其实就是利用反射机制实现的,他把dao注入进来,其实底层就是通过反射set进来的。首先我们把我们用的dao、service、entity定义出来:...
2019-08-13 09:52:15 148
原创 Spring+IOC+容器源码分析
Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。本文采用的源码版本是 4.3.11.RELEASE,算是 5...
2019-08-13 09:20:06 193
原创 Centos 安装 Redis
下载 redis解压(注意: dist文件改变了下载地址: https://github.com/MSOpenTech/redis/releases )1、到redis 安装目录下 修改redis.windows.conf#requirepass foobared 修改为 requirepass yourpwd 不能有空格2、启动redis redis-server ...
2019-08-08 11:18:05 126
原创 Centos7 安装SVN
CentOS通过yum安装subversion。1. 安装 yum install subversion2. 建立版本库 svnadmin create /var/svn/svntestcd /var/svn/svntest3. 配置cd /var/svn/svntesta、编辑用户文件passwd,新增两个用户:admin和guest。 (不能由空格,tab) vim ...
2019-08-08 11:12:10 127
原创 Markdown基本语法
基础语法标题Markdown支持6种级别的标题,对应html标签 h1 ~ h6h1h2h3h4h5h6以上标记效果如下:h1h2h3h4h5h6除此之外,Markdown还支持另外一种形式的标题展示形式,其类似于 Setext 标记语言的表现形式,使用下划线进行文本大小的控制这是一级标题这是二级标题这种处理方式在Github的一些开源工程上面比较常见,显而易...
2019-08-08 10:29:08 161
原创 Windows 双网卡路由配置
#删除默认路由route delete 0.0.0.0 ##添加外网路由route add 0.0.0.0 mask 0.0.0.0 192.168.0.1 metric 4 -p##添加内网路由route add 194.168.13.0 mask 255.255.255.0 194.168.13.1 -p##添加内网其他地址映射route add 172.18.16.0 mask...
2019-08-08 10:25:32 866
原创 Centos7 运维常用命令
查看java运行所有程序 ps -ef | grep java | grep -v grep | awk '{print $2}' #kill 所以java程序 ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9查看内存占用最高的程序 ps -aux | sort -k4nr | head -20...
2019-04-22 15:08:01 592
原创 centos7 使用crontab ,tomcat 日志分割脚本 不重启服务
安装 yum install vixie-cron yum install vixie-cron添加作业 crontab -e //编辑某个用户的cron服务 0 * * * * /data/shell/split_catalina.sh //每小时执行开机启动 vim /etc/rc.d/rc.local /sbin/service crond start常用...
2019-04-22 11:21:08 286
原创 CentoOS服务器环境安装
java安装在/usr/目录下创建java目录 [root@localhost ~]#mkdir /usr/java [root@localhost ~]#cd /usr/java下载jdk,然后解压 wget --no-check-certificate --no-cookie --header "Cookie: oracl...
2019-04-10 16:00:58 572
原创 Java 11 新特性
今天我们来看一下Java 11到底是什么、他有什么特别的、到底要不要升级到Java 11。Java 11有什么特别的在Oracle官网中,进入下载页面,第一个可供下载的JDK版本已经提换成了Java SE 11 (LTS),这里的LTS表示Long-Term-Support。本次发布的Java 11和2017年9月份发布的Java 9以及 2...
2019-04-08 10:13:40 194
原创 Java 12 新特性
在 Java 9 之前,当一个版本被宣布为首选版本,存在一个“培育”(bedded-in)新 GA 版本的重叠期。在此期间,上一个版本将会继续进行免费更新。为确保新旧版本间的干净切换,即便旧版本已不再是首选版本,通常也会继续维护 12 个月以上。但是随着 Java 版本发布更改为遵循严格的时间表后,事实上宣告了传统的免费支持期将寿终正寝。Oracle 对 Java 8 的官方支持时间持续到 2...
2019-04-08 09:32:19 142
原创 桥接模式
桥接模式桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同...
2019-04-05 19:30:51 276
原创 建造者模式
建造者模式建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。介绍意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:主要解决在软件系统中,有时候面...
2019-04-04 18:52:12 208
原创 代理模式、动态代理模式
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。介绍意图:为其他对象提供一种代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控...
2019-04-03 19:24:38 347
原创 单例模式
单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一...
2019-03-31 19:13:11 167
原创 抽象工厂模式
抽象工厂模式抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。介绍意图:提供一个创建一系列相关或相互依赖对象的接口,而...
2019-03-31 18:52:21 157
原创 抽象工厂模式
在工厂方法模式中,我们使用一个工厂创建一个产品,也就是说一个具体的工厂对应一个具体的产品。但是有时候我们需要一个工厂能够提供多个产品对象,而不是单一的对象,这个时候我们就需要使用抽象工厂模式。在讲解抽象工厂模式之前,我们需要厘清两个概念:产品等级结构。产品的等级结构也就是产品的继承结构。例如一个为空调的抽象类,它有海尔空调、格力空调、美的空调等一系列的子类,那么这个抽象类空调和他的子类就构...
2019-03-31 16:07:14 164
原创 工厂方法模式
一、问题在前一章《设计模式读书笔记—–简单工厂模式》中通过披萨的实例介绍了简单工厂模式。在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨。如果利用简单工厂模式,我们需要两个不同的工厂,NYPizzaFactory、ChicagoPizzaFactory。在该地域中有很多的披萨店,他们并不想依照总店的制作流程来生成披萨,而是希望采用他们自己的制作流程。这...
2019-03-31 15:50:18 156
原创 简单工厂模式
在设计原则中有这样一句话“我们应该针对接口编程,而不是正对实现编程”。但是我们还是在一直使用new关键字来创建一个对象,这不就是在针对实现编程么?针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。入股代码是针对接口而写,那么可以通过多态,它可以与任何新类实现该接口。但是,当代码使用一大堆的具体类时,等于是自找麻烦,因为一旦加入新的具体类,就必须要改变代码。在这里我们希望能够调用一个简单的方...
2019-03-27 23:23:34 179
原创 Spring Bean 生命周期
前言Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。首先看下生命周期图:再谈生命周期之前有一点需要先明确:Spring 只帮我们管理单例模式 Bean 的完整生命周期,对于 prototype (原型模式:多例)的 bean ,Spring 在创建好交给使用者之后则不会再管理后续的生命周期。注解方式...
2019-03-26 20:18:33 143
原创 Java垃圾回收(GC)机制详解
一、为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。二、哪些内存需要回收?哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。那么如何找到这些对象?1、引用计数法这个算法的实现...
2019-03-25 21:01:01 181
原创 线程池原理
前言平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的《阿里巴巴 Java 手册》里也有一条:可见线程池的重要性。简单来说使用线程池有以下几个目的:线程是稀缺资源,不能频繁的创建。 解耦作用;线程的创建于执行完全分开,方便维护。 应当将其放入一个池子中,可以给其他任务进行复用。线程池原理谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个...
2019-03-25 15:48:20 184
原创 红黑树
一、在理解红黑树之前,先看一些二叉查找树二叉查找树特性:左字数上所有的节点的值都小于或等于他的根节点上的值 右子树上所有节点的值均大于或等于他的根节点的值 左、右子树也跟别为平衡二叉树 举个二叉树的例子: 可以看到如果要...
2019-03-25 09:33:52 135
原创 HashMap、ConcurrentHashMap 原理分析
前言Map 这样的Key Value在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于数组 + 链表组成的,不过在 jdk1.7 和 1.8 中具...
2019-03-24 20:33:57 138
原创 synchronized 关键字原理
众所周知synchronized关键字是解决并发问题常用解决方案,有以下三种使用方式:同步普通方法,锁的是当前对象。 同步静态方法,锁的是当前Class对象。 同步块,锁的是()中的对象。实现原理:JVM是通过进入、退出对象监视器(Monitor)来实现对方法、同步块的同步的。具体实现是在编译之后在同步方法调用前加入一个monitor.enter指令,在退出方...
2019-03-24 19:35:33 150
原创 设计一个秒杀系统
具体实现参考秒杀架构实践主要做到以下两点:尽量将请求过滤在上游。 尽可能的利用缓存(大多数场景下都是查多于写)。常用的系统分层结构:针对于浏览器端,可以使用 JS 进行请求过滤,比如五秒钟之类只能点一次抢购按钮,五秒钟只能允许请求一次后端服务。(APP 同理)这样其实就可以过滤掉大部分普通用户。但是防不住直接抓包循环调用。这种情况可以最简单的处理:在Web层通过...
2019-03-24 19:32:33 151
原创 非阻塞同步算法与CAS(Compare and Swap)无锁算法
锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用户态...
2019-03-24 18:59:24 176
原创 centos7 安装 svn
CentOS通过yum安装subversion。1. 安装# yum install subversion2. 建立版本库svnadmin create /var/svn/svntestcd /var/svn/svntest3. 配置cd /var/svn/svntesta、编辑用户文件passwd,新增两个用户:admin和guest。 (不能由空格,tab)...
2019-03-12 13:55:16 156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人