自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 mysql索引

1. MySQL数据库为什么要使用B+TREE作为索引的数据结构?1.1 二叉树为什么不可行对数据的加速检索,首先想到的就是二叉树,二叉树的查找时间复杂度可以达到O(log2(n))。下面看一下二叉树的存储结构:二叉树搜索相当于一个二分查找。二叉查找能大大提升查询的效率,但是它有一个问题:如果我们现在的数据只包含1, 2, 3, 4,就相当于链表,相当于全表扫描。2.2 平衡二叉树为什么不可行为了解决二叉树存在线性链表的问题,会想到用平衡二叉查找树来解决。下面看看平衡二叉树是

2021-03-04 11:11:08 195 1

原创 分布式系统中我们面临的问题

一致性问题分布式系统中的一致性指应用系统的一致性和数据的一致性。多个系统之间互相通信,就有可能遇到例如:(1) 调用超时:系统A调用系统B超时,系统A得到超时反馈,但不确定系统B是否已经处理结束,就会造成不一致。(2) 掉单:系统A和系统B分别为对方的上下游,如果系统A中存在一个订单,而系统B中不存在,就会导致掉单。(3) 缓存与数据库的不一致:面对海量的访问请求,我们经常会需要在数据库前加一层缓存,这个缓存与数据库之间如何保证一致性。CAP定理CAP定理,指的是在一个分布式系统中...

2021-03-02 16:56:34 481

原创 spriongboot常用注解

1、@SpringBootApplication这个注解是Spring Boot最核心的注解,用在 Spring Boot的主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。实际上这个注解是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的组合。由于这些注解一般都是一起使用,所以Spring Boot提供了一个统一的注解@SpringBootApplication。2、@EnableAuto

2021-01-06 17:15:16 393

转载 springboot Methodinterceptor原理

MethodInterceptor是AOP项目中的拦截器(注:不是动态代理拦截器),区别与HandlerInterceptor拦截目标时请求,它拦截的目标是方法。实现MethodInterceptor拦截器大致也分为两种:(1)MethodInterceptor接口;(2)利用AspectJ的注解配置;MethodInterceptor接口:import org.aopalliance.intercept.MethodInterceptor;import org.aopallianc

2021-01-06 16:01:25 2575 2

转载 java反射

反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释。一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。Apple apple = new Apple(); //直接初始化,「正射」apple.setPrice(4);上面这样子进行类对象的初始化,我们可以理解为「正」。而反射则是一开始并不知道我要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。这时候,我们使用 JDK 提供的

2020-12-28 15:50:50 127

转载 自定义容器初始化器的三种方式,实现ApplicationContextInitializer接口

ApplicationContextInitializer的实现类用于spring在刷新容器之前,加载完上下文之后的一个回调函数,并且会将ConfigurableApplicationContext实例传递过来,让我们开发者可以根据一些上下文做一些定制化的操作。该实现类可以通过注解**@Order**指定执行顺序,值越小,优先级越高。首先我们先实现ApplicationContextInitializer接口package com.osy.initializer;import org.spri

2020-12-28 14:45:28 122

原创 二分查找

正常实现Input : [1,2,3,4,5]key : 3return the index : 2public int binarySearch(int[] nums, int key) { int l = 0, h = nums.length - 1; while (l <= h) { int m = l + (h - l) / 2; if (nums[m] == key) { return m;

2020-12-27 14:28:48 91

原创 JVM------内存管理

1、java内存区域与内存溢出异常1.1、程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。1.2、java虚拟机栈与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stack)也是线程私有的,它的生命周期与.

2020-12-05 21:50:20 71

原创 集群中数据库主从同步

数据库集群,读写分离现在可以说是项目必备的了,但是我们如何保证其每个数据库的数据一致性?1半同步复制 简单的说就是: 主库发生增删改操作的时候,会等从库及时复制了并且通知了主库, 才会把这个操作叫做成功. 优点:保证数据一致性 缺点:就是会慢专业的讲: 半同步复制,是等待其中一个从库也接收到Binlog事务并成功写入Relay Log之后,才返回Commit操作成功给客户端;如此半同步就保证了事务成功提交后至少有两份日志记录,一份在主库Binlog上,另一份在从库的Rel...

2020-12-04 11:06:36 701

原创 拜占庭将军问题

漫画:什么是拜占庭将军问题?转载自:程序员小灰什么是拜占庭将军问题?在很久很久以前,拜占庭是东罗马帝国的首都。那个时候罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信使传递消息。在打仗的时候,拜占庭军队内所有将军必需达成一致的共识,才能更好地赢得胜利。但是,在军队内有可能存有叛徒,扰乱将军们的决定。这时候,在已知有成员不可靠的情况下,其余忠诚的将军需要在不受叛徒或间谍的影响下达成一致的协议。莱斯利·兰伯特(Leslie...

2020-12-02 17:05:03 220

原创 spring注解原理

1、四大元注解1.1、@Target:元素种类,指示注解类型所适用的程序元素的种类。由 ElementType 限定。 ElementType.TYPE:注解到接口、类、枚举、注解上 ElementType.FIELD:注解到属性字段、枚举的常量上 ElementType.METHOD:注解到方法上 ElementType.PARAMETER:注解到方法参数上 ElementType.CONSTRUCTOR:注解到构造方法上 ElementType.LOCAL_VARIA.

2020-11-25 16:51:02 234

原创 将本地项目上传到github、gitlab

1、配置公钥私钥ssh。2、初始化 git init。3、将本地git和服务器上的连接git remote add origin https://gitlab.duxiaoman-int.com/financial-microservice/licai-chek-db若提示 fatal: remote origin already exists. 输入git remote rm origin。4、git add . (.代表所有 可用文件名代替. 上传某个文件)5、...

2020-11-23 16:12:42 109

原创 Linux常用命令

1、netstat -ntlp 查看服务器所有端口2、netstat-ntln|grep8083 查看对应端口的进程3、kill-9进程id 杀死进程4、sz-bay mac上传文件到服务器,前提是安装好了rz,sz命令。

2020-11-20 17:17:11 198

原创 Mybaties

#{}与${}的区别可以简单总结如下:#{}将传入的参数当成一个字符串,会给传入的参数加一个双引号 ${}将传入的参数直接显示生成在sql中,不会添加引号 #{}能够很大程度上防止sql注入,${}无法防止sql注入...

2020-11-17 15:03:51 112

原创 二叉树的遍历

1.1、中序遍历,非递归,用栈class Solution { public List<Integer> inorderTraversal(TreeNode root) { if(root == null) return new ArrayList<>(); List<Integer> ans = new ArrayList<>(); Stack<TreeNode> stack = ne

2020-11-09 22:19:26 62

原创 小程序总结

1、养护信息查询public void mtInfo(MtInfoReqVo vo, Result res) { settingApiLimitDomain.apiLimitCountDown(); //记录用户调用次数,次数限制 //多个jdcarId取一个。数据库中根据jdcarId查询养护信息,数据库中十几万数据。 MtResVo mtResVo = mtInfoDomain.selectAllMtInfo(vo.getJdcarId().get(0)

2020-10-30 19:00:55 131

原创 java面试宝典

1、String能不能被继承?它的底层原理又是怎样的?public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the s

2020-10-29 10:58:38 155

原创 回溯算法

1、含有相同元素求排列问题 public void dfs(List<List<Integer>> ans,List<Integer> list,int[] nums,boolean[] visit){ if(list.size()==nums.length) { ans.add(new ArrayList<Integer>(list));return ; } for(int i=0...

2020-10-27 09:56:29 72

原创 git 操作及常见命令

1、删除本地分支,并重新拉取git branch -D mastergit fetch在项目所在的本地文件夹中执行命令从一个或多个其他存储库中获取分支和/或标签(统称为“引用”)以及完成其历史所必需的对象。 远程跟踪分支已更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。...

2020-10-23 11:00:44 69

转载 TCP详解

1. 概述1.1 传输层的意义网络层可以把数据从一个主机传送到另一个主机,但是没有和进程建立联系。传输层就是讲进程和收到的数据联系到一起,使数据能够为应用服务所以说传输层是主机才有的层次1.2 传输层的两个协议1.3 传输层的寻址和端口端口号只用于计算机分辨本地进程,总共有2^16=65536种端口号,端口号有很多种,不能随便使用1.3.1 常见的应用程序端口号2. UDP协议2.1 UDP概述注释:因为UDP一次发送一个完整报文不会分片,所以需要应用层传输

2020-10-21 19:06:43 781

原创 spring中用到的设计模式

JDK 中用到了那些设计模式?Spring 中用到了那些设计模式?这两个问题,在面试中比较常见。我在网上搜索了一下关于 Spring 中设计模式的讲解几乎都是千篇一律,而且大部分都年代久远。所以,花了几天时间自己总结了一下,由于我的个人能力有限,文中如有任何错误各位都可以指出。另外,文章篇幅有限,对于设计模式以及一些源码的解读我只是一笔带过,这篇文章的主要目的是回顾一下 Spring 中的常见的设计模式。Design Patterns(设计模式) 表示面向对象软件开发中最好的计算机编程实践。 Sprin

2020-10-19 10:46:03 422

原创 spring基础知识及面试

什么是 Spring 框架?Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 官网:spring.io/。我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是:核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。比如:Core Container 中的 Core 组件是Spring 所有组件的核心,Beans 组件和 Context

2020-10-18 22:04:31 97 2

原创 spring中bean生命周期

Bean 容器找到配置文件中 Spring Bean 的定义。 Bean 容器利用 Java Reflection API 创建一个Bean的实例。 如果涉及到一些属性值 利用 set()方法设置一些属性值。 如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName()方法,传入Bean的名字。 如果 Bean 实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoader对象的实例。 如果Be

2020-10-18 21:52:11 206

原创 spring IOC详解(依赖倒置原则)

要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle )。什么是依赖倒置原则?假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这里就出现了一个“依赖”关系:汽车依赖车身,车身依赖底盘,底盘依赖轮子。这样的设计看起来没问题,但是可维护性却很低。假设设计完工之后,上司却突然说根据市场需求的变动,要我们把..

2020-10-18 21:12:00 1973 2

原创 多线程之共享模型

一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区1、synchronized解决方案为了避免临界区的竞态条件发生,有多种手段可以达到目的。阻塞式的解决方案:synchronized,Lock非阻塞式的解决方案:原子变量本次课使用阻塞式的解决方案:synchronized,来解决上述问题,即俗称的【对象锁】,它采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】,其它线程再想获取这个【对象锁】时就会阻塞住。这样就能保证拥有锁的线程可以安全的执行临界区内的代码,不用担心.

2020-10-17 21:53:56 310

原创 多线程之两阶段终止模式及interrupt详解

优雅的打断另一个线程,并让其料理后事interrupt能打断sleep、wait、join。注意:sleep被打断产生的异常(InterruptedException )会将打断标志设为false。package cn.itcast.test;import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "c.TwoPhaseTermination")public class Test13 { public static void main(

2020-10-17 15:44:28 371

原创 数据清洗

2020-10-16 18:35:05 68

原创 第一章--------java线程原理

一、原理之线程运行1、栈与栈帧 Java Virtual Machine Stacks (Java 虚拟机栈) 我们都知道 JVM 中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟机就会为其分配一块栈内存。 每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法。2、线程上下文切换(Thread Context Switch)因为以下一些原...

2020-10-15 21:21:50 180

原创 Mysql索引(面试)

1索引概念、索引模型我们是怎么聊到索引的呢,是因为我提到我们的业务量比较大,每天大概有几百万的新数据生成,于是有了以下对话:Q:每天几百万数据,一个月就是几千万了,那你们有没有对于查询做一些优化呢?A:我们在数据库中创建了一些索引(我现在非常后悔我当时说了这句话)Q:那你能说说什么是索引吗?A:索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据Q:那么索引具体采用的哪种数据结构呢?A:常见的MySQL主要有两种结构:Hash索引和B+ Tree索引,我们使用的是Inn.

2020-10-15 18:06:37 90

转载 计算机网络面试总结

1. 基础知识1.1 3种常见的计算机体系结构划分OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP分层(4层):网络接口层、网际层、运输层、应用层。五层协议(5层):物理层、数据链路层、网络层、运输层、应用层。每一层的作用如下:物理层:激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体。物理层的任务就是透明地传送比特流。 数据链路层:数据链路层在不可靠的物理介质上提供可靠的传

2020-10-15 17:24:30 611 1

原创 Redis之bitmap、setbit

基本语法:1)SETBIT<span style="color:#000000"><code>redis 127.0.0.1:6379> setbit KEY_NAME OFFSET VALUE //该命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。时间复杂度O(1)</code></span>1  在redis中,存储的字符串都是以二进制的形式存在的。比如:设置一个key-value,键的名字叫“andy”

2020-10-10 23:32:16 834

转载 Kafka如何实现每秒上百万的高并发写入?

Kafka是高吞吐低延迟的高并发、高性能的消息中间件,在大数据领域有极为广泛的运用。配置良好的Kafka集群甚至可以做到每秒几十万、上百万的超高并发写入。那么Kafka到底是如何做到这么高的吞吐量和性能的呢?这篇文章我们来一点一点说一下。一、页缓存技术 + 磁盘顺序写首先Kafka每次接收到数据都会往磁盘上去写,如下图所示:那么在这里我们不禁有一个疑问了,如果把数据基于磁盘来存储,频繁的往磁盘文件里写数据,这个性能会不会很差?大家肯定都觉得磁盘写性能是极差的。没错,...

2020-10-10 20:00:43 439

原创 创建线程的方式

Java中创建线程主要有四种方式,分别是:【a】直接通过继承Thread类,实现(重写)run()方法;【b】实现Runnable接口,实现run()方法;【c】通过实现Callable接口,实现call()方法,结合FutureTask创建线程;【d】通过线程池创建,主要使用ExecutorService、Executors等一、通过继承Thread方式* 说明:* 1. 调用start()方法启动线程,不要调用run(),调用run()相当于普通方法调用.* 2. ...

2020-10-10 19:58:02 176

原创 HTTP与HTTPS的区别

HTTP与HTTPS的区别 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。  为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来...

2020-10-10 16:21:23 112

原创 网络层(IP)

1. 概述注释:数据报和分组的关系:分组是一段比较长的数据,将它进行切割成一段段之后就得到数据报功能一就是让数据在路由器之间走最佳的路径功能二就是让不同的设备(手机,电脑,平板等)都能正常连接功能三见图中解释开环控制就是在拥塞之前就提前设计解决闭环控制就是在拥塞时自动调整解决问题OSI参考模型 各层次的传输单元 应用层 报文 传输层 报文段 网络层 IP数据报,分组(如果IP数据报太大就切割成分组) 数据链路层 帧 物理层 比特流

2020-09-29 22:40:37 1093

原创 实习面试集合

1.第四范式Java开发一面1.类加载机制2.一个对象new出来的加载过程(算是对上一道题的提示)3.类加载器的作用4.双亲委派机制5.介绍项目(面试没听懂数据方面)6.springboot的注解优点7.一道算法题:​ 给定一个根节点,判断是不是平衡二叉树8.对业务是否有兴趣2.第四范式Java开发二面(无算法题)问项目,理清项目流程hive和mysql语句上的区别介绍下hive和ck表说一下docker生成镜像的过程(没有答出)有几种生成线程池的方法,线程池的参数含义

2020-09-29 18:30:17 390

原创 排序算法总结

1、快速排序private void quickSort(int[] a, int begin, int end){ if(begin>end) return; int k = a[begin]; int i=begin; int j=end; while(i<j){ while(a[j]>=k&&i<j) j--; if(i<j) a[i++] = a[j];...

2020-09-29 10:40:20 72

原创 redis数据类型、基本操作、概念

Redis目前支持5种数据类型,分别是:String(字符串) List(列表) Hash(字典) Set(集合) Sorted Set(有序集合)1. String(字符串)String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。应用场景St

2020-09-29 09:39:30 76

原创 抽象类和接口的区别?为什么要有

抽象类(abstract class):使用abstract修饰符修饰的类。官方点的定义就是:如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。实际点来说,一个抽象类不能实例化,因为“没有包含足够多的信息来描述一个具体的对象”。但终归属于类,所以仍然拥有普通类一样的定义。依然可以在类的实体(直白点就是能在{}里面)定义成员变量,成员方法,构造方法等。那么可能初学者会问:既然不能实例化,那么在类里面定义成员方法,成员变量有什么用。抽象类在实际应用中,更多的是因为类中有抽象

2020-09-27 10:14:55 730

原创 装饰模式

Intent为对象动态添加功能。Class Diagram装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也保留了被装饰者的功能。可以看到,具体组件应当是装饰层次的最低层,因为只有具体

2020-09-25 09:53:31 109

空空如也

空空如也

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

TA关注的人

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