自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

原创 git命令

在git中有三级配置,按级别高低从高到低分别是system(系统级)、global(全局级)、local(仓库级),对于同名配置项,-u参数用于设置默认推送的上游仓库分支,否则每次推送都要指明远程仓库。

2024-03-07 14:14:42 543

原创 python笔记(二)——类和对象

【代码】python笔记(二)——类和对象。

2023-06-06 17:46:30 423

原创 python笔记(一)

【代码】python笔记(一)

2023-06-02 22:13:20 510

原创 git使用

一、常用命令二、分支命令三、远程库命令

2023-04-19 14:18:30 78

原创 微服务(五)—— 服务注册中心Consul

【代码】微服务(五)—— 服务注册中心Consul。

2023-02-16 17:38:46 117

原创 微服务(四)—— 服务注册中心Zookeeper

【代码】微服务(四)—— 服务注册中心Zookeeper。

2023-02-16 11:53:06 97

原创 微服务(三)——服务注册中心Eureka

创建多个模块作为Eureka Server端。创建多个模块作为服务提供者。

2023-02-16 11:43:14 34

原创 Anaconda使用

1. 用途用于管理python环境。2. 下载地址https://www.anaconda.com/products/individual3. 安装安装好后会多以下几个程序Anaconda Navigtor :用于管理工具包和环境的图形用户界面,后续涉及的众多管理命令也可以在 Navigator 中手工实现。Jupyter notebook :基于web的交互式计算环境,可以编辑易于人们阅读的文档,用于展示数据分析的过程。qtconsole :一个可执行 IPython 的仿终端图形界面

2021-12-20 20:03:46 377

原创 Oracle回滚

误操作闪回1、开启误操作表的行移动设置ALTER TABLE table_name ENABLE row movement;2、执行闪回// 法一flashback table table_name to timestamp to_timestamp('2021-12-20 12:55:00','yyyy-mm-dd hh24:mi:ss');// 法二 闪回到1小时前insert into table_name(select * from table_name as of times

2021-12-20 18:55:15 610

原创 统一认证,单点登录

1、单点登录的三种实现方式1.1 以cookie作为凭证缺点:cookie不安全由于cookie只针对单个域,所以无法跨域访问1.2 jsonp方式此种方式可解决第一种方法中无法跨域免登的问题。什么是jsonp:web页面可以加载放在任意站点的js、css、图片等资源,不会受到"跨域"的影响。既然可以调用第三方站点的js,那么如果我们将数据放到第三方站点的js中不就可以将数据带到客户端了吗?JSONP(JSON with Padding(填充))是JSON的一种“使用模式”,可用于

2021-10-18 15:48:20 4201

原创 微服务(二)——服务注册中心Eureka

一、什么是EurekaEureka是spring cloud中的一个负责服务注册与发现的组件。功能类似于Dubbo的注册中心,如zk。基于Rest。遵循AP原则。C:一致性、A:可用性、P:分区容错性,三个无法同时满足二、基本思想Eureka采用C/S架构,EurekaServer作为服务注册功能的服务器,他是服务注册中心。系统中的其他服务,使用EurekaClient连接到EurekaServer并维持心跳连接,EurekaServer以此来监控系统中的各个微服务是否正常运行,Eu

2021-08-17 14:15:39 123

原创 微服务学习(一)

一、微服务的4个核心问题客户端如何访问服务服务与服务之间如何通信服务如何治理服务挂了怎么解决二、解决方案Spring Cloud NetFlix(一站式解决方案)api网关,zuul组件Feign(http通信,会同步、阻塞)服务注册发现:Eureka熔断机制:HystrixDubbo Zookeeper(非一站式,需整合别人的东西)api:第三方组件或自己实现RPC通信Zookeeper管理服务借助HystrixSpring Cloud Alibaba(一

2021-08-16 17:38:13 66

原创 Mysql性能优化点

1. 索引失效全值匹配我最爱最佳左前缀法则如果索引了多列,要遵守最左前缀法则。具体是指,查询的where条件从索引的最左前列开始并且不跳过索引的中间列不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效存储引擎不能使用索引中范围条件右边的列尽量使用覆盖索引(索引列和查询列一致),减少select *using index 不会回表using index condition 会回表mysql中在使用不等于(!=、< >)的时候无法

2021-02-23 20:43:15 95

原创 Mysql索引和性能分析

1. 索引分类单值索引:一个索引只包含单个列,一张表可以有多个单列索引唯一索引:索引列的值必须唯一,但允许空值复合索引:一个索引包含多个列基本语法创建CREATE [UNIQUE] INDEX [indexName] ON table_name(column);删除DROP INDEX [indexName] ON mytable查看SHOW INDEX FROM table_name\G2.适合创建索引的情况主键自动建立唯一索引频繁作为查询条件的字段应该创建索引查询

2021-02-22 19:56:12 182

原创 AQS源码的不完全分析

一、 AQS中队列元素的部分重要属性 static final class Node { /**共享结点 */ static final Node SHARED = new Node(); /** 独占节点 */ static final Node EXCLUSIVE = null; /** 因为超时或中断,结点被设置为取消状态,被取消的结点不会参与竞争,取消状态不会被改变 */ static final

2021-02-20 22:57:54 72

原创 CAS

1. 什么是CASCAS全称CpmpareAndSwap,比较并交换。CAS操作包含三个参数——内存位置(V)、旧的期望值(A)、新值(B),如果内存位置的值与A一致,则用新值代替。值得一提的是该操作是具有原子性的。2. Java中支持的CAS操作 // 修改引用类型的属性 public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object var5); //修改int类型的

2021-02-19 15:43:34 86

原创 JVM笔记(三)—— Java内存模型与线程

1. 什么是Java内存模型Java内存模型(JMM)设计的目的是为了保证Java程序在各种平台下都能无视硬件和操作系统差异,保证程序访问内存的一致性。JMM规定一切变量存储于主内存当中,每个工作线程都有一个属于自己的工作内存。工作内存中保存了被该线程使用到的变量的主内存副本拷贝。线程对变量的操作只能发生在工作内存当中,而不能直接读写主内存中的变量。不同线程无法直接访问其他线程的工作内存,线程之间变量值的传递需通过主存过渡。2. 主内存与工作内存的交互2.1 交互操作JMM定义了以下8中操作

2021-02-16 23:31:48 63

原创 JVM笔记(二) —— GC中垃圾收集算法以及垃圾收集器

一、GC算法思想1. 新生代的GC新生代中的对象特点:存活率低1.1 标记-清除算法算法步骤对新生代中的对象进行标记(标记算法上一篇提到过)对标记的对象进行清除问题:空间碎片化标记和清除的效率不高1.2 复制算法将新生代内存分为1块较大的Eden空间和2块较小的Survivor空间,HotSpot默认E:S的大小比例为8:1。新生代对象每次使用整个Eden空间和1块Survivor空间。算法步骤:对新生代中的对象进行标记(同上)回收时,将Eden和Survivo

2021-02-10 21:42:58 120 1

原创 JVM笔记——对象的创建以及GC中对象存活的判定(一)

1、JVM中对象的创建(仅限于普通对象,不包含数组和Class对象等)遇到new指令时,去常量池定位相应类的符号引用检查该符号引用是否被加载、解析和初始化过若2检查不通过,则去加载相应的类加载过后为新生对象分配内存,内存分配有以下两种方式指针碰撞:前提是堆中内存绝对规整,即用过的内存放在一边,未用过的放在一边,中间放着一个指针作为分界点空先列表:若堆中内存不规整则可采用此种方式,虚拟机维护一个空闲内存列表分配内存可能会引发线程的安全问题,有以下两种方案:堆内存分配动作进行同步操

2021-02-07 23:42:30 146

原创 泛型

1. 基础理解1.1 定义泛型接口、类可将List<E>理解为一种特殊类型泛型的实质:允许在定义接口、类时声明泛型形参,泛型形参可在整个接口、类内部使用。如以下代码:public class Apple<T> { private T info; //构造器不需要加泛型 public Apple(){} public Apple(T info){ this.info = info; } public T g

2021-02-05 23:12:07 50

原创 类加载机制

1.类的加载、连接和初始化当程序需要使用某个类,但该类还未加载到内存时,系统会通过加载、连接和初始化三个步骤来对该类进行初始化。一般来说,这三个步骤会一气呵成,所以有时也把这三个步骤统称为类加载或类初始化。1.1 类的加载类加载指的是将该类的class文件读入内存,并为之创建一个java.lang.Class对象类的加载由类加载器完成,类加载器一般有JVM提供,开发者也可通过继承ClassLoader基类来自定义。1.2 类的连接该阶段负责把类的二进制数据合并到JRE中。类连接可分为如下三个

2021-02-01 16:02:41 65

原创 并查集

1. 简介并查集(Union Find)也叫做不相交集合并查集有两个核心操作查找(Find):查找元素所在集合合并(Union):将两个元素所在集合合并为一个集合两种常见实现思路QuickFind:查找 —— O(1),合并 —— O(n)QuickUnion(常用):查找 —— O(logn)可优化至O(5),合并 —— O(logn)可优化至O(5)2. 并查集如何存储数据以存储整形数据为例,可以用数组实现并查集。比如数组的索引表示数据,值代表所属集合。3. 实现

2021-01-31 10:22:10 291

原创 I/O(三)—— AIO

一、I/O的划分I/O操作可分为两步:程序发出I/O请求完成实际的I/O操作针对第一步我们将I/O分为阻塞I/O(BIO)和非阻塞I/O。针对第二步,依据I/O操作是由应程序本身去执行,还是委托给操作系统去执行,然后将结果返回给应用程序,我们可以将I/O划分为同步I/O和异步I/O(AIO)。前面介绍的传统I/O、基于Channel的非阻塞I/O实际都是同步I/O。二、同步、异步和阻塞、非阻塞的组合三、AIO的使用服务器端的使用调用open()方法创建AsynchronousServ

2021-01-28 19:09:42 182

原创 I/O(二)—— NIO

一、NIO概述IO是阻塞的,NIO是非阻塞式的IO是面向流的(一次处理一字节,效率不高),NIO是面向块的IO是单线程的,NIO 是通过选择器来模拟多线程的NIO在基础的IO流上发展处新的特点,分别是:内存映射技术,字符及编码,非阻塞I/O和文件锁定。Channel(通道)和Buffer(缓冲)是NIO中的两个核心对象。Channel类似于传统IO中的流对象,其与InputStream和OutputStream最大的区别在于它提供了一个map()方法,通过该map()实现将一块数据直接映射

2021-01-25 21:49:18 325

原创 对象序列化

一、什么是序列化序列化是指将Java对象转化为与平台无关的二进制流,这些字节序列可以永久的保存在磁盘上或通过网络传输传到其他网络节点。如果某个类是可序列化的,则该类必须实现以下两个接口之一:SerializableExternalizable二、对象的序列化使用对象流实现序列化创建ObjectOutputStream。该流是一个处理流需要建立在其他节点流的基础之上。调用ObjectOutoutStream的writeObject()方法输出可序列化对象。反序列化步骤创建

2021-01-25 16:35:51 389

原创 I/O(一)

一、前言Java当中的I/O流使用了装饰器模式,他将I/O流分为底层节点流和上层处理流,其中节点流和底层的物理节点直接关联——不同的物理节点获取结点流的方式可能存在一定差异,但Java把不同的节点流包装成统一的处理流,从而允许程序使用统一的输入输出代码来读取不同物理存储节点的资源。二、理解I/O流输入、输出流都是从内存的角度划分的。字符流和字节流的用法几乎完全一样。区别在于所操作的数据单元不同——字节流操作的数据单元是8位的字节,字符流操作的数据单元是16位的字符。字节流主要以InputStre

2021-01-24 21:46:48 207 1

原创 SpringBoot Web开发(四)

视图解析原理流程目标方法处理的过程中,所有数据都会被放在 ModelAndViewContainer 里面。包括数据和视图地址方法的参数是一个自定义类型对象(从请求参数中确定的),把他重新放在 ModelAndViewContainer任何目标方法执行完成以后都会返回 ModelAndView(数据和视图地址)。processDispatchResult 处理派发结果(页面改如何响应)render(mv, request, response); 进行页面渲染逻辑根据方法的String返回

2021-01-11 21:46:32 214

原创 SpringBoot Web开发(三)

数据响应与内容协商1.响应JSON1.1 jackson.jar+@ResponseBody <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> //web场

2021-01-08 13:35:31 80

原创 SpringBoot Web开发(二)

1.普通参数与基本注解注解:@PathVariable(路径变量) @GetMapping("/car/{id}") public Map<String,Object> getUser(@PathVariable int id){ return null; }@RequestHeader(获取请求头)@ModelAttribute@RequestParam(获取请求参数) //http://127.0.0.1:8080/pet?p

2021-01-07 14:17:28 50

原创 SpringBoot Web开发(一)

1. 静态资源访问静态资源目录上图为部分源码只要静态资源放在类路径下:/static,/public,/resources,/META-INF/resources访问:当前项目根路径/ + 静态资源名http://127.0.0.1:8080/photo.png原理:静态映射 /**请求进来,先去找Controller映射,如若不能处理则交给静态处理器处理,静态资源也找不到则报404。静态资源访问前缀配置之后此后访问静态资源需要加一个前缀,默认无前缀。使用上述配置后

2021-01-04 20:57:30 97

原创 SpringBoot随手一记(一)

SpringBoot学习(一)一、Maven依赖 <!-- 引入父项目依赖,包含了所需大部分jar包的版本号(版本仲裁)等 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version&gt

2020-12-31 16:13:30 81

原创

一、简介是一种树状的数据结构常见的堆有:1. 二叉堆(完全二叉堆,其逻辑结构就是一棵完全二叉树)2. 多叉堆3. 索引堆4. 二项堆5. 斐波那契堆6. 左斜堆性质1. 任意节点的值总是 >= 或 <= 子节点的值2. 如果任意结点的值 >= 子节点的值,则称为大根堆或最大堆3. 如果任意结点的值 <= 子节点的值,则成为小根堆或最小堆4. 上一层的值不一定全都大于下一层的值。二、二叉堆(数组存放,最大堆为例)数组索引的规律(n是元素数量)

2020-07-31 19:09:45 163

原创 B树学习

一、什么是B树B树又称多路平衡搜索树,多用于文件系统或数据库的实现。B树有如下特点:结点中可以含有多个元素,且这些元素是有序的。拥有某些搜索二叉树的性值,比如红框中的元素均大于33,蓝框中的元素介于18到33之间。每个结点可以有多棵子树。平衡,所有结点的平衡因子为0。B树的阶数为所有结点中孩子数的最大值,图中的树即为3阶B树。二、m阶(m >= 2)B树的性质假设一个结点存储的元素个数为x。根结点中存储的元素个数:1 <= x <= m-1非根结点,存储的元素

2020-07-25 21:29:28 205

原创 课程表

思路1:BFS  分析题目可知,某些选修课程是有选秀前提的,即必需要先完成某门课程。我们可以将课程之间的关系用有向无环图表示,判断是否可能学完所有课程就意味着这个图中不能有环,试想如果课程A与课程B构成一个环,那么他们就互为彼此的先修课程,显然这是不对的。  下面介绍一下拓扑排序,拓扑排序是针对有向无环图而言的,是一个由有向无环图中的所有顶点组成的序列,这个序列有以下要求:  1. 每个顶点在序列当中且只能出现一次。  2. 若顶点A在序列中,且在B之前,那么在图中不可能存在一条由B到A的路径。.

2020-07-24 21:09:26 105

原创 二叉树展开为链表

思路一将每个结点的右子树插到其左子树的最右边的位置,然后将左子树换到右子树的位置,将左子树置空。class Solution { public void flatten(TreeNode root) { if(root==null) return; while(root!=null){ if(root.left==null){ root=root.right; }else{ .

2020-07-12 22:58:33 68

原创 二叉树的遍历

思路:遍历二叉树使用递归的方式是比较简单、清晰的,但是这种方法会导致性能的下降,这是因为每次在调用函数时需要为当前函数保存现场,为新调用的函数申请空间,同时如果我们忘记设置递归结束条件还会引起内存栈的溢出。这里讲述的方法是使用迭代的方法实现递归的工作流程。首先递归的本质实际上是压栈,即在又一次调用自身之前,向栈中压入当前函数的状态。我们可以建立辅助栈模拟压栈,对于二叉树的遍历顺序而言,我们要考虑结点入栈的顺序,因为栈先进后出的工作特点,所以向栈中压入结点的顺序直接影响到了我们的访问顺序。而且注意

2020-07-12 10:03:24 72

原创 由前序和中序序列构造二叉树

思路:在前序序列中找根结点,利用根结点将中序序列分成两部分(分别是左、右子树)。然后找到左子树的根结点和右子树的根结点,然后再将中序序列已经分好的两部分进行分割,一直递归下去,直到没有子树存在。class Solution { HashMap<Integer,Integer> map=new HashMap<>(); int[] po; public TreeNode buildTree(int[] preorder, int[] inorder) .

2020-07-11 23:05:08 2350

原创 把二叉搜索树转化为累加树

思路:二叉搜索树是一棵有序树,其任意根结点的值大于其左结点,且小于右结点的值,需要注意的是本题中所有结点都是严格大于或小于的。基于搜索二叉树的这个性质我们容易想到,要找大于任意根结点的值只需找其右子树,我们可以管理一个全局变量用于记录大于当前结点的所有结点的累加和,并且使用右-根-左的方式对二叉树进行遍历。//递归class Solution { int sum=0; public TreeNode convertBST(TreeNode root) { if(roo.

2020-07-09 22:11:14 150

原创 合并二叉树

思路:同时对两棵树进行递归,递归过程中可能出现的情况有以下几种:当前两个结点有一个为空一个不为空,则此时返回不为空的结点,无需再进行递归。当前两个结点均不为空,则新建一个结点作为根结点,其值为当前两个结点的和。然后对这个新的根结点进行递归,创建其左、右子树。若当前两个结点均为空,则返回null。class Solution { public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { if(t1==null||t2=.

2020-07-08 10:57:18 238

原创 反转一棵二叉树

思路:首先按层访问二叉树,反转每个结点的左、右子树即可。我们可以使用队列完成按层访问的目的//迭代实现class Solution { public TreeNode invertTree(TreeNode root) { TreeNode p=root; if(root==null) return root; LinkedList<TreeNode> queue=new LinkedList<>()

2020-07-04 21:38:34 168

空空如也

空空如也

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

TA关注的人

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