自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (3)
  • 收藏
  • 关注

原创 mac M1 安装nacos

mac m1 docker 安装nacos 并配置mysql本地存储, 容器访问本地使用“host.docker.interna” 变量,不用担心网络环境变动

2023-07-09 16:41:49 2372

原创 如何mock当前类的私有方法

java、mockito单元测试、mock当前类的私有方法

2023-01-12 12:10:44 13344 2

原创 java抽象类可以实现接口吗?

例子来先看下面的图:ps:可以发现一个抽象类可以实现接口,并且完全不会提示你去实现接口。我觉得应该是因为抽象类本身就是抽象的,不能被实例化。即使这里实现了接口的方法也一样可能被具体的子类重写,所以没有提示的意义了。但是你硬是要实现这个接口,当然也是可以的。 */public abstract class Abstrate implements Power12v { protected void doSomething(){ System.out.println("AAA

2021-10-21 16:48:20 1862

原创 java设计模式之模板

背景按理说如果被人写的好,那我还写个啥子?没啥,就是感觉自己写一遍能记得更清楚,反正又不发出去。模板的定义,大概就是某件事情,大家大部分步骤是一样的,甚至某些步骤的做法是一模一样的。这时候就有人把这个事情抽象出一个模板来了,方便后面的人按照模板去完成。定义一个操作中的算法骨架,而将一些实现步骤延迟到子类中。它使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。它的要义就是定义算法骨架,让子类自己实现。情景比方新人入职步骤:交必要的入职材料给hr(入职流程审核需要),入职体检,去公司

2021-10-21 10:03:09 219

原创 java设计模式之适配器

背景模式定义:把一个类的接口,变换成客户端所期待的另一种接口,从而使原来因接口不匹配而无法一起工作的两个类能够一起工作,又称为转换器模式、变压器模式、包装模式。我突然明白了,为什么官方的解释总是那么地抽象,很多时候难以理解。大概是因为他们不仅要从众多的例子中抽象出一个概念,更要适用所有情形。好吧,真是难为他们了。情景现在有220V的电源,你有12v的笔记本电脑需要充电,但是你没有12v的电源。这时候你需要一个适配器,把220v电源输出的电流转为12v的电流。220V的电源接口类和实现类(面向

2021-10-20 14:06:40 257

原创 java设计模式之工厂模式

背景凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。普通工厂场景:富士康生产苹果手机,规格有13min、13、13pro(13proMax太贵了不考虑,哈哈!)。不同规格苹果手机的共同接口:/** * 描述:公共接口 * <p>作者: aliyu * <p>创建时间: 2021-10-15 5:46 下午 */public interface Iphone { public String getName();}具体

2021-10-19 14:54:29 166

原创 java设计模式之代理

什么是代理模式?其实和生活中的“代理商”,“代理人”意思是一样的。简单来说,就是自己想做的事情,因为某些原因无法直接做,必须交由其他人“代理”来实现。例子很多,就不举例子了。重点是要明白它能够做些什么,以及怎么做的。至于什么时候用,得由自己判断。静态代理我们先通过一个静态代理的简单示例,初步了解代理模式。情景:就好比猎头给公司招人。公司是招人的”实际对象”,猎头是负责招人的“代理对象”。定义代理人和真实对象的共同接口,公司和猎头需要共同约定,猎头负责代理的范围(具体做哪些事情)。...

2021-10-15 16:17:38 145

原创 策略模式简述

什么是策略模式?主要在“策略”两个字,当我们在做一件事有多种方法(做这件事只能用一个方法)。比方我们要去旅行,可以选择汽车、火车、飞机、自驾,我们会选择其中一种而不是多种结合。更恰当的例子,比方客户买了东西下单,我们负责计算应付金额。对于普通用户、会员、高级会员,他们的优惠方式是不同的,而且通常情况下都只能享用一种优惠。使用的场景①多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。②需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现

2021-10-14 18:12:48 107

原创 java程序员首次使用mac M1

背景都说mac电脑更适合程序员,刚好笔记本电脑到了更新换代的时候。M1芯片出来一年多的时候,觉得软件适配差不多了,于是入手!从哪里下载软件从appsotre上下载的软件几乎没有M1标志,下载的软件可能不兼容m1。所以推荐以下地址:https://www.macwk.com/这个地址几乎都是免费,只有少部分需要积分https://sw.mac361.com这个地址几乎都是要积分,很少有免费。下软件的话,第一选择官方,找到m1标志的软件包,第二选择macwkmac的一些基本配置mac创建快

2021-08-31 03:42:40 2487

原创 IDEA快速实现Docker镜像部署运行(for mac M1)

背景mac m1的docker 怎么安装可以看我之前的文章。主要是换了mac之后,如idea 连接docker ,实现idea上 从操作maven打包jar ,配合dockfile操作docker构建镜像,创建容器,运行容器的过程。也就是idea上可以实现,开发、打包,部署到远程服务器并运行的过程。如何docker开启远程连接服务让idea可以访问并操作docker。基于mac的docker for mac本身不支持远程访问,需要依赖一款名叫 socat的网络工具提供的镜像来做远程访问。非容器方式

2021-08-11 02:10:31 2960 3

原创 Mac M1 docker安装和配置阿里源

背景换了mac电脑,还是M1的,注定是要一步步填坑了。下载安装docker特别的,docker在mac上可以直接运行,不需要装虚拟机。找到M1版的docker 下载地址:https://desktop.docker.com/mac/stable/arm64/Docker.dmg地址中有arm64字样,说明下对了。看到了么,dmg结尾的和mac应用一样的安装方式。安装成功后:它提示的步骤我没有走,直接跳过了。打开终端,输入:docker pull redis:6.0 。可以正常拉取镜像配

2021-08-11 00:49:59 1776

原创 插入百万数据优化

背景终于遇见了百万级数据的项目,很简单的一个单表查询,索引加上去之后还是20多秒。没办法只得周末的时候研究一下百万级数据查询的优化。首先第一步就是先插入百万级的数据。我刚开始使用的方法是存储过程,想着存储过程会快一些,也更通用一些。没想到500万的数据既然插入了2小时!!!于是继续百度,看文章,分析,总结,思考。总算确定了实现的方式:多值表插入(insert values 值集1,值集2)、多sql一起提交。1、一个sql语句拼10个value(根据mysql最长能支持的sql长度和自己的查询字段长

2021-06-29 00:19:45 948 1

原创 SpringSecurity整合springBoot、redis——实现登录互踢

背景基于我的文章——《SpringSecurity整合springBoot、redis token动态url权限校验》。要实现的功能是要实现一个用户不可以同时在两台设备上登录,有两种思路:(1)后来的登录自动踢掉前面的登录。(2)如果用户已经登录,则不允许后来者登录。需要特别说明的是,项目的基础是已经是redis维护的session。配置redisHttpSession设置spring session由redis 管理。2.1去掉yml中的http session 配置,yml和注解两者只选其

2021-05-09 22:30:02 2126 5

原创 SpringBootTest注解测试service层

背景使用@SpringBootTest注解对一个service进行单元测试,启动单元测试时会启动项目的上下文。相当于运行项目启动类后,再调用service的接口。生成单元测试类选择要测试的serviceImpl,右键生成测试类,选择junit5生成的测试类如下:class UserPayServiceImplTest { @Test void pay() { }}加入@SpringBootTestMyframeApplication对应项目的启动类。如果不写这个

2021-03-26 16:03:51 5924

原创 SpringSecurity整合springBoot、redis token动态url权限校验

背景简单先说一下需求吧,这样也好让看的人知道到底适不适合自己。1、实现自定义的登录认证。2、登录成功,生成token并将token 交由redis管理。3、登录后对用户访问的接口进行接口级别权限认证。springSecurity提供的注解权限校验适合的场景是系统中仅有固定的几个角色,且角色的凭证不可修改(如果修改需要改动代码)。@PreAuthorize("hasAuthority('ROLE_TELLER')") public Account post(Account account, do

2021-02-18 00:38:37 3361 5

原创 SpringBoot Http getMapping、postMaping等详细解析

背景一直以来对http各种请求controller层该如何处理,总是弄不大明白。于是决定自己写一些测试来总结一下。项目环境:springBoot、swagger。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.3.4.RELEASE

2021-01-15 11:32:08 7159

原创 SpringBoot 参数校验

背景参考地址:https://mp.weixin.qq.com/s/lcXIl2ifr3OmiSOPdaXLnw通过注解实现参数校验。单个参数校验/** * controller 上必须加 @Validated ,同时NotNull和 RequestParam本身的非空冲突 * 加 @Validated之后,并不意味着其他类型参数校验可以不用@Validated * @param id * @throws Exception */ @ApiOper

2020-11-03 17:32:43 265

原创 docker-compose搭建rocketmq双主模式

背景项目据说需要使用消息中间件rocketmq,所以需弄个简单示例。至于为啥用docker-compose,那当然是因为它可以整体部署啦。经过这次经历,觉得很有必要将官方的文档路径记录下来。博客上每个人都是以自己的环境搭建的,很多情况下都不能完美符合自己的环境。只能通过多个博客以及相关官方文档,相互印证,得出符合自己的配置。rocketmq简单了解:1 什么场景需要使用消息中间件用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。2 生产者消息生产者,声明自己是消息生成者。一般由业务系

2020-10-20 20:02:40 1145 4

原创 logback多环境配置文件

背景记录一下,针对开发、测试、生产多环境下的日志文件配置不同日志级别的日志对应不同的日志文件日志文件配置结构appender用于根据不同的日记级别定义的不同的日志处理方式(日志输出级别 trace > debug > info > warn > error )。比方开发环境dev的日志处理方式就是显示在控制台就可以了:<!--控制台输出appender--> <appender name="CONSOLE" class="ch.qos.log

2020-10-12 14:16:31 921

原创 最新IDEA快速实现Docker镜像部署运行

背景使用idea配合docker,实现从javaweb开发,部署,运行全过程。环境:已经配置好的docker、已经安装好的mysql8容器、一个springBoot 框架的web项目(内含swagger,便于测时)开启Docker的远程连接网上的方法找不到对应的docker.service文件,可能版本或者安装方式不同。通过 systemctl status docker 查找docker.service文件位置:修改/etc/systemd/system/docker.service文件:

2020-09-28 12:00:36 1641

原创 使用finalshell出现的问题

问题1 连接不成功FinalShell 连接错误:认证失败连接成功channel is not opened.解决:修改文件位置:vi /etc/ssh/sshd_config把#UseDNS yes修改为UseDNS no 然后,重启ssh服务systemctl restart sshd问题2:打开后没反应,界面出不来运行 java -jar finalshell.jar 提示“监听mon端口失败”猜想是端口冲突问题,重启电脑后解决...

2020-09-27 22:32:32 10967 5

原创 可能是目前最好的idea类和方法注释

背景java类注释:文件生成时需要注释。文件修改时需要注释(有时候我们会复制其他的文件过来作为模板,这时候的注释需要重新生成)。java方法注释:当我们修改一个方法,或者这个方法的类并不是我们本人创建时,应当注释说明方法的作者,以及创建时间。类创建时注释注:setting-editor- file and code templates -includes -file header内容:/**@author: ${USER}@create: ${YEAR}-${MONTH}-${D

2020-09-17 15:30:17 221

原创 idea install 时提示jdk的某个jar包的包不存在

这里写自定义目录标题背景解决问题背景重装的系统,新导入的项目。正常编译能通过,但是clean install就提示包不存在。奇特的是,提示的时jdk库的包。解决问题注: 后来注意到这个额外的类库里面是11(估计是新版本的jdk),而不是我是用的jdk1.8打开下面配置,配置项目的sdk版本为1.8:最终解决了问题。...

2020-09-16 14:45:05 418

转载 centOS离线安装docker

1.从官方下载Docker安装包并上传至虚拟机https://download.docker.com/linux/static/stable/x86_64/2.解压安装包tar -xvf docker-18.06.1-ce.tgz3.将解压出来的docker文件内容移动到 /usr/bin/ 目录下cp docker/* /usr/bin/注:感觉应该可以改为 cp docker/* /usr/bin/docker4.将docker注册为service服务vim /etc/systemd/s

2020-08-10 16:20:01 181

原创 java注解完整实例

背景java注解,网上的实例千篇一律,感觉大多都没有抓到重点。最糟糕的是,示例不全,不能完全让别人把示例做出来。起因:希望通过自定义一个字段校验的注解,来理解注解。什么是注解意如其名,其本来的意思就是用来做标注用:可以在类、字段变量、方法、接口等位置进行一个特殊的标记,为后续做一些诸如:代码生成、数据校验、资源整合等工作做铺垫。注解一旦对代码标注完成,后续我们就可以结合Java强大的反射机制,在运行时动态地获取到注解的标注信息,从而可以执行很多其他逻辑,完成我们想要的自动化工作。总的来说就是先标

2020-07-08 17:32:49 1270

原创 记一次boot+dubbo+mokito 单元测试经历

背景项目使用的是boot+dubbo+mybatis的框架。之所以要研究单元测试,并不是因为要自动化测试、提高代码质量、测试覆盖率等高大上的缘由。而是因为环境上的限制,我无法使用热部署(idea社区版,用的人太少,没法子,自己能力不足研究不了),希望通过单元测试的方式来测试自己写的代码。这就要求一个单元测试类的启动最好能在3秒以内。另外吐槽一下很多写单元测试的博客,丝毫也没有提到实际执行测试需要的时间(不提时间的单元测试都是耍流氓)。知识点mokito这个单元测试,简单来说就是要mock掉方法中所

2020-07-02 09:55:42 1320

原创 第十四课时根据字母表点击实现滚动

原理简介better-scroll 有一个scroll to element 方法字母通过 ref 作为一个元素,然后直接滚动到这个元素点击字母时获取字母,进行滚动点击字母列表时获取字母Alphabet.vue增加字母点击事件<template> <ul class="list"> <li class="item" <!-- 界面增加点击事件handleLetterClick --> @click="handleLette

2020-05-26 22:58:25 125

原创 第十三课时通讯录右侧字母表实现

新建字母表组件Alphabet.vue<template> <ul class="list"> <li class="item" <!-- 动态字母 --> v-for="(item,key) of letters">{{item}}</li> </ul></template><script> export default { name: "Alphabet", props

2020-05-26 01:21:19 193

原创 第十二课时better-scroll 实现区域滚动

安装better-scrollnpm install --save better-scrolllist.vue 对应修改安装好import 一下,在网页挂载完毕后实例化。<script> import Bscroll from 'better-scroll' import {getServerUrl} from '@/config/sys.js' export default { name: "List", props:{

2020-05-25 23:58:55 228

原创 第十一课时通讯录列表前后端调用

phoneBook.vue获取数据除了list,其他的Search等小组件,也是会用到这个列表查询出来的数据。所以我们将这个数据放到 PhoneBook里面去,然后通过标签将查询到的数据传到组件中去。phoneBook.vue :定义数据“phonBooks”->数据赋值->通过标签传值到list组件。<div> <phone-book-header></phone-book-header> <phone-book-search>&l

2020-05-25 20:01:33 239

原创 第十课时通讯录列表后端实现

创建表t_phonebookpublic class PhoneBook { private Integer id; // 编号 private String name; // 姓名 private String phoneNumber; // 手机号码 private String teleNumber; // 电话号码 private String workAddress; // 工作单位地址 private String homeAddre

2020-05-24 22:39:58 241

原创 第九课时 通讯录列表-前端实现

概述组件化界面,三个区域。“通讯录” +符合 - src/pages/components/Header.vue,相对布局:<template> <div class="header"> 通讯录 </div></template><script> export default { name: "Header" }</script><style lang

2020-05-24 22:26:19 453

原创 Postman 使用 -tests result实现登录后设置token

概述登录完成后将token放入设定好的全局变量中,以便于其他请求header中传入token。通过postman的test来实现,test相当于获取测试案例,用来判断返回的数据是否正确。//获取body并解析jsonvar jsonData = JSON.parse(responseBody);//获取属性tokenvar token = jsonData.token;if (token) { tests["Body has token"] = true; //设置到全局变量中去

2020-05-24 17:59:13 880

原创 自动生成实体类和mapper

安装 free-idea-mybatis 插件除了自动生成mapper ,之外还支持从dao跳到xml处,以方便查看sql。增加generatorConfig.xmlresources/generator下增加generatorConfig.xml和 mybatisGenerator.propertiesproperties文件的方式感觉更好一下,方便修改配置:jdbc.driverClass=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://loca

2020-05-24 16:11:41 997

原创 Jenkins自动化部署实践

概述自动部署,就是要在代码提交后完成打包,发布。源码管理(jenkins 会根据这个地址检出源码,每次构建前都会自动检出最新的代码):构建触发器顾名思义,定义什么时候触发构建。自动触发的,没有去研究。手动触发有两种,一种直接在jenkins界面操作,另一种如下:http://localhost:8083/job/phonebook/build?token=aliyu根据这个地址去触发,貌似没什么意义,除非触发构建的人本身不能访问jenkins。Build 构建时构建时输入的maven

2020-05-22 01:27:45 202

原创 Jenkins安装以及基本配置

win下下载win下下载地址:http://ftp.yz.yamagata-u.ac.jp/pub/misc/jenkins/windows-stable/别问为啥用win ,因为win好用,而且我只是测试用。win下安装参考地址:https://blog.csdn.net/qq_29914837/article/details/82779697大部分照步骤一步步就可以了。安装完成,在服务中启动,默认就是自动启动修改端口号:{ F:\StudyTopic\ZLittleSubject\Jen

2020-05-21 23:19:12 171

原创 第八课时jwt token 定时刷新实现

概述基于安全性,由前端定时请求后台刷新token,就类似于游戏令牌。前端定时请求每隔十分钟请求一次。export default { name: "PhoneBook", methods:{ refreshToken(){ let token=window.localStorage.getItem("token") axios.defaults.headers.common['token']=token let url=ge

2020-05-20 22:48:21 1286

原创 第七课时logback日志框架介绍及应用

logback简介logback是java的日志开源组件,是log4j创始人写的,性能比log4j要好,功能比log4j强。日志输出级别 trace > debug > info > warn > errorlogback-spring.xml日志文件超过一定大小拆分、日志文件保留天数、日志文件归档{按日期将以往的日志文件统一整理放置}、当天的放在根目录下。<!-- 时间滚动输出 level为 DEBUG 日志 --> <appender name

2020-05-20 13:11:03 222

原创 记一次jar引入失败的奇葩问题

背景eclipse中有A,B两个项目。现在B需要引入一个jar X,X在A中可以从远处库拉取,在B中不行,只拉下来pom文件等其他文件。A、B项目在同一个工作空间。同步环境,唯一化变量1、同一个工作空间,maven 版本一致3.5.42、同步maven的setting文件以及项目pom文件中对远程仓库的配置。具体分析问题经过上面的同步环境,以及其他以前经历,分析得到:A、B项目都可以访...

2020-03-19 02:03:06 220

原创 虚拟机 离线 静态ip

虚拟机 离线 静态ip背景离线状态下,如果要用xftp连接虚拟机,需要使用“仅主机模式”。但是由于网络变化,会导致ip地址变动(“仅主机模式”自己貌似也会2小时变动一次)修改主机网络配置在“控制面板\网络和 Internet\网络连接”可以看到,“仅主机”模式对应的网络“VMware Network Adapter VMnet1”,更改适配器配置。更改网络适配器配置为静态ip,dn...

2020-03-13 14:42:49 370

搭建ftp服务器

搭建ftp服务器

2017-03-31

Spket安装ext自动提示

内有Spket插件,以及Spket安装和ext自动提示说明

2015-07-01

J2se学习笔记

基于Java1234的J2se课程的学习笔记,内有个人理解,心得,归纳总结。

2015-06-21

空空如也

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

TA关注的人

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