- 博客(66)
- 收藏
- 关注
原创 Spring AOP
目前关于AOP有2种较为成熟的解决方案,一个是Spring AOP,另一个是AspectJ,二者区别是一个采用静态织入一个采用动态织入。
2023-08-31 14:55:59 328
原创 关于Linux的IO模型
select 使用的是BitMaps传递所关心的文件描述符(其实就是一个非负整数,Linux下一切皆文件,使用数字代表相应的文件,这个数字就是文件描述符)。BitsMap默认情况下的大小为1024位,如果想要通过select对某次IO实现多路复用,那么就可以把对应的位置置1。之所以效率低下,是因为内核态与用户态不能直接互相访问内存,这就需要内核与用户之间进行内存复制,影响效率。poll和select的区别就是poll函数放弃了BitsMap改为使用数组(到了内核空间被转成链表存储)来传递关心的文件描述符
2023-08-25 15:23:43 131
原创 SpringBoot一些困惑及梳理
Spring中常用的classpath前缀到底指向哪里? classpath实际就是和java命令行运行时指定的classpath是同一个概念,在idea+maven中也就是指向target/classes目录。不要被网上哪些复制粘贴的文章所迷惑。classpath: 和 classpath*: 到底什么区别? classpath: 实际就是当找到一个符合要求的文件之后就不再寻找,如果是只在当前项目中寻找文件,建议使用这种,后者耗时大。个人猜测: 查找逻辑和ClassLoader.getResource
2023-08-23 16:37:35 222
原创 Jwt原理
加密过程header、payload使用base64算法加密,生成加密后的header和payload,暂记为header_sc,payload_sc,然后使用HMAC256算法做如下处理,HMAC256(header_sc,payload_sc,secret)生成sign签名字段,最后三个字段通过 . 符号拼接即为加密后的字段 header_sc.payload_sc.sign。解密过程通过分割符 . 获取header_sc和payload_sc,然后通过base64解密算法对其进行解密获取对应的
2023-08-22 09:42:51 105
原创 java接口和抽象类修饰符
类的访问控制修饰符无论是普通类还是抽象类还是接口,只有两种方式,要么public,要么默认(什么都不写,表示包权限)方法的访问控制修饰符普通类方法四个都可以使用抽象类方法JDK 1.8以前,抽象类的方法默认访问权限为protected(可以是public和protected)JDK 1.8时,抽象类的方法默认访问权限变为默认访问权限(可以是public和protected或者不写)接口方法JDK 1.8以前,接口中的方法默认,也必须是public的(只能用public)JDK 1.8时,
2021-01-26 20:23:23 2646
原创 使用go mod管理go项目依赖包
在项目根目录下使用go mod init 项目名,将会在根目录下生成go.mod和go.sumgo.mod用于指定依赖包的名称,go.sum用来进行依赖包的安全校验Go语言中GO111MODULE的有3种状态:auto:当项目在$GOPATH/src外且项目根目录有go.mod文件时,开启模块支持;否则,仍然使用GOPATH模式。on:启用模块支持,编译时会忽略GOPATH和vendor文件夹,只根据 go.mod下载依赖off:禁用模块支持,编译时会从GOPATH和vendor文件夹中查找包
2021-01-18 15:21:14 533 1
原创 Git一次完整的上传代码
1.首先,使用 git clone 命令拉取代码到本地仓库。2.把你做的改动放到你所拉取的代码中,然后执行git add命令把代码添加到暂存区,再执行git commit命令把代码添加到本地仓库。3.最后执行git push 命令把代码上传到远程github仓库。...
2020-12-24 18:17:17 359 1
原创 红黑树插入与查找
之前学习过红黑树,今天花时间写一下红黑树,突然发现发明红黑树的人简直就是天才!!!红黑树作者----鲁道夫·贝尔public class RB_tree {//定义结点默认颜色是红色static class TreeNode{ public TreeNode(int value,int index) { this.index=index; this.value=value; } int value = 0; boolean RED = true; TreeNode parent =
2020-12-09 18:17:16 206
原创 java锁
1.java synchronized关键字锁升级java对象数据由3部分组成,对象头,实例数据,对齐数据对象头的markword大小 32bit/64bit对象头的元数据指针大小 32bit/64bit对象如果是数组,那么会有一个数组长度数据32bit因为java强制要求对象大小必须为8字节的整数倍,所以会有一个对齐数据进行填充,但不是必要的首先尝试获取偏向锁,查看对象是否开启了可偏向标志位。其次检查锁对象对应的instanceklass对应偏置位是否开启,如果没开启,表示该类的所有对象都不
2020-08-20 14:40:09 154
原创 多路复用IO ---- select、poll、epoll
select,poll,epoll都是IO多路复用的机制。(1)select==>时间复杂度O(n)select仅仅知道了有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。select适用数组存储流。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用户传入的数组拷贝到内核
2020-08-09 13:40:48 123
原创 AQS源码解析
在以下代码中涉及到java的一个safe类,正如它的名字一样,它是java的一个不安全类,因为它有很多很多本地方法都是涉及到内存操作的,不正确的使用它会造成一些难以发现的错误。 private final boolean compareAndSetHead(Node update) {// CAS方法中的前两个参数是确定待更新数据的内存位置,第三个是预期值,第四个是将被更新为的值// 如果从内存中读出的值和预期的值不同,那么cas失败,否则成功。 return unsafe.compareA
2020-07-30 19:01:37 165
原创 java scanner
next在读取到有效输入之前会跳过无效输入,如空格、tab、回车,next返回的是String类型。nextInt … 读取方法和next相同,但是返回值是相应的类型。nextLine只要遇到回车会返回,但是它和next(Type)方法不同,它只要遇到回车就会结束读取,无论之前有没有读取到有效输入。nextLine会在输入缓冲区中把回车符读取走,但是并不会输出回车符。注意事项 : 在next类方法之后慎重使用nextLine,它很有可能会遇到next类方法遗留下来的回车符而直接结束。...
2020-07-04 12:52:56 131
原创 连通图、连通分量、强连通图、强连通分量、极大连通子图、极小连通子图、极大强连通子图、极小强连通子图
连通图:在无向图中,从任意一个结点出发都能到达任意一个结点,那么称该无向图为连通图。强连通图:在有向图中,从任意一个结点出发都能到达任意一个结点,那么称该有向图为强连通图。连通子图:在无向图中,如果删除这个图的一些边(删除的边数>=0),剩下的部分仍然是连通的,那么称这个图是原图的连通子图。强连通子图:在有向图中,如果删除这个图中的一些边(删除的边数>=0),剩下的部分仍然是连通的,那么称这个图是原图的强连通子图。极大连通子图:如果无向图的连通子图包含它的原图中所有与它自身有关的边,那么
2020-06-12 19:22:49 5392
原创 红黑树的删除操作
红黑树定义: 1. 红黑树的节点不是黑色的就是红色的2. 红黑树的根节点一定是黑色的3. 红黑树的所有叶子节点都是黑色的(注意:红黑树的叶子节点指Nil节点)4. 红黑树任何路径上不允许出现相邻两个红色节点5. 从红黑树的任一节点开始向下到任意叶子节点所经过的黑色节点数目相同删除一个新的节点有以下四种情况:1. 删除的节点是叶子节点(非Nil)2. 删除的节点只有左子树3. 删除的节点只有右子树*4. 删除的节点同时拥有左子树和右子树其实只有上面前三种情况,对于第四种 情况,可以找
2020-05-28 19:19:45 578
原创 AVL树
#include <stdio.h>#include <stdlib.h>typedef struct ND {struct ND * leftchd;struct ND * rightchd;int height;int data;} node;typedef struct QUE {struct ND * cur;struct QUE * next...
2020-03-20 19:34:13 128
原创 BST 二叉搜索树
#include <stdio.h>#include <stdlib.h>#define NUM 16typedef struct ND {struct ND * leftchd;struct ND * rightchd;struct ND * next;int height;int data;} node;typedef node * nodep;...
2020-03-19 14:59:07 73
原创 java源码阅读 ---- AbstractCollection
1.成员MAX_ARRAY_SIZE : intsize()isEmpty()contains()重载的toArray()finishToArray()hugeCapacity()add()remove()containsAll()addAll()removeAll()retainAll()clear()toString()2.重要数据结构无...
2020-03-12 21:17:27 114
原创 goal
研发类:热爱编程,基础扎实,掌握java等主流编程语言,熟悉常用算法及数据结构;扎实的软件知识结构,掌握软件工程,设计模式,数据库系统等专业知识;了解分布式系统设计与开发,系统容灾,高可用系统。...
2020-03-01 16:35:27 185
原创 关键路径算法 ---- C语言
#include<stdio.h>#include<string.h>#define MAX 100#define infinite 100typedef struct graph {int vn;int cost[MAX][MAX];char vertex[MAX];char topo[MAX];int indge[MAX];int ve[MAX];...
2020-02-19 15:21:33 792
原创 floyd算法 ---- C语言
#include<stdio.h>#define MAX 100typedef struct graph {int vn;char vertex[MAX];int edge[MAX][MAX];int cost[MAX][MAX];int route[MAX][MAX];} GH;void floyd(GH *gh);void putpath(GH * gh,in...
2020-02-18 15:19:33 286
原创 kmp算法 ---- C语言
#include<stdio.h>#include<string.h>#define MAX 100void kmp(char source[MAX],char pattern[MAX],int next[MAX]);void getnext(char pattern[MAX],int next[MAX]);int searchnext(char pattern[...
2020-02-16 19:26:09 270
原创 贝尔曼福特算法 ---- C语言实现
#include<stdio.h>#include<string.h>#define MAX 100typedef struct graph {int vn;char vertex[MAX];int cost[MAX][MAX];int edge[MAX][MAX];char route[MAX][MAX];} GH;int upde = 1;in...
2020-02-11 23:13:12 901
原创 迪杰斯特拉算法 -- C语言实现
#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 100typedef struct dj {int vn;char vertex[MAX];int edge[MAX][MAX];int cost[MAX][MAX];char route[MAX][MAX];}...
2020-02-07 19:05:38 1325
原创 广度优先搜索 ---- C语言递归版
#include<stdio.h>#include<stdlib.h>#define MAX 100//图结构typedef struct dj {int vn;char vertex[MAX];int edge[MAX][MAX];} DJ;//图顶点typedef struct node {char vertex;struct node * ne...
2020-02-03 09:59:39 1654
原创 HashMap的indexFor方法
在阅读hashmap源码的时候,遇到了下面的代码://其作用是获取hashmap中某个hash值的下标static int indexFor(int h, int length) { // assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2"; return h & (...
2020-01-15 11:05:25 470
原创 深度优先搜索 — C语言版
思路:找一个入口结点,然后搜索该结点的第一个相邻结点,再搜索该相邻结点的第一个相邻结点,依次往下寻找 … … ,直到所有结点都被遍历到,算法结束,退出。#include<stdio.h>#define MAX 100typedef struct Graph{int vn;char vt[MAX];int edge[MAX][MAX];}df;int size = 1;...
2020-01-12 14:10:27 739
原创 广度优先搜索 — C语言非递归版
思路:依次遍历每一个结点,把该结点加入队列,同时把该结点未被遍历的相邻结点也加入队列中,就这样一直搜索,直到再也无法找到未被遍历的结点,算法结束,退出。#include<stdio.h>#include<stdlib.h>#define MAXNUM 100typedef struct DAG {char vt [MAXNUM];int vertex[MAXNU...
2020-01-12 00:21:00 784
原创 二叉树的顺序存储、先序构造、先序遍历、先序销毁
#include<stdio.h>#include<stdlib.h>typedef struct BT {int data;struct BT * leftchild;struct BT * rightchild;} tree;void create(int bt[],tree *root,int i,int length);void traval(int...
2020-01-01 16:03:07 386
原创 中缀表达式转前缀表达式
中缀表达式转化成前缀表达式和转化成后缀表达式很像,步骤中有几点不同:1.从右往左扫描表达式,中间步骤与转化成后缀表达式相同;2.把最后的输出缓冲区的字符串倒序输出即可;参考:中缀表达式转后缀表达式 https://blog.csdn.net/hnujunjie/article/details/92233578...
2019-12-24 19:59:46 243
原创 C语言的main函数到底该怎么写?
前言main函数是程序启动后执行的第一个自定义函数。从开始学习C语言到现在,我们似乎看到了很多个版本的main函数,那么哪一种才是正确的呢?我们先来看看目前有哪些版本。main函数版本第一种、没有返回值,没有入参:main()在C89标准中,这种写法是可以接受的,但使用现在的编译器编译时,会报告警,并且会将其返回值默认为int。实际上,如果函数没有显式声明返回类型,那么编译器会将返回值默...
2019-12-20 19:46:03 933
原创 C++域作用符::
"::“在C++中表示作用域,和所属关系。”::"是运算符中等级最高的,它分为三种,分别如下:一、作用域符号:作用域符号”::“的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分。例如:A,B表示两个类,在A,B中都有成员member。那么:1、A::member就表示类A中的成员member。2、B::member就表示类B...
2019-12-10 11:04:14 1612
原创 2013年12月CCF试题解答
#include<stdio.h>#include<string.h>int main() { void record(int a[],int b[],int n); int seekMax(int a[],int n);int number = 0;scanf("%d",&number);int original[1200];int flag[1...
2019-12-04 21:35:31 218
原创 C语言include使用区别
1.#include< > #include< > 引用的是编译器的类库路径里面的头文件。 假如你编译器定义的自带头文件引用在 C:\Keil\c51\INC\ 下面,则 #include<stdio.h> 引用的就是 C:\Keil\c51\INC\stdio.h 这个头文件,不管你的项目在什么目 录里, C:\Keil\c51\INC\st...
2019-11-14 12:22:19 241
原创 MySQL schema
MySQL中schema和database是同义词;oracle中schema是database的一部分,表示the tables and other objects owned by a single user;SQL Server中database是一个大仓库;schema是仓库中的厂房,user是厂房总管;table和函数、存储过程、触发器等其他对象是厂房内的物品;...
2019-11-09 09:44:22 549
原创 MySQL存储过程及函数
1.存储过程delimiter $drop procedure if exists p1create procedure p1(idn varchar(30))beginselect name from t1where id = idn;end;delimiter ;2.函数delimiter $drop function if exists f1create funct...
2019-11-07 12:50:35 117
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人