maven
Maven 概念依赖管理+项目构建
依赖管理
自动引入依赖并且解决依赖的依赖关系
项目构建
演化:Make -> Ant -> Maven ->Gradle
批量编译
组织文件结构
批量复制jar包
……
安装与配置
确认java环境已经安装好
将maven压缩包解压到一个文件夹下
配置M2_HOME或者MAVEN_HOME为maven文件夹
将maven文件夹中的bin目录配置到path中
cmd mvn -v验证
本地仓配置 localRepository
镜像配置 mirror
构建项目java版本配置 profile
Maven目录结构为什么要遵守如果我们想让框架知道我们设置了一些东西,那么有两种办法:
用配置的方式
遵守框架的约定
约定 》 配置 》 编码
目录结构
根目录:工程名
src目录:源码
pom.xml:Maven工程的核心配置文件
main目录:存放主程序
test目录:存放测试程序
java目录:存放java源文件
resource目录:存放框架或其他工具的配置文件
仓库
插件
Maven的核心程 ...
Quartz
基本概念Job指定任务的具体内容
Trigger指定执行的策略
Scheduler调度器,用于将Job和Trigger整合
入门案例引入依赖
123456<!--quartz--><dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>
job
123456789public class MyJob implements Job { static int count = 0; @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { System.out.println(" ...
java
内部类相关静态与非静态的底层待研究
静态内部类可以在除外部类以外的类中实例化,比如Builder模式
非静态的内部类只能在外部类中实例化,且只能在非静态方法中实例化,
非静态内部类可以声明静态变量,也可以在静态块中被声明,但无法同时被实例化
内部接口默认都是静态的且必须是静态的
匿名内部类和局部变量的关系lambda的实现与匿名内部类有关系,简单地说,匿名内部类可能会比它所在的方法的存活时间还长,这样的话,他想要调用的局部变量会因为方法的结束出栈而消失,则会出现问题,故如果需要使用局部变量,需要是final的(如果不是final,编译器在编译的时候会变为final,如果在匿名内部类使用之后对该变量做修改,则编译不通过),这样匿名内部类会复制一份改局部变量与自己共同存活。
内部类的访问修饰符private修饰的内部类及其中嵌套的private内部类能且只能在其所属的外部类及其包含的所有内部类中访问
12345678910111213141516@Componentpublic class TreeService { public static FileTree fil ...
OrangeFrame
系统结构parent依赖版本管理
auth进行认证
用户名密码匹配
账户失效判断
将用户角色存入redis
common
公用工具类
共用实体类
除此之外还有自动配置等
gateway网关,进行鉴权
rbac进行rbac信息的增删改查
数据结构设计RBACuser
数据库中字段
id
username
password
enabled
account_non_expired
account_non_locked
credentials_non_expired
实体类中字段
roleList 角色列表
role// 从redis中查看当前角色中有无当前api,若无,则查看有无parent,递归查找,都没有则返回false
关于角色递归
使用递归形式的角色保存可以减少后期查询次数,但如果派生角色和基础角色都为递归形式,则会出现无限递归的情况。
例如,b为a的派生角色,则a的派生列表中是有b的,但b的基础角色中又会存在a,如此便会形成递归,造成溢出. 故这两个列表中只能有一个是递归的形式。
经过考虑,将基础角色做递归处理,派生角色不做,因为基础角色也属于是 ...
gateway
StripPrefix优先级自定义的全局过滤器(实现GlobalFilter接口)优先级再高,也会在StripPrefix之后执行,所以到达全局过滤器时的路径已经是被截取之后的
网关组成路由转发接受外界请求,通过网关的路由转发,转发到后端的服务器上
过滤器容错,限流等
解决方案zuulNetflix 不更新了
gatewayspring自己推出
名词解释Route路由,gateway核心,route包含路由规则,路由校验,过滤处理,容错处理
Predicate谓词, 路由规则,简单的校验逻辑
Filter过滤器,增加自定义功能
其中,predicate 与 filter 的区别主要在于,predicate 作用为判断那些请求为当前路由要处理的请求,filter 为对当前处理的请求所做的处理
配置基础配置1234567891011121314spring: cloud: gateway: discovery: locator: # 配置处理机制 # 只要请求地址符合规则: http://gatewayIP:gatewayPort/微服务名称/微服务请 ...
experience
JSON多以fastjson为例
*注意:jdk1.8之前的版本(不包括1.8)需要使用fastjson 1.的版本,与其后版本不兼容
json字符串转为json对象一个将json字符串转为json对象并将其中的json数组取出并处理的例子
1234567891011// 将json字符串转为json对象 JSONObject originalJsonObject = JSONObject.parseObject(originalJsonString); // 获取json数组 JSONArray array = originalJsonObject.getJSONArray("jsonArray"); // 遍历处理 JSONArray targetArray = new JSONArray(); for (int i = 0; i < array.size(); i++) { JSONObject jsonObject = array.getJSONObject(i); JSONObject tar ...
JavaUtilsClass
json匹配123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134import com.alibaba.fastjson2.JSONArray;import com.alibaba.fastjson2.JSONObject;import java.util.*;public class JsonModifyUtil { /** * 存放模板路径的集合 */ static HashSet<String> frame ...
SpringCloud
发现的一些问题启动闪退spring cloud client客户端需要引入web环境依赖,否则启动后会自动停止
nacos无法识别服务名服务名不能有下划线
gateway “Service Unavailable”Springcloud2020弃用了ribbon, Alibaba在2021版本nacos中删除了Ribbon的jar包。因此无法通过lb路由到指定微服务,出现了503的情况
需要引入
1234<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
Module的复制复制一个server module,将其中冲突的地方重命名
打开项目管理, 将复制的module以maven工程的身份导入当前项目:
CAPCAP原则:C(Consistency):一致性A(Availablitity):可用 ...
SpringBoot
配置相关配置注入实体类
编写实体类
123456public class AppConfig { String appId; String apigwPublicKey; String priKey; String baseUrl;}
参数注入需要set方法,所以加上@Data注解
交由Spring管理当前对象,添加@Component注解
或在启动类添加@EnableConfigurationProperties({实体类class})
设置前缀,添加@ConfigurationProperties(prefix = “app”)注解
在配置文件进行配置
12345app: appId: 123 apigwPublicKey: 456 priKey: 789 baseUrl: 0
使用,在需要用到的类@Autowired AppConfig即可
配置提示引入依赖
123456<!--自定义配置处理器--><dependency> <groupId>org.spring ...
gdb
参考资料手把手教你拆解 CSAPP 的 炸弹实验室 BombLab - 知乎 (zhihu.com)
打开gdb中的历史记录使用命令
1echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit
但在layout regs和layout asm下无法使用
运行
gdb bomb:使用gdb调试可执行文件bomb
r:run,运行程序,遇到断点时停止
c:continue,继续执行,到下一个断点停止
q:quit,退出gdb调试
si:单指令执行,每次只执行一条指令
n:next,单步跟踪程序,遇到函数调用时,不会进入函数体内部
s:step,单步调试,遇到函数调用时,会进入函数体内部
until:运行到退出循环体
until + 行号:运行至行号处
设置断点
b n:break n,在第n行设置断点
b func:在函数func的入口处设置断点
b *地址:在地址处设置断点如b *0xffff
i b:info b,显示当前程序的断点设置情况,会给出各个断点的断点号 ...