- 你的笑容就是天上的太阳,温暖我和妈妈的内心
- 寒寒,妈妈爱你,晚安
spring framework中进行AOP编程
通过注解实现面向切片编程的核心步骤
- 定义注解
- 实现解析注解的代码
- 使用注解
定义注解
声明的方式
- 对于JavaType.java文件,我们常用的是用来声明类(class)或接口(interface)
1 | public class JavaType{ |
或者
1 | public interface JavaType{ |
这里我们使用@interface来定义一个annnotation注解
1 | public JavaType{ |
在@interface上使用注解
@Target注解
- 用来声明注解的使用目标,常见@Target的值有:ElementType.Method用于方法,ElementType.Type用于类型(包括java类、接口、注解), ElementType.Parameter用于方法参数,还有更多枚举可以从ElementType中找到具体定义
1 |
|
@Retention注解
- 使用有道词典翻译是保持力的名词意思,此注解的@Target声明的是ANNOTATION_TYPE,用于为注解类型提供声明
- @Retention配置的值从RetentionPolicy.java枚举中选择,可选值为SOURCE,CLASS,RUNTIME
- SOURCE定义的注解保留在源代码中,不编译到Class中去,如@Override和@SuppressWarnings注解使用本策略
- CLASS定义的注解会保留到class文件,但是运行期间不会识别此注解
- RUNTIME定义的注解会被保留到class文件中,同时运行期间也会被识别,AOP中使用的注解一般情况下使用本策略
@Documented
- 用于javadoc的一个注解,声明注解时使用了本注解时,在到处javadoc时,在javadoc中就能看到目标的注解声明
在一个注解中定义方法
- 定义一:基本使用,使用default关键字
1 | import java.lang.annotation.*; |
- 使用一
1 | public class Test{ |
- 关键字default指定默认值,默认值必须是与元素的数据类型兼容的类型
- 定义二: 使用枚举
1 | import java.lang.annotation.*; |
- 使用二
1 | import java.lang.annotation.RetentionPolicy; |
- 定义三:使用数组
1 | import java.lang.annotation.*; |
- 使用三
1 | import java.lang.annotation.ElementType; |
Git教程
git知识
- git everyday
- Git doc入口
- git安装后的配置
- git通过init命令创建一个git仓库
- git add为代表的git操作
- git checkout为代表的git分支相关操作
- git pull为代表的git与远程仓库交互的操作
- git log为代表的git检视命令
- cherry-pick为代表的git补丁相关的命令
- CI里会用到的git hook
Git快速上手
- git的仓库:Github、gitee、腾讯云Coding等等
- 【fork按钮】fork代码到自己的namespace
- 【git clone】从仓库下载代码到本地:git clone https://github.com/JavaProgrammerLB/spring-framework.git
- 【git status】查看未修改的代码
- 【git add -A】添加修改
- 【git commit -m “修改处理逻辑”】提交
- 【git push】推送
.gitignore
1 | # 忽略单个文件 |
Git分支相关命令
- 【列出本地分支】git branch
- 【列出所有分支】git branch -a
- 【创建分支】git branch dev
- 【切换分支】git checkout dev
- 【创建并切换到分支】git checkout -b bug_fix
- 【把本地新建分支推送到远程的新分支】git push origin bug_fix
- 【分支合并】git merge master
工作区、暂存区、分支
- 【工作区】本地
- 【暂存区】git add readme.txt
- 【分支】git commit -m “新增readme”
将暂存区文件恢复到工作区
- git add a.txt
- git add b.txt
- git reset HEAD
- 【或】git reset HEAD a.txt
Git远程仓库
- 【查看远程仓库】git remote
- 【查看远程仓库和url】 git remote -v
- 【增加远程仓库】git remote add upstream https://github.com/spring-projects/spring-framework.git
- 【从远程仓库拉代码】git pull upstream main
- 【把本地代码push到origin仓库】git push origin
从git init命令开始的流程
- 【本地创建】init
1 | mkdir git_repo |
- 【创建空远程仓库】https://github.com/JavaProgrammerLB/git_repo.git
- 【绑定】
1 | git remote add origin https://github.com/JavaProgrammerLB/git_repo.git |
- 【本地提交】写代码、创建好.gitignore文件
1 | git add .gitignore |
Kubernetes教程
关键词
- pods、label、annotation、namespace
kubectl get
- kubectl get pods
1 | kubectl get pods --show-labels |
- kubectl get pods -L creation_method, env
- kubectl get pods -l creation_method=manual
- kubectl get pods -l env
- kubectl get pods -l ‘!env’
- kubectl get pods -l creation_method!=manual
- kubectl get pods -l env in (prod, dev)
- kubectl get pods -l env notin (prod, dev)
- kubectl get pods -l app=pc, rel=dev
- kubectl get nodes
- kubectl get services
- kubectl get secrets
- kubectl get namespaces
- kubectl get pods –namespace kube-system
kubectl run
- kubectl run nginx –image=nginx
- kubectl run k8s-tutorial-node –image yitianyigexiangfa/k8s_node_hello_world:1.0
- kubectl run k8s-tutorial-node –image yitianyigexiangfa/k8s_node_hello_world:1.0 –port=8080
kubectl delete
- kubectl delete pods k8s-tutorial-node
- kubectl delete pods -l creation_method=manual
- kubectl delete namespaces custom-namespaces
- kubectl delete secrets regsecret
- kubectl delete rs kubia –cascade=false
kubectl create
- kubectl create deployment demo –image=yitianyigexiangfa/springboot-k8s-tutorial –dry-run=client -o=yaml > deployment.yaml
- kubectl create service clusterip demo –tcp=8080:8080 –dry-run=client -o=yaml >> deployment.yaml
- kubectl create namespace custom-namespace
kubectl apply
- kubectl apply -f deployment.yaml
kubectl port-forward
1 | kubectl port-forward svc/demo --address=0.0.0.0 8080:8080 |
kubectl config
- kubectl config set-context kube-system-ctx –cluster=k8s-cluster1 –user=kubectl –namespace=kube-system
kubectl logs
- kubectl logs k8s-tutorial-node
- kubectl logs k8s-tutorial-node -c redis
kubectl label
- kubectl label pods k8s-tutorial-node creation_method=manual
- kubectl label pods k8s-tutorial-node env=prod –overwrite
kubectl annotation
- kubectl annotation pods k8s-tutorial-node myCompany.com/someAnnotaion=”foo bar”
kubectl edit
- kubectl edit replicationcontroller kubia
kubectl scale
- kubectl scale rc kubia –replicas=3
kubectl exec
1 | kubectl exec k8s-tutorial-fortune -c html-generator -- cat /var/htdocs/index.html |
Docker教程
docker 命令列表
- docker build
- docker run
- docker network
- docker exec
- docker inspect
- docker tag
- docker login
- docker ps
- docker stop
- docker images
- docker rmi
- docker search
- docker pull
- docker push
Dockerfile关键词列表
- FROM
- VOLUME
- ARG
- ENV
- ADD
- COPY
- EXPOSE
- WORKDIR
- ENTRYPOINT
- USER
- CMD
- RUN
docker build命令执行示例
1 | docker build -t hexo_docker:1.0.1 --no-cache . |
docker run命令执行示例
1 | docker run hexo_docker:1.0.1 |
docker 命令执行示例
1 | docker exec -it ${容器ID} /bin/bash |
docker ps
1 | docker ps |
docker rm ${容器ID}
- 删除容器
docker rmi ${镜像ID}
- 删除镜像
docker tag
- docker tag : 标记本地镜像,将其归入某一仓库
- docker tag demo:0.0.1-SNAPSHOT yitianyigexiangfa/springboot-k8s-tutorial:1.0
docker search
1 | docker search nginx |
docker pull
1 | docker pull yitianyigexiangfa/k8s_tutorial_fortune:1.0 |
docker push
1 | docker push yitianyigexiangfa/k8s_tutorial_fortune:1.0 |
docker hub
- 类似于github里有存了很多开源代码,docker hub里存了很多开放的容器
- 例如redis在docker hub的地址是这样的
Dockerfile例子
1 | FROM java:8 |
java并发集合
常用并发集合
- ConcurrentLinkedDeque;非阻塞式列表
- LinkedBlockingDeque;阻塞式列表
- LinkedTransferQueue;用于数据生成或消费的阻塞式列表
- PriorityBlockingQueue;按优先级排序列表元素的阻塞式列表
- DelayQueue;带有延迟列表元素的阻塞式列表
- ConcurrentSkipListMap;非阻塞式可遍历映射
- ThreadLocalRandom;随机数字
- AtomicLong、AtomicIntegerArray;原子实现类
业务类
- 继承或实现声明
- 类属性
- 构造方法
- main方法
- override的方法
- 私有方法
队列常见的操作
- add
- size
- poll
- get
- take(获取并移除)
- remove
- peek
队列常见单词
- first
- last
优先级
如何优先,需要通过实现Comparable接口,提供compareTo方法
延迟
Delayed接口,实现compareTo方法,getDelay方法