- 博客(138)
- 资源 (8)
- 收藏
- 关注
原创 阿里云服务器部署可道云
1. 安装宝塔面板1.1 安装命令Centos安装脚本 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.shUbuntu/Deepin安装脚本 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo b
2022-02-21 16:17:57 1321
原创 easy-job:最简单的后端零代码插件
1. 传统开发模式存在的问题几乎每一个后端coder的工作,都是在围绕单表增删改查玩。很多时候为了支持业务,或是开了个新服务,或是建了一张新表,或是单表增删改查接口来一套,总之莫名其妙的就得上个线。俗话说的好,频繁上线一定会带来意想不到的事故。于是,各种各样的解决方案应运而生。2. 自研easy-job插件的背景我一直在想有没有一个最佳的解决方案,直到发现了腾讯出的apijson。然而,一通操作猛如虎之后,我还是被劝退了。apijson存在的几个问题:1.代码侵入性极强;2.学习成本较高;3.还是得
2021-05-29 21:59:24 2726 1
原创 Redis学习日记
背景Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库、并提供多种语言的API。它通常被称为数据结构服务器,因为值可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)、和有序集合(sort sets)。简介Redis是完全开源的,遵守BSD协议、是一个高性能的key-value数据库。Redis与其他key-value缓存产品有以下三个特点:Redis支持数据的持久化、可以将
2020-12-01 14:17:21 286
原创 教育版idea下载
曾经,我也是个eclipser。出于工作的需要,被迫转了idea。后来,就被各种激活码到期恶心到了。破解版…激活码…不厌其烦。直到有一天,idea官方彻底封杀了一大堆插件、破解版、激活码。当我即将放弃idea转回eclipse时,我在idea官网看到了希望的曙光。点击Find your IDE后进入下载界面:点击download,进入真正的下载界面:看到这个界面,别慌,往下拉拉进度条:选择自己想要的版本,然后下载就可以了。不说了,真香(手动滑稽)。贴个下载地址:windows
2020-07-28 11:16:08 6593
原创 RestTemplate工作原理及拦截器的使用
RestTemplate的使用new RestTemplate().getForObject("http://www.baidu.com", String.class);源码分析getForObject()方法源码: @Override @Nullable public <T> T getForObject(String url, Class<T> responseType, Object... uriVariables) throws RestClientExcept
2020-06-24 15:56:50 1803
原创 AutowiredAnnotationBeanPostProcessor工作原理
SpringBoot中不需要再使用PropertyPlaceholderConfigurer来注入属性了,而是用@Value等注解替换了。@Value注解的解析和@Autowired注解用了同一套逻辑。所以,我们一起通过分析@Autowired注解的解析过程来理解@Autowired和@Value的工作原理。代码分析@Autowired注解工作原理@Autowired注解是由AutowiredAnnotationBeanPostProcessor类来解析的,它的类声明如下:public class
2020-06-24 14:56:57 2584
原创 PropertyPlaceholderConfigurer工作原理
类继承关系代码分析PropertiesLoaderSupport类是一个抽象类,定义了一些基础性的操作,可以从声明的方法上看出来:往下走,就看出东西来了。PropertyResourceConfigurer类是非常重要的一环,类声明如下:public abstract class PropertyResourceConfigurer extends PropertiesLoaderSupport implements BeanFactoryPostProcessor, PriorityOrd
2020-06-23 11:40:42 606
原创 @StreamListener注解的工作原理
一直被@StreamListener注解带来的恐惧所支配。今天来揭开它的面纱。MAVEN引入相关jar包(版本2.0.1) <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-kafka</artifactId> </dependency>@StreamListener
2020-06-22 19:06:13 15451 2
原创 BeanWrapper的使用
@Componentpublic class AppBoot implements CommandLineRunner { private String id; @Override public void run(String... args) throws Exception { BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this); bw.setPropertyValue("id", "111111.
2020-06-22 15:30:12 523
原创 负载均衡
定义负载均衡在系统架构中非常重要,并且不得不实施,是对系统的高可用、网络压力的缓解和处理能力扩充的重要手段之一。分类实现负载均衡的方式(1)硬件负载均衡:通过在服务器节点之间按照专门用于负载均衡的设备,比如F5等;(2)软件负载均衡:通过在服务器上安装一些用于负载均衡功能或模块等软件来完成请求分发工作,比如Nginx等。实现负载均衡的端点(1)服务端负载均衡硬件负载均衡的设备或者软件负载均衡的软件模块都会维护一个下挂可用的服务端清单。通过心跳检测来提出故障的服务节点以保证清单中都是正常可以访
2020-06-22 11:22:02 195
原创 Springboot自动配置源码阅读
1. MAVEN引用<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4
2020-06-19 16:44:09 188
原创 k8s学习笔记二
基本概念k8s集群主要包含三个平面:控制层面,计算层面和数据层面。控制层面是整个集群的大脑,负责控制、调度集群资源,包括kube-apiserver、kube-controller-manager、kube-scheduler三个组件;计算层面负责运行工作负载,是控制平面调度的对象,包括kubelet、kube-proxy组件;数据层面用来存储整个集群持久化数据,比如我们提交的配置文件以及集群状态信息等,指etcd集群。cluster:kubernetes集群本身;namespace:k8.
2020-06-09 16:21:32 359
原创 k8s学习笔记一
服务模型图服务进程假设现在有五台机器,我们给其中的三台安装了Mysql,那么这三台机器上就有了Mysql的服务进程,我们把三个服务进程叫做K8s的一个Service。在实际的应用中,通过在一台机器上部署多个docker实例来达到这种效果。服务隔离然后给Service贴个标签,比如起个名字“MySQL_XXX”。那么,在k8s容器中,它就是唯一确定的一个服务,也就是k8s的一个pod对象,我们通过虚拟ip+端口号的方式可以访问到这个Servidce。k8s通过贴标签的方式实现了应用间的隔离。服务通
2020-06-09 14:55:13 358
原创 easy-drools
不知不觉间,开源项目已经做了快两年了。涉及的东西也越来越多。我始终坚持着一个念头,持续学习。此生最庆幸的一件事,便是我所为之工作的,正好是我喜欢的。说下背景吧,公司刚好在用规则引擎。然后就想着,做一个东西出来,简化开发。还是挺有意思的吧。MAVEN引入老规矩,还是先通过maven把easy-drools引入到项目中 <dependency> <groupId>io.github.xiaoyudeguang</groupId> <art.
2020-05-31 14:42:57 260
原创 easy-http
1.克隆项目1.1 项目地址https://gitee.com/xiaoyudeguang/easy-start develop分支1.2 项目结构1.3 pom文件<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta...
2020-04-18 16:15:36 992
原创 cron表达式生成工具
用法和看效果:1. 使用方法package com.zlyx.easy.start.test;import com.zlyx.easy.start.utils.CronUtil.DayCron;import com.zlyx.easy.start.utils.CronUtil.MonthCron;import com.zlyx.easy.start.utils.CronUtil....
2020-03-31 18:53:23 2270
原创 easy-pio
1. 前言 最近,处于工作的需要,老是需要跟excel打交道。找遍了各大论坛,没有找到一个趁手的工具,于是决定自己手写一个。和之前的easy-系列一样,开源出来供大家使用。2. Maven引入 <dependency> <groupId>io.github.xiaoyudeguang</groupId>...
2020-03-15 17:53:49 916
原创 vmware 安装 win10
1. 下载安装vm软件,地址:VM下载2. 下载win10 iso镜像文件 (1) 下载win10安装工具:win10安装工具下载 (2) 下载完成后,选择给其他电脑安装ios文件即可得到win10的iso镜像文件(考验网速的时刻到了)。 ps:试过各种百度出来的镜像文件,发现没有能用的,还是乖乖通过官方方式下载吧。3. 安装win10 ios镜像文件 参...
2020-01-20 11:02:52 3414 1
原创 手写服务器系列(5) 简单服务器优化——复杂请求的支持
上一篇 博客中我们实现了一个简单的服务器,真是极其简单。实际场景中当然不可能只是访问一下http://localhost:8080/。本篇博客,我们的目的是优化简单服务器,让它支持复杂请求。1. 优化HttpRequest 我们先来看看,目前的服务器对复杂get请求的支持。我们通过浏览器访问地址http://localhost:8080/hello.do?id=123...
2019-12-23 17:43:09 148
原创 手写服务器系列(4) 简单服务器
基于上一篇博客继续 往下写。本篇博客我们正式开始写一个简单版本的服务器。1. 思考 我们需要考虑服务器应该具备哪些能力。首先,我们需要一个socket程序接收客户端请求;然后,我们需要给客户端一个返回;最后,我们需要包装一下http消息中携带的参数提供给使用了我们的服务器的上层程序。2. 手写一个简单服务器2.1 HttpRequestpackage com.zlyx....
2019-12-23 15:13:25 305
原创 手写服务器系列(3) TCP服务端识别HTPP请求
问题:http请求到了服务器端变成了什么? 我们启动以下我们的服务端程序,然后通过浏览器请求一下我们的服务器。package com.zlyx.easy.server;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.ne...
2019-12-23 14:59:23 249
原创 手写服务器系列(2) 几种TCP编程接收数据的写法
紧接着上一篇博客,我们这边博客来看看tcp编程接收数据的几种写法。1.InputStream写法(上篇博客的写法):package com.zlyx.easy.server;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Sock...
2019-12-23 14:11:56 199
原创 手写服务器系列(1) 简单TCP编程
我们都知道,客户端与服务端之间的连接是基于TCP的可靠传输。所以,在手写服务器之前,是需要了解这部分内容的。希望这个系列完成后,我们都能有一定的收获。1. 写一个简单的TCP小程序并启动package com.zlyx.easy.server;import java.io.IOException;import java.io.InputStream;import ja...
2019-12-23 14:03:17 365
原创 探索单元测试系列(6) Mock总结
概念 Mock其实是一种思想,一种单元测试的解决方案。 Mock出现之前,我们的单元测试工作量很大,而且往往会受限于开发进程。 Mock很好地解决了局部单元测试的问题,提出了预期返回值并模拟的概念。 目前Mock类库非常之多,实在不知道怎么选择的时候,就算PowerMock吧。不止因为它本身功能的强大,还因为它提供了很好地扩展。后期切换到其他类库也是很方便的...
2019-12-14 14:09:32 158
原创 探索单元测试系列(5) Mock类库之PowerMock
介绍 Mock本身也是单元测试的一种,对于原生的Junit进行了包装升级。比较常见的类库有easymock、jMock、Mockito、Unitils Mock、PowerMock、JMockit等等,其中比较优秀的是easymock、mockito和powermock。 PowerMock本身集成了easymock和mockito,同时,powermock使用一个自定义类加载...
2019-12-14 13:50:13 595
原创 探索单元测试系列(4) Mock对象的各种写法
1. 通过Mockito.mock()来创建假对象package com.example.demo.mock.controller;import com.example.demo.junit.spring.service.JunitDemoService;import com.example.demo.mock.service.MockDemoService;import com.e...
2019-12-14 11:00:05 1188
原创 探索单元测试系列(3) Mockito的简单使用
定义 mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为。意义 传统的单元测试需要保证程序的每一个部分都是就绪的,完整的和可用的。直到程序的各个部分被完全开发完才能进入测试阶段。mock提供了隔离测试的概念,假设A依赖B,只需要将B进行mock,返回期望的结果,就可以让A进行一次完整的单元测试。三个步骤 1. moc...
2019-12-14 10:40:27 261
原创 探索单元测试系列(2) Junit在Spring中使用
编写被测试文件1.Controller类package com.example.demo.junit.spring.controller;import com.example.demo.junit.spring.service.JunitDemoService;import org.springframework.beans.factory.annotation.Autowired...
2019-12-13 19:24:55 111
原创 探索单元测试系列(1) Junit的简单使用
定义这是百度百科对Junit的定义:实操1. 编写被测试类package com.example.demo.junit;/** * Junit演示 * * @ClassName JunitDemo * @Author zhaoguang * @Date 2019/12/13 * @Version 1.0 */public class JunitDemo ...
2019-12-13 15:29:55 151
原创 算法和数据结构(二):算法
接着上篇博客,这篇博客我们一起看看传说中的算法(早知道这么简单,早点看看的话,阿里也就去了,泪奔....)。面试常见的算法分为两种:排序算法和查找算法。1.排序算法面试题目:给定任意的一个无序数组,用 你熟悉的算法做一个排序(建议自己手写一遍,编辑器里敲一遍,别面试时才慢慢想)。1.1 冒泡排序(1)逐个比较相邻的两个元素,将较大的值往后放(2)第一轮比较完最大的元素放数组...
2019-11-29 08:57:48 522
原创 算法和数据结构(一):数据结构
前两天面试阿里,最终死在了算法和数据结构上,痛苦不已。今天下了决心,来撸一把算法和数据结构。 对于计算机来说,只有0110,它是不会关心什么算法,什么数据结构的。那么,谁关心呢?当然是人啊。计算机是很傻逼的东西,它能做什么,完全取决于你想让它做什么。于是,就有了算法和数据结构。数据结构用于存储,算法用于计算。1. 数据结构 在接触算法前,你需要先了解数据结构。数据结构...
2019-11-28 22:00:46 752
原创 JVM和类加载过程
1. JVM内存和操作系统内存关系 操作系统内存也有堆和栈。操作系统的栈由操作系统自己管理。操作系统的堆是开放的。 JVM的内存是操作系统堆中的一块区域。 对于操作系统来说,jvm只是一个普通的程序。 对于java程序来说,jvm是运行java程序的载体。 换言之,类加载过程,其实就是把在操作系统中编译完成的.clas...
2019-11-23 10:38:23 323
原创 几道常见的面试题
1. 一个类的方法执行顺序public class A { static { System.out.println("静态方法执行啦"); } { System.out.println("代码块执行啦"); } public A() { System.out.println("构造方法执行啦");...
2019-11-23 09:59:05 151
原创 微信聊天可以用,QQ聊天可以用,但是浏览器搜索不可用!
早晨起来,开心的打开电脑,打开csdn,继续写我的博客。 一切看起来都是那么和谐,直到我习惯性的搜索某个东西,妈的,我的本本出问题了! 问题描述:微信聊天可以用,QQ聊天可以用,但是浏览器搜索不可用! 难道是浏览器问题?打开软件管家下载个新的浏览器试试?结果.....软件管家直接告我网络无连接。。。。 额.....有点开始焦虑了。为...
2019-11-23 09:08:18 672 1
原创 深入理解Redis原理
Redis简述 Redis是一种内存型的非关系型数据库,因为其优秀的性能,经常被用来做缓存(当然也可以作为一种消息队列)。Redis支持丰富的数据类型:String、List、Set、ZSet和Hash。为了节省内存,Redis的每种数据类型都存在不同的存储策略来满足需要。比如Hash,数据量较少时,采用数组紧密存储的结构,会在数据量增加驾到某个临界点时切换到HashMap的方式。...
2019-11-23 08:39:31 677
原创 深入Redis分布式锁
基础知识Redis提供了函数来支持分布式锁: SETNX key value当且仅当 key 不存在时才能设置成功。设置成功时,返回1;反之,返回0。如果锁设置失败,说明已经有其他任务获取了这把锁,可以通过循环的方式不断地尝试获取锁。问题解答(1)如果获得锁的任务因为不可抗力挂掉了,比如断电停机,怎么保证锁能被释放? 通过设置超时时间来解决...
2019-11-22 08:59:46 148
原创 HashMap源码阅读(JDK1.8)
HashMap实现了Map接口,继承了AbstractMap父类(AbstractMap也实现类Map接口)。HashMap的类声明如下:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {}以下是...
2019-11-15 09:46:22 211
原创 ConcurrentHashMap源码阅读
面试时面试官最常问的几个问题:1. HashMap是线程安全的吗? 答:不是。2. 既然HashMap不是线程安全的,那有什么替代方案? (1)用HashTable,它是线程安全的,但是被弃用了(性能问题被弃用了)。 (2)用HashMap,但是所有调用它方法的地方,都做加锁处理操作。 (3)用ConcurrentHashMap,一了百了。3....
2019-11-09 09:55:57 157
eclipse.epf
2019-12-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人